moai-adk 0.8.0__py3-none-any.whl → 1.1.0__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.
Files changed (881) hide show
  1. moai_adk/__init__.py +2 -6
  2. moai_adk/__main__.py +267 -21
  3. moai_adk/astgrep/__init__.py +37 -0
  4. moai_adk/astgrep/analyzer.py +522 -0
  5. moai_adk/astgrep/models.py +124 -0
  6. moai_adk/astgrep/rules.py +179 -0
  7. moai_adk/cli/__init__.py +6 -2
  8. moai_adk/cli/commands/__init__.py +1 -4
  9. moai_adk/cli/commands/analyze.py +125 -0
  10. moai_adk/cli/commands/doctor.py +24 -6
  11. moai_adk/cli/commands/init.py +437 -57
  12. moai_adk/cli/commands/language.py +254 -0
  13. moai_adk/cli/commands/rank.py +449 -0
  14. moai_adk/cli/commands/status.py +15 -14
  15. moai_adk/cli/commands/switch.py +325 -0
  16. moai_adk/cli/commands/update.py +2195 -93
  17. moai_adk/cli/main.py +3 -2
  18. moai_adk/cli/prompts/init_prompts.py +457 -108
  19. moai_adk/cli/prompts/translations/__init__.py +573 -0
  20. moai_adk/cli/spec_status.py +263 -0
  21. moai_adk/cli/ui/__init__.py +44 -0
  22. moai_adk/cli/ui/progress.py +422 -0
  23. moai_adk/cli/ui/prompts.py +448 -0
  24. moai_adk/cli/ui/theme.py +129 -0
  25. moai_adk/cli/worktree/__init__.py +27 -0
  26. moai_adk/cli/worktree/__main__.py +31 -0
  27. moai_adk/cli/worktree/cli.py +788 -0
  28. moai_adk/cli/worktree/exceptions.py +89 -0
  29. moai_adk/cli/worktree/manager.py +648 -0
  30. moai_adk/cli/worktree/models.py +65 -0
  31. moai_adk/cli/worktree/registry.py +422 -0
  32. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  33. moai_adk/core/__init__.py +0 -1
  34. moai_adk/core/analysis/__init__.py +9 -0
  35. moai_adk/core/analysis/session_analyzer.py +400 -0
  36. moai_adk/core/claude_integration.py +393 -0
  37. moai_adk/core/command_helpers.py +270 -0
  38. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  39. moai_adk/core/config/__init__.py +6 -0
  40. moai_adk/core/config/migration.py +148 -17
  41. moai_adk/core/config/unified.py +617 -0
  42. moai_adk/core/context_manager.py +273 -0
  43. moai_adk/core/credentials.py +264 -0
  44. moai_adk/core/diagnostics/slash_commands.py +0 -1
  45. moai_adk/core/enterprise_features.py +1404 -0
  46. moai_adk/core/error_recovery_system.py +1920 -0
  47. moai_adk/core/event_driven_hook_system.py +1371 -0
  48. moai_adk/core/git/__init__.py +8 -1
  49. moai_adk/core/git/branch.py +0 -1
  50. moai_adk/core/git/branch_manager.py +2 -10
  51. moai_adk/core/git/checkpoint.py +1 -7
  52. moai_adk/core/git/commit.py +0 -1
  53. moai_adk/core/git/conflict_detector.py +422 -0
  54. moai_adk/core/git/event_detector.py +16 -7
  55. moai_adk/core/git/manager.py +91 -2
  56. moai_adk/core/input_validation_middleware.py +1006 -0
  57. moai_adk/core/integration/__init__.py +22 -0
  58. moai_adk/core/integration/engine.py +157 -0
  59. moai_adk/core/integration/integration_tester.py +226 -0
  60. moai_adk/core/integration/models.py +88 -0
  61. moai_adk/core/integration/utils.py +211 -0
  62. moai_adk/core/issue_creator.py +305 -0
  63. moai_adk/core/jit_context_loader.py +956 -0
  64. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  65. moai_adk/core/language_config.py +202 -0
  66. moai_adk/core/language_config_resolver.py +578 -0
  67. moai_adk/core/language_validator.py +543 -0
  68. moai_adk/core/mcp/setup.py +116 -0
  69. moai_adk/core/merge/__init__.py +9 -0
  70. moai_adk/core/merge/analyzer.py +666 -0
  71. moai_adk/core/migration/__init__.py +18 -0
  72. moai_adk/core/migration/alfred_to_moai_migrator.py +389 -0
  73. moai_adk/core/migration/backup_manager.py +327 -0
  74. moai_adk/core/migration/custom_element_scanner.py +358 -0
  75. moai_adk/core/migration/file_migrator.py +381 -0
  76. moai_adk/core/migration/interactive_checkbox_ui.py +499 -0
  77. moai_adk/core/migration/selective_restorer.py +470 -0
  78. moai_adk/core/migration/template_utils.py +74 -0
  79. moai_adk/core/migration/user_selection_ui.py +338 -0
  80. moai_adk/core/migration/version_detector.py +243 -0
  81. moai_adk/core/migration/version_migrator.py +263 -0
  82. moai_adk/core/model_allocator.py +241 -0
  83. moai_adk/core/performance/__init__.py +6 -0
  84. moai_adk/core/performance/cache_system.py +316 -0
  85. moai_adk/core/performance/parallel_processor.py +116 -0
  86. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  87. moai_adk/core/project/__init__.py +0 -1
  88. moai_adk/core/project/backup_utils.py +13 -8
  89. moai_adk/core/project/checker.py +2 -4
  90. moai_adk/core/project/detector.py +189 -22
  91. moai_adk/core/project/initializer.py +177 -29
  92. moai_adk/core/project/phase_executor.py +482 -48
  93. moai_adk/core/project/validator.py +22 -32
  94. moai_adk/core/quality/__init__.py +1 -1
  95. moai_adk/core/quality/trust_checker.py +66 -110
  96. moai_adk/core/quality/validators/__init__.py +1 -1
  97. moai_adk/core/quality/validators/base_validator.py +1 -1
  98. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  99. moai_adk/core/robust_json_parser.py +611 -0
  100. moai_adk/core/rollback_manager.py +953 -0
  101. moai_adk/core/session_manager.py +651 -0
  102. moai_adk/core/skill_loading_system.py +579 -0
  103. moai_adk/core/spec_status_manager.py +478 -0
  104. moai_adk/core/template/__init__.py +0 -1
  105. moai_adk/core/template/backup.py +168 -21
  106. moai_adk/core/template/config.py +141 -45
  107. moai_adk/core/template/languages.py +0 -1
  108. moai_adk/core/template/merger.py +107 -32
  109. moai_adk/core/template/processor.py +1075 -74
  110. moai_adk/core/template_engine.py +319 -0
  111. moai_adk/core/template_variable_synchronizer.py +431 -0
  112. moai_adk/core/unified_permission_manager.py +745 -0
  113. moai_adk/core/user_behavior_analytics.py +851 -0
  114. moai_adk/core/version_sync.py +477 -0
  115. moai_adk/foundation/__init__.py +37 -0
  116. moai_adk/foundation/backend.py +1027 -0
  117. moai_adk/foundation/database.py +1115 -0
  118. moai_adk/foundation/devops.py +1585 -0
  119. moai_adk/foundation/ears.py +431 -0
  120. moai_adk/foundation/frontend.py +870 -0
  121. moai_adk/foundation/git/__init__.py +376 -0
  122. moai_adk/foundation/git/commit_templates.py +557 -0
  123. moai_adk/foundation/langs.py +484 -0
  124. moai_adk/foundation/ml_ops.py +1162 -0
  125. moai_adk/foundation/testing.py +1524 -0
  126. moai_adk/foundation/trust/trust_principles.py +676 -0
  127. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  128. moai_adk/loop/__init__.py +54 -0
  129. moai_adk/loop/controller.py +305 -0
  130. moai_adk/loop/feedback.py +230 -0
  131. moai_adk/loop/state.py +209 -0
  132. moai_adk/loop/storage.py +220 -0
  133. moai_adk/lsp/__init__.py +70 -0
  134. moai_adk/lsp/client.py +320 -0
  135. moai_adk/lsp/models.py +261 -0
  136. moai_adk/lsp/protocol.py +404 -0
  137. moai_adk/lsp/server_manager.py +248 -0
  138. moai_adk/project/__init__.py +0 -0
  139. moai_adk/project/configuration.py +1091 -0
  140. moai_adk/project/documentation.py +566 -0
  141. moai_adk/project/schema.py +447 -0
  142. moai_adk/py.typed +0 -0
  143. moai_adk/ralph/__init__.py +37 -0
  144. moai_adk/ralph/engine.py +307 -0
  145. moai_adk/rank/__init__.py +21 -0
  146. moai_adk/rank/auth.py +425 -0
  147. moai_adk/rank/client.py +557 -0
  148. moai_adk/rank/config.py +147 -0
  149. moai_adk/rank/hook.py +1503 -0
  150. moai_adk/rank/py.typed +0 -0
  151. moai_adk/statusline/__init__.py +41 -0
  152. moai_adk/statusline/alfred_detector.py +105 -0
  153. moai_adk/statusline/config.py +376 -0
  154. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  155. moai_adk/statusline/git_collector.py +190 -0
  156. moai_adk/statusline/main.py +341 -0
  157. moai_adk/statusline/memory_collector.py +268 -0
  158. moai_adk/statusline/metrics_tracker.py +78 -0
  159. moai_adk/statusline/renderer.py +359 -0
  160. moai_adk/statusline/update_checker.py +129 -0
  161. moai_adk/statusline/version_reader.py +741 -0
  162. moai_adk/tag_system/__init__.py +48 -0
  163. moai_adk/tag_system/atomic_ops.py +117 -0
  164. moai_adk/tag_system/linkage.py +335 -0
  165. moai_adk/tag_system/parser.py +176 -0
  166. moai_adk/tag_system/validator.py +200 -0
  167. moai_adk/templates/.claude/agents/moai/builder-agent.md +490 -0
  168. moai_adk/templates/.claude/agents/moai/builder-command.md +1218 -0
  169. moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
  170. moai_adk/templates/.claude/agents/moai/builder-skill.md +682 -0
  171. moai_adk/templates/.claude/agents/moai/expert-backend.md +963 -0
  172. moai_adk/templates/.claude/agents/moai/expert-debug.md +407 -0
  173. moai_adk/templates/.claude/agents/moai/expert-devops.md +722 -0
  174. moai_adk/templates/.claude/agents/moai/expert-frontend.md +748 -0
  175. moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
  176. moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
  177. moai_adk/templates/.claude/agents/moai/expert-security.md +525 -0
  178. moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
  179. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +438 -0
  180. moai_adk/templates/.claude/agents/moai/manager-docs.md +578 -0
  181. moai_adk/templates/.claude/agents/moai/manager-git.md +1092 -0
  182. moai_adk/templates/.claude/agents/moai/manager-project.md +971 -0
  183. moai_adk/templates/.claude/agents/moai/manager-quality.md +641 -0
  184. moai_adk/templates/.claude/agents/moai/manager-spec.md +815 -0
  185. moai_adk/templates/.claude/agents/moai/manager-strategy.md +811 -0
  186. moai_adk/templates/.claude/agents/moai/manager-tdd.md +797 -0
  187. moai_adk/templates/.claude/commands/moai/0-project.md +438 -0
  188. moai_adk/templates/.claude/commands/moai/1-plan.md +1447 -0
  189. moai_adk/templates/.claude/commands/moai/2-run.md +850 -0
  190. moai_adk/templates/.claude/commands/moai/3-sync.md +1398 -0
  191. moai_adk/templates/.claude/commands/moai/9-feedback.md +330 -0
  192. moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
  193. moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
  194. moai_adk/templates/.claude/commands/moai/fix.md +264 -0
  195. moai_adk/templates/.claude/commands/moai/loop.md +363 -0
  196. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  197. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  198. moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
  199. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +41 -0
  200. moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
  201. moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
  202. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/checkpoint.py +13 -37
  203. moai_adk/templates/.claude/hooks/moai/lib/common.py +161 -0
  204. moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
  205. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +442 -0
  206. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  207. moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
  208. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  209. moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
  210. moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
  211. moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
  212. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +592 -0
  213. moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
  214. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +417 -0
  215. moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
  216. moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
  217. moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
  218. moai_adk/templates/.claude/hooks/moai/lib/models.py +104 -0
  219. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +219 -0
  220. moai_adk/templates/.claude/hooks/moai/lib/project.py +777 -0
  221. moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
  222. moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
  223. moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
  224. moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
  225. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  226. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  227. moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
  228. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +542 -0
  229. moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
  230. moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
  231. moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
  232. moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
  233. moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
  234. moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
  235. moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
  236. moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
  237. moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
  238. moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
  239. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +894 -0
  240. moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
  241. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1170 -0
  242. moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
  243. moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
  244. moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
  245. moai_adk/templates/.claude/output-styles/moai/r2d2.md +643 -0
  246. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  247. moai_adk/templates/.claude/settings.json +177 -72
  248. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +303 -0
  249. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
  250. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +56 -0
  251. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +120 -0
  252. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  253. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +185 -0
  254. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +207 -0
  255. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +234 -0
  256. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +132 -281
  257. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
  258. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
  259. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +133 -77
  260. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
  261. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  262. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  263. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  264. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  265. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +532 -17
  266. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +91 -78
  267. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
  268. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
  269. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
  270. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
  271. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
  272. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
  273. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
  274. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
  275. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +234 -0
  276. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  277. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  278. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  279. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  280. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  281. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  282. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +189 -0
  283. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  284. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +327 -0
  285. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  286. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  287. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  288. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  289. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  290. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  291. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +225 -0
  292. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  293. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
  294. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  295. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
  296. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +739 -0
  297. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
  298. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
  299. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
  300. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +670 -0
  301. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  302. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  303. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
  304. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
  305. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
  306. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  307. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +467 -0
  308. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
  309. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +420 -0
  310. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  311. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  312. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  313. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  314. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  315. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  316. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  317. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +221 -0
  318. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  319. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  320. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +242 -0
  321. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  322. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  323. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  324. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  325. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
  326. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
  327. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +228 -0
  328. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  329. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  330. moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
  331. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  332. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
  333. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +171 -0
  334. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
  335. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  336. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +239 -0
  337. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
  338. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
  339. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  340. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
  341. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  342. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  343. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  344. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  345. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  346. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  347. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +180 -0
  348. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  349. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  350. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  351. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  352. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  353. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  354. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  355. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  356. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  357. moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
  358. moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
  359. moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
  360. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +96 -77
  361. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1226 -16
  362. moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
  363. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1119 -14
  364. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +80 -79
  365. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +572 -16
  366. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
  367. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
  368. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
  369. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
  370. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
  371. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +388 -15
  372. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +135 -0
  373. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
  374. moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
  375. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
  376. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +104 -0
  377. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  378. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  379. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +153 -80
  380. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
  381. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
  382. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +117 -80
  383. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
  384. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
  385. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +133 -79
  386. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +960 -16
  387. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1528 -17
  388. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +100 -79
  389. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
  390. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
  391. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +135 -76
  392. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1595 -16
  393. moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
  394. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1309 -16
  395. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +141 -341
  396. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
  397. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
  398. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +134 -76
  399. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1141 -16
  400. moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
  401. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1074 -17
  402. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +136 -77
  403. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1093 -16
  404. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
  405. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
  406. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1010 -17
  407. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +112 -78
  408. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
  409. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
  410. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +113 -75
  411. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
  412. moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
  413. moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
  414. moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
  415. moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
  416. moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
  417. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
  418. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -83
  419. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
  420. moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
  421. moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
  422. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
  423. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
  424. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
  425. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +115 -82
  426. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
  427. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
  428. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +145 -0
  429. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  430. moai_adk/templates/.claude/skills/moai-library-mermaid/modules/advanced-patterns.md +465 -0
  431. moai_adk/templates/.claude/skills/moai-library-mermaid/modules/optimization.md +440 -0
  432. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  433. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +143 -0
  434. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  435. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  436. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +336 -0
  437. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +350 -0
  438. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  439. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  440. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  441. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  442. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  443. moai_adk/templates/.claude/skills/moai-library-nextra/modules/optimization.md +303 -0
  444. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  445. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +175 -0
  446. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  447. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  448. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  449. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  450. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  451. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  452. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +284 -0
  453. moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
  454. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
  455. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
  456. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
  457. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
  458. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
  459. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
  460. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
  461. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
  462. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
  463. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
  464. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
  465. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
  466. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
  467. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
  468. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
  469. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
  470. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
  471. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
  472. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
  473. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
  474. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
  475. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
  476. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
  477. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
  478. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
  479. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
  480. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
  481. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
  482. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
  483. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
  484. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
  485. moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
  486. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +135 -0
  487. moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
  488. moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
  489. moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
  490. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +158 -0
  491. moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
  492. moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
  493. moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
  494. moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
  495. moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
  496. moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
  497. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +166 -0
  498. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
  499. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
  500. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
  501. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
  502. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
  503. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +127 -0
  504. moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
  505. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
  506. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
  507. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
  508. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
  509. moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
  510. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +156 -0
  511. moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
  512. moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
  513. moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
  514. moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
  515. moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
  516. moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
  517. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +146 -0
  518. moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
  519. moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
  520. moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
  521. moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
  522. moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
  523. moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
  524. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +141 -0
  525. moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
  526. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
  527. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
  528. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
  529. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
  530. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
  531. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
  532. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
  533. moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
  534. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +132 -0
  535. moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
  536. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
  537. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
  538. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
  539. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
  540. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
  541. moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
  542. moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
  543. moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
  544. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
  545. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
  546. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
  547. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
  548. moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
  549. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
  550. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
  551. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
  552. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
  553. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
  554. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
  555. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
  556. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
  557. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
  558. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +251 -0
  559. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  560. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/advanced-patterns.md +379 -0
  561. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/optimization.md +286 -0
  562. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  563. moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
  564. moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
  565. moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
  566. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  567. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +287 -0
  568. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  569. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  570. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  571. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  572. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  573. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  574. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  575. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  576. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  577. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  578. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  579. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  580. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  581. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +337 -0
  582. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  583. moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
  584. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  585. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +270 -0
  586. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  587. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  588. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  589. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  590. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  591. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  592. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +269 -0
  593. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  594. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  595. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  596. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  597. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  598. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +269 -0
  599. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/advanced-patterns.md +576 -0
  600. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +302 -0
  601. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
  602. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
  603. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
  604. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
  605. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
  606. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
  607. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
  608. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
  609. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
  610. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +263 -0
  611. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
  612. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
  613. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
  614. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
  615. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
  616. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/optimization.md +505 -0
  617. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
  618. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
  619. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
  620. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
  621. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
  622. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
  623. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
  624. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +327 -0
  625. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
  626. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
  627. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
  628. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
  629. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +313 -0
  630. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
  631. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
  632. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
  633. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
  634. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
  635. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
  636. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +265 -0
  637. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
  638. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  639. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  640. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  641. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  642. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  643. moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
  644. moai_adk/templates/.claude/skills/moai-workflow-worktree/examples.md +606 -0
  645. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
  646. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
  647. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
  648. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
  649. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
  650. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
  651. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
  652. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
  653. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
  654. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
  655. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
  656. moai_adk/templates/.claude/skills/moai-workflow-worktree/reference.md +357 -0
  657. moai_adk/templates/.git-hooks/pre-commit +128 -0
  658. moai_adk/templates/.git-hooks/pre-push +468 -0
  659. moai_adk/templates/.github/workflows/ci-universal.yml +1314 -0
  660. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  661. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
  662. moai_adk/templates/.gitignore +152 -13
  663. moai_adk/templates/.lsp.json +152 -0
  664. moai_adk/templates/.mcp.json +13 -0
  665. moai_adk/templates/.moai/announcements/en.json +18 -0
  666. moai_adk/templates/.moai/announcements/ja.json +18 -0
  667. moai_adk/templates/.moai/announcements/ko.json +18 -0
  668. moai_adk/templates/.moai/announcements/zh.json +18 -0
  669. moai_adk/templates/.moai/config/config.yaml +64 -0
  670. moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
  671. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  672. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  673. moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
  674. moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
  675. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  676. moai_adk/templates/.moai/config/sections/quality.yaml +55 -0
  677. moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
  678. moai_adk/templates/.moai/config/sections/system.yaml +59 -0
  679. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  680. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  681. moai_adk/templates/.moai/llm-configs/glm.json +22 -0
  682. moai_adk/templates/CLAUDE.ja.md +343 -0
  683. moai_adk/templates/CLAUDE.ko.md +343 -0
  684. moai_adk/templates/CLAUDE.md +274 -246
  685. moai_adk/templates/CLAUDE.zh.md +343 -0
  686. moai_adk/utils/__init__.py +24 -2
  687. moai_adk/utils/banner.py +9 -13
  688. moai_adk/utils/common.py +331 -0
  689. moai_adk/utils/link_validator.py +241 -0
  690. moai_adk/utils/logger.py +4 -9
  691. moai_adk/utils/safe_file_reader.py +206 -0
  692. moai_adk/utils/timeout.py +160 -0
  693. moai_adk/utils/toon_utils.py +256 -0
  694. moai_adk/version.py +22 -0
  695. moai_adk-1.1.0.dist-info/METADATA +2443 -0
  696. moai_adk-1.1.0.dist-info/RECORD +701 -0
  697. {moai_adk-0.8.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +1 -1
  698. moai_adk-1.1.0.dist-info/entry_points.txt +5 -0
  699. moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
  700. moai_adk/cli/commands/backup.py +0 -80
  701. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
  702. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
  703. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
  704. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
  705. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
  706. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
  707. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
  708. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
  709. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
  710. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
  711. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
  712. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
  713. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
  714. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
  715. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
  716. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
  717. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  718. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  719. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  720. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
  721. moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
  722. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
  723. moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
  724. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
  725. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  726. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
  727. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
  728. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
  729. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  730. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  731. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  732. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  733. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  734. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  735. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  736. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  737. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  738. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  739. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  740. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  741. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  742. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  743. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  744. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  745. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  746. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  747. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  748. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  749. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  750. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  751. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  752. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  753. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  754. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  755. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  756. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  757. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  758. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  759. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  760. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  761. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  762. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  763. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  764. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  765. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  766. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  767. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  768. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  769. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  770. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  771. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  772. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  773. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  774. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  775. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  776. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  777. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  778. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  779. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  780. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  781. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  782. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  783. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  784. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  785. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  786. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  787. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  788. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  789. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  790. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  791. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  792. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  793. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  794. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  795. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  796. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  797. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  798. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  799. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  800. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  801. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  802. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  803. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  804. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  805. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
  806. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  807. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  808. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  809. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  810. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  811. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  812. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  813. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  814. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  815. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  816. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  817. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  818. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  819. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  820. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  821. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  822. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  823. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  824. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  825. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  826. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  827. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  828. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  829. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  830. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  831. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  832. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  833. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  834. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  835. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  836. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  837. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  838. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  839. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  840. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  841. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  842. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  843. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  844. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  845. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  846. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  847. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  848. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  849. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  850. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  851. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  852. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  853. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  854. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  855. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  856. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  857. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  858. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  859. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  860. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  861. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
  862. moai_adk/templates/.moai/config.json +0 -96
  863. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  864. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  865. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  866. moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
  867. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  868. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  869. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  870. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  871. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  872. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  873. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  874. moai_adk/templates/.moai/project/product.md +0 -161
  875. moai_adk/templates/.moai/project/structure.md +0 -156
  876. moai_adk/templates/.moai/project/tech.md +0 -227
  877. moai_adk/templates/__init__.py +0 -2
  878. moai_adk-0.8.0.dist-info/METADATA +0 -1722
  879. moai_adk-0.8.0.dist-info/RECORD +0 -282
  880. moai_adk-0.8.0.dist-info/entry_points.txt +0 -2
  881. moai_adk-0.8.0.dist-info/licenses/LICENSE +0 -21
@@ -0,0 +1,1426 @@
1
+ # Clerk Authentication - Working Examples
2
+
3
+ Complete working examples for Clerk authentication in Next.js 15 with React 19 and TypeScript.
4
+
5
+ ---
6
+
7
+ ## 1. Basic Setup
8
+
9
+ ### Next.js App Router with Clerk Provider
10
+
11
+ Complete project initialization with environment setup:
12
+
13
+ ```bash
14
+ # Install dependencies
15
+ npm install @clerk/nextjs
16
+
17
+ # Create environment file
18
+ cat > .env.local << EOF
19
+ NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_your_key_here
20
+ CLERK_SECRET_KEY=sk_test_your_secret_key_here
21
+ NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
22
+ NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
23
+ NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/dashboard
24
+ NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/dashboard
25
+ EOF
26
+ ```
27
+
28
+ Root layout with ClerkProvider:
29
+
30
+ ```tsx
31
+ // app/layout.tsx
32
+ import type { Metadata } from "next";
33
+ import { ClerkProvider } from "@clerk/nextjs";
34
+ import "./globals.css";
35
+
36
+ export const metadata: Metadata = {
37
+ title: "My App",
38
+ description: "Application with Clerk authentication",
39
+ };
40
+
41
+ export default function RootLayout({
42
+ children,
43
+ }: Readonly<{
44
+ children: React.ReactNode;
45
+ }>) {
46
+ return (
47
+ <ClerkProvider>
48
+ <html lang="en">
49
+ <body>{children}</body>
50
+ </html>
51
+ </ClerkProvider>
52
+ );
53
+ }
54
+ ```
55
+
56
+ ---
57
+
58
+ ## 2. Authentication Flow
59
+
60
+ ### Sign-Up Page with Pre-built Component
61
+
62
+ ```tsx
63
+ // app/sign-up/[[...sign-up]]/page.tsx
64
+ import { SignUp } from "@clerk/nextjs";
65
+
66
+ export default function SignUpPage() {
67
+ return (
68
+ <div className="flex min-h-screen items-center justify-center bg-gray-50">
69
+ <div className="w-full max-w-md">
70
+ <SignUp
71
+ appearance={{
72
+ elements: {
73
+ rootBox: "mx-auto",
74
+ card: "shadow-lg",
75
+ },
76
+ }}
77
+ />
78
+ </div>
79
+ </div>
80
+ );
81
+ }
82
+ ```
83
+
84
+ ### Sign-In Page with Pre-built Component
85
+
86
+ ```tsx
87
+ // app/sign-in/[[...sign-in]]/page.tsx
88
+ import { SignIn } from "@clerk/nextjs";
89
+
90
+ export default function SignInPage() {
91
+ return (
92
+ <div className="flex min-h-screen items-center justify-center bg-gray-50">
93
+ <div className="w-full max-w-md">
94
+ <SignIn
95
+ appearance={{
96
+ elements: {
97
+ rootBox: "mx-auto",
98
+ card: "shadow-lg",
99
+ },
100
+ }}
101
+ routing="path"
102
+ path="/sign-in"
103
+ />
104
+ </div>
105
+ </div>
106
+ );
107
+ }
108
+ ```
109
+
110
+ ### Navigation Header with Auth Controls
111
+
112
+ ```tsx
113
+ // components/nav-header.tsx
114
+ import {
115
+ SignInButton,
116
+ SignUpButton,
117
+ SignedIn,
118
+ SignedOut,
119
+ UserButton,
120
+ } from "@clerk/nextjs";
121
+ import Link from "next/link";
122
+
123
+ export function NavHeader() {
124
+ return (
125
+ <header className="border-b">
126
+ <div className="container mx-auto flex h-16 items-center justify-between px-4">
127
+ <Link href="/" className="text-xl font-bold">
128
+ My App
129
+ </Link>
130
+
131
+ <nav className="flex items-center gap-4">
132
+ <SignedOut>
133
+ <SignInButton mode="modal">
134
+ <button className="rounded-md bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">
135
+ Sign In
136
+ </button>
137
+ </SignInButton>
138
+ <SignUpButton mode="modal">
139
+ <button className="rounded-md border border-gray-300 px-4 py-2 hover:bg-gray-50">
140
+ Sign Up
141
+ </button>
142
+ </SignUpButton>
143
+ </SignedOut>
144
+
145
+ <SignedIn>
146
+ <Link href="/dashboard" className="hover:text-blue-600">
147
+ Dashboard
148
+ </Link>
149
+ <UserButton
150
+ appearance={{
151
+ elements: {
152
+ avatarBox: "w-10 h-10",
153
+ },
154
+ }}
155
+ />
156
+ </SignedIn>
157
+ </nav>
158
+ </div>
159
+ </header>
160
+ );
161
+ }
162
+ ```
163
+
164
+ ### Sign-Out Button with Redirect
165
+
166
+ ```tsx
167
+ // components/sign-out-button.tsx
168
+ "use client";
169
+
170
+ import { useClerk } from "@clerk/nextjs";
171
+ import { useRouter } from "next/navigation";
172
+
173
+ export function SignOutButton() {
174
+ const { signOut } = useClerk();
175
+ const router = useRouter();
176
+
177
+ const handleSignOut = async () => {
178
+ await signOut();
179
+ router.push("/");
180
+ };
181
+
182
+ return (
183
+ <button
184
+ onClick={handleSignOut}
185
+ className="rounded-md bg-red-600 px-4 py-2 text-white hover:bg-red-700"
186
+ >
187
+ Sign Out
188
+ </button>
189
+ );
190
+ }
191
+ ```
192
+
193
+ ---
194
+
195
+ ## 3. WebAuthn and Passkeys
196
+
197
+ ### Enable WebAuthn in Clerk Dashboard
198
+
199
+ Enable passkeys in Clerk Dashboard:
200
+
201
+ 1. Navigate to User & Authentication → Email, Phone, Username
202
+ 2. Enable "Passkeys" authentication method
203
+ 3. Configure passkey settings
204
+
205
+ ### Client Component with Passkey Support
206
+
207
+ ```tsx
208
+ // components/passkey-setup.tsx
209
+ "use client";
210
+
211
+ import { useUser } from "@clerk/nextjs";
212
+ import { useState } from "react";
213
+
214
+ export function PasskeySetup() {
215
+ const { user } = useUser();
216
+ const [isCreating, setIsCreating] = useState(false);
217
+ const [error, setError] = useState<string | null>(null);
218
+
219
+ const createPasskey = async () => {
220
+ if (!user) return;
221
+
222
+ setIsCreating(true);
223
+ setError(null);
224
+
225
+ try {
226
+ await user.createPasskey();
227
+ alert("Passkey created successfully!");
228
+ } catch (err) {
229
+ setError(err instanceof Error ? err.message : "Failed to create passkey");
230
+ } finally {
231
+ setIsCreating(false);
232
+ }
233
+ };
234
+
235
+ const passkeys = user?.passkeys || [];
236
+
237
+ return (
238
+ <div className="rounded-lg border p-6">
239
+ <h2 className="mb-4 text-xl font-semibold">Passkeys</h2>
240
+
241
+ {passkeys.length > 0 ? (
242
+ <div className="mb-4 space-y-2">
243
+ {passkeys.map((passkey) => (
244
+ <div
245
+ key={passkey.id}
246
+ className="flex items-center justify-between rounded border p-3"
247
+ >
248
+ <div>
249
+ <p className="font-medium">
250
+ {passkey.name || "Unnamed Passkey"}
251
+ </p>
252
+ <p className="text-sm text-gray-600">
253
+ Created: {new Date(passkey.createdAt).toLocaleDateString()}
254
+ </p>
255
+ </div>
256
+ </div>
257
+ ))}
258
+ </div>
259
+ ) : (
260
+ <p className="mb-4 text-gray-600">No passkeys configured</p>
261
+ )}
262
+
263
+ {error && (
264
+ <div className="mb-4 rounded bg-red-50 p-3 text-red-700">{error}</div>
265
+ )}
266
+
267
+ <button
268
+ onClick={createPasskey}
269
+ disabled={isCreating}
270
+ className="rounded-md bg-blue-600 px-4 py-2 text-white hover:bg-blue-700 disabled:bg-gray-400"
271
+ >
272
+ {isCreating ? "Creating..." : "Add Passkey"}
273
+ </button>
274
+ </div>
275
+ );
276
+ }
277
+ ```
278
+
279
+ ### Sign In with Passkey Flow
280
+
281
+ ```tsx
282
+ // components/passkey-signin.tsx
283
+ "use client";
284
+
285
+ import { useSignIn } from "@clerk/nextjs";
286
+ import { useState } from "react";
287
+ import { useRouter } from "next/navigation";
288
+
289
+ export function PasskeySignIn() {
290
+ const { signIn, setActive } = useSignIn();
291
+ const [isLoading, setIsLoading] = useState(false);
292
+ const router = useRouter();
293
+
294
+ const handlePasskeySignIn = async () => {
295
+ if (!signIn) return;
296
+
297
+ setIsLoading(true);
298
+
299
+ try {
300
+ const signInAttempt = await signIn.authenticateWithPasskey();
301
+
302
+ if (signInAttempt.status === "complete") {
303
+ await setActive({ session: signInAttempt.createdSessionId });
304
+ router.push("/dashboard");
305
+ }
306
+ } catch (err) {
307
+ console.error("Passkey authentication failed:", err);
308
+ } finally {
309
+ setIsLoading(false);
310
+ }
311
+ };
312
+
313
+ return (
314
+ <button
315
+ onClick={handlePasskeySignIn}
316
+ disabled={isLoading}
317
+ className="w-full rounded-md bg-blue-600 px-4 py-2 text-white hover:bg-blue-700 disabled:bg-gray-400"
318
+ >
319
+ {isLoading ? "Authenticating..." : "Sign In with Passkey"}
320
+ </button>
321
+ );
322
+ }
323
+ ```
324
+
325
+ ---
326
+
327
+ ## 4. Session Management
328
+
329
+ ### Client-Side Session Access
330
+
331
+ ```tsx
332
+ // components/session-info.tsx
333
+ "use client";
334
+
335
+ import { useAuth, useSession } from "@clerk/nextjs";
336
+
337
+ export function SessionInfo() {
338
+ const { userId, sessionId, isLoaded, isSignedIn } = useAuth();
339
+ const { session } = useSession();
340
+
341
+ if (!isLoaded) {
342
+ return <div>Loading session...</div>;
343
+ }
344
+
345
+ if (!isSignedIn) {
346
+ return <div>No active session</div>;
347
+ }
348
+
349
+ return (
350
+ <div className="rounded-lg border p-6">
351
+ <h2 className="mb-4 text-xl font-semibold">Session Information</h2>
352
+
353
+ <dl className="space-y-2">
354
+ <div>
355
+ <dt className="font-medium">User ID:</dt>
356
+ <dd className="font-mono text-sm text-gray-600">{userId}</dd>
357
+ </div>
358
+
359
+ <div>
360
+ <dt className="font-medium">Session ID:</dt>
361
+ <dd className="font-mono text-sm text-gray-600">{sessionId}</dd>
362
+ </div>
363
+
364
+ <div>
365
+ <dt className="font-medium">Last Active:</dt>
366
+ <dd className="text-sm text-gray-600">
367
+ {session?.lastActiveAt
368
+ ? new Date(session.lastActiveAt).toLocaleString()
369
+ : "N/A"}
370
+ </dd>
371
+ </div>
372
+
373
+ <div>
374
+ <dt className="font-medium">Expires At:</dt>
375
+ <dd className="text-sm text-gray-600">
376
+ {session?.expireAt
377
+ ? new Date(session.expireAt).toLocaleString()
378
+ : "N/A"}
379
+ </dd>
380
+ </div>
381
+ </dl>
382
+ </div>
383
+ );
384
+ }
385
+ ```
386
+
387
+ ### Server-Side Session Access
388
+
389
+ ```tsx
390
+ // app/dashboard/session/page.tsx
391
+ import { auth, clerkClient } from "@clerk/nextjs/server";
392
+ import { redirect } from "next/navigation";
393
+
394
+ export default async function SessionPage() {
395
+ const { userId, sessionId } = await auth();
396
+
397
+ if (!userId || !sessionId) {
398
+ redirect("/sign-in");
399
+ }
400
+
401
+ const session = await clerkClient().sessions.getSession(sessionId);
402
+
403
+ return (
404
+ <div className="container mx-auto max-w-2xl py-8">
405
+ <h1 className="mb-6 text-3xl font-bold">Session Details</h1>
406
+
407
+ <div className="rounded-lg border p-6">
408
+ <h2 className="mb-4 text-xl font-semibold">Server-Side Session Data</h2>
409
+
410
+ <dl className="space-y-3">
411
+ <div>
412
+ <dt className="font-medium">Session ID:</dt>
413
+ <dd className="font-mono text-sm text-gray-600">{session.id}</dd>
414
+ </div>
415
+
416
+ <div>
417
+ <dt className="font-medium">User ID:</dt>
418
+ <dd className="font-mono text-sm text-gray-600">
419
+ {session.userId}
420
+ </dd>
421
+ </div>
422
+
423
+ <div>
424
+ <dt className="font-medium">Status:</dt>
425
+ <dd className="text-sm">
426
+ <span
427
+ className={`rounded px-2 py-1 ${
428
+ session.status === "active"
429
+ ? "bg-green-100 text-green-800"
430
+ : "bg-gray-100 text-gray-800"
431
+ }`}
432
+ >
433
+ {session.status}
434
+ </span>
435
+ </dd>
436
+ </div>
437
+
438
+ <div>
439
+ <dt className="font-medium">Created:</dt>
440
+ <dd className="text-sm text-gray-600">
441
+ {new Date(session.createdAt).toLocaleString()}
442
+ </dd>
443
+ </div>
444
+
445
+ <div>
446
+ <dt className="font-medium">Last Active:</dt>
447
+ <dd className="text-sm text-gray-600">
448
+ {new Date(session.lastActiveAt).toLocaleString()}
449
+ </dd>
450
+ </div>
451
+ </dl>
452
+ </div>
453
+ </div>
454
+ );
455
+ }
456
+ ```
457
+
458
+ ---
459
+
460
+ ## 5. Protected Routes
461
+
462
+ ### Middleware with Route Matching
463
+
464
+ ```typescript
465
+ // middleware.ts
466
+ import { clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server";
467
+
468
+ // Define public routes (no authentication required)
469
+ const isPublicRoute = createRouteMatcher([
470
+ "/",
471
+ "/sign-in(.*)",
472
+ "/sign-up(.*)",
473
+ "/about",
474
+ "/api/public(.*)",
475
+ ]);
476
+
477
+ // Define admin routes (require specific role)
478
+ const isAdminRoute = createRouteMatcher(["/admin(.*)"]);
479
+
480
+ export default clerkMiddleware(async (auth, req) => {
481
+ // Allow public routes
482
+ if (isPublicRoute(req)) {
483
+ return;
484
+ }
485
+
486
+ // Protect admin routes with role check
487
+ if (isAdminRoute(req)) {
488
+ await auth.protect((has) => {
489
+ return has({ role: "admin" });
490
+ });
491
+ return;
492
+ }
493
+
494
+ // Protect all other routes
495
+ await auth.protect();
496
+ });
497
+
498
+ export const config = {
499
+ matcher: [
500
+ // Skip Next.js internals and static files
501
+ "/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)",
502
+ // Always run for API routes
503
+ "/(api|trpc)(.*)",
504
+ ],
505
+ };
506
+ ```
507
+
508
+ ### Server Component Route Protection
509
+
510
+ ```tsx
511
+ // app/dashboard/page.tsx
512
+ import { auth, currentUser } from "@clerk/nextjs/server";
513
+ import { redirect } from "next/navigation";
514
+
515
+ export default async function DashboardPage() {
516
+ const { userId } = await auth();
517
+
518
+ if (!userId) {
519
+ redirect("/sign-in");
520
+ }
521
+
522
+ const user = await currentUser();
523
+
524
+ return (
525
+ <div className="container mx-auto py-8">
526
+ <h1 className="mb-6 text-3xl font-bold">
527
+ Welcome, {user?.firstName || "User"}!
528
+ </h1>
529
+
530
+ <div className="grid gap-6 md:grid-cols-2">
531
+ <div className="rounded-lg border p-6">
532
+ <h2 className="mb-2 text-xl font-semibold">Profile</h2>
533
+ <p className="text-gray-600">Manage your account settings</p>
534
+ </div>
535
+
536
+ <div className="rounded-lg border p-6">
537
+ <h2 className="mb-2 text-xl font-semibold">Activity</h2>
538
+ <p className="text-gray-600">View your recent activity</p>
539
+ </div>
540
+ </div>
541
+ </div>
542
+ );
543
+ }
544
+ ```
545
+
546
+ ### API Route Protection
547
+
548
+ ```typescript
549
+ // app/api/protected/route.ts
550
+ import { auth } from "@clerk/nextjs/server";
551
+ import { NextResponse } from "next/server";
552
+
553
+ export async function GET() {
554
+ const { userId } = await auth();
555
+
556
+ if (!userId) {
557
+ return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
558
+ }
559
+
560
+ // Fetch user-specific data
561
+ const data = {
562
+ userId,
563
+ message: "This is protected data",
564
+ timestamp: new Date().toISOString(),
565
+ };
566
+
567
+ return NextResponse.json(data);
568
+ }
569
+
570
+ export async function POST(req: Request) {
571
+ const { userId, sessionClaims } = await auth();
572
+
573
+ if (!userId) {
574
+ return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
575
+ }
576
+
577
+ const body = await req.json();
578
+
579
+ // Process authenticated request
580
+ return NextResponse.json({
581
+ success: true,
582
+ userId,
583
+ data: body,
584
+ });
585
+ }
586
+ ```
587
+
588
+ ---
589
+
590
+ ## 6. User Profile Management
591
+
592
+ ### User Profile Display Component
593
+
594
+ ```tsx
595
+ // components/user-profile-display.tsx
596
+ "use client";
597
+
598
+ import { useUser } from "@clerk/nextjs";
599
+ import Image from "next/image";
600
+
601
+ export function UserProfileDisplay() {
602
+ const { isLoaded, isSignedIn, user } = useUser();
603
+
604
+ if (!isLoaded) {
605
+ return <div>Loading profile...</div>;
606
+ }
607
+
608
+ if (!isSignedIn || !user) {
609
+ return <div>Please sign in to view your profile</div>;
610
+ }
611
+
612
+ return (
613
+ <div className="rounded-lg border p-6">
614
+ <div className="mb-4 flex items-center gap-4">
615
+ {user.imageUrl && (
616
+ <Image
617
+ src={user.imageUrl}
618
+ alt={`${user.firstName || "User"} profile`}
619
+ width={80}
620
+ height={80}
621
+ className="rounded-full"
622
+ />
623
+ )}
624
+
625
+ <div>
626
+ <h2 className="text-2xl font-bold">
627
+ {user.firstName} {user.lastName}
628
+ </h2>
629
+ {user.username && <p className="text-gray-600">@{user.username}</p>}
630
+ </div>
631
+ </div>
632
+
633
+ <dl className="space-y-2">
634
+ <div>
635
+ <dt className="font-medium">Email:</dt>
636
+ <dd className="text-gray-600">
637
+ {user.primaryEmailAddress?.emailAddress}
638
+ </dd>
639
+ </div>
640
+
641
+ {user.primaryPhoneNumber && (
642
+ <div>
643
+ <dt className="font-medium">Phone:</dt>
644
+ <dd className="text-gray-600">
645
+ {user.primaryPhoneNumber.phoneNumber}
646
+ </dd>
647
+ </div>
648
+ )}
649
+
650
+ <div>
651
+ <dt className="font-medium">Member Since:</dt>
652
+ <dd className="text-gray-600">
653
+ {new Date(user.createdAt).toLocaleDateString()}
654
+ </dd>
655
+ </div>
656
+ </dl>
657
+ </div>
658
+ );
659
+ }
660
+ ```
661
+
662
+ ### Update User Profile
663
+
664
+ ```tsx
665
+ // components/update-profile-form.tsx
666
+ "use client";
667
+
668
+ import { useUser } from "@clerk/nextjs";
669
+ import { useState } from "react";
670
+
671
+ export function UpdateProfileForm() {
672
+ const { user } = useUser();
673
+ const [firstName, setFirstName] = useState(user?.firstName || "");
674
+ const [lastName, setLastName] = useState(user?.lastName || "");
675
+ const [isUpdating, setIsUpdating] = useState(false);
676
+ const [message, setMessage] = useState<{
677
+ type: "success" | "error";
678
+ text: string;
679
+ } | null>(null);
680
+
681
+ const handleSubmit = async (e: React.FormEvent) => {
682
+ e.preventDefault();
683
+
684
+ if (!user) return;
685
+
686
+ setIsUpdating(true);
687
+ setMessage(null);
688
+
689
+ try {
690
+ await user.update({
691
+ firstName,
692
+ lastName,
693
+ });
694
+
695
+ setMessage({ type: "success", text: "Profile updated successfully!" });
696
+ } catch (err) {
697
+ setMessage({
698
+ type: "error",
699
+ text: err instanceof Error ? err.message : "Failed to update profile",
700
+ });
701
+ } finally {
702
+ setIsUpdating(false);
703
+ }
704
+ };
705
+
706
+ return (
707
+ <form onSubmit={handleSubmit} className="space-y-4">
708
+ <div>
709
+ <label htmlFor="firstName" className="block text-sm font-medium">
710
+ First Name
711
+ </label>
712
+ <input
713
+ id="firstName"
714
+ type="text"
715
+ value={firstName}
716
+ onChange={(e) => setFirstName(e.target.value)}
717
+ className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2"
718
+ required
719
+ />
720
+ </div>
721
+
722
+ <div>
723
+ <label htmlFor="lastName" className="block text-sm font-medium">
724
+ Last Name
725
+ </label>
726
+ <input
727
+ id="lastName"
728
+ type="text"
729
+ value={lastName}
730
+ onChange={(e) => setLastName(e.target.value)}
731
+ className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2"
732
+ required
733
+ />
734
+ </div>
735
+
736
+ {message && (
737
+ <div
738
+ className={`rounded p-3 ${
739
+ message.type === "success"
740
+ ? "bg-green-50 text-green-700"
741
+ : "bg-red-50 text-red-700"
742
+ }`}
743
+ >
744
+ {message.text}
745
+ </div>
746
+ )}
747
+
748
+ <button
749
+ type="submit"
750
+ disabled={isUpdating}
751
+ className="w-full rounded-md bg-blue-600 px-4 py-2 text-white hover:bg-blue-700 disabled:bg-gray-400"
752
+ >
753
+ {isUpdating ? "Updating..." : "Update Profile"}
754
+ </button>
755
+ </form>
756
+ );
757
+ }
758
+ ```
759
+
760
+ ### Upload Profile Image
761
+
762
+ ```tsx
763
+ // components/profile-image-upload.tsx
764
+ "use client";
765
+
766
+ import { useUser } from "@clerk/nextjs";
767
+ import { useState } from "react";
768
+ import Image from "next/image";
769
+
770
+ export function ProfileImageUpload() {
771
+ const { user } = useUser();
772
+ const [isUploading, setIsUploading] = useState(false);
773
+ const [error, setError] = useState<string | null>(null);
774
+
775
+ const handleImageUpload = async (e: React.ChangeEvent<HTMLInputElement>) => {
776
+ const file = e.target.files?.[0];
777
+ if (!file || !user) return;
778
+
779
+ setIsUploading(true);
780
+ setError(null);
781
+
782
+ try {
783
+ await user.setProfileImage({ file });
784
+ } catch (err) {
785
+ setError(err instanceof Error ? err.message : "Failed to upload image");
786
+ } finally {
787
+ setIsUploading(false);
788
+ }
789
+ };
790
+
791
+ if (!user) return null;
792
+
793
+ return (
794
+ <div className="flex items-center gap-4">
795
+ {user.imageUrl && (
796
+ <Image
797
+ src={user.imageUrl}
798
+ alt="Profile"
799
+ width={100}
800
+ height={100}
801
+ className="rounded-full"
802
+ />
803
+ )}
804
+
805
+ <div>
806
+ <label
807
+ htmlFor="profile-image"
808
+ className="cursor-pointer rounded-md bg-blue-600 px-4 py-2 text-white hover:bg-blue-700"
809
+ >
810
+ {isUploading ? "Uploading..." : "Upload Image"}
811
+ </label>
812
+ <input
813
+ id="profile-image"
814
+ type="file"
815
+ accept="image/*"
816
+ onChange={handleImageUpload}
817
+ disabled={isUploading}
818
+ className="hidden"
819
+ />
820
+
821
+ {error && <p className="mt-2 text-sm text-red-600">{error}</p>}
822
+ </div>
823
+ </div>
824
+ );
825
+ }
826
+ ```
827
+
828
+ ---
829
+
830
+ ## 7. Organizations
831
+
832
+ ### Organization Switcher Component
833
+
834
+ ```tsx
835
+ // app/dashboard/layout.tsx
836
+ import { OrganizationSwitcher } from "@clerk/nextjs";
837
+
838
+ export default function DashboardLayout({
839
+ children,
840
+ }: {
841
+ children: React.ReactNode;
842
+ }) {
843
+ return (
844
+ <div>
845
+ <nav className="border-b">
846
+ <div className="container mx-auto flex h-16 items-center justify-between px-4">
847
+ <h1 className="text-xl font-bold">Dashboard</h1>
848
+
849
+ <OrganizationSwitcher
850
+ appearance={{
851
+ elements: {
852
+ rootBox: "flex items-center",
853
+ organizationSwitcherTrigger: "rounded-md border px-3 py-2",
854
+ },
855
+ }}
856
+ hidePersonal={false}
857
+ afterCreateOrganizationUrl="/dashboard/organization"
858
+ afterSelectOrganizationUrl="/dashboard/organization"
859
+ />
860
+ </div>
861
+ </nav>
862
+
863
+ <main className="container mx-auto py-8 px-4">{children}</main>
864
+ </div>
865
+ );
866
+ }
867
+ ```
868
+
869
+ ### Custom Organization List
870
+
871
+ ```tsx
872
+ // components/organization-list.tsx
873
+ "use client";
874
+
875
+ import { useOrganizationList } from "@clerk/nextjs";
876
+ import Image from "next/image";
877
+
878
+ export function OrganizationList() {
879
+ const { isLoaded, setActive, userMemberships } = useOrganizationList({
880
+ userMemberships: {
881
+ infinite: true,
882
+ },
883
+ });
884
+
885
+ if (!isLoaded) {
886
+ return <div>Loading organizations...</div>;
887
+ }
888
+
889
+ return (
890
+ <div className="space-y-4">
891
+ <h2 className="text-xl font-semibold">Your Organizations</h2>
892
+
893
+ {userMemberships.data && userMemberships.data.length > 0 ? (
894
+ <ul className="space-y-2">
895
+ {userMemberships.data.map((membership) => (
896
+ <li
897
+ key={membership.id}
898
+ className="flex items-center justify-between rounded-lg border p-4"
899
+ >
900
+ <div className="flex items-center gap-3">
901
+ {membership.organization.imageUrl && (
902
+ <Image
903
+ src={membership.organization.imageUrl}
904
+ alt={membership.organization.name}
905
+ width={40}
906
+ height={40}
907
+ className="rounded"
908
+ />
909
+ )}
910
+
911
+ <div>
912
+ <p className="font-medium">{membership.organization.name}</p>
913
+ <p className="text-sm text-gray-600">
914
+ Role: {membership.role}
915
+ </p>
916
+ </div>
917
+ </div>
918
+
919
+ <button
920
+ onClick={() =>
921
+ setActive({ organization: membership.organization.id })
922
+ }
923
+ className="rounded-md bg-blue-600 px-4 py-2 text-sm text-white hover:bg-blue-700"
924
+ >
925
+ Switch
926
+ </button>
927
+ </li>
928
+ ))}
929
+ </ul>
930
+ ) : (
931
+ <p className="text-gray-600">
932
+ You are not a member of any organizations
933
+ </p>
934
+ )}
935
+
936
+ {userMemberships.hasNextPage && (
937
+ <button
938
+ onClick={() => userMemberships.fetchNext()}
939
+ className="w-full rounded-md border px-4 py-2 hover:bg-gray-50"
940
+ >
941
+ Load More
942
+ </button>
943
+ )}
944
+ </div>
945
+ );
946
+ }
947
+ ```
948
+
949
+ ### Organization Members Management
950
+
951
+ ```tsx
952
+ // components/organization-members.tsx
953
+ "use client";
954
+
955
+ import { useOrganization } from "@clerk/nextjs";
956
+ import Image from "next/image";
957
+
958
+ export function OrganizationMembers() {
959
+ const { organization, memberships, isLoaded } = useOrganization({
960
+ memberships: {
961
+ infinite: true,
962
+ },
963
+ });
964
+
965
+ if (!isLoaded) {
966
+ return <div>Loading members...</div>;
967
+ }
968
+
969
+ if (!organization) {
970
+ return <div>No organization selected</div>;
971
+ }
972
+
973
+ return (
974
+ <div className="space-y-4">
975
+ <div className="flex items-center justify-between">
976
+ <h2 className="text-xl font-semibold">{organization.name} Members</h2>
977
+ <span className="text-sm text-gray-600">
978
+ {organization.membersCount} total members
979
+ </span>
980
+ </div>
981
+
982
+ {memberships.data && memberships.data.length > 0 ? (
983
+ <ul className="space-y-2">
984
+ {memberships.data.map((membership) => (
985
+ <li
986
+ key={membership.id}
987
+ className="flex items-center justify-between rounded-lg border p-4"
988
+ >
989
+ <div className="flex items-center gap-3">
990
+ {membership.publicUserData.imageUrl && (
991
+ <Image
992
+ src={membership.publicUserData.imageUrl}
993
+ alt={membership.publicUserData.firstName || "Member"}
994
+ width={40}
995
+ height={40}
996
+ className="rounded-full"
997
+ />
998
+ )}
999
+
1000
+ <div>
1001
+ <p className="font-medium">
1002
+ {membership.publicUserData.firstName}{" "}
1003
+ {membership.publicUserData.lastName}
1004
+ </p>
1005
+ <p className="text-sm text-gray-600">
1006
+ {membership.publicUserData.identifier}
1007
+ </p>
1008
+ </div>
1009
+ </div>
1010
+
1011
+ <span className="rounded bg-blue-100 px-3 py-1 text-sm text-blue-800">
1012
+ {membership.role}
1013
+ </span>
1014
+ </li>
1015
+ ))}
1016
+ </ul>
1017
+ ) : (
1018
+ <p className="text-gray-600">No members found</p>
1019
+ )}
1020
+
1021
+ {memberships.hasNextPage && (
1022
+ <button
1023
+ onClick={() => memberships.fetchNext()}
1024
+ className="w-full rounded-md border px-4 py-2 hover:bg-gray-50"
1025
+ >
1026
+ Load More Members
1027
+ </button>
1028
+ )}
1029
+ </div>
1030
+ );
1031
+ }
1032
+ ```
1033
+
1034
+ ---
1035
+
1036
+ ## 8. Webhooks
1037
+
1038
+ ### Webhook Handler with Svix Verification
1039
+
1040
+ ```bash
1041
+ # Install Svix for webhook verification
1042
+ npm install svix
1043
+ ```
1044
+
1045
+ ```typescript
1046
+ // app/api/webhooks/clerk/route.ts
1047
+ import { Webhook } from "svix";
1048
+ import { headers } from "next/headers";
1049
+ import { WebhookEvent } from "@clerk/nextjs/server";
1050
+
1051
+ export async function POST(req: Request) {
1052
+ // Get webhook secret from environment
1053
+ const WEBHOOK_SECRET = process.env.CLERK_WEBHOOK_SECRET;
1054
+
1055
+ if (!WEBHOOK_SECRET) {
1056
+ throw new Error("CLERK_WEBHOOK_SECRET is not defined");
1057
+ }
1058
+
1059
+ // Get headers
1060
+ const headerPayload = await headers();
1061
+ const svix_id = headerPayload.get("svix-id");
1062
+ const svix_timestamp = headerPayload.get("svix-timestamp");
1063
+ const svix_signature = headerPayload.get("svix-signature");
1064
+
1065
+ if (!svix_id || !svix_timestamp || !svix_signature) {
1066
+ return new Response("Missing svix headers", { status: 400 });
1067
+ }
1068
+
1069
+ // Get body
1070
+ const payload = await req.json();
1071
+ const body = JSON.stringify(payload);
1072
+
1073
+ // Create Svix instance
1074
+ const wh = new Webhook(WEBHOOK_SECRET);
1075
+
1076
+ let evt: WebhookEvent;
1077
+
1078
+ // Verify webhook
1079
+ try {
1080
+ evt = wh.verify(body, {
1081
+ "svix-id": svix_id,
1082
+ "svix-timestamp": svix_timestamp,
1083
+ "svix-signature": svix_signature,
1084
+ }) as WebhookEvent;
1085
+ } catch (err) {
1086
+ console.error("Webhook verification failed:", err);
1087
+ return new Response("Invalid signature", { status: 400 });
1088
+ }
1089
+
1090
+ // Handle events
1091
+ const eventType = evt.type;
1092
+
1093
+ switch (eventType) {
1094
+ case "user.created":
1095
+ const { id, email_addresses, first_name, last_name } = evt.data;
1096
+ console.log("User created:", {
1097
+ id,
1098
+ email_addresses,
1099
+ first_name,
1100
+ last_name,
1101
+ });
1102
+ // Add user to database
1103
+ break;
1104
+
1105
+ case "user.updated":
1106
+ console.log("User updated:", evt.data.id);
1107
+ // Update user in database
1108
+ break;
1109
+
1110
+ case "user.deleted":
1111
+ console.log("User deleted:", evt.data.id);
1112
+ // Delete user from database
1113
+ break;
1114
+
1115
+ case "organization.created":
1116
+ console.log("Organization created:", evt.data.id);
1117
+ // Create organization in database
1118
+ break;
1119
+
1120
+ case "organization.updated":
1121
+ console.log("Organization updated:", evt.data.id);
1122
+ // Update organization in database
1123
+ break;
1124
+
1125
+ case "organizationMembership.created":
1126
+ console.log("Organization membership created:", evt.data);
1127
+ // Add organization member to database
1128
+ break;
1129
+
1130
+ default:
1131
+ console.log(`Unhandled event type: ${eventType}`);
1132
+ }
1133
+
1134
+ return new Response("Webhook processed", { status: 200 });
1135
+ }
1136
+ ```
1137
+
1138
+ ### User Sync Service
1139
+
1140
+ ```typescript
1141
+ // lib/user-sync.ts
1142
+ import { clerkClient } from "@clerk/nextjs/server";
1143
+
1144
+ export async function syncUserToDatabase(userId: string) {
1145
+ const user = await clerkClient().users.getUser(userId);
1146
+
1147
+ // Your database sync logic
1148
+ const userData = {
1149
+ id: user.id,
1150
+ email: user.emailAddresses[0]?.emailAddress,
1151
+ firstName: user.firstName,
1152
+ lastName: user.lastName,
1153
+ imageUrl: user.imageUrl,
1154
+ createdAt: new Date(user.createdAt),
1155
+ updatedAt: new Date(user.updatedAt),
1156
+ };
1157
+
1158
+ console.log("Syncing user to database:", userData);
1159
+
1160
+ // Example: await db.users.upsert(userData)
1161
+
1162
+ return userData;
1163
+ }
1164
+
1165
+ export async function deleteUserFromDatabase(userId: string) {
1166
+ console.log("Deleting user from database:", userId);
1167
+
1168
+ // Example: await db.users.delete({ where: { id: userId } })
1169
+ }
1170
+ ```
1171
+
1172
+ ---
1173
+
1174
+ ## 9. Testing
1175
+
1176
+ ### Mock Clerk in Tests
1177
+
1178
+ ```bash
1179
+ # Install testing dependencies
1180
+ npm install -D @clerk/testing vitest @testing-library/react @testing-library/jest-dom
1181
+ ```
1182
+
1183
+ ```tsx
1184
+ // __tests__/components/protected-component.test.tsx
1185
+ import { render, screen } from "@testing-library/react";
1186
+ import { describe, it, expect, vi } from "vitest";
1187
+
1188
+ // Mock Clerk hooks
1189
+ vi.mock("@clerk/nextjs", () => ({
1190
+ useAuth: vi.fn(),
1191
+ useUser: vi.fn(),
1192
+ }));
1193
+
1194
+ import { useAuth, useUser } from "@clerk/nextjs";
1195
+ import { ProtectedComponent } from "@/components/protected-component";
1196
+
1197
+ describe("ProtectedComponent", () => {
1198
+ it("shows loading state when not loaded", () => {
1199
+ vi.mocked(useAuth).mockReturnValue({
1200
+ isLoaded: false,
1201
+ isSignedIn: false,
1202
+ userId: null,
1203
+ sessionId: null,
1204
+ getToken: vi.fn(),
1205
+ } as any);
1206
+
1207
+ render(<ProtectedComponent />);
1208
+ expect(screen.getByText("Loading...")).toBeInTheDocument();
1209
+ });
1210
+
1211
+ it("shows sign-in prompt when not authenticated", () => {
1212
+ vi.mocked(useAuth).mockReturnValue({
1213
+ isLoaded: true,
1214
+ isSignedIn: false,
1215
+ userId: null,
1216
+ sessionId: null,
1217
+ getToken: vi.fn(),
1218
+ } as any);
1219
+
1220
+ render(<ProtectedComponent />);
1221
+ expect(screen.getByText("Please sign in")).toBeInTheDocument();
1222
+ });
1223
+
1224
+ it("shows content when authenticated", () => {
1225
+ vi.mocked(useAuth).mockReturnValue({
1226
+ isLoaded: true,
1227
+ isSignedIn: true,
1228
+ userId: "user_123",
1229
+ sessionId: "sess_456",
1230
+ getToken: vi.fn(),
1231
+ } as any);
1232
+
1233
+ vi.mocked(useUser).mockReturnValue({
1234
+ isLoaded: true,
1235
+ isSignedIn: true,
1236
+ user: {
1237
+ id: "user_123",
1238
+ firstName: "John",
1239
+ lastName: "Doe",
1240
+ emailAddresses: [{ emailAddress: "john@example.com" }],
1241
+ },
1242
+ } as any);
1243
+
1244
+ render(<ProtectedComponent />);
1245
+ expect(screen.getByText("Welcome, John!")).toBeInTheDocument();
1246
+ });
1247
+ });
1248
+ ```
1249
+
1250
+ ### Integration Test Setup
1251
+
1252
+ ```typescript
1253
+ // __tests__/setup.ts
1254
+ import { beforeAll, afterAll, afterEach } from "vitest";
1255
+ import { setupClerkTestingToken } from "@clerk/testing/vitest";
1256
+
1257
+ beforeAll(() => {
1258
+ // Setup Clerk testing environment
1259
+ setupClerkTestingToken();
1260
+ });
1261
+
1262
+ afterEach(() => {
1263
+ // Clear mocks after each test
1264
+ vi.clearAllMocks();
1265
+ });
1266
+
1267
+ afterAll(() => {
1268
+ // Cleanup
1269
+ });
1270
+ ```
1271
+
1272
+ ### E2E Test with Playwright
1273
+
1274
+ ```typescript
1275
+ // e2e/auth.spec.ts
1276
+ import { test, expect } from "@playwright/test";
1277
+
1278
+ test.describe("Authentication Flow", () => {
1279
+ test("should sign in successfully", async ({ page }) => {
1280
+ await page.goto("http://localhost:3000");
1281
+
1282
+ // Click sign-in button
1283
+ await page.click("text=Sign In");
1284
+
1285
+ // Fill in credentials
1286
+ await page.fill('input[name="identifier"]', "test@example.com");
1287
+ await page.click('button[type="submit"]');
1288
+
1289
+ await page.fill('input[name="password"]', "testpassword123");
1290
+ await page.click('button[type="submit"]');
1291
+
1292
+ // Wait for redirect to dashboard
1293
+ await page.waitForURL("**/dashboard");
1294
+
1295
+ // Verify user is signed in
1296
+ await expect(page.locator("text=Welcome")).toBeVisible();
1297
+ });
1298
+
1299
+ test("should sign out successfully", async ({ page }) => {
1300
+ // Assume already signed in
1301
+ await page.goto("http://localhost:3000/dashboard");
1302
+
1303
+ // Click user button and sign out
1304
+ await page.click('[data-testid="user-button"]');
1305
+ await page.click("text=Sign Out");
1306
+
1307
+ // Verify redirect to home
1308
+ await page.waitForURL("http://localhost:3000");
1309
+ await expect(page.locator("text=Sign In")).toBeVisible();
1310
+ });
1311
+ });
1312
+ ```
1313
+
1314
+ ---
1315
+
1316
+ ## 10. Advanced Features
1317
+
1318
+ ### Custom JWT Template with Backend API
1319
+
1320
+ ```typescript
1321
+ // app/api/external/route.ts
1322
+ import { auth } from "@clerk/nextjs/server";
1323
+ import { NextResponse } from "next/server";
1324
+
1325
+ export async function GET() {
1326
+ const { userId, getToken } = await auth();
1327
+
1328
+ if (!userId) {
1329
+ return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
1330
+ }
1331
+
1332
+ // Get token with custom template
1333
+ const token = await getToken({ template: "supabase" });
1334
+
1335
+ // Call external API with token
1336
+ const response = await fetch("https://api.external.com/data", {
1337
+ headers: {
1338
+ Authorization: `Bearer ${token}`,
1339
+ },
1340
+ });
1341
+
1342
+ const data = await response.json();
1343
+ return NextResponse.json(data);
1344
+ }
1345
+ ```
1346
+
1347
+ ### Multi-Factor Authentication Setup
1348
+
1349
+ ```tsx
1350
+ // components/mfa-setup.tsx
1351
+ "use client";
1352
+
1353
+ import { useUser } from "@clerk/nextjs";
1354
+ import { useState } from "react";
1355
+
1356
+ export function MFASetup() {
1357
+ const { user } = useUser();
1358
+ const [isEnabling, setIsEnabling] = useState(false);
1359
+ const [qrCode, setQrCode] = useState<string | null>(null);
1360
+ const [backupCodes, setBackupCodes] = useState<string[]>([]);
1361
+
1362
+ const enableTOTP = async () => {
1363
+ if (!user) return;
1364
+
1365
+ setIsEnabling(true);
1366
+
1367
+ try {
1368
+ const totp = await user.createTOTP();
1369
+ setQrCode(totp.qr_code);
1370
+
1371
+ // Generate backup codes
1372
+ const codes = await user.createBackupCode();
1373
+ setBackupCodes(codes.codes);
1374
+ } catch (err) {
1375
+ console.error("Failed to enable TOTP:", err);
1376
+ } finally {
1377
+ setIsEnabling(false);
1378
+ }
1379
+ };
1380
+
1381
+ return (
1382
+ <div className="rounded-lg border p-6">
1383
+ <h2 className="mb-4 text-xl font-semibold">Two-Factor Authentication</h2>
1384
+
1385
+ {!qrCode ? (
1386
+ <button
1387
+ onClick={enableTOTP}
1388
+ disabled={isEnabling}
1389
+ className="rounded-md bg-blue-600 px-4 py-2 text-white hover:bg-blue-700"
1390
+ >
1391
+ {isEnabling ? "Setting up..." : "Enable 2FA"}
1392
+ </button>
1393
+ ) : (
1394
+ <div className="space-y-4">
1395
+ <div>
1396
+ <p className="mb-2">
1397
+ Scan this QR code with your authenticator app:
1398
+ </p>
1399
+ <img src={qrCode} alt="QR Code" className="rounded border" />
1400
+ </div>
1401
+
1402
+ {backupCodes.length > 0 && (
1403
+ <div>
1404
+ <p className="mb-2 font-medium">Backup Codes:</p>
1405
+ <ul className="space-y-1 font-mono text-sm">
1406
+ {backupCodes.map((code, idx) => (
1407
+ <li key={idx} className="rounded bg-gray-100 p-2">
1408
+ {code}
1409
+ </li>
1410
+ ))}
1411
+ </ul>
1412
+ <p className="mt-2 text-sm text-gray-600">
1413
+ Save these codes in a secure location
1414
+ </p>
1415
+ </div>
1416
+ )}
1417
+ </div>
1418
+ )}
1419
+ </div>
1420
+ );
1421
+ }
1422
+ ```
1423
+
1424
+ ---
1425
+
1426
+ **Last Updated**: 2026-01-10