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,1005 @@
1
+ """
2
+ MoAI Menu Project - Template Optimizer Module
3
+
4
+ Advanced template analysis, optimization, and performance management system.
5
+ Integrates patterns from moai-project-template-optimizer skill with
6
+ intelligent analysis and automated optimization capabilities.
7
+ """
8
+
9
+ import json
10
+ import re
11
+ import shutil
12
+ from datetime import datetime
13
+ from pathlib import Path
14
+ from typing import Any, Dict, List, Tuple
15
+
16
+
17
+ class TemplateOptimizer:
18
+ """Advanced template optimization and performance analysis system."""
19
+
20
+ def __init__(self, project_root: str, config: Dict[str, Any]):
21
+ self.project_root = Path(project_root)
22
+ self.config = config
23
+ self.templates_dir = self.project_root / ".claude/skills/moai-menu-project/templates"
24
+ self.backups_dir = self.project_root / ".moai-backups"
25
+ self.optimization_cache = {}
26
+ self._ensure_directories()
27
+
28
+ def _ensure_directories(self):
29
+ """Ensure all necessary directories exist."""
30
+ self.templates_dir.mkdir(parents=True, exist_ok=True)
31
+ self.backups_dir.mkdir(parents=True, exist_ok=True)
32
+ (self.templates_dir / "optimized").mkdir(exist_ok=True)
33
+ (self.templates_dir / "benchmarks").mkdir(exist_ok=True)
34
+
35
+ def analyze_project_templates(self) -> Dict[str, Any]:
36
+ """
37
+ Perform comprehensive analysis of project templates.
38
+
39
+ Returns:
40
+ Analysis results with performance metrics and optimization recommendations
41
+ """
42
+
43
+ analysis_result = {
44
+ "timestamp": datetime.now().isoformat(),
45
+ "project_root": str(self.project_root),
46
+ "template_files": [],
47
+ "performance_metrics": {},
48
+ "optimization_opportunities": [],
49
+ "backup_recommendations": [],
50
+ "complexity_analysis": {},
51
+ "resource_usage": {},
52
+ }
53
+
54
+ # Discover template files
55
+ template_files = self._discover_template_files()
56
+ analysis_result["template_files"] = template_files
57
+
58
+ # Analyze each template file
59
+ for template_file in template_files:
60
+ file_analysis = self._analyze_template_file(template_file)
61
+ analysis_result["performance_metrics"][template_file["path"]] = file_analysis
62
+
63
+ # Identify optimization opportunities
64
+ analysis_result["optimization_opportunities"] = self._identify_optimization_opportunities(
65
+ analysis_result["performance_metrics"]
66
+ )
67
+
68
+ # Analyze overall project complexity
69
+ analysis_result["complexity_analysis"] = self._analyze_project_complexity(template_files)
70
+
71
+ # Calculate resource usage patterns
72
+ analysis_result["resource_usage"] = self._calculate_resource_usage(template_files)
73
+
74
+ # Generate backup recommendations
75
+ analysis_result["backup_recommendations"] = self._generate_backup_recommendations(analysis_result)
76
+
77
+ return analysis_result
78
+
79
+ def _discover_template_files(self) -> List[Dict[str, Any]]:
80
+ """Discover all template files in the project."""
81
+
82
+ template_files = []
83
+
84
+ # Common template file patterns
85
+ template_patterns = [
86
+ "**/*.template",
87
+ "**/*.tmpl",
88
+ "**/*.mustache",
89
+ "**/*.hbs",
90
+ "**/*.handlebars",
91
+ "**/*.jinja",
92
+ "**/*.jinja2",
93
+ "**/*.erb",
94
+ "**/*.liquid",
95
+ ]
96
+
97
+ # Search for template files
98
+ for pattern in template_patterns:
99
+ for file_path in self.project_root.glob(pattern):
100
+ if file_path.is_file():
101
+ relative_path = file_path.relative_to(self.project_root)
102
+
103
+ # Calculate file metrics
104
+ file_stats = file_path.stat()
105
+
106
+ template_files.append(
107
+ {
108
+ "path": str(relative_path),
109
+ "absolute_path": str(file_path),
110
+ "size_bytes": file_stats.st_size,
111
+ "modified_time": datetime.fromtimestamp(file_stats.st_mtime).isoformat(),
112
+ "type": self._determine_template_type(file_path),
113
+ "language": self._determine_template_language(file_path),
114
+ }
115
+ )
116
+
117
+ # Also check common template directories
118
+ template_dirs = [
119
+ "templates",
120
+ "template",
121
+ "views",
122
+ "layouts",
123
+ "_layouts",
124
+ "_includes",
125
+ "_templates",
126
+ ]
127
+
128
+ for template_dir in template_dirs:
129
+ dir_path = self.project_root / template_dir
130
+ if dir_path.exists() and dir_path.is_dir():
131
+ for file_path in dir_path.rglob("*"):
132
+ if file_path.is_file() and file_path.suffix in [
133
+ ".md",
134
+ ".html",
135
+ ".txt",
136
+ ".yml",
137
+ ".yaml",
138
+ ".json",
139
+ ]:
140
+ # Check if file contains template markers
141
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
142
+ if self._contains_template_markers(content):
143
+ relative_path = file_path.relative_to(self.project_root)
144
+ file_stats = file_path.stat()
145
+
146
+ template_files.append(
147
+ {
148
+ "path": str(relative_path),
149
+ "absolute_path": str(file_path),
150
+ "size_bytes": file_stats.st_size,
151
+ "modified_time": datetime.fromtimestamp(file_stats.st_mtime).isoformat(),
152
+ "type": "content_template",
153
+ "language": "text",
154
+ }
155
+ )
156
+
157
+ return sorted(template_files, key=lambda x: x["path"])
158
+
159
+ def _determine_template_type(self, file_path: Path) -> str:
160
+ """Determine template type based on file extension and content."""
161
+
162
+ extension_map = {
163
+ ".mustache": "mustache",
164
+ ".hbs": "handlebars",
165
+ ".handlebars": "handlebars",
166
+ ".jinja": "jinja",
167
+ ".jinja2": "jinja2",
168
+ ".erb": "erb",
169
+ ".liquid": "liquid",
170
+ }
171
+
172
+ return extension_map.get(file_path.suffix.lower(), "unknown")
173
+
174
+ def _determine_template_language(self, file_path: Path) -> str:
175
+ """Determine the primary language used in template."""
176
+
177
+ try:
178
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
179
+
180
+ # Look for language-specific markers
181
+ if any(marker in content for marker in ["{{", "{%", "{#"]):
182
+ return "jinja"
183
+ elif any(marker in content for marker in ["{{", "{{#", "{{/"]):
184
+ return "handlebars"
185
+ elif any(marker in content for marker in ["<%", "<%=", "<%-"]):
186
+ return "erb"
187
+ elif any(marker in content for marker in ["{{ ", "{% ", "{{-"]):
188
+ return "liquid"
189
+ else:
190
+ return "text"
191
+
192
+ except (UnicodeDecodeError, OSError):
193
+ return "binary"
194
+
195
+ def _contains_template_markers(self, content: str) -> bool:
196
+ """Check if content contains template markers."""
197
+
198
+ template_markers = [
199
+ "{{",
200
+ "}}", # Generic template markers
201
+ "{%",
202
+ "%}", # Jinja-like
203
+ "{{#",
204
+ "{{/", # Handlebars-like
205
+ "<%",
206
+ "%>", # ERB-like
207
+ "{{-",
208
+ "-}}", # Liquid-like
209
+ "{#",
210
+ "#}", # Comment markers
211
+ "[[",
212
+ "]]", # Angular-like
213
+ "${",
214
+ "}", # Variable interpolation
215
+ ]
216
+
217
+ return any(marker in content for marker in template_markers)
218
+
219
+ def _analyze_template_file(self, template_file: Dict[str, Any]) -> Dict[str, Any]:
220
+ """Analyze individual template file for performance and complexity."""
221
+
222
+ file_path = Path(template_file["absolute_path"])
223
+
224
+ analysis = {
225
+ "file_path": template_file["path"],
226
+ "size_metrics": self._analyze_file_size(file_path),
227
+ "complexity_metrics": self._analyze_template_complexity(file_path),
228
+ "performance_metrics": self._estimate_template_performance(file_path),
229
+ "optimization_potential": 0,
230
+ "recommendations": [],
231
+ }
232
+
233
+ # Calculate overall optimization potential
234
+ analysis["optimization_potential"] = self._calculate_optimization_potential(analysis)
235
+
236
+ # Generate specific recommendations
237
+ analysis["recommendations"] = self._generate_file_recommendations(analysis)
238
+
239
+ return analysis
240
+
241
+ def _analyze_file_size(self, file_path: Path) -> Dict[str, Any]:
242
+ """Analyze file size and content metrics."""
243
+
244
+ try:
245
+ content = file_path.read_text(encoding="utf-8")
246
+
247
+ lines = content.splitlines()
248
+
249
+ return {
250
+ "total_size_bytes": len(content.encode("utf-8")),
251
+ "character_count": len(content),
252
+ "line_count": len(lines),
253
+ "blank_lines": sum(1 for line in lines if not line.strip()),
254
+ "average_line_length": (sum(len(line) for line in lines) / len(lines) if lines else 0),
255
+ "max_line_length": max(len(line) for line in lines) if lines else 0,
256
+ }
257
+
258
+ except (UnicodeDecodeError, OSError):
259
+ return {
260
+ "total_size_bytes": file_path.stat().st_size,
261
+ "character_count": 0,
262
+ "line_count": 0,
263
+ "blank_lines": 0,
264
+ "average_line_length": 0,
265
+ "max_line_length": 0,
266
+ }
267
+
268
+ def _analyze_template_complexity(self, file_path: Path) -> Dict[str, Any]:
269
+ """Analyze template complexity metrics."""
270
+
271
+ try:
272
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
273
+
274
+ complexity = {
275
+ "variable_count": 0,
276
+ "loop_count": 0,
277
+ "conditional_count": 0,
278
+ "include_count": 0,
279
+ "nested_level_max": 0,
280
+ "template_depth": 0,
281
+ }
282
+
283
+ # Count different template constructs
284
+ complexity["variable_count"] = len(re.findall(r"\{\{[^}]+\}\}", content))
285
+ complexity["loop_count"] = len(re.findall(r"\{%\s*for\s+.+\s+in\s+.+%\}", content))
286
+ complexity["conditional_count"] = len(re.findall(r"\{%\s*if\s+.+%\}", content))
287
+ complexity["include_count"] = len(re.findall(r"\{%\s*(include|extend|import)\s+.+%\}", content))
288
+
289
+ # Calculate nesting level
290
+ current_level = 0
291
+ max_level = 0
292
+
293
+ for char in content:
294
+ if char == "{":
295
+ if content[content.index(char) : content.index(char) + 2] in [
296
+ "{{",
297
+ "{%",
298
+ ]:
299
+ current_level += 1
300
+ max_level = max(max_level, current_level)
301
+ elif char == "}":
302
+ if current_level > 0:
303
+ current_level -= 1
304
+
305
+ complexity["nested_level_max"] = max_level
306
+ complexity["template_depth"] = self._calculate_template_depth(content)
307
+
308
+ except (UnicodeDecodeError, OSError):
309
+ complexity = {
310
+ "variable_count": 0,
311
+ "loop_count": 0,
312
+ "conditional_count": 0,
313
+ "include_count": 0,
314
+ "nested_level_max": 0,
315
+ "template_depth": 0,
316
+ }
317
+
318
+ return complexity
319
+
320
+ def _calculate_template_depth(self, content: str) -> int:
321
+ """Calculate template inheritance depth."""
322
+
323
+ # Look for extends, include, import statements
324
+ depth_patterns = [
325
+ r'\{%\s*extends\s+["\']([^"\']+)["\']\s*%\}',
326
+ r'\{%\s*include\s+["\']([^"\']+)["\']\s*%\}',
327
+ r'\{%\s*import\s+["\']([^"\']+)["\']\s*%\}',
328
+ ]
329
+
330
+ depth = 0
331
+ for pattern in depth_patterns:
332
+ matches = re.findall(pattern, content)
333
+ depth += len(matches)
334
+
335
+ return min(depth, 10) # Cap at reasonable maximum
336
+
337
+ def _estimate_template_performance(self, file_path: Path) -> Dict[str, Any]:
338
+ """Estimate template rendering performance."""
339
+
340
+ size_analysis = self._analyze_file_size(file_path)
341
+ complexity_analysis = self._analyze_template_complexity(file_path)
342
+
343
+ performance = {
344
+ "estimated_render_time_ms": 0,
345
+ "memory_usage_estimate_kb": 0,
346
+ "cpu_intensity": "low",
347
+ "cache_friendly": True,
348
+ "render_complexity_score": 0,
349
+ }
350
+
351
+ # Basic performance estimation based on size and complexity
352
+ base_time = 1.0 # Base render time in ms
353
+
354
+ # Add time for complexity
355
+ complexity_time = (
356
+ complexity_analysis["variable_count"] * 0.1
357
+ + complexity_analysis["loop_count"] * 2.0
358
+ + complexity_analysis["conditional_count"] * 0.5
359
+ + complexity_analysis["include_count"] * 1.0
360
+ )
361
+
362
+ # Add time for file size
363
+ size_time = size_analysis["total_size_bytes"] / 10000 # 10KB per ms
364
+
365
+ performance["estimated_render_time_ms"] = base_time + complexity_time + size_time
366
+
367
+ # Estimate memory usage
368
+ performance["memory_usage_estimate_kb"] = size_analysis["total_size_bytes"] / 1024
369
+
370
+ # Determine CPU intensity
371
+ if performance["estimated_render_time_ms"] > 100:
372
+ performance["cpu_intensity"] = "high"
373
+ elif performance["estimated_render_time_ms"] > 50:
374
+ performance["cpu_intensity"] = "medium"
375
+ else:
376
+ performance["cpu_intensity"] = "low"
377
+
378
+ # Check cache friendliness
379
+ performance["cache_friendly"] = (
380
+ complexity_analysis["variable_count"] < 50
381
+ and complexity_analysis["loop_count"] < 10
382
+ and performance["estimated_render_time_ms"] < 100
383
+ )
384
+
385
+ # Calculate render complexity score
386
+ performance["render_complexity_score"] = (
387
+ complexity_analysis["variable_count"] * 1
388
+ + complexity_analysis["loop_count"] * 3
389
+ + complexity_analysis["conditional_count"] * 2
390
+ + complexity_analysis["nested_level_max"] * 4
391
+ )
392
+
393
+ return performance
394
+
395
+ def _calculate_optimization_potential(self, file_analysis: Dict[str, Any]) -> float:
396
+ """Calculate optimization potential score (0-100)."""
397
+
398
+ potential = 0.0
399
+
400
+ # Size-based potential
401
+ size_metrics = file_analysis["size_metrics"]
402
+ if size_metrics["total_size_bytes"] > 50000: # 50KB
403
+ potential += 20
404
+ elif size_metrics["total_size_bytes"] > 20000: # 20KB
405
+ potential += 10
406
+
407
+ # Complexity-based potential
408
+ complexity_metrics = file_analysis["complexity_metrics"]
409
+ if complexity_metrics["nested_level_max"] > 5:
410
+ potential += 15
411
+ elif complexity_metrics["nested_level_max"] > 3:
412
+ potential += 8
413
+
414
+ if complexity_metrics["variable_count"] > 100:
415
+ potential += 10
416
+ elif complexity_metrics["variable_count"] > 50:
417
+ potential += 5
418
+
419
+ # Performance-based potential
420
+ performance_metrics = file_analysis["performance_metrics"]
421
+ if performance_metrics["estimated_render_time_ms"] > 100:
422
+ potential += 20
423
+ elif performance_metrics["estimated_render_time_ms"] > 50:
424
+ potential += 10
425
+
426
+ if not performance_metrics["cache_friendly"]:
427
+ potential += 15
428
+
429
+ return min(potential, 100) # Cap at 100
430
+
431
+ def _generate_file_recommendations(self, file_analysis: Dict[str, Any]) -> List[str]:
432
+ """Generate optimization recommendations for a file."""
433
+
434
+ recommendations = []
435
+
436
+ size_metrics = file_analysis["size_metrics"]
437
+ complexity_metrics = file_analysis["complexity_metrics"]
438
+ performance_metrics = file_analysis["performance_metrics"]
439
+
440
+ # Size recommendations
441
+ if size_metrics["total_size_bytes"] > 50000:
442
+ recommendations.append("Consider splitting large template into smaller components")
443
+
444
+ if size_metrics["max_line_length"] > 200:
445
+ recommendations.append("Break long lines for better readability")
446
+
447
+ # Complexity recommendations
448
+ if complexity_metrics["nested_level_max"] > 5:
449
+ recommendations.append("Reduce nesting level by extracting sub-templates")
450
+
451
+ if complexity_metrics["variable_count"] > 100:
452
+ recommendations.append("Consider consolidating related variables")
453
+
454
+ if complexity_metrics["loop_count"] > 10:
455
+ recommendations.append("Optimize loops and consider pagination for large datasets")
456
+
457
+ # Performance recommendations
458
+ if performance_metrics["estimated_render_time_ms"] > 100:
459
+ recommendations.append("Implement template caching for better performance")
460
+
461
+ if not performance_metrics["cache_friendly"]:
462
+ recommendations.append("Restructure template for better cache efficiency")
463
+
464
+ if performance_metrics["cpu_intensity"] == "high":
465
+ recommendations.append("Consider moving complex logic to template filters or functions")
466
+
467
+ return recommendations
468
+
469
+ def _identify_optimization_opportunities(self, performance_metrics: Dict[str, Any]) -> List[Dict[str, Any]]:
470
+ """Identify global optimization opportunities across all templates."""
471
+
472
+ opportunities = []
473
+
474
+ # Analyze patterns across all files
475
+ total_files = len(performance_metrics)
476
+ if total_files == 0:
477
+ return opportunities
478
+
479
+ # Calculate aggregate metrics
480
+ total_size = sum(metrics["size_metrics"]["total_size_bytes"] for metrics in performance_metrics.values())
481
+ avg_render_time = (
482
+ sum(metrics["performance_metrics"]["estimated_render_time_ms"] for metrics in performance_metrics.values())
483
+ / total_files
484
+ )
485
+ high_complexity_files = sum(
486
+ 1 for metrics in performance_metrics.values() if metrics["complexity_metrics"]["nested_level_max"] > 3
487
+ )
488
+
489
+ # Size optimization opportunities
490
+ if total_size > 100000: # 100KB total
491
+ opportunities.append(
492
+ {
493
+ "type": "size_optimization",
494
+ "priority": "high",
495
+ "description": f"Large total template size ({total_size / 1024:.1f}KB)",
496
+ "recommendation": "Consider consolidating shared templates and removing unused content",
497
+ "estimated_impact": "15-25% reduction in load time",
498
+ }
499
+ )
500
+
501
+ # Performance optimization opportunities
502
+ if avg_render_time > 50:
503
+ opportunities.append(
504
+ {
505
+ "type": "performance_optimization",
506
+ "priority": "medium",
507
+ "description": f"Average render time is high ({avg_render_time:.1f}ms)",
508
+ "recommendation": "Implement template caching and optimize complex templates",
509
+ "estimated_impact": "20-40% improvement in render time",
510
+ }
511
+ )
512
+
513
+ # Complexity optimization opportunities
514
+ if high_complexity_files > total_files * 0.3: # More than 30% files are complex
515
+ opportunities.append(
516
+ {
517
+ "type": "complexity_optimization",
518
+ "priority": "medium",
519
+ "description": f"High complexity in {high_complexity_files} of {total_files} templates",
520
+ "recommendation": "Extract complex logic into template filters and reduce nesting",
521
+ "estimated_impact": "Improved maintainability and 10-20% performance gain",
522
+ }
523
+ )
524
+
525
+ # Template reuse opportunities
526
+ template_types = {}
527
+ for metrics in performance_metrics.values():
528
+ file_path = Path(metrics["file_path"])
529
+ template_type = file_path.suffix
530
+ template_types[template_type] = template_types.get(template_type, 0) + 1
531
+
532
+ common_types = [t for t, count in template_types.items() if count > 3]
533
+ if common_types:
534
+ opportunities.append(
535
+ {
536
+ "type": "template_reuse",
537
+ "priority": "low",
538
+ "description": f"Multiple templates of type: {', '.join(common_types)}",
539
+ "recommendation": "Create base templates and use template inheritance",
540
+ "estimated_impact": "Reduced duplication and easier maintenance",
541
+ }
542
+ )
543
+
544
+ return sorted(
545
+ opportunities,
546
+ key=lambda x: {"high": 3, "medium": 2, "low": 1}.get(x["priority"], 0),
547
+ reverse=True,
548
+ )
549
+
550
+ def _analyze_project_complexity(self, template_files: List[Dict[str, Any]]) -> Dict[str, Any]:
551
+ """Analyze overall project template complexity."""
552
+
553
+ complexity_analysis = {
554
+ "total_files": len(template_files),
555
+ "total_size_bytes": sum(f["size_bytes"] for f in template_files),
556
+ "file_types": {},
557
+ "template_languages": {},
558
+ "average_file_size": 0,
559
+ "complexity_distribution": {"low": 0, "medium": 0, "high": 0},
560
+ }
561
+
562
+ if template_files:
563
+ complexity_analysis["average_file_size"] = complexity_analysis["total_size_bytes"] / len(template_files)
564
+
565
+ # Analyze file types
566
+ for template_file in template_files:
567
+ file_type = template_file["type"]
568
+ complexity_analysis["file_types"][file_type] = complexity_analysis["file_types"].get(file_type, 0) + 1
569
+
570
+ lang = template_file["language"]
571
+ complexity_analysis["template_languages"][lang] = complexity_analysis["template_languages"].get(lang, 0) + 1
572
+
573
+ return complexity_analysis
574
+
575
+ def _calculate_resource_usage(self, template_files: List[Dict[str, Any]]) -> Dict[str, Any]:
576
+ """Calculate resource usage patterns and predictions."""
577
+
578
+ resource_usage = {
579
+ "disk_usage": {
580
+ "total_bytes": sum(f["size_bytes"] for f in template_files),
581
+ "average_file_size": 0,
582
+ "largest_file": None,
583
+ },
584
+ "memory_estimates": {"peak_usage_kb": 0, "average_usage_kb": 0},
585
+ "performance_predictions": {
586
+ "concurrent_render_support": 0,
587
+ "recommended_cache_size_mb": 0,
588
+ },
589
+ }
590
+
591
+ if template_files:
592
+ resource_usage["disk_usage"]["average_file_size"] = resource_usage["disk_usage"]["total_bytes"] / len(
593
+ template_files
594
+ )
595
+ resource_usage["disk_usage"]["largest_file"] = max(template_files, key=lambda f: f["size_bytes"])["path"]
596
+
597
+ # Estimate memory usage (rough approximation: 3x file size for processing)
598
+ total_size_kb = resource_usage["disk_usage"]["total_bytes"] / 1024
599
+ resource_usage["memory_estimates"]["average_usage_kb"] = total_size_kb * 3
600
+ resource_usage["memory_estimates"]["peak_usage_kb"] = total_size_kb * 5
601
+
602
+ # Performance predictions
603
+ avg_file_size_kb = resource_usage["disk_usage"]["average_file_size"] / 1024
604
+ resource_usage["performance_predictions"]["concurrent_render_support"] = int(
605
+ 1000 / (avg_file_size_kb + 10)
606
+ ) # Rough estimate
607
+ resource_usage["performance_predictions"]["recommended_cache_size_mb"] = max(1, int(total_size_kb / 1024))
608
+
609
+ return resource_usage
610
+
611
+ def _generate_backup_recommendations(self, analysis_result: Dict[str, Any]) -> List[Dict[str, Any]]:
612
+ """Generate backup recommendations based on analysis."""
613
+
614
+ recommendations = []
615
+
616
+ template_count = len(analysis_result["template_files"])
617
+ total_size = analysis_result["complexity_analysis"]["total_size_bytes"]
618
+ optimization_opportunities = analysis_result["optimization_opportunities"]
619
+
620
+ # Create backup if optimization opportunities exist
621
+ if optimization_opportunities:
622
+ high_priority_ops = [op for op in optimization_opportunities if op["priority"] == "high"]
623
+
624
+ if high_priority_ops:
625
+ recommendations.append(
626
+ {
627
+ "type": "pre_optimization_backup",
628
+ "priority": "high",
629
+ "description": "Create backup before applying optimizations",
630
+ "reason": "High-impact optimizations detected",
631
+ "backup_size_estimate": total_size,
632
+ "recommended_backup_name": f"backup-{datetime.now().strftime('%Y-%m-%d')}-pre-optimization",
633
+ }
634
+ )
635
+
636
+ # Regular backup recommendations
637
+ if template_count > 10:
638
+ recommendations.append(
639
+ {
640
+ "type": "regular_backup",
641
+ "priority": "medium",
642
+ "description": "Regular backup recommended for large template collections",
643
+ "reason": f"{template_count} template files detected",
644
+ "backup_frequency": "weekly",
645
+ }
646
+ )
647
+
648
+ # Version control recommendations
649
+ if not (self.project_root / ".git").exists():
650
+ recommendations.append(
651
+ {
652
+ "type": "version_control",
653
+ "priority": "low",
654
+ "description": "Consider using Git for template version control",
655
+ "reason": "No version control system detected",
656
+ "suggested_action": "Initialize Git repository",
657
+ }
658
+ )
659
+
660
+ return recommendations
661
+
662
+ def create_optimized_templates(self, optimization_options: Dict[str, Any] = None) -> Dict[str, Any]:
663
+ """
664
+ Create optimized versions of templates.
665
+
666
+ Args:
667
+ optimization_options: Options for optimization process
668
+
669
+ Returns:
670
+ Optimization results and created files
671
+ """
672
+
673
+ if optimization_options is None:
674
+ optimization_options = {
675
+ "backup_first": True,
676
+ "apply_size_optimizations": True,
677
+ "apply_performance_optimizations": True,
678
+ "apply_complexity_optimizations": True,
679
+ "preserve_functionality": True,
680
+ }
681
+
682
+ optimization_result = {
683
+ "timestamp": datetime.now().isoformat(),
684
+ "options_used": optimization_options,
685
+ "backup_created": False,
686
+ "optimized_files": [],
687
+ "optimizations_applied": [],
688
+ "size_reduction": 0,
689
+ "performance_improvement": 0,
690
+ "errors": [],
691
+ }
692
+
693
+ # Create backup if requested
694
+ if optimization_options.get("backup_first", True):
695
+ backup_result = self._create_template_backup("pre-optimization")
696
+ optimization_result["backup_created"] = backup_result["success"]
697
+ optimization_result["backup_info"] = backup_result
698
+
699
+ # Analyze current templates
700
+ analysis = self.analyze_project_templates()
701
+
702
+ # Apply optimizations
703
+ for template_file in analysis["template_files"]:
704
+ file_optimization = self._optimize_template_file(template_file, optimization_options)
705
+
706
+ if file_optimization["success"]:
707
+ optimization_result["optimized_files"].append(file_optimization)
708
+ optimization_result["optimizations_applied"].extend(file_optimization["applied_optimizations"])
709
+ else:
710
+ optimization_result["errors"].append(
711
+ {
712
+ "file": template_file["path"],
713
+ "error": file_optimization.get("error", "Unknown error"),
714
+ }
715
+ )
716
+
717
+ # Calculate overall improvements
718
+ if optimization_result["optimized_files"]:
719
+ original_total_size = sum(f["size_bytes"] for f in analysis["template_files"])
720
+ optimized_total_size = sum(f["optimized_size_bytes"] for f in optimization_result["optimized_files"])
721
+
722
+ if original_total_size > 0:
723
+ optimization_result["size_reduction"] = (
724
+ (original_total_size - optimized_total_size) / original_total_size * 100
725
+ )
726
+
727
+ return optimization_result
728
+
729
+ def _create_template_backup(self, backup_name: str = None) -> Dict[str, Any]:
730
+ """Create backup of all template files."""
731
+
732
+ if backup_name is None:
733
+ backup_name = f"backup-{datetime.now().strftime('%Y-%m-%d-%H-%M-%S')}"
734
+
735
+ backup_path = self.backups_dir / backup_name
736
+ backup_path.mkdir(parents=True, exist_ok=True)
737
+
738
+ backup_result = {
739
+ "backup_name": backup_name,
740
+ "backup_path": str(backup_path),
741
+ "success": False,
742
+ "files_backed_up": 0,
743
+ "total_size_bytes": 0,
744
+ "created_at": datetime.now().isoformat(),
745
+ }
746
+
747
+ try:
748
+ # Discover and backup template files
749
+ template_files = self._discover_template_files()
750
+
751
+ for template_file in template_files:
752
+ source_path = Path(template_file["absolute_path"])
753
+ relative_path = Path(template_file["path"])
754
+ backup_file_path = backup_path / relative_path
755
+
756
+ # Ensure backup directory exists
757
+ backup_file_path.parent.mkdir(parents=True, exist_ok=True)
758
+
759
+ # Copy file
760
+ shutil.copy2(source_path, backup_file_path)
761
+ backup_result["files_backed_up"] += 1
762
+ backup_result["total_size_bytes"] += template_file["size_bytes"]
763
+
764
+ # Create backup metadata
765
+ metadata = {
766
+ "backup_name": backup_name,
767
+ "created_at": backup_result["created_at"],
768
+ "files_backed_up": backup_result["files_backed_up"],
769
+ "total_size_bytes": backup_result["total_size_bytes"],
770
+ "project_root": str(self.project_root),
771
+ "template_files": template_files,
772
+ }
773
+
774
+ metadata_path = backup_path / "backup-metadata.json"
775
+ metadata_path.write_text(json.dumps(metadata, indent=2, ensure_ascii=False), encoding="utf-8")
776
+
777
+ backup_result["success"] = True
778
+
779
+ except Exception as e:
780
+ backup_result["error"] = str(e)
781
+
782
+ return backup_result
783
+
784
+ def _optimize_template_file(self, template_file: Dict[str, Any], options: Dict[str, Any]) -> Dict[str, Any]:
785
+ """Optimize individual template file."""
786
+
787
+ file_path = Path(template_file["absolute_path"])
788
+ optimization_result = {
789
+ "file_path": template_file["path"],
790
+ "success": False,
791
+ "original_size_bytes": template_file["size_bytes"],
792
+ "optimized_size_bytes": 0,
793
+ "applied_optimizations": [],
794
+ "error": None,
795
+ }
796
+
797
+ try:
798
+ # Read original content
799
+ original_content = file_path.read_text(encoding="utf-8")
800
+ optimized_content = original_content
801
+ applied_optimizations = []
802
+
803
+ # Apply size optimizations
804
+ if options.get("apply_size_optimizations", True):
805
+ size_optimized, size_opts = self._apply_size_optimizations(optimized_content)
806
+ if size_optimized != optimized_content:
807
+ optimized_content = size_optimized
808
+ applied_optimizations.extend(size_opts)
809
+
810
+ # Apply performance optimizations
811
+ if options.get("apply_performance_optimizations", True):
812
+ perf_optimized, perf_opts = self._apply_performance_optimizations(optimized_content)
813
+ if perf_optimized != optimized_content:
814
+ optimized_content = perf_optimized
815
+ applied_optimizations.extend(perf_opts)
816
+
817
+ # Apply complexity optimizations
818
+ if options.get("apply_complexity_optimizations", True):
819
+ complexity_optimized, complexity_opts = self._apply_complexity_optimizations(optimized_content)
820
+ if complexity_optimized != optimized_content:
821
+ optimized_content = complexity_optimized
822
+ applied_optimizations.extend(complexity_opts)
823
+
824
+ # Write optimized version
825
+ if optimized_content != original_content:
826
+ # Create optimized version
827
+ optimized_dir = self.templates_dir / "optimized"
828
+ relative_path = file_path.relative_to(self.project_root)
829
+ optimized_file_path = optimized_dir / relative_path
830
+
831
+ optimized_file_path.parent.mkdir(parents=True, exist_ok=True)
832
+ optimized_file_path.write_text(optimized_content, encoding="utf-8")
833
+
834
+ optimization_result.update(
835
+ {
836
+ "success": True,
837
+ "optimized_size_bytes": len(optimized_content.encode("utf-8")),
838
+ "applied_optimizations": applied_optimizations,
839
+ "optimized_file_path": str(optimized_file_path),
840
+ }
841
+ )
842
+ else:
843
+ optimization_result["success"] = True
844
+ optimization_result["message"] = "No optimizations needed"
845
+
846
+ except Exception as e:
847
+ optimization_result["error"] = str(e)
848
+
849
+ return optimization_result
850
+
851
+ def _apply_size_optimizations(self, content: str) -> Tuple[str, List[str]]:
852
+ """Apply size reduction optimizations."""
853
+
854
+ optimized_content = content
855
+ applied_optimizations = []
856
+
857
+ # Remove excessive whitespace
858
+ original_lines = content.splitlines()
859
+ optimized_lines = []
860
+
861
+ for line in original_lines:
862
+ # Remove leading/trailing whitespace but preserve template indentation
863
+ stripped_line = line.rstrip()
864
+ if stripped_line or line.strip() == "":
865
+ optimized_lines.append(stripped_line)
866
+
867
+ optimized_content = "\n".join(optimized_lines)
868
+
869
+ if len(optimized_content) < len(content) * 0.95: # At least 5% reduction
870
+ applied_optimizations.append("whitespace_optimization")
871
+
872
+ # Remove redundant template markers
873
+ # (This would be more sophisticated in practice)
874
+ optimized_content = re.sub(r"\{\{\s+\{\{", "{{", optimized_content)
875
+ optimized_content = re.sub(r"\}\}\s+\}\}", "}}", optimized_content)
876
+
877
+ if optimized_content != content:
878
+ applied_optimizations.append("template_marker_optimization")
879
+
880
+ return optimized_content, applied_optimizations
881
+
882
+ def _apply_performance_optimizations(self, content: str) -> Tuple[str, List[str]]:
883
+ """Apply performance optimizations."""
884
+
885
+ optimized_content = content
886
+ applied_optimizations = []
887
+
888
+ # Optimize loop structures
889
+ # This is a simplified example - real optimization would be more sophisticated
890
+ original_content = optimized_content
891
+
892
+ # Replace complex inline conditions with template filters
893
+ optimized_content = re.sub(
894
+ r"\{\{\s*if\s+(.+?)\s*%\}\s*\{\{\s*(.+?)\s*\}\}\s*\{\%\s*else\s*%\}\s*\{\{\s*(.+?)\s*\}\}\s*\{\%\s*endif\s*%\}",
895
+ r'{{ \1 | default("\3") if \2 else "\3" }}',
896
+ optimized_content,
897
+ )
898
+
899
+ if optimized_content != original_content:
900
+ applied_optimizations.append("conditional_optimization")
901
+
902
+ # Cache expensive operations
903
+ optimized_content = re.sub(r"\{\{\s*(.+?)\|length\s*\}\}", r"{{ \1 | length }}", optimized_content)
904
+
905
+ return optimized_content, applied_optimizations
906
+
907
+ def _apply_complexity_optimizations(self, content: str) -> Tuple[str, List[str]]:
908
+ """Apply complexity reduction optimizations."""
909
+
910
+ optimized_content = content
911
+ applied_optimizations = []
912
+
913
+ # Extract complex nested structures into separate templates
914
+ # This is a simplified detection - real implementation would be more advanced
915
+
916
+ # Find deeply nested structures (simplified example)
917
+ nesting_level = 0
918
+ max_nesting = 0
919
+ lines = content.splitlines()
920
+
921
+ for line in lines:
922
+ open_blocks = line.count("{%") + line.count("{{")
923
+ close_blocks = line.count("%}") + line.count("}}")
924
+ nesting_level += open_blocks - close_blocks
925
+ max_nesting = max(max_nesting, nesting_level)
926
+
927
+ if max_nesting > 5:
928
+ applied_optimizations.append("complexity_reduction_needed")
929
+ # In practice, this would extract nested content to separate templates
930
+
931
+ return optimized_content, applied_optimizations
932
+
933
+ def benchmark_template_performance(self, template_paths: List[str] = None) -> Dict[str, Any]:
934
+ """
935
+ Benchmark template rendering performance.
936
+
937
+ Args:
938
+ template_paths: Specific templates to benchmark (all if None)
939
+
940
+ Returns:
941
+ Performance benchmark results
942
+ """
943
+
944
+ benchmark_result = {
945
+ "timestamp": datetime.now().isoformat(),
946
+ "benchmark_files": template_paths or [],
947
+ "performance_metrics": {},
948
+ "summary": {
949
+ "total_files_tested": 0,
950
+ "average_render_time_ms": 0,
951
+ "fastest_file": None,
952
+ "slowest_file": None,
953
+ },
954
+ }
955
+
956
+ # Get files to benchmark
957
+ if template_paths is None:
958
+ template_files = self._discover_template_files()
959
+ template_paths = [f["path"] for f in template_files]
960
+
961
+ benchmark_result["benchmark_files"] = template_paths
962
+ render_times = []
963
+
964
+ for template_path in template_paths:
965
+ file_path = self.project_root / template_path
966
+ if file_path.exists():
967
+ performance_metrics = self._estimate_template_performance(file_path)
968
+
969
+ benchmark_result["performance_metrics"][template_path] = {
970
+ "estimated_render_time_ms": performance_metrics["estimated_render_time_ms"],
971
+ "memory_usage_kb": performance_metrics["memory_usage_estimate_kb"],
972
+ "cpu_intensity": performance_metrics["cpu_intensity"],
973
+ "cache_friendly": performance_metrics["cache_friendly"],
974
+ "complexity_score": performance_metrics["render_complexity_score"],
975
+ }
976
+
977
+ render_times.append(performance_metrics["estimated_render_time_ms"])
978
+
979
+ # Calculate summary
980
+ if render_times:
981
+ benchmark_result["summary"]["total_files_tested"] = len(render_times)
982
+ benchmark_result["summary"]["average_render_time_ms"] = sum(render_times) / len(render_times)
983
+
984
+ # Find fastest and slowest files
985
+ min_time_idx = render_times.index(min(render_times))
986
+ max_time_idx = render_times.index(max(render_times))
987
+
988
+ benchmark_result["summary"]["fastest_file"] = {
989
+ "path": template_paths[min_time_idx],
990
+ "render_time_ms": min(render_times),
991
+ }
992
+
993
+ benchmark_result["summary"]["slowest_file"] = {
994
+ "path": template_paths[max_time_idx],
995
+ "render_time_ms": max(render_times),
996
+ }
997
+
998
+ # Save benchmark results
999
+ benchmark_dir = self.templates_dir / "benchmarks"
1000
+ benchmark_dir.mkdir(exist_ok=True)
1001
+
1002
+ benchmark_file = benchmark_dir / f"benchmark-{datetime.now().strftime('%Y%m%d-%H%M%S')}.json"
1003
+ benchmark_file.write_text(json.dumps(benchmark_result, indent=2, ensure_ascii=False), encoding="utf-8")
1004
+
1005
+ return benchmark_result