moai-adk 0.35.1__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 (502) hide show
  1. moai_adk/__init__.py +10 -0
  2. moai_adk/__main__.py +199 -0
  3. moai_adk/cli/__init__.py +6 -0
  4. moai_adk/cli/commands/__init__.py +17 -0
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +272 -0
  7. moai_adk/cli/commands/init.py +372 -0
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +104 -0
  10. moai_adk/cli/commands/update.py +2686 -0
  11. moai_adk/cli/main.py +13 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +219 -0
  14. moai_adk/cli/spec_status.py +263 -0
  15. moai_adk/cli/ui/__init__.py +44 -0
  16. moai_adk/cli/ui/progress.py +422 -0
  17. moai_adk/cli/ui/prompts.py +389 -0
  18. moai_adk/cli/ui/theme.py +129 -0
  19. moai_adk/cli/worktree/__init__.py +27 -0
  20. moai_adk/cli/worktree/__main__.py +31 -0
  21. moai_adk/cli/worktree/cli.py +683 -0
  22. moai_adk/cli/worktree/exceptions.py +89 -0
  23. moai_adk/cli/worktree/manager.py +493 -0
  24. moai_adk/cli/worktree/models.py +65 -0
  25. moai_adk/cli/worktree/registry.py +422 -0
  26. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  27. moai_adk/core/__init__.py +1 -0
  28. moai_adk/core/analysis/__init__.py +9 -0
  29. moai_adk/core/analysis/session_analyzer.py +400 -0
  30. moai_adk/core/claude_integration.py +393 -0
  31. moai_adk/core/command_helpers.py +270 -0
  32. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  33. moai_adk/core/config/__init__.py +19 -0
  34. moai_adk/core/config/auto_spec_config.py +340 -0
  35. moai_adk/core/config/migration.py +244 -0
  36. moai_adk/core/config/unified.py +436 -0
  37. moai_adk/core/context_manager.py +273 -0
  38. moai_adk/core/diagnostics/__init__.py +19 -0
  39. moai_adk/core/diagnostics/slash_commands.py +159 -0
  40. moai_adk/core/enterprise_features.py +1404 -0
  41. moai_adk/core/error_recovery_system.py +1902 -0
  42. moai_adk/core/event_driven_hook_system.py +1371 -0
  43. moai_adk/core/git/__init__.py +31 -0
  44. moai_adk/core/git/branch.py +25 -0
  45. moai_adk/core/git/branch_manager.py +129 -0
  46. moai_adk/core/git/checkpoint.py +134 -0
  47. moai_adk/core/git/commit.py +67 -0
  48. moai_adk/core/git/conflict_detector.py +413 -0
  49. moai_adk/core/git/event_detector.py +79 -0
  50. moai_adk/core/git/manager.py +216 -0
  51. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  52. moai_adk/core/input_validation_middleware.py +1006 -0
  53. moai_adk/core/integration/__init__.py +22 -0
  54. moai_adk/core/integration/engine.py +157 -0
  55. moai_adk/core/integration/integration_tester.py +226 -0
  56. moai_adk/core/integration/models.py +88 -0
  57. moai_adk/core/integration/utils.py +211 -0
  58. moai_adk/core/issue_creator.py +305 -0
  59. moai_adk/core/jit_context_loader.py +956 -0
  60. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  61. moai_adk/core/language_config.py +202 -0
  62. moai_adk/core/language_config_resolver.py +572 -0
  63. moai_adk/core/language_validator.py +543 -0
  64. moai_adk/core/mcp/setup.py +116 -0
  65. moai_adk/core/merge/__init__.py +9 -0
  66. moai_adk/core/merge/analyzer.py +605 -0
  67. moai_adk/core/migration/__init__.py +18 -0
  68. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  69. moai_adk/core/migration/backup_manager.py +277 -0
  70. moai_adk/core/migration/custom_element_scanner.py +358 -0
  71. moai_adk/core/migration/file_migrator.py +209 -0
  72. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  73. moai_adk/core/migration/selective_restorer.py +470 -0
  74. moai_adk/core/migration/template_utils.py +74 -0
  75. moai_adk/core/migration/user_selection_ui.py +338 -0
  76. moai_adk/core/migration/version_detector.py +139 -0
  77. moai_adk/core/migration/version_migrator.py +228 -0
  78. moai_adk/core/performance/__init__.py +6 -0
  79. moai_adk/core/performance/cache_system.py +316 -0
  80. moai_adk/core/performance/parallel_processor.py +116 -0
  81. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  82. moai_adk/core/project/__init__.py +1 -0
  83. moai_adk/core/project/backup_utils.py +70 -0
  84. moai_adk/core/project/checker.py +300 -0
  85. moai_adk/core/project/detector.py +293 -0
  86. moai_adk/core/project/initializer.py +387 -0
  87. moai_adk/core/project/phase_executor.py +716 -0
  88. moai_adk/core/project/validator.py +139 -0
  89. moai_adk/core/quality/__init__.py +6 -0
  90. moai_adk/core/quality/trust_checker.py +377 -0
  91. moai_adk/core/quality/validators/__init__.py +6 -0
  92. moai_adk/core/quality/validators/base_validator.py +19 -0
  93. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  94. moai_adk/core/robust_json_parser.py +611 -0
  95. moai_adk/core/rollback_manager.py +918 -0
  96. moai_adk/core/session_manager.py +651 -0
  97. moai_adk/core/skill_loading_system.py +579 -0
  98. moai_adk/core/spec/confidence_scoring.py +680 -0
  99. moai_adk/core/spec/ears_template_engine.py +1247 -0
  100. moai_adk/core/spec/quality_validator.py +687 -0
  101. moai_adk/core/spec_status_manager.py +478 -0
  102. moai_adk/core/template/__init__.py +7 -0
  103. moai_adk/core/template/backup.py +174 -0
  104. moai_adk/core/template/config.py +191 -0
  105. moai_adk/core/template/languages.py +43 -0
  106. moai_adk/core/template/merger.py +233 -0
  107. moai_adk/core/template/processor.py +1200 -0
  108. moai_adk/core/template_engine.py +310 -0
  109. moai_adk/core/template_variable_synchronizer.py +417 -0
  110. moai_adk/core/unified_permission_manager.py +745 -0
  111. moai_adk/core/user_behavior_analytics.py +851 -0
  112. moai_adk/core/version_sync.py +429 -0
  113. moai_adk/foundation/__init__.py +56 -0
  114. moai_adk/foundation/backend.py +1027 -0
  115. moai_adk/foundation/database.py +1115 -0
  116. moai_adk/foundation/devops.py +1585 -0
  117. moai_adk/foundation/ears.py +431 -0
  118. moai_adk/foundation/frontend.py +870 -0
  119. moai_adk/foundation/git/commit_templates.py +557 -0
  120. moai_adk/foundation/git.py +376 -0
  121. moai_adk/foundation/langs.py +484 -0
  122. moai_adk/foundation/ml_ops.py +1162 -0
  123. moai_adk/foundation/testing.py +1524 -0
  124. moai_adk/foundation/trust/trust_principles.py +676 -0
  125. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  126. moai_adk/project/__init__.py +0 -0
  127. moai_adk/project/configuration.py +1084 -0
  128. moai_adk/project/documentation.py +566 -0
  129. moai_adk/project/schema.py +447 -0
  130. moai_adk/statusline/__init__.py +38 -0
  131. moai_adk/statusline/alfred_detector.py +105 -0
  132. moai_adk/statusline/config.py +376 -0
  133. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  134. moai_adk/statusline/git_collector.py +190 -0
  135. moai_adk/statusline/main.py +322 -0
  136. moai_adk/statusline/metrics_tracker.py +78 -0
  137. moai_adk/statusline/renderer.py +343 -0
  138. moai_adk/statusline/update_checker.py +129 -0
  139. moai_adk/statusline/version_reader.py +741 -0
  140. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
  141. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  142. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  143. moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
  144. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  145. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  146. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  147. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  148. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  149. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  150. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  151. moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
  152. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  153. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  154. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  155. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  156. moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
  157. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  158. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  159. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  160. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  161. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  164. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  165. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  166. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  167. moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
  168. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  169. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  170. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  171. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  172. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  173. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  185. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  186. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  187. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  188. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  189. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
  190. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  191. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  192. moai_adk/templates/.claude/settings.json +172 -0
  193. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
  194. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  195. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  196. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  200. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  201. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  202. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  203. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  204. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  205. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
  206. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  207. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  210. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  211. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  212. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  213. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  214. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  215. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
  216. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  217. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  221. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  222. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  223. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  224. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  230. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  231. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  232. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  284. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
  285. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
  286. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  287. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  288. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  289. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  290. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
  291. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  292. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  293. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
  294. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  295. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
  297. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  298. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
  304. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
  305. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
  306. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  307. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  308. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
  309. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  310. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  311. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
  312. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  313. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  314. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
  315. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  316. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  318. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  319. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  320. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  321. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  331. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  332. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  333. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  334. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  338. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  339. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  340. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  341. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  342. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  343. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  344. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  345. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  346. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
  347. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  348. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  349. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  350. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  351. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  352. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  353. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  354. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  355. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  356. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  357. moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
  358. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
  359. moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
  360. moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
  361. moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
  362. moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
  363. moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
  364. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
  365. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
  366. moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
  367. moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
  368. moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
  369. moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
  370. moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
  371. moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
  372. moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
  373. moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
  374. moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
  375. moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
  376. moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
  377. moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
  378. moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
  379. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
  380. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
  381. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
  382. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
  383. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
  384. moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
  385. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
  386. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
  387. moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
  388. moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
  389. moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
  390. moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
  391. moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  433. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  458. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  459. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  460. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  461. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  462. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  463. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  464. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  465. moai_adk/templates/.git-hooks/pre-commit +128 -0
  466. moai_adk/templates/.git-hooks/pre-push +365 -0
  467. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  468. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  469. moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
  470. moai_adk/templates/.gitignore +222 -0
  471. moai_adk/templates/.mcp.json +13 -0
  472. moai_adk/templates/.moai/config/config.yaml +58 -0
  473. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  474. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  475. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  476. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  477. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  478. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
  479. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  480. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  481. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  482. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  483. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  484. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  485. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  486. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  487. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  488. moai_adk/templates/CLAUDE.md +642 -0
  489. moai_adk/utils/__init__.py +30 -0
  490. moai_adk/utils/banner.py +38 -0
  491. moai_adk/utils/common.py +294 -0
  492. moai_adk/utils/link_validator.py +241 -0
  493. moai_adk/utils/logger.py +147 -0
  494. moai_adk/utils/safe_file_reader.py +206 -0
  495. moai_adk/utils/timeout.py +160 -0
  496. moai_adk/utils/toon_utils.py +256 -0
  497. moai_adk/version.py +22 -0
  498. moai_adk-0.35.1.dist-info/METADATA +3018 -0
  499. moai_adk-0.35.1.dist-info/RECORD +502 -0
  500. moai_adk-0.35.1.dist-info/WHEEL +4 -0
  501. moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
  502. moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,1234 @@
1
+ # Performance Optimization with Real-time Profiling
2
+
3
+ > Module: Real-time performance profiling, bottleneck detection, and optimization strategies
4
+ > Complexity: Advanced
5
+ > Time: 30+ minutes
6
+ > Dependencies: Python 3.8+, cProfile, memory_profiler, psutil, Context7 MCP, asyncio
7
+
8
+ ## Core Implementation
9
+
10
+ ### PerformanceProfiler Class
11
+
12
+ ```python
13
+ import cProfile
14
+ import pstats
15
+ import io
16
+ import time
17
+ import threading
18
+ import asyncio
19
+ from typing import Dict, List, Optional, Any, Union, Callable
20
+ from dataclasses import dataclass, field
21
+ from enum import Enum
22
+ import psutil
23
+ import memory_profiler
24
+ import line_profiler
25
+ from collections import defaultdict, deque
26
+ import json
27
+ import sys
28
+ import tracemalloc
29
+ import resource
30
+
31
+ class PerformanceMetric(Enum):
32
+ """Types of performance metrics to track."""
33
+ CPU_TIME = "cpu_time"
34
+ WALL_TIME = "wall_time"
35
+ MEMORY_USAGE = "memory_usage"
36
+ MEMORY_PEAK = "memory_peak"
37
+ FUNCTION_CALLS = "function_calls"
38
+ EXECUTION_COUNT = "execution_count"
39
+ AVERAGE_TIME = "average_time"
40
+ MAX_TIME = "max_time"
41
+ MIN_TIME = "min_time"
42
+
43
+ class OptimizationType(Enum):
44
+ """Types of performance optimizations."""
45
+ ALGORITHM_IMPROVEMENT = "algorithm_improvement"
46
+ CACHING = "caching"
47
+ CONCURRENCY = "concurrency"
48
+ MEMORY_OPTIMIZATION = "memory_optimization"
49
+ I/O_OPTIMIZATION = "io_optimization"
50
+ DATABASE_OPTIMIZATION = "database_optimization"
51
+ DATA_STRUCTURE_CHANGE = "data_structure_change"
52
+
53
+ @dataclass
54
+ class PerformanceSnapshot:
55
+ """Snapshot of performance metrics at a point in time."""
56
+ timestamp: float
57
+ cpu_percent: float
58
+ memory_mb: float
59
+ memory_percent: float
60
+ open_files: int
61
+ threads: int
62
+ context_switches: int
63
+ custom_metrics: Dict[str, float] = field(default_factory=dict)
64
+
65
+ @dataclass
66
+ class FunctionProfile:
67
+ """Detailed profile information for a function."""
68
+ name: str
69
+ file_path: str
70
+ line_number: int
71
+ total_time: float
72
+ cumulative_time: float
73
+ call_count: int
74
+ per_call_time: float
75
+ cummulative_per_call_time: float
76
+ memory_before: float
77
+ memory_after: float
78
+ memory_delta: float
79
+ optimization_suggestions: List[str] = field(default_factory=list)
80
+
81
+ @dataclass
82
+ class PerformanceBottleneck:
83
+ """Identified performance bottleneck with analysis."""
84
+ function_name: str
85
+ file_path: str
86
+ line_number: int
87
+ bottleneck_type: str # "cpu", "memory", "io", "algorithm"
88
+ severity: str # "low", "medium", "high", "critical"
89
+ impact_score: float # 0.0 to 1.0
90
+ description: str
91
+ metrics: Dict[str, float]
92
+ optimization_type: OptimizationType
93
+ suggested_fixes: List[str]
94
+ estimated_improvement: str
95
+ code_snippet: str
96
+
97
+ @dataclass
98
+ class OptimizationPlan:
99
+ """Comprehensive optimization plan with prioritized actions."""
100
+ bottlenecks: List[PerformanceBottleneck]
101
+ execution_order: List[int]
102
+ estimated_total_improvement: str
103
+ implementation_complexity: str
104
+ risk_level: str
105
+ prerequisites: List[str]
106
+ validation_strategy: str
107
+
108
+ class RealTimeMonitor:
109
+ """Real-time performance monitoring system."""
110
+
111
+ def __init__(self, sampling_interval: float = 1.0):
112
+ self.sampling_interval = sampling_interval
113
+ self.is_monitoring = False
114
+ self.monitor_thread = None
115
+ self.snapshots = deque(maxlen=1000) # Keep last 1000 snapshots
116
+ self.callbacks = []
117
+ self.alerts = []
118
+
119
+ def start_monitoring(self):
120
+ """Start real-time performance monitoring."""
121
+ if self.is_monitoring:
122
+ return
123
+
124
+ self.is_monitoring = True
125
+ self.monitor_thread = threading.Thread(target=self._monitor_loop, daemon=True)
126
+ self.monitor_thread.start()
127
+
128
+ def stop_monitoring(self):
129
+ """Stop real-time performance monitoring."""
130
+ self.is_monitoring = False
131
+ if self.monitor_thread:
132
+ self.monitor_thread.join(timeout=2.0)
133
+
134
+ def _monitor_loop(self):
135
+ """Main monitoring loop."""
136
+ process = psutil.Process()
137
+
138
+ while self.is_monitoring:
139
+ try:
140
+ # Collect system metrics
141
+ snapshot = PerformanceSnapshot(
142
+ timestamp=time.time(),
143
+ cpu_percent=process.cpu_percent(),
144
+ memory_mb=process.memory_info().rss / 1024 / 1024,
145
+ memory_percent=process.memory_percent(),
146
+ open_files=len(process.open_files()),
147
+ threads=process.num_threads(),
148
+ context_switches=process.num_ctx_switches().voluntary + process.num_ctx_switches().involuntary
149
+ )
150
+
151
+ # Check for custom metrics callbacks
152
+ for callback in self.callbacks:
153
+ try:
154
+ custom_metrics = callback()
155
+ snapshot.custom_metrics.update(custom_metrics)
156
+ except Exception as e:
157
+ print(f"Custom metric callback error: {e}")
158
+
159
+ self.snapshots.append(snapshot)
160
+
161
+ # Check for alerts
162
+ self._check_alerts(snapshot)
163
+
164
+ time.sleep(self.sampling_interval)
165
+
166
+ except Exception as e:
167
+ print(f"Monitoring error: {e}")
168
+ time.sleep(self.sampling_interval)
169
+
170
+ def add_callback(self, callback: Callable[[], Dict[str, float]]):
171
+ """Add custom metric collection callback."""
172
+ self.callbacks.append(callback)
173
+
174
+ def _check_alerts(self, snapshot: PerformanceSnapshot):
175
+ """Check for performance alerts."""
176
+ alerts = []
177
+
178
+ # CPU usage alert
179
+ if snapshot.cpu_percent > 90:
180
+ alerts.append({
181
+ 'type': 'high_cpu',
182
+ 'message': f"High CPU usage: {snapshot.cpu_percent:.1f}%",
183
+ 'timestamp': snapshot.timestamp
184
+ })
185
+
186
+ # Memory usage alert
187
+ if snapshot.memory_percent > 85:
188
+ alerts.append({
189
+ 'type': 'high_memory',
190
+ 'message': f"High memory usage: {snapshot.memory_percent:.1f}%",
191
+ 'timestamp': snapshot.timestamp
192
+ })
193
+
194
+ # File handle alert
195
+ if snapshot.open_files > 1000:
196
+ alerts.append({
197
+ 'type': 'file_handle_leak',
198
+ 'message': f"High number of open files: {snapshot.open_files}",
199
+ 'timestamp': snapshot.timestamp
200
+ })
201
+
202
+ self.alerts.extend(alerts)
203
+
204
+ def get_recent_snapshots(self, count: int = 100) -> List[PerformanceSnapshot]:
205
+ """Get recent performance snapshots."""
206
+ return list(self.snapshots)[-count:]
207
+
208
+ def get_average_metrics(self, duration_minutes: int = 5) -> Dict[str, float]:
209
+ """Get average metrics over specified duration."""
210
+ cutoff_time = time.time() - (duration_minutes * 60)
211
+ recent_snapshots = [s for s in self.snapshots if s.timestamp >= cutoff_time]
212
+
213
+ if not recent_snapshots:
214
+ return {}
215
+
216
+ return {
217
+ 'avg_cpu_percent': sum(s.cpu_percent for s in recent_snapshots) / len(recent_snapshots),
218
+ 'avg_memory_mb': sum(s.memory_mb for s in recent_snapshots) / len(recent_snapshots),
219
+ 'avg_memory_percent': sum(s.memory_percent for s in recent_snapshots) / len(recent_snapshots),
220
+ 'avg_open_files': sum(s.open_files for s in recent_snapshots) / len(recent_snapshots),
221
+ 'avg_threads': sum(s.threads for s in recent_snapshots) / len(recent_snapshots),
222
+ }
223
+
224
+ class PerformanceProfiler:
225
+ """Advanced performance profiler with bottleneck detection."""
226
+
227
+ def __init__(self, context7_client=None):
228
+ self.context7 = context7_client
229
+ self.profiler = None
230
+ self.memory_profiler = None
231
+ self.line_profiler = None
232
+ self.realtime_monitor = RealTimeMonitor()
233
+ self.profiles = {}
234
+ self.bottlenecks = []
235
+
236
+ def start_profiling(self, profile_types: List[str] = None):
237
+ """Start performance profiling with specified types."""
238
+ if profile_types is None:
239
+ profile_types = ['cpu', 'memory']
240
+
241
+ # Start CPU profiling
242
+ if 'cpu' in profile_types:
243
+ self.profiler = cProfile.Profile()
244
+ self.profiler.enable()
245
+
246
+ # Start memory profiling
247
+ if 'memory' in profile_types:
248
+ tracemalloc.start()
249
+ self.memory_profiler = memory_profiler.Profile()
250
+
251
+ # Start line profiling for specific functions
252
+ if 'line' in profile_types:
253
+ self.line_profiler = line_profiler.LineProfiler()
254
+ self.line_profiler.enable_by_count()
255
+
256
+ # Start real-time monitoring
257
+ self.realtime_monitor.start_monitoring()
258
+
259
+ def stop_profiling(self) -> Dict[str, Any]:
260
+ """Stop profiling and collect results."""
261
+ results = {}
262
+
263
+ # Stop CPU profiling
264
+ if self.profiler:
265
+ self.profiler.disable()
266
+ results['cpu_profile'] = self._analyze_cpu_profile()
267
+
268
+ # Stop memory profiling
269
+ if tracemalloc.is_tracing():
270
+ current, peak = tracemalloc.get_traced_memory()
271
+ tracemalloc.stop()
272
+ results['memory_profile'] = {
273
+ 'current_mb': current / 1024 / 1024,
274
+ 'peak_mb': peak / 1024 / 1024
275
+ }
276
+
277
+ if self.memory_profiler:
278
+ self.memory_profiler.disable()
279
+ results['memory_line_profile'] = self._analyze_memory_profile()
280
+
281
+ # Stop line profiling
282
+ if self.line_profiler:
283
+ self.line_profiler.disable()
284
+ results['line_profile'] = self._analyze_line_profile()
285
+
286
+ # Stop real-time monitoring
287
+ self.realtime_monitor.stop_monitoring()
288
+ results['realtime_metrics'] = self.realtime_monitor.get_average_metrics()
289
+
290
+ return results
291
+
292
+ def _analyze_cpu_profile(self) -> List[FunctionProfile]:
293
+ """Analyze CPU profiling results."""
294
+ if not self.profiler:
295
+ return []
296
+
297
+ # Create stats object
298
+ s = io.StringIO()
299
+ ps = pstats.Stats(self.profiler, stream=s)
300
+ ps.sort_stats('cumulative')
301
+ ps.print_stats()
302
+
303
+ # Parse the stats
304
+ function_profiles = []
305
+ lines = s.getvalue().split('\n')
306
+
307
+ # Skip header lines
308
+ for line in lines[6:]:
309
+ if line.strip() and not line.startswith('ncalls'):
310
+ try:
311
+ parts = line.split()
312
+ if len(parts) >= 6:
313
+ ncalls = parts[0]
314
+ tottime = float(parts[1])
315
+ cumtime = float(parts[3])
316
+
317
+ # Extract function name and location
318
+ filename_func = ' '.join(parts[5:])
319
+ if '{' in filename_func:
320
+ filename, line_num, func_name = self._parse_function_line(filename_func)
321
+ else:
322
+ continue
323
+
324
+ # Convert ncalls to integer (handle format like "1000/1000")
325
+ if '/' in ncalls:
326
+ ncalls = int(ncalls.split('/')[0])
327
+ else:
328
+ ncalls = int(ncalls)
329
+
330
+ profile = FunctionProfile(
331
+ name=func_name,
332
+ file_path=filename,
333
+ line_number=int(line_num),
334
+ total_time=tottime,
335
+ cumulative_time=cumtime,
336
+ call_count=ncalls,
337
+ per_call_time=tottime / max(ncalls, 1),
338
+ cummulative_per_call_time=cumtime / max(ncalls, 1),
339
+ memory_before=0.0, # Will be filled by memory profiler
340
+ memory_after=0.0,
341
+ memory_delta=0.0
342
+ )
343
+ function_profiles.append(profile)
344
+
345
+ except (ValueError, IndexError) as e:
346
+ continue
347
+
348
+ return function_profiles
349
+
350
+ def _parse_function_line(self, line: str) -> tuple:
351
+ """Parse function line from pstats output."""
352
+ # Format: "filename(line_number)function_name"
353
+ try:
354
+ paren_idx = line.rfind('(')
355
+ if paren_idx == -1:
356
+ return line, "0", "unknown"
357
+
358
+ filename = line[:paren_idx]
359
+ rest = line[paren_idx:]
360
+
361
+ closing_idx = rest.find(')')
362
+ if closing_idx == -1:
363
+ return filename, "0", "unknown"
364
+
365
+ line_num = rest[1:closing_idx]
366
+ func_name = rest[closing_idx + 1:]
367
+
368
+ return filename, line_num, func_name
369
+ except Exception:
370
+ return line, "0", "unknown"
371
+
372
+ def _analyze_memory_profile(self) -> Dict[str, Any]:
373
+ """Analyze memory profiling results."""
374
+ if not self.memory_profiler:
375
+ return {}
376
+
377
+ # Get memory profile statistics
378
+ stats = self.memory_profiler.get_stats()
379
+
380
+ return {
381
+ 'total_samples': len(stats),
382
+ 'max_memory_usage': max((stat[2] for stat in stats), default=0),
383
+ 'memory_by_function': self._group_memory_by_function(stats)
384
+ }
385
+
386
+ def _group_memory_by_function(self, stats: List) -> Dict[str, float]:
387
+ """Group memory usage by function."""
388
+ memory_by_function = defaultdict(float)
389
+
390
+ for stat in stats:
391
+ filename, line_no, mem_usage = stat
392
+ # Extract function name from filename and line
393
+ func_key = f"{filename}:{line_no}"
394
+ memory_by_function[func_key] += mem_usage
395
+
396
+ return dict(memory_by_function)
397
+
398
+ def _analyze_line_profile(self) -> Dict[str, Any]:
399
+ """Analyze line profiling results."""
400
+ if not self.line_profiler:
401
+ return {}
402
+
403
+ # Get line profiler statistics
404
+ stats = self.line_profiler.get_stats()
405
+
406
+ return {
407
+ 'timings': stats.timings,
408
+ 'unit': stats.unit
409
+ }
410
+
411
+ async def detect_bottlenecks(
412
+ self, profile_results: Dict[str, Any],
413
+ context7_patterns: Dict[str, Any] = None
414
+ ) -> List[PerformanceBottleneck]:
415
+ """Detect performance bottlenecks from profiling results."""
416
+
417
+ bottlenecks = []
418
+
419
+ # Analyze CPU bottlenecks
420
+ if 'cpu_profile' in profile_results:
421
+ cpu_bottlenecks = await self._detect_cpu_bottlenecks(
422
+ profile_results['cpu_profile'], context7_patterns
423
+ )
424
+ bottlenecks.extend(cpu_bottlenecks)
425
+
426
+ # Analyze memory bottlenecks
427
+ if 'memory_profile' in profile_results:
428
+ memory_bottlenecks = await self._detect_memory_bottlenecks(
429
+ profile_results['memory_profile'], context7_patterns
430
+ )
431
+ bottlenecks.extend(memory_bottlenecks)
432
+
433
+ # Analyze real-time metrics
434
+ if 'realtime_metrics' in profile_results:
435
+ realtime_bottlenecks = await self._detect_realtime_bottlenecks(
436
+ profile_results['realtime_metrics'], context7_patterns
437
+ )
438
+ bottlenecks.extend(realtime_bottlenecks)
439
+
440
+ # Sort by impact score
441
+ bottlenecks.sort(key=lambda x: x.impact_score, reverse=True)
442
+ return bottlenecks
443
+
444
+ async def _detect_cpu_bottlenecks(
445
+ self, cpu_profiles: List[FunctionProfile],
446
+ context7_patterns: Dict[str, Any] = None
447
+ ) -> List[PerformanceBottleneck]:
448
+ """Detect CPU-related bottlenecks."""
449
+
450
+ bottlenecks = []
451
+ total_cpu_time = sum(p.cumulative_time for p in cpu_profiles)
452
+
453
+ for profile in cpu_profiles:
454
+ # Skip functions with very low total time
455
+ if profile.cumulative_time < 0.01:
456
+ continue
457
+
458
+ # Calculate impact score
459
+ impact_score = profile.cumulative_time / max(total_cpu_time, 0.001)
460
+
461
+ # Determine severity
462
+ if impact_score > 0.5:
463
+ severity = "critical"
464
+ elif impact_score > 0.2:
465
+ severity = "high"
466
+ elif impact_score > 0.1:
467
+ severity = "medium"
468
+ else:
469
+ severity = "low"
470
+
471
+ # Get code snippet
472
+ code_snippet = self._get_code_snippet(profile.file_path, profile.line_number)
473
+
474
+ # Generate optimization suggestions
475
+ optimization_type, suggestions, estimated_improvement = await self._generate_cpu_optimization_suggestions(
476
+ profile, context7_patterns
477
+ )
478
+
479
+ bottleneck = PerformanceBottleneck(
480
+ function_name=profile.name,
481
+ file_path=profile.file_path,
482
+ line_number=profile.line_number,
483
+ bottleneck_type="cpu",
484
+ severity=severity,
485
+ impact_score=impact_score,
486
+ description=f"Function '{profile.name}' consumes {impact_score:.1%} of total CPU time",
487
+ metrics={
488
+ 'cumulative_time': profile.cumulative_time,
489
+ 'total_time': profile.total_time,
490
+ 'call_count': profile.call_count,
491
+ 'per_call_time': profile.per_call_time
492
+ },
493
+ optimization_type=optimization_type,
494
+ suggested_fixes=suggestions,
495
+ estimated_improvement=estimated_improvement,
496
+ code_snippet=code_snippet
497
+ )
498
+ bottlenecks.append(bottleneck)
499
+
500
+ return bottlenecks
501
+
502
+ async def _detect_memory_bottlenecks(
503
+ self, memory_profile: Dict[str, Any],
504
+ context7_patterns: Dict[str, Any] = None
505
+ ) -> List[PerformanceBottleneck]:
506
+ """Detect memory-related bottlenecks."""
507
+
508
+ bottlenecks = []
509
+
510
+ if 'memory_line_profile' in memory_profile:
511
+ memory_by_function = memory_profile['memory_line_profile'].get('memory_by_function', {})
512
+
513
+ if memory_by_function:
514
+ max_memory = max(memory_by_function.values())
515
+
516
+ for func_key, memory_usage in memory_by_function.items():
517
+ # Skip very small memory usage
518
+ if memory_usage < 1024 * 1024: # 1MB
519
+ continue
520
+
521
+ # Calculate impact score
522
+ impact_score = memory_usage / max(max_memory, 1)
523
+
524
+ # Determine severity
525
+ if impact_score > 0.7:
526
+ severity = "critical"
527
+ elif impact_score > 0.4:
528
+ severity = "high"
529
+ elif impact_score > 0.2:
530
+ severity = "medium"
531
+ else:
532
+ severity = "low"
533
+
534
+ # Extract file path and line number
535
+ if ':' in func_key:
536
+ file_path, line_num = func_key.split(':', 1)
537
+ line_number = int(line_num)
538
+ else:
539
+ continue
540
+
541
+ # Get code snippet
542
+ code_snippet = self._get_code_snippet(file_path, line_number)
543
+
544
+ # Generate optimization suggestions
545
+ optimization_type, suggestions, estimated_improvement = await self._generate_memory_optimization_suggestions(
546
+ memory_usage, context7_patterns
547
+ )
548
+
549
+ bottleneck = PerformanceBottleneck(
550
+ function_name=f"Function at {func_key}",
551
+ file_path=file_path,
552
+ line_number=line_number,
553
+ bottleneck_type="memory",
554
+ severity=severity,
555
+ impact_score=impact_score,
556
+ description=f"High memory usage: {memory_usage / 1024 / 1024:.1f}MB",
557
+ metrics={
558
+ 'memory_usage_mb': memory_usage / 1024 / 1024,
559
+ 'impact_score': impact_score
560
+ },
561
+ optimization_type=optimization_type,
562
+ suggested_fixes=suggestions,
563
+ estimated_improvement=estimated_improvement,
564
+ code_snippet=code_snippet
565
+ )
566
+ bottlenecks.append(bottleneck)
567
+
568
+ return bottlenecks
569
+
570
+ async def _detect_realtime_bottlenecks(
571
+ self, realtime_metrics: Dict[str, Any],
572
+ context7_patterns: Dict[str, Any] = None
573
+ ) -> List[PerformanceBottleneck]:
574
+ """Detect bottlenecks from real-time monitoring."""
575
+
576
+ bottlenecks = []
577
+
578
+ # Check CPU usage
579
+ avg_cpu = realtime_metrics.get('avg_cpu_percent', 0)
580
+ if avg_cpu > 80:
581
+ bottleneck = PerformanceBottleneck(
582
+ function_name="System CPU Usage",
583
+ file_path="system",
584
+ line_number=0,
585
+ bottleneck_type="cpu",
586
+ severity="high" if avg_cpu > 90 else "medium",
587
+ impact_score=avg_cpu / 100.0,
588
+ description=f"High average CPU usage: {avg_cpu:.1f}%",
589
+ metrics={'avg_cpu_percent': avg_cpu},
590
+ optimization_type=OptimizationType.CONCURRENCY,
591
+ suggested_fixes=[
592
+ "Implement parallel processing",
593
+ "Optimize algorithms",
594
+ "Add caching for expensive operations"
595
+ ],
596
+ estimated_improvement="20-50% reduction in CPU usage",
597
+ code_snippet="# System-wide optimization required"
598
+ )
599
+ bottlenecks.append(bottleneck)
600
+
601
+ # Check memory usage
602
+ avg_memory = realtime_metrics.get('avg_memory_percent', 0)
603
+ if avg_memory > 75:
604
+ bottleneck = PerformanceBottleneck(
605
+ function_name="System Memory Usage",
606
+ file_path="system",
607
+ line_number=0,
608
+ bottleneck_type="memory",
609
+ severity="high" if avg_memory > 85 else "medium",
610
+ impact_score=avg_memory / 100.0,
611
+ description=f"High average memory usage: {avg_memory:.1f}%",
612
+ metrics={'avg_memory_percent': avg_memory},
613
+ optimization_type=OptimizationType.MEMORY_OPTIMIZATION,
614
+ suggested_fixes=[
615
+ "Implement memory pooling",
616
+ "Use generators instead of lists",
617
+ "Optimize data structures",
618
+ "Implement object caching with size limits"
619
+ ],
620
+ estimated_improvement="30-60% reduction in memory usage",
621
+ code_snippet="# System-wide memory optimization required"
622
+ )
623
+ bottlenecks.append(bottleneck)
624
+
625
+ return bottlenecks
626
+
627
+ async def _generate_cpu_optimization_suggestions(
628
+ self, profile: FunctionProfile,
629
+ context7_patterns: Dict[str, Any] = None
630
+ ) -> tuple:
631
+ """Generate CPU optimization suggestions for a function."""
632
+
633
+ suggestions = []
634
+ optimization_type = OptimizationType.ALGORITHM_IMPROVEMENT
635
+
636
+ # Analyze function characteristics
637
+ if profile.call_count > 10000 and profile.per_call_time > 0.001:
638
+ optimization_type = OptimizationType.CACHING
639
+ suggestions.extend([
640
+ "Implement memoization for expensive function calls",
641
+ "Add LRU cache for frequently called functions",
642
+ "Consider using functools.lru_cache"
643
+ ])
644
+ estimated_improvement = "50-90% for repeated calls"
645
+
646
+ elif profile.cumulative_time > 1.0 and profile.call_count > 100:
647
+ suggestions.extend([
648
+ "Analyze algorithm complexity",
649
+ "Look for O(n²) or worse operations",
650
+ "Consider using more efficient data structures"
651
+ ])
652
+ estimated_improvement = "20-80% depending on algorithm"
653
+
654
+ elif profile.call_count < 10 and profile.cumulative_time > 0.5:
655
+ suggestions.extend([
656
+ "Consider parallel processing for long-running operations",
657
+ "Implement asynchronous processing",
658
+ "Use multiprocessing for CPU-bound tasks"
659
+ ])
660
+ optimization_type = OptimizationType.CONCURRENCY
661
+ estimated_improvement = "30-70% with proper concurrency"
662
+
663
+ else:
664
+ suggestions.extend([
665
+ "Profile line-by-line to identify slow operations",
666
+ "Check for unnecessary loops or computations",
667
+ "Optimize string operations and regular expressions"
668
+ ])
669
+ estimated_improvement = "10-40% with micro-optimizations"
670
+
671
+ return optimization_type, suggestions, estimated_improvement
672
+
673
+ async def _generate_memory_optimization_suggestions(
674
+ self, memory_usage: int,
675
+ context7_patterns: Dict[str, Any] = None
676
+ ) -> tuple:
677
+ """Generate memory optimization suggestions."""
678
+
679
+ suggestions = []
680
+ optimization_type = OptimizationType.MEMORY_OPTIMIZATION
681
+
682
+ if memory_usage > 100 * 1024 * 1024: # 100MB
683
+ suggestions.extend([
684
+ "Implement streaming processing for large datasets",
685
+ "Use generators instead of creating large lists",
686
+ "Process data in chunks to reduce memory footprint"
687
+ ])
688
+ estimated_improvement = "60-90% memory reduction"
689
+
690
+ elif memory_usage > 10 * 1024 * 1024: # 10MB
691
+ suggestions.extend([
692
+ "Use memory-efficient data structures",
693
+ "Implement object pooling for frequently allocated objects",
694
+ "Consider using numpy arrays for numerical data"
695
+ ])
696
+ estimated_improvement = "30-60% memory reduction"
697
+
698
+ else:
699
+ suggestions.extend([
700
+ "Release unused objects explicitly",
701
+ "Use weak references for caching",
702
+ "Avoid circular references"
703
+ ])
704
+ estimated_improvement = "10-30% memory reduction"
705
+
706
+ return optimization_type, suggestions, estimated_improvement
707
+
708
+ def _get_code_snippet(self, file_path: str, line_number: int, context_lines: int = 5) -> str:
709
+ """Get code snippet around the specified line."""
710
+ try:
711
+ with open(file_path, 'r', encoding='utf-8') as f:
712
+ lines = f.readlines()
713
+
714
+ start_line = max(0, line_number - context_lines - 1)
715
+ end_line = min(len(lines), line_number + context_lines)
716
+
717
+ snippet_lines = []
718
+ for i in range(start_line, end_line):
719
+ marker = ">>> " if i == line_number - 1 else " "
720
+ snippet_lines.append(f"{marker}{i+1:4d}: {lines[i].rstrip()}")
721
+
722
+ return '\n'.join(snippet_lines)
723
+
724
+ except Exception:
725
+ return f"// Code not available for {file_path}:{line_number}"
726
+
727
+ async def create_optimization_plan(
728
+ self, bottlenecks: List[PerformanceBottleneck],
729
+ context7_patterns: Dict[str, Any] = None
730
+ ) -> OptimizationPlan:
731
+ """Create comprehensive optimization plan."""
732
+
733
+ # Prioritize bottlenecks by impact and severity
734
+ prioritized_bottlenecks = self._prioritize_bottlenecks(bottlenecks)
735
+
736
+ # Create execution order
737
+ execution_order = self._create_optimization_execution_order(prioritized_bottlenecks)
738
+
739
+ # Estimate total improvement
740
+ total_improvement = self._estimate_total_improvement(prioritized_bottlenecks)
741
+
742
+ # Assess implementation complexity
743
+ complexity = self._assess_implementation_complexity(prioritized_bottlenecks)
744
+
745
+ # Assess risk level
746
+ risk_level = self._assess_optimization_risk(prioritized_bottlenecks)
747
+
748
+ # Identify prerequisites
749
+ prerequisites = self._identify_optimization_prerequisites(prioritized_bottlenecks)
750
+
751
+ # Create validation strategy
752
+ validation_strategy = self._create_validation_strategy(prioritized_bottlenecks)
753
+
754
+ return OptimizationPlan(
755
+ bottlenecks=prioritized_bottlenecks,
756
+ execution_order=execution_order,
757
+ estimated_total_improvement=total_improvement,
758
+ implementation_complexity=complexity,
759
+ risk_level=risk_level,
760
+ prerequisites=prerequisites,
761
+ validation_strategy=validation_strategy
762
+ )
763
+
764
+ def _prioritize_bottlenecks(
765
+ self, bottlenecks: List[PerformanceBottleneck]
766
+ ) -> List[PerformanceBottleneck]:
767
+ """Prioritize bottlenecks by impact and implementation complexity."""
768
+
769
+ # Sort by severity, impact score, and optimization type
770
+ severity_order = {'critical': 4, 'high': 3, 'medium': 2, 'low': 1}
771
+
772
+ return sorted(
773
+ bottlenecks,
774
+ key=lambda x: (
775
+ severity_order.get(x.severity, 0),
776
+ x.impact_score,
777
+ self._get_optimization_priority(x.optimization_type)
778
+ ),
779
+ reverse=True
780
+ )
781
+
782
+ def _get_optimization_priority(self, opt_type: OptimizationType) -> int:
783
+ """Get priority weight for optimization type."""
784
+ priorities = {
785
+ OptimizationType.ALGORITHM_IMPROVEMENT: 4,
786
+ OptimizationType.CACHING: 3,
787
+ OptimizationType.CONCURRENCY: 3,
788
+ OptimizationType.MEMORY_OPTIMIZATION: 2,
789
+ OptimizationType.DATA_STRUCTURE_CHANGE: 2,
790
+ OptimizationType.I/O_OPTIMIZATION: 2,
791
+ OptimizationType.DATABASE_OPTIMIZATION: 1
792
+ }
793
+ return priorities.get(opt_type, 1)
794
+
795
+ def _create_optimization_execution_order(
796
+ self, bottlenecks: List[PerformanceBottleneck]
797
+ ) -> List[int]:
798
+ """Create optimal execution order for optimizations."""
799
+
800
+ # Group by optimization type
801
+ type_groups = defaultdict(list)
802
+ for i, bottleneck in enumerate(bottlenecks):
803
+ type_groups[bottleneck.optimization_type].append(i)
804
+
805
+ # Define execution order by type
806
+ execution_order = []
807
+ type_order = [
808
+ OptimizationType.ALGORITHM_IMPROVEMENT,
809
+ OptimizationType.DATA_STRUCTURE_CHANGE,
810
+ OptimizationType.CACHING,
811
+ OptimizationType.MEMORY_OPTIMIZATION,
812
+ OptimizationType.CONCURRENCY,
813
+ OptimizationType.I_IO_OPTIMIZATION,
814
+ OptimizationType.DATABASE_OPTIMIZATION
815
+ ]
816
+
817
+ for opt_type in type_order:
818
+ if opt_type in type_groups:
819
+ execution_order.extend(type_groups[opt_type])
820
+
821
+ return execution_order
822
+
823
+ def _estimate_total_improvement(
824
+ self, bottlenecks: List[PerformanceBottleneck]
825
+ ) -> str:
826
+ """Estimate total performance improvement."""
827
+
828
+ if not bottlenecks:
829
+ return "No significant improvement expected"
830
+
831
+ # Calculate weighted improvement
832
+ total_weighted_improvement = 0
833
+ total_weight = 0
834
+
835
+ for bottleneck in bottlenecks:
836
+ # Extract improvement percentage from description
837
+ improvement_range = self._parse_improvement_estimate(bottleneck.estimated_improvement)
838
+ if improvement_range:
839
+ avg_improvement = (improvement_range[0] + improvement_range[1]) / 2
840
+ weight = bottleneck.impact_score
841
+ total_weighted_improvement += avg_improvement * weight
842
+ total_weight += weight
843
+
844
+ if total_weight > 0:
845
+ avg_improvement = total_weighted_improvement / total_weight
846
+ return f"{avg_improvement:.0f}% average performance improvement"
847
+
848
+ return "Performance improvement depends on implementation"
849
+
850
+ def _parse_improvement_estimate(self, estimate: str) -> tuple:
851
+ """Parse improvement percentage from estimate string."""
852
+ import re
853
+
854
+ # Look for percentage ranges like "20-50%" or "30%"
855
+ match = re.search(r'(\d+)-?(\d+)?%', estimate)
856
+ if match:
857
+ start = int(match.group(1))
858
+ end = int(match.group(2)) if match.group(2) else start
859
+ return (start, end)
860
+
861
+ return None
862
+
863
+ def _assess_implementation_complexity(
864
+ self, bottlenecks: List[PerformanceBottleneck]
865
+ ) -> str:
866
+ """Assess overall implementation complexity."""
867
+
868
+ complexity_scores = {
869
+ OptimizationType.ALGORITHM_IMPROVEMENT: 3,
870
+ OptimizationType.DATA_STRUCTURE_CHANGE: 3,
871
+ OptimizationType.CONCURRENCY: 4,
872
+ OptimizationType.DATABASE_OPTIMIZATION: 3,
873
+ OptimizationType.CACHING: 2,
874
+ OptimizationType.MEMORY_OPTIMIZATION: 2,
875
+ OptimizationType.I_O_OPTIMIZATION: 2
876
+ }
877
+
878
+ if not bottlenecks:
879
+ return "low"
880
+
881
+ avg_complexity = sum(
882
+ complexity_scores.get(b.optimization_type, 2) * b.impact_score
883
+ for b in bottlenecks
884
+ ) / sum(b.impact_score for b in bottlenecks)
885
+
886
+ if avg_complexity > 3.5:
887
+ return "high"
888
+ elif avg_complexity > 2.5:
889
+ return "medium"
890
+ else:
891
+ return "low"
892
+
893
+ def _assess_optimization_risk(
894
+ self, bottlenecks: List[PerformanceBottleneck]
895
+ ) -> str:
896
+ """Assess risk level of optimizations."""
897
+
898
+ high_risk_types = {
899
+ OptimizationType.ALGORITHM_IMPROVEMENT,
900
+ OptimizationType.DATA_STRUCTURE_CHANGE,
901
+ OptimizationType.CONCURRENCY
902
+ }
903
+
904
+ high_risk_count = sum(
905
+ 1 for b in bottlenecks
906
+ if b.optimization_type in high_risk_types and b.impact_score > 0.3
907
+ )
908
+
909
+ if high_risk_count > 3:
910
+ return "high"
911
+ elif high_risk_count > 1:
912
+ return "medium"
913
+ else:
914
+ return "low"
915
+
916
+ def _identify_optimization_prerequisites(
917
+ self, bottlenecks: List[PerformanceBottleneck]
918
+ ) -> List[str]:
919
+ """Identify prerequisites for safe optimization."""
920
+
921
+ prerequisites = [
922
+ "Create comprehensive performance benchmarks",
923
+ "Ensure version control with current implementation",
924
+ "Set up performance testing environment"
925
+ ]
926
+
927
+ # Add specific prerequisites based on bottleneck types
928
+ optimization_types = set(b.optimization_type for b in bottlenecks)
929
+
930
+ if OptimizationType.CONCURRENCY in optimization_types:
931
+ prerequisites.extend([
932
+ "Review thread safety and shared resource access",
933
+ "Implement proper synchronization mechanisms"
934
+ ])
935
+
936
+ if OptimizationType.DATABASE_OPTIMIZATION in optimization_types:
937
+ prerequisites.extend([
938
+ "Create database backup before optimization",
939
+ "Set up database performance monitoring"
940
+ ])
941
+
942
+ if OptimizationType.ALGORITHM_IMPROVEMENT in optimization_types:
943
+ prerequisites.extend([
944
+ "Verify algorithm correctness with test suite",
945
+ "Compare against known reference implementations"
946
+ ])
947
+
948
+ return prerequisites
949
+
950
+ def _create_validation_strategy(
951
+ self, bottlenecks: List[PerformanceBottleneck]
952
+ ) -> str:
953
+ """Create validation strategy for optimizations."""
954
+
955
+ strategy = """
956
+ Validation Strategy:
957
+ 1. Baseline Performance Measurement
958
+ - Record current performance metrics
959
+ - Establish performance regression thresholds
960
+
961
+ 2. Incremental Testing
962
+ - Apply optimizations one at a time
963
+ - Measure performance impact after each change
964
+
965
+ 3. Automated Performance Testing
966
+ - Implement performance regression tests
967
+ - Set up continuous performance monitoring
968
+
969
+ 4. Functional Validation
970
+ - Run complete test suite after each optimization
971
+ - Verify no functional regressions introduced
972
+
973
+ 5. Production Monitoring
974
+ - Monitor performance in staging environment
975
+ - Gradual rollout with performance validation
976
+ """
977
+
978
+ return strategy
979
+
980
+ # Usage Examples
981
+ """
982
+ # Initialize performance profiler
983
+ profiler = PerformanceProfiler(context7_client=context7)
984
+
985
+ # Example function to profile
986
+ def expensive_function(n):
987
+ result = []
988
+ for i in range(n):
989
+ # Simulate expensive computation
990
+ temp = []
991
+ for j in range(i):
992
+ temp.append(j * j)
993
+ result.extend(temp)
994
+ return result
995
+
996
+ # Start profiling
997
+ profiler.start_profiling(['cpu', 'memory', 'line'])
998
+
999
+ # Add line profiler for specific function
1000
+ if profiler.line_profiler:
1001
+ profiler.line_profiler.add_function(expensive_function)
1002
+
1003
+ # Run the code to be profiled
1004
+ result = expensive_function(1000)
1005
+
1006
+ # Stop profiling and get results
1007
+ profile_results = profiler.stop_profiling()
1008
+
1009
+ # Detect bottlenecks
1010
+ bottlenecks = await profiler.detect_bottlenecks(profile_results)
1011
+
1012
+ print(f"Found {len(bottlenecks)} performance bottlenecks:")
1013
+ for bottleneck in bottlenecks[:5]: # Show top 5
1014
+ print(f"\nBottleneck: {bottleneck.function_name}")
1015
+ print(f" Type: {bottleneck.bottleneck_type}")
1016
+ print(f" Severity: {bottleneck.severity}")
1017
+ print(f" Impact: {bottleneck.impact_score:.2f}")
1018
+ print(f" Description: {bottleneck.description}")
1019
+ print(f" Optimization type: {bottleneck.optimization_type.value}")
1020
+ print(f" Suggested fixes:")
1021
+ for fix in bottleneck.suggested_fixes:
1022
+ print(f" - {fix}")
1023
+
1024
+ # Create optimization plan
1025
+ optimization_plan = await profiler.create_optimization_plan(bottlenecks)
1026
+
1027
+ print(f"\nOptimization Plan:")
1028
+ print(f" Estimated improvement: {optimization_plan.estimated_total_improvement}")
1029
+ print(f" Implementation complexity: {optimization_plan.implementation_complexity}")
1030
+ print(f" Risk level: {optimization_plan.risk_level}")
1031
+ print(f" Prerequisites: {len(optimization_plan.prerequisites)} items")
1032
+
1033
+ # Real-time monitoring example
1034
+ monitor = RealTimeMonitor(sampling_interval=0.5)
1035
+ monitor.start_monitoring()
1036
+
1037
+ # Add custom metrics callback
1038
+ def custom_metrics():
1039
+ return {
1040
+ 'custom_counter': some_global_counter,
1041
+ 'queue_size': len(some_queue)
1042
+ }
1043
+
1044
+ monitor.add_callback(custom_metrics)
1045
+
1046
+ # Run application while monitoring
1047
+ # ... your application code ...
1048
+
1049
+ # Stop monitoring and get results
1050
+ monitor.stop_monitoring()
1051
+ recent_snapshots = monitor.get_recent_snapshots(10)
1052
+ avg_metrics = monitor.get_average_metrics(5)
1053
+
1054
+ print(f"Average CPU: {avg_metrics.get('avg_cpu_percent', 0):.1f}%")
1055
+ print(f"Average Memory: {avg_metrics.get('avg_memory_mb', 0):.1f}MB")
1056
+ """
1057
+ ```
1058
+
1059
+ ## Advanced Features
1060
+
1061
+ ### Intelligent Performance Optimization
1062
+
1063
+ AI-Powered Optimization Suggestions:
1064
+ ```python
1065
+ class IntelligentOptimizer(PerformanceProfiler):
1066
+ """Optimizer that uses AI to suggest the best optimizations."""
1067
+
1068
+ def __init__(self, context7_client=None):
1069
+ super().__init__(context7_client)
1070
+ self.optimization_history = []
1071
+ self.performance_models = {}
1072
+
1073
+ async def get_ai_optimization_suggestions(
1074
+ self, bottlenecks: List[PerformanceBottleneck],
1075
+ codebase_context: Dict[str, Any]
1076
+ ) -> Dict[str, Any]:
1077
+ """Get AI-powered optimization suggestions using Context7."""
1078
+
1079
+ if not self.context7:
1080
+ return self._get_rule_based_suggestions(bottlenecks)
1081
+
1082
+ # Get latest performance optimization patterns
1083
+ try:
1084
+ optimization_patterns = await self.context7.get_library_docs(
1085
+ context7_library_id="/performance/python-profiling",
1086
+ topic="advanced performance optimization patterns 2025",
1087
+ tokens=5000
1088
+ )
1089
+
1090
+ # Get algorithm complexity patterns
1091
+ algorithm_patterns = await self.context7.get_library_docs(
1092
+ context7_library_id="/algorithms/python",
1093
+ topic="algorithm optimization big-O complexity reduction",
1094
+ tokens=3000
1095
+ )
1096
+
1097
+ # Generate AI suggestions
1098
+ ai_suggestions = await self._generate_ai_suggestions(
1099
+ bottlenecks, optimization_patterns, algorithm_patterns, codebase_context
1100
+ )
1101
+
1102
+ return ai_suggestions
1103
+
1104
+ except Exception as e:
1105
+ print(f"AI optimization failed: {e}")
1106
+ return self._get_rule_based_suggestions(bottlenecks)
1107
+
1108
+ async def _generate_ai_suggestions(
1109
+ self, bottlenecks: List[PerformanceBottleneck],
1110
+ opt_patterns: Dict, algo_patterns: Dict, context: Dict
1111
+ ) -> Dict[str, Any]:
1112
+ """Generate AI-powered optimization suggestions."""
1113
+
1114
+ suggestions = {
1115
+ 'algorithm_improvements': [],
1116
+ 'data_structure_optimizations': [],
1117
+ 'concurrency_improvements': [],
1118
+ 'caching_strategies': [],
1119
+ 'io_optimizations': []
1120
+ }
1121
+
1122
+ for bottleneck in bottlenecks:
1123
+ # Analyze bottleneck characteristics
1124
+ if bottleneck.bottleneck_type == "cpu":
1125
+ # Check for algorithmic improvements
1126
+ if "O(" in bottleneck.description or any(
1127
+ keyword in bottleneck.description.lower()
1128
+ for keyword in ["loop", "iteration", "search", "sort"]
1129
+ ):
1130
+ improvement = self._suggest_algorithm_improvement(
1131
+ bottleneck, algo_patterns
1132
+ )
1133
+ suggestions['algorithm_improvements'].append(improvement)
1134
+
1135
+ # Check for concurrency opportunities
1136
+ if bottleneck.call_count > 1000:
1137
+ concurrency = self._suggest_concurrency_improvement(bottleneck)
1138
+ suggestions['concurrency_improvements'].append(concurrency)
1139
+
1140
+ elif bottleneck.bottleneck_type == "memory":
1141
+ # Suggest data structure optimizations
1142
+ data_structure = self._suggest_data_structure_improvement(
1143
+ bottleneck, opt_patterns
1144
+ )
1145
+ suggestions['data_structure_optimizations'].append(data_structure)
1146
+
1147
+ return suggestions
1148
+
1149
+ def _suggest_algorithm_improvement(
1150
+ self, bottleneck: PerformanceBottleneck, algo_patterns: Dict
1151
+ ) -> Dict[str, Any]:
1152
+ """Suggest algorithmic improvements based on Context7 patterns."""
1153
+
1154
+ # Analyze function name and code to identify algorithm type
1155
+ function_name = bottleneck.function_name.lower()
1156
+
1157
+ suggestions = []
1158
+
1159
+ if any(keyword in function_name for keyword in ["search", "find"]):
1160
+ suggestions.extend([
1161
+ "Consider using binary search for sorted data",
1162
+ "Implement hash-based lookup for O(1) average case",
1163
+ "Use trie structures for prefix searches"
1164
+ ])
1165
+
1166
+ elif any(keyword in function_name for keyword in ["sort", "order"]):
1167
+ suggestions.extend([
1168
+ "Consider using Timsort (Python's built-in sort)",
1169
+ "Use radix sort for uniform integer data",
1170
+ "Implement bucket sort for uniformly distributed data"
1171
+ ])
1172
+
1173
+ elif "nested" in function_name or bottleneck.metrics.get('per_call_time', 0) > 0.1:
1174
+ suggestions.extend([
1175
+ "Look for O(n²) nested loops to optimize",
1176
+ "Consider dynamic programming for overlapping subproblems",
1177
+ "Use memoization to avoid repeated calculations"
1178
+ ])
1179
+
1180
+ return {
1181
+ 'bottleneck': bottleneck.function_name,
1182
+ 'suggestions': suggestions,
1183
+ 'estimated_improvement': "30-90% depending on algorithm",
1184
+ 'implementation_complexity': "medium to high"
1185
+ }
1186
+
1187
+ def _suggest_concurrency_improvement(
1188
+ self, bottleneck: PerformanceBottleneck
1189
+ ) -> Dict[str, Any]:
1190
+ """Suggest concurrency improvements."""
1191
+
1192
+ return {
1193
+ 'bottleneck': bottleneck.function_name,
1194
+ 'suggestions': [
1195
+ "Implement multiprocessing for CPU-bound tasks",
1196
+ "Use threading for I/O-bound operations",
1197
+ "Consider asyncio for concurrent I/O operations",
1198
+ "Use concurrent.futures for thread/process pool execution"
1199
+ ],
1200
+ 'estimated_improvement': "2-8x speedup on multi-core systems",
1201
+ 'implementation_complexity': "medium"
1202
+ }
1203
+
1204
+ def _suggest_data_structure_improvement(
1205
+ self, bottleneck: PerformanceBottleneck, opt_patterns: Dict
1206
+ ) -> Dict[str, Any]:
1207
+ """Suggest data structure optimizations."""
1208
+
1209
+ return {
1210
+ 'bottleneck': bottleneck.function_name,
1211
+ 'suggestions': [
1212
+ "Use generators instead of lists for large datasets",
1213
+ "Implement lazy loading for expensive data structures",
1214
+ "Use memoryviews or numpy arrays for numerical data",
1215
+ "Consider using collections.deque for queue operations",
1216
+ "Use set/dict for O(1) lookups instead of list searches"
1217
+ ],
1218
+ 'estimated_improvement': "30-80% memory reduction",
1219
+ 'implementation_complexity': "low to medium"
1220
+ }
1221
+ ```
1222
+
1223
+ ## Best Practices
1224
+
1225
+ 1. Baseline Measurement: Always establish performance baseline before optimization
1226
+ 2. Incremental Changes: Apply one optimization at a time to measure impact
1227
+ 3. Comprehensive Testing: Ensure functionality is preserved during optimization
1228
+ 4. Real-world Workloads: Profile with realistic data and usage patterns
1229
+ 5. Continuous Monitoring: Implement ongoing performance monitoring in production
1230
+
1231
+ ---
1232
+
1233
+ Module: `modules/performance-optimization.md`
1234
+ Related: [AI Debugging](./ai-debugging.md) | [Smart Refactoring](./smart-refactoring.md)