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

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

Potentially problematic release.


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

Files changed (378) hide show
  1. moai_adk/__init__.py +2 -5
  2. moai_adk/__main__.py +114 -82
  3. moai_adk/cli/__init__.py +6 -1
  4. moai_adk/cli/commands/__init__.py +1 -3
  5. moai_adk/cli/commands/analyze.py +5 -16
  6. moai_adk/cli/commands/doctor.py +6 -18
  7. moai_adk/cli/commands/init.py +56 -125
  8. moai_adk/cli/commands/language.py +14 -35
  9. moai_adk/cli/commands/status.py +9 -15
  10. moai_adk/cli/commands/update.py +1555 -190
  11. moai_adk/cli/prompts/init_prompts.py +112 -56
  12. moai_adk/cli/spec_status.py +263 -0
  13. moai_adk/cli/ui/__init__.py +44 -0
  14. moai_adk/cli/ui/progress.py +422 -0
  15. moai_adk/cli/ui/prompts.py +389 -0
  16. moai_adk/cli/ui/theme.py +129 -0
  17. moai_adk/cli/worktree/__init__.py +27 -0
  18. moai_adk/cli/worktree/__main__.py +31 -0
  19. moai_adk/cli/worktree/cli.py +672 -0
  20. moai_adk/cli/worktree/exceptions.py +89 -0
  21. moai_adk/cli/worktree/manager.py +490 -0
  22. moai_adk/cli/worktree/models.py +65 -0
  23. moai_adk/cli/worktree/registry.py +128 -0
  24. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  25. moai_adk/core/analysis/session_analyzer.py +17 -56
  26. moai_adk/core/claude_integration.py +26 -54
  27. moai_adk/core/command_helpers.py +10 -10
  28. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  29. moai_adk/core/config/auto_spec_config.py +5 -11
  30. moai_adk/core/config/migration.py +19 -9
  31. moai_adk/core/config/unified.py +436 -0
  32. moai_adk/core/context_manager.py +6 -12
  33. moai_adk/core/enterprise_features.py +1404 -0
  34. moai_adk/core/error_recovery_system.py +725 -112
  35. moai_adk/core/event_driven_hook_system.py +1371 -0
  36. moai_adk/core/git/__init__.py +8 -0
  37. moai_adk/core/git/branch_manager.py +3 -11
  38. moai_adk/core/git/checkpoint.py +1 -3
  39. moai_adk/core/git/conflict_detector.py +413 -0
  40. moai_adk/core/git/manager.py +91 -1
  41. moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
  42. moai_adk/core/input_validation_middleware.py +1006 -0
  43. moai_adk/core/integration/engine.py +6 -18
  44. moai_adk/core/integration/integration_tester.py +10 -9
  45. moai_adk/core/integration/utils.py +1 -1
  46. moai_adk/core/issue_creator.py +10 -28
  47. moai_adk/core/jit_context_loader.py +956 -0
  48. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  49. moai_adk/core/language_config_resolver.py +485 -0
  50. moai_adk/core/language_validator.py +28 -41
  51. moai_adk/core/mcp/setup.py +15 -12
  52. moai_adk/core/merge/__init__.py +9 -0
  53. moai_adk/core/merge/analyzer.py +481 -0
  54. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  55. moai_adk/core/migration/backup_manager.py +78 -9
  56. moai_adk/core/migration/custom_element_scanner.py +358 -0
  57. moai_adk/core/migration/file_migrator.py +8 -17
  58. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  59. moai_adk/core/migration/selective_restorer.py +470 -0
  60. moai_adk/core/migration/template_utils.py +74 -0
  61. moai_adk/core/migration/user_selection_ui.py +338 -0
  62. moai_adk/core/migration/version_detector.py +6 -10
  63. moai_adk/core/migration/version_migrator.py +3 -3
  64. moai_adk/core/performance/cache_system.py +8 -10
  65. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  66. moai_adk/core/project/checker.py +2 -4
  67. moai_adk/core/project/detector.py +1 -3
  68. moai_adk/core/project/initializer.py +135 -23
  69. moai_adk/core/project/phase_executor.py +54 -81
  70. moai_adk/core/project/validator.py +6 -12
  71. moai_adk/core/quality/trust_checker.py +9 -27
  72. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  73. moai_adk/core/robust_json_parser.py +611 -0
  74. moai_adk/core/rollback_manager.py +73 -148
  75. moai_adk/core/session_manager.py +10 -26
  76. moai_adk/core/skill_loading_system.py +579 -0
  77. moai_adk/core/spec/confidence_scoring.py +31 -100
  78. moai_adk/core/spec/ears_template_engine.py +351 -286
  79. moai_adk/core/spec/quality_validator.py +35 -69
  80. moai_adk/core/spec_status_manager.py +64 -74
  81. moai_adk/core/template/backup.py +45 -20
  82. moai_adk/core/template/config.py +112 -39
  83. moai_adk/core/template/merger.py +11 -19
  84. moai_adk/core/template/processor.py +253 -149
  85. moai_adk/core/template_engine.py +73 -40
  86. moai_adk/core/template_variable_synchronizer.py +417 -0
  87. moai_adk/core/unified_permission_manager.py +745 -0
  88. moai_adk/core/user_behavior_analytics.py +851 -0
  89. moai_adk/core/version_sync.py +429 -0
  90. moai_adk/foundation/__init__.py +56 -0
  91. moai_adk/foundation/backend.py +1027 -0
  92. moai_adk/foundation/database.py +1115 -0
  93. moai_adk/foundation/devops.py +1585 -0
  94. moai_adk/foundation/ears.py +431 -0
  95. moai_adk/foundation/frontend.py +870 -0
  96. moai_adk/foundation/git/commit_templates.py +4 -12
  97. moai_adk/foundation/git.py +376 -0
  98. moai_adk/foundation/langs.py +484 -0
  99. moai_adk/foundation/ml_ops.py +1162 -0
  100. moai_adk/foundation/testing.py +1524 -0
  101. moai_adk/foundation/trust/trust_principles.py +23 -72
  102. moai_adk/foundation/trust/validation_checklist.py +57 -162
  103. moai_adk/project/__init__.py +0 -0
  104. moai_adk/project/configuration.py +1084 -0
  105. moai_adk/project/documentation.py +566 -0
  106. moai_adk/project/schema.py +447 -0
  107. moai_adk/statusline/alfred_detector.py +1 -3
  108. moai_adk/statusline/config.py +13 -4
  109. moai_adk/statusline/enhanced_output_style_detector.py +23 -15
  110. moai_adk/statusline/main.py +51 -15
  111. moai_adk/statusline/renderer.py +104 -48
  112. moai_adk/statusline/update_checker.py +3 -9
  113. moai_adk/statusline/version_reader.py +140 -46
  114. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
  115. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  116. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  117. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  118. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  119. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  120. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  121. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  122. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  123. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  124. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  125. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  126. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  127. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  128. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  129. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  130. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  131. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  132. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  133. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  134. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  135. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  136. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  137. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  138. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  139. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  140. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  141. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  142. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  143. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  144. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  145. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  146. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  147. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  148. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  149. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  150. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  151. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  152. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  153. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  154. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  155. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  156. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  157. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  158. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  159. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  160. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  161. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  162. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  163. moai_adk/templates/.claude/settings.json +172 -0
  164. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  165. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  166. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  167. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  168. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  169. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  170. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
  171. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
  172. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  173. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  174. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  175. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  176. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
  177. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  178. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  179. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  180. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  181. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  182. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  183. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  184. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  185. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  186. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  187. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  188. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  189. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  190. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  191. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  192. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  193. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  194. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  195. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  196. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  197. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  198. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  199. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  200. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  201. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  202. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  203. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  204. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  205. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  206. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  207. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  208. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  209. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  210. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  211. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  212. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  213. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  214. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  215. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  229. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  230. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  231. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  232. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  233. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  234. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  235. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  236. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  237. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  238. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  239. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  240. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  241. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  242. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  243. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  244. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  245. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  246. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  247. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  248. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  249. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  250. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  251. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  252. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  253. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  254. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  255. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  256. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  257. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  258. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  259. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  260. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  261. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  262. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  263. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  264. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  265. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  266. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  267. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  268. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  269. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  270. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  271. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  272. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  273. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  274. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  275. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  276. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  277. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  278. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  279. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  280. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  281. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  282. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  283. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  284. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  285. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  286. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  287. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  288. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  289. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  290. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  291. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  323. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  324. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  325. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  326. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  327. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  328. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  329. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  330. moai_adk/templates/.git-hooks/pre-commit +103 -41
  331. moai_adk/templates/.git-hooks/pre-push +116 -21
  332. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  333. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  334. moai_adk/templates/.gitignore +184 -44
  335. moai_adk/templates/.mcp.json +7 -9
  336. moai_adk/templates/.moai/cache/personalization.json +10 -0
  337. moai_adk/templates/.moai/config/config.yaml +344 -0
  338. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  339. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  340. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  341. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  342. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  343. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  344. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  345. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  346. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  347. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  348. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  349. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  350. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  351. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  352. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  353. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  354. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  355. moai_adk/templates/CLAUDE.md +382 -501
  356. moai_adk/utils/__init__.py +24 -1
  357. moai_adk/utils/banner.py +7 -10
  358. moai_adk/utils/common.py +16 -30
  359. moai_adk/utils/link_validator.py +4 -12
  360. moai_adk/utils/safe_file_reader.py +2 -6
  361. moai_adk/utils/timeout.py +160 -0
  362. moai_adk/utils/toon_utils.py +256 -0
  363. moai_adk/version.py +22 -0
  364. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  365. moai_adk-0.32.8.dist-info/RECORD +396 -0
  366. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  367. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  368. moai_adk/cli/commands/backup.py +0 -82
  369. moai_adk/cli/commands/improve_user_experience.py +0 -348
  370. moai_adk/cli/commands/migrate.py +0 -158
  371. moai_adk/cli/commands/validate_links.py +0 -118
  372. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
  373. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  374. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  375. moai_adk/utils/user_experience.py +0 -531
  376. moai_adk-0.25.4.dist-info/METADATA +0 -2279
  377. moai_adk-0.25.4.dist-info/RECORD +0 -112
  378. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,575 @@
1
+ # Advanced Examples & Production Patterns
2
+
3
+ ## Example 1: Complete User Settings Page
4
+
5
+ ```tsx
6
+ import {
7
+ Card,
8
+ CardContent,
9
+ CardDescription,
10
+ CardHeader,
11
+ CardTitle,
12
+ } from "@/components/ui/card"
13
+ import { Button } from "@/components/ui/button"
14
+ import { Input } from "@/components/ui/input"
15
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
16
+ import { Switch } from "@/components/ui/switch"
17
+ import { Badge } from "@/components/ui/badge"
18
+ import React from "react"
19
+
20
+ export function UserSettingsPage() {
21
+ const [settings, setSettings] = React.useState({
22
+ emailNotifications: true,
23
+ pushNotifications: false,
24
+ twoFactorAuth: true,
25
+ })
26
+
27
+ return (
28
+ <div className="max-w-4xl mx-auto p-6">
29
+ <div className="mb-8">
30
+ <h1 className="text-3xl font-bold mb-2">Account Settings</h1>
31
+ <p className="text-gray-600">Manage your account and preferences</p>
32
+ </div>
33
+
34
+ <Tabs defaultValue="general" className="w-full">
35
+ <TabsList className="grid w-full grid-cols-3">
36
+ <TabsTrigger value="general">General</TabsTrigger>
37
+ <TabsTrigger value="notifications">Notifications</TabsTrigger>
38
+ <TabsTrigger value="security">Security</TabsTrigger>
39
+ </TabsList>
40
+
41
+ {/* General Settings */}
42
+ <TabsContent value="general">
43
+ <Card>
44
+ <CardHeader>
45
+ <CardTitle>Profile Information</CardTitle>
46
+ <CardDescription>
47
+ Update your profile details
48
+ </CardDescription>
49
+ </CardHeader>
50
+ <CardContent className="space-y-6">
51
+ <div className="grid grid-cols-2 gap-4">
52
+ <div>
53
+ <label className="block text-sm font-medium mb-2">
54
+ First Name
55
+ </label>
56
+ <Input placeholder="John" />
57
+ </div>
58
+ <div>
59
+ <label className="block text-sm font-medium mb-2">
60
+ Last Name
61
+ </label>
62
+ <Input placeholder="Doe" />
63
+ </div>
64
+ </div>
65
+
66
+ <div>
67
+ <label className="block text-sm font-medium mb-2">
68
+ Email
69
+ </label>
70
+ <Input type="email" placeholder="john@example.com" />
71
+ </div>
72
+
73
+ <div>
74
+ <label className="block text-sm font-medium mb-2">
75
+ Bio
76
+ </label>
77
+ <textarea
78
+ placeholder="Tell us about yourself..."
79
+ className="w-full px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
80
+ />
81
+ </div>
82
+
83
+ <Button>Save Changes</Button>
84
+ </CardContent>
85
+ </Card>
86
+ </TabsContent>
87
+
88
+ {/* Notifications */}
89
+ <TabsContent value="notifications">
90
+ <Card>
91
+ <CardHeader>
92
+ <CardTitle>Notification Preferences</CardTitle>
93
+ <CardDescription>
94
+ Control how you receive notifications
95
+ </CardDescription>
96
+ </CardHeader>
97
+ <CardContent className="space-y-6">
98
+ {[
99
+ {
100
+ key: 'emailNotifications',
101
+ label: 'Email Notifications',
102
+ description: 'Receive email updates'
103
+ },
104
+ {
105
+ key: 'pushNotifications',
106
+ label: 'Push Notifications',
107
+ description: 'Receive push notifications'
108
+ },
109
+ ].map((notif) => (
110
+ <div
111
+ key={notif.key}
112
+ className="flex items-center justify-between py-4 border-b last:border-b-0"
113
+ >
114
+ <div>
115
+ <p className="font-medium">{notif.label}</p>
116
+ <p className="text-sm text-gray-600">
117
+ {notif.description}
118
+ </p>
119
+ </div>
120
+ <Switch
121
+ checked={settings[notif.key]}
122
+ onCheckedChange={(checked) =>
123
+ setSettings({
124
+ ...settings,
125
+ [notif.key]: checked,
126
+ })
127
+ }
128
+ />
129
+ </div>
130
+ ))}
131
+
132
+ <Button className="mt-6">Save Preferences</Button>
133
+ </CardContent>
134
+ </Card>
135
+ </TabsContent>
136
+
137
+ {/* Security */}
138
+ <TabsContent value="security">
139
+ <Card>
140
+ <CardHeader>
141
+ <CardTitle>Security Settings</CardTitle>
142
+ <CardDescription>
143
+ Manage your account security
144
+ </CardDescription>
145
+ </CardHeader>
146
+ <CardContent className="space-y-6">
147
+ <div className="flex items-center justify-between py-4 border-b">
148
+ <div>
149
+ <p className="font-medium">Two-Factor Authentication</p>
150
+ <p className="text-sm text-gray-600">
151
+ Add extra security to your account
152
+ </p>
153
+ </div>
154
+ <Badge variant={settings.twoFactorAuth ? "default" : "outline"}>
155
+ {settings.twoFactorAuth ? "Enabled" : "Disabled"}
156
+ </Badge>
157
+ </div>
158
+
159
+ <div>
160
+ <Button variant="outline">Change Password</Button>
161
+ </div>
162
+
163
+ <div className="p-4 bg-red-50 border border-red-200 rounded-lg">
164
+ <h3 className="font-semibold text-red-900 mb-2">
165
+ Danger Zone
166
+ </h3>
167
+ <p className="text-sm text-red-800 mb-4">
168
+ Once you delete your account, there is no going back.
169
+ </p>
170
+ <Button variant="destructive" size="sm">
171
+ Delete Account
172
+ </Button>
173
+ </div>
174
+ </CardContent>
175
+ </Card>
176
+ </TabsContent>
177
+ </Tabs>
178
+ </div>
179
+ )
180
+ }
181
+ ```
182
+
183
+ ## Example 2: Data Table with Sorting & Filtering
184
+
185
+ ```tsx
186
+ import {
187
+ Table,
188
+ TableBody,
189
+ TableCell,
190
+ TableHead,
191
+ TableHeader,
192
+ TableRow,
193
+ } from "@/components/ui/table"
194
+ import { Button } from "@/components/ui/button"
195
+ import { Input } from "@/components/ui/input"
196
+ import {
197
+ Select,
198
+ SelectContent,
199
+ SelectItem,
200
+ SelectTrigger,
201
+ SelectValue,
202
+ } from "@/components/ui/select"
203
+ import React from "react"
204
+
205
+ interface User {
206
+ id: string
207
+ name: string
208
+ email: string
209
+ status: "active" | "inactive"
210
+ joinDate: string
211
+ }
212
+
213
+ const users: User[] = [
214
+ {
215
+ id: "1",
216
+ name: "Alice Johnson",
217
+ email: "alice@example.com",
218
+ status: "active",
219
+ joinDate: "2025-01-15"
220
+ },
221
+ {
222
+ id: "2",
223
+ name: "Bob Smith",
224
+ email: "bob@example.com",
225
+ status: "active",
226
+ joinDate: "2025-02-20"
227
+ },
228
+ {
229
+ id: "3",
230
+ name: "Charlie Brown",
231
+ email: "charlie@example.com",
232
+ status: "inactive",
233
+ joinDate: "2025-03-10"
234
+ },
235
+ ]
236
+
237
+ export function UserTable() {
238
+ const [searchTerm, setSearchTerm] = React.useState("")
239
+ const [statusFilter, setStatusFilter] = React.useState("all")
240
+ const [sortBy, setSortBy] = React.useState("name")
241
+
242
+ const filtered = users.filter((user) => {
243
+ const matchesSearch = user.name
244
+ .toLowerCase()
245
+ .includes(searchTerm.toLowerCase())
246
+ const matchesStatus =
247
+ statusFilter === "all" || user.status === statusFilter
248
+ return matchesSearch && matchesStatus
249
+ })
250
+
251
+ const sorted = [...filtered].sort((a, b) => {
252
+ switch (sortBy) {
253
+ case "name":
254
+ return a.name.localeCompare(b.name)
255
+ case "date":
256
+ return new Date(b.joinDate).getTime() - new Date(a.joinDate).getTime()
257
+ default:
258
+ return 0
259
+ }
260
+ })
261
+
262
+ return (
263
+ <div className="space-y-4">
264
+ {/* Controls */}
265
+ <div className="flex gap-4 flex-wrap">
266
+ <Input
267
+ placeholder="Search users..."
268
+ value={searchTerm}
269
+ onChange={(e) => setSearchTerm(e.target.value)}
270
+ className="flex-1 min-w-[200px]"
271
+ />
272
+
273
+ <Select value={statusFilter} onValueChange={setStatusFilter}>
274
+ <SelectTrigger className="w-[150px]">
275
+ <SelectValue />
276
+ </SelectTrigger>
277
+ <SelectContent>
278
+ <SelectItem value="all">All Status</SelectItem>
279
+ <SelectItem value="active">Active</SelectItem>
280
+ <SelectItem value="inactive">Inactive</SelectItem>
281
+ </SelectContent>
282
+ </Select>
283
+
284
+ <Select value={sortBy} onValueChange={setSortBy}>
285
+ <SelectTrigger className="w-[150px]">
286
+ <SelectValue />
287
+ </SelectTrigger>
288
+ <SelectContent>
289
+ <SelectItem value="name">Sort by Name</SelectItem>
290
+ <SelectItem value="date">Sort by Date</SelectItem>
291
+ </SelectContent>
292
+ </Select>
293
+ </div>
294
+
295
+ {/* Table */}
296
+ <div className="border rounded-lg">
297
+ <Table>
298
+ <TableHeader>
299
+ <TableRow>
300
+ <TableHead>Name</TableHead>
301
+ <TableHead>Email</TableHead>
302
+ <TableHead>Status</TableHead>
303
+ <TableHead>Join Date</TableHead>
304
+ <TableHead>Actions</TableHead>
305
+ </TableRow>
306
+ </TableHeader>
307
+ <TableBody>
308
+ {sorted.map((user) => (
309
+ <TableRow key={user.id}>
310
+ <TableCell className="font-medium">{user.name}</TableCell>
311
+ <TableCell>{user.email}</TableCell>
312
+ <TableCell>
313
+ <span
314
+ className={`inline-block px-3 py-1 rounded-full text-sm font-medium ${
315
+ user.status === "active"
316
+ ? "bg-green-100 text-green-800"
317
+ : "bg-gray-100 text-gray-800"
318
+ }`}
319
+ >
320
+ {user.status}
321
+ </span>
322
+ </TableCell>
323
+ <TableCell>{user.joinDate}</TableCell>
324
+ <TableCell>
325
+ <Button size="sm" variant="ghost">
326
+ Edit
327
+ </Button>
328
+ </TableCell>
329
+ </TableRow>
330
+ ))}
331
+ </TableBody>
332
+ </Table>
333
+ </div>
334
+
335
+ {sorted.length === 0 && (
336
+ <div className="text-center py-8 text-gray-500">
337
+ No users found matching your criteria
338
+ </div>
339
+ )}
340
+ </div>
341
+ )
342
+ }
343
+ ```
344
+
345
+ ## Example 3: Responsive Mobile Navigation
346
+
347
+ ```tsx
348
+ import { useState } from "react"
349
+ import { Button } from "@/components/ui/button"
350
+ import {
351
+ Sheet,
352
+ SheetContent,
353
+ SheetDescription,
354
+ SheetHeader,
355
+ SheetTitle,
356
+ SheetTrigger,
357
+ } from "@/components/ui/sheet"
358
+
359
+ export function MobileNav() {
360
+ const [open, setOpen] = useState(false)
361
+
362
+ const navItems = [
363
+ { label: "Home", href: "/" },
364
+ { label: "Features", href: "/features" },
365
+ { label: "Pricing", href: "/pricing" },
366
+ { label: "Blog", href: "/blog" },
367
+ { label: "Contact", href: "/contact" },
368
+ ]
369
+
370
+ return (
371
+ <nav className="flex items-center justify-between p-4 border-b">
372
+ {/* Logo */}
373
+ <a href="/" className="text-xl font-bold">
374
+ MyApp
375
+ </a>
376
+
377
+ {/* Desktop Navigation */}
378
+ <div className="hidden md:flex gap-6">
379
+ {navItems.map((item) => (
380
+ <a
381
+ key={item.label}
382
+ href={item.href}
383
+ className="text-sm hover:text-blue-600 transition-colors"
384
+ >
385
+ {item.label}
386
+ </a>
387
+ ))}
388
+ <Button size="sm">Sign In</Button>
389
+ </div>
390
+
391
+ {/* Mobile Menu */}
392
+ <Sheet open={open} onOpenChange={setOpen}>
393
+ <SheetTrigger asChild className="md:hidden">
394
+ <Button variant="ghost" size="icon">
395
+
396
+ </Button>
397
+ </SheetTrigger>
398
+ <SheetContent side="right">
399
+ <SheetHeader>
400
+ <SheetTitle>Menu</SheetTitle>
401
+ </SheetHeader>
402
+ <div className="space-y-4 mt-6">
403
+ {navItems.map((item) => (
404
+ <a
405
+ key={item.label}
406
+ href={item.href}
407
+ className="block py-2 hover:text-blue-600 transition-colors"
408
+ onClick={() => setOpen(false)}
409
+ >
410
+ {item.label}
411
+ </a>
412
+ ))}
413
+ <Button className="w-full">Sign In</Button>
414
+ </div>
415
+ </SheetContent>
416
+ </Sheet>
417
+ </nav>
418
+ )
419
+ }
420
+ ```
421
+
422
+ ## Example 4: Form with Validation
423
+
424
+ ```tsx
425
+ import { Button } from "@/components/ui/button"
426
+ import { Input } from "@/components/ui/input"
427
+ import {
428
+ Select,
429
+ SelectContent,
430
+ SelectItem,
431
+ SelectTrigger,
432
+ SelectValue,
433
+ } from "@/components/ui/select"
434
+ import { Checkbox } from "@/components/ui/checkbox"
435
+ import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
436
+ import React from "react"
437
+
438
+ export function SignupForm() {
439
+ const [formData, setFormData] = React.useState({
440
+ email: "",
441
+ password: "",
442
+ confirmPassword: "",
443
+ country: "",
444
+ newsletter: false,
445
+ terms: false,
446
+ })
447
+
448
+ const [errors, setErrors] = React.useState({})
449
+
450
+ const handleSubmit = (e) => {
451
+ e.preventDefault()
452
+ const newErrors = {}
453
+
454
+ if (!formData.email) newErrors.email = "Email is required"
455
+ if (!formData.password) newErrors.password = "Password is required"
456
+ if (formData.password !== formData.confirmPassword) {
457
+ newErrors.confirmPassword = "Passwords do not match"
458
+ }
459
+ if (!formData.country) newErrors.country = "Country is required"
460
+ if (!formData.terms) newErrors.terms = "You must accept the terms"
461
+
462
+ setErrors(newErrors)
463
+
464
+ if (Object.keys(newErrors).length === 0) {
465
+ console.log("Form submitted:", formData)
466
+ }
467
+ }
468
+
469
+ return (
470
+ <form onSubmit={handleSubmit} className="max-w-md mx-auto space-y-4">
471
+ <div>
472
+ <label className="block text-sm font-medium mb-1">Email</label>
473
+ <Input
474
+ type="email"
475
+ placeholder="your@email.com"
476
+ value={formData.email}
477
+ onChange={(e) =>
478
+ setFormData({ ...formData, email: e.target.value })
479
+ }
480
+ />
481
+ {errors.email && (
482
+ <p className="text-red-500 text-sm mt-1">{errors.email}</p>
483
+ )}
484
+ </div>
485
+
486
+ <div>
487
+ <label className="block text-sm font-medium mb-1">Password</label>
488
+ <Input
489
+ type="password"
490
+ placeholder="••••••••"
491
+ value={formData.password}
492
+ onChange={(e) =>
493
+ setFormData({ ...formData, password: e.target.value })
494
+ }
495
+ />
496
+ {errors.password && (
497
+ <p className="text-red-500 text-sm mt-1">{errors.password}</p>
498
+ )}
499
+ </div>
500
+
501
+ <div>
502
+ <label className="block text-sm font-medium mb-1">
503
+ Confirm Password
504
+ </label>
505
+ <Input
506
+ type="password"
507
+ placeholder="••••••••"
508
+ value={formData.confirmPassword}
509
+ onChange={(e) =>
510
+ setFormData({ ...formData, confirmPassword: e.target.value })
511
+ }
512
+ />
513
+ {errors.confirmPassword && (
514
+ <p className="text-red-500 text-sm mt-1">{errors.confirmPassword}</p>
515
+ )}
516
+ </div>
517
+
518
+ <div>
519
+ <label className="block text-sm font-medium mb-1">Country</label>
520
+ <Select value={formData.country} onValueChange={(value) =>
521
+ setFormData({ ...formData, country: value })
522
+ }>
523
+ <SelectTrigger>
524
+ <SelectValue placeholder="Select a country" />
525
+ </SelectTrigger>
526
+ <SelectContent>
527
+ <SelectItem value="usa">United States</SelectItem>
528
+ <SelectItem value="canada">Canada</SelectItem>
529
+ <SelectItem value="uk">United Kingdom</SelectItem>
530
+ </SelectContent>
531
+ </Select>
532
+ {errors.country && (
533
+ <p className="text-red-500 text-sm mt-1">{errors.country}</p>
534
+ )}
535
+ </div>
536
+
537
+ <div className="space-y-2">
538
+ <div className="flex items-center space-x-2">
539
+ <Checkbox
540
+ id="newsletter"
541
+ checked={formData.newsletter}
542
+ onCheckedChange={(checked) =>
543
+ setFormData({ ...formData, newsletter: checked })
544
+ }
545
+ />
546
+ <label htmlFor="newsletter" className="text-sm cursor-pointer">
547
+ Subscribe to newsletter
548
+ </label>
549
+ </div>
550
+
551
+ <div className="flex items-center space-x-2">
552
+ <Checkbox
553
+ id="terms"
554
+ checked={formData.terms}
555
+ onCheckedChange={(checked) =>
556
+ setFormData({ ...formData, terms: checked })
557
+ }
558
+ />
559
+ <label htmlFor="terms" className="text-sm cursor-pointer">
560
+ I agree to the terms and conditions
561
+ </label>
562
+ </div>
563
+
564
+ {errors.terms && (
565
+ <p className="text-red-500 text-sm">{errors.terms}</p>
566
+ )}
567
+ </div>
568
+
569
+ <Button type="submit" className="w-full">
570
+ Sign Up
571
+ </Button>
572
+ </form>
573
+ )
574
+ }
575
+ ```