claude-mpm 4.16.0__py3-none-any.whl → 4.25.10__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 claude-mpm might be problematic. Click here for more details.

Files changed (531) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +272 -23
  4. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +1821 -32
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/agent_loader.py +4 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/api_qa.json +5 -2
  11. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  12. claude_mpm/agents/templates/documentation.json +33 -6
  13. claude_mpm/agents/templates/engineer.json +5 -1
  14. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  15. claude_mpm/agents/templates/php-engineer.json +10 -4
  16. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  17. claude_mpm/agents/templates/project_organizer.json +7 -3
  18. claude_mpm/agents/templates/python_engineer.json +8 -3
  19. claude_mpm/agents/templates/qa.json +2 -1
  20. claude_mpm/agents/templates/react_engineer.json +1 -0
  21. claude_mpm/agents/templates/research.json +82 -12
  22. claude_mpm/agents/templates/rust_engineer.json +12 -7
  23. claude_mpm/agents/templates/security.json +4 -4
  24. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  25. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  26. claude_mpm/agents/templates/ticketing.json +10 -6
  27. claude_mpm/agents/templates/version_control.json +4 -2
  28. claude_mpm/agents/templates/web_qa.json +2 -1
  29. claude_mpm/cli/README.md +253 -0
  30. claude_mpm/cli/__init__.py +11 -1
  31. claude_mpm/cli/commands/__init__.py +2 -0
  32. claude_mpm/cli/commands/aggregate.py +1 -1
  33. claude_mpm/cli/commands/analyze.py +3 -3
  34. claude_mpm/cli/commands/cleanup.py +1 -1
  35. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  36. claude_mpm/cli/commands/debug.py +12 -12
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  39. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  40. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  41. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  42. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  43. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  44. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  45. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  46. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  47. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  48. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  49. claude_mpm/cli/commands/run.py +124 -128
  50. claude_mpm/cli/commands/skills.py +922 -0
  51. claude_mpm/cli/executor.py +58 -0
  52. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  53. claude_mpm/cli/parsers/base_parser.py +35 -0
  54. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  55. claude_mpm/cli/parsers/skills_parser.py +275 -0
  56. claude_mpm/cli/startup.py +168 -8
  57. claude_mpm/cli/startup_display.py +480 -0
  58. claude_mpm/cli/utils.py +1 -1
  59. claude_mpm/cli_module/commands.py +1 -1
  60. claude_mpm/cli_module/refactoring_guide.md +253 -0
  61. claude_mpm/commands/mpm-auto-configure.md +52 -0
  62. claude_mpm/commands/mpm-help.md +6 -0
  63. claude_mpm/commands/mpm-init.md +130 -8
  64. claude_mpm/commands/mpm-resume.md +372 -0
  65. claude_mpm/commands/mpm-tickets.md +56 -7
  66. claude_mpm/commands/mpm-version.md +113 -0
  67. claude_mpm/commands/mpm.md +2 -0
  68. claude_mpm/config/agent_capabilities.yaml +658 -0
  69. claude_mpm/config/agent_config.py +2 -2
  70. claude_mpm/config/async_logging_config.yaml +145 -0
  71. claude_mpm/constants.py +24 -0
  72. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  73. claude_mpm/core/api_validator.py +1 -1
  74. claude_mpm/core/claude_runner.py +14 -1
  75. claude_mpm/core/config.py +50 -0
  76. claude_mpm/core/constants.py +1 -1
  77. claude_mpm/core/factories.py +1 -1
  78. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  79. claude_mpm/core/hook_error_memory.py +381 -0
  80. claude_mpm/core/hook_manager.py +41 -2
  81. claude_mpm/core/interactive_session.py +48 -3
  82. claude_mpm/core/interfaces.py +56 -1
  83. claude_mpm/core/logger.py +3 -1
  84. claude_mpm/core/oneshot_session.py +39 -0
  85. claude_mpm/core/optimized_agent_loader.py +3 -3
  86. claude_mpm/d2/.gitignore +22 -0
  87. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  88. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  89. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  90. claude_mpm/d2/QUICKSTART.md +186 -0
  91. claude_mpm/d2/README.md +232 -0
  92. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  93. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  94. claude_mpm/d2/TESTING.md +288 -0
  95. claude_mpm/d2/index.html +118 -0
  96. claude_mpm/d2/package.json +19 -0
  97. claude_mpm/d2/src/App.svelte +110 -0
  98. claude_mpm/d2/src/components/Header.svelte +153 -0
  99. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  100. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  101. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  102. claude_mpm/d2/src/lib/socketio.js +144 -0
  103. claude_mpm/d2/src/main.js +7 -0
  104. claude_mpm/d2/src/stores/events.js +114 -0
  105. claude_mpm/d2/src/stores/socket.js +108 -0
  106. claude_mpm/d2/src/stores/theme.js +65 -0
  107. claude_mpm/d2/svelte.config.js +12 -0
  108. claude_mpm/d2/vite.config.js +15 -0
  109. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  110. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  111. claude_mpm/dashboard/README.md +121 -0
  112. claude_mpm/dashboard/VERSION +1 -0
  113. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  114. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  115. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  116. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  117. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  118. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  119. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  120. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  121. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  122. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  123. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  124. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  125. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  127. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  128. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  129. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  130. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  131. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  132. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  135. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  136. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  140. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  141. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  142. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  143. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  144. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  145. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  146. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  147. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  148. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  149. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  150. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  151. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  152. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  153. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  154. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  155. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  156. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  157. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  158. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  159. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  160. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  161. claude_mpm/dashboard/static/css/activity.css +69 -69
  162. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  163. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  164. claude_mpm/dashboard/static/index.html +22 -22
  165. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  166. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  167. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  168. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  169. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  170. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  171. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  172. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  173. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  174. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  175. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  176. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  177. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  178. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  179. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  180. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  181. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  182. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  183. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  184. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  185. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  186. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  187. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  188. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  189. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  190. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  191. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  192. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  193. claude_mpm/dashboard/static/production/main.html +21 -21
  194. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  195. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  196. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  197. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  198. claude_mpm/dashboard/templates/code_simple.html +23 -23
  199. claude_mpm/dashboard/templates/index.html +18 -18
  200. claude_mpm/hooks/README.md +143 -0
  201. claude_mpm/hooks/__init__.py +8 -0
  202. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  203. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  204. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  205. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  206. claude_mpm/hooks/session_resume_hook.py +121 -0
  207. claude_mpm/hooks/templates/README.md +180 -0
  208. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  209. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  210. claude_mpm/hooks/templates/settings.json.example +147 -0
  211. claude_mpm/models/resume_log.py +340 -0
  212. claude_mpm/schemas/agent_schema.json +596 -0
  213. claude_mpm/schemas/frontmatter_schema.json +165 -0
  214. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  215. claude_mpm/scripts/start_activity_logging.py +3 -1
  216. claude_mpm/services/agents/auto_config_manager.py +1 -1
  217. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  218. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  219. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  220. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  221. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  222. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  223. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  224. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  225. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  226. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  227. claude_mpm/services/agents/local_template_manager.py +4 -2
  228. claude_mpm/services/agents/recommender.py +47 -0
  229. claude_mpm/services/cli/resume_service.py +617 -0
  230. claude_mpm/services/cli/session_manager.py +87 -0
  231. claude_mpm/services/cli/session_pause_manager.py +504 -0
  232. claude_mpm/services/cli/session_resume_helper.py +372 -0
  233. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  234. claude_mpm/services/core/base.py +26 -11
  235. claude_mpm/services/core/interfaces.py +56 -1
  236. claude_mpm/services/core/models/agent_config.py +3 -0
  237. claude_mpm/services/core/models/process.py +4 -0
  238. claude_mpm/services/core/path_resolver.py +1 -1
  239. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  240. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  241. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  242. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  243. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  244. claude_mpm/services/diagnostics/models.py +21 -0
  245. claude_mpm/services/event_bus/README.md +244 -0
  246. claude_mpm/services/event_bus/direct_relay.py +3 -3
  247. claude_mpm/services/event_bus/event_bus.py +36 -3
  248. claude_mpm/services/event_bus/relay.py +23 -7
  249. claude_mpm/services/events/README.md +303 -0
  250. claude_mpm/services/events/consumers/logging.py +1 -2
  251. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  252. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  253. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  254. claude_mpm/services/local_ops/__init__.py +2 -0
  255. claude_mpm/services/local_ops/process_manager.py +1 -1
  256. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  257. claude_mpm/services/mcp_config_manager.py +7 -131
  258. claude_mpm/services/mcp_gateway/README.md +185 -0
  259. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  260. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  261. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  262. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  263. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  264. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  265. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  266. claude_mpm/services/memory/failure_tracker.py +19 -4
  267. claude_mpm/services/memory/optimizer.py +1 -1
  268. claude_mpm/services/model/model_router.py +8 -9
  269. claude_mpm/services/monitor/daemon.py +1 -1
  270. claude_mpm/services/monitor/server.py +2 -2
  271. claude_mpm/services/native_agent_converter.py +356 -0
  272. claude_mpm/services/port_manager.py +1 -1
  273. claude_mpm/services/project/documentation_manager.py +2 -1
  274. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  275. claude_mpm/services/runner_configuration_service.py +1 -0
  276. claude_mpm/services/self_upgrade_service.py +165 -7
  277. claude_mpm/services/session_manager.py +205 -1
  278. claude_mpm/services/skills_config.py +547 -0
  279. claude_mpm/services/skills_deployer.py +955 -0
  280. claude_mpm/services/socketio/handlers/connection.py +1 -1
  281. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  282. claude_mpm/services/socketio/handlers/git.py +2 -2
  283. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  284. claude_mpm/services/static/.gitkeep +2 -0
  285. claude_mpm/services/system_instructions_service.py +1 -3
  286. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  287. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  288. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  289. claude_mpm/services/unified/deployment_strategies/local.py +1 -1
  290. claude_mpm/services/version_control/VERSION +1 -0
  291. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  292. claude_mpm/services/version_service.py +104 -1
  293. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  294. claude_mpm/skills/__init__.py +21 -0
  295. claude_mpm/skills/agent_skills_injector.py +324 -0
  296. claude_mpm/skills/bundled/.gitkeep +2 -0
  297. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  298. claude_mpm/skills/bundled/api-documentation.md +393 -0
  299. claude_mpm/skills/bundled/async-testing.md +571 -0
  300. claude_mpm/skills/bundled/code-review.md +143 -0
  301. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  302. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  303. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  304. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  305. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  306. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  307. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  308. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  309. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  310. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  311. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  312. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  313. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  314. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  315. claude_mpm/skills/bundled/database-migration.md +199 -0
  316. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  317. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  318. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  319. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  320. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  321. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  322. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  323. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  324. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  325. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  326. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  327. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  328. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  329. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  330. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  331. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  332. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  333. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  334. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  335. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  336. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  337. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  338. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  339. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  340. claude_mpm/skills/bundled/git-workflow.md +414 -0
  341. claude_mpm/skills/bundled/imagemagick.md +204 -0
  342. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  343. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  344. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  345. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  346. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  347. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  348. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  349. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  350. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  351. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  352. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  353. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  354. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  355. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  356. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  357. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  358. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  359. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  360. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  361. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  362. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  363. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  364. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  365. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  366. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  367. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  368. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  369. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  370. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  371. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  372. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  373. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  374. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  375. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  376. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  377. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  378. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  379. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  380. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  381. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  382. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  383. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  384. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  385. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  386. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  387. claude_mpm/skills/bundled/pdf.md +141 -0
  388. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  389. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  390. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  391. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  392. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  393. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  394. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  395. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  396. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  397. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  398. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  399. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  400. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  401. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  402. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  403. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  404. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  405. claude_mpm/skills/bundled/security-scanning.md +327 -0
  406. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  407. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  408. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  409. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  410. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  411. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  412. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  413. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  414. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  415. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  416. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  417. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  418. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  419. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  420. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  421. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  422. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  423. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  424. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  425. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  426. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  427. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  428. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  429. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  430. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  431. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  432. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  433. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  434. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  435. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  436. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  437. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  438. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  439. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  440. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  441. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  442. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  443. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  444. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  445. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  446. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  447. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  448. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  449. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  450. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  451. claude_mpm/skills/bundled/xlsx.md +157 -0
  452. claude_mpm/skills/registry.py +97 -9
  453. claude_mpm/skills/skills_registry.py +347 -0
  454. claude_mpm/skills/skills_service.py +739 -0
  455. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  456. claude_mpm/templates/questions/__init__.py +43 -0
  457. claude_mpm/templates/questions/base.py +193 -0
  458. claude_mpm/templates/questions/pr_strategy.py +314 -0
  459. claude_mpm/templates/questions/project_init.py +388 -0
  460. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  461. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  462. claude_mpm/tools/__main__.py +8 -8
  463. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  464. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  465. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  466. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  467. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  468. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  469. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  470. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  471. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  472. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  473. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  474. claude_mpm/utils/agent_dependency_loader.py +5 -5
  475. claude_mpm/utils/dependency_cache.py +3 -1
  476. claude_mpm/utils/gitignore.py +241 -0
  477. claude_mpm/utils/log_cleanup.py +3 -3
  478. claude_mpm/utils/robust_installer.py +3 -5
  479. claude_mpm/utils/structured_questions.py +619 -0
  480. claude_mpm-4.25.10.dist-info/METADATA +789 -0
  481. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +485 -240
  482. claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
  483. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  484. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  485. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  486. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  487. claude_mpm/cli/commands/mpm_init.py +0 -2008
  488. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  489. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  490. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  491. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  492. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  493. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  494. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  495. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  496. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  497. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  498. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  499. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  500. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  501. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  502. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  503. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  504. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  505. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  506. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  507. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  508. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  509. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  510. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  511. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  512. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  513. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  514. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  515. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  516. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  517. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  518. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  519. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  520. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  521. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  522. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  523. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  524. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  525. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  526. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  527. claude_mpm-4.16.0.dist-info/METADATA +0 -453
  528. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  529. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  530. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  531. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,767 @@
1
+ ---
2
+ name: tauri-frontend-integration
3
+ description: Frontend integration patterns for Tauri including TypeScript services, React hooks, Vue composition, Svelte stores, and framework-agnostic patterns
4
+ version: 1.0.0
5
+ category: development
6
+ author: Claude MPM Team
7
+ license: MIT
8
+ progressive_disclosure:
9
+ entry_point:
10
+ summary: "Frontend patterns: TypeScript service layer, React hooks for commands/events, Vue/Svelte integration, type safety across IPC boundary"
11
+ when_to_use: "Building Tauri frontend with React, Vue, Svelte, or vanilla JS with proper TypeScript types and abstractions"
12
+ quick_start: "1. Create typed service layer 2. Framework-specific hooks/composables 3. Event handling 4. Error boundaries"
13
+ context_limit: 700
14
+ tags:
15
+ - tauri
16
+ - frontend
17
+ - react
18
+ - vue
19
+ - svelte
20
+ - typescript
21
+ - integration
22
+ requires_tools: []
23
+ ---
24
+
25
+ # Tauri Frontend Integration
26
+
27
+ ## TypeScript Service Layer
28
+
29
+ ### Type-Safe Command Service
30
+
31
+ ```typescript
32
+ // src/services/tauri.ts
33
+ import { invoke } from '@tauri-apps/api/core';
34
+
35
+ // Backend command types
36
+ export interface FileMetadata {
37
+ name: string;
38
+ size: number;
39
+ modified: number;
40
+ isDir: boolean;
41
+ }
42
+
43
+ export interface UserConfig {
44
+ theme: 'light' | 'dark';
45
+ language: string;
46
+ autoSave: boolean;
47
+ }
48
+
49
+ // Command service with full typing
50
+ export class TauriService {
51
+ static async readFile(path: string): Promise<string> {
52
+ return await invoke<string>('read_file', { path });
53
+ }
54
+
55
+ static async writeFile(path: string, content: string): Promise<void> {
56
+ await invoke('write_file', { path, content });
57
+ }
58
+
59
+ static async listFiles(directory: string): Promise<FileMetadata[]> {
60
+ return await invoke<FileMetadata[]>('list_files', { directory });
61
+ }
62
+
63
+ static async getConfig(): Promise<UserConfig> {
64
+ return await invoke<UserConfig>('get_config');
65
+ }
66
+
67
+ static async updateConfig(config: Partial<UserConfig>): Promise<void> {
68
+ await invoke('update_config', { config });
69
+ }
70
+
71
+ static async performSearch(query: string, caseSensitive: boolean): Promise<string[]> {
72
+ return await invoke<string[]>('perform_search', {
73
+ query,
74
+ caseSensitive
75
+ });
76
+ }
77
+ }
78
+ ```
79
+
80
+ ### Result Type Pattern
81
+
82
+ ```typescript
83
+ // src/types/result.ts
84
+ export type Result<T, E = string> =
85
+ | { ok: true; value: T }
86
+ | { ok: false; error: E };
87
+
88
+ export function Ok<T>(value: T): Result<T> {
89
+ return { ok: true, value };
90
+ }
91
+
92
+ export function Err<E = string>(error: E): Result<never, E> {
93
+ return { ok: false, error };
94
+ }
95
+
96
+ // Service using Result type
97
+ export class SafeTauriService {
98
+ static async readFile(path: string): Promise<Result<string>> {
99
+ try {
100
+ const content = await invoke<string>('read_file', { path });
101
+ return Ok(content);
102
+ } catch (error) {
103
+ return Err(String(error));
104
+ }
105
+ }
106
+
107
+ static async writeFile(path: string, content: string): Promise<Result<void>> {
108
+ try {
109
+ await invoke('write_file', { path, content });
110
+ return Ok(undefined);
111
+ } catch (error) {
112
+ return Err(String(error));
113
+ }
114
+ }
115
+ }
116
+ ```
117
+
118
+ ## React Integration
119
+
120
+ ### Custom Hooks for Commands
121
+
122
+ ```typescript
123
+ // src/hooks/useTauriCommand.ts
124
+ import { useState, useEffect } from 'react';
125
+ import { invoke } from '@tauri-apps/api/core';
126
+
127
+ export interface CommandState<T> {
128
+ data: T | null;
129
+ loading: boolean;
130
+ error: string | null;
131
+ }
132
+
133
+ export function useTauriCommand<T>(
134
+ command: string,
135
+ args?: Record<string, unknown>,
136
+ immediate: boolean = true
137
+ ): CommandState<T> & { refetch: () => Promise<void> } {
138
+ const [state, setState] = useState<CommandState<T>>({
139
+ data: null,
140
+ loading: immediate,
141
+ error: null
142
+ });
143
+
144
+ const execute = async () => {
145
+ setState(prev => ({ ...prev, loading: true, error: null }));
146
+
147
+ try {
148
+ const data = await invoke<T>(command, args);
149
+ setState({ data, loading: false, error: null });
150
+ } catch (error) {
151
+ setState({ data: null, loading: false, error: String(error) });
152
+ }
153
+ };
154
+
155
+ useEffect(() => {
156
+ if (immediate) {
157
+ execute();
158
+ }
159
+ }, [command, JSON.stringify(args)]);
160
+
161
+ return { ...state, refetch: execute };
162
+ }
163
+
164
+ // Usage
165
+ function FileList() {
166
+ const { data: files, loading, error, refetch } = useTauriCommand<FileMetadata[]>(
167
+ 'list_files',
168
+ { directory: '/home/user/documents' }
169
+ );
170
+
171
+ if (loading) return <div>Loading...</div>;
172
+ if (error) return <div>Error: {error}</div>;
173
+
174
+ return (
175
+ <div>
176
+ <button onClick={refetch}>Refresh</button>
177
+ {files?.map(file => (
178
+ <div key={file.name}>{file.name}</div>
179
+ ))}
180
+ </div>
181
+ );
182
+ }
183
+ ```
184
+
185
+ ### Event Hooks
186
+
187
+ ```typescript
188
+ // src/hooks/useTauriEvent.ts
189
+ import { useEffect, useState } from 'react';
190
+ import { listen, UnlistenFn } from '@tauri-apps/api/event';
191
+
192
+ export function useTauriEvent<T>(event: string): T | null {
193
+ const [data, setData] = useState<T | null>(null);
194
+
195
+ useEffect(() => {
196
+ let unlisten: UnlistenFn;
197
+
198
+ listen<T>(event, (e) => {
199
+ setData(e.payload);
200
+ }).then(fn => {
201
+ unlisten = fn;
202
+ });
203
+
204
+ return () => {
205
+ if (unlisten) unlisten();
206
+ };
207
+ }, [event]);
208
+
209
+ return data;
210
+ }
211
+
212
+ // Usage
213
+ function ProgressBar() {
214
+ const progress = useTauriEvent<{ current: number; total: number }>('download-progress');
215
+
216
+ if (!progress) return null;
217
+
218
+ const percentage = (progress.current / progress.total) * 100;
219
+
220
+ return (
221
+ <div className="progress-bar">
222
+ <div style={{ width: `${percentage}%` }} />
223
+ <span>{percentage.toFixed(0)}%</span>
224
+ </div>
225
+ );
226
+ }
227
+ ```
228
+
229
+ ### Bidirectional Event Hook
230
+
231
+ ```typescript
232
+ // src/hooks/useTauriEventEmitter.ts
233
+ import { useCallback, useEffect } from 'react';
234
+ import { listen, emit, UnlistenFn } from '@tauri-apps/api/event';
235
+
236
+ export function useTauriEventEmitter<T, R>(
237
+ emitEvent: string,
238
+ listenEvent: string,
239
+ handler: (data: R) => void
240
+ ) {
241
+ useEffect(() => {
242
+ let unlisten: UnlistenFn;
243
+
244
+ listen<R>(listenEvent, (e) => {
245
+ handler(e.payload);
246
+ }).then(fn => {
247
+ unlisten = fn;
248
+ });
249
+
250
+ return () => {
251
+ if (unlisten) unlisten();
252
+ };
253
+ }, [listenEvent, handler]);
254
+
255
+ const send = useCallback(async (data: T) => {
256
+ await emit(emitEvent, data);
257
+ }, [emitEvent]);
258
+
259
+ return send;
260
+ }
261
+
262
+ // Usage
263
+ function Chat() {
264
+ const [messages, setMessages] = useState<string[]>([]);
265
+
266
+ const sendMessage = useTauriEventEmitter<string, string>(
267
+ 'send-message',
268
+ 'receive-message',
269
+ (msg) => setMessages(prev => [...prev, msg])
270
+ );
271
+
272
+ return (
273
+ <div>
274
+ {messages.map((msg, i) => <div key={i}>{msg}</div>)}
275
+ <button onClick={() => sendMessage('Hello!')}>Send</button>
276
+ </div>
277
+ );
278
+ }
279
+ ```
280
+
281
+ ### Context Provider Pattern
282
+
283
+ ```typescript
284
+ // src/contexts/TauriContext.tsx
285
+ import React, { createContext, useContext, useState, useEffect } from 'react';
286
+ import { invoke } from '@tauri-apps/api/core';
287
+
288
+ interface AppState {
289
+ config: UserConfig | null;
290
+ updateConfig: (config: Partial<UserConfig>) => Promise<void>;
291
+ }
292
+
293
+ const TauriContext = createContext<AppState | undefined>(undefined);
294
+
295
+ export function TauriProvider({ children }: { children: React.ReactNode }) {
296
+ const [config, setConfig] = useState<UserConfig | null>(null);
297
+
298
+ useEffect(() => {
299
+ invoke<UserConfig>('get_config').then(setConfig);
300
+ }, []);
301
+
302
+ const updateConfig = async (newConfig: Partial<UserConfig>) => {
303
+ await invoke('update_config', { config: newConfig });
304
+ setConfig(prev => ({ ...prev!, ...newConfig }));
305
+ };
306
+
307
+ return (
308
+ <TauriContext.Provider value={{ config, updateConfig }}>
309
+ {children}
310
+ </TauriContext.Provider>
311
+ );
312
+ }
313
+
314
+ export function useTauri() {
315
+ const context = useContext(TauriContext);
316
+ if (!context) throw new Error('useTauri must be used within TauriProvider');
317
+ return context;
318
+ }
319
+
320
+ // Usage
321
+ function App() {
322
+ return (
323
+ <TauriProvider>
324
+ <SettingsPanel />
325
+ </TauriProvider>
326
+ );
327
+ }
328
+
329
+ function SettingsPanel() {
330
+ const { config, updateConfig } = useTauri();
331
+
332
+ return (
333
+ <div>
334
+ <label>
335
+ <input
336
+ type="checkbox"
337
+ checked={config?.autoSave}
338
+ onChange={(e) => updateConfig({ autoSave: e.target.checked })}
339
+ />
340
+ Auto Save
341
+ </label>
342
+ </div>
343
+ );
344
+ }
345
+ ```
346
+
347
+ ## Vue 3 Integration
348
+
349
+ ### Composition API Composables
350
+
351
+ ```typescript
352
+ // src/composables/useTauriCommand.ts
353
+ import { ref, Ref, onMounted } from 'vue';
354
+ import { invoke } from '@tauri-apps/api/core';
355
+
356
+ export function useTauriCommand<T>(
357
+ command: string,
358
+ args?: Record<string, unknown>,
359
+ immediate: boolean = true
360
+ ) {
361
+ const data: Ref<T | null> = ref(null);
362
+ const loading = ref(immediate);
363
+ const error: Ref<string | null> = ref(null);
364
+
365
+ const execute = async () => {
366
+ loading.value = true;
367
+ error.value = null;
368
+
369
+ try {
370
+ data.value = await invoke<T>(command, args);
371
+ } catch (e) {
372
+ error.value = String(e);
373
+ } finally {
374
+ loading.value = false;
375
+ }
376
+ };
377
+
378
+ if (immediate) {
379
+ onMounted(execute);
380
+ }
381
+
382
+ return { data, loading, error, refetch: execute };
383
+ }
384
+
385
+ // Usage in component
386
+ <script setup lang="ts">
387
+ import { useTauriCommand } from '@/composables/useTauriCommand';
388
+
389
+ const { data: files, loading, error } = useTauriCommand<FileMetadata[]>(
390
+ 'list_files',
391
+ { directory: '/home/user' }
392
+ );
393
+ </script>
394
+
395
+ <template>
396
+ <div v-if="loading">Loading...</div>
397
+ <div v-else-if="error">Error: {{ error }}</div>
398
+ <div v-else>
399
+ <div v-for="file in files" :key="file.name">
400
+ {{ file.name }}
401
+ </div>
402
+ </div>
403
+ </template>
404
+ ```
405
+
406
+ ### Event Composable
407
+
408
+ ```typescript
409
+ // src/composables/useTauriEvent.ts
410
+ import { ref, Ref, onMounted, onUnmounted } from 'vue';
411
+ import { listen, UnlistenFn } from '@tauri-apps/api/event';
412
+
413
+ export function useTauriEvent<T>(event: string): Ref<T | null> {
414
+ const data: Ref<T | null> = ref(null);
415
+ let unlisten: UnlistenFn;
416
+
417
+ onMounted(async () => {
418
+ unlisten = await listen<T>(event, (e) => {
419
+ data.value = e.payload;
420
+ });
421
+ });
422
+
423
+ onUnmounted(() => {
424
+ if (unlisten) unlisten();
425
+ });
426
+
427
+ return data;
428
+ }
429
+
430
+ // Usage
431
+ <script setup lang="ts">
432
+ const progress = useTauriEvent<{ current: number; total: number }>('download-progress');
433
+ </script>
434
+
435
+ <template>
436
+ <div v-if="progress">
437
+ {{ Math.floor((progress.current / progress.total) * 100) }}%
438
+ </div>
439
+ </template>
440
+ ```
441
+
442
+ ### Provide/Inject Pattern
443
+
444
+ ```typescript
445
+ // src/composables/useTauriApp.ts
446
+ import { provide, inject, InjectionKey, Ref, ref, onMounted } from 'vue';
447
+ import { invoke } from '@tauri-apps/api/core';
448
+
449
+ interface TauriApp {
450
+ config: Ref<UserConfig | null>;
451
+ updateConfig: (config: Partial<UserConfig>) => Promise<void>;
452
+ }
453
+
454
+ const TauriAppKey: InjectionKey<TauriApp> = Symbol('TauriApp');
455
+
456
+ export function provideTauriApp() {
457
+ const config = ref<UserConfig | null>(null);
458
+
459
+ onMounted(async () => {
460
+ config.value = await invoke<UserConfig>('get_config');
461
+ });
462
+
463
+ const updateConfig = async (newConfig: Partial<UserConfig>) => {
464
+ await invoke('update_config', { config: newConfig });
465
+ config.value = { ...config.value!, ...newConfig };
466
+ };
467
+
468
+ const app: TauriApp = { config, updateConfig };
469
+ provide(TauriAppKey, app);
470
+ }
471
+
472
+ export function useTauriApp(): TauriApp {
473
+ const app = inject(TauriAppKey);
474
+ if (!app) throw new Error('useTauriApp must be called within TauriApp provider');
475
+ return app;
476
+ }
477
+ ```
478
+
479
+ ## Svelte Integration
480
+
481
+ ### Svelte Stores
482
+
483
+ ```typescript
484
+ // src/stores/tauri.ts
485
+ import { writable, derived, Readable } from 'svelte/store';
486
+ import { invoke } from '@tauri-apps/api/core';
487
+ import { listen } from '@tauri-apps/api/event';
488
+
489
+ export function createCommandStore<T>(command: string, args?: Record<string, unknown>) {
490
+ const { subscribe, set } = writable<{
491
+ data: T | null;
492
+ loading: boolean;
493
+ error: string | null;
494
+ }>({
495
+ data: null,
496
+ loading: true,
497
+ error: null
498
+ });
499
+
500
+ const load = async () => {
501
+ set({ data: null, loading: true, error: null });
502
+
503
+ try {
504
+ const data = await invoke<T>(command, args);
505
+ set({ data, loading: false, error: null });
506
+ } catch (error) {
507
+ set({ data: null, loading: false, error: String(error) });
508
+ }
509
+ };
510
+
511
+ load();
512
+
513
+ return {
514
+ subscribe,
515
+ refetch: load
516
+ };
517
+ }
518
+
519
+ // Usage
520
+ <script lang="ts">
521
+ import { createCommandStore } from '$lib/stores/tauri';
522
+
523
+ const files = createCommandStore<FileMetadata[]>('list_files', {
524
+ directory: '/home/user'
525
+ });
526
+ </script>
527
+
528
+ {#if $files.loading}
529
+ <div>Loading...</div>
530
+ {:else if $files.error}
531
+ <div>Error: {$files.error}</div>
532
+ {:else}
533
+ {#each $files.data ?? [] as file}
534
+ <div>{file.name}</div>
535
+ {/each}
536
+ {/if}
537
+ ```
538
+
539
+ ### Event Store
540
+
541
+ ```typescript
542
+ // src/stores/events.ts
543
+ import { writable } from 'svelte/store';
544
+ import { listen, UnlistenFn } from '@tauri-apps/api/event';
545
+
546
+ export function createEventStore<T>(event: string) {
547
+ const { subscribe, set } = writable<T | null>(null);
548
+
549
+ let unlisten: UnlistenFn;
550
+
551
+ listen<T>(event, (e) => {
552
+ set(e.payload);
553
+ }).then(fn => {
554
+ unlisten = fn;
555
+ });
556
+
557
+ return {
558
+ subscribe,
559
+ cleanup: () => {
560
+ if (unlisten) unlisten();
561
+ }
562
+ };
563
+ }
564
+
565
+ // Usage
566
+ <script lang="ts">
567
+ import { onDestroy } from 'svelte';
568
+
569
+ const progress = createEventStore<{ current: number; total: number }>('download-progress');
570
+
571
+ onDestroy(() => {
572
+ progress.cleanup();
573
+ });
574
+ </script>
575
+
576
+ {#if $progress}
577
+ <div>
578
+ {Math.floor(($progress.current / $progress.total) * 100)}%
579
+ </div>
580
+ {/if}
581
+ ```
582
+
583
+ ## Framework-Agnostic Patterns
584
+
585
+ ### Observable Pattern
586
+
587
+ ```typescript
588
+ // src/utils/observable.ts
589
+ export class TauriObservable<T> {
590
+ private listeners: Set<(data: T) => void> = new Set();
591
+ private value: T | null = null;
592
+
593
+ subscribe(listener: (data: T) => void): () => void {
594
+ this.listeners.add(listener);
595
+ if (this.value !== null) listener(this.value);
596
+
597
+ return () => this.listeners.delete(listener);
598
+ }
599
+
600
+ emit(data: T) {
601
+ this.value = data;
602
+ this.listeners.forEach(listener => listener(data));
603
+ }
604
+
605
+ getValue(): T | null {
606
+ return this.value;
607
+ }
608
+ }
609
+
610
+ // Command observable
611
+ export function createCommandObservable<T>(
612
+ command: string,
613
+ args?: Record<string, unknown>
614
+ ): TauriObservable<T> {
615
+ const observable = new TauriObservable<T>();
616
+
617
+ invoke<T>(command, args)
618
+ .then(data => observable.emit(data))
619
+ .catch(err => console.error(err));
620
+
621
+ return observable;
622
+ }
623
+
624
+ // Event observable
625
+ export function createEventObservable<T>(event: string): TauriObservable<T> {
626
+ const observable = new TauriObservable<T>();
627
+
628
+ listen<T>(event, (e) => {
629
+ observable.emit(e.payload);
630
+ });
631
+
632
+ return observable;
633
+ }
634
+ ```
635
+
636
+ ## Error Boundaries
637
+
638
+ ### React Error Boundary
639
+
640
+ ```typescript
641
+ // src/components/TauriErrorBoundary.tsx
642
+ import React, { Component, ErrorInfo, ReactNode } from 'react';
643
+
644
+ interface Props {
645
+ children: ReactNode;
646
+ fallback?: (error: Error) => ReactNode;
647
+ }
648
+
649
+ interface State {
650
+ hasError: boolean;
651
+ error: Error | null;
652
+ }
653
+
654
+ export class TauriErrorBoundary extends Component<Props, State> {
655
+ state: State = {
656
+ hasError: false,
657
+ error: null
658
+ };
659
+
660
+ static getDerivedStateFromError(error: Error): State {
661
+ return { hasError: true, error };
662
+ }
663
+
664
+ componentDidCatch(error: Error, errorInfo: ErrorInfo) {
665
+ console.error('Tauri Error:', error, errorInfo);
666
+
667
+ // Log to backend
668
+ import('@tauri-apps/api/core').then(({ invoke }) => {
669
+ invoke('log_error', {
670
+ error: error.toString(),
671
+ info: errorInfo.componentStack
672
+ }).catch(console.error);
673
+ });
674
+ }
675
+
676
+ render() {
677
+ if (this.state.hasError && this.state.error) {
678
+ if (this.props.fallback) {
679
+ return this.props.fallback(this.state.error);
680
+ }
681
+
682
+ return (
683
+ <div className="error-boundary">
684
+ <h2>Something went wrong</h2>
685
+ <pre>{this.state.error.message}</pre>
686
+ </div>
687
+ );
688
+ }
689
+
690
+ return this.props.children;
691
+ }
692
+ }
693
+
694
+ // Usage
695
+ <TauriErrorBoundary>
696
+ <App />
697
+ </TauriErrorBoundary>
698
+ ```
699
+
700
+ ## Best Practices
701
+
702
+ 1. **Type everything** - Full TypeScript types across IPC boundary
703
+ 2. **Service layer** - Abstract Tauri commands into typed service
704
+ 3. **Framework hooks/composables** - Idiomatic patterns for each framework
705
+ 4. **Error boundaries** - Catch and log Tauri errors
706
+ 5. **Loading states** - Always handle loading/error states
707
+ 6. **Event cleanup** - Unlisten from events on unmount
708
+ 7. **Result types** - Use Result<T, E> for explicit error handling
709
+ 8. **Context/Provide** - Share Tauri state across component tree
710
+ 9. **Observable pattern** - Framework-agnostic state management
711
+ 10. **Async safety** - Handle race conditions and cancellation
712
+
713
+ ## Common Pitfalls
714
+
715
+ ❌ **Not unlistening from events**:
716
+ ```typescript
717
+ // WRONG - memory leak
718
+ useEffect(() => {
719
+ listen('my-event', handler);
720
+ }, []);
721
+
722
+ // CORRECT - cleanup
723
+ useEffect(() => {
724
+ let unlisten: UnlistenFn;
725
+ listen('my-event', handler).then(fn => unlisten = fn);
726
+ return () => { if (unlisten) unlisten(); };
727
+ }, []);
728
+ ```
729
+
730
+ ❌ **Missing loading/error states**:
731
+ ```typescript
732
+ // WRONG - no feedback
733
+ const data = await invoke('command');
734
+ return <div>{data}</div>;
735
+
736
+ // CORRECT - handle all states
737
+ const { data, loading, error } = useTauriCommand('command');
738
+ if (loading) return <div>Loading...</div>;
739
+ if (error) return <div>Error: {error}</div>;
740
+ return <div>{data}</div>;
741
+ ```
742
+
743
+ ❌ **Invoking in render**:
744
+ ```typescript
745
+ // WRONG - invokes every render
746
+ function Component() {
747
+ const data = invoke('command'); // DON'T DO THIS
748
+ }
749
+
750
+ // CORRECT - use hooks/effects
751
+ function Component() {
752
+ const { data } = useTauriCommand('command');
753
+ }
754
+ ```
755
+
756
+ ## Summary
757
+
758
+ - **TypeScript service layer** for type-safe command abstraction
759
+ - **React hooks** (useTauriCommand, useTauriEvent) for declarative data
760
+ - **Vue composables** with Composition API patterns
761
+ - **Svelte stores** for reactive command/event data
762
+ - **Framework-agnostic** observable pattern
763
+ - **Error boundaries** to catch and log Tauri errors
764
+ - **Result types** for explicit error handling
765
+ - **Context patterns** for shared Tauri state
766
+ - **Event cleanup** to prevent memory leaks
767
+ - **Type safety** across entire IPC boundary