claude-mpm 4.25.10__py3-none-any.whl → 5.1.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.
Files changed (507) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/PM_INSTRUCTIONS.md +1055 -2230
  4. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  5. claude_mpm/agents/WORKFLOW.md +4 -4
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent_loader.py +10 -35
  9. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +576 -66
  10. claude_mpm/agents/templates/context-management-examples.md +544 -0
  11. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  12. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  13. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  14. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  15. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  16. claude_mpm/cli/__init__.py +28 -3
  17. claude_mpm/cli/commands/__init__.py +2 -0
  18. claude_mpm/cli/commands/agent_source.py +774 -0
  19. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  20. claude_mpm/cli/commands/agents.py +959 -36
  21. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  22. claude_mpm/cli/commands/agents_discover.py +338 -0
  23. claude_mpm/cli/commands/auto_configure.py +537 -239
  24. claude_mpm/cli/commands/config.py +7 -4
  25. claude_mpm/cli/commands/configure.py +924 -45
  26. claude_mpm/cli/commands/configure_navigation.py +63 -46
  27. claude_mpm/cli/commands/doctor.py +10 -2
  28. claude_mpm/cli/commands/local_deploy.py +1 -4
  29. claude_mpm/cli/commands/postmortem.py +401 -0
  30. claude_mpm/cli/commands/run.py +1 -39
  31. claude_mpm/cli/commands/skill_source.py +694 -0
  32. claude_mpm/cli/commands/skills.py +322 -19
  33. claude_mpm/cli/executor.py +22 -3
  34. claude_mpm/cli/interactive/agent_wizard.py +1028 -43
  35. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  36. claude_mpm/cli/parsers/agents_parser.py +256 -4
  37. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  38. claude_mpm/cli/parsers/base_parser.py +25 -0
  39. claude_mpm/cli/parsers/config_parser.py +96 -43
  40. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  41. claude_mpm/cli/parsers/skills_parser.py +7 -0
  42. claude_mpm/cli/parsers/source_parser.py +138 -0
  43. claude_mpm/cli/startup.py +456 -103
  44. claude_mpm/cli/startup_display.py +4 -4
  45. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  46. claude_mpm/commands/mpm-agents-detect.md +9 -0
  47. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  48. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  49. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  50. claude_mpm/commands/mpm-doctor.md +9 -0
  51. claude_mpm/commands/mpm-help.md +14 -2
  52. claude_mpm/commands/mpm-init.md +9 -0
  53. claude_mpm/commands/mpm-monitor.md +9 -0
  54. claude_mpm/commands/mpm-postmortem.md +123 -0
  55. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  56. claude_mpm/commands/mpm-status.md +9 -0
  57. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  58. claude_mpm/commands/mpm-ticket-view.md +552 -0
  59. claude_mpm/commands/mpm-version.md +9 -0
  60. claude_mpm/commands/mpm.md +10 -0
  61. claude_mpm/config/agent_presets.py +488 -0
  62. claude_mpm/config/agent_sources.py +325 -0
  63. claude_mpm/config/skill_presets.py +392 -0
  64. claude_mpm/config/skill_sources.py +590 -0
  65. claude_mpm/constants.py +1 -0
  66. claude_mpm/core/claude_runner.py +5 -34
  67. claude_mpm/core/config.py +16 -0
  68. claude_mpm/core/framework/__init__.py +3 -16
  69. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  70. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  71. claude_mpm/core/interactive_session.py +83 -7
  72. claude_mpm/core/oneshot_session.py +71 -8
  73. claude_mpm/core/protocols/__init__.py +23 -0
  74. claude_mpm/core/protocols/runner_protocol.py +103 -0
  75. claude_mpm/core/protocols/session_protocol.py +131 -0
  76. claude_mpm/core/shared/singleton_manager.py +11 -4
  77. claude_mpm/core/system_context.py +38 -0
  78. claude_mpm/core/unified_config.py +22 -0
  79. claude_mpm/experimental/cli_enhancements.py +1 -5
  80. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  81. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  82. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  83. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  84. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  85. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  86. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  87. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  88. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  89. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  90. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  91. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  92. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  93. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  94. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  95. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  96. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  97. claude_mpm/models/git_repository.py +198 -0
  98. claude_mpm/services/agents/agent_builder.py +45 -9
  99. claude_mpm/services/agents/agent_preset_service.py +238 -0
  100. claude_mpm/services/agents/agent_selection_service.py +484 -0
  101. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  102. claude_mpm/services/agents/cache_git_manager.py +621 -0
  103. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  104. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  105. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  106. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  107. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  108. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  109. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  110. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  111. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  112. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  113. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  114. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  115. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  116. claude_mpm/services/agents/git_source_manager.py +629 -0
  117. claude_mpm/services/agents/loading/framework_agent_loader.py +1 -4
  118. claude_mpm/services/agents/local_template_manager.py +47 -9
  119. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  120. claude_mpm/services/agents/sources/__init__.py +13 -0
  121. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  122. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  123. claude_mpm/services/agents/startup_sync.py +239 -0
  124. claude_mpm/services/agents/toolchain_detector.py +474 -0
  125. claude_mpm/services/analysis/__init__.py +25 -0
  126. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  127. claude_mpm/services/analysis/postmortem_service.py +765 -0
  128. claude_mpm/services/command_deployment_service.py +200 -6
  129. claude_mpm/services/core/base.py +7 -2
  130. claude_mpm/services/core/interfaces/__init__.py +1 -3
  131. claude_mpm/services/core/interfaces/health.py +1 -4
  132. claude_mpm/services/core/models/__init__.py +2 -11
  133. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  134. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  135. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  136. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  137. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  138. claude_mpm/services/diagnostics/doctor_reporter.py +34 -6
  139. claude_mpm/services/git/__init__.py +21 -0
  140. claude_mpm/services/git/git_operations_service.py +494 -0
  141. claude_mpm/services/github/__init__.py +21 -0
  142. claude_mpm/services/github/github_cli_service.py +397 -0
  143. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  144. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  145. claude_mpm/services/instructions/__init__.py +9 -0
  146. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  147. claude_mpm/services/local_ops/__init__.py +3 -13
  148. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  149. claude_mpm/services/local_ops/health_manager.py +1 -4
  150. claude_mpm/services/mcp_config_manager.py +75 -145
  151. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  152. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  153. claude_mpm/services/mcp_service_verifier.py +6 -3
  154. claude_mpm/services/monitor/daemon.py +28 -8
  155. claude_mpm/services/monitor/daemon_manager.py +96 -19
  156. claude_mpm/services/pr/__init__.py +14 -0
  157. claude_mpm/services/pr/pr_template_service.py +329 -0
  158. claude_mpm/services/project/project_organizer.py +4 -0
  159. claude_mpm/services/runner_configuration_service.py +16 -3
  160. claude_mpm/services/session_management_service.py +16 -4
  161. claude_mpm/services/skills/__init__.py +18 -0
  162. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  163. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  164. claude_mpm/services/socketio/server/core.py +1 -4
  165. claude_mpm/services/socketio/server/main.py +1 -3
  166. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  167. claude_mpm/services/unified/unified_deployment.py +1 -5
  168. claude_mpm/services/visualization/__init__.py +1 -5
  169. claude_mpm/templates/questions/__init__.py +2 -7
  170. claude_mpm/templates/questions/pr_strategy.py +1 -4
  171. claude_mpm/templates/questions/project_init.py +1 -4
  172. claude_mpm/templates/questions/ticket_mgmt.py +1 -4
  173. claude_mpm/utils/agent_dependency_loader.py +77 -10
  174. claude_mpm/utils/agent_filters.py +288 -0
  175. claude_mpm/utils/gitignore.py +3 -0
  176. claude_mpm/utils/migration.py +372 -0
  177. claude_mpm/utils/progress.py +387 -0
  178. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +356 -112
  179. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +188 -439
  180. claude_mpm/agents/templates/agent-manager.json +0 -273
  181. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  182. claude_mpm/agents/templates/api_qa.json +0 -183
  183. claude_mpm/agents/templates/clerk-ops.json +0 -235
  184. claude_mpm/agents/templates/code_analyzer.json +0 -101
  185. claude_mpm/agents/templates/content-agent.json +0 -358
  186. claude_mpm/agents/templates/dart_engineer.json +0 -307
  187. claude_mpm/agents/templates/data_engineer.json +0 -225
  188. claude_mpm/agents/templates/documentation.json +0 -238
  189. claude_mpm/agents/templates/engineer.json +0 -210
  190. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  191. claude_mpm/agents/templates/golang_engineer.json +0 -270
  192. claude_mpm/agents/templates/imagemagick.json +0 -264
  193. claude_mpm/agents/templates/java_engineer.json +0 -346
  194. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  195. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  196. claude_mpm/agents/templates/memory_manager.json +0 -158
  197. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  198. claude_mpm/agents/templates/ops.json +0 -185
  199. claude_mpm/agents/templates/php-engineer.json +0 -287
  200. claude_mpm/agents/templates/product_owner.json +0 -338
  201. claude_mpm/agents/templates/project_organizer.json +0 -144
  202. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  203. claude_mpm/agents/templates/python_engineer.json +0 -387
  204. claude_mpm/agents/templates/qa.json +0 -243
  205. claude_mpm/agents/templates/react_engineer.json +0 -239
  206. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  207. claude_mpm/agents/templates/research.json +0 -258
  208. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  209. claude_mpm/agents/templates/rust_engineer.json +0 -275
  210. claude_mpm/agents/templates/security.json +0 -202
  211. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  212. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  213. claude_mpm/agents/templates/ticketing.json +0 -181
  214. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  215. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  216. claude_mpm/agents/templates/version_control.json +0 -159
  217. claude_mpm/agents/templates/web_qa.json +0 -400
  218. claude_mpm/agents/templates/web_ui.json +0 -189
  219. claude_mpm/cli/README.md +0 -253
  220. claude_mpm/cli/commands/mcp_install_commands.py.backup +0 -284
  221. claude_mpm/cli/commands/mpm_init/README.md +0 -365
  222. claude_mpm/cli_module/refactoring_guide.md +0 -253
  223. claude_mpm/commands/mpm-tickets.md +0 -151
  224. claude_mpm/config/agent_capabilities.yaml +0 -658
  225. claude_mpm/config/async_logging_config.yaml +0 -145
  226. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +0 -34
  227. claude_mpm/d2/.gitignore +0 -22
  228. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +0 -273
  229. claude_mpm/d2/FLASK_INTEGRATION.md +0 -156
  230. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +0 -452
  231. claude_mpm/d2/QUICKSTART.md +0 -186
  232. claude_mpm/d2/README.md +0 -232
  233. claude_mpm/d2/STORE_FIX_SUMMARY.md +0 -167
  234. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +0 -180
  235. claude_mpm/d2/TESTING.md +0 -288
  236. claude_mpm/d2/index.html +0 -118
  237. claude_mpm/d2/package.json +0 -19
  238. claude_mpm/d2/src/App.svelte +0 -110
  239. claude_mpm/d2/src/components/Header.svelte +0 -153
  240. claude_mpm/d2/src/components/MainContent.svelte +0 -74
  241. claude_mpm/d2/src/components/Sidebar.svelte +0 -85
  242. claude_mpm/d2/src/components/tabs/EventsTab.svelte +0 -326
  243. claude_mpm/d2/src/lib/socketio.js +0 -144
  244. claude_mpm/d2/src/main.js +0 -7
  245. claude_mpm/d2/src/stores/events.js +0 -114
  246. claude_mpm/d2/src/stores/socket.js +0 -108
  247. claude_mpm/d2/src/stores/theme.js +0 -65
  248. claude_mpm/d2/svelte.config.js +0 -12
  249. claude_mpm/d2/vite.config.js +0 -15
  250. claude_mpm/dashboard/.claude-mpm/memories/README.md +0 -36
  251. claude_mpm/dashboard/BUILD_NUMBER +0 -1
  252. claude_mpm/dashboard/README.md +0 -121
  253. claude_mpm/dashboard/VERSION +0 -1
  254. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  255. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +0 -273
  256. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +0 -75
  257. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  258. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +0 -141
  259. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  260. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +0 -36
  261. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  262. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +0 -89
  263. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +0 -215
  264. claude_mpm/dashboard/react/entries/events.tsx +0 -165
  265. claude_mpm/dashboard/react/hooks/useEvents.ts +0 -191
  266. claude_mpm/dashboard/react/hooks/useSocket.ts +0 -225
  267. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  268. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +0 -170
  269. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  270. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  271. claude_mpm/dashboard/static/built/components/activity-tree.js.map +0 -1
  272. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  273. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  274. claude_mpm/dashboard/static/built/components/agent-inference.js.map +0 -1
  275. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  276. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  277. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  278. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  279. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  280. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  281. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  282. claude_mpm/dashboard/static/built/components/code-tree.js.map +0 -1
  283. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  284. claude_mpm/dashboard/static/built/components/code-viewer.js.map +0 -1
  285. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  286. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  287. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  288. claude_mpm/dashboard/static/built/components/event-processor.js.map +0 -1
  289. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  290. claude_mpm/dashboard/static/built/components/event-viewer.js.map +0 -1
  291. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  292. claude_mpm/dashboard/static/built/components/export-manager.js.map +0 -1
  293. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  294. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  295. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  296. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +0 -1
  297. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  298. claude_mpm/dashboard/static/built/components/file-viewer.js.map +0 -1
  299. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  300. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +0 -1
  301. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  302. claude_mpm/dashboard/static/built/components/hud-manager.js.map +0 -1
  303. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  304. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +0 -1
  305. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  306. claude_mpm/dashboard/static/built/components/module-viewer.js.map +0 -1
  307. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  308. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  309. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  310. claude_mpm/dashboard/static/built/components/session-manager.js.map +0 -1
  311. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  312. claude_mpm/dashboard/static/built/components/socket-manager.js.map +0 -1
  313. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  314. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +0 -1
  315. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  316. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +0 -1
  317. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  318. claude_mpm/dashboard/static/built/components/working-directory.js.map +0 -1
  319. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  320. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  321. claude_mpm/dashboard/static/built/dashboard.js.map +0 -1
  322. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  323. claude_mpm/dashboard/static/built/react/events.js +0 -30
  324. claude_mpm/dashboard/static/built/react/events.js.map +0 -1
  325. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  326. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  327. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  328. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  329. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  330. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  331. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  332. claude_mpm/dashboard/static/built/socket-client.js.map +0 -1
  333. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  334. claude_mpm/dashboard/static/events.html +0 -607
  335. claude_mpm/dashboard/static/index.html +0 -635
  336. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +0 -170
  337. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  338. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  339. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  340. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  341. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  342. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  343. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  344. claude_mpm/dashboard/static/legacy/files.html +0 -747
  345. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  346. claude_mpm/dashboard/static/monitors.html +0 -431
  347. claude_mpm/dashboard/static/navigation-test-results.md +0 -118
  348. claude_mpm/dashboard/static/production/events.html +0 -659
  349. claude_mpm/dashboard/static/production/main.html +0 -698
  350. claude_mpm/dashboard/static/production/monitors.html +0 -483
  351. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  352. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  353. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  354. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  355. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +0 -36
  356. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +0 -39
  357. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +0 -38
  358. claude_mpm/hooks/README.md +0 -143
  359. claude_mpm/hooks/templates/README.md +0 -180
  360. claude_mpm/hooks/templates/settings.json.example +0 -147
  361. claude_mpm/schemas/agent_schema.json +0 -596
  362. claude_mpm/schemas/frontmatter_schema.json +0 -165
  363. claude_mpm/services/event_bus/README.md +0 -244
  364. claude_mpm/services/events/README.md +0 -303
  365. claude_mpm/services/framework_claude_md_generator/README.md +0 -119
  366. claude_mpm/services/mcp_gateway/README.md +0 -185
  367. claude_mpm/services/socketio/handlers/connection.py.backup +0 -217
  368. claude_mpm/services/socketio/handlers/hook.py.backup +0 -154
  369. claude_mpm/services/static/.gitkeep +0 -2
  370. claude_mpm/services/version_control/VERSION +0 -1
  371. claude_mpm/skills/bundled/.gitkeep +0 -2
  372. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  373. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  374. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  375. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  376. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  377. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  378. claude_mpm/skills/bundled/collaboration/git-worktrees.md +0 -317
  379. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  380. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  381. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  382. claude_mpm/skills/bundled/collaboration/stacked-prs.md +0 -251
  383. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  384. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  385. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  386. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  387. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +0 -63
  388. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  389. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  390. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  391. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  392. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  393. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  394. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  395. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  396. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  397. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  398. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  399. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  400. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  401. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  402. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  403. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  404. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  405. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  406. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  407. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +0 -611
  408. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +0 -596
  409. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +0 -260
  410. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +0 -315
  411. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +0 -436
  412. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +0 -433
  413. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +0 -452
  414. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +0 -404
  415. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +0 -420
  416. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +0 -202
  417. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  418. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +0 -54
  419. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +0 -322
  420. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  421. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +0 -202
  422. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  423. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  424. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  425. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  426. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  427. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +0 -202
  428. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  429. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  430. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  431. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  432. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  433. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  434. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  435. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +0 -22
  436. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +0 -2
  437. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +0 -202
  438. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  439. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  440. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  441. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  442. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  443. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  444. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  445. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  446. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  447. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  448. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  449. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  450. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  451. claude_mpm/skills/bundled/react/flexlayout-react.md +0 -742
  452. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  453. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  454. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  455. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  456. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  457. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  458. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  459. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +0 -495
  460. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +0 -599
  461. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +0 -535
  462. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +0 -613
  463. claude_mpm/skills/bundled/tauri/tauri-event-system.md +0 -648
  464. claude_mpm/skills/bundled/tauri/tauri-file-system.md +0 -673
  465. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +0 -767
  466. claude_mpm/skills/bundled/tauri/tauri-performance.md +0 -669
  467. claude_mpm/skills/bundled/tauri/tauri-state-management.md +0 -573
  468. claude_mpm/skills/bundled/tauri/tauri-testing.md +0 -384
  469. claude_mpm/skills/bundled/tauri/tauri-window-management.md +0 -628
  470. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +0 -158
  472. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  473. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  478. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  479. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +0 -458
  480. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +0 -411
  481. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +0 -317
  482. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +0 -270
  483. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +0 -436
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  489. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +0 -202
  490. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  491. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  492. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  493. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  494. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  495. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  496. claude_mpm/templates/questions/EXAMPLES.md +0 -501
  497. claude_mpm/tools/README_SOCKETIO_DEBUG.md +0 -224
  498. claude_mpm/tools/code_tree_analyzer/README.md +0 -64
  499. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  500. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  501. /claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +0 -0
  502. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  503. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  504. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
  505. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
  506. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
  507. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
@@ -1,669 +0,0 @@
1
- ---
2
- name: tauri-performance
3
- description: Performance optimization for Tauri apps including serialization, batching, caching, lazy loading, and profiling techniques
4
- version: 1.0.0
5
- category: development
6
- author: Claude MPM Team
7
- license: MIT
8
- progressive_disclosure:
9
- entry_point:
10
- summary: "Performance optimization: minimize serialization, batch commands, implement caching, lazy load resources, profile bottlenecks"
11
- when_to_use: "Optimizing Tauri app performance, reducing IPC overhead, improving responsiveness, or debugging performance issues"
12
- quick_start: "1. Batch IPC calls 2. Cache frequently accessed data 3. Stream large data 4. Lazy load resources 5. Profile with DevTools"
13
- context_limit: 600
14
- tags:
15
- - tauri
16
- - performance
17
- - optimization
18
- - profiling
19
- - caching
20
- requires_tools: []
21
- ---
22
-
23
- # Tauri Performance Optimization
24
-
25
- ## IPC Optimization
26
-
27
- ### Minimize Serialization Overhead
28
-
29
- **Problem**: Each IPC call serializes data across the boundary
30
-
31
- ```rust
32
- // ❌ BAD - multiple IPC calls
33
- #[tauri::command]
34
- async fn get_file_name(path: String) -> Result<String, String> { /* ... */ }
35
-
36
- #[tauri::command]
37
- async fn get_file_size(path: String) -> Result<u64, String> { /* ... */ }
38
-
39
- // Frontend makes 3 separate calls
40
- const name = await invoke('get_file_name', { path });
41
- const size = await invoke('get_file_size', { path });
42
- const modified = await invoke('get_file_modified', { path });
43
- ```
44
-
45
- **Solution**: Batch data in single call
46
-
47
- ```rust
48
- // ✅ GOOD - single IPC call
49
- #[derive(serde::Serialize)]
50
- pub struct FileInfo {
51
- name: String,
52
- size: u64,
53
- modified: u64,
54
- is_dir: bool,
55
- }
56
-
57
- #[tauri::command]
58
- async fn get_file_info(path: String) -> Result<FileInfo, String> {
59
- let metadata = tokio::fs::metadata(&path)
60
- .await
61
- .map_err(|e| e.to_string())?;
62
-
63
- Ok(FileInfo {
64
- name: Path::new(&path)
65
- .file_name()
66
- .unwrap()
67
- .to_string_lossy()
68
- .to_string(),
69
- size: metadata.len(),
70
- modified: metadata.modified()
71
- .unwrap()
72
- .duration_since(UNIX_EPOCH)
73
- .unwrap()
74
- .as_secs(),
75
- is_dir: metadata.is_dir(),
76
- })
77
- }
78
-
79
- // Frontend makes 1 call
80
- const info = await invoke('get_file_info', { path });
81
- ```
82
-
83
- ### Batch Operations
84
-
85
- ```rust
86
- // ❌ BAD - N IPC calls
87
- for file in files {
88
- await invoke('process_file', { file });
89
- }
90
-
91
- // ✅ GOOD - 1 IPC call
92
- #[tauri::command]
93
- async fn process_files_batch(files: Vec<String>) -> Result<Vec<ProcessResult>, String> {
94
- let mut results = Vec::new();
95
-
96
- for file in files {
97
- let result = process_file_internal(&file).await;
98
- results.push(result);
99
- }
100
-
101
- Ok(results)
102
- }
103
-
104
- await invoke('process_files_batch', { files });
105
- ```
106
-
107
- ### Stream Large Data
108
-
109
- ```rust
110
- use futures::stream::{self, StreamExt};
111
-
112
- #[tauri::command]
113
- async fn load_large_dataset(
114
- window: tauri::Window,
115
- ) -> Result<(), String> {
116
- let data = fetch_large_dataset().await?;
117
-
118
- // Stream in chunks instead of single payload
119
- let chunks: Vec<_> = data.chunks(1000).collect();
120
-
121
- for (index, chunk) in chunks.iter().enumerate() {
122
- window.emit("data-chunk", serde_json::json!({
123
- "index": index,
124
- "data": chunk,
125
- "total": chunks.len()
126
- })).map_err(|e| e.to_string())?;
127
-
128
- // Small delay to prevent overwhelming frontend
129
- tokio::time::sleep(Duration::from_millis(10)).await;
130
- }
131
-
132
- window.emit("data-complete", ()).map_err(|e| e.to_string())?;
133
-
134
- Ok(())
135
- }
136
- ```
137
-
138
- **Frontend streaming handler**:
139
- ```typescript
140
- let allData: DataItem[] = [];
141
-
142
- await listen('data-chunk', (event: { index: number; data: DataItem[]; total: number }) => {
143
- allData = allData.concat(event.data);
144
- updateProgress(event.index, event.total);
145
- });
146
-
147
- await listen('data-complete', () => {
148
- renderData(allData);
149
- });
150
-
151
- await invoke('load_large_dataset');
152
- ```
153
-
154
- ## Caching Strategies
155
-
156
- ### In-Memory Cache
157
-
158
- ```rust
159
- use std::sync::Arc;
160
- use dashmap::DashMap;
161
- use std::time::{SystemTime, Duration};
162
-
163
- pub struct CachedValue<T> {
164
- value: T,
165
- expires_at: SystemTime,
166
- }
167
-
168
- pub struct Cache<T> {
169
- store: Arc<DashMap<String, CachedValue<T>>>,
170
- ttl: Duration,
171
- }
172
-
173
- impl<T: Clone> Cache<T> {
174
- pub fn new(ttl_secs: u64) -> Self {
175
- Self {
176
- store: Arc::new(DashMap::new()),
177
- ttl: Duration::from_secs(ttl_secs),
178
- }
179
- }
180
-
181
- pub fn get(&self, key: &str) -> Option<T> {
182
- self.store.get(key).and_then(|entry| {
183
- if SystemTime::now() < entry.expires_at {
184
- Some(entry.value.clone())
185
- } else {
186
- self.store.remove(key);
187
- None
188
- }
189
- })
190
- }
191
-
192
- pub fn set(&self, key: String, value: T) {
193
- self.store.insert(key, CachedValue {
194
- value,
195
- expires_at: SystemTime::now() + self.ttl,
196
- });
197
- }
198
-
199
- pub fn clear(&self) {
200
- self.store.clear();
201
- }
202
- }
203
-
204
- // Usage in app state
205
- pub struct AppState {
206
- file_cache: Cache<String>,
207
- }
208
-
209
- #[tauri::command]
210
- async fn read_file_cached(
211
- path: String,
212
- state: tauri::State<'_, AppState>,
213
- ) -> Result<String, String> {
214
- // Check cache first
215
- if let Some(content) = state.file_cache.get(&path) {
216
- return Ok(content);
217
- }
218
-
219
- // Cache miss - read from disk
220
- let content = tokio::fs::read_to_string(&path)
221
- .await
222
- .map_err(|e| e.to_string())?;
223
-
224
- // Store in cache
225
- state.file_cache.set(path, content.clone());
226
-
227
- Ok(content)
228
- }
229
- ```
230
-
231
- ### LRU Cache
232
-
233
- ```rust
234
- use lru::LruCache;
235
- use std::sync::Arc;
236
- use tokio::sync::Mutex;
237
- use std::num::NonZeroUsize;
238
-
239
- pub struct AppState {
240
- lru_cache: Arc<Mutex<LruCache<String, Vec<u8>>>>,
241
- }
242
-
243
- impl AppState {
244
- pub fn new() -> Self {
245
- Self {
246
- lru_cache: Arc::new(Mutex::new(
247
- LruCache::new(NonZeroUsize::new(100).unwrap())
248
- )),
249
- }
250
- }
251
- }
252
-
253
- #[tauri::command]
254
- async fn get_data_with_lru(
255
- key: String,
256
- state: tauri::State<'_, AppState>,
257
- ) -> Result<Vec<u8>, String> {
258
- let mut cache = state.lru_cache.lock().await;
259
-
260
- if let Some(data) = cache.get(&key) {
261
- return Ok(data.clone());
262
- }
263
-
264
- // Cache miss
265
- drop(cache); // Release lock before expensive operation
266
-
267
- let data = fetch_expensive_data(&key).await?;
268
-
269
- let mut cache = state.lru_cache.lock().await;
270
- cache.put(key, data.clone());
271
-
272
- Ok(data)
273
- }
274
- ```
275
-
276
- ### Persistent Cache
277
-
278
- ```rust
279
- use sled::Db;
280
-
281
- pub struct AppState {
282
- disk_cache: Db,
283
- }
284
-
285
- impl AppState {
286
- pub fn new() -> Result<Self, String> {
287
- let cache = sled::open("cache.db")
288
- .map_err(|e| e.to_string())?;
289
-
290
- Ok(Self {
291
- disk_cache: cache,
292
- })
293
- }
294
- }
295
-
296
- #[tauri::command]
297
- async fn get_cached_data(
298
- key: String,
299
- state: tauri::State<'_, AppState>,
300
- ) -> Result<Option<String>, String> {
301
- let data = state.disk_cache
302
- .get(key.as_bytes())
303
- .map_err(|e| e.to_string())?;
304
-
305
- Ok(data.map(|bytes| String::from_utf8_lossy(&bytes).to_string()))
306
- }
307
-
308
- #[tauri::command]
309
- async fn set_cached_data(
310
- key: String,
311
- value: String,
312
- state: tauri::State<'_, AppState>,
313
- ) -> Result<(), String> {
314
- state.disk_cache
315
- .insert(key.as_bytes(), value.as_bytes())
316
- .map_err(|e| e.to_string())?;
317
-
318
- Ok(())
319
- }
320
- ```
321
-
322
- ## Lazy Loading
323
-
324
- ### Lazy Component Loading
325
-
326
- ```typescript
327
- // React lazy loading
328
- import { lazy, Suspense } from 'react';
329
-
330
- const HeavyComponent = lazy(() => import('./HeavyComponent'));
331
-
332
- function App() {
333
- return (
334
- <Suspense fallback={<div>Loading...</div>}>
335
- <HeavyComponent />
336
- </Suspense>
337
- );
338
- }
339
- ```
340
-
341
- ### Lazy Data Loading
342
-
343
- ```rust
344
- #[tauri::command]
345
- async fn get_preview(path: String) -> Result<PreviewData, String> {
346
- // Return lightweight preview first
347
- let preview = PreviewData {
348
- name: get_filename(&path),
349
- size: get_filesize(&path).await?,
350
- thumbnail: None, // Don't load heavy data yet
351
- };
352
-
353
- Ok(preview)
354
- }
355
-
356
- #[tauri::command]
357
- async fn get_full_data(path: String) -> Result<FullData, String> {
358
- // Load heavy data only when requested
359
- let content = tokio::fs::read(&path)
360
- .await
361
- .map_err(|e| e.to_string())?;
362
-
363
- let thumbnail = generate_thumbnail(&content)?;
364
-
365
- Ok(FullData {
366
- content,
367
- thumbnail: Some(thumbnail),
368
- })
369
- }
370
- ```
371
-
372
- **Frontend**:
373
- ```typescript
374
- // Load preview immediately
375
- const preview = await invoke('get_preview', { path });
376
- showPreview(preview);
377
-
378
- // Load full data on demand
379
- button.onclick = async () => {
380
- const fullData = await invoke('get_full_data', { path });
381
- showFullData(fullData);
382
- };
383
- ```
384
-
385
- ## Database Optimization
386
-
387
- ### Connection Pooling
388
-
389
- ```rust
390
- use sqlx::{Pool, Sqlite, SqlitePool};
391
-
392
- pub struct AppState {
393
- db_pool: Pool<Sqlite>,
394
- }
395
-
396
- impl AppState {
397
- pub async fn new() -> Result<Self, sqlx::Error> {
398
- let pool = SqlitePool::connect("sqlite://data.db").await?;
399
-
400
- Ok(Self { db_pool: pool })
401
- }
402
- }
403
-
404
- #[tauri::command]
405
- async fn query_users(
406
- state: tauri::State<'_, AppState>,
407
- ) -> Result<Vec<User>, String> {
408
- let users = sqlx::query_as::<_, User>("SELECT * FROM users")
409
- .fetch_all(&state.db_pool)
410
- .await
411
- .map_err(|e| e.to_string())?;
412
-
413
- Ok(users)
414
- }
415
- ```
416
-
417
- ### Prepared Statements
418
-
419
- ```rust
420
- use sqlx::{Sqlite, Statement};
421
-
422
- pub struct PreparedStatements {
423
- get_user: Statement<'static, Sqlite>,
424
- insert_user: Statement<'static, Sqlite>,
425
- }
426
-
427
- impl PreparedStatements {
428
- pub async fn new(pool: &Pool<Sqlite>) -> Result<Self, sqlx::Error> {
429
- Ok(Self {
430
- get_user: pool.prepare("SELECT * FROM users WHERE id = ?").await?,
431
- insert_user: pool.prepare("INSERT INTO users (name, email) VALUES (?, ?)").await?,
432
- })
433
- }
434
- }
435
-
436
- // Use prepared statements for repeated queries
437
- ```
438
-
439
- ## Async Performance
440
-
441
- ### Concurrent Operations
442
-
443
- ```rust
444
- use futures::future::join_all;
445
-
446
- #[tauri::command]
447
- async fn load_multiple_files(paths: Vec<String>) -> Result<Vec<FileData>, String> {
448
- let tasks = paths.into_iter().map(|path| async move {
449
- tokio::fs::read_to_string(&path)
450
- .await
451
- .map(|content| FileData { path, content })
452
- });
453
-
454
- let results = join_all(tasks).await;
455
-
456
- let data: Vec<FileData> = results
457
- .into_iter()
458
- .filter_map(|r| r.ok())
459
- .collect();
460
-
461
- Ok(data)
462
- }
463
- ```
464
-
465
- ### Parallel Processing with Rayon
466
-
467
- ```rust
468
- use rayon::prelude::*;
469
-
470
- #[tauri::command]
471
- async fn process_large_dataset(data: Vec<Item>) -> Result<Vec<ProcessedItem>, String> {
472
- // Move to blocking thread pool for CPU-intensive work
473
- let processed = tokio::task::spawn_blocking(move || {
474
- data.par_iter()
475
- .map(|item| process_item(item))
476
- .collect::<Vec<_>>()
477
- })
478
- .await
479
- .map_err(|e| e.to_string())?;
480
-
481
- Ok(processed)
482
- }
483
- ```
484
-
485
- ## Profiling and Debugging
486
-
487
- ### Backend Profiling
488
-
489
- ```rust
490
- use std::time::Instant;
491
-
492
- #[tauri::command]
493
- async fn profiled_operation() -> Result<String, String> {
494
- let start = Instant::now();
495
-
496
- let result = expensive_operation().await?;
497
-
498
- let duration = start.elapsed();
499
- log::info!("Operation took {:?}", duration);
500
-
501
- Ok(result)
502
- }
503
- ```
504
-
505
- ### Conditional Logging
506
-
507
- ```rust
508
- #[cfg(debug_assertions)]
509
- macro_rules! debug_time {
510
- ($label:expr, $code:block) => {{
511
- let start = std::time::Instant::now();
512
- let result = $code;
513
- let duration = start.elapsed();
514
- log::debug!("{} took {:?}", $label, duration);
515
- result
516
- }};
517
- }
518
-
519
- #[cfg(not(debug_assertions))]
520
- macro_rules! debug_time {
521
- ($label:expr, $code:block) => {
522
- $code
523
- };
524
- }
525
-
526
- #[tauri::command]
527
- async fn operation() -> Result<String, String> {
528
- let result = debug_time!("Database query", {
529
- query_database().await
530
- })?;
531
-
532
- Ok(result)
533
- }
534
- ```
535
-
536
- ### Frontend Performance Monitoring
537
-
538
- ```typescript
539
- // Performance marks
540
- performance.mark('command-start');
541
- const result = await invoke('heavy_command');
542
- performance.mark('command-end');
543
-
544
- performance.measure('command-duration', 'command-start', 'command-end');
545
-
546
- const measure = performance.getEntriesByName('command-duration')[0];
547
- console.log(`Command took ${measure.duration}ms`);
548
- ```
549
-
550
- ## Memory Optimization
551
-
552
- ### Avoid Cloning
553
-
554
- ```rust
555
- // ❌ BAD - unnecessary clone
556
- #[tauri::command]
557
- async fn process_data(data: String) -> Result<String, String> {
558
- let processed = data.clone(); // Unnecessary
559
- Ok(processed.to_uppercase())
560
- }
561
-
562
- // ✅ GOOD - consume owned value
563
- #[tauri::command]
564
- async fn process_data(data: String) -> Result<String, String> {
565
- Ok(data.to_uppercase()) // Takes ownership
566
- }
567
- ```
568
-
569
- ### Use References Where Possible
570
-
571
- ```rust
572
- async fn internal_processing(data: &str) -> String {
573
- data.to_uppercase()
574
- }
575
-
576
- #[tauri::command]
577
- async fn process(data: String) -> Result<String, String> {
578
- Ok(internal_processing(&data))
579
- }
580
- ```
581
-
582
- ### Drop Large Allocations Early
583
-
584
- ```rust
585
- #[tauri::command]
586
- async fn process_file(path: String) -> Result<String, String> {
587
- let large_buffer = tokio::fs::read(&path)
588
- .await
589
- .map_err(|e| e.to_string())?;
590
-
591
- let summary = compute_summary(&large_buffer);
592
-
593
- drop(large_buffer); // Free memory before waiting
594
-
595
- tokio::time::sleep(Duration::from_secs(1)).await;
596
-
597
- Ok(summary)
598
- }
599
- ```
600
-
601
- ## Best Practices
602
-
603
- 1. **Batch IPC calls** - Minimize serialization overhead
604
- 2. **Cache aggressively** - In-memory, LRU, or persistent
605
- 3. **Stream large data** - Chunk payloads instead of single large payload
606
- 4. **Lazy load** - Only fetch data when needed
607
- 5. **Use connection pools** - For database access
608
- 6. **Concurrent operations** - Use join_all for parallel async
609
- 7. **CPU-bound work** - Move to spawn_blocking or rayon
610
- 8. **Profile regularly** - Identify bottlenecks with timing
611
- 9. **Minimize cloning** - Use references or consume owned values
612
- 10. **Drop early** - Free large allocations as soon as possible
613
-
614
- ## Common Pitfalls
615
-
616
- ❌ **Too many small IPC calls**:
617
- ```typescript
618
- // WRONG - 100 IPC calls
619
- for (const file of files) {
620
- await invoke('process_file', { file });
621
- }
622
-
623
- // CORRECT - 1 IPC call
624
- await invoke('process_files_batch', { files });
625
- ```
626
-
627
- ❌ **Not caching expensive operations**:
628
- ```rust
629
- // WRONG - recomputes every time
630
- #[tauri::command]
631
- async fn get_config() -> Config {
632
- parse_config().await // Expensive every call
633
- }
634
-
635
- // CORRECT - cache result
636
- lazy_static! {
637
- static ref CONFIG: Mutex<Option<Config>> = Mutex::new(None);
638
- }
639
- ```
640
-
641
- ❌ **Blocking async runtime**:
642
- ```rust
643
- // WRONG - blocks async executor
644
- #[tauri::command]
645
- async fn cpu_intensive() -> String {
646
- expensive_cpu_work() // Blocks entire runtime
647
- }
648
-
649
- // CORRECT - move to blocking thread
650
- #[tauri::command]
651
- async fn cpu_intensive() -> String {
652
- tokio::task::spawn_blocking(|| expensive_cpu_work())
653
- .await
654
- .unwrap()
655
- }
656
- ```
657
-
658
- ## Summary
659
-
660
- - **Batch IPC calls** to minimize serialization overhead
661
- - **Cache frequently accessed data** with TTL, LRU, or persistent
662
- - **Stream large datasets** in chunks to prevent memory spikes
663
- - **Lazy load resources** only when needed
664
- - **Connection pooling** for database efficiency
665
- - **Concurrent async** with join_all for parallel operations
666
- - **CPU-bound work** on spawn_blocking or rayon
667
- - **Profile performance** to identify bottlenecks
668
- - **Minimize cloning** and drop large allocations early
669
- - **Frontend monitoring** with Performance API