moai-adk 0.8.0__py3-none-any.whl → 0.34.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. moai_adk/__init__.py +2 -6
  2. moai_adk/__main__.py +136 -21
  3. moai_adk/cli/__init__.py +6 -2
  4. moai_adk/cli/commands/__init__.py +1 -4
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +17 -5
  7. moai_adk/cli/commands/init.py +118 -48
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +8 -13
  10. moai_adk/cli/commands/update.py +1978 -149
  11. moai_adk/cli/main.py +3 -2
  12. moai_adk/cli/prompts/init_prompts.py +144 -91
  13. moai_adk/cli/spec_status.py +263 -0
  14. moai_adk/cli/ui/__init__.py +44 -0
  15. moai_adk/cli/ui/progress.py +422 -0
  16. moai_adk/cli/ui/prompts.py +389 -0
  17. moai_adk/cli/ui/theme.py +129 -0
  18. moai_adk/cli/worktree/__init__.py +27 -0
  19. moai_adk/cli/worktree/__main__.py +31 -0
  20. moai_adk/cli/worktree/cli.py +683 -0
  21. moai_adk/cli/worktree/exceptions.py +89 -0
  22. moai_adk/cli/worktree/manager.py +493 -0
  23. moai_adk/cli/worktree/models.py +65 -0
  24. moai_adk/cli/worktree/registry.py +422 -0
  25. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  26. moai_adk/core/__init__.py +0 -1
  27. moai_adk/core/analysis/__init__.py +9 -0
  28. moai_adk/core/analysis/session_analyzer.py +400 -0
  29. moai_adk/core/claude_integration.py +393 -0
  30. moai_adk/core/command_helpers.py +270 -0
  31. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  32. moai_adk/core/config/__init__.py +6 -0
  33. moai_adk/core/config/auto_spec_config.py +340 -0
  34. moai_adk/core/config/migration.py +148 -17
  35. moai_adk/core/config/unified.py +436 -0
  36. moai_adk/core/context_manager.py +273 -0
  37. moai_adk/core/diagnostics/slash_commands.py +0 -1
  38. moai_adk/core/enterprise_features.py +1404 -0
  39. moai_adk/core/error_recovery_system.py +1902 -0
  40. moai_adk/core/event_driven_hook_system.py +1371 -0
  41. moai_adk/core/git/__init__.py +8 -1
  42. moai_adk/core/git/branch.py +0 -1
  43. moai_adk/core/git/branch_manager.py +2 -10
  44. moai_adk/core/git/checkpoint.py +1 -7
  45. moai_adk/core/git/commit.py +0 -1
  46. moai_adk/core/git/conflict_detector.py +413 -0
  47. moai_adk/core/git/event_detector.py +3 -5
  48. moai_adk/core/git/manager.py +91 -2
  49. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  50. moai_adk/core/input_validation_middleware.py +1006 -0
  51. moai_adk/core/integration/__init__.py +22 -0
  52. moai_adk/core/integration/engine.py +157 -0
  53. moai_adk/core/integration/integration_tester.py +226 -0
  54. moai_adk/core/integration/models.py +88 -0
  55. moai_adk/core/integration/utils.py +211 -0
  56. moai_adk/core/issue_creator.py +305 -0
  57. moai_adk/core/jit_context_loader.py +956 -0
  58. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  59. moai_adk/core/language_config.py +202 -0
  60. moai_adk/core/language_config_resolver.py +572 -0
  61. moai_adk/core/language_validator.py +543 -0
  62. moai_adk/core/mcp/setup.py +116 -0
  63. moai_adk/core/merge/__init__.py +9 -0
  64. moai_adk/core/merge/analyzer.py +481 -0
  65. moai_adk/core/migration/__init__.py +18 -0
  66. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  67. moai_adk/core/migration/backup_manager.py +277 -0
  68. moai_adk/core/migration/custom_element_scanner.py +358 -0
  69. moai_adk/core/migration/file_migrator.py +209 -0
  70. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  71. moai_adk/core/migration/selective_restorer.py +470 -0
  72. moai_adk/core/migration/template_utils.py +74 -0
  73. moai_adk/core/migration/user_selection_ui.py +338 -0
  74. moai_adk/core/migration/version_detector.py +139 -0
  75. moai_adk/core/migration/version_migrator.py +228 -0
  76. moai_adk/core/performance/__init__.py +6 -0
  77. moai_adk/core/performance/cache_system.py +316 -0
  78. moai_adk/core/performance/parallel_processor.py +116 -0
  79. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  80. moai_adk/core/project/__init__.py +0 -1
  81. moai_adk/core/project/backup_utils.py +2 -7
  82. moai_adk/core/project/checker.py +2 -4
  83. moai_adk/core/project/detector.py +189 -22
  84. moai_adk/core/project/initializer.py +218 -27
  85. moai_adk/core/project/phase_executor.py +416 -44
  86. moai_adk/core/project/validator.py +7 -32
  87. moai_adk/core/quality/__init__.py +1 -1
  88. moai_adk/core/quality/trust_checker.py +37 -101
  89. moai_adk/core/quality/validators/__init__.py +1 -1
  90. moai_adk/core/quality/validators/base_validator.py +1 -1
  91. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  92. moai_adk/core/robust_json_parser.py +611 -0
  93. moai_adk/core/rollback_manager.py +918 -0
  94. moai_adk/core/session_manager.py +651 -0
  95. moai_adk/core/skill_loading_system.py +579 -0
  96. moai_adk/core/spec/confidence_scoring.py +680 -0
  97. moai_adk/core/spec/ears_template_engine.py +1247 -0
  98. moai_adk/core/spec/quality_validator.py +687 -0
  99. moai_adk/core/spec_status_manager.py +478 -0
  100. moai_adk/core/template/__init__.py +0 -1
  101. moai_adk/core/template/backup.py +82 -17
  102. moai_adk/core/template/config.py +112 -40
  103. moai_adk/core/template/languages.py +0 -1
  104. moai_adk/core/template/merger.py +75 -26
  105. moai_adk/core/template/processor.py +750 -72
  106. moai_adk/core/template_engine.py +310 -0
  107. moai_adk/core/template_variable_synchronizer.py +417 -0
  108. moai_adk/core/unified_permission_manager.py +745 -0
  109. moai_adk/core/user_behavior_analytics.py +851 -0
  110. moai_adk/core/version_sync.py +429 -0
  111. moai_adk/foundation/__init__.py +56 -0
  112. moai_adk/foundation/backend.py +1027 -0
  113. moai_adk/foundation/database.py +1115 -0
  114. moai_adk/foundation/devops.py +1585 -0
  115. moai_adk/foundation/ears.py +431 -0
  116. moai_adk/foundation/frontend.py +870 -0
  117. moai_adk/foundation/git/commit_templates.py +557 -0
  118. moai_adk/foundation/git.py +376 -0
  119. moai_adk/foundation/langs.py +484 -0
  120. moai_adk/foundation/ml_ops.py +1162 -0
  121. moai_adk/foundation/testing.py +1524 -0
  122. moai_adk/foundation/trust/trust_principles.py +676 -0
  123. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  124. moai_adk/project/__init__.py +0 -0
  125. moai_adk/project/configuration.py +1084 -0
  126. moai_adk/project/documentation.py +566 -0
  127. moai_adk/project/schema.py +447 -0
  128. moai_adk/statusline/__init__.py +38 -0
  129. moai_adk/statusline/alfred_detector.py +105 -0
  130. moai_adk/statusline/config.py +376 -0
  131. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  132. moai_adk/statusline/git_collector.py +190 -0
  133. moai_adk/statusline/main.py +322 -0
  134. moai_adk/statusline/metrics_tracker.py +78 -0
  135. moai_adk/statusline/renderer.py +343 -0
  136. moai_adk/statusline/update_checker.py +129 -0
  137. moai_adk/statusline/version_reader.py +741 -0
  138. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +670 -0
  139. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  140. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  141. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  142. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  143. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  144. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  145. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  146. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  147. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  148. moai_adk/templates/.claude/agents/moai/expert-security.md +509 -0
  149. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  150. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  151. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  152. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  153. moai_adk/templates/.claude/agents/moai/manager-git.md +1020 -0
  154. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  155. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  156. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  157. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  158. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  159. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  160. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  161. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  164. moai_adk/templates/.claude/commands/moai/0-project.md +1384 -0
  165. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  166. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  167. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  168. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  169. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  170. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  171. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  172. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/checkpoint.py +10 -37
  173. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  185. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  186. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1075 -0
  187. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  188. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  189. moai_adk/templates/.claude/settings.json +78 -50
  190. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +438 -0
  191. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  192. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  193. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  194. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  195. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  196. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  200. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +313 -283
  201. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
  202. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
  203. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +295 -95
  204. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
  205. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  206. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  207. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +532 -17
  210. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +470 -97
  211. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
  212. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
  213. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  214. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  215. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  216. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  217. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  221. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  222. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  223. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  224. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  230. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  231. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  232. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  233. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  280. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +618 -93
  281. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +446 -91
  282. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  283. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  284. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  285. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  286. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +346 -94
  287. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
  288. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
  289. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +352 -91
  290. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
  291. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
  292. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +344 -86
  293. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
  294. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
  295. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +617 -96
  296. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +364 -314
  297. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
  298. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
  299. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +545 -89
  300. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +650 -87
  301. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +341 -93
  302. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
  303. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
  304. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +463 -89
  305. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
  306. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
  307. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +486 -112
  308. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
  309. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
  310. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +333 -92
  311. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
  312. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
  313. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  314. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  315. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  316. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  318. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  319. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  320. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  321. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  331. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  332. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  333. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  334. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  338. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  339. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  340. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  341. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  342. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +290 -0
  343. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  344. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  345. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  346. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  347. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  348. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  349. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  350. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  351. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  352. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  353. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  354. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  355. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  356. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  357. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  358. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  359. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  360. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  361. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  362. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  363. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  364. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  365. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  366. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  367. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  368. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  369. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  370. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  371. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  372. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  373. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  374. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  375. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  376. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  377. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1462 -0
  378. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  379. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  380. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  381. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  382. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  383. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  384. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  385. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  386. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  387. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  388. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  389. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  390. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  391. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  417. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  418. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  419. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  420. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  421. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  422. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  423. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  424. moai_adk/templates/.git-hooks/pre-commit +128 -0
  425. moai_adk/templates/.git-hooks/pre-push +365 -0
  426. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  427. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  428. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
  429. moai_adk/templates/.gitignore +194 -13
  430. moai_adk/templates/.mcp.json +31 -0
  431. moai_adk/templates/.moai/config/config.yaml +58 -0
  432. moai_adk/templates/.moai/config/questions/_schema.yaml +151 -0
  433. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  434. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  435. moai_adk/templates/.moai/config/questions/tab2-project.yaml +81 -0
  436. moai_adk/templates/.moai/config/questions/tab3-git.yaml +634 -0
  437. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +170 -0
  438. moai_adk/templates/.moai/config/questions/tab5-system.yaml +87 -0
  439. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  440. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  441. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  442. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  443. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  444. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  445. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  446. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  447. moai_adk/templates/CLAUDE.md +571 -244
  448. moai_adk/utils/__init__.py +24 -2
  449. moai_adk/utils/banner.py +9 -13
  450. moai_adk/utils/common.py +294 -0
  451. moai_adk/utils/link_validator.py +241 -0
  452. moai_adk/utils/logger.py +4 -9
  453. moai_adk/utils/safe_file_reader.py +206 -0
  454. moai_adk/utils/timeout.py +160 -0
  455. moai_adk/utils/toon_utils.py +256 -0
  456. moai_adk/version.py +22 -0
  457. moai_adk-0.34.0.dist-info/METADATA +2999 -0
  458. moai_adk-0.34.0.dist-info/RECORD +463 -0
  459. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/WHEEL +1 -1
  460. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/entry_points.txt +1 -0
  461. moai_adk/cli/commands/backup.py +0 -80
  462. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
  463. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
  464. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
  465. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
  466. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
  467. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
  468. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
  469. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
  470. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
  471. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
  472. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
  473. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
  474. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
  475. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
  476. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
  477. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
  478. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  479. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  480. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  481. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
  482. moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
  483. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
  484. moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
  485. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
  486. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  487. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
  488. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
  489. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
  490. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  491. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  492. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  493. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  494. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  495. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  496. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  497. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  498. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  499. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  500. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  501. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  502. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  503. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  504. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  505. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  506. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  507. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  508. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  509. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  510. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  511. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  512. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  513. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  514. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  515. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  516. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  517. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  518. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  519. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  520. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  521. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  522. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  523. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  524. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  525. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  526. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  527. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  528. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  529. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  530. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  531. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  532. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  533. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  534. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  535. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  536. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  537. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  538. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  539. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  540. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  541. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  542. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  543. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  544. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  545. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  546. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  547. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  548. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  549. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  550. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  551. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  552. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  553. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  554. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  555. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  556. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  557. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  558. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  559. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  560. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  561. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  562. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  563. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  564. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  565. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  566. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
  567. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  568. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  569. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  570. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  571. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  572. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  573. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  574. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  575. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  576. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  577. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  578. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  579. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  580. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  581. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  582. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  583. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  584. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  585. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  586. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  587. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  588. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  589. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  590. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  591. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  592. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  593. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  594. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  595. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  596. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  597. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  598. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  599. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  600. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  601. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  602. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  603. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  604. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  605. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  606. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  607. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  608. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  609. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  610. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  611. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  612. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  613. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  614. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  615. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  616. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  617. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  618. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  619. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  620. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  621. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  622. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  623. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  624. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  625. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  626. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  627. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  628. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  629. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  630. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  631. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  632. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  633. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  634. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  635. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
  636. moai_adk/templates/.moai/config.json +0 -96
  637. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  638. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  639. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  640. moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
  641. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  642. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  643. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  644. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  645. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  646. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  647. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  648. moai_adk/templates/.moai/project/product.md +0 -161
  649. moai_adk/templates/.moai/project/structure.md +0 -156
  650. moai_adk/templates/.moai/project/tech.md +0 -227
  651. moai_adk/templates/__init__.py +0 -2
  652. moai_adk-0.8.0.dist-info/METADATA +0 -1722
  653. moai_adk-0.8.0.dist-info/RECORD +0 -282
  654. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1006 @@
1
+ """
2
+ Enhanced Input Validation Middleware for MoAI-ADK
3
+
4
+ Production-ready input validation and normalization system that addresses tool input
5
+ validation failures identified in Claude Code debug logs. Provides intelligent parameter
6
+ mapping, version compatibility, and real-time input correction.
7
+
8
+ Author: MoAI-ADK Core Team
9
+ Version: 1.0.0
10
+ """
11
+
12
+ import json
13
+ import logging
14
+ from dataclasses import dataclass, field
15
+ from enum import Enum
16
+ from typing import Any, Callable, Dict, List, Optional, Set, Tuple
17
+
18
+ # Configure logging
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ class ValidationSeverity(Enum):
23
+ """Input validation severity levels"""
24
+
25
+ LOW = "low"
26
+ MEDIUM = "medium"
27
+ HIGH = "high"
28
+ CRITICAL = "critical"
29
+
30
+
31
+ class ToolCategory(Enum):
32
+ """Categories of tools with specific validation requirements"""
33
+
34
+ SEARCH = "search"
35
+ FILE_OPERATIONS = "file_operations"
36
+ TEXT_PROCESSING = "text_processing"
37
+ DATA_ANALYSIS = "data_analysis"
38
+ SYSTEM = "system"
39
+ GENERAL = "general"
40
+
41
+
42
+ @dataclass
43
+ class ValidationError:
44
+ """Individual validation error details"""
45
+
46
+ code: str
47
+ message: str
48
+ path: List[str]
49
+ severity: ValidationSeverity
50
+ auto_corrected: bool = False
51
+ original_value: Any = None
52
+ corrected_value: Any = None
53
+ suggestion: Optional[str] = None
54
+
55
+
56
+ @dataclass
57
+ class ValidationResult:
58
+ """Result of input validation and normalization"""
59
+
60
+ valid: bool
61
+ normalized_input: Dict[str, Any]
62
+ errors: List[ValidationError] = field(default_factory=list)
63
+ warnings: List[str] = field(default_factory=list)
64
+ transformations: List[str] = field(default_factory=list)
65
+ processing_time_ms: float = 0.0
66
+
67
+
68
+ @dataclass
69
+ class ToolParameter:
70
+ """Tool parameter definition for validation"""
71
+
72
+ name: str
73
+ param_type: str
74
+ required: bool = False
75
+ default_value: Any = None
76
+ aliases: List[str] = field(default_factory=list)
77
+ validation_function: Optional[Callable] = None
78
+ description: str = ""
79
+ deprecated_aliases: List[str] = field(default_factory=list)
80
+
81
+
82
+ class EnhancedInputValidationMiddleware:
83
+ """
84
+ Production-ready input validation middleware that addresses tool input validation
85
+ failures from Claude Code debug logs with intelligent parameter mapping and normalization.
86
+
87
+ Key Features:
88
+ - Smart parameter mapping for unrecognized keys
89
+ - Version compatibility support
90
+ - Real-time input normalization
91
+ - Comprehensive error tracking and correction
92
+ - Tool-specific validation rules
93
+ """
94
+
95
+ def __init__(self, enable_logging: bool = True, enable_caching: bool = True):
96
+ self.enable_logging = enable_logging
97
+ self.enable_caching = enable_caching
98
+
99
+ # Tool parameter definitions
100
+ self.tool_parameters = self._load_tool_parameter_definitions()
101
+
102
+ # Parameter mapping for compatibility
103
+ self.parameter_mappings = self._load_parameter_mappings()
104
+
105
+ # Validation cache
106
+ self.validation_cache: Optional[Dict[str, Any]] = {} if enable_caching else None
107
+
108
+ # Statistics
109
+ self.stats = {
110
+ "validations_performed": 0,
111
+ "auto_corrections": 0,
112
+ "errors_resolved": 0,
113
+ "transformations_applied": 0,
114
+ }
115
+
116
+ def _load_tool_parameter_definitions(self) -> Dict[str, List[ToolParameter]]:
117
+ """Load tool parameter definitions with compatibility information"""
118
+ return {
119
+ "Grep": [
120
+ ToolParameter(
121
+ name="pattern",
122
+ param_type="string",
123
+ required=True,
124
+ description="Regex pattern to search for",
125
+ aliases=["regex", "search_pattern"],
126
+ ),
127
+ ToolParameter(
128
+ name="output_mode",
129
+ param_type="string",
130
+ default_value="content",
131
+ description="Output format mode",
132
+ aliases=["mode", "format"],
133
+ validation_function=self._validate_grep_mode,
134
+ ),
135
+ ToolParameter(
136
+ name="head_limit",
137
+ param_type="integer",
138
+ description="Limit number of results",
139
+ default_value=None,
140
+ aliases=["limit", "max_results", "count", "head"],
141
+ deprecated_aliases=["max"],
142
+ ),
143
+ ToolParameter(
144
+ name="path",
145
+ param_type="string",
146
+ description="Path to search in",
147
+ aliases=["directory", "folder", "search_path", "root"],
148
+ ),
149
+ ToolParameter(
150
+ name="file_pattern",
151
+ param_type="string",
152
+ description="File pattern to match",
153
+ aliases=["glob", "pattern", "files", "file_glob"],
154
+ ),
155
+ ToolParameter(
156
+ name="case_sensitive",
157
+ param_type="boolean",
158
+ default_value=False,
159
+ description="Case sensitive search",
160
+ aliases=["case", "ignore_case", "sensitive"],
161
+ ),
162
+ ToolParameter(
163
+ name="context_lines",
164
+ param_type="integer",
165
+ default_value=0,
166
+ description="Number of context lines",
167
+ aliases=["context", "before_context", "after_context", "C"],
168
+ ),
169
+ ],
170
+ "Glob": [
171
+ ToolParameter(
172
+ name="pattern",
173
+ param_type="string",
174
+ required=True,
175
+ description="Glob pattern to match",
176
+ aliases=["glob", "file_pattern", "search_pattern"],
177
+ ),
178
+ ToolParameter(
179
+ name="path",
180
+ param_type="string",
181
+ description="Base path for glob",
182
+ aliases=["directory", "folder", "root", "base_path"],
183
+ ),
184
+ ToolParameter(
185
+ name="recursive",
186
+ param_type="boolean",
187
+ default_value=True,
188
+ description="Recursive directory search",
189
+ aliases=["recurse", "recursive_search"],
190
+ ),
191
+ ],
192
+ "Read": [
193
+ ToolParameter(
194
+ name="file_path",
195
+ param_type="string",
196
+ required=True,
197
+ description="Path to file to read",
198
+ aliases=["path", "filename", "file", "source"],
199
+ ),
200
+ ToolParameter(
201
+ name="offset",
202
+ param_type="integer",
203
+ default_value=0,
204
+ description="Starting line number",
205
+ aliases=["start", "start_line", "begin", "from"],
206
+ ),
207
+ ToolParameter(
208
+ name="limit",
209
+ param_type="integer",
210
+ description="Number of lines to read",
211
+ aliases=["count", "max_lines", "lines", "size"],
212
+ ),
213
+ ],
214
+ "Bash": [
215
+ ToolParameter(
216
+ name="command",
217
+ param_type="string",
218
+ required=True,
219
+ description="Command to execute",
220
+ aliases=["cmd", "execute", "run", "script"],
221
+ ),
222
+ ToolParameter(
223
+ name="timeout",
224
+ param_type="integer",
225
+ default_value=10000,
226
+ description="Timeout in milliseconds",
227
+ aliases=["timeout_ms", "max_time", "time_limit"],
228
+ ),
229
+ ToolParameter(
230
+ name="working_directory",
231
+ param_type="string",
232
+ description="Working directory for command",
233
+ aliases=["cwd", "work_dir", "directory", "folder"],
234
+ ),
235
+ ToolParameter(
236
+ name="environment",
237
+ param_type="dict",
238
+ description="Environment variables",
239
+ aliases=["env", "env_vars", "variables"],
240
+ ),
241
+ ],
242
+ "Task": [
243
+ ToolParameter(
244
+ name="subagent_type",
245
+ param_type="string",
246
+ required=True,
247
+ description="Type of subagent to use",
248
+ aliases=["agent_type", "type", "agent", "model"],
249
+ ),
250
+ ToolParameter(
251
+ name="prompt",
252
+ param_type="string",
253
+ required=True,
254
+ description="Prompt for the subagent",
255
+ aliases=["message", "input", "query", "instruction"],
256
+ ),
257
+ ToolParameter(
258
+ name="context",
259
+ param_type="dict",
260
+ description="Additional context",
261
+ aliases=["data", "variables", "params"],
262
+ ),
263
+ ToolParameter(
264
+ name="debug",
265
+ param_type="boolean",
266
+ default_value=False,
267
+ description="Enable debug mode",
268
+ aliases=["verbose", "debug_mode"],
269
+ ),
270
+ ],
271
+ "Write": [
272
+ ToolParameter(
273
+ name="file_path",
274
+ param_type="string",
275
+ required=True,
276
+ description="Path to file to write",
277
+ aliases=["path", "filename", "file", "destination"],
278
+ ),
279
+ ToolParameter(
280
+ name="content",
281
+ param_type="string",
282
+ required=True,
283
+ description="Content to write",
284
+ aliases=["data", "text", "body", "contents"],
285
+ ),
286
+ ToolParameter(
287
+ name="create_directories",
288
+ param_type="boolean",
289
+ default_value=False,
290
+ description="Create parent directories if needed",
291
+ aliases=["mkdir", "create_dirs", "make_dirs"],
292
+ ),
293
+ ToolParameter(
294
+ name="backup",
295
+ param_type="boolean",
296
+ default_value=False,
297
+ description="Create backup of existing file",
298
+ aliases=["backup_existing", "make_backup"],
299
+ ),
300
+ ],
301
+ "Edit": [
302
+ ToolParameter(
303
+ name="file_path",
304
+ param_type="string",
305
+ required=True,
306
+ description="Path to file to edit",
307
+ aliases=["path", "filename", "file"],
308
+ ),
309
+ ToolParameter(
310
+ name="old_string",
311
+ param_type="string",
312
+ required=True,
313
+ description="String to replace",
314
+ aliases=["search", "find", "from", "original"],
315
+ ),
316
+ ToolParameter(
317
+ name="new_string",
318
+ param_type="string",
319
+ required=True,
320
+ description="Replacement string",
321
+ aliases=["replace", "to", "replacement"],
322
+ ),
323
+ ToolParameter(
324
+ name="replace_all",
325
+ param_type="boolean",
326
+ default_value=False,
327
+ description="Replace all occurrences",
328
+ aliases=["global", "all", "replace_all_occurrences"],
329
+ ),
330
+ ],
331
+ }
332
+
333
+ def _load_parameter_mappings(self) -> Dict[str, str]:
334
+ """Load parameter mapping for compatibility with different versions"""
335
+ return {
336
+ # Grep tool mappings
337
+ "grep_head_limit": "head_limit",
338
+ "grep_limit": "head_limit",
339
+ "grep_max": "head_limit",
340
+ "grep_count": "head_limit",
341
+ "grep_head": "head_limit",
342
+ "max_results": "head_limit",
343
+ "result_limit": "head_limit",
344
+ "num_results": "head_limit",
345
+ # Output mode mappings
346
+ "grep_mode": "output_mode",
347
+ "grep_format": "output_mode",
348
+ "output_format": "output_mode",
349
+ "display_mode": "output_mode",
350
+ "show_mode": "output_mode",
351
+ # Path mappings
352
+ "search_path": "path",
353
+ "base_path": "path",
354
+ "root_dir": "path",
355
+ "target_dir": "path",
356
+ # Glob tool mappings
357
+ "glob_pattern": "pattern",
358
+ "file_glob": "pattern",
359
+ "search_pattern": "pattern",
360
+ "match_pattern": "pattern",
361
+ # Read tool mappings
362
+ "start_line": "offset",
363
+ "begin_line": "offset",
364
+ "from_line": "offset",
365
+ "max_lines": "limit",
366
+ "line_count": "limit",
367
+ # Bash tool mappings
368
+ "cmd": "command",
369
+ "execute": "command",
370
+ "run_command": "command",
371
+ "timeout_ms": "timeout",
372
+ "max_time": "timeout",
373
+ "time_limit": "timeout",
374
+ "work_dir": "working_directory",
375
+ "cwd": "working_directory",
376
+ # Task tool mappings
377
+ "agent_type": "subagent_type",
378
+ "message": "prompt",
379
+ "instruction": "prompt",
380
+ "query": "prompt",
381
+ # Write tool mappings
382
+ "filename": "file_path",
383
+ "destination": "file_path",
384
+ "data": "content",
385
+ "text": "content",
386
+ "body": "content",
387
+ "make_backup": "backup",
388
+ # Edit tool mappings
389
+ "search": "old_string",
390
+ "find": "old_string",
391
+ "from": "old_string",
392
+ "replace": "new_string",
393
+ "to": "new_string",
394
+ "global": "replace_all",
395
+ "all": "replace_all",
396
+ }
397
+
398
+ def _validate_grep_mode(self, mode: str) -> bool:
399
+ """Validate grep output mode"""
400
+ valid_modes = ["content", "files_with_matches", "count"]
401
+ return mode in valid_modes
402
+
403
+ def validate_and_normalize_input(self, tool_name: str, input_data: Dict[str, Any]) -> ValidationResult:
404
+ """
405
+ Validate and normalize tool input data.
406
+
407
+ This is the main method that addresses the tool input validation failures
408
+ from the debug logs (Lines 476-495).
409
+ """
410
+ import time
411
+
412
+ start_time = time.time()
413
+
414
+ self.stats["validations_performed"] += 1
415
+
416
+ result = ValidationResult(valid=True, normalized_input=input_data.copy())
417
+
418
+ try:
419
+ # Get tool parameters
420
+ tool_params = self.tool_parameters.get(tool_name, [])
421
+
422
+ if not tool_params:
423
+ # Unknown tool - perform basic validation only
424
+ result.warnings.append(f"Unknown tool: {tool_name}")
425
+ return result
426
+
427
+ # Step 1: Map unrecognized parameters
428
+ mapped_input, mapping_errors = self._map_parameters(tool_name, result.normalized_input)
429
+ result.normalized_input = mapped_input
430
+ result.errors.extend(mapping_errors)
431
+
432
+ # Step 2: Validate required parameters
433
+ required_errors = self._validate_required_parameters(tool_params, result.normalized_input)
434
+ result.errors.extend(required_errors)
435
+
436
+ # Step 3: Apply default values
437
+ self._apply_default_values(tool_params, result.normalized_input)
438
+
439
+ # Step 4: Validate parameter values and apply type conversions
440
+ value_errors = self._validate_parameter_values(tool_params, result.normalized_input)
441
+ result.errors.extend(value_errors)
442
+
443
+ # Apply type conversions from errors
444
+ for error in value_errors:
445
+ if error.code == "type_conversion" and error.auto_corrected and error.corrected_value is not None:
446
+ result.normalized_input[error.path[0]] = error.corrected_value
447
+
448
+ # Step 5: Normalize parameter formats
449
+ transformations = self._normalize_parameter_formats(tool_params, result.normalized_input)
450
+ result.transformations.extend(transformations)
451
+
452
+ # Step 6: Check for deprecated parameters
453
+ deprecated_warnings = self._check_deprecated_parameters(tool_params, result.normalized_input)
454
+ result.warnings.extend(deprecated_warnings)
455
+
456
+ # Update valid status
457
+ critical_errors = [e for e in result.errors if e.severity == ValidationSeverity.CRITICAL]
458
+ if critical_errors:
459
+ result.valid = False
460
+
461
+ # Update statistics
462
+ auto_corrected = len([e for e in result.errors if e.auto_corrected])
463
+ self.stats["auto_corrections"] += auto_corrected
464
+ if auto_corrected > 0:
465
+ self.stats["errors_resolved"] += auto_corrected
466
+
467
+ self.stats["transformations_applied"] += len(result.transformations)
468
+
469
+ if self.enable_logging and (result.errors or result.warnings or result.transformations):
470
+ logger.info(
471
+ f"Input validation for {tool_name}: "
472
+ f"valid={result.valid}, errors={len(result.errors)}, "
473
+ f"warnings={len(result.warnings)}, transformations={len(result.transformations)}"
474
+ )
475
+
476
+ except Exception as e:
477
+ result.valid = False
478
+ result.errors.append(
479
+ ValidationError(
480
+ code="validation_exception",
481
+ message=f"Validation error: {str(e)}",
482
+ path=[],
483
+ severity=ValidationSeverity.CRITICAL,
484
+ )
485
+ )
486
+
487
+ if self.enable_logging:
488
+ logger.error(f"Exception during input validation for {tool_name}: {e}")
489
+
490
+ result.processing_time_ms = (time.time() - start_time) * 1000
491
+
492
+ return result
493
+
494
+ def _map_parameters(
495
+ self,
496
+ tool_name: str,
497
+ input_data: Dict[str, Any],
498
+ ) -> Tuple[Dict[str, Any], List[ValidationError]]:
499
+ """Map and rename unrecognized parameters to their canonical forms"""
500
+ mapped_input = input_data.copy()
501
+ errors = []
502
+
503
+ # Get tool-specific parameters
504
+ tool_params = self.tool_parameters.get(tool_name, [])
505
+
506
+ # Create mapping of all valid parameter names and aliases
507
+ valid_names = set()
508
+ alias_mapping = {}
509
+
510
+ for param in tool_params:
511
+ valid_names.add(param.name)
512
+ for alias in param.aliases + param.deprecated_aliases:
513
+ alias_mapping[alias] = param.name
514
+
515
+ # Add global parameter mappings
516
+ global_mapping_prefix = f"{tool_name.lower()}_"
517
+ for global_key, canonical_key in self.parameter_mappings.items():
518
+ if global_key.startswith(global_mapping_prefix):
519
+ short_key = global_key[len(global_mapping_prefix) :]
520
+ alias_mapping[short_key] = canonical_key
521
+
522
+ # Check each input parameter
523
+ for param_name in list(mapped_input.keys()):
524
+ if param_name in valid_names:
525
+ # Parameter is already in canonical form
526
+ continue
527
+
528
+ if param_name in alias_mapping:
529
+ # Map to canonical name
530
+ canonical_name = alias_mapping[param_name]
531
+ original_value = mapped_input[param_name]
532
+
533
+ mapped_input[canonical_name] = original_value
534
+ del mapped_input[param_name]
535
+
536
+ errors.append(
537
+ ValidationError(
538
+ code="parameter_mapped",
539
+ message=f"Mapped parameter '{param_name}' to '{canonical_name}'",
540
+ path=[param_name],
541
+ severity=ValidationSeverity.LOW,
542
+ auto_corrected=True,
543
+ original_value=original_value,
544
+ corrected_value=original_value,
545
+ suggestion=f"Use '{canonical_name}' instead of '{param_name}'",
546
+ )
547
+ )
548
+
549
+ else:
550
+ # Unknown parameter - create error
551
+ original_value = mapped_input[param_name]
552
+
553
+ # Suggest closest match
554
+ suggestion = self._find_closest_parameter_match(param_name, valid_names)
555
+
556
+ errors.append(
557
+ ValidationError(
558
+ code="unrecognized_parameter",
559
+ message=f"Unrecognized parameter: '{param_name}'",
560
+ path=[param_name],
561
+ severity=ValidationSeverity.HIGH,
562
+ original_value=original_value,
563
+ suggestion=suggestion,
564
+ )
565
+ )
566
+
567
+ return mapped_input, errors
568
+
569
+ def _find_closest_parameter_match(self, param_name: str, valid_names: Set[str]) -> Optional[str]:
570
+ """Find the closest matching valid parameter name"""
571
+ # Convert to lowercase for comparison
572
+ param_lower = param_name.lower()
573
+ valid_lower = {name.lower(): name for name in valid_names}
574
+
575
+ # Exact match (case-insensitive)
576
+ if param_lower in valid_lower:
577
+ return valid_lower[param_lower]
578
+
579
+ # Find best match using Levenshtein distance
580
+ best_match = None
581
+ best_score = float("inf")
582
+
583
+ for valid_lower_name, canonical_name in valid_lower.items():
584
+ # Simple similarity score
585
+ score = self._calculate_string_similarity(param_lower, valid_lower_name)
586
+
587
+ if score < best_score and score < 0.7: # Similarity threshold
588
+ best_score = score
589
+ best_match = canonical_name
590
+
591
+ return best_match
592
+
593
+ def _calculate_string_similarity(self, s1: str, s2: str) -> float:
594
+ """Calculate similarity between two strings (0-1, lower is more similar)"""
595
+ # Simple Levenshtein distance approximation
596
+ if not s1:
597
+ return len(s2)
598
+ if not s2:
599
+ return len(s1)
600
+
601
+ if len(s1) < len(s2):
602
+ s1, s2 = s2, s1
603
+
604
+ # Calculate distance
605
+ previous_row = list(range(len(s2) + 1))
606
+ for i, c1 in enumerate(s1):
607
+ current_row = [i + 1]
608
+ for j, c2 in enumerate(s2):
609
+ insertions = previous_row[j + 1] + 1
610
+ deletions = current_row[j] + 1
611
+ substitutions = previous_row[j] + (c1 != c2)
612
+ current_row.append(min(insertions, deletions, substitutions))
613
+ previous_row = current_row
614
+
615
+ distance = previous_row[-1]
616
+ max_len = max(len(s1), len(s2))
617
+ return distance / max_len if max_len > 0 else 0
618
+
619
+ def _validate_required_parameters(
620
+ self,
621
+ tool_params: List[ToolParameter],
622
+ input_data: Dict[str, Any],
623
+ ) -> List[ValidationError]:
624
+ """Validate that all required parameters are present"""
625
+ errors = []
626
+
627
+ for param in tool_params:
628
+ if param.required and param.name not in input_data:
629
+ errors.append(
630
+ ValidationError(
631
+ code="missing_required_parameter",
632
+ message=f"Missing required parameter: '{param.name}'",
633
+ path=[],
634
+ severity=ValidationSeverity.CRITICAL,
635
+ suggestion=f"Add '{param.name}' parameter",
636
+ )
637
+ )
638
+
639
+ return errors
640
+
641
+ def _apply_default_values(self, tool_params: List[ToolParameter], input_data: Dict[str, Any]) -> None:
642
+ """Apply default values for missing optional parameters"""
643
+ for param in tool_params:
644
+ if not param.required and param.name not in input_data and param.default_value is not None:
645
+ input_data[param.name] = param.default_value
646
+
647
+ def _validate_parameter_values(
648
+ self,
649
+ tool_params: List[ToolParameter],
650
+ input_data: Dict[str, Any],
651
+ ) -> List[ValidationError]:
652
+ """Validate parameter values against their types and constraints"""
653
+ errors = []
654
+
655
+ for param in tool_params:
656
+ if param.name not in input_data:
657
+ continue
658
+
659
+ value = input_data[param.name]
660
+
661
+ # Type validation
662
+ type_errors = self._validate_parameter_type(param, value, input_data)
663
+ errors.extend(type_errors)
664
+
665
+ # Custom validation function
666
+ if param.validation_function and not type_errors:
667
+ try:
668
+ if not param.validation_function(value):
669
+ errors.append(
670
+ ValidationError(
671
+ code="validation_function_failed",
672
+ message=f"Parameter '{param.name}' failed custom validation",
673
+ path=[param.name],
674
+ severity=ValidationSeverity.HIGH,
675
+ original_value=value,
676
+ )
677
+ )
678
+ except Exception as e:
679
+ errors.append(
680
+ ValidationError(
681
+ code="validation_function_error",
682
+ message=f"Error validating parameter '{param.name}': {str(e)}",
683
+ path=[param.name],
684
+ severity=ValidationSeverity.HIGH,
685
+ original_value=value,
686
+ )
687
+ )
688
+
689
+ return errors
690
+
691
+ def _validate_parameter_type(
692
+ self,
693
+ param: ToolParameter,
694
+ value: Any,
695
+ input_data: Dict[str, Any],
696
+ ) -> List[ValidationError]:
697
+ """Validate parameter value against expected type"""
698
+ errors: List[ValidationError] = []
699
+
700
+ # Type mapping
701
+ type_validators = {
702
+ "string": lambda v: isinstance(v, str),
703
+ "integer": lambda v: isinstance(v, int) or (isinstance(v, str) and v.isdigit()),
704
+ "boolean": lambda v: isinstance(v, bool) or str(v).lower() in ["true", "false", "1", "0"],
705
+ "dict": lambda v: isinstance(v, dict),
706
+ "list": lambda v: isinstance(v, list),
707
+ "float": lambda v: isinstance(v, float) or (isinstance(v, (int, str)) and self._is_float(v)),
708
+ }
709
+
710
+ validator = type_validators.get(param.param_type)
711
+ if not validator:
712
+ return errors
713
+
714
+ if not validator(value):
715
+ # Try to auto-convert
716
+ converted_value = self._convert_parameter_type(value, param.param_type)
717
+ if converted_value is not None:
718
+ # Apply the converted value to input_data
719
+ input_data[param.name] = converted_value
720
+ errors.append(
721
+ ValidationError(
722
+ code="type_conversion",
723
+ message=f"Converted parameter '{param.name}' from {type(value).__name__} to {param.param_type}",
724
+ path=[param.name],
725
+ severity=ValidationSeverity.LOW,
726
+ auto_corrected=True,
727
+ original_value=value,
728
+ corrected_value=converted_value,
729
+ )
730
+ )
731
+ else:
732
+ errors.append(
733
+ ValidationError(
734
+ code="type_mismatch",
735
+ message=f"Parameter '{param.name}' expects {param.param_type}, got {type(value).__name__}",
736
+ path=[param.name],
737
+ severity=ValidationSeverity.HIGH,
738
+ original_value=value,
739
+ suggestion=f"Provide a {param.param_type} value for '{param.name}'",
740
+ )
741
+ )
742
+
743
+ return errors
744
+
745
+ def _convert_parameter_type(self, value: Any, target_type: str) -> Any:
746
+ """Attempt to convert value to target type"""
747
+ try:
748
+ if target_type == "string":
749
+ return str(value)
750
+ elif target_type == "integer":
751
+ if isinstance(value, str):
752
+ # Handle negative numbers and leading/trailing whitespace
753
+ value = value.strip()
754
+ try:
755
+ return int(value)
756
+ except ValueError:
757
+ # Try to convert from float string
758
+ try:
759
+ return int(float(value))
760
+ except ValueError:
761
+ return None
762
+ elif isinstance(value, float):
763
+ return int(value)
764
+ elif isinstance(value, bool):
765
+ return int(value)
766
+ elif target_type == "boolean":
767
+ if isinstance(value, str):
768
+ return value.lower() in ["true", "1", "yes", "on"]
769
+ elif isinstance(value, (int, float)):
770
+ return bool(value)
771
+ elif target_type == "float":
772
+ if isinstance(value, str):
773
+ return float(value)
774
+ elif isinstance(value, int):
775
+ return float(value)
776
+ except (ValueError, TypeError):
777
+ pass
778
+
779
+ return None
780
+
781
+ def _is_float(self, value) -> bool:
782
+ """Check if value can be converted to float"""
783
+ try:
784
+ float(value)
785
+ return True
786
+ except (ValueError, TypeError):
787
+ return False
788
+
789
+ def _normalize_parameter_formats(self, tool_params: List[ToolParameter], input_data: Dict[str, Any]) -> List[str]:
790
+ """Normalize parameter formats for consistency"""
791
+ transformations = []
792
+
793
+ for param in tool_params:
794
+ if param.name not in input_data:
795
+ continue
796
+
797
+ value = input_data[param.name]
798
+
799
+ # Normalize boolean values
800
+ if param.param_type == "boolean":
801
+ if isinstance(value, str):
802
+ normalized_bool = value.lower() in ["true", "1", "yes", "on"]
803
+ if value != str(normalized_bool):
804
+ input_data[param.name] = normalized_bool
805
+ transformations.append(
806
+ f"Normalized '{param.name}' boolean from '{value}' to '{normalized_bool}'"
807
+ )
808
+
809
+ # Normalize file paths
810
+ elif param.name in ["file_path", "path", "directory"] and isinstance(value, str):
811
+ # Convert to forward slashes and remove trailing slash
812
+ normalized_path = value.replace("\\", "/").rstrip("/")
813
+ if value != normalized_path:
814
+ input_data[param.name] = normalized_path
815
+ transformations.append(f"Normalized '{param.name}' path from '{value}' to '{normalized_path}'")
816
+
817
+ # Normalize numeric formats - Always attempt conversion for numeric types
818
+ elif param.param_type in ["integer", "float"] and isinstance(value, str):
819
+ try:
820
+ if param.param_type == "integer":
821
+ normalized_num: int | float = int(float(value.strip())) # Handle "123.0" -> 123
822
+ else: # float
823
+ normalized_num = float(value.strip())
824
+
825
+ input_data[param.name] = normalized_num
826
+ transformations.append(
827
+ f"Normalized '{param.name}' {param.param_type} from '{value}' to '{normalized_num}'"
828
+ )
829
+ except ValueError:
830
+ # Keep original value if conversion fails
831
+ pass
832
+
833
+ return transformations
834
+
835
+ def _check_deprecated_parameters(self, tool_params: List[ToolParameter], input_data: Dict[str, Any]) -> List[str]:
836
+ """Check for deprecated parameter usage"""
837
+ warnings = []
838
+
839
+ for param in tool_params:
840
+ if param.name not in input_data:
841
+ continue
842
+
843
+ # Check if parameter name is deprecated
844
+ for deprecated_alias in param.deprecated_aliases:
845
+ if deprecated_alias in input_data and param.name != deprecated_alias:
846
+ value = input_data[deprecated_alias]
847
+ input_data[param.name] = value
848
+ del input_data[deprecated_alias]
849
+
850
+ warnings.append(
851
+ f"Deprecated parameter '{deprecated_alias}' replaced with '{param.name}'. "
852
+ f"This alias will be removed in future versions."
853
+ )
854
+
855
+ return warnings
856
+
857
+ def get_validation_stats(self) -> Dict[str, Any]:
858
+ """Get input validation statistics"""
859
+ return {
860
+ **self.stats,
861
+ "tools_configured": len(self.tool_parameters),
862
+ "parameter_mappings": len(self.parameter_mappings),
863
+ "cache_size": len(self.validation_cache) if self.validation_cache else 0,
864
+ }
865
+
866
+ def register_tool_parameters(self, tool_name: str, parameters: List[ToolParameter]) -> None:
867
+ """Register custom tool parameters"""
868
+ self.tool_parameters[tool_name] = parameters
869
+
870
+ def add_parameter_mapping(self, from_key: str, to_key: str) -> None:
871
+ """Add custom parameter mapping"""
872
+ self.parameter_mappings[from_key] = to_key
873
+
874
+ def export_validation_report(self, output_path: str) -> None:
875
+ """Export validation report to file"""
876
+ report = {
877
+ "generated_at": __import__("time").time(),
878
+ "stats": self.get_validation_stats(),
879
+ "configured_tools": list(self.tool_parameters.keys()),
880
+ "parameter_mappings": self.parameter_mappings,
881
+ }
882
+
883
+ with open(output_path, "w", encoding="utf-8") as f:
884
+ json.dump(report, f, indent=2, ensure_ascii=False)
885
+
886
+
887
+ # Global instance for easy import
888
+ validation_middleware = EnhancedInputValidationMiddleware()
889
+
890
+
891
+ def validate_tool_input(tool_name: str, input_data: Dict[str, Any]) -> ValidationResult:
892
+ """Convenience function for tool input validation"""
893
+ return validation_middleware.validate_and_normalize_input(tool_name, input_data)
894
+
895
+
896
+ def get_validation_stats() -> Dict[str, Any]:
897
+ """Convenience function to get validation statistics"""
898
+ return validation_middleware.get_validation_stats()
899
+
900
+
901
+ if __name__ == "__main__":
902
+ # Demo script for testing the input validation middleware
903
+ print("šŸ”§ MoAI-ADK Enhanced Input Validation Middleware Demo")
904
+ print("=" * 60)
905
+
906
+ # Test cases that reproduce the debug log errors
907
+ test_cases = [
908
+ {
909
+ "name": "Grep with head_limit (debug log error)",
910
+ "tool": "Grep",
911
+ "input": {
912
+ "pattern": "test",
913
+ "head_limit": 10, # This was causing the error
914
+ "output_mode": "content",
915
+ },
916
+ },
917
+ {
918
+ "name": "Grep with alternative parameter names",
919
+ "tool": "Grep",
920
+ "input": {
921
+ "pattern": "test",
922
+ "max_results": 20, # Should be mapped to head_limit
923
+ "search_path": "/src", # Should be mapped to path
924
+ },
925
+ },
926
+ {
927
+ "name": "Grep with deprecated parameters",
928
+ "tool": "Grep",
929
+ "input": {
930
+ "pattern": "test",
931
+ "count": 15, # Deprecated alias
932
+ "folder": "/src", # Should be mapped to path
933
+ },
934
+ },
935
+ {
936
+ "name": "Read with parameter aliases",
937
+ "tool": "Read",
938
+ "input": {
939
+ "filename": "/path/to/file.txt", # Should be mapped to file_path
940
+ "start_line": 10, # Should be mapped to offset
941
+ "lines": 50, # Should be mapped to limit
942
+ },
943
+ },
944
+ {
945
+ "name": "Task with mixed parameter names",
946
+ "tool": "Task",
947
+ "input": {
948
+ "agent_type": "debug-helper", # Should be mapped to subagent_type
949
+ "message": "test message", # Should be mapped to prompt
950
+ "verbose": True, # Should be mapped to debug
951
+ },
952
+ },
953
+ {
954
+ "name": "Bash with alternative parameters",
955
+ "tool": "Bash",
956
+ "input": {
957
+ "cmd": "ls -la", # Should be mapped to command
958
+ "cwd": "/home/user", # Should be mapped to working_directory
959
+ "timeout_ms": 5000, # Should be mapped to timeout
960
+ },
961
+ },
962
+ ]
963
+
964
+ for i, test_case in enumerate(test_cases, 1):
965
+ print(f"\n{i}. {test_case['name']}")
966
+ tool_name: str = test_case["tool"] # type: ignore[assignment]
967
+ tool_input: Dict[str, Any] = test_case["input"] # type: ignore[assignment]
968
+ print(f" Tool: {tool_name}")
969
+ print(f" Original input: {tool_input}")
970
+
971
+ result = validate_tool_input(tool_name, tool_input)
972
+
973
+ print(f" Valid: {result.valid}")
974
+ print(f" Errors: {len(result.errors)}")
975
+ print(f" Warnings: {len(result.warnings)}")
976
+ print(f" Transformations: {len(result.transformations)}")
977
+ print(f" Processing time: {result.processing_time_ms:.2f}ms")
978
+
979
+ if result.errors:
980
+ print(" Error details:")
981
+ for error in result.errors:
982
+ status = "āœ… AUTO-CORRECTED" if error.auto_corrected else "āŒ NOT FIXED"
983
+ print(f" • {error.message} [{status}]")
984
+ if error.suggestion:
985
+ print(f" Suggestion: {error.suggestion}")
986
+
987
+ if result.warnings:
988
+ print(" Warnings:")
989
+ for warning in result.warnings:
990
+ print(f" • {warning}")
991
+
992
+ if result.transformations:
993
+ print(" Transformations:")
994
+ for transform in result.transformations:
995
+ print(f" • {transform}")
996
+
997
+ print(f" Normalized input: {result.normalized_input}")
998
+
999
+ print("\nšŸ“Š Validation Statistics:")
1000
+ stats = get_validation_stats()
1001
+ for key, value in stats.items():
1002
+ print(f" {key}: {value}")
1003
+
1004
+ print("\n✨ Demo completed! The Enhanced Input Validation Middleware addresses")
1005
+ print(" the tool input validation failures from the debug logs with automatic")
1006
+ print(" parameter mapping and intelligent correction.")