moai-adk 0.15.0__py3-none-any.whl → 0.25.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (417) hide show
  1. moai_adk/__init__.py +1 -2
  2. moai_adk/__main__.py +85 -2
  3. moai_adk/cli/__init__.py +0 -1
  4. moai_adk/cli/commands/__init__.py +0 -1
  5. moai_adk/cli/commands/analyze.py +127 -0
  6. moai_adk/cli/commands/backup.py +5 -3
  7. moai_adk/cli/commands/doctor.py +35 -11
  8. moai_adk/cli/commands/improve_user_experience.py +348 -0
  9. moai_adk/cli/commands/init.py +150 -23
  10. moai_adk/cli/commands/language.py +269 -0
  11. moai_adk/cli/commands/migrate.py +158 -0
  12. moai_adk/cli/commands/status.py +13 -12
  13. moai_adk/cli/commands/update.py +364 -60
  14. moai_adk/cli/commands/validate_links.py +118 -0
  15. moai_adk/cli/main.py +3 -2
  16. moai_adk/cli/prompts/init_prompts.py +79 -82
  17. moai_adk/core/__init__.py +0 -1
  18. moai_adk/core/analysis/__init__.py +9 -0
  19. moai_adk/core/analysis/session_analyzer.py +439 -0
  20. moai_adk/core/claude_integration.py +421 -0
  21. moai_adk/core/command_helpers.py +270 -0
  22. moai_adk/core/config/__init__.py +6 -0
  23. moai_adk/core/config/auto_spec_config.py +346 -0
  24. moai_adk/core/config/migration.py +133 -12
  25. moai_adk/core/context_manager.py +279 -0
  26. moai_adk/core/diagnostics/slash_commands.py +0 -1
  27. moai_adk/core/error_recovery_system.py +1289 -0
  28. moai_adk/core/git/__init__.py +0 -1
  29. moai_adk/core/git/branch.py +0 -1
  30. moai_adk/core/git/branch_manager.py +4 -4
  31. moai_adk/core/git/checkpoint.py +1 -5
  32. moai_adk/core/git/commit.py +0 -1
  33. moai_adk/core/git/event_detector.py +3 -5
  34. moai_adk/core/git/manager.py +0 -1
  35. moai_adk/core/hooks/post_tool_auto_spec_completion.py +925 -0
  36. moai_adk/core/integration/__init__.py +22 -0
  37. moai_adk/core/integration/engine.py +169 -0
  38. moai_adk/core/integration/integration_tester.py +225 -0
  39. moai_adk/core/integration/models.py +88 -0
  40. moai_adk/core/integration/utils.py +211 -0
  41. moai_adk/core/issue_creator.py +28 -18
  42. moai_adk/core/language_config.py +202 -0
  43. moai_adk/core/language_validator.py +556 -0
  44. moai_adk/core/mcp/setup.py +113 -0
  45. moai_adk/core/migration/__init__.py +18 -0
  46. moai_adk/core/migration/backup_manager.py +208 -0
  47. moai_adk/core/migration/file_migrator.py +218 -0
  48. moai_adk/core/migration/version_detector.py +143 -0
  49. moai_adk/core/migration/version_migrator.py +228 -0
  50. moai_adk/core/performance/__init__.py +6 -0
  51. moai_adk/core/performance/cache_system.py +318 -0
  52. moai_adk/core/performance/parallel_processor.py +116 -0
  53. moai_adk/core/project/__init__.py +0 -1
  54. moai_adk/core/project/backup_utils.py +2 -7
  55. moai_adk/core/project/checker.py +3 -3
  56. moai_adk/core/project/detector.py +20 -40
  57. moai_adk/core/project/initializer.py +42 -17
  58. moai_adk/core/project/phase_executor.py +415 -58
  59. moai_adk/core/project/validator.py +6 -25
  60. moai_adk/core/quality/__init__.py +1 -1
  61. moai_adk/core/quality/trust_checker.py +64 -110
  62. moai_adk/core/quality/validators/__init__.py +1 -1
  63. moai_adk/core/quality/validators/base_validator.py +1 -1
  64. moai_adk/core/rollback_manager.py +993 -0
  65. moai_adk/core/session_manager.py +667 -0
  66. moai_adk/core/spec/confidence_scoring.py +749 -0
  67. moai_adk/core/spec/ears_template_engine.py +1182 -0
  68. moai_adk/core/spec/quality_validator.py +721 -0
  69. moai_adk/core/spec_status_manager.py +488 -0
  70. moai_adk/core/template/__init__.py +0 -1
  71. moai_adk/core/template/backup.py +41 -1
  72. moai_adk/core/template/config.py +11 -12
  73. moai_adk/core/template/languages.py +0 -1
  74. moai_adk/core/template/merger.py +79 -22
  75. moai_adk/core/template/processor.py +614 -40
  76. moai_adk/core/template_engine.py +36 -27
  77. moai_adk/foundation/git/commit_templates.py +565 -0
  78. moai_adk/foundation/trust/trust_principles.py +725 -0
  79. moai_adk/foundation/trust/validation_checklist.py +1678 -0
  80. moai_adk/statusline/__init__.py +38 -0
  81. moai_adk/statusline/alfred_detector.py +107 -0
  82. moai_adk/statusline/config.py +364 -0
  83. moai_adk/statusline/enhanced_output_style_detector.py +364 -0
  84. moai_adk/statusline/git_collector.py +190 -0
  85. moai_adk/statusline/main.py +228 -0
  86. moai_adk/statusline/metrics_tracker.py +78 -0
  87. moai_adk/statusline/renderer.py +327 -0
  88. moai_adk/statusline/update_checker.py +135 -0
  89. moai_adk/statusline/version_reader.py +647 -0
  90. moai_adk/templates/.git-hooks/pre-commit +66 -0
  91. moai_adk/templates/.git-hooks/pre-push +116 -4
  92. moai_adk/templates/.github/workflows/moai-gitflow.yml +1 -7
  93. moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
  94. moai_adk/templates/.gitignore +44 -0
  95. moai_adk/templates/.mcp.json +22 -0
  96. moai_adk/templates/CLAUDE.md +450 -1071
  97. moai_adk/utils/__init__.py +0 -1
  98. moai_adk/utils/banner.py +0 -1
  99. moai_adk/utils/common.py +308 -0
  100. moai_adk/utils/link_validator.py +249 -0
  101. moai_adk/utils/logger.py +4 -9
  102. moai_adk/utils/safe_file_reader.py +210 -0
  103. moai_adk/utils/user_experience.py +531 -0
  104. moai_adk-0.25.4.dist-info/METADATA +2279 -0
  105. moai_adk-0.25.4.dist-info/RECORD +112 -0
  106. moai_adk/core/tags/__init__.py +0 -86
  107. moai_adk/core/tags/ci_validator.py +0 -463
  108. moai_adk/core/tags/cli.py +0 -283
  109. moai_adk/core/tags/generator.py +0 -109
  110. moai_adk/core/tags/inserter.py +0 -99
  111. moai_adk/core/tags/mapper.py +0 -126
  112. moai_adk/core/tags/parser.py +0 -76
  113. moai_adk/core/tags/pre_commit_validator.py +0 -393
  114. moai_adk/core/tags/reporter.py +0 -956
  115. moai_adk/core/tags/tags.py +0 -149
  116. moai_adk/core/tags/validator.py +0 -897
  117. moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
  118. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
  119. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
  120. moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
  121. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
  122. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
  123. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
  124. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
  125. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
  126. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
  127. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
  128. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -392
  129. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
  130. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
  131. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
  132. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
  133. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1525
  134. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -802
  135. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -709
  136. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1009
  137. moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
  138. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
  139. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +0 -136
  140. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
  141. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
  142. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
  143. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
  144. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
  145. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
  146. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
  147. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
  148. moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +0 -271
  149. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
  150. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +0 -749
  151. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
  152. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
  153. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
  154. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
  155. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
  156. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
  157. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
  158. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
  159. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
  160. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +0 -161
  161. moai_adk/templates/.claude/settings.json +0 -144
  162. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
  163. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
  164. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
  165. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
  166. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
  167. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
  168. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
  169. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
  170. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
  171. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
  172. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
  173. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
  174. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  175. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  176. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  177. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
  178. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
  179. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
  180. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  181. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  182. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  183. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
  184. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
  185. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
  186. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  187. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  188. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  189. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
  190. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
  191. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
  192. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  193. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  194. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  195. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
  196. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
  197. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
  198. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
  199. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
  200. moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
  201. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
  202. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
  203. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
  204. moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
  205. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
  206. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
  207. moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
  208. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
  209. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
  210. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
  211. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
  212. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
  213. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
  214. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
  215. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
  216. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
  217. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
  218. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
  219. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  220. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  221. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  222. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  223. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  224. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  225. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
  226. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
  227. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
  228. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  229. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  230. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  231. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +0 -288
  232. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  233. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  234. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  235. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  236. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  237. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  238. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  239. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  240. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  241. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  242. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  243. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  244. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  245. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  246. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  247. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  248. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
  249. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
  250. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
  251. moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
  252. moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
  253. moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  254. moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
  255. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  256. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  257. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  258. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  259. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
  260. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  261. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
  262. moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
  263. moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
  264. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
  265. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
  266. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  267. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
  268. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
  269. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
  270. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  271. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  272. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
  273. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
  274. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
  275. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +0 -290
  276. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
  277. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
  278. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  279. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  280. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  281. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  282. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  283. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  284. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +0 -123
  285. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
  286. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
  287. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  288. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  289. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  290. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +0 -128
  291. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
  292. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
  293. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  294. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  295. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  296. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  297. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  298. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  299. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  300. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  301. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  302. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  303. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  304. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  305. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  306. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  307. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  308. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  309. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  310. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  311. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  312. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  313. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  314. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  315. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  316. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  317. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
  318. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  319. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  320. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  321. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  322. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  323. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  324. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  325. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  326. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  327. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  328. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  329. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  330. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  331. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  332. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  333. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  334. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  335. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  336. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  337. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  338. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
  339. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  340. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  341. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
  342. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  343. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  344. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  345. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  346. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  347. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
  348. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
  349. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
  350. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
  351. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
  352. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
  353. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  354. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  355. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  356. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
  357. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
  358. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
  359. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
  360. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  361. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  362. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
  363. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
  364. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
  365. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
  366. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  367. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  368. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
  369. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  370. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  371. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
  372. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
  373. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
  374. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
  375. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
  376. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
  377. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  378. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  379. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  380. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  381. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  382. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  383. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
  384. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
  385. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
  386. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
  387. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
  388. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
  389. moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
  390. moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
  391. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
  392. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
  393. moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
  394. moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
  395. moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
  396. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
  397. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
  398. moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
  399. moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
  400. moai_adk/templates/.github/workflows/release.yml +0 -118
  401. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
  402. moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
  403. moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
  404. moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
  405. moai_adk/templates/.github/workflows/tag-report.yml +0 -269
  406. moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
  407. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
  408. moai_adk/templates/.moai/config.json +0 -115
  409. moai_adk/templates/workflows/go-tag-validation.yml +0 -30
  410. moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
  411. moai_adk/templates/workflows/python-tag-validation.yml +0 -42
  412. moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
  413. moai_adk-0.15.0.dist-info/METADATA +0 -3079
  414. moai_adk-0.15.0.dist-info/RECORD +0 -365
  415. {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/WHEEL +0 -0
  416. {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/entry_points.txt +0 -0
  417. {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/licenses/LICENSE +0 -0
@@ -1,802 +0,0 @@
1
- ---
2
- skill_name: moai-design-systems
3
- description: Design system patterns, W3C DTCG 2025.10 token architecture, WCAG 2.2 accessibility standards, and Figma MCP workflows for consistent, accessible UI development
4
- allowed_tools: [Read, Write, WebFetch, WebSearch]
5
- freedom_level: medium
6
- version: 1.0.0
7
- last_updated: 2025-11-04
8
- tags: [design-systems, design-tokens, accessibility, wcag, figma-mcp, dtcg]
9
- ---
10
-
11
- # Design Systems Development Skill
12
-
13
- **Purpose**: Guide implementation of production-ready design systems using W3C DTCG 2025.10 token standards, WCAG 2.2 accessibility compliance, and Figma MCP automation workflows.
14
-
15
- **When to use this Skill**:
16
- - Setting up design token architecture for multi-platform projects
17
- - Implementing accessible component libraries (WCAG 2.2 AA/AAA)
18
- - Automating design-to-code workflows with Figma MCP
19
- - Building maintainable design systems with Storybook
20
- - Ensuring color contrast compliance and semantic token naming
21
-
22
- **Latest Standards** (as of November 2025):
23
- - **DTCG Specification**: 2025.10 (first stable version)
24
- - **WCAG Guidelines**: 2.2 (AA: 4.5:1 text, AAA: 7:1 text)
25
- - **Figma MCP**: Desktop + Remote server support
26
- - **Style Dictionary**: 4.0 (DTCG-compatible)
27
- - **Storybook**: 8.x (with Docs addon)
28
-
29
- ---
30
-
31
- ## Progressive Disclosure Structure
32
-
33
- ### Level 1: Quick Start Overview (Read This First)
34
-
35
- **Design System Foundation** - Three Pillars:
36
-
37
- 1. **Design Tokens** (Single Source of Truth)
38
- - Color, typography, spacing, borders, shadows
39
- - Semantic naming: `color.primary.500`, `spacing.md`, `font.heading.lg`
40
- - Multi-theme support (light/dark modes)
41
- - Format: W3C DTCG 2025.10 JSON or Style Dictionary 4.0
42
-
43
- 2. **Component Library** (Atomic Design Pattern)
44
- - Atoms → Molecules → Organisms → Templates → Pages
45
- - Props API for reusability and composition
46
- - Variant states: default, hover, active, disabled, error, loading
47
- - Documentation: Storybook with auto-generated props/usage
48
-
49
- 3. **Accessibility Standards** (WCAG 2.2 Compliance)
50
- - Color contrast: 4.5:1 (AA), 7:1 (AAA) for text
51
- - Keyboard navigation: Tab order, focus management
52
- - Screen readers: ARIA roles, labels, live regions
53
- - Motion: `prefers-reduced-motion` support
54
-
55
- **Tool Ecosystem Quick Reference**:
56
-
57
- | Tool | Version | Purpose | Official Link |
58
- |------|---------|---------|---------------|
59
- | **W3C DTCG** | 2025.10 | Design token specification | https://designtokens.org |
60
- | **Style Dictionary** | 4.0+ | Token transformation engine | https://styledictionary.com |
61
- | **Figma MCP** | Latest | Design-to-code automation | https://help.figma.com/hc/en-us/articles/32132100833559 |
62
- | **Storybook** | 8.x | Component documentation | https://storybook.js.org |
63
- | **axe DevTools** | Latest | Accessibility testing | https://www.deque.com/axe/devtools/ |
64
- | **Chromatic** | Latest | Visual regression testing | https://chromatic.com |
65
-
66
- **Decision Points Checklist**:
67
-
68
- - [ ] Choose token format: DTCG 2025.10 or Style Dictionary 4.0 (both compatible)
69
- - [ ] Target WCAG level: AA (4.5:1) or AAA (7:1) contrast
70
- - [ ] Component pattern: Atomic Design or alternative structure
71
- - [ ] Documentation tool: Storybook, zeroheight, or custom
72
- - [ ] Figma integration: MCP server (desktop vs remote)
73
- - [ ] Testing strategy: Visual regression + accessibility + interaction
74
-
75
- ---
76
-
77
- ### Level 2: Implementation Patterns (How to Build)
78
-
79
- #### Pattern 1: Design Token Architecture (DTCG 2025.10)
80
-
81
- **Token Structure** - Semantic Naming Convention:
82
-
83
- ```json
84
- {
85
- "$schema": "https://tr.designtokens.org/format/",
86
- "$tokens": {
87
- "color": {
88
- "$type": "color",
89
- "primary": {
90
- "50": { "$value": "#eff6ff" },
91
- "100": { "$value": "#dbeafe" },
92
- "500": { "$value": "#3b82f6" },
93
- "900": { "$value": "#1e3a8a" }
94
- },
95
- "semantic": {
96
- "text": {
97
- "primary": { "$value": "{color.gray.900}" },
98
- "secondary": { "$value": "{color.gray.600}" },
99
- "disabled": { "$value": "{color.gray.400}" }
100
- },
101
- "background": {
102
- "default": { "$value": "{color.white}" },
103
- "elevated": { "$value": "{color.gray.50}" }
104
- }
105
- }
106
- },
107
- "spacing": {
108
- "$type": "dimension",
109
- "xs": { "$value": "0.25rem" },
110
- "sm": { "$value": "0.5rem" },
111
- "md": { "$value": "1rem" },
112
- "lg": { "$value": "1.5rem" },
113
- "xl": { "$value": "2rem" }
114
- },
115
- "typography": {
116
- "$type": "fontFamily",
117
- "sans": { "$value": ["Inter", "system-ui", "sans-serif"] },
118
- "mono": { "$value": ["JetBrains Mono", "monospace"] }
119
- },
120
- "fontSize": {
121
- "$type": "dimension",
122
- "sm": { "$value": "0.875rem" },
123
- "base": { "$value": "1rem" },
124
- "lg": { "$value": "1.125rem" },
125
- "xl": { "$value": "1.25rem" }
126
- }
127
- }
128
- }
129
- ```
130
-
131
- **Multi-Theme Support** (Light/Dark Mode):
132
-
133
- ```json
134
- {
135
- "color": {
136
- "semantic": {
137
- "background": {
138
- "$type": "color",
139
- "default": {
140
- "$value": "{color.white}",
141
- "$extensions": {
142
- "mode": {
143
- "dark": "{color.gray.900}"
144
- }
145
- }
146
- }
147
- }
148
- }
149
- }
150
- }
151
- ```
152
-
153
- **Style Dictionary Configuration** (v4.0+):
154
-
155
- ```javascript
156
- // style-dictionary.config.js
157
- export default {
158
- source: ['tokens/**/*.json'],
159
- platforms: {
160
- css: {
161
- transformGroup: 'css',
162
- buildPath: 'build/css/',
163
- files: [{
164
- destination: 'variables.css',
165
- format: 'css/variables'
166
- }]
167
- },
168
- js: {
169
- transformGroup: 'js',
170
- buildPath: 'build/js/',
171
- files: [{
172
- destination: 'tokens.js',
173
- format: 'javascript/es6'
174
- }]
175
- }
176
- }
177
- };
178
- ```
179
-
180
- #### Pattern 2: Atomic Design Component Structure
181
-
182
- **Folder Hierarchy**:
183
-
184
- ```
185
- src/design-system/
186
- ├── tokens/ # Design tokens (DTCG format)
187
- │ ├── color.json
188
- │ ├── typography.json
189
- │ └── spacing.json
190
- ├── components/
191
- │ ├── atoms/ # Basic building blocks
192
- │ │ ├── Button/
193
- │ │ │ ├── Button.tsx
194
- │ │ │ ├── Button.stories.tsx
195
- │ │ │ ├── Button.test.tsx
196
- │ │ │ └── index.ts
197
- │ │ ├── Input/
198
- │ │ └── Icon/
199
- │ ├── molecules/ # Simple combinations
200
- │ │ ├── FormField/
201
- │ │ ├── SearchBar/
202
- │ │ └── Card/
203
- │ ├── organisms/ # Complex sections
204
- │ │ ├── Header/
205
- │ │ ├── Footer/
206
- │ │ └── DataTable/
207
- │ └── templates/ # Page layouts
208
- │ ├── DashboardLayout/
209
- │ └── AuthLayout/
210
- └── styles/
211
- ├── global.css
212
- └── theme.css
213
- ```
214
-
215
- **Component Props API** (Reusability Pattern):
216
-
217
- ```typescript
218
- // atoms/Button/Button.tsx
219
- import { forwardRef } from 'react';
220
- import { cva, type VariantProps } from 'class-variance-authority';
221
-
222
- const buttonVariants = cva(
223
- 'inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50',
224
- {
225
- variants: {
226
- variant: {
227
- primary: 'bg-primary-500 text-white hover:bg-primary-600',
228
- secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300',
229
- outline: 'border border-gray-300 bg-transparent hover:bg-gray-100',
230
- ghost: 'hover:bg-gray-100',
231
- danger: 'bg-red-500 text-white hover:bg-red-600'
232
- },
233
- size: {
234
- sm: 'h-8 px-3 text-sm',
235
- md: 'h-10 px-4 text-base',
236
- lg: 'h-12 px-6 text-lg'
237
- }
238
- },
239
- defaultVariants: {
240
- variant: 'primary',
241
- size: 'md'
242
- }
243
- }
244
- );
245
-
246
- export interface ButtonProps
247
- extends React.ButtonHTMLAttributes<HTMLButtonElement>,
248
- VariantProps<typeof buttonVariants> {
249
- isLoading?: boolean;
250
- }
251
-
252
- export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
253
- ({ className, variant, size, isLoading, children, disabled, ...props }, ref) => {
254
- return (
255
- <button
256
- ref={ref}
257
- className={buttonVariants({ variant, size, className })}
258
- disabled={disabled || isLoading}
259
- aria-busy={isLoading}
260
- {...props}
261
- >
262
- {isLoading ? <Spinner /> : children}
263
- </button>
264
- );
265
- }
266
- );
267
-
268
- Button.displayName = 'Button';
269
- ```
270
-
271
- #### Pattern 3: WCAG 2.2 Accessibility Implementation
272
-
273
- **Color Contrast Validation** (Automated Check):
274
-
275
- ```typescript
276
- // utils/a11y/contrast.ts
277
- /**
278
- * Calculate relative luminance for WCAG compliance
279
- * @see https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html
280
- */
281
- function getLuminance(rgb: [number, number, number]): number {
282
- const [r, g, b] = rgb.map(val => {
283
- const sRGB = val / 255;
284
- return sRGB <= 0.03928
285
- ? sRGB / 12.92
286
- : Math.pow((sRGB + 0.055) / 1.055, 2.4);
287
- });
288
- return 0.2126 * r + 0.7152 * g + 0.0722 * b;
289
- }
290
-
291
- /**
292
- * Calculate contrast ratio between two colors
293
- * WCAG AA: 4.5:1 (normal text), 3:1 (large text)
294
- * WCAG AAA: 7:1 (normal text), 4.5:1 (large text)
295
- */
296
- export function getContrastRatio(
297
- foreground: string,
298
- background: string
299
- ): number {
300
- const fgLum = getLuminance(hexToRgb(foreground));
301
- const bgLum = getLuminance(hexToRgb(background));
302
- const lighter = Math.max(fgLum, bgLum);
303
- const darker = Math.min(fgLum, bgLum);
304
- return (lighter + 0.05) / (darker + 0.05);
305
- }
306
-
307
- /**
308
- * Check if color pair meets WCAG AA/AAA requirements
309
- */
310
- export function meetsWCAG(
311
- foreground: string,
312
- background: string,
313
- level: 'AA' | 'AAA' = 'AA',
314
- isLargeText: boolean = false
315
- ): boolean {
316
- const ratio = getContrastRatio(foreground, background);
317
-
318
- if (level === 'AAA') {
319
- return isLargeText ? ratio >= 4.5 : ratio >= 7;
320
- }
321
-
322
- // AA level
323
- return isLargeText ? ratio >= 3 : ratio >= 4.5;
324
- }
325
- ```
326
-
327
- **Keyboard Navigation** (Focus Management):
328
-
329
- ```typescript
330
- // hooks/useKeyboardNavigation.ts
331
- import { useEffect, useRef } from 'react';
332
-
333
- export function useKeyboardNavigation<T extends HTMLElement>(
334
- options: {
335
- onEscape?: () => void;
336
- onEnter?: () => void;
337
- trapFocus?: boolean;
338
- } = {}
339
- ) {
340
- const elementRef = useRef<T>(null);
341
-
342
- useEffect(() => {
343
- const element = elementRef.current;
344
- if (!element) return;
345
-
346
- const handleKeyDown = (e: KeyboardEvent) => {
347
- if (e.key === 'Escape') {
348
- options.onEscape?.();
349
- } else if (e.key === 'Enter') {
350
- options.onEnter?.();
351
- } else if (e.key === 'Tab' && options.trapFocus) {
352
- // Focus trap implementation
353
- const focusableElements = element.querySelectorAll<HTMLElement>(
354
- 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
355
- );
356
- const firstElement = focusableElements[0];
357
- const lastElement = focusableElements[focusableElements.length - 1];
358
-
359
- if (e.shiftKey && document.activeElement === firstElement) {
360
- lastElement.focus();
361
- e.preventDefault();
362
- } else if (!e.shiftKey && document.activeElement === lastElement) {
363
- firstElement.focus();
364
- e.preventDefault();
365
- }
366
- }
367
- };
368
-
369
- element.addEventListener('keydown', handleKeyDown);
370
- return () => element.removeEventListener('keydown', handleKeyDown);
371
- }, [options]);
372
-
373
- return elementRef;
374
- }
375
- ```
376
-
377
- **ARIA Labels & Roles** (Screen Reader Support):
378
-
379
- ```typescript
380
- // components/atoms/Input/Input.tsx
381
- export const Input = forwardRef<HTMLInputElement, InputProps>(
382
- ({ label, error, required, ...props }, ref) => {
383
- const inputId = useId();
384
- const errorId = `${inputId}-error`;
385
-
386
- return (
387
- <div className="form-field">
388
- <label htmlFor={inputId} className="form-label">
389
- {label}
390
- {required && <span aria-label="required">*</span>}
391
- </label>
392
-
393
- <input
394
- ref={ref}
395
- id={inputId}
396
- aria-invalid={!!error}
397
- aria-describedby={error ? errorId : undefined}
398
- aria-required={required}
399
- {...props}
400
- />
401
-
402
- {error && (
403
- <span id={errorId} role="alert" className="error-message">
404
- {error}
405
- </span>
406
- )}
407
- </div>
408
- );
409
- }
410
- );
411
- ```
412
-
413
- **Motion Accessibility** (Reduced Motion Support):
414
-
415
- ```css
416
- /* styles/motion.css */
417
- @media (prefers-reduced-motion: reduce) {
418
- *,
419
- *::before,
420
- *::after {
421
- animation-duration: 0.01ms !important;
422
- animation-iteration-count: 1 !important;
423
- transition-duration: 0.01ms !important;
424
- scroll-behavior: auto !important;
425
- }
426
- }
427
-
428
- /* Safe animations for reduced motion users */
429
- .fade-enter {
430
- opacity: 0;
431
- }
432
-
433
- .fade-enter-active {
434
- opacity: 1;
435
- transition: opacity 200ms ease-in;
436
- }
437
-
438
- @media (prefers-reduced-motion: reduce) {
439
- .fade-enter-active {
440
- transition: none;
441
- opacity: 1;
442
- }
443
- }
444
- ```
445
-
446
- #### Pattern 4: Figma MCP Integration Workflow
447
-
448
- **Setup** (Desktop Server):
449
-
450
- ```bash
451
- # Install Figma desktop app
452
- # Enable MCP server in settings
453
- # Desktop server runs at http://127.0.0.1:3845/mcp
454
- ```
455
-
456
- **MCP Configuration** (Claude Desktop):
457
-
458
- ```json
459
- {
460
- "mcpServers": {
461
- "figma": {
462
- "command": "figma-mcp",
463
- "args": [],
464
- "env": {
465
- "FIGMA_ACCESS_TOKEN": "your-figma-token"
466
- }
467
- }
468
- }
469
- }
470
- ```
471
-
472
- **Extracting Design Tokens from Figma**:
473
-
474
- 1. **Create Figma Variables** (Color, Typography, Spacing)
475
- 2. **Use MCP Server** to extract variables:
476
- - Select frame in Figma
477
- - Prompt: "Extract all design tokens from this frame"
478
- - MCP returns DTCG-compatible JSON
479
- 3. **Transform to Code** using Style Dictionary
480
-
481
- **Component Code Generation**:
482
-
483
- ```
484
- User Workflow:
485
- 1. Select component frame in Figma
486
- 2. Prompt: "Generate React component from this design"
487
- 3. MCP extracts:
488
- - Component structure
489
- - Applied design tokens
490
- - Layout properties (flex, grid)
491
- - Typography and spacing
492
- 4. Output: TypeScript React component with props
493
- ```
494
-
495
- **Automation Pattern** (Link-based workflow):
496
-
497
- ```typescript
498
- // scripts/sync-figma-tokens.ts
499
- import { exec } from 'child_process';
500
- import { promisify } from 'util';
501
-
502
- const execAsync = promisify(exec);
503
-
504
- async function syncFigmaTokens(figmaFileUrl: string) {
505
- // Use Figma MCP to extract tokens
506
- const { stdout } = await execAsync(
507
- `figma-mcp extract-tokens --url="${figmaFileUrl}"`
508
- );
509
-
510
- const tokens = JSON.parse(stdout);
511
-
512
- // Write to tokens directory
513
- await writeFile('tokens/color.json', JSON.stringify(tokens.color, null, 2));
514
- await writeFile('tokens/spacing.json', JSON.stringify(tokens.spacing, null, 2));
515
-
516
- // Run Style Dictionary build
517
- await execAsync('npm run tokens:build');
518
-
519
- console.log('✅ Design tokens synchronized from Figma');
520
- }
521
- ```
522
-
523
- #### Pattern 5: Storybook Documentation Setup
524
-
525
- **Installation & Configuration**:
526
-
527
- ```bash
528
- npx storybook@latest init
529
- ```
530
-
531
- **Storybook Configuration** (v8.x):
532
-
533
- ```typescript
534
- // .storybook/main.ts
535
- import type { StorybookConfig } from '@storybook/react-vite';
536
-
537
- const config: StorybookConfig = {
538
- stories: ['../src/**/*.stories.@(js|jsx|ts|tsx|mdx)'],
539
- addons: [
540
- '@storybook/addon-links',
541
- '@storybook/addon-essentials',
542
- '@storybook/addon-interactions',
543
- '@storybook/addon-a11y', // Accessibility testing
544
- ],
545
- framework: {
546
- name: '@storybook/react-vite',
547
- options: {},
548
- },
549
- docs: {
550
- autodocs: 'tag', // Auto-generate docs
551
- },
552
- };
553
-
554
- export default config;
555
- ```
556
-
557
- **Component Story** (with accessibility tests):
558
-
559
- ```typescript
560
- // components/atoms/Button/Button.stories.tsx
561
- import type { Meta, StoryObj } from '@storybook/react';
562
- import { Button } from './Button';
563
-
564
- const meta: Meta<typeof Button> = {
565
- title: 'Atoms/Button',
566
- component: Button,
567
- tags: ['autodocs'],
568
- argTypes: {
569
- variant: {
570
- control: 'select',
571
- options: ['primary', 'secondary', 'outline', 'ghost', 'danger'],
572
- },
573
- size: {
574
- control: 'select',
575
- options: ['sm', 'md', 'lg'],
576
- },
577
- },
578
- };
579
-
580
- export default meta;
581
- type Story = StoryObj<typeof Button>;
582
-
583
- export const Primary: Story = {
584
- args: {
585
- children: 'Primary Button',
586
- variant: 'primary',
587
- },
588
- };
589
-
590
- export const AllVariants: Story = {
591
- render: () => (
592
- <div className="flex gap-4">
593
- <Button variant="primary">Primary</Button>
594
- <Button variant="secondary">Secondary</Button>
595
- <Button variant="outline">Outline</Button>
596
- <Button variant="ghost">Ghost</Button>
597
- <Button variant="danger">Danger</Button>
598
- </div>
599
- ),
600
- };
601
-
602
- export const Disabled: Story = {
603
- args: {
604
- children: 'Disabled Button',
605
- disabled: true,
606
- },
607
- };
608
-
609
- export const Loading: Story = {
610
- args: {
611
- children: 'Loading Button',
612
- isLoading: true,
613
- },
614
- };
615
- ```
616
-
617
- ---
618
-
619
- ### Level 3: Advanced Topics (Deep Expertise)
620
-
621
- #### Advanced 1: Type-Safe Design Tokens (TypeScript)
622
-
623
- **Generate TypeScript Types from DTCG Tokens**:
624
-
625
- ```typescript
626
- // scripts/generate-token-types.ts
627
- import { readFileSync, writeFileSync } from 'fs';
628
-
629
- interface DTCGToken {
630
- $value: string | number | string[];
631
- $type?: string;
632
- [key: string]: any;
633
- }
634
-
635
- function generateTypes(tokens: Record<string, any>, prefix = ''): string {
636
- let types = '';
637
-
638
- for (const [key, value] of Object.entries(tokens)) {
639
- if (value.$value !== undefined) {
640
- const tokenPath = `${prefix}${key}`.replace(/\./g, '-');
641
- types += `export const ${tokenPath} = '${value.$value}';\n`;
642
- } else {
643
- types += generateTypes(value, `${prefix}${key}.`);
644
- }
645
- }
646
-
647
- return types;
648
- }
649
-
650
- const colorTokens = JSON.parse(readFileSync('tokens/color.json', 'utf-8'));
651
- const types = generateTypes(colorTokens.$tokens);
652
- writeFileSync('src/tokens/colors.ts', types);
653
- ```
654
-
655
- #### Advanced 2: Visual Regression Testing (Chromatic)
656
-
657
- ```bash
658
- # Install Chromatic
659
- npm install --save-dev chromatic
660
-
661
- # Configure in package.json
662
- {
663
- "scripts": {
664
- "chromatic": "chromatic --project-token=<your-token>"
665
- }
666
- }
667
- ```
668
-
669
- **CI/CD Integration**:
670
-
671
- ```yaml
672
- # .github/workflows/chromatic.yml
673
- name: Chromatic
674
-
675
- on: [push]
676
-
677
- jobs:
678
- chromatic:
679
- runs-on: ubuntu-latest
680
- steps:
681
- - uses: actions/checkout@v4
682
- with:
683
- fetch-depth: 0
684
-
685
- - uses: actions/setup-node@v4
686
- with:
687
- node-version: 20
688
-
689
- - name: Install dependencies
690
- run: npm ci
691
-
692
- - name: Run Chromatic
693
- uses: chromaui/action@v1
694
- with:
695
- projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
696
- ```
697
-
698
- #### Advanced 3: Accessibility Testing Automation
699
-
700
- **Jest + jest-axe Configuration**:
701
-
702
- ```typescript
703
- // tests/setup.ts
704
- import '@testing-library/jest-dom';
705
- import { toHaveNoViolations } from 'jest-axe';
706
-
707
- expect.extend(toHaveNoViolations);
708
- ```
709
-
710
- **Component Accessibility Tests**:
711
-
712
- ```typescript
713
- // components/atoms/Button/Button.test.tsx
714
- import { render } from '@testing-library/react';
715
- import { axe } from 'jest-axe';
716
- import { Button } from './Button';
717
-
718
- describe('Button Accessibility', () => {
719
- it('should have no accessibility violations', async () => {
720
- const { container } = render(<Button>Click me</Button>);
721
- const results = await axe(container);
722
- expect(results).toHaveNoViolations();
723
- });
724
-
725
- it('should have correct ARIA attributes when disabled', () => {
726
- const { getByRole } = render(<Button disabled>Disabled</Button>);
727
- const button = getByRole('button');
728
- expect(button).toHaveAttribute('aria-disabled', 'true');
729
- });
730
-
731
- it('should indicate loading state to screen readers', () => {
732
- const { getByRole } = render(<Button isLoading>Loading</Button>);
733
- const button = getByRole('button');
734
- expect(button).toHaveAttribute('aria-busy', 'true');
735
- });
736
- });
737
- ```
738
-
739
- ---
740
-
741
- ## Best Practices Checklist
742
-
743
- Design Token Architecture:
744
- - [ ] Use semantic naming (`color.primary.500` not `color.blue`)
745
- - [ ] Implement aliasing for themes (`{color.white}` references)
746
- - [ ] Validate DTCG 2025.10 spec compliance
747
- - [ ] Version tokens with semantic versioning
748
- - [ ] Document token usage in Storybook
749
-
750
- Component Development:
751
- - [ ] Follow Atomic Design hierarchy (Atoms → Molecules → Organisms)
752
- - [ ] Create variant-based props APIs (not separate components)
753
- - [ ] Document all props with TypeScript types
754
- - [ ] Write Storybook stories for all variants
755
- - [ ] Test component accessibility with jest-axe
756
-
757
- Accessibility:
758
- - [ ] Verify 4.5:1 contrast for all text (WCAG AA)
759
- - [ ] Implement keyboard navigation for all interactive elements
760
- - [ ] Add ARIA labels to form fields and buttons
761
- - [ ] Test with screen readers (NVDA, JAWS, VoiceOver)
762
- - [ ] Support `prefers-reduced-motion`
763
-
764
- Testing:
765
- - [ ] Visual regression tests for all components (Chromatic)
766
- - [ ] Accessibility tests with axe-core
767
- - [ ] Interaction tests with Testing Library
768
- - [ ] Cross-browser compatibility checks
769
-
770
- Figma Integration:
771
- - [ ] Set up Figma MCP server (desktop or remote)
772
- - [ ] Extract design tokens from Figma variables
773
- - [ ] Automate component code generation
774
- - [ ] Sync design changes with codebase
775
-
776
- ---
777
-
778
- ## When NOT to Use This Skill
779
-
780
- - **Simple static sites**: Overkill for projects without complex UI requirements
781
- - **Rapid prototyping**: Design systems add overhead during early exploration
782
- - **Single-use projects**: Token architecture benefits long-term maintenance
783
- - **Non-web platforms**: This Skill focuses on web (React/Vue/TypeScript)
784
-
785
- For these cases, consider:
786
- - Plain CSS/Tailwind for static sites
787
- - Component libraries (Material-UI, shadcn/ui) for rapid development
788
- - Platform-specific design systems (iOS HIG, Material Design for Android)
789
-
790
- ---
791
-
792
- **Related Skills**:
793
- - `moai-domain-frontend` - Frontend architecture patterns
794
- - `moai-lang-typescript` - TypeScript best practices
795
- - `moai-foundation-testing` - Testing strategies
796
-
797
- **Official Resources**:
798
- - W3C DTCG: https://designtokens.org
799
- - WCAG 2.2: https://www.w3.org/WAI/WCAG22/quickref/
800
- - Figma MCP: https://help.figma.com/hc/en-us/articles/32132100833559
801
- - Style Dictionary: https://styledictionary.com
802
- - Storybook: https://storybook.js.org