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,158 @@
1
+ # Advanced Implementation Patterns
2
+
3
+ Advanced patterns for custom template development, performance optimization, and integration workflows.
4
+
5
+ ## Custom Template Development
6
+
7
+ Documentation Templates:
8
+ ```python
9
+ # Custom template for specific project type
10
+ custom_template = {
11
+ "project_type": "mobile_application",
12
+ "language": "ko",
13
+ "sections": {
14
+ "product": {
15
+ "mission": " ",
16
+ "metrics": [" ", " ", " "],
17
+ "success_criteria": " "
18
+ },
19
+ "tech": {
20
+ "frameworks": ["Flutter", "React Native", "Swift"],
21
+ "performance_targets": " "
22
+ }
23
+ }
24
+ }
25
+
26
+ # Generate custom documentation
27
+ docs = project.documentation_manager._generate_product_doc(
28
+ "mobile_application", "ko"
29
+ )
30
+ ```
31
+
32
+ Language-Specific Customization:
33
+ ```python
34
+ # Add custom language support
35
+ custom_language_config = {
36
+ "code": "de",
37
+ "name": "German",
38
+ "native_name": "Deutsch",
39
+ "locale": "de_DE.UTF-8",
40
+ "date_format": "%d.%m.%Y",
41
+ "rtl": False
42
+ }
43
+
44
+ # Register custom language
45
+ project.language_initializer.LANGUAGE_CONFIG["de"] = custom_language_config
46
+ ```
47
+
48
+ ## Performance Optimization Strategies
49
+
50
+ Template Caching:
51
+ ```python
52
+ # Enable template caching for performance
53
+ project.template_optimizer.optimization_cache = {}
54
+
55
+ # Cache optimization results
56
+ def cached_optimization(template_path):
57
+ cache_key = f"opt_{template_path}_{datetime.now().strftime('%Y%m%d')}"
58
+
59
+ if cache_key not in project.template_optimizer.optimization_cache:
60
+ result = project.template_optimizer._optimize_template_file(template_path)
61
+ project.template_optimizer.optimization_cache[cache_key] = result
62
+
63
+ return project.template_optimizer.optimization_cache[cache_key]
64
+ ```
65
+
66
+ Batch Processing:
67
+ ```python
68
+ # Process multiple templates efficiently
69
+ def batch_optimize_templates(template_paths):
70
+ results = []
71
+
72
+ for template_path in template_paths:
73
+ try:
74
+ result = project.template_optimizer._optimize_template_file(template_path)
75
+ results.append(result)
76
+ except Exception as e:
77
+ results.append({
78
+ "file_path": template_path,
79
+ "success": False,
80
+ "error": str(e)
81
+ })
82
+
83
+ return results
84
+ ```
85
+
86
+ ## Integration Workflows
87
+
88
+ Complete Project Lifecycle:
89
+ ```python
90
+ def full_project_lifecycle():
91
+ """Complete project setup and management workflow."""
92
+
93
+ # Phase 1: Project Initialization
94
+ project = MoaiMenuProject("./new-project")
95
+ init_result = project.initialize_complete_project(
96
+ language="en",
97
+ domains=["backend", "frontend"],
98
+ optimization_enabled=True
99
+ )
100
+
101
+ # Phase 2: Feature Development with SPEC
102
+ spec_data = {
103
+ "id": "SPEC-001",
104
+ "title": "Core Feature Implementation",
105
+ "requirements": ["Requirement 1", "Requirement 2"],
106
+ "api_endpoints": [/* ... */]
107
+ }
108
+
109
+ docs_result = project.generate_documentation_from_spec(spec_data)
110
+
111
+ # Phase 3: Performance Optimization
112
+ optimization_result = project.optimize_project_templates()
113
+
114
+ # Phase 4: Documentation Export
115
+ export_result = project.export_project_documentation("html")
116
+
117
+ # Phase 5: Backup Creation
118
+ backup_result = project.create_project_backup()
119
+
120
+ return {
121
+ "initialization": init_result,
122
+ "documentation": docs_result,
123
+ "optimization": optimization_result,
124
+ "export": export_result,
125
+ "backup": backup_result
126
+ }
127
+ ```
128
+
129
+ Multilingual Project Management:
130
+ ```python
131
+ def multilingual_project_workflow():
132
+ """Manage multilingual project with cost optimization."""
133
+
134
+ project = MoaiMenuProject("./multilingual-project")
135
+
136
+ # Initialize with primary language
137
+ init_result = project.initialize_complete_project(
138
+ language="ko",
139
+ user_name=" ",
140
+ domains=["backend", "frontend"]
141
+ )
142
+
143
+ # Optimize agent prompts for cost (use English)
144
+ lang_update = project.update_language_settings({
145
+ "language.agent_prompt_language": "english"
146
+ })
147
+
148
+ # Generate documentation in multiple languages
149
+ for lang in ["ko", "en", "ja"]:
150
+ export_result = project.export_project_documentation("markdown", lang)
151
+ print(f"{lang} documentation exported: {export_result['success']}")
152
+
153
+ return init_result
154
+ ```
155
+
156
+ ---
157
+
158
+ For detailed implementation patterns, refer to the main SKILL.md Implementation Guide section.
@@ -0,0 +1,340 @@
1
+ """
2
+ AskUserQuestion Integration Module
3
+
4
+ Provides seamless integration between the BatchQuestionsManager and Claude Code's
5
+ AskUserQuestion functionality, ensuring consistent user interaction patterns
6
+ across all MoAI skills.
7
+
8
+ Author: MoAI-ADK
9
+ Version: 1.0.0
10
+ """
11
+
12
+ import logging
13
+ from dataclasses import dataclass, field
14
+ from typing import Any, Dict, List, Optional, Union
15
+
16
+ from .batch_questions import BatchQuestionsManager, Question, QuestionType, UserResponse
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ @dataclass
22
+ class AskUserConfig:
23
+ """Configuration for AskUserQuestion integration."""
24
+
25
+ max_options_per_question: int = 10
26
+ enable_descriptions: bool = True
27
+ enable_conditional: bool = True
28
+ validation_error_retries: int = 3
29
+ timeout_seconds: Optional[int] = None
30
+ default_multi_select: bool = False
31
+
32
+
33
+ class AskUserQuestionIntegrator:
34
+ """
35
+ Integrates BatchQuestionsManager with Claude Code's AskUserQuestion.
36
+
37
+ This class provides a bridge between our question system and Claude Code's
38
+ built-in user interaction capabilities, ensuring consistent UX across
39
+ all MoAI skills.
40
+ """
41
+
42
+ def __init__(self, config: Optional[AskUserConfig] = None):
43
+ """Initialize the integrator with optional configuration."""
44
+ self.config = config or AskUserConfig()
45
+ self._setup_ask_user_function()
46
+
47
+ def _setup_ask_user_function(self):
48
+ """Setup the AskUserQuestion function reference."""
49
+ # This will be available when running in Claude Code environment
50
+ # For now, we'll create a mock implementation
51
+ try:
52
+ # In actual Claude Code environment, this would be available
53
+ from claude_code import ask_user_question as AskUserQuestion # noqa: N812
54
+
55
+ self.AskUserQuestion = AskUserQuestion
56
+ except ImportError:
57
+ # Mock implementation for development/testing
58
+ self.AskUserQuestion = self._mock_ask_user_question
59
+ logger.warning("Using mock AskUserQuestion - not in Claude Code environment")
60
+
61
+ def _mock_ask_user_question(
62
+ self, questions: List[Dict[str, Any]], answers: Optional[Dict[str, str]] = None
63
+ ) -> Dict[str, str]:
64
+ """Mock implementation of AskUserQuestion for development."""
65
+ logger.info(f"Mock AskUserQuestion called with {len(questions)} questions")
66
+
67
+ # Return mock answers
68
+ mock_answers = {}
69
+ for q in questions:
70
+ if q.get("multiSelect", False):
71
+ # For multi-select, return first option
72
+ options = q.get("options", [])
73
+ if options:
74
+ mock_answers[q["question"]] = [options[0]["label"]]
75
+ else:
76
+ # For single select, return first option
77
+ options = q.get("options", [])
78
+ if options:
79
+ mock_answers[q["question"]] = options[0]["label"]
80
+ else:
81
+ mock_answers[q["question"]] = "Default answer"
82
+
83
+ return mock_answers
84
+
85
+ def convert_question_to_ask_user_format(self, question: Question) -> Dict[str, Any]:
86
+ """
87
+ Convert a Question object to AskUserQuestion format.
88
+
89
+ Args:
90
+ question: Question to convert
91
+
92
+ Returns:
93
+ Dict: AskUserQuestion compatible format
94
+ """
95
+ ask_user_q = {
96
+ "question": question.text,
97
+ "multiSelect": question.type == QuestionType.MULTI_CHOICE,
98
+ }
99
+
100
+ # Add header if available
101
+ if question.metadata.get("header"):
102
+ ask_user_q["header"] = question.metadata["header"]
103
+
104
+ # Convert options
105
+ if question.options:
106
+ options = []
107
+ for opt in question.options:
108
+ option_dict = {
109
+ "label": opt.label,
110
+ "description": (opt.description if self.config.enable_descriptions else None),
111
+ }
112
+
113
+ # Only include non-None descriptions
114
+ if option_dict["description"] is None:
115
+ del option_dict["description"]
116
+
117
+ options.append(option_dict)
118
+
119
+ ask_user_q["options"] = options
120
+
121
+ # Handle text input questions (convert to choice with text input)
122
+ elif question.type in [QuestionType.TEXT_INPUT, QuestionType.NUMBER_INPUT]:
123
+ ask_user_q["options"] = [
124
+ {
125
+ "label": "Enter value...",
126
+ "description": f"Type your {question.type.value}",
127
+ }
128
+ ]
129
+
130
+ # Handle boolean questions
131
+ elif question.type == QuestionType.BOOLEAN:
132
+ ask_user_q["options"] = [
133
+ {"label": "Yes", "description": "Confirm or accept"},
134
+ {"label": "No", "description": "Decline or reject"},
135
+ ]
136
+
137
+ # Add validation metadata
138
+ if question.validation and question.validation.required:
139
+ ask_user_q["required"] = True
140
+
141
+ return ask_user_q
142
+
143
+ def process_ask_user_response(self, question: Question, response_value: Union[str, List[str]]) -> Any:
144
+ """
145
+ Process AskUserQuestion response back to our expected format.
146
+
147
+ Args:
148
+ question: Original question
149
+ response_value: Response from AskUserQuestion
150
+
151
+ Returns:
152
+ Processed response value in our expected format
153
+ """
154
+ # Handle multi-select responses
155
+ if isinstance(response_value, list) and question.type == QuestionType.MULTI_CHOICE:
156
+ # Convert labels back to values
157
+ selected_values = []
158
+ for label in response_value:
159
+ for option in question.options:
160
+ if option.label == label:
161
+ selected_values.append(option.value)
162
+ break
163
+ return selected_values
164
+
165
+ # Handle single-select responses
166
+ elif isinstance(response_value, str):
167
+ # For choice questions, convert label back to value
168
+ if question.options:
169
+ for option in question.options:
170
+ if option.label == response_value:
171
+ return option.value
172
+
173
+ # For text input questions, return as-is
174
+ elif question.type in [QuestionType.TEXT_INPUT, QuestionType.NUMBER_INPUT]:
175
+ # Convert number input to appropriate type
176
+ if question.type == QuestionType.NUMBER_INPUT:
177
+ try:
178
+ return int(response_value)
179
+ except ValueError:
180
+ try:
181
+ return float(response_value)
182
+ except ValueError:
183
+ return response_value # Keep as string if conversion fails
184
+ return response_value
185
+
186
+ # For boolean questions
187
+ elif question.type == QuestionType.BOOLEAN:
188
+ return response_value.lower() in ["yes", "y", "true", "1"]
189
+
190
+ return response_value
191
+
192
+ def ask_question(self, question: Question, context: Optional[Dict[str, Any]] = None) -> UserResponse:
193
+ """
194
+ Ask a single question using AskUserQuestion.
195
+
196
+ Args:
197
+ question: Question to ask
198
+ context: Current context for conditional questions
199
+
200
+ Returns:
201
+ UserResponse: The user's response
202
+ """
203
+ # Check if question should be asked based on conditional logic
204
+ if question.conditional_on and context:
205
+ should_ask = self._evaluate_condition(question.conditional_on, context)
206
+ if not should_ask:
207
+ # Return default response or skip
208
+ return UserResponse(
209
+ question_id=question.id,
210
+ value=question.default_value,
211
+ metadata={"skipped": True, "reason": "conditional_not_met"},
212
+ )
213
+
214
+ # Convert to AskUserQuestion format
215
+ ask_user_q = self.convert_question_to_ask_user_format(question)
216
+
217
+ # Ask the question
218
+ try:
219
+ raw_response = self.AskUserQuestion([ask_user_q])
220
+ response_value = raw_response.get(ask_user_q["question"])
221
+
222
+ # Validate response
223
+ if question.validation:
224
+ validation_result = self._validate_response(response_value, question.validation)
225
+ if not validation_result.is_valid:
226
+ raise ValueError(f"Invalid response: {validation_result.error}")
227
+
228
+ # Process response
229
+ processed_value = self.process_ask_user_response(question, response_value)
230
+
231
+ return UserResponse(
232
+ question_id=question.id,
233
+ value=processed_value,
234
+ metadata={"source": "ask_user_question", "raw_response": raw_response},
235
+ )
236
+
237
+ except Exception as e:
238
+ logger.error(f"Error asking question {question.id}: {e}")
239
+ # Return default value on error
240
+ return UserResponse(
241
+ question_id=question.id,
242
+ value=question.default_value,
243
+ metadata={"error": str(e), "fallback": True},
244
+ )
245
+
246
+ def ask_question_batch(
247
+ self, questions: List[Question], context: Optional[Dict[str, Any]] = None
248
+ ) -> Dict[str, UserResponse]:
249
+ """
250
+ Ask multiple questions in sequence using AskUserQuestion.
251
+
252
+ Args:
253
+ questions: List of questions to ask
254
+ context: Current context for conditional questions
255
+
256
+ Returns:
257
+ Dict[str, UserResponse]: All user responses
258
+ """
259
+ if context is None:
260
+ context = {}
261
+
262
+ responses = {}
263
+
264
+ for question in questions:
265
+ # Check if question already has response in context
266
+ if question.id in context:
267
+ responses[question.id] = UserResponse(
268
+ question_id=question.id,
269
+ value=context[question.id],
270
+ metadata={"source": "context"},
271
+ )
272
+ continue
273
+
274
+ # Ask the question
275
+ response = self.ask_question(question, context)
276
+ responses[question.id] = response
277
+
278
+ # Update context for subsequent questions
279
+ if not response.metadata.get("skipped"):
280
+ context[question.id] = response.value
281
+
282
+ return responses
283
+
284
+ def _evaluate_condition(self, condition: Dict[str, Any], context: Dict[str, Any]) -> bool:
285
+ """Evaluate conditional logic for questions."""
286
+ if not self.config.enable_conditional:
287
+ return True
288
+
289
+ for key, expected in condition.items():
290
+ if key not in context:
291
+ return False
292
+
293
+ actual = context[key]
294
+ if isinstance(expected, list):
295
+ if actual not in expected:
296
+ return False
297
+ elif actual != expected:
298
+ return False
299
+
300
+ return True
301
+
302
+ def _validate_response(self, value: Any, validation) -> "ValidationResult":
303
+ """Validate a response value."""
304
+ # This would integrate with the validation system
305
+ # For now, return a simple validation result
306
+ return ValidationResult(is_valid=True, error=None)
307
+
308
+
309
+ @dataclass
310
+ class ValidationResult:
311
+ """Result of response validation."""
312
+
313
+ is_valid: bool
314
+ error: Optional[str] = None
315
+ warnings: List[str] = field(default_factory=list)
316
+
317
+
318
+ # Monkey patch BatchQuestionsManager to use AskUserQuestion integration
319
+
320
+
321
+ def enhance_batch_questions_manager():
322
+ """Enhance BatchQuestionsManager with AskUserQuestion integration."""
323
+
324
+ def execute_batch_with_ask_user(self, batch, context=None):
325
+ """Execute batch using AskUserQuestion integration."""
326
+ if context is None:
327
+ context = {}
328
+
329
+ integrator = AskUserQuestionIntegrator()
330
+ questions = self.filter_questions(batch, context)
331
+ return integrator.ask_question_batch(questions, context)
332
+
333
+ # Patch the method
334
+ BatchQuestionsManager.execute_batch = execute_batch_with_ask_user
335
+
336
+ logger.info("Enhanced BatchQuestionsManager with AskUserQuestion integration")
337
+
338
+
339
+ # Auto-enhance when module is imported
340
+ enhance_batch_questions_manager()