claude-mpm 5.6.3__py3-none-any.whl → 5.6.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  3. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  4. claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
  5. claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-314.pyc +0 -0
  6. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  7. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  8. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-314.pyc +0 -0
  9. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  10. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-314.pyc +0 -0
  11. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-314.pyc +0 -0
  12. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  13. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-314.pyc +0 -0
  14. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  15. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-314.pyc +0 -0
  16. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  17. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-314.pyc +0 -0
  18. claude_mpm/hooks/claude_hooks/auto_pause_handler.py +29 -30
  19. claude_mpm/hooks/claude_hooks/event_handlers.py +58 -105
  20. claude_mpm/hooks/claude_hooks/memory_integration.py +30 -21
  21. claude_mpm/hooks/claude_hooks/response_tracking.py +39 -58
  22. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  23. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-314.pyc +0 -0
  24. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  25. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-314.pyc +0 -0
  26. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  27. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-314.pyc +0 -0
  28. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  29. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-314.pyc +0 -0
  30. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  31. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-314.pyc +0 -0
  32. claude_mpm/hooks/claude_hooks/services/connection_manager.py +23 -28
  33. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +22 -26
  34. claude_mpm/hooks/claude_hooks/services/state_manager.py +23 -36
  35. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +47 -73
  36. claude_mpm/hooks/session_resume_hook.py +22 -18
  37. claude_mpm/hooks/templates/pre_tool_use_template.py +10 -2
  38. {claude_mpm-5.6.3.dist-info → claude_mpm-5.6.5.dist-info}/METADATA +1 -1
  39. {claude_mpm-5.6.3.dist-info → claude_mpm-5.6.5.dist-info}/RECORD +44 -18
  40. {claude_mpm-5.6.3.dist-info → claude_mpm-5.6.5.dist-info}/WHEEL +0 -0
  41. {claude_mpm-5.6.3.dist-info → claude_mpm-5.6.5.dist-info}/entry_points.txt +0 -0
  42. {claude_mpm-5.6.3.dist-info → claude_mpm-5.6.5.dist-info}/licenses/LICENSE +0 -0
  43. {claude_mpm-5.6.3.dist-info → claude_mpm-5.6.5.dist-info}/licenses/LICENSE-FAQ.md +0 -0
  44. {claude_mpm-5.6.3.dist-info → claude_mpm-5.6.5.dist-info}/top_level.txt +0 -0
@@ -8,13 +8,22 @@ This service manages:
8
8
  """
9
9
 
10
10
  import os
11
- import subprocess
11
+ import subprocess # nosec B404
12
12
  import time
13
13
  from collections import deque
14
14
  from datetime import datetime, timezone
15
15
  from pathlib import Path
16
16
  from typing import Optional
17
17
 
18
+ # Try to import _log from hook_handler, fall back to no-op
19
+ try:
20
+ from claude_mpm.hooks.claude_hooks.hook_handler import _log
21
+ except ImportError:
22
+
23
+ def _log(msg: str) -> None:
24
+ pass # Silent fallback
25
+
26
+
18
27
  # Import constants for configuration
19
28
  try:
20
29
  from claude_mpm.core.constants import TimeoutConfig
@@ -63,17 +72,11 @@ class StateManagerService:
63
72
  ):
64
73
  """Track a new agent delegation with optional request data for response correlation."""
65
74
  if DEBUG:
66
- import sys
67
-
68
- print(
69
- f" - session_id: {session_id[:16] if session_id else 'None'}...",
70
- file=sys.stderr,
71
- )
72
- print(f" - agent_type: {agent_type}", file=sys.stderr)
73
- print(f" - request_data provided: {bool(request_data)}", file=sys.stderr)
74
- print(
75
- f" - delegation_requests size before: {len(self.delegation_requests)}",
76
- file=sys.stderr,
75
+ _log(f" - session_id: {session_id[:16] if session_id else 'None'}...")
76
+ _log(f" - agent_type: {agent_type}")
77
+ _log(f" - request_data provided: {bool(request_data)}")
78
+ _log(
79
+ f" - delegation_requests size before: {len(self.delegation_requests)}"
77
80
  )
78
81
 
79
82
  if session_id and agent_type and agent_type != "unknown":
@@ -89,15 +92,9 @@ class StateManagerService:
89
92
  "timestamp": datetime.now(timezone.utc).isoformat(),
90
93
  }
91
94
  if DEBUG:
92
- import sys
93
-
94
- print(
95
- f" - ✅ Stored in delegation_requests[{session_id[:16]}...]",
96
- file=sys.stderr,
97
- )
98
- print(
99
- f" - delegation_requests size after: {len(self.delegation_requests)}",
100
- file=sys.stderr,
95
+ _log(f" - ✅ Stored in delegation_requests[{session_id[:16]}...]")
96
+ _log(
97
+ f" - delegation_requests size after: {len(self.delegation_requests)}"
101
98
  )
102
99
 
103
100
  # Clean up old delegations (older than 5 minutes)
@@ -197,7 +194,7 @@ class StateManagerService:
197
194
  os.chdir(working_dir)
198
195
 
199
196
  # Run git command to get current branch
200
- result = subprocess.run(
197
+ result = subprocess.run( # nosec B603 B607
201
198
  ["git", "branch", "--show-current"],
202
199
  capture_output=True,
203
200
  text=True,
@@ -233,17 +230,12 @@ class StateManagerService:
233
230
  def find_matching_request(self, session_id: str) -> Optional[dict]:
234
231
  """Find matching request data for a session, with fuzzy matching fallback."""
235
232
  # First try exact match
236
- request_info = self.delegation_requests.get(session_id)
233
+ request_info = self.delegation_requests.get(session_id) # nosec B113
237
234
 
238
235
  # If exact match fails, try partial matching
239
236
  if not request_info and session_id:
240
237
  if DEBUG:
241
- import sys
242
-
243
- print(
244
- f" - Trying fuzzy match for session {session_id[:16]}...",
245
- file=sys.stderr,
246
- )
238
+ _log(f" - Trying fuzzy match for session {session_id[:16]}...")
247
239
  # Try to find a session that matches the first 8-16 characters
248
240
  for stored_sid in list(self.delegation_requests.keys()):
249
241
  if (
@@ -256,13 +248,8 @@ class StateManagerService:
256
248
  )
257
249
  ):
258
250
  if DEBUG:
259
- import sys
260
-
261
- print(
262
- f" - ✅ Fuzzy match found: {stored_sid[:16]}...",
263
- file=sys.stderr,
264
- )
265
- request_info = self.delegation_requests.get(stored_sid)
251
+ _log(f" - ✅ Fuzzy match found: {stored_sid[:16]}...")
252
+ request_info = self.delegation_requests.get(stored_sid) # nosec B113
266
253
  # Update the key to use the current session_id for consistency
267
254
  if request_info:
268
255
  self.delegation_requests[session_id] = request_info
@@ -10,10 +10,18 @@ This service handles:
10
10
  import json
11
11
  import os
12
12
  import re
13
- import sys
14
13
  from datetime import datetime, timezone
15
14
  from typing import Optional, Tuple
16
15
 
16
+ # Try to import _log from hook_handler, fall back to no-op
17
+ try:
18
+ from claude_mpm.hooks.claude_hooks.hook_handler import _log
19
+ except ImportError:
20
+
21
+ def _log(msg: str) -> None:
22
+ pass # Silent fallback
23
+
24
+
17
25
  # Debug mode is enabled by default for better visibility into hook processing
18
26
  DEBUG = os.environ.get("CLAUDE_MPM_HOOK_DEBUG", "true").lower() != "false"
19
27
 
@@ -45,26 +53,21 @@ class SubagentResponseProcessor:
45
53
  # Enhanced debug logging for session correlation
46
54
  session_id = event.get("session_id", "")
47
55
  if DEBUG:
48
- print(
49
- f" - session_id: {session_id[:16] if session_id else 'None'}...",
50
- file=sys.stderr,
51
- )
52
- print(f" - event keys: {list(event.keys())}", file=sys.stderr)
53
- print(
54
- f" - delegation_requests size: {len(self.state_manager.delegation_requests)}",
55
- file=sys.stderr,
56
+ _log(f" - session_id: {session_id[:16] if session_id else 'None'}...")
57
+ _log(f" - event keys: {list(event.keys())}")
58
+ _log(
59
+ f" - delegation_requests size: {len(self.state_manager.delegation_requests)}"
56
60
  )
57
61
  # Show all stored session IDs for comparison
58
62
  all_sessions = list(self.state_manager.delegation_requests.keys())
59
63
  if all_sessions:
60
- print(" - Stored sessions (first 16 chars):", file=sys.stderr)
64
+ _log(" - Stored sessions (first 16 chars):")
61
65
  for sid in all_sessions[:10]: # Show up to 10
62
- print(
63
- f" - {sid[:16]}... (agent: {self.state_manager.delegation_requests[sid].get('agent_type', 'unknown')})",
64
- file=sys.stderr,
66
+ _log(
67
+ f" - {sid[:16]}... (agent: {self.state_manager.delegation_requests[sid].get('agent_type', 'unknown')})"
65
68
  )
66
69
  else:
67
- print(" - No stored sessions in delegation_requests!", file=sys.stderr)
70
+ _log(" - No stored sessions in delegation_requests!")
68
71
 
69
72
  # Get agent type and other basic info
70
73
  agent_type, agent_id, reason, agent_type_inferred = self._extract_basic_info(
@@ -73,9 +76,8 @@ class SubagentResponseProcessor:
73
76
 
74
77
  # Always log SubagentStop events for debugging
75
78
  if DEBUG or agent_type != "unknown":
76
- print(
77
- f"Hook handler: Processing SubagentStop - agent: '{agent_type}', session: '{session_id}', reason: '{reason}'",
78
- file=sys.stderr,
79
+ _log(
80
+ f"Hook handler: Processing SubagentStop - agent: '{agent_type}', session: '{session_id}', reason: '{reason}'"
79
81
  )
80
82
 
81
83
  # Get working directory and git branch
@@ -115,9 +117,8 @@ class SubagentResponseProcessor:
115
117
 
116
118
  # Debug log the processed data
117
119
  if DEBUG:
118
- print(
119
- f"SubagentStop processed data: agent_type='{agent_type}', session_id='{session_id}'",
120
- file=sys.stderr,
120
+ _log(
121
+ f"SubagentStop processed data: agent_type='{agent_type}', session_id='{session_id}'"
121
122
  )
122
123
 
123
124
  # Emit to default namespace (consistent with subagent_start)
@@ -163,10 +164,7 @@ class SubagentResponseProcessor:
163
164
  agent_type = "pm"
164
165
  agent_type_inferred = True
165
166
  if DEBUG:
166
- print(
167
- " - Inferred agent_type='pm' (no explicit type found)",
168
- file=sys.stderr,
169
- )
167
+ _log(" - Inferred agent_type='pm' (no explicit type found)")
170
168
 
171
169
  return agent_type, agent_id, reason, agent_type_inferred
172
170
 
@@ -182,17 +180,15 @@ class SubagentResponseProcessor:
182
180
  if json_match:
183
181
  structured_response = json.loads(json_match.group(1))
184
182
  if DEBUG:
185
- print(
186
- f"Extracted structured response from {agent_type} agent in SubagentStop",
187
- file=sys.stderr,
183
+ _log(
184
+ f"Extracted structured response from {agent_type} agent in SubagentStop"
188
185
  )
189
186
 
190
187
  # Log if MEMORIES field is present
191
188
  if structured_response.get("MEMORIES") and DEBUG:
192
189
  memories_count = len(structured_response["MEMORIES"])
193
- print(
194
- f"Agent {agent_type} returned MEMORIES field with {memories_count} items",
195
- file=sys.stderr,
190
+ _log(
191
+ f"Agent {agent_type} returned MEMORIES field with {memories_count} items"
196
192
  )
197
193
 
198
194
  return structured_response
@@ -214,20 +210,15 @@ class SubagentResponseProcessor:
214
210
  ):
215
211
  """Track the agent response if response tracking is enabled."""
216
212
  if DEBUG:
217
- print(
218
- f" - response_tracking_enabled: {self.response_tracking_manager.response_tracking_enabled}",
219
- file=sys.stderr,
220
- )
221
- print(
222
- f" - response_tracker exists: {self.response_tracking_manager.response_tracker is not None}",
223
- file=sys.stderr,
213
+ _log(
214
+ f" - response_tracking_enabled: {self.response_tracking_manager.response_tracking_enabled}"
224
215
  )
225
- print(
226
- f" - session_id: {session_id[:16] if session_id else 'None'}...",
227
- file=sys.stderr,
216
+ _log(
217
+ f" - response_tracker exists: {self.response_tracking_manager.response_tracker is not None}"
228
218
  )
229
- print(f" - agent_type: {agent_type}", file=sys.stderr)
230
- print(f" - reason: {reason}", file=sys.stderr)
219
+ _log(f" - session_id: {session_id[:16] if session_id else 'None'}...")
220
+ _log(f" - agent_type: {agent_type}")
221
+ _log(f" - reason: {reason}")
231
222
 
232
223
  if (
233
224
  self.response_tracking_manager.response_tracking_enabled
@@ -238,27 +229,16 @@ class SubagentResponseProcessor:
238
229
  request_info = self.state_manager.find_matching_request(session_id)
239
230
 
240
231
  if DEBUG:
241
- print(
242
- f" - request_info present: {bool(request_info)}",
243
- file=sys.stderr,
244
- )
232
+ _log(f" - request_info present: {bool(request_info)}")
245
233
  if request_info:
246
- print(
247
- " - Found request data for response tracking",
248
- file=sys.stderr,
249
- )
250
- print(
251
- f" - stored agent_type: {request_info.get('agent_type')}",
252
- file=sys.stderr,
253
- )
254
- print(
255
- f" - request keys: {list(request_info.get('request', {}).keys())}",
256
- file=sys.stderr,
234
+ _log(" - ✅ Found request data for response tracking")
235
+ _log(f" - stored agent_type: {request_info.get('agent_type')}")
236
+ _log(
237
+ f" - request keys: {list(request_info.get('request', {}).keys())}"
257
238
  )
258
239
  else:
259
- print(
260
- f" - ❌ No request data found for session {session_id[:16]}...",
261
- file=sys.stderr,
240
+ _log(
241
+ f" - ❌ No request data found for session {session_id[:16]}..."
262
242
  )
263
243
 
264
244
  if request_info:
@@ -310,9 +290,8 @@ class SubagentResponseProcessor:
310
290
  # Check for MEMORIES field and process if present
311
291
  if structured_response.get("MEMORIES") and DEBUG:
312
292
  memories = structured_response["MEMORIES"]
313
- print(
314
- f"Found MEMORIES field in {agent_type} response with {len(memories)} items",
315
- file=sys.stderr,
293
+ _log(
294
+ f"Found MEMORIES field in {agent_type} response with {len(memories)} items"
316
295
  )
317
296
  # The memory will be processed by extract_and_update_memory
318
297
  # which is called by the memory hook service
@@ -329,26 +308,21 @@ class SubagentResponseProcessor:
329
308
  )
330
309
 
331
310
  if file_path and DEBUG:
332
- print(
333
- f"✅ Tracked {agent_type} agent response on SubagentStop: {file_path.name}",
334
- file=sys.stderr,
311
+ _log(
312
+ f"✅ Tracked {agent_type} agent response on SubagentStop: {file_path.name}"
335
313
  )
336
314
 
337
315
  # Clean up the request data
338
316
  self.state_manager.remove_request(session_id)
339
317
 
340
318
  elif DEBUG:
341
- print(
342
- f"No request data for SubagentStop session {session_id[:8]}..., agent: {agent_type}",
343
- file=sys.stderr,
319
+ _log(
320
+ f"No request data for SubagentStop session {session_id[:8]}..., agent: {agent_type}"
344
321
  )
345
322
 
346
323
  except Exception as e:
347
324
  if DEBUG:
348
- print(
349
- f"❌ Failed to track response on SubagentStop: {e}",
350
- file=sys.stderr,
351
- )
325
+ _log(f"❌ Failed to track response on SubagentStop: {e}")
352
326
 
353
327
  def _build_subagent_stop_data(
354
328
  self,
@@ -12,13 +12,21 @@ DESIGN DECISIONS:
12
12
  """
13
13
 
14
14
  import json
15
- import sys
16
15
  from pathlib import Path
17
16
  from typing import Any, Dict, Optional
18
17
 
19
18
  from claude_mpm.core.logger import get_logger
20
19
  from claude_mpm.services.cli.session_resume_helper import SessionResumeHelper
21
20
 
21
+ # Try to import _log from hook_handler, fall back to no-op
22
+ try:
23
+ from claude_mpm.hooks.claude_hooks.hook_handler import _log
24
+ except ImportError:
25
+
26
+ def _log(msg: str) -> None:
27
+ pass # Silent fallback
28
+
29
+
22
30
  logger = get_logger(__name__)
23
31
 
24
32
 
@@ -86,23 +94,19 @@ class SessionResumeStartupHook:
86
94
  Args:
87
95
  pause_info: Pause session metadata from check_for_active_pause()
88
96
  """
89
- print("\n" + "=" * 60, file=sys.stderr)
90
- print("⚠️ ACTIVE AUTO-PAUSE SESSION DETECTED", file=sys.stderr)
91
- print("=" * 60, file=sys.stderr)
92
- print(f"Session ID: {pause_info['session_id']}", file=sys.stderr)
93
- print(f"Started at: {pause_info['started_at']}", file=sys.stderr)
94
- print(
95
- f"Context at pause: {pause_info['context_at_start']:.1%}", file=sys.stderr
96
- )
97
- print(f"Actions recorded: {pause_info['action_count']}", file=sys.stderr)
98
- print(
99
- "\nThis session was auto-paused due to high context usage.", file=sys.stderr
100
- )
101
- print("Options:", file=sys.stderr)
102
- print(" 1. Continue (actions will be appended)", file=sys.stderr)
103
- print(" 2. Use /mpm-init pause --finalize to create snapshot", file=sys.stderr)
104
- print(" 3. Use /mpm-init pause --discard to abandon", file=sys.stderr)
105
- print("=" * 60 + "\n", file=sys.stderr)
97
+ _log("=" * 60)
98
+ _log("⚠️ ACTIVE AUTO-PAUSE SESSION DETECTED")
99
+ _log("=" * 60)
100
+ _log(f"Session ID: {pause_info['session_id']}")
101
+ _log(f"Started at: {pause_info['started_at']}")
102
+ _log(f"Context at pause: {pause_info['context_at_start']:.1%}")
103
+ _log(f"Actions recorded: {pause_info['action_count']}")
104
+ _log("\nThis session was auto-paused due to high context usage.")
105
+ _log("Options:")
106
+ _log(" 1. Continue (actions will be appended)")
107
+ _log(" 2. Use /mpm-init pause --finalize to create snapshot")
108
+ _log(" 3. Use /mpm-init pause --discard to abandon")
109
+ _log("=" * 60 + "\n")
106
110
 
107
111
  def on_pm_startup(self) -> Optional[Dict[str, Any]]:
108
112
  """Execute on PM startup to check for paused sessions.
@@ -55,6 +55,14 @@ import sys
55
55
  from pathlib import Path
56
56
  from typing import Any, Dict, Optional
57
57
 
58
+ # Try to import _log from hook_handler, fall back to no-op
59
+ try:
60
+ from claude_mpm.hooks.claude_hooks.hook_handler import _log
61
+ except ImportError:
62
+
63
+ def _log(msg: str) -> None:
64
+ pass # Silent fallback
65
+
58
66
 
59
67
  class PreToolUseHook:
60
68
  """Base class for PreToolUse hooks with input modification support."""
@@ -64,9 +72,9 @@ class PreToolUseHook:
64
72
  self.debug = os.environ.get("CLAUDE_MPM_HOOK_DEBUG", "false").lower() == "true"
65
73
 
66
74
  def log_debug(self, message: str) -> None:
67
- """Log debug message to stderr."""
75
+ """Log debug message using _log helper."""
68
76
  if self.debug:
69
- print(f"[PreToolUse Hook] {message}", file=sys.stderr)
77
+ _log(f"[PreToolUse Hook] {message}")
70
78
 
71
79
  def read_event(self) -> Optional[Dict[str, Any]]:
72
80
  """Read and parse the hook event from stdin."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 5.6.3
3
+ Version: 5.6.5
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
2
- claude_mpm/VERSION,sha256=R9OiitDPBv_gv7xkOMO-ERh_3EigciQpc2odWzCTYAA,6
2
+ claude_mpm/VERSION,sha256=Wwas5xnKQTkqXgApeVHQvWZFinNkdNv7W6HjYbrwERA,6
3
3
  claude_mpm/__init__.py,sha256=AGfh00BHKvLYD-UVFw7qbKtl7NMRIzRXOWw7vEuZ-h4,2214
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=pz3lTrZZR5HhV3eZzYtIbtBwWo7iM6pkBHP_ixxmI6Y,6827
@@ -402,34 +402,60 @@ claude_mpm/hooks/kuzu_enrichment_hook.py,sha256=jghoEZX8fA6HZ1kM_5l93cuCyy-AMBjW
402
402
  claude_mpm/hooks/kuzu_memory_hook.py,sha256=PK7AABvk5SHqmLyjIBEGl5nrsExJK1IVQvcXG8xeorM,12639
403
403
  claude_mpm/hooks/kuzu_response_hook.py,sha256=1eJ4WjME5eRN-7TdFD3nNsXm7nE16BjkhlvycaYvngM,6119
404
404
  claude_mpm/hooks/memory_integration_hook.py,sha256=MWy2NjbovTnBleTt-6JO6EqkYDP3PGai1HUK4pHLL0o,18517
405
- claude_mpm/hooks/session_resume_hook.py,sha256=GTxH4LBl_bjPfxyf4nLZiyVsMmK63g9nBQp1QqVQCkM,7386
405
+ claude_mpm/hooks/session_resume_hook.py,sha256=mUkH2zsqrF_MCLT2wfRnPpv7Dp0Qx3YCdaMB4pdWfag,7305
406
406
  claude_mpm/hooks/tool_call_interceptor.py,sha256=tYUBJHjbtaI5-HSWcz0aeUW0CaiQPypuDOTULQ0BCNI,7506
407
407
  claude_mpm/hooks/validation_hooks.py,sha256=i5uOaXifItwJfIdjjLCxAwrkKdkmo2Qa4qMc5-dwsKw,6465
408
408
  claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md,sha256=w21pg7JRuOLdg28f1A7EcyPxkRH_SXLgbQTKdfBCNsU,7484
409
409
  claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md,sha256=l7A6f-yi-Z1s1t3vlNmjgZjcGVxwSUt1ZDNuUuF4cJ0,12449
410
410
  claude_mpm/hooks/claude_hooks/__init__.py,sha256=b4mud_g3S-3itHY_Dzpbb_SmdMEcJwtUU8fTcqpLqqs,130
411
- claude_mpm/hooks/claude_hooks/auto_pause_handler.py,sha256=xDAQZ33I5OhGvtWvA9mxwVSoir9tM-aCvrWkSRdnVmU,17465
411
+ claude_mpm/hooks/claude_hooks/auto_pause_handler.py,sha256=Iy80whkkPFJpn1z7u8PY57r9LC5BvEg3wfDlyknv0a0,17184
412
412
  claude_mpm/hooks/claude_hooks/connection_pool.py,sha256=vpi-XbVf61GWhh85tHBzubbOgbJly_I-5-QmsleND2M,8658
413
413
  claude_mpm/hooks/claude_hooks/correlation_manager.py,sha256=3n-RxzqE8egG4max_NcpJgL9gzrBY6Ti529LrjleI1g,2033
414
- claude_mpm/hooks/claude_hooks/event_handlers.py,sha256=Zt0yj8Dyibmer6JSk2DLfcII_JyX_0SqGQnZ5Uq6Psg,47253
414
+ claude_mpm/hooks/claude_hooks/event_handlers.py,sha256=u7qkfthzAJxE5X4vAp5dCYhVDsadfC--vsqZVlmcrvE,45768
415
415
  claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=UOl5IVvz0Ro8Z0Owx4sKUWCxoIhvQpt7VTJ8lRC7Y8o,28266
416
416
  claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=XYkdYtcM0nfnwYvMdyIFCasr80ry3uI5-fLYsLtDGw4,2214
417
417
  claude_mpm/hooks/claude_hooks/installer.py,sha256=X6m0CQ9mjaESqUu9RF00uOopZx1u5VOeR0-ilyaP6Xg,33275
418
- claude_mpm/hooks/claude_hooks/memory_integration.py,sha256=ggPUpSLOp1fUu8cfHR7oyeGZINoeh_eKx85iKeNmnIQ,10436
419
- claude_mpm/hooks/claude_hooks/response_tracking.py,sha256=bgX4iVQqmX0L3_GHyKs1q4CSIjnavdxYnJZT0GaT4gs,17148
418
+ claude_mpm/hooks/claude_hooks/memory_integration.py,sha256=fj_d9N7aytLELomdphLLwYApXzmbhBxtwSK4xkmd55o,10759
419
+ claude_mpm/hooks/claude_hooks/response_tracking.py,sha256=2dyDOK9u-N4KcqWF7qq2T17bkps0grbs8MeWBRSC8vE,16323
420
420
  claude_mpm/hooks/claude_hooks/tool_analysis.py,sha256=3_o2PP9D7wEMwLriCtIBOw0cj2fSZfepN7lI4P1meSQ,7862
421
+ claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc,sha256=EGpgXqhPM0iRRZtCqHaLVQ6wDH42OH_M7Gt5GiFLyro,346
422
+ claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-314.pyc,sha256=tBzcQ_3WxkmgPTQAPd7uKgFGtz-Yb6r2hEgF9Y_Flwc,319
423
+ claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc,sha256=7YbusOM2EaL4NqIuNsLTJRCRJWRxo0DhVLXm9ZVFc7Y,20829
424
+ claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-314.pyc,sha256=vo_mPXj0KTtBz2_SAU4NZ7TEWPfgBZtLeXD3CMAvJ3M,21381
425
+ claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc,sha256=SQX5iiP9bQZkLL-cj_2tlGH7lpAzarO0mYal7btj3tc,3521
426
+ claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc,sha256=43y-O3fzE07cyJx1we9DfLeaIkL0GQR4KKpnzh_94uk,44526
427
+ claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-314.pyc,sha256=DC4owkvPyhcCT7ScUxlKS6pUygaUYEMj0k3eVYZHdMk,42528
428
+ claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc,sha256=vhJjvAMTdDWkB_qWaWr_PeDb4I8-h7UymR1wDVHeyYM,30789
429
+ claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-314.pyc,sha256=RVz6WvW-sD7kLbh6S5a96WarpPvZv4_qfFMR5SN8WUo,30603
430
+ claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-314.pyc,sha256=hxxLzkAFGV4sBK3NiYZ6zVlc1Cq9yTc8YPzp-mf5sxo,37219
431
+ claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc,sha256=Xu_hwOf9AG0mZthl5gcDcVv68FiSo5KgZ6lDxdZXCfU,11185
432
+ claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-314.pyc,sha256=oJhMGouqaFI1u3NZryHoRh6ucfPKHPe8GufcsPzi89o,11081
433
+ claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc,sha256=qJ5xY8yYwo8ZO7P-Gem_GK4VZdqyNeYvs8ANvC45jnw,16228
434
+ claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-314.pyc,sha256=yu70SIPNsdECY8l_P971JPFuUPXqD4HmjuuGMU-nSAU,15820
435
+ claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc,sha256=ZjcNfNY5Ht6FhalPeh7M7OzMffcey5iF4AVjDDg9kak,10694
436
+ claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-314.pyc,sha256=ck8ifVIoVPaMVVRcMgvsM8RfIHnQbwGBUVs25A-yQBw,10771
421
437
  claude_mpm/hooks/claude_hooks/services/__init__.py,sha256=OIYOKsUNw1BHYawOCp-KFK5kmQKuj92cCqCEPO0nwo0,585
422
- claude_mpm/hooks/claude_hooks/services/connection_manager.py,sha256=6MhoPiSQSkG5Xsb9KjPk_eu60h6-v5uNXjn6ry255aA,10452
423
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py,sha256=7YKEsD45us5SNnj-jpSyFBYbU0KrZ8FWoIdZDUeU2gI,7795
438
+ claude_mpm/hooks/claude_hooks/services/connection_manager.py,sha256=shpoCLJpM9qoCDMUuUhk6L9WEKdzLB_OsPtwtDyJMdk,10197
439
+ claude_mpm/hooks/claude_hooks/services/connection_manager_http.py,sha256=rdwUhK7DoPqDSRGPHW1uiaE8McsnmggvCQGZ2x_vX-o,7583
424
440
  claude_mpm/hooks/claude_hooks/services/duplicate_detector.py,sha256=Fh9LmEMsVmQM9t0U1v2l_fuBwvNpVkl_0EF8Wu5KLHQ,3882
425
- claude_mpm/hooks/claude_hooks/services/state_manager.py,sha256=QB0JPJQThTVg0TGRO3Dc_3y3bac-hkulgMqqzo_71ng,11189
426
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=nJw1ERCMxq23ioZ5DKwprmwO0fuvuqpdFHJ03XaMiDo,16052
441
+ claude_mpm/hooks/claude_hooks/services/state_manager.py,sha256=PcEpAzwEnZRjw6JnbtbekDRdhIoaKql5VhhZJCEPNt4,10899
442
+ claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=unHGeU6PJxc00_3xnLyyZHeLa47x98knxn6cl-i8ALA,15040
443
+ claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc,sha256=xBfLBSqnpcKfcQBWfh7xUm454g1lq1LvbO7SxGvcOPc,644
444
+ claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-314.pyc,sha256=nZDxNz67tIFwbZNRqyCRX8cSi0v3JKCZS5U5FhwwApA,562
445
+ claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc,sha256=SydGEQ9oUWs161Ro4ULHfnPB0wiZgiB7V628B3V6N2U,9613
446
+ claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-314.pyc,sha256=PjdPDUyUQWm0FqYRdG2knPoZDSKS0g1vk-BDAXfzCi8,9627
447
+ claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc,sha256=Yy_REAUhJCiFjOhxeDb4v0qyEvEbUtCmXD9PAz40dhw,5321
448
+ claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-314.pyc,sha256=Xy9iNAtQMfXC_eW9rvumG9rFqK5t-QlLPmUahlqza_I,5341
449
+ claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc,sha256=P-Au2P5H0enEeKm7sP1eQv-SU6AAnCqjjOE5jhXcrgs,12352
450
+ claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-314.pyc,sha256=-H3-oDao1c8Dy1reMR98kR1W556eNpPmRWOvKGszKz4,13101
451
+ claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc,sha256=4SfbElFMcQK07Frewl9mQ0eB5yCqZUe-CGfGYNUUMh0,14931
452
+ claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-314.pyc,sha256=o6Dc1-yyZjUdVh_JWZmEIvVt0qG0R1-aLhr7XTt-oX0,15104
427
453
  claude_mpm/hooks/failure_learning/__init__.py,sha256=iJ80AKFHiT8DjIH2a72DQVJvL6nAFrizNA2yTKwZ4rw,1805
428
454
  claude_mpm/hooks/failure_learning/failure_detection_hook.py,sha256=KENoB5N-dBm5hb0SxeIZtCvNKbmG2BKHOJSrSO-3Z_I,7500
429
455
  claude_mpm/hooks/failure_learning/fix_detection_hook.py,sha256=XUk1bnBVLdfhQ9AMQSvGsTSeFQsKsVud2wbWX-Jjor8,7164
430
456
  claude_mpm/hooks/failure_learning/learning_extraction_hook.py,sha256=vAOwVuZa_bBBSrFvM9v3wt7T1frZO_Yb5iNGOCgWVuk,9981
431
457
  claude_mpm/hooks/templates/pre_tool_use_simple.py,sha256=E7EIiX0ERjgQ5-hzPeZnT18NBdU5hJHxXq0LH7K984M,2156
432
- claude_mpm/hooks/templates/pre_tool_use_template.py,sha256=MBeU-e3wdq_Uf2kKjn-Q9gU7bUQuNIYTX0eUNOh9IFY,10026
458
+ claude_mpm/hooks/templates/pre_tool_use_template.py,sha256=y-FrEg04X1BAaMfhXO3ITLPg3j-aSmI7UwLpZRWzAK0,10230
433
459
  claude_mpm/models/__init__.py,sha256=GADyLAiF-1VVghYKI7Urz3zSnf2sjJUXlOEMuCOs7_g,468
434
460
  claude_mpm/models/agent_definition.py,sha256=rMCVu4qYpHvw0wSmr5KPyNf8p6Hne049w2erb2Ba_20,7122
435
461
  claude_mpm/models/agent_session.py,sha256=Tc-0OfAorb5BCmOpoZmC7jMdbtm6zZKF1Wtj16MO27s,20054
@@ -1070,10 +1096,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
1070
1096
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
1071
1097
  claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
1072
1098
  claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
1073
- claude_mpm-5.6.3.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
1074
- claude_mpm-5.6.3.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
1075
- claude_mpm-5.6.3.dist-info/METADATA,sha256=7Z7Dz2L8KLMZWUcVhx0dcmuhJRac7nrUGfT3ecZFmQc,14983
1076
- claude_mpm-5.6.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1077
- claude_mpm-5.6.3.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
1078
- claude_mpm-5.6.3.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1079
- claude_mpm-5.6.3.dist-info/RECORD,,
1099
+ claude_mpm-5.6.5.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
1100
+ claude_mpm-5.6.5.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
1101
+ claude_mpm-5.6.5.dist-info/METADATA,sha256=G50Re3GrZttFycswLOr3Q_yl-JH3cuDqPMJu2UraWTE,14983
1102
+ claude_mpm-5.6.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1103
+ claude_mpm-5.6.5.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
1104
+ claude_mpm-5.6.5.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1105
+ claude_mpm-5.6.5.dist-info/RECORD,,