moai-adk 0.35.1__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (502) hide show
  1. moai_adk/__init__.py +10 -0
  2. moai_adk/__main__.py +199 -0
  3. moai_adk/cli/__init__.py +6 -0
  4. moai_adk/cli/commands/__init__.py +17 -0
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +272 -0
  7. moai_adk/cli/commands/init.py +372 -0
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +104 -0
  10. moai_adk/cli/commands/update.py +2686 -0
  11. moai_adk/cli/main.py +13 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +219 -0
  14. moai_adk/cli/spec_status.py +263 -0
  15. moai_adk/cli/ui/__init__.py +44 -0
  16. moai_adk/cli/ui/progress.py +422 -0
  17. moai_adk/cli/ui/prompts.py +389 -0
  18. moai_adk/cli/ui/theme.py +129 -0
  19. moai_adk/cli/worktree/__init__.py +27 -0
  20. moai_adk/cli/worktree/__main__.py +31 -0
  21. moai_adk/cli/worktree/cli.py +683 -0
  22. moai_adk/cli/worktree/exceptions.py +89 -0
  23. moai_adk/cli/worktree/manager.py +493 -0
  24. moai_adk/cli/worktree/models.py +65 -0
  25. moai_adk/cli/worktree/registry.py +422 -0
  26. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  27. moai_adk/core/__init__.py +1 -0
  28. moai_adk/core/analysis/__init__.py +9 -0
  29. moai_adk/core/analysis/session_analyzer.py +400 -0
  30. moai_adk/core/claude_integration.py +393 -0
  31. moai_adk/core/command_helpers.py +270 -0
  32. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  33. moai_adk/core/config/__init__.py +19 -0
  34. moai_adk/core/config/auto_spec_config.py +340 -0
  35. moai_adk/core/config/migration.py +244 -0
  36. moai_adk/core/config/unified.py +436 -0
  37. moai_adk/core/context_manager.py +273 -0
  38. moai_adk/core/diagnostics/__init__.py +19 -0
  39. moai_adk/core/diagnostics/slash_commands.py +159 -0
  40. moai_adk/core/enterprise_features.py +1404 -0
  41. moai_adk/core/error_recovery_system.py +1902 -0
  42. moai_adk/core/event_driven_hook_system.py +1371 -0
  43. moai_adk/core/git/__init__.py +31 -0
  44. moai_adk/core/git/branch.py +25 -0
  45. moai_adk/core/git/branch_manager.py +129 -0
  46. moai_adk/core/git/checkpoint.py +134 -0
  47. moai_adk/core/git/commit.py +67 -0
  48. moai_adk/core/git/conflict_detector.py +413 -0
  49. moai_adk/core/git/event_detector.py +79 -0
  50. moai_adk/core/git/manager.py +216 -0
  51. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  52. moai_adk/core/input_validation_middleware.py +1006 -0
  53. moai_adk/core/integration/__init__.py +22 -0
  54. moai_adk/core/integration/engine.py +157 -0
  55. moai_adk/core/integration/integration_tester.py +226 -0
  56. moai_adk/core/integration/models.py +88 -0
  57. moai_adk/core/integration/utils.py +211 -0
  58. moai_adk/core/issue_creator.py +305 -0
  59. moai_adk/core/jit_context_loader.py +956 -0
  60. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  61. moai_adk/core/language_config.py +202 -0
  62. moai_adk/core/language_config_resolver.py +572 -0
  63. moai_adk/core/language_validator.py +543 -0
  64. moai_adk/core/mcp/setup.py +116 -0
  65. moai_adk/core/merge/__init__.py +9 -0
  66. moai_adk/core/merge/analyzer.py +605 -0
  67. moai_adk/core/migration/__init__.py +18 -0
  68. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  69. moai_adk/core/migration/backup_manager.py +277 -0
  70. moai_adk/core/migration/custom_element_scanner.py +358 -0
  71. moai_adk/core/migration/file_migrator.py +209 -0
  72. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  73. moai_adk/core/migration/selective_restorer.py +470 -0
  74. moai_adk/core/migration/template_utils.py +74 -0
  75. moai_adk/core/migration/user_selection_ui.py +338 -0
  76. moai_adk/core/migration/version_detector.py +139 -0
  77. moai_adk/core/migration/version_migrator.py +228 -0
  78. moai_adk/core/performance/__init__.py +6 -0
  79. moai_adk/core/performance/cache_system.py +316 -0
  80. moai_adk/core/performance/parallel_processor.py +116 -0
  81. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  82. moai_adk/core/project/__init__.py +1 -0
  83. moai_adk/core/project/backup_utils.py +70 -0
  84. moai_adk/core/project/checker.py +300 -0
  85. moai_adk/core/project/detector.py +293 -0
  86. moai_adk/core/project/initializer.py +387 -0
  87. moai_adk/core/project/phase_executor.py +716 -0
  88. moai_adk/core/project/validator.py +139 -0
  89. moai_adk/core/quality/__init__.py +6 -0
  90. moai_adk/core/quality/trust_checker.py +377 -0
  91. moai_adk/core/quality/validators/__init__.py +6 -0
  92. moai_adk/core/quality/validators/base_validator.py +19 -0
  93. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  94. moai_adk/core/robust_json_parser.py +611 -0
  95. moai_adk/core/rollback_manager.py +918 -0
  96. moai_adk/core/session_manager.py +651 -0
  97. moai_adk/core/skill_loading_system.py +579 -0
  98. moai_adk/core/spec/confidence_scoring.py +680 -0
  99. moai_adk/core/spec/ears_template_engine.py +1247 -0
  100. moai_adk/core/spec/quality_validator.py +687 -0
  101. moai_adk/core/spec_status_manager.py +478 -0
  102. moai_adk/core/template/__init__.py +7 -0
  103. moai_adk/core/template/backup.py +174 -0
  104. moai_adk/core/template/config.py +191 -0
  105. moai_adk/core/template/languages.py +43 -0
  106. moai_adk/core/template/merger.py +233 -0
  107. moai_adk/core/template/processor.py +1200 -0
  108. moai_adk/core/template_engine.py +310 -0
  109. moai_adk/core/template_variable_synchronizer.py +417 -0
  110. moai_adk/core/unified_permission_manager.py +745 -0
  111. moai_adk/core/user_behavior_analytics.py +851 -0
  112. moai_adk/core/version_sync.py +429 -0
  113. moai_adk/foundation/__init__.py +56 -0
  114. moai_adk/foundation/backend.py +1027 -0
  115. moai_adk/foundation/database.py +1115 -0
  116. moai_adk/foundation/devops.py +1585 -0
  117. moai_adk/foundation/ears.py +431 -0
  118. moai_adk/foundation/frontend.py +870 -0
  119. moai_adk/foundation/git/commit_templates.py +557 -0
  120. moai_adk/foundation/git.py +376 -0
  121. moai_adk/foundation/langs.py +484 -0
  122. moai_adk/foundation/ml_ops.py +1162 -0
  123. moai_adk/foundation/testing.py +1524 -0
  124. moai_adk/foundation/trust/trust_principles.py +676 -0
  125. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  126. moai_adk/project/__init__.py +0 -0
  127. moai_adk/project/configuration.py +1084 -0
  128. moai_adk/project/documentation.py +566 -0
  129. moai_adk/project/schema.py +447 -0
  130. moai_adk/statusline/__init__.py +38 -0
  131. moai_adk/statusline/alfred_detector.py +105 -0
  132. moai_adk/statusline/config.py +376 -0
  133. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  134. moai_adk/statusline/git_collector.py +190 -0
  135. moai_adk/statusline/main.py +322 -0
  136. moai_adk/statusline/metrics_tracker.py +78 -0
  137. moai_adk/statusline/renderer.py +343 -0
  138. moai_adk/statusline/update_checker.py +129 -0
  139. moai_adk/statusline/version_reader.py +741 -0
  140. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
  141. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  142. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  143. moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
  144. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  145. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  146. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  147. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  148. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  149. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  150. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  151. moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
  152. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  153. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  154. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  155. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  156. moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
  157. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  158. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  159. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  160. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  161. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  164. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  165. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  166. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  167. moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
  168. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  169. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  170. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  171. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  172. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  173. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  185. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  186. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  187. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  188. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  189. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
  190. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  191. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  192. moai_adk/templates/.claude/settings.json +172 -0
  193. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
  194. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  195. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  196. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  200. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  201. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  202. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  203. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  204. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  205. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
  206. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  207. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  210. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  211. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  212. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  213. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  214. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  215. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
  216. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  217. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  221. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  222. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  223. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  224. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  230. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  231. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  232. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  284. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
  285. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
  286. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  287. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  288. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  289. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  290. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
  291. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  292. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  293. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
  294. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  295. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
  297. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  298. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
  304. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
  305. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
  306. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  307. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  308. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
  309. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  310. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  311. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
  312. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  313. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  314. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
  315. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  316. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  318. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  319. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  320. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  321. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  331. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  332. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  333. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  334. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  338. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  339. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  340. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  341. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  342. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  343. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  344. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  345. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  346. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
  347. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  348. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  349. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  350. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  351. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  352. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  353. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  354. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  355. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  356. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  357. moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
  358. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
  359. moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
  360. moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
  361. moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
  362. moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
  363. moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
  364. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
  365. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
  366. moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
  367. moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
  368. moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
  369. moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
  370. moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
  371. moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
  372. moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
  373. moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
  374. moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
  375. moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
  376. moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
  377. moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
  378. moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
  379. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
  380. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
  381. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
  382. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
  383. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
  384. moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
  385. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
  386. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
  387. moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
  388. moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
  389. moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
  390. moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
  391. moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  433. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  458. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  459. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  460. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  461. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  462. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  463. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  464. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  465. moai_adk/templates/.git-hooks/pre-commit +128 -0
  466. moai_adk/templates/.git-hooks/pre-push +365 -0
  467. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  468. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  469. moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
  470. moai_adk/templates/.gitignore +222 -0
  471. moai_adk/templates/.mcp.json +13 -0
  472. moai_adk/templates/.moai/config/config.yaml +58 -0
  473. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  474. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  475. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  476. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  477. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  478. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
  479. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  480. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  481. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  482. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  483. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  484. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  485. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  486. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  487. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  488. moai_adk/templates/CLAUDE.md +642 -0
  489. moai_adk/utils/__init__.py +30 -0
  490. moai_adk/utils/banner.py +38 -0
  491. moai_adk/utils/common.py +294 -0
  492. moai_adk/utils/link_validator.py +241 -0
  493. moai_adk/utils/logger.py +147 -0
  494. moai_adk/utils/safe_file_reader.py +206 -0
  495. moai_adk/utils/timeout.py +160 -0
  496. moai_adk/utils/toon_utils.py +256 -0
  497. moai_adk/version.py +22 -0
  498. moai_adk-0.35.1.dist-info/METADATA +3018 -0
  499. moai_adk-0.35.1.dist-info/RECORD +502 -0
  500. moai_adk-0.35.1.dist-info/WHEEL +4 -0
  501. moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
  502. moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,713 @@
1
+ """
2
+ Batch Questions Manager - Integrated Question System for MoAI Skills
3
+
4
+ Implements unified question collection, validation, and processing system
5
+ that consolidates question functionality from 5 different skills into one
6
+ cohesive module.
7
+
8
+ Author: MoAI-ADK
9
+ Version: 1.0.0
10
+ """
11
+
12
+ import json
13
+ import logging
14
+ import os
15
+ from dataclasses import dataclass, field
16
+ from enum import Enum
17
+ from pathlib import Path
18
+ from typing import Any, Callable, Dict, List, Optional
19
+
20
+ # Configure logging
21
+ logging.basicConfig(level=logging.INFO)
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ class QuestionType(Enum):
26
+ """Question types supported by the system."""
27
+
28
+ SINGLE_CHOICE = "single_choice"
29
+ MULTI_CHOICE = "multi_choice"
30
+ TEXT_INPUT = "text_input"
31
+ BOOLEAN = "boolean"
32
+ NUMBER_INPUT = "number_input"
33
+ FILE_SELECT = "file_select"
34
+
35
+
36
+ class ValidationRule(Enum):
37
+ """Validation rules for responses."""
38
+
39
+ REQUIRED = "required"
40
+ MIN_LENGTH = "min_length"
41
+ MAX_LENGTH = "max_length"
42
+ REGEX = "regex"
43
+ CUSTOM = "custom"
44
+
45
+
46
+ @dataclass
47
+ class QuestionOption:
48
+ """Represents a question option."""
49
+
50
+ label: str
51
+ value: str
52
+ description: Optional[str] = None
53
+ conditional_questions: Optional[List["Question"]] = None
54
+
55
+
56
+ @dataclass
57
+ class ValidationConfig:
58
+ """Configuration for response validation."""
59
+
60
+ rules: List[ValidationRule] = field(default_factory=list)
61
+ parameters: Dict[str, Any] = field(default_factory=dict)
62
+ error_message: Optional[str] = None
63
+ custom_validator: Optional[Callable] = None
64
+
65
+
66
+ @dataclass
67
+ class Question:
68
+ """Represents a single question in the batch."""
69
+
70
+ id: str
71
+ text: str
72
+ type: QuestionType
73
+ options: List[QuestionOption] = field(default_factory=list)
74
+ validation: Optional[ValidationConfig] = None
75
+ description: Optional[str] = None
76
+ required: bool = True
77
+ default_value: Any = None
78
+ conditional_on: Optional[Dict[str, Any]] = None # {"question_id": "expected_value"}
79
+ metadata: Dict[str, Any] = field(default_factory=dict)
80
+
81
+
82
+ @dataclass
83
+ class QuestionBatch:
84
+ """Represents a batch of questions."""
85
+
86
+ id: str
87
+ title: str
88
+ description: str
89
+ questions: List[Question] = field(default_factory=list)
90
+ metadata: Dict[str, Any] = field(default_factory=dict)
91
+ created_at: Optional[str] = None
92
+ updated_at: Optional[str] = None
93
+
94
+
95
+ @dataclass
96
+ class UserResponse:
97
+ """Represents a user's response to a question."""
98
+
99
+ question_id: str
100
+ value: Any
101
+ metadata: Dict[str, Any] = field(default_factory=dict)
102
+
103
+
104
+ class BatchQuestionsManager:
105
+ """
106
+ Unified question management system for MoAI skills.
107
+
108
+ Consolidates question functionality from:
109
+ - moai-project-batch-questions
110
+ - moai-project-config-manager
111
+ - moai-project-language-initializer
112
+ - moai-spec-intelligent-workflow
113
+ - moai-menu-project
114
+ """
115
+
116
+ def __init__(self, config: Optional[Dict[str, Any]] = None):
117
+ """Initialize the batch questions manager."""
118
+ self.config = config or {}
119
+ self.template_dir = Path(__file__).parent.parent / "templates" / "question-templates"
120
+ self.cache_dir = Path(__file__).parent.parent / "cache"
121
+
122
+ # Ensure directories exist
123
+ self.template_dir.mkdir(parents=True, exist_ok=True)
124
+ self.cache_dir.mkdir(parents=True, exist_ok=True)
125
+
126
+ # Initialize template cache
127
+ self._template_cache = {}
128
+
129
+ # Load built-in templates
130
+ self._load_builtin_templates()
131
+
132
+ def create_batch(self, batch_config: Dict[str, Any]) -> QuestionBatch:
133
+ """
134
+ Create a question batch from configuration.
135
+
136
+ Args:
137
+ batch_config: Configuration dictionary for the batch
138
+
139
+ Returns:
140
+ QuestionBatch: Created question batch
141
+ """
142
+ questions = []
143
+
144
+ for q_config in batch_config.get("questions", []):
145
+ # Convert options
146
+ options = []
147
+ for opt_config in q_config.get("options", []):
148
+ option = QuestionOption(
149
+ label=opt_config["label"],
150
+ value=opt_config["value"],
151
+ description=opt_config.get("description"),
152
+ conditional_questions=self._parse_conditional_questions(
153
+ opt_config.get("conditional_questions", [])
154
+ ),
155
+ )
156
+ options.append(option)
157
+
158
+ # Convert validation
159
+ validation = None
160
+ if "validation" in q_config:
161
+ val_config = q_config["validation"]
162
+ validation = ValidationConfig(
163
+ rules=[ValidationRule(rule) for rule in val_config.get("rules", [])],
164
+ parameters=val_config.get("parameters", {}),
165
+ error_message=val_config.get("error_message"),
166
+ custom_validator=val_config.get("custom_validator"),
167
+ )
168
+
169
+ # Create question
170
+ question = Question(
171
+ id=q_config["id"],
172
+ text=q_config["text"],
173
+ type=QuestionType(q_config["type"]),
174
+ options=options,
175
+ validation=validation,
176
+ description=q_config.get("description"),
177
+ required=q_config.get("required", True),
178
+ default_value=q_config.get("default_value"),
179
+ conditional_on=q_config.get("conditional_on"),
180
+ metadata=q_config.get("metadata", {}),
181
+ )
182
+ questions.append(question)
183
+
184
+ batch = QuestionBatch(
185
+ id=batch_config["id"],
186
+ title=batch_config["title"],
187
+ description=batch_config["description"],
188
+ questions=questions,
189
+ metadata=batch_config.get("metadata", {}),
190
+ created_at=batch_config.get("created_at"),
191
+ updated_at=batch_config.get("updated_at"),
192
+ )
193
+
194
+ return batch
195
+
196
+ def load_template(self, template_name: str) -> Optional[QuestionBatch]:
197
+ """
198
+ Load a question template from file or cache.
199
+
200
+ Args:
201
+ template_name: Name of the template to load
202
+
203
+ Returns:
204
+ QuestionBatch: Loaded template or None if not found
205
+ """
206
+ # Check cache first
207
+ if template_name in self._template_cache:
208
+ return self._template_cache[template_name]
209
+
210
+ # Load from file
211
+ template_file = self.template_dir / f"{template_name}.json"
212
+ if not template_file.exists():
213
+ logger.warning(f"Template not found: {template_name}")
214
+ return None
215
+
216
+ try:
217
+ with open(template_file, "r", encoding="utf-8") as f:
218
+ template_config = json.load(f)
219
+
220
+ batch = self.create_batch(template_config)
221
+
222
+ # Cache the template
223
+ self._template_cache[template_name] = batch
224
+
225
+ return batch
226
+
227
+ except Exception as e:
228
+ logger.error(f"Error loading template {template_name}: {e}")
229
+ return None
230
+
231
+ def filter_questions(self, batch: QuestionBatch, context: Dict[str, Any]) -> List[Question]:
232
+ """
233
+ Filter questions based on context and conditional logic.
234
+
235
+ Args:
236
+ batch: Question batch to filter
237
+ context: Current context (previous answers, config values, etc.)
238
+
239
+ Returns:
240
+ List[Question]: Filtered list of questions
241
+ """
242
+ filtered_questions = []
243
+
244
+ for question in batch.questions:
245
+ # Check conditional logic
246
+ if question.conditional_on:
247
+ should_show = self._evaluate_condition(question.conditional_on, context)
248
+ if not should_show:
249
+ continue
250
+
251
+ filtered_questions.append(question)
252
+
253
+ return filtered_questions
254
+
255
+ def execute_batch(self, batch: QuestionBatch, context: Optional[Dict[str, Any]] = None) -> Dict[str, UserResponse]:
256
+ """
257
+ Execute a question batch and collect responses.
258
+
259
+ Args:
260
+ batch: Question batch to execute
261
+ context: Current context for conditional questions
262
+
263
+ Returns:
264
+ Dict[str, UserResponse]: Collected responses
265
+ """
266
+ if context is None:
267
+ context = {}
268
+
269
+ # Filter questions based on context
270
+ questions = self.filter_questions(batch, context)
271
+
272
+ responses = {}
273
+
274
+ for question in questions:
275
+ # Check if question already has response in context
276
+ if question.id in context:
277
+ responses[question.id] = UserResponse(
278
+ question_id=question.id,
279
+ value=context[question.id],
280
+ metadata={"source": "context"},
281
+ )
282
+ continue
283
+
284
+ # Ask the question
285
+ response_value = self._ask_question(question)
286
+
287
+ # Validate response
288
+ if question.validation:
289
+ validation_result = self._validate_response(response_value, question.validation)
290
+ if not validation_result.is_valid:
291
+ # Handle validation error
292
+ raise ValueError(f"Validation failed for question {question.id}: {validation_result.error}")
293
+
294
+ responses[question.id] = UserResponse(
295
+ question_id=question.id,
296
+ value=response_value,
297
+ metadata={"source": "user_input"},
298
+ )
299
+
300
+ # Update context for subsequent questions
301
+ context[question.id] = response_value
302
+
303
+ return responses
304
+
305
+ def get_skill_specific_template(self, skill_name: str) -> Optional[QuestionBatch]:
306
+ """
307
+ Get a skill-specific question template.
308
+
309
+ Args:
310
+ skill_name: Name of the skill
311
+
312
+ Returns:
313
+ QuestionBatch: Skill-specific template or None
314
+ """
315
+ template_mapping = {
316
+ "moai-project-batch-questions": "project-batch-questions",
317
+ "moai-project-config-manager": "config-manager-setup",
318
+ "moai-project-language-initializer": "language-initializer",
319
+ "moai-spec-intelligent-workflow": "spec-workflow-setup",
320
+ "moai-menu-project": "menu-project-config",
321
+ }
322
+
323
+ template_name = template_mapping.get(skill_name)
324
+ if not template_name:
325
+ logger.warning(f"No template mapping for skill: {skill_name}")
326
+ return None
327
+
328
+ return self.load_template(template_name)
329
+
330
+ def process_responses_for_config(
331
+ self, responses: Dict[str, UserResponse], config_path: Optional[str] = None
332
+ ) -> Dict[str, Any]:
333
+ """
334
+ Process responses and generate configuration updates.
335
+
336
+ Args:
337
+ responses: User responses to process
338
+ config_path: Path to existing config file (optional)
339
+
340
+ Returns:
341
+ Dict[str, Any]: Updated configuration
342
+ """
343
+ # Start with existing config if provided
344
+ config = {}
345
+ if config_path and os.path.exists(config_path):
346
+ try:
347
+ with open(config_path, "r", encoding="utf-8") as f:
348
+ config = json.load(f)
349
+ except Exception as e:
350
+ logger.error(f"Error loading existing config: {e}")
351
+
352
+ # Process each response
353
+ for response in responses.values():
354
+ # Apply response to config based on metadata
355
+ config_path = response.metadata.get("config_path", response.question_id)
356
+ value = response.value
357
+
358
+ # Handle special cases
359
+ if isinstance(value, list) and len(value) == 1:
360
+ # Single selection in multi-choice format
361
+ value = value[0]
362
+
363
+ # Nested path handling (e.g., "git_strategy.mode")
364
+ if "." in config_path:
365
+ self._set_nested_value(config, config_path, value)
366
+ else:
367
+ config[config_path] = value
368
+
369
+ return config
370
+
371
+ def save_responses(self, responses: Dict[str, UserResponse], file_path: str) -> bool:
372
+ """
373
+ Save responses to a file.
374
+
375
+ Args:
376
+ responses: Responses to save
377
+ file_path: Path to save the responses
378
+
379
+ Returns:
380
+ bool: True if saved successfully
381
+ """
382
+ try:
383
+ # Convert responses to serializable format
384
+ serializable_responses = {}
385
+ for resp in responses.values():
386
+ serializable_responses[resp.question_id] = {
387
+ "value": resp.value,
388
+ "metadata": resp.metadata,
389
+ }
390
+
391
+ with open(file_path, "w", encoding="utf-8") as f:
392
+ json.dump(serializable_responses, f, indent=2, ensure_ascii=False)
393
+
394
+ return True
395
+
396
+ except Exception as e:
397
+ logger.error(f"Error saving responses: {e}")
398
+ return False
399
+
400
+ def _load_builtin_templates(self):
401
+ """Load built-in question templates."""
402
+ builtin_templates = {
403
+ "project-initialization": self._create_project_init_template(),
404
+ "git-workflow-config": self._create_git_workflow_template(),
405
+ "quality-gates-setup": self._create_quality_gates_template(),
406
+ "skill-selection": self._create_skill_selection_template(),
407
+ }
408
+
409
+ for name, template in builtin_templates.items():
410
+ template_file = self.template_dir / f"{name}.json"
411
+ if not template_file.exists():
412
+ self._save_template_to_file(template, template_file)
413
+
414
+ def _create_project_init_template(self) -> Dict[str, Any]:
415
+ """Create project initialization template."""
416
+ return {
417
+ "id": "project-initialization",
418
+ "title": "Project Initialization",
419
+ "description": "Configure your new project settings",
420
+ "questions": [
421
+ {
422
+ "id": "project.name",
423
+ "text": "What is your project name?",
424
+ "type": "text_input",
425
+ "required": True,
426
+ "validation": {
427
+ "rules": ["required", "min_length"],
428
+ "parameters": {"min_length": 2},
429
+ },
430
+ },
431
+ {
432
+ "id": "project.type",
433
+ "text": "What type of project are you creating?",
434
+ "type": "single_choice",
435
+ "required": True,
436
+ "options": [
437
+ {"label": "Web Application", "value": "web"},
438
+ {"label": "API Service", "value": "api"},
439
+ {"label": "CLI Tool", "value": "cli"},
440
+ {"label": "Library", "value": "library"},
441
+ ],
442
+ },
443
+ {
444
+ "id": "project.language",
445
+ "text": "What programming language will you use?",
446
+ "type": "single_choice",
447
+ "required": True,
448
+ "options": [
449
+ {"label": "Python", "value": "python"},
450
+ {"label": "TypeScript", "value": "typescript"},
451
+ {"label": "JavaScript", "value": "javascript"},
452
+ {"label": "Go", "value": "go"},
453
+ {"label": "Rust", "value": "rust"},
454
+ ],
455
+ },
456
+ ],
457
+ }
458
+
459
+ def _create_git_workflow_template(self) -> Dict[str, Any]:
460
+ """Create Git workflow configuration template."""
461
+ return {
462
+ "id": "git-workflow-config",
463
+ "title": "Git Workflow Configuration",
464
+ "description": "Configure your Git workflow preferences",
465
+ "questions": [
466
+ {
467
+ "id": "git_strategy.mode",
468
+ "text": "What Git workflow mode do you prefer?",
469
+ "type": "single_choice",
470
+ "required": True,
471
+ "options": [
472
+ {
473
+ "label": "Manual (local only)",
474
+ "value": "manual",
475
+ "description": "Work locally without automatic remote operations",
476
+ },
477
+ {
478
+ "label": "Personal (GitHub personal project)",
479
+ "value": "personal",
480
+ "description": "Automatic pushing to your personal GitHub repository",
481
+ },
482
+ {
483
+ "label": "Team (GitHub team project)",
484
+ "value": "team",
485
+ "description": "Team collaboration with pull requests and reviews",
486
+ },
487
+ ],
488
+ },
489
+ {
490
+ "id": "git_strategy.branch_creation.prompt_always",
491
+ "text": "Do you want to be prompted for branch creation?",
492
+ "type": "boolean",
493
+ "required": True,
494
+ "default_value": True,
495
+ "conditional_on": {"git_strategy.mode": ["personal", "team"]},
496
+ },
497
+ {
498
+ "id": "git_strategy.branch_creation.auto_enabled",
499
+ "text": "Enable automatic branch creation?",
500
+ "type": "boolean",
501
+ "required": True,
502
+ "default_value": False,
503
+ "conditional_on": {
504
+ "git_strategy.mode": ["personal", "team"],
505
+ "git_strategy.branch_creation.prompt_always": False,
506
+ },
507
+ },
508
+ ],
509
+ }
510
+
511
+ def _create_quality_gates_template(self) -> Dict[str, Any]:
512
+ """Create quality gates configuration template."""
513
+ return {
514
+ "id": "quality-gates-setup",
515
+ "title": "Quality Gates Configuration",
516
+ "description": "Configure quality standards and validation rules",
517
+ "questions": [
518
+ {
519
+ "id": "constitution.test_coverage_target",
520
+ "text": "What is your target test coverage percentage?",
521
+ "type": "number_input",
522
+ "required": True,
523
+ "default_value": 85,
524
+ "validation": {
525
+ "rules": ["min_value", "max_value"],
526
+ "parameters": {"min_value": 0, "max_value": 100},
527
+ },
528
+ },
529
+ {
530
+ "id": "constitution.enforce_tdd",
531
+ "text": "Enforce Test-Driven Development (TDD)?",
532
+ "type": "boolean",
533
+ "required": True,
534
+ "default_value": True,
535
+ },
536
+ {
537
+ "id": "quality.auto_linting",
538
+ "text": "Enable automatic code linting?",
539
+ "type": "boolean",
540
+ "required": True,
541
+ "default_value": True,
542
+ },
543
+ {
544
+ "id": "quality.auto_formatting",
545
+ "text": "Enable automatic code formatting?",
546
+ "type": "boolean",
547
+ "required": True,
548
+ "default_value": True,
549
+ },
550
+ ],
551
+ }
552
+
553
+ def _create_skill_selection_template(self) -> Dict[str, Any]:
554
+ """Create skill selection template."""
555
+ return {
556
+ "id": "skill-selection",
557
+ "title": "Skill Selection",
558
+ "description": "Select MoAI skills to enable for your project",
559
+ "questions": [
560
+ {
561
+ "id": "skills.enabled",
562
+ "text": "Which skills would you like to enable?",
563
+ "type": "multi_choice",
564
+ "required": True,
565
+ "options": [
566
+ {
567
+ "label": "Python Language Support",
568
+ "value": "moai-lang-python",
569
+ "description": "Python-specific patterns and best practices",
570
+ },
571
+ {
572
+ "label": "TypeScript Support",
573
+ "value": "moai-lang-typescript",
574
+ "description": "TypeScript and JavaScript development tools",
575
+ },
576
+ {
577
+ "label": "Backend Architecture",
578
+ "value": "moai-domain-backend",
579
+ "description": "API design and backend patterns",
580
+ },
581
+ {
582
+ "label": "Frontend Development",
583
+ "value": "moai-domain-frontend",
584
+ "description": "React, Vue, and frontend frameworks",
585
+ },
586
+ {
587
+ "label": "Security Analysis",
588
+ "value": "moai-security-owasp",
589
+ "description": "OWASP security validation and best practices",
590
+ },
591
+ {
592
+ "label": "Performance Engineering",
593
+ "value": "moai-performance-engineering",
594
+ "description": "Performance optimization and analysis",
595
+ },
596
+ {
597
+ "label": "Documentation Generation",
598
+ "value": "moai-workflow-docs",
599
+ "description": "Automated documentation generation",
600
+ },
601
+ ],
602
+ }
603
+ ],
604
+ }
605
+
606
+ def _ask_question(self, question: Question) -> Any:
607
+ """
608
+ Ask a single question to the user.
609
+ This is a placeholder for actual AskUserQuestion integration.
610
+ """
611
+ # This would integrate with Claude Code's AskUserQuestion
612
+ # For now, return a mock response
613
+ if question.type == QuestionType.BOOLEAN:
614
+ return question.default_value or False
615
+ elif question.type == QuestionType.SINGLE_CHOICE and question.options:
616
+ return question.options[0].value
617
+ elif question.type == QuestionType.TEXT_INPUT:
618
+ return "default_response"
619
+ else:
620
+ return None
621
+
622
+ def _validate_response(self, value: Any, validation: ValidationConfig) -> "ValidationResult":
623
+ """Validate a response value."""
624
+ # Placeholder for validation logic
625
+ return ValidationResult(is_valid=True, error=None)
626
+
627
+ def _evaluate_condition(self, condition: Dict[str, Any], context: Dict[str, Any]) -> bool:
628
+ """Evaluate conditional logic for questions."""
629
+ # Simple implementation for now
630
+ for key, expected in condition.items():
631
+ if key not in context:
632
+ return False
633
+
634
+ actual = context[key]
635
+ if isinstance(expected, list):
636
+ if actual not in expected:
637
+ return False
638
+ elif actual != expected:
639
+ return False
640
+
641
+ return True
642
+
643
+ def _set_nested_value(self, config: Dict[str, Any], path: str, value: Any):
644
+ """Set a nested value in the configuration dict."""
645
+ keys = path.split(".")
646
+ current = config
647
+
648
+ for key in keys[:-1]:
649
+ if key not in current:
650
+ current[key] = {}
651
+ current = current[key]
652
+
653
+ current[keys[-1]] = value
654
+
655
+ def _parse_conditional_questions(self, conditional_configs: List[Dict[str, Any]]) -> List[Question]:
656
+ """Parse conditional questions from configuration."""
657
+ questions = []
658
+ for config in conditional_configs:
659
+ question = Question(
660
+ id=config["id"],
661
+ text=config["text"],
662
+ type=QuestionType(config["type"]),
663
+ options=[QuestionOption(opt["label"], opt["value"]) for opt in config.get("options", [])],
664
+ )
665
+ questions.append(question)
666
+
667
+ return questions
668
+
669
+ def _save_template_to_file(self, template: Dict[str, Any], file_path: Path):
670
+ """Save a template to file."""
671
+ try:
672
+ with open(file_path, "w", encoding="utf-8") as f:
673
+ json.dump(template, f, indent=2, ensure_ascii=False)
674
+ except Exception as e:
675
+ logger.error(f"Error saving template to {file_path}: {e}")
676
+
677
+
678
+ @dataclass
679
+ class ValidationResult:
680
+ """Result of response validation."""
681
+
682
+ is_valid: bool
683
+ error: Optional[str] = None
684
+ warnings: List[str] = field(default_factory=list)
685
+
686
+
687
+ # Integration helper functions for MoAI skills
688
+
689
+
690
+ def create_project_initializer(config: Dict[str, Any]) -> BatchQuestionsManager:
691
+ """Create a project initializer with standard templates."""
692
+ return BatchQuestionsManager(config)
693
+
694
+
695
+ def ask_skill_questions(skill_name: str, context: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
696
+ """
697
+ Ask skill-specific questions and return responses.
698
+
699
+ Args:
700
+ skill_name: Name of the skill
701
+ context: Existing context for conditional questions
702
+
703
+ Returns:
704
+ Dict[str, Any]: User responses
705
+ """
706
+ manager = BatchQuestionsManager()
707
+ template = manager.get_skill_specific_template(skill_name)
708
+
709
+ if not template:
710
+ logger.warning(f"No template found for skill: {skill_name}")
711
+ return {}
712
+
713
+ return manager.execute_batch(template, context or {})