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
@@ -177,7 +177,7 @@ class WorkingDirectoryManager {
177
177
  console.log('[WORKING-DIR-DEBUG] setWorkingDirectory called with:', this.repr(dir));
178
178
 
179
179
  this.currentWorkingDir = dir;
180
-
180
+
181
181
  // Store in session storage for persistence during the session
182
182
  if (dir && this.validateDirectoryPath(dir)) {
183
183
  sessionStorage.setItem('currentWorkingDirectory', dir);
@@ -316,13 +316,13 @@ class WorkingDirectoryManager {
316
316
  */
317
317
  getDefaultWorkingDir() {
318
318
  console.log('[WORKING-DIR-DEBUG] getDefaultWorkingDir called');
319
-
319
+
320
320
  // Try to get from the current working directory if set
321
321
  if (this.currentWorkingDir && this.validateDirectoryPath(this.currentWorkingDir)) {
322
322
  console.log('[WORKING-DIR-DEBUG] Using current working directory:', this.currentWorkingDir);
323
323
  return this.currentWorkingDir;
324
324
  }
325
-
325
+
326
326
  // Try to get from header display
327
327
  const headerWorkingDir = document.querySelector('.working-dir-text');
328
328
  if (headerWorkingDir?.textContent?.trim()) {
@@ -367,11 +367,11 @@ class WorkingDirectoryManager {
367
367
  const eventsWithDir = window.socketClient.events
368
368
  .filter(e => e.data && (e.data.working_directory || e.data.cwd || e.data.working_dir))
369
369
  .reverse();
370
-
370
+
371
371
  if (eventsWithDir.length > 0) {
372
372
  const recentEvent = eventsWithDir[0];
373
- const dir = recentEvent.data.working_directory ||
374
- recentEvent.data.cwd ||
373
+ const dir = recentEvent.data.working_directory ||
374
+ recentEvent.data.cwd ||
375
375
  recentEvent.data.working_dir;
376
376
  console.log('[WORKING-DIR-DEBUG] Using working directory from recent event:', dir);
377
377
  return dir;
@@ -393,7 +393,7 @@ class WorkingDirectoryManager {
393
393
  console.log('[WORKING-DIR-DEBUG] Using session storage working directory:', this.repr(sessionWorkingDir));
394
394
  return sessionWorkingDir;
395
395
  }
396
-
396
+
397
397
  // Try to get the current working directory from environment/process
398
398
  // This should be the directory where claude-mpm was started from
399
399
  const processWorkingDir = window.processWorkingDirectory || process?.cwd?.() || null;
@@ -401,7 +401,7 @@ class WorkingDirectoryManager {
401
401
  console.log('[WORKING-DIR-DEBUG] Using process working directory:', this.repr(processWorkingDir));
402
402
  return processWorkingDir;
403
403
  }
404
-
404
+
405
405
  // Final fallback - use current working directory if available, otherwise home directory
406
406
  // Never default to root "/" as it's not a useful default for code viewing
407
407
  const homeDir = window.homeDirectory || process?.env?.HOME || process?.env?.USERPROFILE || null;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Enhanced Connection Manager for Dashboard
3
- *
3
+ *
4
4
  * Provides robust connection management with:
5
5
  * - Persistent client ID across reconnections
6
6
  * - Event sequence tracking and replay
@@ -29,11 +29,11 @@ class EnhancedConnectionManager {
29
29
  this.lastPongTime = null;
30
30
  this.missedHeartbeats = 0;
31
31
  this.maxMissedHeartbeats = 3;
32
-
32
+
33
33
  // Event buffering for offline mode
34
34
  this.eventBuffer = [];
35
35
  this.maxEventBuffer = 100;
36
-
36
+
37
37
  // Connection metrics
38
38
  this.metrics = {
39
39
  connectTime: null,
@@ -44,16 +44,16 @@ class EnhancedConnectionManager {
44
44
  eventsAcked: 0,
45
45
  lastActivity: null
46
46
  };
47
-
47
+
48
48
  // Status update callbacks
49
49
  this.statusCallbacks = new Set();
50
50
  this.qualityCallbacks = new Set();
51
-
51
+
52
52
  // Initialize
53
53
  this.setupEventHandlers();
54
54
  this.startHealthMonitoring();
55
55
  }
56
-
56
+
57
57
  /**
58
58
  * Load or generate client ID for persistent identification
59
59
  */
@@ -65,7 +65,7 @@ class EnhancedConnectionManager {
65
65
  }
66
66
  return clientId;
67
67
  }
68
-
68
+
69
69
  /**
70
70
  * Load last received event sequence for replay
71
71
  */
@@ -73,7 +73,7 @@ class EnhancedConnectionManager {
73
73
  const sequence = localStorage.getItem('claude_mpm_last_sequence');
74
74
  return sequence ? parseInt(sequence, 10) : 0;
75
75
  }
76
-
76
+
77
77
  /**
78
78
  * Save last received event sequence
79
79
  */
@@ -81,16 +81,16 @@ class EnhancedConnectionManager {
81
81
  this.lastSequence = sequence;
82
82
  localStorage.setItem('claude_mpm_last_sequence', sequence.toString());
83
83
  }
84
-
84
+
85
85
  /**
86
86
  * Connect with enhanced options and authentication
87
87
  */
88
88
  connect(port = '8765') {
89
89
  const url = `http://localhost:${port}`;
90
-
90
+
91
91
  console.log(`[ConnectionManager] Connecting to ${url} with client ID: ${this.clientId}`);
92
92
  this.updateConnectionState('connecting');
93
-
93
+
94
94
  // Create socket with enhanced options
95
95
  this.socket = io(url, {
96
96
  auth: {
@@ -106,11 +106,11 @@ class EnhancedConnectionManager {
106
106
  pingInterval: 25000,
107
107
  pingTimeout: 20000
108
108
  });
109
-
109
+
110
110
  this.setupSocketHandlers();
111
111
  this.socketClient.socket = this.socket;
112
112
  }
113
-
113
+
114
114
  /**
115
115
  * Calculate exponential backoff delay for reconnection
116
116
  */
@@ -121,13 +121,13 @@ class EnhancedConnectionManager {
121
121
  );
122
122
  return delay + Math.random() * 1000; // Add jitter
123
123
  }
124
-
124
+
125
125
  /**
126
126
  * Setup socket event handlers
127
127
  */
128
128
  setupSocketHandlers() {
129
129
  if (!this.socket) return;
130
-
130
+
131
131
  // Connection established
132
132
  this.socket.on('connection_established', (data) => {
133
133
  console.log('[ConnectionManager] Connection established:', data);
@@ -138,60 +138,60 @@ class EnhancedConnectionManager {
138
138
  this.missedHeartbeats = 0;
139
139
  this.updateConnectionState('connected');
140
140
  this.startHeartbeat();
141
-
141
+
142
142
  // Flush buffered events if any
143
143
  this.flushEventBuffer();
144
144
  });
145
-
145
+
146
146
  // Event replay after reconnection
147
147
  this.socket.on('event_replay', (data) => {
148
148
  console.log(`[ConnectionManager] Replaying ${data.count} events from sequence ${data.from_sequence}`);
149
-
149
+
150
150
  if (data.events && data.events.length > 0) {
151
151
  data.events.forEach(event => {
152
152
  // Update sequence
153
153
  if (event.sequence) {
154
154
  this.saveLastSequence(event.sequence);
155
155
  }
156
-
156
+
157
157
  // Process replayed event
158
158
  this.socketClient.handleEvent('claude_event', event);
159
159
  });
160
-
160
+
161
161
  this.showNotification(`Replayed ${data.count} missed events`, 'info');
162
162
  }
163
163
  });
164
-
164
+
165
165
  // Normal event with sequence tracking
166
166
  this.socket.on('claude_event', (event) => {
167
167
  if (event.sequence) {
168
168
  this.saveLastSequence(event.sequence);
169
-
169
+
170
170
  // Send acknowledgment
171
171
  this.socket.emit('acknowledge_event', {
172
172
  sequence: event.sequence
173
173
  });
174
-
174
+
175
175
  this.metrics.eventsAcked++;
176
176
  }
177
-
177
+
178
178
  this.metrics.totalEvents++;
179
179
  this.metrics.lastActivity = Date.now();
180
180
  });
181
-
181
+
182
182
  // Heartbeat response
183
183
  this.socket.on('heartbeat_response', (data) => {
184
184
  this.missedHeartbeats = 0;
185
185
  this.updateConnectionQuality(1.0);
186
186
  });
187
-
187
+
188
188
  // Pong response
189
189
  this.socket.on('pong', (data) => {
190
190
  this.lastPongTime = Date.now();
191
191
  const latency = this.lastPongTime - this.lastPingTime;
192
192
  this.updateLatency(latency);
193
193
  });
194
-
194
+
195
195
  // Connection stats response
196
196
  this.socket.on('connection_stats', (data) => {
197
197
  console.log('[ConnectionManager] Connection stats:', data);
@@ -199,7 +199,7 @@ class EnhancedConnectionManager {
199
199
  this.updateConnectionQuality(data.connection.quality);
200
200
  }
201
201
  });
202
-
202
+
203
203
  // Standard Socket.IO events
204
204
  this.socket.on('connect', () => {
205
205
  console.log('[ConnectionManager] Socket connected');
@@ -209,13 +209,13 @@ class EnhancedConnectionManager {
209
209
  this.metrics.totalReconnections++;
210
210
  }
211
211
  });
212
-
212
+
213
213
  this.socket.on('disconnect', (reason) => {
214
214
  console.log('[ConnectionManager] Socket disconnected:', reason);
215
215
  this.metrics.disconnectTime = Date.now();
216
216
  this.updateConnectionState('disconnected');
217
217
  this.stopHeartbeat();
218
-
218
+
219
219
  // Handle different disconnect reasons
220
220
  if (reason === 'io server disconnect') {
221
221
  // Server initiated disconnect
@@ -225,11 +225,11 @@ class EnhancedConnectionManager {
225
225
  this.showNotification('Connection timeout - attempting to reconnect', 'warning');
226
226
  }
227
227
  });
228
-
228
+
229
229
  this.socket.on('connect_error', (error) => {
230
230
  console.error('[ConnectionManager] Connection error:', error.message);
231
231
  this.reconnectAttempts++;
232
-
232
+
233
233
  if (this.reconnectAttempts >= this.maxReconnectAttempts) {
234
234
  this.updateConnectionState('failed');
235
235
  this.showNotification('Failed to connect after multiple attempts', 'error');
@@ -241,34 +241,34 @@ class EnhancedConnectionManager {
241
241
  );
242
242
  }
243
243
  });
244
-
244
+
245
245
  this.socket.on('reconnect', (attemptNumber) => {
246
246
  console.log(`[ConnectionManager] Reconnected after ${attemptNumber} attempts`);
247
247
  this.showNotification('Reconnected successfully', 'success');
248
-
248
+
249
249
  // Request event replay
250
250
  this.socket.emit('request_replay', {
251
251
  last_sequence: this.lastSequence
252
252
  });
253
253
  });
254
-
254
+
255
255
  this.socket.on('reconnect_attempt', (attemptNumber) => {
256
256
  console.log(`[ConnectionManager] Reconnection attempt ${attemptNumber}`);
257
257
  this.updateConnectionState('reconnecting');
258
258
  });
259
259
  }
260
-
260
+
261
261
  /**
262
262
  * Start heartbeat monitoring
263
263
  */
264
264
  startHeartbeat() {
265
265
  this.stopHeartbeat();
266
-
266
+
267
267
  this.heartbeatTimer = setInterval(() => {
268
268
  if (this.socket && this.socket.connected) {
269
269
  this.socket.emit('heartbeat');
270
270
  this.missedHeartbeats++;
271
-
271
+
272
272
  if (this.missedHeartbeats >= this.maxMissedHeartbeats) {
273
273
  console.warn('[ConnectionManager] Too many missed heartbeats, connection may be stale');
274
274
  this.updateConnectionQuality(0.3);
@@ -276,7 +276,7 @@ class EnhancedConnectionManager {
276
276
  }
277
277
  }
278
278
  }, this.heartbeatInterval);
279
-
279
+
280
280
  // Also start ping monitoring for latency
281
281
  this.pingTimer = setInterval(() => {
282
282
  if (this.socket && this.socket.connected) {
@@ -285,7 +285,7 @@ class EnhancedConnectionManager {
285
285
  }
286
286
  }, 10000); // Every 10 seconds
287
287
  }
288
-
288
+
289
289
  /**
290
290
  * Stop heartbeat monitoring
291
291
  */
@@ -294,13 +294,13 @@ class EnhancedConnectionManager {
294
294
  clearInterval(this.heartbeatTimer);
295
295
  this.heartbeatTimer = null;
296
296
  }
297
-
297
+
298
298
  if (this.pingTimer) {
299
299
  clearInterval(this.pingTimer);
300
300
  this.pingTimer = null;
301
301
  }
302
302
  }
303
-
303
+
304
304
  /**
305
305
  * Start health monitoring
306
306
  */
@@ -311,7 +311,7 @@ class EnhancedConnectionManager {
311
311
  this.socket.emit('get_connection_stats');
312
312
  }
313
313
  }, 60000); // Every minute
314
-
314
+
315
315
  // Activity timeout detection
316
316
  setInterval(() => {
317
317
  if (this.connectionState === 'connected' && this.metrics.lastActivity) {
@@ -323,20 +323,20 @@ class EnhancedConnectionManager {
323
323
  }
324
324
  }, 30000); // Check every 30 seconds
325
325
  }
326
-
326
+
327
327
  /**
328
328
  * Update connection state and notify listeners
329
329
  */
330
330
  updateConnectionState(state) {
331
331
  const previousState = this.connectionState;
332
332
  this.connectionState = state;
333
-
333
+
334
334
  if (previousState !== state) {
335
335
  console.log(`[ConnectionManager] State change: ${previousState} -> ${state}`);
336
-
336
+
337
337
  // Update UI
338
338
  this.updateConnectionUI(state);
339
-
339
+
340
340
  // Notify callbacks
341
341
  this.statusCallbacks.forEach(callback => {
342
342
  try {
@@ -347,13 +347,13 @@ class EnhancedConnectionManager {
347
347
  });
348
348
  }
349
349
  }
350
-
350
+
351
351
  /**
352
352
  * Update connection quality score
353
353
  */
354
354
  updateConnectionQuality(quality) {
355
355
  this.connectionQuality = Math.max(0, Math.min(1, quality));
356
-
356
+
357
357
  // Notify callbacks
358
358
  this.qualityCallbacks.forEach(callback => {
359
359
  try {
@@ -362,11 +362,11 @@ class EnhancedConnectionManager {
362
362
  console.error('Error in quality callback:', error);
363
363
  }
364
364
  });
365
-
365
+
366
366
  // Update UI indicator
367
367
  this.updateQualityUI(this.connectionQuality);
368
368
  }
369
-
369
+
370
370
  /**
371
371
  * Update latency display
372
372
  */
@@ -374,7 +374,7 @@ class EnhancedConnectionManager {
374
374
  const latencyElement = document.getElementById('connection-latency');
375
375
  if (latencyElement) {
376
376
  latencyElement.textContent = `${latency}ms`;
377
-
377
+
378
378
  // Color code based on latency
379
379
  if (latency < 50) {
380
380
  latencyElement.className = 'latency-good';
@@ -385,14 +385,14 @@ class EnhancedConnectionManager {
385
385
  }
386
386
  }
387
387
  }
388
-
388
+
389
389
  /**
390
390
  * Update connection UI based on state
391
391
  */
392
392
  updateConnectionUI(state) {
393
393
  const statusElement = document.getElementById('connection-status');
394
394
  if (!statusElement) return;
395
-
395
+
396
396
  const stateConfig = {
397
397
  'connecting': { text: 'Connecting...', class: 'status-connecting', icon: '⟳' },
398
398
  'connected': { text: 'Connected', class: 'status-connected', icon: '●' },
@@ -401,23 +401,23 @@ class EnhancedConnectionManager {
401
401
  'stale': { text: 'Connection Stale', class: 'status-stale', icon: '⚠' },
402
402
  'failed': { text: 'Connection Failed', class: 'status-failed', icon: '✕' }
403
403
  };
404
-
404
+
405
405
  const config = stateConfig[state] || stateConfig['disconnected'];
406
406
  statusElement.innerHTML = `<span>${config.icon}</span> ${config.text}`;
407
407
  statusElement.className = `status-badge ${config.class}`;
408
408
  }
409
-
409
+
410
410
  /**
411
411
  * Update connection quality UI
412
412
  */
413
413
  updateQualityUI(quality) {
414
414
  const qualityElement = document.getElementById('connection-quality');
415
415
  if (!qualityElement) return;
416
-
416
+
417
417
  const percentage = Math.round(quality * 100);
418
418
  let qualityClass = 'quality-good';
419
419
  let qualityText = 'Excellent';
420
-
420
+
421
421
  if (quality < 0.3) {
422
422
  qualityClass = 'quality-poor';
423
423
  qualityText = 'Poor';
@@ -425,7 +425,7 @@ class EnhancedConnectionManager {
425
425
  qualityClass = 'quality-moderate';
426
426
  qualityText = 'Fair';
427
427
  }
428
-
428
+
429
429
  qualityElement.innerHTML = `
430
430
  <div class="quality-bar ${qualityClass}">
431
431
  <div class="quality-fill" style="width: ${percentage}%"></div>
@@ -433,7 +433,7 @@ class EnhancedConnectionManager {
433
433
  <span class="quality-text">${qualityText} (${percentage}%)</span>
434
434
  `;
435
435
  }
436
-
436
+
437
437
  /**
438
438
  * Buffer events when disconnected
439
439
  */
@@ -441,68 +441,68 @@ class EnhancedConnectionManager {
441
441
  if (this.eventBuffer.length >= this.maxEventBuffer) {
442
442
  this.eventBuffer.shift(); // Remove oldest
443
443
  }
444
-
444
+
445
445
  this.eventBuffer.push({
446
446
  ...event,
447
447
  buffered_at: Date.now()
448
448
  });
449
-
449
+
450
450
  // Save to localStorage for persistence
451
451
  localStorage.setItem('claude_mpm_event_buffer', JSON.stringify(this.eventBuffer));
452
452
  }
453
-
453
+
454
454
  /**
455
455
  * Flush buffered events after reconnection
456
456
  */
457
457
  flushEventBuffer() {
458
458
  if (this.eventBuffer.length === 0) return;
459
-
459
+
460
460
  console.log(`[ConnectionManager] Flushing ${this.eventBuffer.length} buffered events`);
461
-
461
+
462
462
  // Process buffered events
463
463
  this.eventBuffer.forEach(event => {
464
464
  this.socketClient.handleEvent('claude_event', event);
465
465
  });
466
-
466
+
467
467
  // Clear buffer
468
468
  this.eventBuffer = [];
469
469
  localStorage.removeItem('claude_mpm_event_buffer');
470
470
  }
471
-
471
+
472
472
  /**
473
473
  * Show notification to user
474
474
  */
475
475
  showNotification(message, type = 'info') {
476
476
  const notificationArea = document.getElementById('connection-notifications');
477
477
  if (!notificationArea) return;
478
-
478
+
479
479
  const notification = document.createElement('div');
480
480
  notification.className = `notification notification-${type}`;
481
481
  notification.textContent = message;
482
-
482
+
483
483
  notificationArea.appendChild(notification);
484
-
484
+
485
485
  // Auto-remove after 5 seconds
486
486
  setTimeout(() => {
487
487
  notification.style.opacity = '0';
488
488
  setTimeout(() => notification.remove(), 300);
489
489
  }, 5000);
490
490
  }
491
-
491
+
492
492
  /**
493
493
  * Register status change callback
494
494
  */
495
495
  onStatusChange(callback) {
496
496
  this.statusCallbacks.add(callback);
497
497
  }
498
-
498
+
499
499
  /**
500
500
  * Register quality change callback
501
501
  */
502
502
  onQualityChange(callback) {
503
503
  this.qualityCallbacks.add(callback);
504
504
  }
505
-
505
+
506
506
  /**
507
507
  * Get connection metrics
508
508
  */
@@ -516,18 +516,18 @@ class EnhancedConnectionManager {
516
516
  bufferedEvents: this.eventBuffer.length
517
517
  };
518
518
  }
519
-
519
+
520
520
  /**
521
521
  * Disconnect and cleanup
522
522
  */
523
523
  disconnect() {
524
524
  this.stopHeartbeat();
525
-
525
+
526
526
  if (this.socket) {
527
527
  this.socket.disconnect();
528
528
  this.socket = null;
529
529
  }
530
-
530
+
531
531
  this.updateConnectionState('disconnected');
532
532
  }
533
533
  }