moai-adk 0.15.1__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 (699) 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 +105 -47
  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 +1734 -65
  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 +672 -0
  21. moai_adk/cli/worktree/exceptions.py +89 -0
  22. moai_adk/cli/worktree/manager.py +490 -0
  23. moai_adk/cli/worktree/models.py +65 -0
  24. moai_adk/cli/worktree/registry.py +128 -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 +147 -16
  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 +20 -28
  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 +485 -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 +17 -39
  84. moai_adk/core/project/initializer.py +170 -33
  85. moai_adk/core/project/phase_executor.py +398 -68
  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 +90 -48
  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 +373 -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 +264 -0
  134. moai_adk/statusline/metrics_tracker.py +78 -0
  135. moai_adk/statusline/renderer.py +383 -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 +549 -0
  139. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  140. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  141. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  142. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  143. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  144. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  145. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  146. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  147. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  148. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  149. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  150. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  151. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  152. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  153. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  154. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  155. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  156. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  157. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  158. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  159. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  160. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  161. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  162. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  163. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  164. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  165. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  166. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  167. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  168. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  169. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  170. moai_adk/templates/.claude/hooks/{alfred/shared/core → moai/lib}/checkpoint.py +9 -36
  171. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  172. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  173. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  179. moai_adk/templates/.claude/hooks/{alfred/shared/core → moai/lib}/project.py +63 -44
  180. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  181. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/timeout.py +40 -16
  182. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  183. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  184. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  185. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  186. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  187. moai_adk/templates/.claude/settings.json +78 -50
  188. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  189. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  190. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  191. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  192. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  193. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  194. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +312 -283
  195. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +291 -94
  196. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  197. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  198. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  199. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  200. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +469 -101
  201. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  202. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  203. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  204. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  205. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  206. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  207. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  208. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  209. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  210. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  211. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  212. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  213. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  214. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  215. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  229. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  230. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  231. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  232. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  233. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  253. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  254. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  255. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  256. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  257. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  258. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  259. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  260. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  261. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  262. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  263. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  264. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  265. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  266. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  267. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  268. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  269. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  270. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  271. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  272. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  273. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  274. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  275. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  276. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  277. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  278. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  279. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  280. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  281. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  282. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  283. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  284. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  285. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  286. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  287. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  288. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  289. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  290. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  291. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  323. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  324. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  325. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  326. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  327. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  328. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  329. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  330. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  331. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  332. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  333. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  334. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  335. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  336. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  337. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  338. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  339. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  340. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  341. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  342. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  343. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  344. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  345. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  346. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  347. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  348. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  349. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  350. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  351. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  352. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  353. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  354. moai_adk/templates/.git-hooks/pre-commit +128 -0
  355. moai_adk/templates/.git-hooks/pre-push +220 -13
  356. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  357. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  358. moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
  359. moai_adk/templates/.gitignore +197 -13
  360. moai_adk/templates/.mcp.json +20 -0
  361. moai_adk/templates/.moai/cache/personalization.json +10 -0
  362. moai_adk/templates/.moai/config/config.yaml +344 -0
  363. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  364. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  365. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  366. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  367. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  368. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  369. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  370. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  371. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  372. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  373. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  374. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  375. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  376. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  377. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  378. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  379. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  380. moai_adk/templates/CLAUDE.md +310 -1050
  381. moai_adk/utils/__init__.py +24 -2
  382. moai_adk/utils/banner.py +7 -11
  383. moai_adk/utils/common.py +294 -0
  384. moai_adk/utils/link_validator.py +241 -0
  385. moai_adk/utils/logger.py +4 -9
  386. moai_adk/utils/safe_file_reader.py +206 -0
  387. moai_adk/{templates/.claude/hooks/alfred/utils → utils}/timeout.py +8 -9
  388. moai_adk/utils/toon_utils.py +256 -0
  389. moai_adk/version.py +22 -0
  390. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  391. moai_adk-0.32.8.dist-info/RECORD +396 -0
  392. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  393. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  394. moai_adk/cli/commands/backup.py +0 -80
  395. moai_adk/core/tags/__init__.py +0 -86
  396. moai_adk/core/tags/ci_validator.py +0 -463
  397. moai_adk/core/tags/cli.py +0 -283
  398. moai_adk/core/tags/generator.py +0 -109
  399. moai_adk/core/tags/inserter.py +0 -99
  400. moai_adk/core/tags/mapper.py +0 -126
  401. moai_adk/core/tags/parser.py +0 -76
  402. moai_adk/core/tags/pre_commit_validator.py +0 -393
  403. moai_adk/core/tags/reporter.py +0 -956
  404. moai_adk/core/tags/tags.py +0 -149
  405. moai_adk/core/tags/validator.py +0 -897
  406. moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
  407. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
  408. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
  409. moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
  410. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
  411. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
  412. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
  413. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
  414. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
  415. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
  416. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
  417. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -426
  418. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
  419. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
  420. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
  421. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
  422. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1854
  423. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -880
  424. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -793
  425. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1084
  426. moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
  427. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
  428. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
  429. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
  430. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
  431. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
  432. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
  433. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
  434. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
  435. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
  436. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
  437. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
  438. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
  439. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
  440. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
  441. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
  442. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
  443. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
  444. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
  445. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
  446. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
  447. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
  448. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
  449. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
  450. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
  451. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
  452. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
  453. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
  454. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
  455. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
  456. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
  457. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
  458. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  459. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  460. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  461. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
  462. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
  463. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
  464. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  465. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  466. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  467. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
  468. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
  469. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
  470. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  471. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  472. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  473. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
  474. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
  475. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
  476. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  477. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  478. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  479. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
  480. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
  481. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
  482. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
  483. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
  484. moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
  485. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
  486. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
  487. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
  488. moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
  489. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
  490. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
  491. moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
  492. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
  493. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
  494. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
  495. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
  496. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
  497. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
  498. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
  499. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
  500. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
  501. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
  502. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
  503. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  504. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  505. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  506. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  507. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  508. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  509. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
  510. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
  511. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
  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-alfred-workflow/SKILL.md +0 -288
  516. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  517. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  518. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  519. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  520. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  521. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  522. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  523. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  524. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  525. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  526. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  527. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  528. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  529. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  530. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  531. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  532. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
  533. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
  534. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
  535. moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
  536. moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
  537. moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  538. moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
  539. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  540. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  541. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  542. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  543. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
  544. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  545. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
  546. moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
  547. moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
  548. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
  549. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
  550. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  551. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
  552. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
  553. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
  554. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  555. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  556. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
  557. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
  558. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
  559. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
  560. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
  561. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  562. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  563. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  564. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  565. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  566. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  567. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
  568. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
  569. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  570. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  571. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  572. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
  573. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
  574. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  575. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  576. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  577. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  578. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  579. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  580. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  581. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  582. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  583. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  584. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  585. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  586. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  587. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  588. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  589. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  590. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  591. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  592. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  593. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  594. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  595. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  596. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  597. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  598. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
  599. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  600. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  601. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  602. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  603. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  604. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  605. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  606. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  607. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  608. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  609. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  610. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  611. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  612. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  613. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  614. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  615. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  616. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  617. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  618. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  619. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
  620. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  621. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  622. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
  623. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  624. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  625. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  626. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  627. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  628. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
  629. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
  630. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
  631. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
  632. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
  633. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
  634. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  635. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  636. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  637. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
  638. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
  639. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
  640. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
  641. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  642. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  643. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
  644. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
  645. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
  646. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
  647. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  648. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  649. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
  650. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  651. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  652. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
  653. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
  654. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
  655. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
  656. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
  657. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
  658. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  659. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  660. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  661. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  662. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  663. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  664. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
  665. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
  666. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
  667. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
  668. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
  669. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
  670. moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
  671. moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
  672. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
  673. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
  674. moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
  675. moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
  676. moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
  677. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
  678. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
  679. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -419
  680. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  681. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  682. moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
  683. moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
  684. moai_adk/templates/.github/workflows/release.yml +0 -118
  685. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
  686. moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
  687. moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
  688. moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
  689. moai_adk/templates/.github/workflows/tag-report.yml +0 -269
  690. moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
  691. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
  692. moai_adk/templates/.moai/config.json +0 -115
  693. moai_adk/templates/workflows/go-tag-validation.yml +0 -30
  694. moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
  695. moai_adk/templates/workflows/python-tag-validation.yml +0 -42
  696. moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
  697. moai_adk-0.15.1.dist-info/METADATA +0 -3094
  698. moai_adk-0.15.1.dist-info/RECORD +0 -365
  699. {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,851 @@
1
+ """
2
+ User Behavior Analytics System
3
+
4
+ Analyzes user interactions, patterns, and preferences to provide insights
5
+ for system optimization and user experience improvement.
6
+
7
+ Key Features:
8
+ - User interaction tracking and pattern analysis
9
+ - Command usage frequency and preference analysis
10
+ - Session behavior analysis
11
+ - User preference learning and adaptation
12
+ - Collaboration pattern analysis
13
+ - Productivity metrics and insights
14
+ - User experience optimization recommendations
15
+ """
16
+
17
+ import json
18
+ import logging
19
+ import statistics
20
+ import uuid
21
+ from collections import Counter, defaultdict, deque
22
+ from dataclasses import asdict, dataclass, field
23
+ from datetime import datetime, timedelta
24
+ from enum import Enum
25
+ from pathlib import Path
26
+ from typing import Any, Dict, List, Optional, Set
27
+
28
+ # Set up logging
29
+ logger = logging.getLogger(__name__)
30
+
31
+
32
+ class UserActionType(Enum):
33
+ """Types of user actions tracked"""
34
+
35
+ COMMAND_EXECUTION = "command_execution"
36
+ TOOL_USAGE = "tool_usage"
37
+ FILE_OPERATION = "file_operation"
38
+ ERROR_OCCURRED = "error_occurred"
39
+ HELP_REQUESTED = "help_requested"
40
+ SESSION_START = "session_start"
41
+ SESSION_END = "session_end"
42
+ TASK_COMPLETED = "task_completed"
43
+ PHASE_TRANSITION = "phase_transition"
44
+
45
+
46
+ class SessionState(Enum):
47
+ """User session states"""
48
+
49
+ ACTIVE = "active"
50
+ IDLE = "idle"
51
+ FOCUSED = "focused"
52
+ STRUGGLING = "struggling"
53
+ PRODUCTIVE = "productive"
54
+ BREAK = "break"
55
+
56
+
57
+ @dataclass
58
+ class UserAction:
59
+ """Single user action event"""
60
+
61
+ timestamp: datetime
62
+ action_type: UserActionType
63
+ user_id: str
64
+ session_id: str
65
+ action_data: Dict[str, Any]
66
+ context: Dict[str, Any] = field(default_factory=dict)
67
+ duration_ms: Optional[float] = None
68
+ success: bool = True
69
+ tags: Set[str] = field(default_factory=set)
70
+
71
+ def to_dict(self) -> Dict[str, Any]:
72
+ """Convert to dictionary for serialization"""
73
+ return {
74
+ "timestamp": self.timestamp.isoformat(),
75
+ "action_type": self.action_type.value,
76
+ "user_id": self.user_id,
77
+ "session_id": self.session_id,
78
+ "action_data": self.action_data,
79
+ "context": self.context,
80
+ "duration_ms": self.duration_ms,
81
+ "success": self.success,
82
+ "tags": list(self.tags),
83
+ }
84
+
85
+
86
+ @dataclass
87
+ class UserSession:
88
+ """User session information"""
89
+
90
+ session_id: str
91
+ user_id: str
92
+ start_time: datetime
93
+ end_time: Optional[datetime] = None
94
+ actions: List[UserAction] = field(default_factory=list)
95
+ state: SessionState = SessionState.ACTIVE
96
+ productivity_score: float = 0.0
97
+ total_commands: int = 0
98
+ total_errors: int = 0
99
+ total_duration_ms: float = 0.0
100
+ working_directory: str = ""
101
+ git_branch: str = ""
102
+ modified_files: Set[str] = field(default_factory=set)
103
+ tools_used: Set[str] = field(default_factory=set)
104
+
105
+ def to_dict(self) -> Dict[str, Any]:
106
+ """Convert to dictionary for serialization"""
107
+ return {
108
+ "session_id": self.session_id,
109
+ "user_id": self.user_id,
110
+ "start_time": self.start_time.isoformat(),
111
+ "end_time": self.end_time.isoformat() if self.end_time else None,
112
+ "state": self.state.value,
113
+ "productivity_score": self.productivity_score,
114
+ "total_commands": self.total_commands,
115
+ "total_errors": self.total_errors,
116
+ "total_duration_ms": self.total_duration_ms,
117
+ "working_directory": self.working_directory,
118
+ "git_branch": self.git_branch,
119
+ "modified_files": list(self.modified_files),
120
+ "tools_used": list(self.tools_used),
121
+ }
122
+
123
+
124
+ @dataclass
125
+ class UserPreferences:
126
+ """Learned user preferences and patterns"""
127
+
128
+ user_id: str
129
+ preferred_commands: Dict[str, int] = field(default_factory=dict)
130
+ preferred_tools: Dict[str, int] = field(default_factory=dict)
131
+ working_hours: Dict[str, int] = field(default_factory=dict)
132
+ peak_productivity_times: List[str] = field(default_factory=list)
133
+ common_workflows: List[List[str]] = field(default_factory=list)
134
+ error_patterns: List[str] = field(default_factory=list)
135
+ success_patterns: List[str] = field(default_factory=list)
136
+ collaboration_patterns: Dict[str, int] = field(default_factory=dict)
137
+ last_updated: datetime = field(default_factory=datetime.now)
138
+
139
+
140
+ class UserBehaviorAnalytics:
141
+ """Main user behavior analytics system"""
142
+
143
+ def __init__(self, storage_path: Optional[Path] = None):
144
+ self.storage_path = storage_path or Path.cwd() / ".moai" / "analytics" / "user_behavior"
145
+ self.storage_path.mkdir(parents=True, exist_ok=True)
146
+
147
+ # Data storage
148
+ self.user_sessions: Dict[str, UserSession] = {}
149
+ self.active_sessions: Dict[str, UserSession] = {}
150
+ self.user_preferences: Dict[str, UserPreferences] = {}
151
+ self.action_history: deque = deque(maxlen=10000)
152
+
153
+ # Analysis caches
154
+ self._pattern_cache: Dict[str, Any] = {}
155
+ self._insight_cache: Dict[str, Any] = {}
156
+ self._last_cache_update = datetime.now()
157
+
158
+ # Load existing data
159
+ self._load_data()
160
+
161
+ def track_action(
162
+ self,
163
+ action_type: UserActionType,
164
+ user_id: str,
165
+ session_id: str,
166
+ action_data: Dict[str, Any],
167
+ context: Optional[Dict[str, Any]] = None,
168
+ duration_ms: Optional[float] = None,
169
+ success: bool = True,
170
+ ) -> None:
171
+ """Track a user action"""
172
+ action = UserAction(
173
+ timestamp=datetime.now(),
174
+ action_type=action_type,
175
+ user_id=user_id,
176
+ session_id=session_id,
177
+ action_data=action_data,
178
+ context=context or {},
179
+ duration_ms=duration_ms,
180
+ success=success,
181
+ tags=self._extract_action_tags(action_type, action_data),
182
+ )
183
+
184
+ # Store action
185
+ self.action_history.append(action)
186
+
187
+ # Update session if active
188
+ if session_id in self.active_sessions:
189
+ session = self.active_sessions[session_id]
190
+ session.actions.append(action)
191
+
192
+ # Update session metrics
193
+ if action_type == UserActionType.COMMAND_EXECUTION:
194
+ session.total_commands += 1
195
+ if not success:
196
+ session.total_errors += 1
197
+
198
+ # Track tools used
199
+ if "tool" in action_data:
200
+ session.tools_used.add(action_data["tool"])
201
+
202
+ # Track file modifications
203
+ if "files" in action_data:
204
+ session.modified_files.update(action_data["files"])
205
+
206
+ if duration_ms:
207
+ session.total_duration_ms += duration_ms
208
+
209
+ # Update session state
210
+ session.state = self._analyze_session_state(session)
211
+
212
+ # Update user preferences
213
+ self._update_user_preferences(user_id, action)
214
+
215
+ # Clear caches periodically
216
+ if (datetime.now() - self._last_cache_update).seconds > 300:
217
+ self._pattern_cache.clear()
218
+ self._insight_cache.clear()
219
+ self._last_cache_update = datetime.now()
220
+
221
+ def start_session(self, user_id: str, working_directory: str = "", git_branch: str = "") -> str:
222
+ """Start tracking a new user session"""
223
+ session_id = str(uuid.uuid4())
224
+
225
+ session = UserSession(
226
+ session_id=session_id,
227
+ user_id=user_id,
228
+ start_time=datetime.now(),
229
+ working_directory=working_directory,
230
+ git_branch=git_branch,
231
+ state=SessionState.ACTIVE,
232
+ )
233
+
234
+ self.active_sessions[session_id] = session
235
+ self.user_sessions[session_id] = session
236
+
237
+ # Track session start action
238
+ self.track_action(
239
+ UserActionType.SESSION_START,
240
+ user_id,
241
+ session_id,
242
+ {"working_directory": working_directory, "git_branch": git_branch},
243
+ )
244
+
245
+ return session_id
246
+
247
+ def end_session(self, session_id: str) -> Optional[UserSession]:
248
+ """End a user session"""
249
+ if session_id not in self.active_sessions:
250
+ return None
251
+
252
+ session = self.active_sessions[session_id]
253
+ session.end_time = datetime.now()
254
+
255
+ # Calculate final productivity score
256
+ session.productivity_score = self._calculate_productivity_score(session)
257
+
258
+ # Move from active to completed sessions
259
+ del self.active_sessions[session_id]
260
+
261
+ # Track session end action
262
+ self.track_action(
263
+ UserActionType.SESSION_END,
264
+ session.user_id,
265
+ session_id,
266
+ {
267
+ "duration_ms": session.total_duration_ms,
268
+ "commands": session.total_commands,
269
+ "errors": session.total_errors,
270
+ "productivity_score": session.productivity_score,
271
+ },
272
+ )
273
+
274
+ # Save data periodically
275
+ self._save_data()
276
+
277
+ return session
278
+
279
+ def get_user_patterns(self, user_id: str, days: int = 30) -> Dict[str, Any]:
280
+ """Get user behavior patterns and insights"""
281
+ cache_key = f"patterns_{user_id}_{days}"
282
+
283
+ if cache_key in self._pattern_cache:
284
+ return self._pattern_cache[cache_key]
285
+
286
+ cutoff_date = datetime.now() - timedelta(days=days)
287
+
288
+ # Get user sessions in the time range
289
+ user_sessions = [
290
+ session
291
+ for session in self.user_sessions.values()
292
+ if session.user_id == user_id and session.start_time >= cutoff_date
293
+ ]
294
+
295
+ # Analyze patterns
296
+ patterns = {
297
+ "session_count": len(user_sessions),
298
+ "avg_session_duration": 0.0,
299
+ "avg_productivity_score": 0.0,
300
+ "most_used_commands": {},
301
+ "most_used_tools": {},
302
+ "peak_productivity_hours": [],
303
+ "common_workflows": [],
304
+ "error_patterns": [],
305
+ "working_preferences": {},
306
+ }
307
+
308
+ if user_sessions:
309
+ # Session metrics
310
+ durations = [s.total_duration_ms for s in user_sessions if s.total_duration_ms > 0]
311
+ productivity_scores = [s.productivity_score for s in user_sessions if s.productivity_score > 0]
312
+
313
+ if durations:
314
+ patterns["avg_session_duration"] = statistics.mean(durations)
315
+ if productivity_scores:
316
+ patterns["avg_productivity_score"] = statistics.mean(productivity_scores)
317
+
318
+ # Command usage
319
+ all_commands = []
320
+ all_tools = []
321
+
322
+ for session in user_sessions:
323
+ for action in session.actions:
324
+ if action.action_type == UserActionType.COMMAND_EXECUTION:
325
+ if "command" in action.action_data:
326
+ all_commands.append(action.action_data["command"])
327
+ if "tool" in action.action_data:
328
+ all_tools.append(action.action_data["tool"])
329
+
330
+ patterns["most_used_commands"] = dict(Counter(all_commands).most_common(10))
331
+ patterns["most_used_tools"] = dict(Counter(all_tools).most_common(10))
332
+
333
+ # Peak productivity hours
334
+ hour_productivity = defaultdict(list)
335
+
336
+ for session in user_sessions:
337
+ hour_productivity[session.start_time.hour].append(session.productivity_score)
338
+
339
+ avg_hourly_productivity = {
340
+ hour: statistics.mean(scores) if scores else 0 for hour, scores in hour_productivity.items()
341
+ }
342
+
343
+ # Top 3 most productive hours
344
+ top_hours = sorted(avg_hourly_productivity.items(), key=lambda x: x[1], reverse=True)[:3]
345
+ patterns["peak_productivity_hours"] = [f"{hour:02d}:00" for hour, _ in top_hours]
346
+
347
+ # Cache results
348
+ self._pattern_cache[cache_key] = patterns
349
+
350
+ return patterns
351
+
352
+ def get_user_insights(self, user_id: str, days: int = 7) -> Dict[str, Any]:
353
+ """Get actionable insights and recommendations for a user"""
354
+ cache_key = f"insights_{user_id}_{days}"
355
+
356
+ if cache_key in self._insight_cache:
357
+ return self._insight_cache[cache_key]
358
+
359
+ patterns = self.get_user_patterns(user_id, days)
360
+
361
+ insights: Dict[str, Any] = {
362
+ "productivity_insights": [],
363
+ "efficiency_recommendations": [],
364
+ "collaboration_insights": [],
365
+ "learning_opportunities": [],
366
+ "tool_recommendations": [],
367
+ "workflow_optimizations": [],
368
+ }
369
+
370
+ # Productivity insights
371
+ if patterns["avg_productivity_score"] > 80:
372
+ insights["productivity_insights"].append(
373
+ "Excellent productivity score! User consistently performs at high level."
374
+ )
375
+ elif patterns["avg_productivity_score"] < 50:
376
+ insights["productivity_insights"].append(
377
+ "Productivity score could be improved. Consider workflow optimization."
378
+ )
379
+
380
+ # Session duration insights
381
+ if patterns["avg_session_duration"] > 1800000: # > 30 minutes
382
+ insights["productivity_insights"].append(
383
+ "Long session durations detected. Consider taking regular breaks for sustained productivity."
384
+ )
385
+
386
+ # Error pattern analysis
387
+ recent_actions = [
388
+ action
389
+ for action in self.action_history
390
+ if action.user_id == user_id and action.timestamp >= datetime.now() - timedelta(days=days)
391
+ ]
392
+
393
+ error_actions = [
394
+ action
395
+ for action in recent_actions
396
+ if action.action_type == UserActionType.ERROR_OCCURRED or not action.success
397
+ ]
398
+
399
+ if len(error_actions) > len(recent_actions) * 0.1: # > 10% error rate
400
+ insights["efficiency_recommendations"].append(
401
+ "High error rate detected. Consider additional training or tool familiarization."
402
+ )
403
+
404
+ # Tool usage insights
405
+ if patterns["most_used_tools"]:
406
+ top_tool = max(patterns["most_used_tools"].items(), key=lambda x: x[1])
407
+ insights["tool_recommendations"].append(f"Most frequently used tool: {top_tool[0]} ({top_tool[1]} uses)")
408
+
409
+ # Command pattern insights
410
+ if patterns["most_used_commands"]:
411
+ commands = list(patterns["most_used_commands"].keys())
412
+ if "/moai:" in " ".join(commands[:3]): # Top 3 commands
413
+ insights["workflow_optimizations"].append(
414
+ "Heavy MoAI command usage detected. Consider learning keyboard shortcuts for faster workflow."
415
+ )
416
+
417
+ # Peak productivity insights
418
+ if patterns["peak_productivity_hours"]:
419
+ peak_hours = ", ".join(patterns["peak_productivity_hours"])
420
+ insights["efficiency_recommendations"].append(
421
+ f"Peak productivity hours: {peak_hours}. Schedule important work during these times."
422
+ )
423
+
424
+ # Learning opportunities
425
+ if patterns["session_count"] < 5:
426
+ insights["learning_opportunities"].append(
427
+ "Consider more frequent sessions to build momentum and consistency."
428
+ )
429
+
430
+ # Cache results
431
+ self._insight_cache[cache_key] = insights
432
+
433
+ return insights
434
+
435
+ def get_team_analytics(self, days: int = 30) -> Dict[str, Any]:
436
+ """Get team-wide analytics and collaboration patterns"""
437
+ cutoff_date = datetime.now() - timedelta(days=days)
438
+
439
+ # Get all sessions in time range
440
+ recent_sessions = [session for session in self.user_sessions.values() if session.start_time >= cutoff_date]
441
+
442
+ # Aggregate metrics
443
+ team_metrics = {
444
+ "total_sessions": len(recent_sessions),
445
+ "unique_users": len(set(s.user_id for s in recent_sessions)),
446
+ "avg_session_duration": 0.0,
447
+ "avg_productivity_score": 0.0,
448
+ "most_active_users": {},
449
+ "most_used_tools": {},
450
+ "collaboration_patterns": {},
451
+ "productivity_distribution": {},
452
+ "peak_hours": {},
453
+ }
454
+
455
+ if recent_sessions:
456
+ # Calculate averages
457
+ durations = [s.total_duration_ms for s in recent_sessions if s.total_duration_ms > 0]
458
+ scores = [s.productivity_score for s in recent_sessions if s.productivity_score > 0]
459
+
460
+ if durations:
461
+ team_metrics["avg_session_duration"] = statistics.mean(durations)
462
+ if scores:
463
+ team_metrics["avg_productivity_score"] = statistics.mean(scores)
464
+
465
+ # Most active users
466
+ user_session_counts = Counter(s.user_id for s in recent_sessions)
467
+ team_metrics["most_active_users"] = dict(user_session_counts.most_common(10))
468
+
469
+ # Most used tools across team
470
+ all_tools: List[str] = []
471
+ for session in recent_sessions:
472
+ all_tools.extend(session.tools_used)
473
+
474
+ team_metrics["most_used_tools"] = dict(Counter(all_tools).most_common(10))
475
+
476
+ # Productivity distribution
477
+ productivity_ranges = {
478
+ "0-20": 0,
479
+ "21-40": 0,
480
+ "41-60": 0,
481
+ "61-80": 0,
482
+ "81-100": 0,
483
+ }
484
+
485
+ for score in scores:
486
+ if score <= 20:
487
+ productivity_ranges["0-20"] += 1
488
+ elif score <= 40:
489
+ productivity_ranges["21-40"] += 1
490
+ elif score <= 60:
491
+ productivity_ranges["41-60"] += 1
492
+ elif score <= 80:
493
+ productivity_ranges["61-80"] += 1
494
+ else:
495
+ productivity_ranges["81-100"] += 1
496
+
497
+ team_metrics["productivity_distribution"] = productivity_ranges
498
+
499
+ return team_metrics
500
+
501
+ def _extract_action_tags(self, action_type: UserActionType, action_data: Dict[str, Any]) -> Set[str]:
502
+ """Extract relevant tags from action data"""
503
+ tags = {action_type.value}
504
+
505
+ # Extract tool tags
506
+ if "tool" in action_data:
507
+ tags.add(f"tool:{action_data['tool']}")
508
+
509
+ # Extract command tags
510
+ if "command" in action_data:
511
+ command = action_data["command"]
512
+ if "/moai:" in command:
513
+ tags.add("moai_command")
514
+ if "git" in command.lower():
515
+ tags.add("git_operation")
516
+
517
+ # Extract phase tags
518
+ if "phase" in action_data:
519
+ tags.add(f"phase:{action_data['phase']}")
520
+
521
+ # Extract success/failure tags
522
+ if "success" in action_data:
523
+ tags.add("success" if action_data["success"] else "failure")
524
+
525
+ return tags
526
+
527
+ def _update_user_preferences(self, user_id: str, action: UserAction) -> None:
528
+ """Update learned user preferences based on actions"""
529
+ if user_id not in self.user_preferences:
530
+ self.user_preferences[user_id] = UserPreferences(user_id=user_id)
531
+
532
+ prefs = self.user_preferences[user_id]
533
+
534
+ # Update command preferences
535
+ if action.action_type == UserActionType.COMMAND_EXECUTION:
536
+ command = action.action_data.get("command", "")
537
+ if command:
538
+ prefs.preferred_commands[command] = prefs.preferred_commands.get(command, 0) + 1
539
+
540
+ # Update tool preferences
541
+ if "tool" in action.action_data:
542
+ tool = action.action_data["tool"]
543
+ prefs.preferred_tools[tool] = prefs.preferred_tools.get(tool, 0) + 1
544
+
545
+ # Update working hours
546
+ hour = action.timestamp.hour
547
+ prefs.working_hours[str(hour)] = prefs.working_hours.get(str(hour), 0) + 1
548
+
549
+ # Update patterns based on success/failure
550
+ if action.success:
551
+ pattern_key = f"{action.action_type.value}_{action.action_data}"
552
+ if pattern_key not in prefs.success_patterns:
553
+ prefs.success_patterns.append(pattern_key)
554
+ else:
555
+ pattern_key = f"{action.action_type.value}_{action.action_data}"
556
+ if pattern_key not in prefs.error_patterns:
557
+ prefs.error_patterns.append(pattern_key)
558
+
559
+ prefs.last_updated = datetime.now()
560
+
561
+ def _analyze_session_state(self, session: UserSession) -> SessionState:
562
+ """Analyze and determine current session state"""
563
+ if not session.actions:
564
+ return SessionState.ACTIVE
565
+
566
+ recent_actions = [
567
+ action
568
+ for action in session.actions[-10:] # Last 10 actions
569
+ if (datetime.now() - action.timestamp).seconds < 300 # Last 5 minutes
570
+ ]
571
+
572
+ if not recent_actions:
573
+ return SessionState.IDLE
574
+
575
+ # Calculate metrics
576
+ error_rate = sum(1 for action in recent_actions if not action.success) / len(recent_actions)
577
+
578
+ durations_with_ms = [a.duration_ms for a in recent_actions if a.duration_ms is not None]
579
+ avg_duration = statistics.mean(durations_with_ms) if durations_with_ms else 0
580
+
581
+ # Determine state
582
+ if error_rate > 0.5:
583
+ return SessionState.STRUGGLING
584
+ elif avg_duration > 10000 and error_rate < 0.1:
585
+ return SessionState.PRODUCTIVE
586
+ elif error_rate < 0.1 and len(recent_actions) > 5:
587
+ return SessionState.FOCUSED
588
+ else:
589
+ return SessionState.ACTIVE
590
+
591
+ def _calculate_productivity_score(self, session: UserSession) -> float:
592
+ """Calculate productivity score for a session (0-100)"""
593
+ if not session.actions:
594
+ return 0.0
595
+
596
+ # Base score from success rate
597
+ successful_actions = sum(1 for action in session.actions if action.success)
598
+ success_rate = successful_actions / len(session.actions)
599
+ base_score = success_rate * 50
600
+
601
+ # Duration factor (optimal session duration)
602
+ duration_hours = session.total_duration_ms / (1000 * 60 * 60)
603
+ duration_factor = 0
604
+
605
+ if 0.5 <= duration_hours <= 4: # Optimal 30 min to 4 hours
606
+ duration_factor = 25
607
+ elif duration_hours > 0.25: # At least 15 minutes
608
+ duration_factor = 15
609
+
610
+ # Tool diversity factor
611
+ tool_diversity = min(len(session.tools_used) / 10, 1) * 15
612
+
613
+ # File modifications factor (if it's a coding session)
614
+ file_factor: float = 0.0
615
+ if session.modified_files:
616
+ file_factor = min(len(session.modified_files) / 5, 1) * 10
617
+
618
+ total_score = base_score + duration_factor + tool_diversity + file_factor
619
+ return min(total_score, 100.0)
620
+
621
+ def _load_data(self) -> None:
622
+ """Load stored analytics data"""
623
+ try:
624
+ # Load user preferences
625
+ prefs_file = self.storage_path / "user_preferences.json"
626
+ if prefs_file.exists():
627
+ with open(prefs_file, "r") as f:
628
+ prefs_data = json.load(f)
629
+
630
+ for user_id, prefs_dict in prefs_data.items():
631
+ prefs = UserPreferences(user_id=user_id)
632
+ prefs.preferred_commands = prefs_dict.get("preferred_commands", {})
633
+ prefs.preferred_tools = prefs_dict.get("preferred_tools", {})
634
+ prefs.working_hours = prefs_dict.get("working_hours", {})
635
+ prefs.peak_productivity_times = prefs_dict.get("peak_productivity_times", [])
636
+ prefs.common_workflows = prefs_dict.get("common_workflows", [])
637
+ prefs.error_patterns = prefs_dict.get("error_patterns", [])
638
+ prefs.success_patterns = prefs_dict.get("success_patterns", [])
639
+ prefs.collaboration_patterns = prefs_dict.get("collaboration_patterns", {})
640
+
641
+ if prefs_dict.get("last_updated"):
642
+ prefs.last_updated = datetime.fromisoformat(prefs_dict["last_updated"])
643
+
644
+ self.user_preferences[user_id] = prefs
645
+
646
+ logger.info(f"Loaded preferences for {len(self.user_preferences)} users")
647
+
648
+ except Exception as e:
649
+ logger.error(f"Error loading analytics data: {e}")
650
+
651
+ def _save_data(self) -> None:
652
+ """Save analytics data to storage"""
653
+ try:
654
+ # Save user preferences
655
+ prefs_data = {}
656
+ for user_id, prefs in self.user_preferences.items():
657
+ prefs_data[user_id] = {
658
+ "preferred_commands": prefs.preferred_commands,
659
+ "preferred_tools": prefs.preferred_tools,
660
+ "working_hours": prefs.working_hours,
661
+ "peak_productivity_times": prefs.peak_productivity_times,
662
+ "common_workflows": prefs.common_workflows,
663
+ "error_patterns": prefs.error_patterns,
664
+ "success_patterns": prefs.success_patterns,
665
+ "collaboration_patterns": prefs.collaboration_patterns,
666
+ "last_updated": prefs.last_updated.isoformat(),
667
+ }
668
+
669
+ prefs_file = self.storage_path / "user_preferences.json"
670
+ with open(prefs_file, "w") as f:
671
+ json.dump(prefs_data, f, indent=2)
672
+
673
+ logger.info(f"Saved preferences for {len(self.user_preferences)} users")
674
+
675
+ except Exception as e:
676
+ logger.error(f"Error saving analytics data: {e}")
677
+
678
+ def export_data(self, output_path: Path, user_id: Optional[str] = None) -> bool:
679
+ """Export analytics data to file"""
680
+ try:
681
+ export_data = {
682
+ "export_timestamp": datetime.now().isoformat(),
683
+ "user_id": user_id or "all_users",
684
+ "data": {},
685
+ }
686
+
687
+ if user_id:
688
+ # Export single user data
689
+ patterns = self.get_user_patterns(user_id)
690
+ insights = self.get_user_insights(user_id)
691
+ prefs = self.user_preferences.get(user_id)
692
+
693
+ export_data["data"] = {
694
+ "patterns": patterns,
695
+ "insights": insights,
696
+ "preferences": asdict(prefs) if prefs else None,
697
+ }
698
+ else:
699
+ # Export team data
700
+ export_data["data"] = {
701
+ "team_analytics": self.get_team_analytics(),
702
+ "user_count": len(self.user_preferences),
703
+ "session_count": len(self.user_sessions),
704
+ }
705
+
706
+ with open(output_path, "w") as f:
707
+ json.dump(export_data, f, indent=2)
708
+
709
+ return True
710
+
711
+ except Exception as e:
712
+ logger.error(f"Error exporting data: {e}")
713
+ return False
714
+
715
+ def get_realtime_metrics(self, user_id: Optional[str] = None) -> Dict[str, Any]:
716
+ """Get real-time analytics metrics"""
717
+ current_time = datetime.now()
718
+
719
+ metrics: Dict[str, Any] = {
720
+ "timestamp": current_time.isoformat(),
721
+ "active_sessions": len(self.active_sessions),
722
+ "total_sessions_today": 0,
723
+ "avg_session_duration": 0.0,
724
+ "current_productivity_scores": [],
725
+ }
726
+
727
+ today_start = current_time.replace(hour=0, minute=0, second=0, microsecond=0)
728
+
729
+ # Filter sessions and calculate metrics
730
+ today_sessions = [session for session in self.user_sessions.values() if session.start_time >= today_start]
731
+
732
+ metrics["total_sessions_today"] = len(today_sessions)
733
+
734
+ if today_sessions:
735
+ durations = [s.total_duration_ms for s in today_sessions if s.total_duration_ms > 0]
736
+ if durations:
737
+ metrics["avg_session_duration"] = statistics.mean(durations)
738
+
739
+ # Current productivity scores
740
+ productivity_scores: List[Dict[str, Any]] = []
741
+ for session in self.active_sessions.values():
742
+ if user_id is None or session.user_id == user_id:
743
+ current_score = self._calculate_productivity_score(session)
744
+ productivity_scores.append(
745
+ {
746
+ "user_id": session.user_id,
747
+ "session_id": session.session_id,
748
+ "score": current_score,
749
+ "state": session.state.value,
750
+ }
751
+ )
752
+ metrics["current_productivity_scores"] = productivity_scores
753
+
754
+ return metrics
755
+
756
+
757
+ # Global instance for easy access
758
+ _user_analytics: Optional[UserBehaviorAnalytics] = None
759
+
760
+
761
+ def get_user_analytics() -> UserBehaviorAnalytics:
762
+ """Get or create global user behavior analytics instance"""
763
+ global _user_analytics
764
+ if _user_analytics is None:
765
+ _user_analytics = UserBehaviorAnalytics()
766
+ return _user_analytics
767
+
768
+
769
+ # Convenience functions
770
+ def track_user_action(
771
+ action_type: UserActionType,
772
+ user_id: str,
773
+ session_id: str,
774
+ action_data: Dict[str, Any],
775
+ context: Optional[Dict[str, Any]] = None,
776
+ duration_ms: Optional[float] = None,
777
+ success: bool = True,
778
+ ) -> None:
779
+ """Track a user action"""
780
+ analytics = get_user_analytics()
781
+ analytics.track_action(action_type, user_id, session_id, action_data, context, duration_ms, success)
782
+
783
+
784
+ def start_user_session(user_id: str, working_directory: str = "", git_branch: str = "") -> str:
785
+ """Start tracking a user session"""
786
+ analytics = get_user_analytics()
787
+ return analytics.start_session(user_id, working_directory, git_branch)
788
+
789
+
790
+ def end_user_session(session_id: str) -> Optional[UserSession]:
791
+ """End a user session"""
792
+ analytics = get_user_analytics()
793
+ return analytics.end_session(session_id)
794
+
795
+
796
+ def get_user_patterns(user_id: str, days: int = 30) -> Dict[str, Any]:
797
+ """Get user behavior patterns"""
798
+ analytics = get_user_analytics()
799
+ return analytics.get_user_patterns(user_id, days)
800
+
801
+
802
+ def get_user_insights(user_id: str, days: int = 7) -> Dict[str, Any]:
803
+ """Get user insights and recommendations"""
804
+ analytics = get_user_analytics()
805
+ return analytics.get_user_insights(user_id, days)
806
+
807
+
808
+ if __name__ == "__main__":
809
+ # Example usage
810
+ print("Testing User Behavior Analytics...")
811
+
812
+ analytics = UserBehaviorAnalytics()
813
+
814
+ # Simulate user session
815
+ user_id = "test_user"
816
+ session_id = analytics.start_session(user_id, "/Users/goos/MoAI/MoAI-ADK", "main")
817
+
818
+ # Track some actions
819
+ analytics.track_action(
820
+ UserActionType.COMMAND_EXECUTION,
821
+ user_id,
822
+ session_id,
823
+ {"command": "/moai:1-plan test feature", "tool": "spec_builder"},
824
+ duration_ms=1500,
825
+ success=True,
826
+ )
827
+
828
+ analytics.track_action(
829
+ UserActionType.TOOL_USAGE,
830
+ user_id,
831
+ session_id,
832
+ {"tool": "git", "operation": "commit"},
833
+ duration_ms=800,
834
+ success=True,
835
+ )
836
+
837
+ # End session
838
+ ended_session = analytics.end_session(session_id)
839
+
840
+ if ended_session:
841
+ print("Session completed:")
842
+ print(f" Duration: {ended_session.total_duration_ms / 1000:.1f} seconds")
843
+ print(f" Commands: {ended_session.total_commands}")
844
+ print(f" Productivity Score: {ended_session.productivity_score}")
845
+ print(f" Tools Used: {list(ended_session.tools_used)}")
846
+
847
+ # Get patterns
848
+ patterns = analytics.get_user_patterns(user_id, days=1)
849
+ print(f"User patterns: {patterns}")
850
+
851
+ print("User Behavior Analytics test completed!")