moai-adk 0.25.4__py3-none-any.whl → 0.32.8__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (378) hide show
  1. moai_adk/__init__.py +2 -5
  2. moai_adk/__main__.py +114 -82
  3. moai_adk/cli/__init__.py +6 -1
  4. moai_adk/cli/commands/__init__.py +1 -3
  5. moai_adk/cli/commands/analyze.py +5 -16
  6. moai_adk/cli/commands/doctor.py +6 -18
  7. moai_adk/cli/commands/init.py +56 -125
  8. moai_adk/cli/commands/language.py +14 -35
  9. moai_adk/cli/commands/status.py +9 -15
  10. moai_adk/cli/commands/update.py +1555 -190
  11. moai_adk/cli/prompts/init_prompts.py +112 -56
  12. moai_adk/cli/spec_status.py +263 -0
  13. moai_adk/cli/ui/__init__.py +44 -0
  14. moai_adk/cli/ui/progress.py +422 -0
  15. moai_adk/cli/ui/prompts.py +389 -0
  16. moai_adk/cli/ui/theme.py +129 -0
  17. moai_adk/cli/worktree/__init__.py +27 -0
  18. moai_adk/cli/worktree/__main__.py +31 -0
  19. moai_adk/cli/worktree/cli.py +672 -0
  20. moai_adk/cli/worktree/exceptions.py +89 -0
  21. moai_adk/cli/worktree/manager.py +490 -0
  22. moai_adk/cli/worktree/models.py +65 -0
  23. moai_adk/cli/worktree/registry.py +128 -0
  24. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  25. moai_adk/core/analysis/session_analyzer.py +17 -56
  26. moai_adk/core/claude_integration.py +26 -54
  27. moai_adk/core/command_helpers.py +10 -10
  28. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  29. moai_adk/core/config/auto_spec_config.py +5 -11
  30. moai_adk/core/config/migration.py +19 -9
  31. moai_adk/core/config/unified.py +436 -0
  32. moai_adk/core/context_manager.py +6 -12
  33. moai_adk/core/enterprise_features.py +1404 -0
  34. moai_adk/core/error_recovery_system.py +725 -112
  35. moai_adk/core/event_driven_hook_system.py +1371 -0
  36. moai_adk/core/git/__init__.py +8 -0
  37. moai_adk/core/git/branch_manager.py +3 -11
  38. moai_adk/core/git/checkpoint.py +1 -3
  39. moai_adk/core/git/conflict_detector.py +413 -0
  40. moai_adk/core/git/manager.py +91 -1
  41. moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
  42. moai_adk/core/input_validation_middleware.py +1006 -0
  43. moai_adk/core/integration/engine.py +6 -18
  44. moai_adk/core/integration/integration_tester.py +10 -9
  45. moai_adk/core/integration/utils.py +1 -1
  46. moai_adk/core/issue_creator.py +10 -28
  47. moai_adk/core/jit_context_loader.py +956 -0
  48. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  49. moai_adk/core/language_config_resolver.py +485 -0
  50. moai_adk/core/language_validator.py +28 -41
  51. moai_adk/core/mcp/setup.py +15 -12
  52. moai_adk/core/merge/__init__.py +9 -0
  53. moai_adk/core/merge/analyzer.py +481 -0
  54. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  55. moai_adk/core/migration/backup_manager.py +78 -9
  56. moai_adk/core/migration/custom_element_scanner.py +358 -0
  57. moai_adk/core/migration/file_migrator.py +8 -17
  58. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  59. moai_adk/core/migration/selective_restorer.py +470 -0
  60. moai_adk/core/migration/template_utils.py +74 -0
  61. moai_adk/core/migration/user_selection_ui.py +338 -0
  62. moai_adk/core/migration/version_detector.py +6 -10
  63. moai_adk/core/migration/version_migrator.py +3 -3
  64. moai_adk/core/performance/cache_system.py +8 -10
  65. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  66. moai_adk/core/project/checker.py +2 -4
  67. moai_adk/core/project/detector.py +1 -3
  68. moai_adk/core/project/initializer.py +135 -23
  69. moai_adk/core/project/phase_executor.py +54 -81
  70. moai_adk/core/project/validator.py +6 -12
  71. moai_adk/core/quality/trust_checker.py +9 -27
  72. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  73. moai_adk/core/robust_json_parser.py +611 -0
  74. moai_adk/core/rollback_manager.py +73 -148
  75. moai_adk/core/session_manager.py +10 -26
  76. moai_adk/core/skill_loading_system.py +579 -0
  77. moai_adk/core/spec/confidence_scoring.py +31 -100
  78. moai_adk/core/spec/ears_template_engine.py +351 -286
  79. moai_adk/core/spec/quality_validator.py +35 -69
  80. moai_adk/core/spec_status_manager.py +64 -74
  81. moai_adk/core/template/backup.py +45 -20
  82. moai_adk/core/template/config.py +112 -39
  83. moai_adk/core/template/merger.py +11 -19
  84. moai_adk/core/template/processor.py +253 -149
  85. moai_adk/core/template_engine.py +73 -40
  86. moai_adk/core/template_variable_synchronizer.py +417 -0
  87. moai_adk/core/unified_permission_manager.py +745 -0
  88. moai_adk/core/user_behavior_analytics.py +851 -0
  89. moai_adk/core/version_sync.py +429 -0
  90. moai_adk/foundation/__init__.py +56 -0
  91. moai_adk/foundation/backend.py +1027 -0
  92. moai_adk/foundation/database.py +1115 -0
  93. moai_adk/foundation/devops.py +1585 -0
  94. moai_adk/foundation/ears.py +431 -0
  95. moai_adk/foundation/frontend.py +870 -0
  96. moai_adk/foundation/git/commit_templates.py +4 -12
  97. moai_adk/foundation/git.py +376 -0
  98. moai_adk/foundation/langs.py +484 -0
  99. moai_adk/foundation/ml_ops.py +1162 -0
  100. moai_adk/foundation/testing.py +1524 -0
  101. moai_adk/foundation/trust/trust_principles.py +23 -72
  102. moai_adk/foundation/trust/validation_checklist.py +57 -162
  103. moai_adk/project/__init__.py +0 -0
  104. moai_adk/project/configuration.py +1084 -0
  105. moai_adk/project/documentation.py +566 -0
  106. moai_adk/project/schema.py +447 -0
  107. moai_adk/statusline/alfred_detector.py +1 -3
  108. moai_adk/statusline/config.py +13 -4
  109. moai_adk/statusline/enhanced_output_style_detector.py +23 -15
  110. moai_adk/statusline/main.py +51 -15
  111. moai_adk/statusline/renderer.py +104 -48
  112. moai_adk/statusline/update_checker.py +3 -9
  113. moai_adk/statusline/version_reader.py +140 -46
  114. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
  115. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  116. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  117. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  118. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  119. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  120. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  121. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  122. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  123. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  124. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  125. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  126. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  127. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  128. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  129. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  130. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  131. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  132. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  133. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  134. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  135. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  136. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  137. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  138. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  139. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  140. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  141. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  142. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  143. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  144. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  145. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  146. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  147. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  148. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  149. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  150. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  151. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  152. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  153. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  154. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  155. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  156. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  157. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  158. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  159. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  160. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  161. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  162. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  163. moai_adk/templates/.claude/settings.json +172 -0
  164. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  165. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  166. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  167. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  168. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  169. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  170. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
  171. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
  172. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  173. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  174. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  175. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  176. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
  177. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  178. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  179. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  180. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  181. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  182. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  183. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  184. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  185. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  186. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  187. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  188. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  189. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  190. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  191. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  192. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  193. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  194. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  195. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  196. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  197. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  198. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  199. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  200. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  201. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  202. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  203. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  204. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  205. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  206. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  207. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  208. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  209. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  210. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  211. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  212. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  213. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  214. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  215. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  229. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  230. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  231. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  232. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  233. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  234. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  235. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  236. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  237. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  238. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  239. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  240. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  241. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  242. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  243. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  244. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  245. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  246. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  247. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  248. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  249. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  250. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  251. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  252. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  253. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  254. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  255. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  256. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  257. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  258. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  259. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  260. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  261. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  262. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  263. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  264. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  265. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  266. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  267. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  268. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  269. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  270. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  271. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  272. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  273. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  274. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  275. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  276. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  277. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  278. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  279. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  280. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  281. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  282. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  283. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  284. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  285. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  286. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  287. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  288. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  289. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  290. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  291. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  323. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  324. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  325. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  326. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  327. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  328. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  329. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  330. moai_adk/templates/.git-hooks/pre-commit +103 -41
  331. moai_adk/templates/.git-hooks/pre-push +116 -21
  332. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  333. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  334. moai_adk/templates/.gitignore +184 -44
  335. moai_adk/templates/.mcp.json +7 -9
  336. moai_adk/templates/.moai/cache/personalization.json +10 -0
  337. moai_adk/templates/.moai/config/config.yaml +344 -0
  338. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  339. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  340. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  341. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  342. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  343. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  344. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  345. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  346. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  347. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  348. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  349. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  350. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  351. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  352. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  353. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  354. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  355. moai_adk/templates/CLAUDE.md +382 -501
  356. moai_adk/utils/__init__.py +24 -1
  357. moai_adk/utils/banner.py +7 -10
  358. moai_adk/utils/common.py +16 -30
  359. moai_adk/utils/link_validator.py +4 -12
  360. moai_adk/utils/safe_file_reader.py +2 -6
  361. moai_adk/utils/timeout.py +160 -0
  362. moai_adk/utils/toon_utils.py +256 -0
  363. moai_adk/version.py +22 -0
  364. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  365. moai_adk-0.32.8.dist-info/RECORD +396 -0
  366. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  367. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  368. moai_adk/cli/commands/backup.py +0 -82
  369. moai_adk/cli/commands/improve_user_experience.py +0 -348
  370. moai_adk/cli/commands/migrate.py +0 -158
  371. moai_adk/cli/commands/validate_links.py +0 -118
  372. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
  373. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  374. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  375. moai_adk/utils/user_experience.py +0 -531
  376. moai_adk-0.25.4.dist-info/METADATA +0 -2279
  377. moai_adk-0.25.4.dist-info/RECORD +0 -112
  378. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,459 @@
1
+ # Caching and Performance Optimization
2
+
3
+ > Module: Advanced caching strategies and performance optimization
4
+ > Complexity: Advanced
5
+ > Time: 15+ minutes
6
+ > Dependencies: functools, hashlib, pickle, time, typing
7
+
8
+ ## Intelligent Data Caching
9
+
10
+ ```python
11
+ from functools import wraps
12
+ import hashlib
13
+ import pickle
14
+ from typing import Any, Dict, Optional
15
+ import time
16
+
17
+ class DataCache:
18
+ """Intelligent caching system for data operations."""
19
+
20
+ def __init__(self, max_size: int = 1000, ttl: int = 3600):
21
+ self.max_size = max_size
22
+ self.ttl = ttl
23
+ self.cache: Dict[str, Dict] = {}
24
+
25
+ def _generate_key(self, func_name: str, args: tuple, kwargs: dict) -> str:
26
+ """Generate cache key from function arguments."""
27
+ key_data = {
28
+ 'func': func_name,
29
+ 'args': args,
30
+ 'kwargs': kwargs
31
+ }
32
+ key_str = pickle.dumps(key_data)
33
+ return hashlib.md5(key_str).hexdigest()
34
+
35
+ def cache_result(self, ttl: Optional[int] = None):
36
+ """Decorator for caching function results."""
37
+ def decorator(func):
38
+ @wraps(func)
39
+ def wrapper(*args, kwargs):
40
+ cache_key = self._generate_key(func.__name__, args, kwargs)
41
+
42
+ # Check cache
43
+ if cache_key in self.cache:
44
+ cache_entry = self.cache[cache_key]
45
+ if time.time() - cache_entry['timestamp'] < (ttl or self.ttl):
46
+ return cache_entry['result']
47
+
48
+ # Execute function and cache result
49
+ result = func(*args, kwargs)
50
+
51
+ # Manage cache size
52
+ if len(self.cache) >= self.max_size:
53
+ # Remove oldest entry
54
+ oldest_key = min(self.cache.keys(),
55
+ key=lambda k: self.cache[k]['timestamp'])
56
+ del self.cache[oldest_key]
57
+
58
+ # Store new entry
59
+ self.cache[cache_key] = {
60
+ 'result': result,
61
+ 'timestamp': time.time()
62
+ }
63
+
64
+ return result
65
+
66
+ return wrapper
67
+ return decorator
68
+
69
+ def invalidate_pattern(self, pattern: str):
70
+ """Invalidate cache entries matching pattern."""
71
+ keys_to_remove = [
72
+ key for key in self.cache.keys()
73
+ if pattern in key
74
+ ]
75
+ for key in keys_to_remove:
76
+ del self.cache[key]
77
+
78
+ def clear_expired(self):
79
+ """Clear expired cache entries."""
80
+ current_time = time.time()
81
+ expired_keys = [
82
+ key for key, entry in self.cache.items()
83
+ if current_time - entry['timestamp'] >= self.ttl
84
+ ]
85
+ for key in expired_keys:
86
+ del self.cache[key]
87
+ ```
88
+
89
+ ## Advanced Caching Strategies
90
+
91
+ ### Multi-Level Caching
92
+
93
+ ```python
94
+ class MultiLevelCache:
95
+ """Multi-level caching with memory and persistent storage."""
96
+
97
+ def __init__(self, memory_size: int = 1000, persistent_path: str = None):
98
+ self.memory_cache = DataCache(max_size=memory_size)
99
+ self.persistent_path = persistent_path
100
+ self.persistent_cache = {}
101
+
102
+ if persistent_path:
103
+ self._load_persistent_cache()
104
+
105
+ def _load_persistent_cache(self):
106
+ """Load persistent cache from disk."""
107
+ try:
108
+ with open(self.persistent_path, 'rb') as f:
109
+ self.persistent_cache = pickle.load(f)
110
+ except (FileNotFoundError, pickle.PickleError):
111
+ self.persistent_cache = {}
112
+
113
+ def _save_persistent_cache(self):
114
+ """Save persistent cache to disk."""
115
+ try:
116
+ with open(self.persistent_path, 'wb') as f:
117
+ pickle.dump(self.persistent_cache, f)
118
+ except (IOError, pickle.PickleError):
119
+ pass # Silently fail for cache operations
120
+
121
+ def get(self, key: str, use_memory: bool = True, use_persistent: bool = True) -> Any:
122
+ """Get value from cache levels."""
123
+ # Try memory cache first
124
+ if use_memory and key in self.memory_cache.cache:
125
+ entry = self.memory_cache.cache[key]
126
+ if time.time() - entry['timestamp'] < self.memory_cache.ttl:
127
+ return entry['result']
128
+
129
+ # Try persistent cache
130
+ if use_persistent and key in self.persistent_cache:
131
+ entry = self.persistent_cache[key]
132
+ if time.time() - entry['timestamp'] < entry.get('ttl', self.memory_cache.ttl):
133
+ # Promote to memory cache
134
+ self.memory_cache.cache[key] = entry
135
+ return entry['result']
136
+
137
+ return None
138
+
139
+ def set(self, key: str, value: Any, persist: bool = False, ttl: int = None):
140
+ """Set value in cache levels."""
141
+ # Always set in memory cache
142
+ self.memory_cache.cache[key] = {
143
+ 'result': value,
144
+ 'timestamp': time.time()
145
+ }
146
+
147
+ # Optionally persist
148
+ if persist and self.persistent_path:
149
+ self.persistent_cache[key] = {
150
+ 'result': value,
151
+ 'timestamp': time.time(),
152
+ 'ttl': ttl or self.memory_cache.ttl
153
+ }
154
+ self._save_persistent_cache()
155
+
156
+ class SmartCache:
157
+ """Smart caching with memory pressure and access pattern analysis."""
158
+
159
+ def __init__(self, max_memory_mb: int = 100, max_items: int = 10000):
160
+ self.max_memory_mb = max_memory_mb
161
+ self.max_items = max_items
162
+ self.cache = {}
163
+ self.access_count = {}
164
+ self.last_access = {}
165
+ self.estimated_sizes = {}
166
+
167
+ def _estimate_size(self, obj: Any) -> int:
168
+ """Estimate memory size of an object."""
169
+ try:
170
+ return len(pickle.dumps(obj))
171
+ except pickle.PickleError:
172
+ return 1024 # Default estimate
173
+
174
+ def _get_memory_usage(self) -> int:
175
+ """Get current memory usage in bytes."""
176
+ return sum(self.estimated_sizes.values())
177
+
178
+ def _evict_lru(self, count: int = 1):
179
+ """Evict least recently used items."""
180
+ if not self.cache:
181
+ return
182
+
183
+ # Sort by last access time
184
+ sorted_items = sorted(
185
+ self.cache.keys(),
186
+ key=lambda k: self.last_access.get(k, 0)
187
+ )
188
+
189
+ for key in sorted_items[:count]:
190
+ self.remove(key)
191
+
192
+ def get(self, key: str) -> Any:
193
+ """Get item and update access statistics."""
194
+ if key in self.cache:
195
+ entry = self.cache[key]
196
+ current_time = time.time()
197
+
198
+ # Check expiration
199
+ if current_time - entry['timestamp'] > entry.get('ttl', float('inf')):
200
+ self.remove(key)
201
+ return None
202
+
203
+ # Update access statistics
204
+ self.access_count[key] = self.access_count.get(key, 0) + 1
205
+ self.last_access[key] = current_time
206
+
207
+ return entry['value']
208
+
209
+ return None
210
+
211
+ def set(self, key: str, value: Any, ttl: int = None):
212
+ """Set item with memory management."""
213
+ current_time = time.time()
214
+ item_size = self._estimate_size(value)
215
+
216
+ # Check memory constraints
217
+ if (self._get_memory_usage() + item_size > self.max_memory_mb * 1024 * 1024 or
218
+ len(self.cache) >= self.max_items):
219
+
220
+ # Calculate eviction score (access count * recency)
221
+ def eviction_score(k):
222
+ count = self.access_count.get(k, 0)
223
+ last_access = self.last_access.get(k, current_time)
224
+ recency = current_time - last_access
225
+ return count / (recency + 1) # Avoid division by zero
226
+
227
+ # Evict items with lowest scores
228
+ if self.cache:
229
+ sorted_by_score = sorted(self.cache.keys(), key=eviction_score)
230
+ evict_count = max(1, len(self.cache) // 10) # Evict 10% or at least 1
231
+ for key in sorted_by_score[:evict_count]:
232
+ self.remove(key)
233
+
234
+ # Store item
235
+ self.cache[key] = {
236
+ 'value': value,
237
+ 'timestamp': current_time,
238
+ 'ttl': ttl or float('inf')
239
+ }
240
+ self.access_count[key] = 1
241
+ self.last_access[key] = current_time
242
+ self.estimated_sizes[key] = item_size
243
+
244
+ def remove(self, key: str):
245
+ """Remove item from cache."""
246
+ self.cache.pop(key, None)
247
+ self.access_count.pop(key, None)
248
+ self.last_access.pop(key, None)
249
+ self.estimated_sizes.pop(key, None)
250
+
251
+ def get_stats(self) -> Dict[str, Any]:
252
+ """Get cache statistics."""
253
+ return {
254
+ 'items': len(self.cache),
255
+ 'memory_usage_mb': self._get_memory_usage() / (1024 * 1024),
256
+ 'memory_limit_mb': self.max_memory_mb,
257
+ 'hit_rate': self._calculate_hit_rate(),
258
+ 'top_accessed': sorted(
259
+ self.access_count.items(),
260
+ key=lambda x: x[1],
261
+ reverse=True
262
+ )[:10]
263
+ }
264
+
265
+ def _calculate_hit_rate(self) -> float:
266
+ """Calculate cache hit rate (simplified)."""
267
+ total_accesses = sum(self.access_count.values())
268
+ if total_accesses == 0:
269
+ return 0.0
270
+ # This is a simplified calculation - real implementation would track hits/misses
271
+ return min(0.8, total_accesses / (total_accesses + 10)) # Dummy calculation
272
+ ```
273
+
274
+ ### Cache Invalidation Strategies
275
+
276
+ ```python
277
+ class CacheInvalidator:
278
+ """Advanced cache invalidation strategies."""
279
+
280
+ def __init__(self, cache: DataCache):
281
+ self.cache = cache
282
+ self.tags = {} # key -> set of tags
283
+ self.tag_to_keys = {} # tag -> set of keys
284
+
285
+ def set_with_tags(self, key: str, value: Any, tags: List[str], ttl: int = None):
286
+ """Set cache value with tags for invalidation."""
287
+ # Store in cache
288
+ if hasattr(self.cache, 'set'):
289
+ self.cache.set(key, value, ttl)
290
+ else:
291
+ self.cache.cache[key] = {
292
+ 'result': value,
293
+ 'timestamp': time.time()
294
+ }
295
+
296
+ # Manage tags
297
+ self.tags[key] = set(tags)
298
+ for tag in tags:
299
+ if tag not in self.tag_to_keys:
300
+ self.tag_to_keys[tag] = set()
301
+ self.tag_to_keys[tag].add(key)
302
+
303
+ def invalidate_by_tag(self, tag: str):
304
+ """Invalidate all cache entries with specific tag."""
305
+ if tag in self.tag_to_keys:
306
+ keys_to_invalidate = self.tag_to_keys[tag]
307
+ for key in keys_to_invalidate:
308
+ self.cache.cache.pop(key, None)
309
+ self.tags.pop(key, None)
310
+
311
+ # Clear tag mapping
312
+ del self.tag_to_keys[tag]
313
+
314
+ def invalidate_by_pattern(self, pattern: str, is_regex: bool = False):
315
+ """Invalidate cache entries matching pattern."""
316
+ keys_to_remove = []
317
+
318
+ if is_regex:
319
+ import re
320
+ regex = re.compile(pattern)
321
+ keys_to_remove = [key for key in self.cache.cache.keys() if regex.match(key)]
322
+ else:
323
+ keys_to_remove = [key for key in self.cache.cache.keys() if pattern in key]
324
+
325
+ for key in keys_to_remove:
326
+ self.cache.cache.pop(key, None)
327
+ # Clean up tags
328
+ if key in self.tags:
329
+ for tag in self.tags[key]:
330
+ self.tag_to_keys[tag].discard(key)
331
+ self.tags.pop(key, None)
332
+
333
+ def invalidate_dependencies(self, key: str):
334
+ """Invalidate entries that depend on this key."""
335
+ # Implement dependency tracking logic
336
+ pass
337
+
338
+ class CacheWarmer:
339
+ """Cache warming for predictable access patterns."""
340
+
341
+ def __init__(self, cache: DataCache):
342
+ self.cache = cache
343
+ self.warming_strategies = {}
344
+
345
+ def register_warm_strategy(self, name: str, warm_func: callable):
346
+ """Register a cache warming strategy."""
347
+ self.warming_strategies[name] = warm_func
348
+
349
+ def warm_cache(self, strategy_name: str, *args, kwargs):
350
+ """Warm cache using specific strategy."""
351
+ if strategy_name in self.warming_strategies:
352
+ warm_func = self.warming_strategies[strategy_name]
353
+ warm_func(self.cache, *args, kwargs)
354
+
355
+ def warm_all_strategies(self):
356
+ """Warm cache using all registered strategies."""
357
+ for name, warm_func in self.warming_strategies.items():
358
+ try:
359
+ warm_func(self.cache)
360
+ except Exception as e:
361
+ print(f"Cache warming failed for {name}: {e}")
362
+
363
+ # Example usage
364
+ @SmartCache(max_memory_mb=50).cache.cache_result(ttl=1800)
365
+ def expensive_computation(data: Dict) -> Dict:
366
+ """Example function with caching."""
367
+ # Simulate expensive operation
368
+ time.sleep(0.1)
369
+ return {"result": sum(data.values()), "timestamp": time.time()}
370
+
371
+ def cache_warming_example(cache: DataCache):
372
+ """Example cache warming function."""
373
+ # Pre-load common data
374
+ common_data = [
375
+ {"a": 1, "b": 2},
376
+ {"x": 10, "y": 20},
377
+ {"p": 100, "q": 200}
378
+ ]
379
+
380
+ for data in common_data:
381
+ cache.cache.cache[f"computation_{hash(str(data))}"] = {
382
+ 'result': {"result": sum(data.values()), "timestamp": time.time()},
383
+ 'timestamp': time.time()
384
+ }
385
+ ```
386
+
387
+ ## Performance Monitoring
388
+
389
+ ```python
390
+ class PerformanceMonitor:
391
+ """Monitor cache and data processing performance."""
392
+
393
+ def __init__(self):
394
+ self.metrics = {
395
+ 'cache_hits': 0,
396
+ 'cache_misses': 0,
397
+ 'operation_times': {},
398
+ 'memory_usage': []
399
+ }
400
+
401
+ def record_cache_hit(self):
402
+ """Record a cache hit."""
403
+ self.metrics['cache_hits'] += 1
404
+
405
+ def record_cache_miss(self):
406
+ """Record a cache miss."""
407
+ self.metrics['cache_misses'] += 1
408
+
409
+ def time_operation(self, operation_name: str):
410
+ """Decorator to time operations."""
411
+ def decorator(func):
412
+ @wraps(func)
413
+ def wrapper(*args, kwargs):
414
+ start_time = time.time()
415
+ result = func(*args, kwargs)
416
+ duration = time.time() - start_time
417
+
418
+ if operation_name not in self.metrics['operation_times']:
419
+ self.metrics['operation_times'][operation_name] = []
420
+ self.metrics['operation_times'][operation_name].append(duration)
421
+
422
+ return result
423
+ return wrapper
424
+ return decorator
425
+
426
+ def get_cache_hit_rate(self) -> float:
427
+ """Calculate cache hit rate."""
428
+ total = self.metrics['cache_hits'] + self.metrics['cache_misses']
429
+ return self.metrics['cache_hits'] / total if total > 0 else 0.0
430
+
431
+ def get_performance_report(self) -> Dict[str, Any]:
432
+ """Get comprehensive performance report."""
433
+ report = {
434
+ 'cache_hit_rate': self.get_cache_hit_rate(),
435
+ 'total_requests': self.metrics['cache_hits'] + self.metrics['cache_misses']
436
+ }
437
+
438
+ # Operation statistics
439
+ for op_name, times in self.metrics['operation_times'].items():
440
+ report[f'{op_name}_avg_time'] = sum(times) / len(times)
441
+ report[f'{op_name}_max_time'] = max(times)
442
+ report[f'{op_name}_min_time'] = min(times)
443
+
444
+ return report
445
+ ```
446
+
447
+ ## Best Practices
448
+
449
+ 1. Use multi-level caching: Memory + persistent storage
450
+ 2. Implement smart eviction: LRU with memory pressure awareness
451
+ 3. Tag-based invalidation: Group related cache entries
452
+ 4. Monitor performance: Track hit rates and operation times
453
+ 5. Warm caches strategically: Pre-load predictable data
454
+ 6. Set appropriate TTLs: Balance freshness and performance
455
+
456
+ ---
457
+
458
+ Module: `modules/caching-performance.md`
459
+ Related: [JSON Optimization](./json-optimization.md) | [TOON Encoding](./toon-encoding.md)