claude-mpm 5.1.9__py3-none-any.whl → 5.4.3__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 (131) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/PM_INSTRUCTIONS.md +46 -0
  3. claude_mpm/agents/agent_loader.py +10 -17
  4. claude_mpm/agents/templates/circuit-breakers.md +138 -1
  5. claude_mpm/cli/commands/agent_state_manager.py +8 -17
  6. claude_mpm/cli/commands/configure.py +1046 -149
  7. claude_mpm/cli/commands/configure_agent_display.py +13 -6
  8. claude_mpm/cli/commands/mpm_init/core.py +158 -1
  9. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  10. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  11. claude_mpm/cli/commands/summarize.py +413 -0
  12. claude_mpm/cli/executor.py +8 -0
  13. claude_mpm/cli/parsers/base_parser.py +5 -0
  14. claude_mpm/cli/startup.py +60 -53
  15. claude_mpm/commands/{mpm-ticket-organize.md → mpm-organize.md} +4 -5
  16. claude_mpm/config/agent_sources.py +27 -0
  17. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  18. claude_mpm/core/socketio_pool.py +3 -3
  19. claude_mpm/core/unified_agent_registry.py +5 -15
  20. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  21. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-313.pyc +0 -0
  22. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  23. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  24. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  25. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  26. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  27. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  28. claude_mpm/hooks/claude_hooks/event_handlers.py +35 -2
  29. claude_mpm/hooks/claude_hooks/hook_handler.py +4 -0
  30. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  31. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  32. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  33. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  34. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  35. claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -0
  36. claude_mpm/scripts/launch_monitor.py +93 -13
  37. claude_mpm/services/agents/agent_recommendation_service.py +279 -0
  38. claude_mpm/services/agents/deployment/agent_template_builder.py +3 -2
  39. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +322 -53
  40. claude_mpm/services/agents/git_source_manager.py +20 -0
  41. claude_mpm/services/agents/sources/git_source_sync_service.py +8 -1
  42. claude_mpm/services/agents/toolchain_detector.py +6 -5
  43. claude_mpm/services/analysis/__init__.py +11 -1
  44. claude_mpm/services/analysis/clone_detector.py +1030 -0
  45. claude_mpm/services/command_deployment_service.py +0 -2
  46. claude_mpm/services/event_bus/config.py +3 -1
  47. claude_mpm/services/monitor/daemon.py +9 -2
  48. claude_mpm/services/monitor/daemon_manager.py +39 -3
  49. claude_mpm/services/monitor/server.py +225 -19
  50. claude_mpm/services/socketio/event_normalizer.py +15 -1
  51. claude_mpm/services/socketio/server/core.py +160 -21
  52. claude_mpm/services/version_control/git_operations.py +103 -0
  53. claude_mpm/utils/agent_filters.py +17 -44
  54. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.3.dist-info}/METADATA +1 -77
  55. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.3.dist-info}/RECORD +59 -114
  56. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.3.dist-info}/entry_points.txt +0 -2
  57. claude_mpm/dashboard/analysis_runner.py +0 -455
  58. claude_mpm/dashboard/index.html +0 -13
  59. claude_mpm/dashboard/open_dashboard.py +0 -66
  60. claude_mpm/dashboard/static/css/activity.css +0 -1958
  61. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  62. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  63. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  64. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  65. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  66. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  67. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  68. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  69. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  70. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  71. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  72. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  73. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  74. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  75. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  76. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  77. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  78. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  79. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  80. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  81. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  82. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  83. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  84. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  85. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  86. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  87. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  88. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  89. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  90. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  91. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  92. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  93. claude_mpm/dashboard/templates/code_simple.html +0 -153
  94. claude_mpm/dashboard/templates/index.html +0 -606
  95. claude_mpm/dashboard/test_dashboard.html +0 -372
  96. claude_mpm/scripts/mcp_server.py +0 -75
  97. claude_mpm/scripts/mcp_wrapper.py +0 -39
  98. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  99. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  100. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  101. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  102. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  103. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  104. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  105. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  106. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  107. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  108. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
  109. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  110. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  111. claude_mpm/services/mcp_gateway/main.py +0 -589
  112. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  113. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  114. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  115. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  116. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  117. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  118. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  119. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  120. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  121. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  122. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  123. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  124. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  125. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  126. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  127. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  128. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  129. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.3.dist-info}/WHEEL +0 -0
  130. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.3.dist-info}/licenses/LICENSE +0 -0
  131. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.3.dist-info}/top_level.txt +0 -0
@@ -1,368 +0,0 @@
1
- /**
2
- * Socket Manager Module
3
- *
4
- * Handles all socket connection management, event dispatching, and connection state.
5
- * Provides a centralized interface for socket operations across the dashboard.
6
- *
7
- * WHY: Extracted from main dashboard to centralize socket connection logic and
8
- * provide better separation of concerns. This allows for easier testing and
9
- * maintenance of connection handling code.
10
- *
11
- * DESIGN DECISION: Acts as a wrapper around SocketClient to provide dashboard-specific
12
- * connection management while maintaining the existing SocketClient interface.
13
- * Uses event dispatching to notify other modules of connection state changes.
14
- */
15
-
16
- // Import SocketClient (assuming it will be converted to ES6 modules too)
17
- import { SocketClient } from '../socket-client.js';
18
- class SocketManager {
19
- constructor() {
20
- this.socketClient = null;
21
- this.connectionCallbacks = new Set();
22
- this.eventUpdateCallbacks = new Set();
23
-
24
- // Initialize socket client
25
- this.socketClient = new SocketClient();
26
-
27
- // Make socketClient globally available (for backward compatibility)
28
- window.socketClient = this.socketClient;
29
-
30
- this.setupSocketEventHandlers();
31
-
32
- // Force initial status update after a short delay to ensure DOM is ready
33
- setTimeout(() => {
34
- this.updateInitialConnectionStatus();
35
- }, 100);
36
-
37
- console.log('Socket manager initialized');
38
- }
39
-
40
- /**
41
- * Set up socket event handlers for connection status and events
42
- */
43
- setupSocketEventHandlers() {
44
- // Listen for connection status changes
45
- document.addEventListener('socketConnectionStatus', (e) => {
46
- console.log(`SocketManager: Processing connection status update: ${e.detail.status} (${e.detail.type})`);
47
- this.handleConnectionStatusChange(e.detail.status, e.detail.type);
48
-
49
- // Notify all registered callbacks
50
- this.connectionCallbacks.forEach(callback => {
51
- try {
52
- callback(e.detail.status, e.detail.type);
53
- } catch (error) {
54
- console.error('Error in connection callback:', error);
55
- }
56
- });
57
- });
58
-
59
- // Set up event update handling
60
- if (this.socketClient) {
61
- this.socketClient.onEventUpdate((events) => {
62
- // Notify all registered callbacks
63
- this.eventUpdateCallbacks.forEach(callback => {
64
- try {
65
- callback(events);
66
- } catch (error) {
67
- console.error('Error in event update callback:', error);
68
- }
69
- });
70
- });
71
- }
72
- }
73
-
74
- /**
75
- * Handle connection status changes
76
- * @param {string} status - Connection status text
77
- * @param {string} type - Connection type ('connected', 'disconnected', etc.)
78
- */
79
- handleConnectionStatusChange(status, type) {
80
- this.updateConnectionStatus(status, type);
81
-
82
- // Set up git branch listener when connected
83
- if (type === 'connected' && this.socketClient && this.socketClient.socket) {
84
- // Expose socket globally for components like CodeTree
85
- window.socket = this.socketClient.socket;
86
- console.log('SocketManager: Exposed socket globally as window.socket');
87
-
88
- this.setupGitBranchListener();
89
- }
90
- }
91
-
92
- /**
93
- * Update initial connection status on dashboard load
94
- */
95
- updateInitialConnectionStatus() {
96
- console.log('SocketManager: Updating initial connection status');
97
-
98
- // Force status check on socket client (uses fallback mechanism)
99
- if (this.socketClient && typeof this.socketClient.checkAndUpdateStatus === 'function') {
100
- console.log('SocketManager: Using socket client checkAndUpdateStatus method');
101
- this.socketClient.checkAndUpdateStatus();
102
- } else if (this.socketClient && this.socketClient.socket) {
103
- console.log('SocketManager: Checking socket state directly', {
104
- connected: this.socketClient.socket.connected,
105
- connecting: this.socketClient.socket.connecting,
106
- isConnecting: this.socketClient.isConnecting,
107
- isConnected: this.socketClient.isConnected
108
- });
109
-
110
- if (this.socketClient.socket.connected) {
111
- console.log('SocketManager: Socket is already connected, updating status');
112
- // Expose socket globally for components like CodeTree
113
- window.socket = this.socketClient.socket;
114
- console.log('SocketManager: Exposed socket globally as window.socket');
115
- this.updateConnectionStatus('Connected', 'connected');
116
- } else if (this.socketClient.isConnecting || this.socketClient.socket.connecting) {
117
- console.log('SocketManager: Socket is connecting, updating status');
118
- this.updateConnectionStatus('Connecting...', 'connecting');
119
- } else {
120
- console.log('SocketManager: Socket is disconnected, updating status');
121
- this.updateConnectionStatus('Disconnected', 'disconnected');
122
- }
123
- } else {
124
- console.log('SocketManager: No socket client or socket found, setting disconnected status');
125
- this.updateConnectionStatus('Disconnected', 'disconnected');
126
- }
127
-
128
- // Additional fallback - check again after a longer delay in case connection is still establishing
129
- setTimeout(() => {
130
- console.log('SocketManager: Secondary status check after 1 second');
131
- if (this.socketClient && this.socketClient.socket && this.socketClient.socket.connected) {
132
- console.log('SocketManager: Socket connected in secondary check, updating status');
133
- // Expose socket globally if not already done
134
- if (!window.socket) {
135
- window.socket = this.socketClient.socket;
136
- console.log('SocketManager: Exposed socket globally as window.socket (secondary check)');
137
- }
138
- this.updateConnectionStatus('Connected', 'connected');
139
- }
140
- }, 1000);
141
- }
142
-
143
- /**
144
- * Set up git branch response listener for connected socket
145
- */
146
- setupGitBranchListener() {
147
- // Remove any existing listener first
148
- this.socketClient.socket.off('git_branch_response');
149
-
150
- // Add the listener
151
- this.socketClient.socket.on('git_branch_response', (data) => {
152
- if (data.success) {
153
- const footerBranch = document.getElementById('footer-git-branch');
154
- if (footerBranch) {
155
- footerBranch.textContent = data.branch || 'unknown';
156
- }
157
- if (footerBranch) {
158
- footerBranch.style.display = 'inline';
159
- }
160
- } else {
161
- console.error('Git branch request failed:', data.error);
162
- }
163
- });
164
- }
165
-
166
- /**
167
- * Update connection status display
168
- * @param {string} status - Status text to display
169
- * @param {string} type - Status type for styling
170
- */
171
- updateConnectionStatus(status, type) {
172
- const statusElement = document.getElementById('connection-status');
173
- if (statusElement) {
174
- // Check if there's a span indicator first
175
- const indicator = statusElement.querySelector('span');
176
- if (indicator) {
177
- // If there's a span, update the text content after the span
178
- const statusIndicator = type === 'connected' ? '●' : '●';
179
- statusElement.innerHTML = `<span>${statusIndicator}</span> ${status}`;
180
- } else {
181
- // If no span, just update text content
182
- statusElement.textContent = status;
183
- }
184
-
185
- statusElement.className = `status-badge status-${type}`;
186
- console.log(`SocketManager: UI updated - status: '${status}' (${type})`);
187
- } else {
188
- console.error('SocketManager: Could not find connection-status element in DOM');
189
- }
190
- }
191
-
192
- /**
193
- * Connect to socket server
194
- * @param {number} port - Port number to connect to
195
- */
196
- connect(port) {
197
- if (this.socketClient) {
198
- this.socketClient.connect(port);
199
- }
200
- }
201
-
202
- /**
203
- * Disconnect from socket server
204
- */
205
- disconnect() {
206
- if (this.socketClient) {
207
- this.socketClient.disconnect();
208
- }
209
- }
210
-
211
- /**
212
- * Check if socket is connected
213
- * @returns {boolean} - True if connected
214
- */
215
- isConnected() {
216
- return this.socketClient && this.socketClient.isConnected;
217
- }
218
-
219
- /**
220
- * Check if socket is connecting
221
- * @returns {boolean} - True if connecting
222
- */
223
- isConnecting() {
224
- return this.socketClient && this.socketClient.isConnecting;
225
- }
226
-
227
- /**
228
- * Get the underlying socket client
229
- * @returns {SocketClient} - The socket client instance
230
- */
231
- getSocketClient() {
232
- return this.socketClient;
233
- }
234
-
235
- /**
236
- * Get the raw socket connection
237
- * @returns {Socket|null} - The raw socket or null
238
- */
239
- getSocket() {
240
- return this.socketClient ? this.socketClient.socket : null;
241
- }
242
-
243
- /**
244
- * Register a callback for connection status changes
245
- * @param {Function} callback - Callback function(status, type)
246
- */
247
- onConnectionStatusChange(callback) {
248
- this.connectionCallbacks.add(callback);
249
- }
250
-
251
- /**
252
- * Unregister a connection status callback
253
- * @param {Function} callback - Callback to remove
254
- */
255
- offConnectionStatusChange(callback) {
256
- this.connectionCallbacks.delete(callback);
257
- }
258
-
259
- /**
260
- * Register a callback for event updates
261
- * @param {Function} callback - Callback function(events)
262
- */
263
- onEventUpdate(callback) {
264
- this.eventUpdateCallbacks.add(callback);
265
- }
266
-
267
- /**
268
- * Unregister an event update callback
269
- * @param {Function} callback - Callback to remove
270
- */
271
- offEventUpdate(callback) {
272
- this.eventUpdateCallbacks.delete(callback);
273
- }
274
-
275
- /**
276
- * Toggle connection controls visibility
277
- */
278
- toggleConnectionControls() {
279
- const controlsRow = document.getElementById('connection-controls-row');
280
- const toggleBtn = document.getElementById('connection-toggle-btn');
281
-
282
- if (controlsRow && toggleBtn) {
283
- const isVisible = controlsRow.classList.contains('show');
284
-
285
- if (isVisible) {
286
- controlsRow.classList.remove('show');
287
- controlsRow.style.display = 'none';
288
- toggleBtn.textContent = 'Connection Settings';
289
- } else {
290
- controlsRow.classList.add('show');
291
- controlsRow.style.display = 'block';
292
- toggleBtn.textContent = 'Hide Settings';
293
- }
294
- }
295
- }
296
-
297
- /**
298
- * Setup connection control event handlers
299
- * Called during dashboard initialization
300
- */
301
- setupConnectionControls() {
302
- const connectBtn = document.getElementById('connect-btn');
303
- const disconnectBtn = document.getElementById('disconnect-btn');
304
- const connectionToggleBtn = document.getElementById('connection-toggle-btn');
305
-
306
- if (connectBtn) {
307
- connectBtn.addEventListener('click', () => {
308
- const port = document.getElementById('port-input').value || 8765;
309
- this.connect(port);
310
- });
311
- }
312
-
313
- if (disconnectBtn) {
314
- disconnectBtn.addEventListener('click', () => {
315
- this.disconnect();
316
- });
317
- }
318
-
319
- if (connectionToggleBtn) {
320
- connectionToggleBtn.addEventListener('click', () => {
321
- this.toggleConnectionControls();
322
- });
323
- }
324
- }
325
-
326
- /**
327
- * Initialize connection from URL parameters
328
- * @param {URLSearchParams} params - URL search parameters
329
- */
330
- initializeFromURL(params) {
331
- const port = params.get('port');
332
- const portInput = document.getElementById('port-input');
333
-
334
- // Determine the port to use:
335
- // 1. URL parameter 'port'
336
- // 2. Current page port (if served via HTTP)
337
- // 3. Default port value from input field
338
- // 4. Fallback to 8765
339
- let connectPort = port;
340
- if (!connectPort && window.location.protocol === 'http:') {
341
- connectPort = window.location.port || '8765';
342
- }
343
- if (!connectPort) {
344
- connectPort = portInput?.value || '8765';
345
- }
346
-
347
- // Update the port input field with the determined port
348
- if (portInput) {
349
- portInput.value = connectPort;
350
- }
351
-
352
- // Auto-connect by default unless explicitly disabled
353
- // Changed: Always auto-connect by default even without URL params
354
- const shouldAutoConnect = params.get('connect') !== 'false';
355
- if (shouldAutoConnect && !this.isConnected() && !this.isConnecting()) {
356
- console.log(`SocketManager: Auto-connecting to port ${connectPort}`);
357
- this.connect(connectPort);
358
- }
359
- }
360
- }
361
-
362
- // ES6 Module export
363
- export { SocketManager };
364
- export default SocketManager;
365
-
366
- // Make SocketManager globally available for the dist/dashboard.js
367
- // This ensures compatibility with the minified version
368
- window.SocketManager = SocketManager;