claude-mpm 4.20.3__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 (454) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +23 -6
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +1783 -34
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/base_agent.json +6 -3
  7. claude_mpm/agents/frontmatter_validator.py +1 -1
  8. claude_mpm/agents/templates/api_qa.json +5 -2
  9. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  10. claude_mpm/agents/templates/documentation.json +33 -6
  11. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  12. claude_mpm/agents/templates/php-engineer.json +10 -4
  13. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  14. claude_mpm/agents/templates/project_organizer.json +7 -3
  15. claude_mpm/agents/templates/qa.json +2 -1
  16. claude_mpm/agents/templates/react_engineer.json +1 -0
  17. claude_mpm/agents/templates/research.json +82 -12
  18. claude_mpm/agents/templates/security.json +4 -4
  19. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  20. claude_mpm/agents/templates/ticketing.json +10 -6
  21. claude_mpm/agents/templates/version_control.json +4 -2
  22. claude_mpm/agents/templates/web_qa.json +2 -1
  23. claude_mpm/cli/README.md +253 -0
  24. claude_mpm/cli/__init__.py +11 -1
  25. claude_mpm/cli/commands/aggregate.py +1 -1
  26. claude_mpm/cli/commands/analyze.py +3 -3
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  29. claude_mpm/cli/commands/debug.py +12 -12
  30. claude_mpm/cli/commands/hook_errors.py +277 -0
  31. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  32. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  33. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  34. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  35. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  36. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  37. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  38. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  39. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  40. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  41. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  42. claude_mpm/cli/commands/run.py +124 -128
  43. claude_mpm/cli/commands/skills.py +522 -34
  44. claude_mpm/cli/executor.py +56 -0
  45. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  46. claude_mpm/cli/parsers/base_parser.py +28 -0
  47. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  48. claude_mpm/cli/parsers/skills_parser.py +138 -0
  49. claude_mpm/cli/startup.py +111 -8
  50. claude_mpm/cli/startup_display.py +480 -0
  51. claude_mpm/cli/utils.py +1 -1
  52. claude_mpm/cli_module/commands.py +1 -1
  53. claude_mpm/cli_module/refactoring_guide.md +253 -0
  54. claude_mpm/commands/mpm-help.md +3 -0
  55. claude_mpm/commands/mpm-init.md +19 -3
  56. claude_mpm/commands/mpm-resume.md +372 -0
  57. claude_mpm/commands/mpm-tickets.md +56 -7
  58. claude_mpm/commands/mpm.md +1 -0
  59. claude_mpm/config/agent_capabilities.yaml +658 -0
  60. claude_mpm/config/async_logging_config.yaml +145 -0
  61. claude_mpm/constants.py +12 -0
  62. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  63. claude_mpm/core/api_validator.py +1 -1
  64. claude_mpm/core/claude_runner.py +14 -1
  65. claude_mpm/core/config.py +8 -0
  66. claude_mpm/core/constants.py +1 -1
  67. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  68. claude_mpm/core/hook_error_memory.py +381 -0
  69. claude_mpm/core/hook_manager.py +41 -2
  70. claude_mpm/core/interactive_session.py +48 -3
  71. claude_mpm/core/interfaces.py +56 -1
  72. claude_mpm/core/logger.py +3 -1
  73. claude_mpm/core/oneshot_session.py +39 -0
  74. claude_mpm/d2/.gitignore +22 -0
  75. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  76. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  77. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  78. claude_mpm/d2/QUICKSTART.md +186 -0
  79. claude_mpm/d2/README.md +232 -0
  80. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  81. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  82. claude_mpm/d2/TESTING.md +288 -0
  83. claude_mpm/d2/index.html +118 -0
  84. claude_mpm/d2/package.json +19 -0
  85. claude_mpm/d2/src/App.svelte +110 -0
  86. claude_mpm/d2/src/components/Header.svelte +153 -0
  87. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  88. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  89. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  90. claude_mpm/d2/src/lib/socketio.js +144 -0
  91. claude_mpm/d2/src/main.js +7 -0
  92. claude_mpm/d2/src/stores/events.js +114 -0
  93. claude_mpm/d2/src/stores/socket.js +108 -0
  94. claude_mpm/d2/src/stores/theme.js +65 -0
  95. claude_mpm/d2/svelte.config.js +12 -0
  96. claude_mpm/d2/vite.config.js +15 -0
  97. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  98. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  99. claude_mpm/dashboard/README.md +121 -0
  100. claude_mpm/dashboard/VERSION +1 -0
  101. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  102. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  103. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  104. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  105. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  106. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  107. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  108. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  109. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  110. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  111. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  112. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  113. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  114. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  115. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  116. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  117. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  118. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  119. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  120. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  121. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  122. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  123. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  124. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  125. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  127. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  128. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  129. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  130. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  131. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  132. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  135. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  136. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  140. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  141. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  142. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  143. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  144. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  145. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  146. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  147. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  148. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  149. claude_mpm/dashboard/static/css/activity.css +69 -69
  150. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  151. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  152. claude_mpm/dashboard/static/index.html +22 -22
  153. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  154. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  155. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  156. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  157. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  158. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  159. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  160. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  161. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  162. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  163. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  164. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  165. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  166. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  167. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  168. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  169. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  170. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  171. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  172. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  173. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  174. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  175. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  176. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  177. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  178. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  179. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  180. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  181. claude_mpm/dashboard/static/production/main.html +21 -21
  182. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  183. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  184. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  185. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  186. claude_mpm/dashboard/templates/code_simple.html +23 -23
  187. claude_mpm/dashboard/templates/index.html +18 -18
  188. claude_mpm/hooks/README.md +143 -0
  189. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  190. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  191. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  192. claude_mpm/hooks/templates/README.md +180 -0
  193. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  194. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  195. claude_mpm/hooks/templates/settings.json.example +147 -0
  196. claude_mpm/schemas/agent_schema.json +596 -0
  197. claude_mpm/schemas/frontmatter_schema.json +165 -0
  198. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  199. claude_mpm/scripts/start_activity_logging.py +3 -1
  200. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  201. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  202. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  203. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  204. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  205. claude_mpm/services/agents/local_template_manager.py +3 -1
  206. claude_mpm/services/cli/session_pause_manager.py +504 -0
  207. claude_mpm/services/cli/session_resume_helper.py +36 -16
  208. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  209. claude_mpm/services/core/base.py +26 -11
  210. claude_mpm/services/core/interfaces.py +56 -1
  211. claude_mpm/services/core/models/agent_config.py +3 -0
  212. claude_mpm/services/core/models/process.py +4 -0
  213. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  214. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  215. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  216. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  217. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  218. claude_mpm/services/diagnostics/models.py +21 -0
  219. claude_mpm/services/event_bus/README.md +244 -0
  220. claude_mpm/services/event_bus/direct_relay.py +3 -3
  221. claude_mpm/services/event_bus/event_bus.py +36 -3
  222. claude_mpm/services/event_bus/relay.py +23 -7
  223. claude_mpm/services/events/README.md +303 -0
  224. claude_mpm/services/events/consumers/logging.py +1 -2
  225. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  226. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  227. claude_mpm/services/local_ops/__init__.py +2 -0
  228. claude_mpm/services/local_ops/process_manager.py +1 -1
  229. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  230. claude_mpm/services/mcp_gateway/README.md +185 -0
  231. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  232. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  233. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  234. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  235. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  236. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  237. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  238. claude_mpm/services/memory/failure_tracker.py +19 -4
  239. claude_mpm/services/memory/optimizer.py +1 -1
  240. claude_mpm/services/model/model_router.py +8 -9
  241. claude_mpm/services/monitor/daemon.py +1 -1
  242. claude_mpm/services/monitor/server.py +2 -2
  243. claude_mpm/services/native_agent_converter.py +356 -0
  244. claude_mpm/services/port_manager.py +1 -1
  245. claude_mpm/services/project/documentation_manager.py +2 -1
  246. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  247. claude_mpm/services/runner_configuration_service.py +1 -0
  248. claude_mpm/services/self_upgrade_service.py +165 -7
  249. claude_mpm/services/skills_config.py +547 -0
  250. claude_mpm/services/skills_deployer.py +955 -0
  251. claude_mpm/services/socketio/handlers/connection.py +1 -1
  252. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  253. claude_mpm/services/socketio/handlers/git.py +2 -2
  254. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  255. claude_mpm/services/static/.gitkeep +2 -0
  256. claude_mpm/services/system_instructions_service.py +1 -3
  257. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  258. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  259. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  260. claude_mpm/services/version_control/VERSION +1 -0
  261. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  262. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  263. claude_mpm/skills/__init__.py +3 -3
  264. claude_mpm/skills/agent_skills_injector.py +42 -49
  265. claude_mpm/skills/bundled/.gitkeep +2 -0
  266. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +4 -0
  267. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +108 -114
  268. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  269. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  270. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  271. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  272. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  273. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +46 -41
  274. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  275. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  276. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +36 -73
  277. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  278. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  279. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +100 -125
  280. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  281. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  282. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  283. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  284. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  285. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +28 -72
  286. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +11 -0
  287. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  288. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  289. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +272 -0
  290. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  291. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  292. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  293. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  294. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  295. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  296. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  297. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  298. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  299. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  300. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  301. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +13 -1
  302. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  303. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  304. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  305. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  306. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +11 -0
  307. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  308. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +109 -277
  309. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  310. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  311. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
  312. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
  313. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  314. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  315. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  316. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +135 -155
  317. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  318. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  319. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  320. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  321. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  322. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
  323. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
  324. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
  325. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  326. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  327. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  328. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  329. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  330. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  331. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  332. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  333. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  334. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  335. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  336. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  337. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  338. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  339. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  340. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  341. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  342. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  343. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  344. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  345. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  346. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  347. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  348. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  349. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  350. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  351. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  352. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +21 -25
  353. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  354. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  355. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  356. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  357. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  358. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  359. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  360. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +86 -250
  361. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  362. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  363. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  364. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  365. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  366. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +145 -57
  367. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  368. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
  369. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
  370. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
  371. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  372. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  373. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
  374. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  375. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  376. claude_mpm/skills/skills_registry.py +44 -48
  377. claude_mpm/skills/skills_service.py +117 -108
  378. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  379. claude_mpm/templates/questions/__init__.py +43 -0
  380. claude_mpm/templates/questions/base.py +193 -0
  381. claude_mpm/templates/questions/pr_strategy.py +314 -0
  382. claude_mpm/templates/questions/project_init.py +388 -0
  383. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  384. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  385. claude_mpm/tools/__main__.py +8 -8
  386. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  387. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  388. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  389. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  390. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  391. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  392. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  393. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  394. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  395. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  396. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  397. claude_mpm/utils/agent_dependency_loader.py +3 -3
  398. claude_mpm/utils/dependency_cache.py +3 -1
  399. claude_mpm/utils/gitignore.py +241 -0
  400. claude_mpm/utils/log_cleanup.py +3 -3
  401. claude_mpm/utils/robust_installer.py +3 -5
  402. claude_mpm/utils/structured_questions.py +619 -0
  403. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/METADATA +218 -31
  404. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +409 -246
  405. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  406. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  407. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  408. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  409. claude_mpm/cli/commands/mpm_init.py +0 -2093
  410. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  411. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  412. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  413. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  414. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  415. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  416. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  417. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  418. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  419. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  420. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  421. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  422. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  423. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  424. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  425. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  426. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  427. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  428. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  429. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  430. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  443. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  444. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  445. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  446. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  447. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  448. claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
  449. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  450. /claude_mpm/skills/bundled/collaboration/requesting-code-review/{code-reviewer.md → references/code-reviewer-template.md} +0 -0
  451. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  452. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  453. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  454. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -23,6 +23,7 @@ from datetime import datetime, timezone
23
23
  from typing import Any, Dict, Optional
24
24
 
25
25
  from ..core.logger import get_logger
26
+ from .hook_error_memory import get_hook_error_memory
26
27
  from .hook_performance_config import get_hook_performance_config
27
28
  from .unified_paths import get_package_root
28
29
 
@@ -42,6 +43,9 @@ class HookManager:
42
43
  self.session_id = self._get_or_create_session_id()
43
44
  self.hook_handler_path = self._find_hook_handler()
44
45
 
46
+ # Initialize error memory for tracking and preventing repeated errors
47
+ self.error_memory = get_hook_error_memory()
48
+
45
49
  # Initialize background hook processing for async execution
46
50
  self.performance_config = get_hook_performance_config()
47
51
  queue_config = self.performance_config.get_queue_config()
@@ -97,11 +101,31 @@ class HookManager:
97
101
  self.logger.debug("Started background hook processor thread")
98
102
 
99
103
  def _execute_hook_sync(self, hook_data: Dict[str, Any]):
100
- """Execute a single hook synchronously in the background thread."""
104
+ """Execute a single hook synchronously in the background thread with error detection.
105
+
106
+ WHY error detection:
107
+ - Prevents repeated execution of failing hooks
108
+ - Provides actionable error messages to users
109
+ - Learns from failures to improve system reliability
110
+ - Reduces log noise from repeated errors
111
+ """
101
112
  try:
102
113
  hook_type = hook_data["hook_type"]
103
114
  event_data = hook_data["event_data"]
104
115
 
116
+ # Check if this hook is known to fail repeatedly
117
+ if self.error_memory.should_skip_hook(hook_type):
118
+ known_error = self.error_memory.is_known_failing_hook(hook_type)
119
+ if known_error:
120
+ # Log warning but don't spam - only on first skip
121
+ if known_error["count"] == 2: # First time we're skipping
122
+ self.logger.warning(
123
+ f"⚠️ Skipping {hook_type} hook - failed {known_error['count']} times previously\n"
124
+ f"Error: {known_error['match']}\n"
125
+ f"To retry: rm {self.error_memory.memory_file}"
126
+ )
127
+ return
128
+
105
129
  # Create the hook event
106
130
  hook_event = {
107
131
  "hook_event_name": hook_type,
@@ -127,7 +151,22 @@ class HookManager:
127
151
  check=False,
128
152
  )
129
153
 
130
- if result.returncode != 0:
154
+ # Detect errors in the output
155
+ error_info = self.error_memory.detect_error(
156
+ result.stdout or "", result.stderr or "", result.returncode
157
+ )
158
+
159
+ if error_info:
160
+ # Record the error
161
+ self.error_memory.record_error(error_info, hook_type)
162
+
163
+ # Get fix suggestion
164
+ suggestion = self.error_memory.suggest_fix(error_info)
165
+
166
+ # Log error with suggestion
167
+ self.logger.warning(f"Hook {hook_type} error detected:\n{suggestion}")
168
+ elif result.returncode != 0:
169
+ # Non-zero return without detected pattern
131
170
  self.logger.debug(f"Hook {hook_type} returned code {result.returncode}")
132
171
  if result.stderr:
133
172
  self.logger.debug(f"Hook stderr: {result.stderr}")
@@ -85,8 +85,8 @@ class InteractiveSession:
85
85
  self.logger.warning(f"WebSocket initialization failed: {error}")
86
86
  # Continue without WebSocket - not a fatal error
87
87
 
88
- # Display welcome message
89
- self._display_welcome_message()
88
+ # Banner now displayed in CLI startup - see startup_display.py
89
+ # Removed duplicate _display_welcome_message() to consolidate with main banner
90
90
 
91
91
  # Log session start
92
92
  if self.runner.project_logger:
@@ -293,7 +293,12 @@ class InteractiveSession:
293
293
  return False, f"Unexpected error with Socket.IO: {e}"
294
294
 
295
295
  def _display_welcome_message(self) -> None:
296
- """Display the interactive session welcome message."""
296
+ """Display the interactive session welcome message.
297
+
298
+ DEPRECATED: This method is kept for backward compatibility with tests.
299
+ The main banner is now displayed in startup_display.py during CLI startup.
300
+ This consolidated approach prevents duplicate banners.
301
+ """
297
302
  version_str = self.runner._get_version()
298
303
 
299
304
  # Get output style status
@@ -383,6 +388,14 @@ class InteractiveSession:
383
388
  self.logger.debug(f"Raw claude_args received: {self.runner.claude_args}")
384
389
  cmd.extend(self.runner.claude_args)
385
390
 
391
+ # Add --agents flag if native agents mode is enabled
392
+ if getattr(self.runner, "use_native_agents", False):
393
+ agents_flag = self._build_agents_flag()
394
+ if agents_flag:
395
+ # Add --agents JSON directly (already properly formatted)
396
+ cmd.extend(agents_flag)
397
+ self.logger.info("✓ Native agents mode: Using --agents CLI flag")
398
+
386
399
  # Add system instructions
387
400
  from claude_mpm.core.claude_runner import create_simple_context
388
401
 
@@ -402,6 +415,38 @@ class InteractiveSession:
402
415
 
403
416
  return cmd
404
417
 
418
+ def _build_agents_flag(self) -> Optional[list]:
419
+ """Build --agents flag with all MPM agents.
420
+
421
+ Returns:
422
+ List with ["--agents", "<json>"] or None if conversion fails
423
+ """
424
+ try:
425
+ from claude_mpm.services.native_agent_converter import NativeAgentConverter
426
+
427
+ converter = NativeAgentConverter()
428
+ agents = converter.load_agents_from_templates()
429
+
430
+ if not agents:
431
+ self.logger.warning("No agents loaded for native mode")
432
+ return None
433
+
434
+ # Generate JSON for --agents flag
435
+ agents_json = converter.generate_agents_json(agents)
436
+ summary = converter.get_conversion_summary(agents)
437
+
438
+ self.logger.info(
439
+ f"Native agents: {summary['total_agents']} agents, "
440
+ f"{summary['json_size_kb']} KB JSON"
441
+ )
442
+
443
+ # Return as list: ["--agents", "<json>"]
444
+ return ["--agents", agents_json]
445
+
446
+ except Exception as e:
447
+ self.logger.error(f"Failed to build --agents flag: {e}", exc_info=True)
448
+ return None
449
+
405
450
  def _prepare_environment(self) -> dict:
406
451
  """Prepare clean environment variables for Claude."""
407
452
  clean_env = os.environ.copy()
@@ -33,7 +33,62 @@ from pathlib import Path
33
33
  from typing import Any, Dict, Generic, List, Optional, Tuple, TypeVar
34
34
 
35
35
  # Re-export everything from the new location for backward compatibility
36
- from claude_mpm.services.core.interfaces import *
36
+ from claude_mpm.services.core.interfaces import ( # noqa: F401
37
+ AgentCapabilitiesInterface,
38
+ AgentDeploymentInterface,
39
+ AgentMetadata,
40
+ CacheEntry,
41
+ CommandHandlerInterface,
42
+ HealthStatus,
43
+ HookServiceInterface,
44
+ IAgentRecommender,
45
+ IAgentRegistry,
46
+ IAutoConfigManager,
47
+ ICacheService,
48
+ IConfigurationManager,
49
+ IConfigurationService,
50
+ ICrashDetector,
51
+ IDeploymentStateManager,
52
+ IErrorHandler,
53
+ IEventBus,
54
+ IHealthCheck,
55
+ IHealthCheckManager,
56
+ IHealthMonitor,
57
+ ILocalProcessManager,
58
+ ILogMonitor,
59
+ IMemoryLeakDetector,
60
+ IModelProvider,
61
+ IModelRouter,
62
+ InterfaceRegistry,
63
+ IPerformanceMonitor,
64
+ IPromptCache,
65
+ IResourceMonitor,
66
+ IRestartManager,
67
+ IRestartPolicy,
68
+ IServiceContainer,
69
+ IServiceFactory,
70
+ IServiceLifecycle,
71
+ IStructuredLogger,
72
+ ITemplateManager,
73
+ IToolchainAnalyzer,
74
+ MemoryHookInterface,
75
+ MemoryServiceInterface,
76
+ ModelCapability,
77
+ ModelProvider,
78
+ ModelResponse,
79
+ ProjectAnalyzerInterface,
80
+ RunnerConfigurationInterface,
81
+ ServiceType,
82
+ SessionManagementInterface,
83
+ SocketIOServiceInterface,
84
+ SubprocessLauncherInterface,
85
+ SystemInstructionsInterface,
86
+ T,
87
+ TemplateRenderContext,
88
+ TicketManagerInterface,
89
+ UtilityServiceInterface,
90
+ VersionServiceInterface,
91
+ )
37
92
 
38
93
  # Type variables for generic interfaces
39
94
  T = TypeVar("T")
claude_mpm/core/logger.py CHANGED
@@ -225,7 +225,9 @@ def setup_logging(
225
225
 
226
226
  # Use rotating file handler
227
227
  file_handler = logging.handlers.RotatingFileHandler(
228
- log_file, maxBytes=10 * 1024 * 1024, backupCount=5 # 10 MB
228
+ log_file,
229
+ maxBytes=10 * 1024 * 1024,
230
+ backupCount=5, # 10 MB
229
231
  )
230
232
  else:
231
233
  # Use default log directory
@@ -268,8 +268,47 @@ class OneshotSession:
268
268
  if self.runner.claude_args:
269
269
  cmd.extend(self.runner.claude_args)
270
270
 
271
+ # Add --agents flag if native agents mode is enabled
272
+ if getattr(self.runner, "use_native_agents", False):
273
+ agents_flag = self._build_agents_flag()
274
+ if agents_flag:
275
+ cmd.extend(agents_flag)
276
+ self.logger.info("✓ Native agents mode: Using --agents CLI flag")
277
+
271
278
  return cmd
272
279
 
280
+ def _build_agents_flag(self) -> Optional[list]:
281
+ """Build --agents flag with all MPM agents.
282
+
283
+ Returns:
284
+ List with ["--agents", "<json>"] or None if conversion fails
285
+ """
286
+ try:
287
+ from claude_mpm.services.native_agent_converter import NativeAgentConverter
288
+
289
+ converter = NativeAgentConverter()
290
+ agents = converter.load_agents_from_templates()
291
+
292
+ if not agents:
293
+ self.logger.warning("No agents loaded for native mode")
294
+ return None
295
+
296
+ # Generate JSON for --agents flag
297
+ agents_json = converter.generate_agents_json(agents)
298
+ summary = converter.get_conversion_summary(agents)
299
+
300
+ self.logger.info(
301
+ f"Native agents: {summary['total_agents']} agents, "
302
+ f"{summary['json_size_kb']} KB JSON"
303
+ )
304
+
305
+ # Return as list: ["--agents", "<json>"]
306
+ return ["--agents", agents_json]
307
+
308
+ except Exception as e:
309
+ self.logger.error(f"Failed to build --agents flag: {e}", exc_info=True)
310
+ return None
311
+
273
312
  def _handle_successful_response(self, response: str, prompt: str) -> None:
274
313
  """Process a successful Claude response."""
275
314
  print(response)
@@ -0,0 +1,22 @@
1
+ # Dependencies
2
+ node_modules/
3
+ package-lock.json
4
+
5
+ # Build output
6
+ dist/
7
+
8
+ # Development
9
+ .vite/
10
+ .DS_Store
11
+ *.log
12
+
13
+ # Editor
14
+ .vscode/
15
+ .idea/
16
+ *.swp
17
+ *.swo
18
+ *~
19
+
20
+ # Temporary files
21
+ *.tmp
22
+ .cache/
@@ -0,0 +1,273 @@
1
+ # Before vs After: Store Architecture
2
+
3
+ ## The Problem (Before)
4
+
5
+ ```
6
+ ┌─────────────────────────────────────────────────────────────┐
7
+ │ Module Load Time (Outside Component Context) │
8
+ ├─────────────────────────────────────────────────────────────┤
9
+ │ │
10
+ │ stores/socket.svelte.js │
11
+ │ ┌─────────────────────────────────────────────────────┐ │
12
+ │ │ function createSocketStore() { │ │
13
+ │ │ let connected = $state(false) ❌ ERROR │ │
14
+ │ │ let statusText = $derived(...) ❌ ERROR │ │
15
+ │ │ │ │
16
+ │ │ // Runes created outside component! │ │
17
+ │ │ // → effect_orphan error │ │
18
+ │ │ // → App fails to mount │ │
19
+ │ │ // → Black screen │ │
20
+ │ │ } │ │
21
+ │ │ │ │
22
+ │ │ export const socketStore = createSocketStore() │ │
23
+ │ │ ▲ │ │
24
+ │ │ │ │ │
25
+ │ │ Called at import time! │ │
26
+ │ └─────────────────────────────────────────────────────┘ │
27
+ │ │
28
+ └─────────────────────────────────────────────────────────────┘
29
+
30
+
31
+
32
+ ❌ effect_orphan
33
+ ❌ Black Screen
34
+ ❌ No UI
35
+ ```
36
+
37
+ ## The Solution (After)
38
+
39
+ ```
40
+ ┌─────────────────────────────────────────────────────────────┐
41
+ │ Module Load Time (Outside Component Context) │
42
+ ├─────────────────────────────────────────────────────────────┤
43
+ │ │
44
+ │ stores/socket.js │
45
+ │ ┌─────────────────────────────────────────────────────┐ │
46
+ │ │ import { writable, derived } from 'svelte/store' │ │
47
+ │ │ │ │
48
+ │ │ function createSocketStore() { │ │
49
+ │ │ const connected = writable(false) ✅ OK │ │
50
+ │ │ const statusText = derived(...) ✅ OK │ │
51
+ │ │ │ │
52
+ │ │ // Traditional stores work at module level! │ │
53
+ │ │ // → No effect_orphan error │ │
54
+ │ │ // → App mounts successfully │ │
55
+ │ │ // → UI renders │ │
56
+ │ │ │ │
57
+ │ │ return { │ │
58
+ │ │ connected: { subscribe: connected.subscribe }, │ │
59
+ │ │ statusText: { subscribe: statusText.subscribe }│ │
60
+ │ │ } │ │
61
+ │ │ } │ │
62
+ │ │ │ │
63
+ │ │ export const socketStore = createSocketStore() │ │
64
+ │ └─────────────────────────────────────────────────────┘ │
65
+ │ │
66
+ └─────────────────────────────────────────────────────────────┘
67
+
68
+
69
+
70
+ ┌─────────────────────────────────────────────────────────────┐
71
+ │ Component Context │
72
+ ├─────────────────────────────────────────────────────────────┤
73
+ │ │
74
+ │ App.svelte │
75
+ │ ┌─────────────────────────────────────────────────────┐ │
76
+ │ │ <script> │ │
77
+ │ │ import { socketStore } from './stores/socket.js' │ │
78
+ │ │ │ │
79
+ │ │ // Auto-subscription with $ prefix │ │
80
+ │ │ </script> │ │
81
+ │ │ │ │
82
+ │ │ <Header │ │
83
+ │ │ statusText={$socketStore.statusText} ✅ OK │ │
84
+ │ │ statusColor={$socketStore.statusColor} ✅ OK │ │
85
+ │ │ /> │ │
86
+ │ └─────────────────────────────────────────────────────┘ │
87
+ │ │
88
+ └─────────────────────────────────────────────────────────────┘
89
+
90
+
91
+
92
+ ✅ App renders
93
+ ✅ Stores reactive
94
+ ✅ UI updates
95
+ ```
96
+
97
+ ## Data Flow Comparison
98
+
99
+ ### Before (Broken)
100
+
101
+ ```
102
+ ┌──────────────┐
103
+ │ Module Load │
104
+ └──────┬───────┘
105
+
106
+
107
+ ┌──────────────────────┐
108
+ │ createSocketStore() │
109
+ │ │
110
+ │ $state() → ❌ FAIL │ → effect_orphan error
111
+ │ $derived() → ❌ FAIL│ → Black screen
112
+ └──────────────────────┘
113
+ ```
114
+
115
+ ### After (Fixed)
116
+
117
+ ```
118
+ ┌──────────────┐
119
+ │ Module Load │
120
+ └──────┬───────┘
121
+
122
+
123
+ ┌────────────────────────┐
124
+ │ createSocketStore() │
125
+ │ │
126
+ │ writable() → ✅ Store │
127
+ │ derived() → ✅ Store │
128
+ └────────┬───────────────┘
129
+
130
+
131
+ ┌─────────────────────┐
132
+ │ Component Mounts │
133
+ └─────────┬───────────┘
134
+
135
+
136
+ ┌──────────────────────┐
137
+ │ $ Auto-Subscription │
138
+ │ │
139
+ │ $store.value → ✅ │ → UI renders
140
+ │ │ → Reactive updates work
141
+ └──────────────────────┘
142
+ ```
143
+
144
+ ## Code Comparison
145
+
146
+ ### Store Definition
147
+
148
+ #### Before (socket.svelte.js)
149
+ ```javascript
150
+ function createSocketStore() {
151
+ let connected = $state(false); // ❌ Orphan effect
152
+ let statusText = $derived( // ❌ Orphan effect
153
+ connected ? 'Connected' : 'Disconnected'
154
+ );
155
+
156
+ return {
157
+ get connected() { return connected; },
158
+ get statusText() { return statusText; }
159
+ };
160
+ }
161
+ ```
162
+
163
+ #### After (socket.js)
164
+ ```javascript
165
+ import { writable, derived } from 'svelte/store';
166
+
167
+ function createSocketStore() {
168
+ const connected = writable(false); // ✅ Valid store
169
+ const statusText = derived( // ✅ Valid store
170
+ connected,
171
+ ($connected) => $connected ? 'Connected' : 'Disconnected'
172
+ );
173
+
174
+ return {
175
+ connected: { subscribe: connected.subscribe },
176
+ statusText: { subscribe: statusText.subscribe }
177
+ };
178
+ }
179
+ ```
180
+
181
+ ### Component Usage
182
+
183
+ #### Before (App.svelte)
184
+ ```svelte
185
+ <script>
186
+ import { socketStore } from './stores/socket.svelte.js';
187
+ </script>
188
+
189
+ <Header
190
+ statusText={socketStore.statusText} <!-- ❌ Not reactive -->
191
+ statusColor={socketStore.statusColor} <!-- ❌ Not reactive -->
192
+ />
193
+ ```
194
+
195
+ #### After (App.svelte)
196
+ ```svelte
197
+ <script>
198
+ import { socketStore } from './stores/socket.js';
199
+ </script>
200
+
201
+ <Header
202
+ statusText={$socketStore.statusText} <!-- ✅ Reactive -->
203
+ statusColor={$socketStore.statusColor} <!-- ✅ Reactive -->
204
+ />
205
+ ```
206
+
207
+ ## Reactivity Flow
208
+
209
+ ### Before (Broken)
210
+ ```
211
+ User Action → Store Method → Rune Update → ❌ No Component Update
212
+ → ❌ UI Frozen
213
+ ```
214
+
215
+ ### After (Fixed)
216
+ ```
217
+ User Action → Store Method → Store Update → Component Subscription
218
+
219
+ ✅ UI Updates Automatically
220
+ ```
221
+
222
+ ## Performance Impact
223
+
224
+ | Metric | Before | After | Change |
225
+ |--------|--------|-------|--------|
226
+ | Build Time | N/A (failed) | 322ms | ✅ Working |
227
+ | Bundle Size | N/A (failed) | 81KB | ✅ Optimal |
228
+ | Runtime | Black screen | Normal | ✅ Fixed |
229
+ | Memory | Orphaned effects | Clean | ✅ Improved |
230
+
231
+ ## Architecture Decision Matrix
232
+
233
+ | Scenario | Use Runes | Use Stores | Why |
234
+ |----------|-----------|------------|-----|
235
+ | Component local state | ✅ | ❌ | Simpler syntax, fine-grained reactivity |
236
+ | Module-level state | ❌ | ✅ | Avoids effect_orphan, proper lifecycle |
237
+ | Shared between components | ❌ | ✅ | Subscribe pattern, broadcast updates |
238
+ | Derived from props | ✅ | ❌ | Component-scoped, auto-cleanup |
239
+ | Global app state | ❌ | ✅ | Module-level singleton required |
240
+
241
+ ## Migration Summary
242
+
243
+ ```
244
+ Files Renamed:
245
+ socket.svelte.js → socket.js
246
+ events.svelte.js → events.js
247
+
248
+ Imports Changed:
249
+ - import { writable, derived } from 'svelte/store'
250
+ + Uses traditional Svelte store API
251
+
252
+ Store Creation:
253
+ - let x = $state(0)
254
+ + const x = writable(0)
255
+
256
+ - let y = $derived(x * 2)
257
+ + const y = derived(x, $x => $x * 2)
258
+
259
+ Store Updates:
260
+ - x = 5
261
+ + x.set(5)
262
+
263
+ - x++
264
+ + x.update(n => n + 1)
265
+
266
+ Component Usage:
267
+ - {store.value}
268
+ + {$store.value}
269
+ ```
270
+
271
+ ---
272
+
273
+ **Summary**: Moving from Svelte 5 runes (component-scoped) to traditional Svelte stores (module-scoped) resolved the `effect_orphan` error and enabled proper reactive state management at the application level.