claude-mpm 4.3.13__py3-none-any.whl → 4.3.15__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/agents/PM_INSTRUCTIONS.md +28 -4
  3. claude_mpm/agents/templates/engineer.json +11 -3
  4. claude_mpm/cli/commands/mcp.py +10 -5
  5. claude_mpm/cli/commands/mcp_setup_external.py +1 -1
  6. claude_mpm/cli/commands/run.py +8 -0
  7. claude_mpm/cli/interactive/agent_wizard.py +2 -2
  8. claude_mpm/cli/startup_logging.py +155 -0
  9. claude_mpm/core/agent_registry.py +6 -10
  10. claude_mpm/core/api_validator.py +1 -1
  11. claude_mpm/core/interactive_session.py +1 -1
  12. claude_mpm/core/logging_config.py +2 -4
  13. claude_mpm/core/oneshot_session.py +1 -1
  14. claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -1
  15. claude_mpm/models/agent_session.py +1 -1
  16. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +1 -3
  17. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -1
  18. claude_mpm/services/agents/registry/__init__.py +1 -1
  19. claude_mpm/services/cli/agent_listing_service.py +1 -1
  20. claude_mpm/services/cli/agent_validation_service.py +1 -0
  21. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  22. claude_mpm/services/core/path_resolver.py +1 -1
  23. claude_mpm/services/mcp_gateway/server/stdio_server.py +2 -2
  24. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +1 -1
  25. claude_mpm/services/monitor/handlers/file.py +1 -1
  26. claude_mpm/services/monitor/management/lifecycle.py +1 -1
  27. claude_mpm/services/port_manager.py +2 -2
  28. claude_mpm/services/session_management_service.py +1 -1
  29. claude_mpm/services/socketio/event_normalizer.py +1 -1
  30. claude_mpm/services/socketio/handlers/file.py +1 -1
  31. claude_mpm/services/socketio/handlers/git.py +1 -1
  32. claude_mpm/services/socketio/server/eventbus_integration.py +0 -1
  33. claude_mpm/services/ticket_services/validation_service.py +1 -1
  34. claude_mpm/services/visualization/mermaid_generator.py +1 -1
  35. claude_mpm/tools/code_tree_analyzer.py +3 -3
  36. claude_mpm/utils/agent_dependency_loader.py +2 -2
  37. claude_mpm/utils/environment_context.py +1 -1
  38. claude_mpm/utils/imports.py +1 -1
  39. {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/METADATA +1 -1
  40. {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/RECORD +44 -44
  41. {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/WHEEL +0 -0
  42. {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/entry_points.txt +0 -0
  43. {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/licenses/LICENSE +0 -0
  44. {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION CHANGED
@@ -1 +1 @@
1
- 4.3.13
1
+ 4.3.15
@@ -67,7 +67,8 @@
67
67
  ✓ TodoWrite - For tracking delegated work
68
68
  ✓ Read - ONLY for reading ONE file maximum (more = violation)
69
69
  ✓ Bash - ONLY for `ls`, `pwd` (NOT for investigation)
70
- Grep/Glob - FORBIDDEN for PM (delegate to Research)
70
+ mcp__mcp-vector-search__* - For quick code search BEFORE delegation (helps better task definition)
71
+ ❌ Grep/Glob - FORBIDDEN for PM (delegate to Research for deep investigation)
71
72
  ❌ WebSearch/WebFetch - FORBIDDEN for PM (delegate to Research)
72
73
 
73
74
  **VIOLATION TRACKING ACTIVE**: Each violation logged, escalated, and reported.
@@ -90,14 +91,37 @@
90
91
  | "Ready for production" | Full QA suite results | QA with comprehensive tests |
91
92
  | "Works as expected" | User acceptance tests | QA with scenario tests |
92
93
 
94
+ ## VECTOR SEARCH WORKFLOW FOR PM
95
+
96
+ **PURPOSE**: Use mcp-vector-search for quick context BEFORE delegation to provide better task definitions.
97
+
98
+ ### Allowed Vector Search Usage by PM:
99
+ 1. **mcp__mcp-vector-search__get_project_status** - Check if project is indexed
100
+ 2. **mcp__mcp-vector-search__search_code** - Quick semantic search for relevant code
101
+ 3. **mcp__mcp-vector-search__search_context** - Understand functionality before delegation
102
+
103
+ ### PM Vector Search Rules:
104
+ - ✅ Use to find relevant code areas BEFORE delegating to agents
105
+ - ✅ Use to understand project structure for better task scoping
106
+ - ✅ Use to identify which components need investigation
107
+ - ❌ DO NOT use for deep analysis (delegate to Research)
108
+ - ❌ DO NOT use to implement solutions (delegate to Engineer)
109
+ - ❌ DO NOT use to verify fixes (delegate to QA)
110
+
111
+ ### Example PM Workflow:
112
+ 1. User reports issue → PM uses vector search to find relevant code
113
+ 2. PM identifies affected components from search results
114
+ 3. PM delegates to appropriate agent with specific areas to investigate
115
+ 4. Agent performs deep analysis/implementation with full context
116
+
93
117
  ## SIMPLIFIED DELEGATION RULES
94
118
 
95
- **DEFAULT: When in doubt → DELEGATE TO RESEARCH FIRST, THEN APPROPRIATE AGENT**
119
+ **DEFAULT: When in doubt → USE VECTOR SEARCH FOR CONTEXT → DELEGATE TO APPROPRIATE AGENT**
96
120
 
97
121
  ### DELEGATION-FIRST RESPONSE PATTERNS
98
122
 
99
- **User asks question → PM delegates to Research (NEVER investigates)**
100
- **User reports bug → PM delegates to QA to reproduce (NEVER checks)**
123
+ **User asks question → PM uses vector search for quick context → Delegates to Research with better scope**
124
+ **User reports bug → PM searches for related code → Delegates to QA with specific areas to check**
101
125
  **User wants feature → PM delegates to Engineer (NEVER implements)**
102
126
  **User needs info → PM delegates to Documentation (NEVER searches)**
103
127
  **User mentions error → PM delegates to Ops for logs (NEVER debugs)**
@@ -3,9 +3,14 @@
3
3
  "description": "Clean architecture specialist with code reduction focus and dependency injection",
4
4
  "schema_version": "1.3.0",
5
5
  "agent_id": "engineer",
6
- "agent_version": "3.8.1",
7
- "template_version": "2.2.0",
6
+ "agent_version": "3.9.0",
7
+ "template_version": "2.3.0",
8
8
  "template_changelog": [
9
+ {
10
+ "version": "2.3.0",
11
+ "date": "2025-09-25",
12
+ "description": "Added mcp-vector-search integration for finding existing solutions before implementing new code"
13
+ },
9
14
  {
10
15
  "version": "2.2.0",
11
16
  "date": "2025-08-25",
@@ -73,9 +78,12 @@
73
78
  "Code reduction techniques",
74
79
  "Dependency injection patterns",
75
80
  "Modularization strategies",
76
- "Refactoring for legacy code"
81
+ "Refactoring for legacy code",
82
+ "Semantic code search for pattern discovery"
77
83
  ],
78
84
  "best_practices": [
85
+ "Use mcp__mcp-vector-search__search_code FIRST to find existing solutions",
86
+ "Use mcp__mcp-vector-search__search_similar to find reusable patterns",
79
87
  "Search for code to DELETE first",
80
88
  "Apply dependency injection as default",
81
89
  "Enforce 800-line file limit",
@@ -61,10 +61,10 @@ def manage_mcp(args):
61
61
 
62
62
  # Allow install command to proceed
63
63
  if args.mcp_command == MCPCommands.INSTALL.value:
64
- MCPConfiguration = None
65
- MCPServiceRegistry = None
66
- ToolRegistry = None
67
- MCPGateway = None
64
+ MCPConfiguration = None # noqa: N806
65
+ MCPServiceRegistry = None # noqa: N806
66
+ ToolRegistry = None # noqa: N806
67
+ MCPGateway = None # noqa: N806
68
68
  else:
69
69
  print(
70
70
  "\nError: MCP Gateway services not fully available",
@@ -115,7 +115,12 @@ def manage_mcp(args):
115
115
 
116
116
 
117
117
  def _show_status(
118
- args, logger, MCPConfiguration, MCPServiceRegistry, ToolRegistry, MCPGateway
118
+ args,
119
+ logger,
120
+ MCPConfiguration,
121
+ MCPServiceRegistry,
122
+ ToolRegistry,
123
+ MCPGateway, # noqa: N803
119
124
  ):
120
125
  """
121
126
  Show MCP Gateway status when no subcommand is provided.
@@ -7,7 +7,7 @@ This module handles the registration of external MCP services
7
7
  import json
8
8
  import subprocess
9
9
  import sys
10
- from datetime import datetime, timezone
10
+ from datetime import timezone
11
11
  from pathlib import Path
12
12
  from typing import Dict, Optional, Tuple
13
13
 
@@ -738,6 +738,14 @@ def run_session_legacy(args):
738
738
  # Auto-configure MCP services on startup
739
739
  _ensure_mcp_services_configured(logger)
740
740
 
741
+ # Trigger vector search indexing after MCP is configured
742
+ try:
743
+ from ...cli.startup_logging import start_vector_search_indexing
744
+
745
+ start_vector_search_indexing()
746
+ except Exception as e:
747
+ logger.debug(f"Failed to start vector search indexing: {e}")
748
+
741
749
  try:
742
750
  from ...core.claude_runner import ClaudeRunner, create_simple_context
743
751
  except ImportError:
@@ -600,7 +600,7 @@ class AgentWizard:
600
600
  tier="project",
601
601
  )
602
602
 
603
- def _manage_single_agent(self, template: LocalAgentTemplate) -> Tuple[bool, str]: # noqa: PLR0911
603
+ def _manage_single_agent(self, template: LocalAgentTemplate) -> Tuple[bool, str]:
604
604
  """Manage a single agent."""
605
605
  print(f"\n🔧 Managing Agent: {template.agent_id}")
606
606
  print(f" Name: {template.metadata.get('name', template.agent_id)}")
@@ -815,7 +815,7 @@ class AgentWizard:
815
815
  return self.manager.project_agents_dir / f"{template.agent_id}.json"
816
816
  return self.manager.user_agents_dir / f"{template.agent_id}.json"
817
817
 
818
- def _interactive_delete_menu(self, templates: list) -> Tuple[bool, str]: # noqa: PLR0911
818
+ def _interactive_delete_menu(self, templates: list) -> Tuple[bool, str]:
819
819
  """Interactive deletion menu for multiple agents."""
820
820
  print("\n🗑️ Delete Agents")
821
821
  print("=" * 50)
@@ -14,6 +14,7 @@ DESIGN DECISIONS:
14
14
  - Capture all startup logs to timestamped files for analysis
15
15
  """
16
16
 
17
+ import asyncio
17
18
  import logging
18
19
  import shutil
19
20
  import subprocess
@@ -630,6 +631,156 @@ def cleanup_old_startup_logs(
630
631
  return deleted_count
631
632
 
632
633
 
634
+ async def trigger_vector_search_indexing(project_root: Optional[Path] = None) -> None:
635
+ """
636
+ Trigger mcp-vector-search indexing in the background.
637
+
638
+ This function attempts to start the mcp-vector-search indexing process
639
+ asynchronously so it doesn't block startup. If the service is not available,
640
+ it fails silently.
641
+
642
+ Args:
643
+ project_root: Root directory for the project (defaults to cwd)
644
+ """
645
+ logger = get_logger("cli")
646
+
647
+ if project_root is None:
648
+ project_root = Path.cwd()
649
+
650
+ try:
651
+ # Check if mcp-vector-search is available
652
+ from ..services.mcp_config_manager import MCPConfigManager
653
+
654
+ manager = MCPConfigManager()
655
+ vector_search_path = manager.detect_service_path("mcp-vector-search")
656
+
657
+ if not vector_search_path:
658
+ logger.debug("mcp-vector-search not found, skipping indexing")
659
+ return
660
+
661
+ # Build the command based on the service configuration
662
+ if "python" in vector_search_path:
663
+ # Using Python interpreter directly
664
+ cmd = [
665
+ vector_search_path,
666
+ "-m",
667
+ "mcp_vector_search.cli",
668
+ "index",
669
+ str(project_root),
670
+ ]
671
+ else:
672
+ # Using installed binary
673
+ cmd = [vector_search_path, "index", str(project_root)]
674
+
675
+ logger.info(
676
+ "MCP Vector Search: Starting background indexing for improved code search"
677
+ )
678
+
679
+ # Start the indexing process in the background
680
+ # We use subprocess.Popen instead of run to avoid blocking
681
+ process = await asyncio.create_subprocess_exec(
682
+ *cmd,
683
+ stdout=asyncio.subprocess.DEVNULL,
684
+ stderr=asyncio.subprocess.DEVNULL,
685
+ cwd=str(project_root),
686
+ )
687
+
688
+ # Don't wait for completion - let it run in the background
689
+ logger.debug(
690
+ f"MCP Vector Search: Indexing process started (PID: {process.pid})"
691
+ )
692
+
693
+ except ImportError:
694
+ logger.debug(
695
+ "MCP config manager not available, skipping vector search indexing"
696
+ )
697
+ except Exception as e:
698
+ # Don't let indexing failures prevent startup
699
+ logger.debug(f"Failed to start vector search indexing: {e}")
700
+
701
+
702
+ def start_vector_search_indexing(project_root: Optional[Path] = None) -> None:
703
+ """
704
+ Synchronous wrapper to trigger vector search indexing.
705
+
706
+ This creates a new event loop if needed to run the async indexing function.
707
+ Falls back to subprocess.Popen if async fails.
708
+
709
+ Args:
710
+ project_root: Root directory for the project (defaults to cwd)
711
+ """
712
+ logger = get_logger("cli")
713
+
714
+ try:
715
+ # Try to get the current event loop
716
+ loop = asyncio.get_running_loop()
717
+ # If we're in an event loop, create a task
718
+ # Store reference to avoid RUF006 warning
719
+ _ = loop.create_task(trigger_vector_search_indexing(project_root))
720
+ except RuntimeError:
721
+ # No event loop running, try async approach first
722
+ try:
723
+ asyncio.run(trigger_vector_search_indexing(project_root))
724
+ except Exception as e:
725
+ # Fallback to simple subprocess approach
726
+ logger.debug(f"Async indexing failed, trying subprocess: {e}")
727
+ _start_vector_search_subprocess(project_root)
728
+
729
+
730
+ def _start_vector_search_subprocess(project_root: Optional[Path] = None) -> None:
731
+ """
732
+ Fallback method to start vector search indexing using subprocess.Popen.
733
+
734
+ Args:
735
+ project_root: Root directory for the project (defaults to cwd)
736
+ """
737
+ logger = get_logger("cli")
738
+
739
+ if project_root is None:
740
+ project_root = Path.cwd()
741
+
742
+ try:
743
+ from ..services.mcp_config_manager import MCPConfigManager
744
+
745
+ manager = MCPConfigManager()
746
+ vector_search_path = manager.detect_service_path("mcp-vector-search")
747
+
748
+ if not vector_search_path:
749
+ logger.debug("mcp-vector-search not found, skipping indexing")
750
+ return
751
+
752
+ # Build the command
753
+ if "python" in vector_search_path:
754
+ cmd = [
755
+ vector_search_path,
756
+ "-m",
757
+ "mcp_vector_search.cli",
758
+ "index",
759
+ str(project_root),
760
+ ]
761
+ else:
762
+ cmd = [vector_search_path, "index", str(project_root)]
763
+
764
+ logger.info(
765
+ "MCP Vector Search: Starting background indexing for improved code search"
766
+ )
767
+
768
+ # Start the indexing process in the background
769
+ process = subprocess.Popen(
770
+ cmd,
771
+ stdout=subprocess.DEVNULL,
772
+ stderr=subprocess.DEVNULL,
773
+ cwd=str(project_root),
774
+ )
775
+
776
+ logger.debug(
777
+ f"MCP Vector Search: Indexing process started (PID: {process.pid})"
778
+ )
779
+
780
+ except Exception as e:
781
+ logger.debug(f"Failed to start vector search indexing: {e}")
782
+
783
+
633
784
  def get_latest_startup_log(project_root: Optional[Path] = None) -> Optional[Path]:
634
785
  """
635
786
  Get the path to the most recent startup log file.
@@ -678,6 +829,10 @@ def log_startup_status(monitor_mode: bool = False, websocket_port: int = 8765) -
678
829
  # Log monitor setup status
679
830
  status_logger.log_monitor_setup_status(monitor_mode, websocket_port)
680
831
 
832
+ # Trigger vector search indexing in the background after MCP is configured
833
+ # This will run asynchronously and not block startup
834
+ start_vector_search_indexing()
835
+
681
836
  except Exception as e:
682
837
  # Don't let logging failures prevent startup
683
838
  logger = get_logger("cli")
@@ -19,22 +19,18 @@ from pathlib import Path
19
19
  from typing import Any, Dict, List, Optional, Set
20
20
 
21
21
  # Import from the unified agent registry system
22
- from .unified_agent_registry import AgentMetadata as UnifiedAgentMetadata
23
22
  from .unified_agent_registry import (
23
+ AgentMetadata as UnifiedAgentMetadata,
24
24
  AgentTier,
25
25
  AgentType,
26
- )
27
- from .unified_agent_registry import discover_agents as unified_discover_agents
28
- from .unified_agent_registry import get_agent as unified_get_agent
29
- from .unified_agent_registry import (
26
+ discover_agents as unified_discover_agents,
27
+ get_agent as unified_get_agent,
30
28
  get_agent_registry,
31
- )
32
- from .unified_agent_registry import get_core_agents as unified_get_core_agents
33
- from .unified_agent_registry import get_registry_stats as unified_get_registry_stats
34
- from .unified_agent_registry import (
29
+ get_core_agents as unified_get_core_agents,
30
+ get_registry_stats as unified_get_registry_stats,
35
31
  get_specialized_agents as unified_get_specialized_agents,
32
+ list_agents as unified_list_agents,
36
33
  )
37
- from .unified_agent_registry import list_agents as unified_list_agents
38
34
 
39
35
  try:
40
36
  from ..core.logger import get_logger
@@ -244,7 +244,7 @@ class APIKeyValidator:
244
244
  self.errors.append(f"❌ GitHub token validation failed with error: {e}")
245
245
  return False
246
246
 
247
- def _validate_custom_api(self, api_name: str, validation_config: Dict) -> bool: # noqa: PLR0911
247
+ def _validate_custom_api(self, api_name: str, validation_config: Dict) -> bool:
248
248
  """Validate a custom API key based on configuration.
249
249
 
250
250
  Args:
@@ -154,7 +154,7 @@ class InteractiveSession:
154
154
  self.logger.error(error_msg)
155
155
  return False, {}
156
156
 
157
- def handle_interactive_input(self, environment: Dict[str, Any]) -> bool: # noqa: PLR0911
157
+ def handle_interactive_input(self, environment: Dict[str, Any]) -> bool:
158
158
  """Handle the interactive input/output loop.
159
159
 
160
160
  Launches Claude and manages the interactive session using either
@@ -27,13 +27,11 @@ from typing import Any, Dict, Optional, Union
27
27
  from claude_mpm.core.logger import (
28
28
  JsonFormatter,
29
29
  finalize_streaming_logs,
30
- )
31
- from claude_mpm.core.logger import get_logger as _get_logger
32
- from claude_mpm.core.logger import (
30
+ get_logger as _get_logger,
33
31
  log_async_performance,
34
32
  log_performance,
33
+ setup_logging as _setup_logging,
35
34
  )
36
- from claude_mpm.core.logger import setup_logging as _setup_logging
37
35
 
38
36
  # Standard log format for consistency
39
37
  STANDARD_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
@@ -166,7 +166,7 @@ class OneshotSession:
166
166
 
167
167
  def _run_subprocess(
168
168
  self, cmd: list, env: dict, prompt: str
169
- ) -> Tuple[bool, Optional[str]]: # noqa: PLR0911
169
+ ) -> Tuple[bool, Optional[str]]:
170
170
  """Run the subprocess and handle all exception types."""
171
171
  try:
172
172
  # Debug: log the command being run
@@ -190,7 +190,10 @@ class ConnectionManagerService:
190
190
 
191
191
  # Warn if no emission method is available
192
192
  if not self.connection_pool and DEBUG:
193
- print(f"⚠️ No event emission method available for: {claude_event_data.get('event', 'unknown')}", file=sys.stderr)
193
+ print(
194
+ f"⚠️ No event emission method available for: {claude_event_data.get('event', 'unknown')}",
195
+ file=sys.stderr,
196
+ )
194
197
 
195
198
  def cleanup(self):
196
199
  """Cleanup connections on service destruction."""
@@ -232,7 +232,7 @@ class AgentSession:
232
232
 
233
233
  return event
234
234
 
235
- def _categorize_event(self, event_type: str, data: Dict[str, Any]) -> EventCategory: # noqa: PLR0911
235
+ def _categorize_event(self, event_type: str, data: Dict[str, Any]) -> EventCategory:
236
236
  """Categorize an event based on its type and data.
237
237
 
238
238
  WHY: Categories help with filtering and analysis of related events.
@@ -185,9 +185,7 @@ class AgentFileSystemManager:
185
185
  if not backup_dir:
186
186
  from datetime import datetime, timezone
187
187
 
188
- timestamp = datetime.now(timezone.utc).strftime(
189
- "%Y%m%d_%H%M%S"
190
- )
188
+ timestamp = datetime.now(timezone.utc).strftime("%Y%m%d_%H%M%S")
191
189
  backup_dir = agents_dir.parent / f"agents_backup_{timestamp}"
192
190
 
193
191
  # Create backup
@@ -37,6 +37,7 @@ from pathlib import Path
37
37
  from typing import Any, Dict, List, Optional
38
38
 
39
39
  from claude_mpm.core.base_service import BaseService
40
+ from claude_mpm.core.unified_paths import get_path_manager
40
41
  from claude_mpm.models.agent_definition import AgentDefinition
41
42
  from claude_mpm.services.agents.management import AgentManager
42
43
  from claude_mpm.services.agents.memory import (
@@ -53,7 +54,6 @@ from claude_mpm.services.agents.registry.modification_tracker import (
53
54
  ModificationType,
54
55
  )
55
56
  from claude_mpm.services.memory.cache.shared_prompt_cache import SharedPromptCache
56
- from claude_mpm.core.unified_paths import get_path_manager
57
57
  from claude_mpm.utils.path_operations import path_ops
58
58
 
59
59
  # Import extracted services
@@ -4,8 +4,8 @@ from claude_mpm.core.unified_agent_registry import (
4
4
  AgentMetadata,
5
5
  AgentTier,
6
6
  AgentType,
7
+ UnifiedAgentRegistry as AgentRegistry,
7
8
  )
8
- from claude_mpm.core.unified_agent_registry import UnifiedAgentRegistry as AgentRegistry
9
9
 
10
10
  from .deployed_agent_discovery import DeployedAgentDiscovery
11
11
  from .modification_tracker import (
@@ -336,7 +336,7 @@ class AgentListingService(IAgentListingService):
336
336
  self.logger.error(f"Error listing agents by tier: {e}", exc_info=True)
337
337
  return AgentTierInfo(project=[], user=[], system=[])
338
338
 
339
- def get_agent_details(self, agent_name: str) -> Optional[Dict[str, Any]]: # noqa: PLR0911
339
+ def get_agent_details(self, agent_name: str) -> Optional[Dict[str, Any]]:
340
340
  """Get detailed information for a specific agent."""
341
341
  cache_key = f"agent_details_{agent_name}"
342
342
  cached = self._get_from_cache(cache_key)
@@ -1,4 +1,5 @@
1
1
  import re
2
+
2
3
  """
3
4
  Agent Validation Service
4
5
  ========================
@@ -81,7 +81,7 @@ class UnifiedDashboardManager(IUnifiedDashboardManager):
81
81
  background: bool = False,
82
82
  open_browser: bool = True,
83
83
  force_restart: bool = False,
84
- ) -> Tuple[bool, bool]: # noqa: PLR0911
84
+ ) -> Tuple[bool, bool]:
85
85
  """
86
86
  Start the dashboard using unified daemon.
87
87
 
@@ -322,8 +322,8 @@ class PathResolver(IPathResolver):
322
322
  """Detect framework path using unified path management."""
323
323
  try:
324
324
  # Import here to avoid circular dependencies
325
- from ...core.unified_paths import DeploymentContext as UnifiedContext
326
325
  from ...core.unified_paths import (
326
+ DeploymentContext as UnifiedContext,
327
327
  get_path_manager,
328
328
  )
329
329
 
@@ -173,7 +173,7 @@ class SimpleMCPServer:
173
173
 
174
174
  async def _summarize_content(
175
175
  self, content: str, style: str, max_length: int
176
- ) -> str: # noqa: PLR0911
176
+ ) -> str:
177
177
  """
178
178
  Summarize text content based on style and length constraints.
179
179
 
@@ -215,7 +215,7 @@ class SimpleMCPServer:
215
215
  # Default to brief
216
216
  return self._create_brief_summary(sentences, max_length)
217
217
 
218
- def _create_brief_summary(self, sentences: list[str], max_length: int) -> str: # noqa: PLR0911
218
+ def _create_brief_summary(self, sentences: list[str], max_length: int) -> str:
219
219
  """Create a brief summary by selecting most important sentences."""
220
220
  if not sentences:
221
221
  return ""
@@ -192,7 +192,7 @@ class UnifiedTicketTool(BaseToolAdapter):
192
192
 
193
193
  def _validate_parameters(
194
194
  self, operation: str, params: Dict[str, Any]
195
- ) -> Optional[str]: # noqa: PLR0911
195
+ ) -> Optional[str]:
196
196
  """
197
197
  Validate parameters based on the operation type.
198
198
 
@@ -109,7 +109,7 @@ class FileHandler:
109
109
  file_path: str,
110
110
  working_dir: Optional[str] = None,
111
111
  max_size: int = 1024 * 1024,
112
- ) -> Dict[str, Any]: # noqa: PLR0911
112
+ ) -> Dict[str, Any]:
113
113
  """Safely read file content with security checks.
114
114
 
115
115
  WHY: File reading must be secure to prevent directory traversal attacks
@@ -514,7 +514,7 @@ class DaemonLifecycle:
514
514
  error_msg = f"Port {self.port} is already in use or cannot be bound: {e}"
515
515
  return False, error_msg
516
516
 
517
- def is_our_service(self, host: str = "localhost") -> Tuple[bool, Optional[int]]: # noqa: PLR0911
517
+ def is_our_service(self, host: str = "localhost") -> Tuple[bool, Optional[int]]:
518
518
  """Check if the service on the port is our Socket.IO service.
519
519
 
520
520
  This uses multiple detection methods:
@@ -243,7 +243,7 @@ class PortManager:
243
243
 
244
244
  return any(pattern in cmdline_lower for pattern in daemon_patterns)
245
245
 
246
- def kill_process_on_port(self, port: int, force: bool = False) -> bool: # noqa: PLR0911
246
+ def kill_process_on_port(self, port: int, force: bool = False) -> bool:
247
247
  """Kill a process using a specific port if it's safe to do so.
248
248
 
249
249
  WHY: Automatically reclaim ports from our debug scripts while preserving
@@ -354,7 +354,7 @@ class PortManager:
354
354
 
355
355
  def find_available_port(
356
356
  self, preferred_port: Optional[int] = None, reclaim: bool = True
357
- ) -> Optional[int]: # noqa: PLR0911
357
+ ) -> Optional[int]:
358
358
  """Find an available port, preferring the specified port if given.
359
359
 
360
360
  WHY: Enhanced to intelligently reclaim ports from our debug processes
@@ -13,7 +13,7 @@ Extracted from ClaudeRunner to follow Single Responsibility Principle.
13
13
 
14
14
  import time
15
15
  import uuid
16
- from datetime import datetime, timezone
16
+ from datetime import timezone
17
17
  from typing import Any, Dict, List, Optional
18
18
 
19
19
  from claude_mpm.core.base_service import BaseService
@@ -566,7 +566,7 @@ class EventNormalizer:
566
566
 
567
567
  def _determine_source(
568
568
  self, event_data: Any, event_type: str, source_override: Optional[str] = None
569
- ) -> str: # noqa: PLR0911
569
+ ) -> str:
570
570
  """Determine the source of an event.
571
571
 
572
572
  WHY: Knowing where events originate helps with debugging,
@@ -108,7 +108,7 @@ class FileEventHandler(BaseEventHandler):
108
108
  file_path: str,
109
109
  working_dir: Optional[str] = None,
110
110
  max_size: int = 1024 * 1024,
111
- ) -> EventData: # noqa: PLR0911
111
+ ) -> EventData:
112
112
  """Safely read file content with security checks.
113
113
 
114
114
  WHY: File reading must be secure to prevent directory traversal attacks
@@ -601,7 +601,7 @@ class GitEventHandler(BaseEventHandler):
601
601
  file_path: str,
602
602
  timestamp: Optional[str] = None,
603
603
  working_dir: Optional[str] = None,
604
- ) -> Dict[str, Any]: # noqa: PLR0911
604
+ ) -> Dict[str, Any]:
605
605
  """Generate git diff for a specific file operation.
606
606
 
607
607
  WHY: This method generates a git diff showing the changes made to a file
@@ -49,7 +49,6 @@ class EventBusIntegration:
49
49
  Returns:
50
50
  bool: True if setup successful
51
51
  """
52
- from datetime import datetime
53
52
 
54
53
  print(
55
54
  f"[{datetime.now(timezone.utc).isoformat()}] EventBusIntegration.setup() called",
@@ -158,7 +158,7 @@ class TicketValidationService:
158
158
 
159
159
  def validate_create_params(
160
160
  self, params: Dict[str, Any]
161
- ) -> Tuple[bool, Optional[str]]: # noqa: PLR0911
161
+ ) -> Tuple[bool, Optional[str]]:
162
162
  """
163
163
  Validate parameters for ticket creation.
164
164
 
@@ -801,7 +801,7 @@ class MermaidGeneratorService(SyncBaseService):
801
801
 
802
802
  return False
803
803
 
804
- def validate_mermaid_syntax(self, diagram: str) -> Tuple[bool, Optional[str]]: # noqa: PLR0911
804
+ def validate_mermaid_syntax(self, diagram: str) -> Tuple[bool, Optional[str]]:
805
805
  """
806
806
  Validate that the generated Mermaid syntax is correct.
807
807
 
@@ -19,7 +19,7 @@ import hashlib
19
19
  import json
20
20
  import time
21
21
  from dataclasses import dataclass
22
- from datetime import datetime, timezone
22
+ from datetime import timezone
23
23
  from pathlib import Path
24
24
  from typing import Any, Dict, List, Optional
25
25
 
@@ -273,7 +273,7 @@ class GitignoreManager:
273
273
 
274
274
  return patterns
275
275
 
276
- def _basic_should_ignore(self, path: Path, working_dir: Path) -> bool: # noqa: PLR0911
276
+ def _basic_should_ignore(self, path: Path, working_dir: Path) -> bool:
277
277
  """Basic pattern matching fallback when pathspec is not available.
278
278
 
279
279
  Args:
@@ -609,7 +609,7 @@ class PythonAnalyzer:
609
609
 
610
610
  return nodes
611
611
 
612
- def _get_assignment_signature(self, node: ast.Assign, var_name: str) -> str: # noqa: PLR0911
612
+ def _get_assignment_signature(self, node: ast.Assign, var_name: str) -> str:
613
613
  """Get assignment signature string."""
614
614
  try:
615
615
  # Try to get a simple representation of the value
@@ -107,7 +107,7 @@ class AgentDependencyLoader:
107
107
  logger.info(f"Loaded dependencies for {len(agent_dependencies)} agents")
108
108
  return agent_dependencies
109
109
 
110
- def check_python_dependency(self, package_spec: str) -> Tuple[bool, Optional[str]]: # noqa: PLR0911
110
+ def check_python_dependency(self, package_spec: str) -> Tuple[bool, Optional[str]]:
111
111
  """
112
112
  Check if a Python package dependency is satisfied.
113
113
 
@@ -442,7 +442,7 @@ class AgentDependencyLoader:
442
442
 
443
443
  return compatible, incompatible
444
444
 
445
- def install_missing_dependencies(self, dependencies: List[str]) -> Tuple[bool, str]: # noqa: PLR0911
445
+ def install_missing_dependencies(self, dependencies: List[str]) -> Tuple[bool, str]:
446
446
  """
447
447
  Install missing Python dependencies using robust retry logic.
448
448
 
@@ -208,7 +208,7 @@ class EnvironmentContext:
208
208
  @classmethod
209
209
  def should_prompt_for_dependencies(
210
210
  cls, force_prompt: bool = False, force_skip: bool = False
211
- ) -> Tuple[bool, str]: # noqa: PLR0911
211
+ ) -> Tuple[bool, str]:
212
212
  """
213
213
  Determine if we should prompt for dependency installation.
214
214
 
@@ -15,7 +15,7 @@ def safe_import(
15
15
  fallback_name: Optional[str] = None,
16
16
  from_list: Optional[List[str]] = None,
17
17
  logger: Optional[logging.Logger] = None,
18
- ) -> Optional[Any]: # noqa: PLR0911
18
+ ) -> Optional[Any]:
19
19
  """
20
20
  Safely import a module with fallback support.
21
21
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.3.13
3
+ Version: 4.3.15
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=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
2
- claude_mpm/VERSION,sha256=QRl8YeLK0lLJCFfzC02AOEm1mE9p0ZmpyNvIWUZrKKQ,7
2
+ claude_mpm/VERSION,sha256=UB3Uwi6xTDtISDugSuR8EU-3lyQUJHIpSupwqwW83rE,7
3
3
  claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=cChN3myrAcF3jC-6DvHnBFTEnwlDk-TAsIXPvUZr_yw,5953
@@ -15,7 +15,7 @@ claude_mpm/agents/BASE_RESEARCH.md,sha256=2DZhDd5XxWWtsyNTBIwvtNWBu1JpFy5R5SAZDH
15
15
  claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md,sha256=zQZhrhVq9NLCtSjVX-aC0xcgueemSuPhKyv0SjEOyIQ,25852
16
16
  claude_mpm/agents/MEMORY.md,sha256=KbRwY_RYdOvTvFC2DD-ATfwjHkQWJ5PIjlGws_7RmjI,3307
17
17
  claude_mpm/agents/OUTPUT_STYLE.md,sha256=IYbo4jmICihrfnChbdrRpwVk4VobCcNyYqZqd53VXMk,533
18
- claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=5vnmvySd1bJKWj60VempYCGmoUNaHAqpHV0P-agGZGE,24637
18
+ claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=wTjmrnJjGo3bFvQQcj1VJ1wEFgYePaOe3NFGa_1vf50,25963
19
19
  claude_mpm/agents/WORKFLOW.md,sha256=Dvy4Io3vr1V0WRINTPRuzSOIciwOl-d7fwO2PtXtvGs,2638
20
20
  claude_mpm/agents/__init__.py,sha256=jRFxvV_DIZ-NdENa-703Xu3YpwvlQj6yv-mQ6FgmldM,3220
21
21
  claude_mpm/agents/agent-template.yaml,sha256=mRlz5Yd0SmknTeoJWgFkZXzEF5T7OmGBJGs2-KPT93k,1969
@@ -35,7 +35,7 @@ claude_mpm/agents/templates/clerk-ops.json,sha256=2rMKsYJ8YE2U0bE9U8rExgaEc2g5LY
35
35
  claude_mpm/agents/templates/code_analyzer.json,sha256=ZxjJxtioSwfv8ELme4eUqazoJTsORVOLad_0_bQqZb8,7411
36
36
  claude_mpm/agents/templates/data_engineer.json,sha256=_-vxcAcmC_4lswyngDn9oNefvR6VxtOT1fDeAqJLlEw,19514
37
37
  claude_mpm/agents/templates/documentation.json,sha256=j7_7vcZq8d06BNXFkTpy2N3RYjCu5zNYE1xf_WYBMzo,6389
38
- claude_mpm/agents/templates/engineer.json,sha256=todmZpqjX5thk9RrR_KeUATnV1h40RvbmpRF2iULYZQ,7824
38
+ claude_mpm/agents/templates/engineer.json,sha256=tAWKqt35OyL0RUQgTSeX9nVtcjF94ND-WbflXStAXHA,8222
39
39
  claude_mpm/agents/templates/gcp_ops_agent.json,sha256=v2exIGCzPLBDu5M4CCxZ1k3EQfrV0jc6T9C2ecPjScY,10812
40
40
  claude_mpm/agents/templates/imagemagick.json,sha256=6Zy4W_q6BYkJxd_KqDT2B3GBkwhn7VKT9ZVj-O_tj0Q,17747
41
41
  claude_mpm/agents/templates/memory_manager.json,sha256=b6bTMLFShY4-884pgjc6wsfLICcVx17ZrRj7y-NH61w,12613
@@ -62,7 +62,7 @@ claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md,s
62
62
  claude_mpm/cli/__init__.py,sha256=U_ZoiMocO4sOT1aBF2CH1OiB5-88PFKIUfnUPDaM0_c,18615
63
63
  claude_mpm/cli/__main__.py,sha256=WnVGBwe10InxuZjJRFdwuMF6Gh16aXox6zFgxr0sRXk,847
64
64
  claude_mpm/cli/parser.py,sha256=Vqx9n-6Xo1uNhXR4rThmgWpZXTr0nOtkgDf3oMS9b0g,5855
65
- claude_mpm/cli/startup_logging.py,sha256=2bQMC_qtMDJRQk8-MAJG0myVGT3zZtUrkAWcbU0gFNQ,24116
65
+ claude_mpm/cli/startup_logging.py,sha256=7ePi-XGywM2ZqCYiNx_yGRDH3MFxoRFwAe1t9R_deXE,29235
66
66
  claude_mpm/cli/ticket_cli.py,sha256=Cco0riIeo-PuzBslX3-5LAtLUcsLvexSRtVlheb7-cQ,916
67
67
  claude_mpm/cli/utils.py,sha256=T0jLFCeMQoq3PF4nNxNdflgoOHlceIdqawE1c_D9-E0,7033
68
68
  claude_mpm/cli/commands/__init__.py,sha256=1EJpBPxZMYQlMUbguqC6QCET8tv6yqY-_FOg814Xxp0,1226
@@ -80,7 +80,7 @@ claude_mpm/cli/commands/dashboard.py,sha256=0f8_JaXo854kZgcqzZ3cm3VG8muhSsV7JqIz
80
80
  claude_mpm/cli/commands/debug.py,sha256=qEfmBG9slmOY6a8snoytM1OWCdWwBALzN1lqV7ElIBU,47130
81
81
  claude_mpm/cli/commands/doctor.py,sha256=bOZzDNxEMNMZYrJnu_V82tyZ12r5FiBRQNLVfSVvRIQ,5774
82
82
  claude_mpm/cli/commands/info.py,sha256=uiZ2GMkfr-4aeme2l6QhzxyawuhtuyVulfCi66yyvOs,7404
83
- claude_mpm/cli/commands/mcp.py,sha256=zFfC6LYU8C6TP38ofxko8_0sB7-1uxLuHT9XqLxZ4VY,7130
83
+ claude_mpm/cli/commands/mcp.py,sha256=kgmJVTAi0G7SAnIpYHddU25HqAdIY9mMmTH-C3DSCsY,7221
84
84
  claude_mpm/cli/commands/mcp_command_router.py,sha256=8rTMZLxU3R3Izit9ia1Z_pIOq3bn2QjMPH4uvf1X9XY,6001
85
85
  claude_mpm/cli/commands/mcp_config.py,sha256=I-MQEJdL93Rj9lIkz-T4rZqxdy-ls1J7cfXIIKS3tys,4814
86
86
  claude_mpm/cli/commands/mcp_config_commands.py,sha256=TnTg7-erE5Z6O8C84o4lZITco72Wnu0FVlVF8tNVsP0,695
@@ -88,18 +88,18 @@ claude_mpm/cli/commands/mcp_external_commands.py,sha256=NKkGRThwo57ynUqfeU3gXNg9
88
88
  claude_mpm/cli/commands/mcp_install_commands.py,sha256=cZyUSh7O6Q5wJ8_ZS3eVTabq9eREJUWlVbsRemz9QQA,12826
89
89
  claude_mpm/cli/commands/mcp_pipx_config.py,sha256=sE62VD6Q1CcO2k1nlbIhHMfAJFQTZfIzCss99LmfNqA,6088
90
90
  claude_mpm/cli/commands/mcp_server_commands.py,sha256=-1G_2Y5ScTvzDd-kY8fTAao2H6FH7DnsLimleF1rVqQ,6197
91
- claude_mpm/cli/commands/mcp_setup_external.py,sha256=T6FRM6HW33LO88LIFGBIlJvYLjpRJ5_rjDyJcrbdZBQ,33633
91
+ claude_mpm/cli/commands/mcp_setup_external.py,sha256=grA8_mTPtxgkGCpipK6lFbLhxTBQyOunNgPa_xM5l0o,33623
92
92
  claude_mpm/cli/commands/mcp_tool_commands.py,sha256=q17GzlFT3JiLTrDqwPO2tz1-fKmPO5QU449syTnKTz4,1283
93
93
  claude_mpm/cli/commands/memory.py,sha256=Yzfs3_oiKciv3sfOoDm2lJL4M9idG7ARV3-sNw1ge_g,26186
94
94
  claude_mpm/cli/commands/monitor.py,sha256=S7kb2TnTmvX_T6iw5E1S5jlYNhbbBVFLCTlX5MGSLP8,9583
95
95
  claude_mpm/cli/commands/mpm_init.py,sha256=lO7N91ZHn_n18XbchUUcYoyme7L5NLcXVnhWm5F_Gq8,22367
96
96
  claude_mpm/cli/commands/mpm_init_handler.py,sha256=sRa-r8BZJSPigodshgpOKC5l3vfrcxqr5VX2iQ6hQ-g,2936
97
- claude_mpm/cli/commands/run.py,sha256=Wfq7N5ILaySZdZWUPd-irvCYEQQ1pFAnM49UGrRBoiI,47934
97
+ claude_mpm/cli/commands/run.py,sha256=_MpX-Eh4OVaUuS_cX8UZFGPbtMwZq0kFfstI6V4VA3A,48213
98
98
  claude_mpm/cli/commands/search.py,sha256=_0qbUnop8v758MHsB0fAop8FVxwygD59tec_-iN7pLE,9806
99
99
  claude_mpm/cli/commands/tickets.py,sha256=kl2dklTBnG3Y4jUUJ_PcEVsTx4CtVJfkGWboWBx_mQM,21234
100
100
  claude_mpm/cli/commands/uninstall.py,sha256=KGlVG6veEs1efLVjrZ3wSty7e1zVR9wpt-VXQA1RzWw,5945
101
101
  claude_mpm/cli/interactive/__init__.py,sha256=vQqUCgPFvLYA1Vkq-5pnY7Ow3A-IgdM0SByfNL1ZLTk,433
102
- claude_mpm/cli/interactive/agent_wizard.py,sha256=BctHRgZXqrgAC0-03s7Jzz5aNBiWErfiekO1kW9fMtA,36236
102
+ claude_mpm/cli/interactive/agent_wizard.py,sha256=PMSG6F3Jngb0Gm4nBA6X2PK9Iuuj-AuJd35-g4iE4tE,36202
103
103
  claude_mpm/cli/parsers/__init__.py,sha256=f0Fm1DDXorlVOZPLxUpjC-GIvLh01G-FZOK7TEV1L3I,1005
104
104
  claude_mpm/cli/parsers/agent_manager_parser.py,sha256=TQEIm638ELM4X_AAGcn6WrJxlti9wFLfEkHjr-6AtZA,13761
105
105
  claude_mpm/cli/parsers/agents_parser.py,sha256=R-9ESNXdjqr5iCEIcmbb2EPvcswW9UfJzMj5bAkgI4U,9042
@@ -142,9 +142,9 @@ claude_mpm/config/paths.py,sha256=Dl35_QF0kfC2I6Fy7ETcNjz7jlumNGt45qlRKqsPJrk,76
142
142
  claude_mpm/config/socketio_config.py,sha256=Kv5vxQ-UAKAFsa_FukkrujnBzFAwOi2KbEa3mFX3UXQ,11343
143
143
  claude_mpm/core/__init__.py,sha256=QhEX_NpiCprUp87bV75FnMapblMeqC5soNVJXVvZObc,887
144
144
  claude_mpm/core/agent_name_normalizer.py,sha256=_h92sTPltmvqevCjdKQ7EsOz-CAm1-hd8GOubWjuRgw,8907
145
- claude_mpm/core/agent_registry.py,sha256=h0GGbHNKO2l-mZZOIc31Ch8mpGCbwuZUeDz2Ob4h8Ac,19086
145
+ claude_mpm/core/agent_registry.py,sha256=8xHORhoArccLLbEL5nY0sLi8a_dYSNHR3CHh7-olrvc,18820
146
146
  claude_mpm/core/agent_session_manager.py,sha256=5vnrNUSGSSQOuhoq7OlhFvEnw0mKsmLeEB0_vXTI9BQ,11137
147
- claude_mpm/core/api_validator.py,sha256=2SaqMDxwsWqUscufO3fsqv7ZV0FCBPv8K0pMUeK9uSA,12348
147
+ claude_mpm/core/api_validator.py,sha256=4Hn1vJ8YnIgsvC0x75kMYG69OmbOOzYIzqahl_5Wtgo,12331
148
148
  claude_mpm/core/base_service.py,sha256=rbO4gpSOvnbfTVOCQ1uyDh9fNpnhfxARrpyAisedqXY,29300
149
149
  claude_mpm/core/cache.py,sha256=A90QpJi8eDyCB7mwDUq-E9lKj4qz9Sh7XsYVTel8NTU,17224
150
150
  claude_mpm/core/claude_runner.py,sha256=e6ob7FwcBzvhw9gnPvmL8Zw_BasdfzuV8b1dvqtvGKk,34787
@@ -162,16 +162,16 @@ claude_mpm/core/hook_manager.py,sha256=Cq3vwYW7-ffKw_HSFqtv1RJTxs8YUpD_qeTiWvua3
162
162
  claude_mpm/core/hook_performance_config.py,sha256=e7a7oFctkRhA3aPXMO5Wavr-E6ku7ikLxMzPU7P1-yg,5779
163
163
  claude_mpm/core/injectable_service.py,sha256=6MUqTVTBBw6legToIVj1C_BzdERO0zKYEPnFPVZJJfE,7398
164
164
  claude_mpm/core/instruction_reinforcement_hook.py,sha256=s9KGkdJO8E9ip3MB5PlXo52-dTocHXqsVy5TcxOK8-A,9487
165
- claude_mpm/core/interactive_session.py,sha256=3r35ynhOsWbFVdd85ruJQCM5P3QfDVqEe_VEBFWSMlE,21990
165
+ claude_mpm/core/interactive_session.py,sha256=OO0Oqv5hXfEtnAUNUc2WKd6BtxbT_p4Kcei-53GKxno,21973
166
166
  claude_mpm/core/interfaces.py,sha256=RNqXxUioEpV4vOaEoUJ38OvKYPMlpSb3V5Sb97l0w3Q,25625
167
167
  claude_mpm/core/lazy.py,sha256=pyCfEqGHyLz18yXTu_uG52-II-9nCaBcpzwwQGBrQro,14808
168
168
  claude_mpm/core/log_manager.py,sha256=_qsCFDHPxHSiC4NAKOAEKOcmSgNSQBimJZ2wEgALPI0,24225
169
169
  claude_mpm/core/logger.py,sha256=DA_vzrppTGpP7ptzYR49L9pU36HtcMG3glB8f_dAX_k,20932
170
- claude_mpm/core/logging_config.py,sha256=fd7f68PQVaiMc7Dirnl9P9PmaD2pCgeyr_XYcCGiES4,14687
170
+ claude_mpm/core/logging_config.py,sha256=tCxM3EpSmjZ7kT7hckQxQZlrxuWVm4g-qu9RHe8hDcw,14588
171
171
  claude_mpm/core/logging_utils.py,sha256=KKFkUW9rSxa28xk6L9EUK0DttBR1MWQk_AS-4fzWfTo,16007
172
172
  claude_mpm/core/minimal_framework_loader.py,sha256=vmDEjL3MjnV7W4WIR-ymaL8QgsGsgxJJ0KdiQqAtudM,3640
173
173
  claude_mpm/core/mixins.py,sha256=vmZ7Nu2ZOnKjbhN07Ixk4noIej9nsJiknrp-Sclfu0A,5344
174
- claude_mpm/core/oneshot_session.py,sha256=hf8ySWOZ_DqfABVotHGBQXaJyYTzN-rXayAezKMJ0lM,17710
174
+ claude_mpm/core/oneshot_session.py,sha256=QkSw-gs7tTQkdKQiZh7mbia5hc5PMt_xaMoDY-9_bZk,17693
175
175
  claude_mpm/core/optimized_agent_loader.py,sha256=7TIwIF4fhGEEc60pbiI3FlhgZCmEXkWJjqzhJJxXS1o,15854
176
176
  claude_mpm/core/optimized_startup.py,sha256=bvCLSmUstzObl5XxA252EWXzcmwFSYvKHazKgttMhmo,15478
177
177
  claude_mpm/core/output_style_manager.py,sha256=bOX-Mg-XtByfOCvAdShxEYkU7cE77tBY6sOLA8N0BVQ,20746
@@ -367,14 +367,14 @@ claude_mpm/hooks/claude_hooks/memory_integration.py,sha256=9PogijgklM7iSNRTK2Sdz
367
367
  claude_mpm/hooks/claude_hooks/response_tracking.py,sha256=eMixPs2fOAqLn9WysTPgfIwwjwzZTdnAn0jpDjlOS6U,15024
368
368
  claude_mpm/hooks/claude_hooks/tool_analysis.py,sha256=t4CFrLldjD-akBY52su6Cl0cBmZCKRZbGbIE-Yg2Hhk,7896
369
369
  claude_mpm/hooks/claude_hooks/services/__init__.py,sha256=OIYOKsUNw1BHYawOCp-KFK5kmQKuj92cCqCEPO0nwo0,585
370
- claude_mpm/hooks/claude_hooks/services/connection_manager.py,sha256=55IRHZTALXJwliGm0wgfnjfEY4eBZZqVKQAk-SZUJwA,8233
370
+ claude_mpm/hooks/claude_hooks/services/connection_manager.py,sha256=6GSZ6lB0j6u7jE-w9ay-57YX-VVBFGfK_wmZNNM6hxE,8280
371
371
  claude_mpm/hooks/claude_hooks/services/connection_manager_http.py,sha256=sEIWyV-3pfS6VM6_jQgnrKiepD-6DLrk5rr_KU80kHo,8832
372
372
  claude_mpm/hooks/claude_hooks/services/duplicate_detector.py,sha256=Fh9LmEMsVmQM9t0U1v2l_fuBwvNpVkl_0EF8Wu5KLHQ,3882
373
373
  claude_mpm/hooks/claude_hooks/services/state_manager.py,sha256=l50dVFt6eafeLCjlu6TH3qqt8tTBEof971U1OlrUxZ8,11166
374
374
  claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=f7a_vgo_kuG9MalDTka2UPXwDyCkqNgCvG8i1hp0oRo,15263
375
375
  claude_mpm/models/__init__.py,sha256=GADyLAiF-1VVghYKI7Urz3zSnf2sjJUXlOEMuCOs7_g,468
376
376
  claude_mpm/models/agent_definition.py,sha256=LC7EwihixF2Gw4QqOxiCNchsEzzyQJPR6AgPrcTrWTM,6674
377
- claude_mpm/models/agent_session.py,sha256=7aHHGCCdZkh_MZcvLFfrvXXaKpU9p4ndFpWaeZnHe0k,20044
377
+ claude_mpm/models/agent_session.py,sha256=BEI9RsCnnSVMF3oOzWKY3a_NEmWI33J2nU_2O-WEyJQ,20027
378
378
  claude_mpm/schemas/__init__.py,sha256=2SLpkojJq34KnwPkVxrsVmw_cEI66872i75QBT1C2To,446
379
379
  claude_mpm/scripts/__init__.py,sha256=IffMdVD99Pxyw85yluRa0VDPi4dRQecIWce764pcfZE,553
380
380
  claude_mpm/scripts/claude-hook-handler.sh,sha256=xe6dKubrjK1JDO0SJdc1-tA6C7YSb5YazhwKhOYBQvw,7905
@@ -397,11 +397,11 @@ claude_mpm/services/hook_service.py,sha256=rZnMn_4qxX5g9KAn0IQdoG50WmySNfsTmfG0X
397
397
  claude_mpm/services/mcp_config_manager.py,sha256=IdcoIYdblk_NbpwcPcKS8RnrJMitfzhtZbTyYEE0kLM,16277
398
398
  claude_mpm/services/memory_hook_service.py,sha256=pRlTClkRcw30Jhwbha4BC8IMdzKZxF8aWqf52JlntgY,11600
399
399
  claude_mpm/services/monitor_build_service.py,sha256=8gWR9CaqgXdG6-OjOFXGpk28GCcJTlHhojkUYnMCebI,12160
400
- claude_mpm/services/port_manager.py,sha256=fP-fv0eGFYTFuAnqUSrVvrWeGyLE1uZFqQaXv4wtfG4,22872
400
+ claude_mpm/services/port_manager.py,sha256=CYqLh8Ss_-aoYEXV3G6uZkGexpsRK_XTBL0bV4P3tSI,22838
401
401
  claude_mpm/services/recovery_manager.py,sha256=ptUYsguF6oKWnJnzPRSBuzUFVDXIcvsS3svT6MBTqCQ,25686
402
402
  claude_mpm/services/response_tracker.py,sha256=FxD3QKRxjXFPTv7TJIdb78cRxCuGQ45fyVozaR1r4V4,9185
403
403
  claude_mpm/services/runner_configuration_service.py,sha256=Qs84yrZfQv-DC0I2Xah1Qt9eunH4gS7LNMZ0mmymcqA,21311
404
- claude_mpm/services/session_management_service.py,sha256=Ixc_mD400YuDyuUl6r0yrdnmrwVU_zrtPi4GYAurTmc,10071
404
+ claude_mpm/services/session_management_service.py,sha256=DdFeL_oPO-FGKyTjaDkAnyzZAFckmdT54U5z2QC4bn8,10061
405
405
  claude_mpm/services/socketio_client_manager.py,sha256=cZjIsnoi2VPXFA-5pNhoz5Vv3qv0iuSTy510TgAJU4U,18179
406
406
  claude_mpm/services/socketio_server.py,sha256=yE14_4pHERXBC5L1WQCpIBHuy0tpklsUY_icyl-nLkg,3033
407
407
  claude_mpm/services/subprocess_launcher_service.py,sha256=b8FeO0kh6AblWqnFX4XtSxEw93tENCczVvK0OjbYvpk,10999
@@ -419,10 +419,10 @@ claude_mpm/services/agents/deployment/agent_definition_factory.py,sha256=DaJ__b3
419
419
  claude_mpm/services/agents/deployment/agent_deployment.py,sha256=6ntX6T66otpxR7zeKZDGnIzn1uB1Hb_zUxFq6Av3hSg,36423
420
420
  claude_mpm/services/agents/deployment/agent_discovery_service.py,sha256=-Iw_gIA6yTdt2eHGDLVJtz9wIQiSUH20WXTapqxd8_Q,18551
421
421
  claude_mpm/services/agents/deployment/agent_environment_manager.py,sha256=kjMiLyZYHs-s9pVdtj4av4hJW0gNXnD7lZz2CJpxmZI,9863
422
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py,sha256=8IDjjXS17ybyI5vp9BvshNf6TMIfDhZYa2HirgCa0Gs,13003
422
+ claude_mpm/services/agents/deployment/agent_filesystem_manager.py,sha256=F58zMgJYISbi8eqcVlEq6Nd5Q4oLg4Zj4wll4gwRL64,12965
423
423
  claude_mpm/services/agents/deployment/agent_format_converter.py,sha256=e27pSOmikIjhvuLIder3ULCtaZpEP9a_01xDHspSCjA,17047
424
424
  claude_mpm/services/agents/deployment/agent_frontmatter_validator.py,sha256=H0yhsLbjVpwKNTUdGOgXBE-2gypT8-zFHqOBdv2XLPQ,7119
425
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py,sha256=NuB6gro5rne6JIKigxB6ptbrTMIkZxshoO0TX3TzwOQ,37944
425
+ claude_mpm/services/agents/deployment/agent_lifecycle_manager.py,sha256=5MC8A3JKuEyGhX6nIoxUwka_Dn_cPXsZMoLc-xxcKUo,37944
426
426
  claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py,sha256=mQWgVPFWsttnUS5XeTCQKnYg3lwhyMQV7BroAigp2OE,21008
427
427
  claude_mpm/services/agents/deployment/agent_metrics_collector.py,sha256=n16MPMA0RcbFyr_5BAfigtWvlqw5dj4qrI6_jN_Xn8A,10041
428
428
  claude_mpm/services/agents/deployment/agent_operation_service.py,sha256=64t_pzzeij6r5D5BxTnhb9GL6fyLw0GOPwR9qU5zOLE,20412
@@ -500,27 +500,27 @@ claude_mpm/services/agents/memory/memory_file_service.py,sha256=uQ7Ou39UsFabHCNY
500
500
  claude_mpm/services/agents/memory/memory_format_service.py,sha256=TCHJ-UFh6UUj1T-wuYciEmatKT5bCO8FEJGDIJHyzpk,6137
501
501
  claude_mpm/services/agents/memory/memory_limits_service.py,sha256=6nkCXOE3_3aPla7n8GwWBVJTxZI7w0aA596E9J-a48c,3310
502
502
  claude_mpm/services/agents/memory/template_generator.py,sha256=oJuryic9ZhEWb-JLHtNNo4RkHi5SEh9G_IQixqMx1YI,2581
503
- claude_mpm/services/agents/registry/__init__.py,sha256=eI7hDul-gf00hQKxXefFVzmpTPChYqAv0QJI6m09Yy4,727
503
+ claude_mpm/services/agents/registry/__init__.py,sha256=ROBX82Ac4iLHEE7-aFUy7mT3NSz5eIub19ck5Q81NHQ,681
504
504
  claude_mpm/services/agents/registry/deployed_agent_discovery.py,sha256=aaqu50tjonWURgBWFXUKZvWw9qJYLQgUtCux9xCL1rE,10213
505
505
  claude_mpm/services/agents/registry/modification_tracker.py,sha256=qKiDdH9gidvyhkAU2pbAnN3sO4VO4fjI9VBtLanf9xY,33936
506
506
  claude_mpm/services/cli/__init__.py,sha256=6yavdruQywt9k39RBOrPxUTz6dEEJ6mHzjY4pl_Q3Do,559
507
507
  claude_mpm/services/cli/agent_cleanup_service.py,sha256=7wzbnoASqyEpeUgFMQZkzT8fCF7se23wPJ5feYbFD0E,14288
508
508
  claude_mpm/services/cli/agent_dependency_service.py,sha256=mu6RJIjEe_NrMzil3Wm6CvhQUIZ4pYn8tYpyXDBu2NI,13701
509
- claude_mpm/services/cli/agent_listing_service.py,sha256=ptn08D0h4Wlyupsv1VIlE6_J3YlWfSRMHH_cz0-MCuc,15974
509
+ claude_mpm/services/cli/agent_listing_service.py,sha256=8lzK7HKF7SsdlwA3DkhtsL6cFlHvbEwFxSkp2V5rYHc,15957
510
510
  claude_mpm/services/cli/agent_output_formatter.py,sha256=FcJ18m3CyeFr_wotJfEmIURHeZ71eomqO_vK7wsPWsM,20521
511
- claude_mpm/services/cli/agent_validation_service.py,sha256=7a5XXoFYfbPeFbvwGVg_Kn-x0dEGR_1Ru7zeG7fNTr0,21738
511
+ claude_mpm/services/cli/agent_validation_service.py,sha256=g1mFZoITKGESWRYAvpbDXI8CFw68HP6Hsare86RiwvM,21739
512
512
  claude_mpm/services/cli/memory_crud_service.py,sha256=FLNJb0fo6H_bEboXayc2AoT9w2IoP1_cegZQ6s4SOas,22864
513
513
  claude_mpm/services/cli/memory_output_formatter.py,sha256=3k3lT1xeTL38aIRufQli-6QzBu4_4IMcDnmuyUjuRVE,24793
514
514
  claude_mpm/services/cli/session_manager.py,sha256=TrXWLb57AP8pwZAJ55dpVLNG0Y85WijahdRTAHIdZ9s,16757
515
515
  claude_mpm/services/cli/startup_checker.py,sha256=efhuvu8ns5G16jcQ0nQZKVddmD2AktUEdlvjNcXjAuk,12232
516
- claude_mpm/services/cli/unified_dashboard_manager.py,sha256=qnWcpZfm2iT84bp0o9Brr8ekAe5KBTYnqqnDhL0xGxc,15450
516
+ claude_mpm/services/cli/unified_dashboard_manager.py,sha256=XOXC7mlfmqwKrNDDbxu3q8qPn0oAUvPkQY7e_SwTTIA,15433
517
517
  claude_mpm/services/communication/__init__.py,sha256=b4qc7_Rqy4DE9q7BAUlfUZjoYG4uimAyUnE0irPcXyU,560
518
518
  claude_mpm/services/core/__init__.py,sha256=evEayLlBqJvxMZhrhuK6aagXmNrKGSj8Jm9OOxKzqvU,2195
519
519
  claude_mpm/services/core/base.py,sha256=iA-F7DgGp-FJIMvQTiHQ68RkG_k-AtUWlArJPMw6ZPk,7297
520
520
  claude_mpm/services/core/cache_manager.py,sha256=dBHvvI6M67kaxFtAubi4IsWfbDZSct1siyKHTmCIrW8,11567
521
521
  claude_mpm/services/core/interfaces.py,sha256=FbLhWiOUMlvBfqjYBCeoWgsmRscQGBKteRMW-BGz4hQ,1261
522
522
  claude_mpm/services/core/memory_manager.py,sha256=2m-BYrNwh1yFjvz1VGB_Ndl_dtSp1xhpBcATaBiJQu0,26642
523
- claude_mpm/services/core/path_resolver.py,sha256=PDTile9bXrhwSwHRyG_9Ee_9FuSzEnScA4a2fs1emyE,17704
523
+ claude_mpm/services/core/path_resolver.py,sha256=CMJQ7MAimLf2uMHtLaz6QmoDIDGrdhHYpRbhhI0jov0,17675
524
524
  claude_mpm/services/core/service_container.py,sha256=3hDwFUahxFZnokPzwgXqBP9swvZhLztKQqwe9xEHgsw,18497
525
525
  claude_mpm/services/core/service_interfaces.py,sha256=dlNp0K4gaMcLiNSZxXjsL-kto6vipYw87pBuFK7oVNo,10770
526
526
  claude_mpm/services/core/interfaces/__init__.py,sha256=1oFXxW9U8rQNQGzWd9kI_FJeo4uU17-24wC63-KswWE,6398
@@ -612,7 +612,7 @@ claude_mpm/services/mcp_gateway/registry/tool_registry.py,sha256=174SRGMmRlbxAAP
612
612
  claude_mpm/services/mcp_gateway/server/__init__.py,sha256=4OsKf4Eit4O8geWs-UNjVYqQ6GRwEh6frWnFXpK1ooI,294
613
613
  claude_mpm/services/mcp_gateway/server/mcp_gateway.py,sha256=fIwGCTRwzQh5YRoBptBFL-em2ZcgXiCuhrbFUWLsOdQ,13573
614
614
  claude_mpm/services/mcp_gateway/server/stdio_handler.py,sha256=6A7bg0TPr740Y9AD10ZeFvMQtKHockJrXUG47lmT_HI,11444
615
- claude_mpm/services/mcp_gateway/server/stdio_server.py,sha256=iAFP03klZ_B5Jq9qDaZykoGo1FOLZCyrPHJQGfpH-Bo,26382
615
+ claude_mpm/services/mcp_gateway/server/stdio_server.py,sha256=zBPgUOCsX6zIQtvj_LVm4awcR3NQan77JW-owfZdglo,26348
616
616
  claude_mpm/services/mcp_gateway/tools/__init__.py,sha256=7_0IpRe7RKJTajajiUCqXxh71gj_P5gSCOMmAjKwVts,530
617
617
  claude_mpm/services/mcp_gateway/tools/base_adapter.py,sha256=na1MdyBCtVmKzgIcFJ5MuAUJ1LJrtA4yxkuqLnejiD8,16029
618
618
  claude_mpm/services/mcp_gateway/tools/document_summarizer.py,sha256=J0YNEu4GPxWm2nTMxD7CwWl-2k1UJk3tWCI2timGWbU,28230
@@ -620,7 +620,7 @@ claude_mpm/services/mcp_gateway/tools/external_mcp_services.py,sha256=QWDg_SGzPy
620
620
  claude_mpm/services/mcp_gateway/tools/health_check_tool.py,sha256=P9fjHO63_yG58z4OB36OuBTakYgzLgfhjhbCcX0t-mU,16456
621
621
  claude_mpm/services/mcp_gateway/tools/hello_world.py,sha256=NFtcz_lPu_55YQjugvYkFA5W7Fv_7iwxuWWS_uFlVzE,20308
622
622
  claude_mpm/services/mcp_gateway/tools/ticket_tools.py,sha256=C1sa4NnD_UMltquexmLDw5JrQZbhjacqyrXdnJqGWSQ,23351
623
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py,sha256=Fv_BJvbQX7XnxjqThUqMb-iX2uKsbmkWZ9MWn4Fslzg,22513
623
+ claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py,sha256=uUcfN5jjdhP0XpFV5PyMHaaSnVPuTJ0W2MKC4oNijiU,22496
624
624
  claude_mpm/services/memory/__init__.py,sha256=vOZrdDfYdgjV5jhUyqGiICoywAwUNGcE_d7z1XfKTyE,472
625
625
  claude_mpm/services/memory/builder.py,sha256=GyqyJAiOYuYZ2rULKunNf2Rf4C1slAKkUnELBy8pZV0,34365
626
626
  claude_mpm/services/memory/indexed_memory.py,sha256=aK5Fo1_P87kHVex7H2FE3mLquZsw1OKdtreIigymWJ0,19538
@@ -637,11 +637,11 @@ claude_mpm/services/monitor/server.py,sha256=xO1zpuz7slFeTBQsyhjLc6_RaDCJU7ODskY
637
637
  claude_mpm/services/monitor/handlers/__init__.py,sha256=jgPIf4IJVERm_tAeD9834tfx9IcxtlHj5r9rhEWpkfM,701
638
638
  claude_mpm/services/monitor/handlers/code_analysis.py,sha256=3na63aagO8DN3Z2e9c_VpStkd3-NTpA4c58b9G_Bv-Y,11404
639
639
  claude_mpm/services/monitor/handlers/dashboard.py,sha256=uGBhb-6RG6u4WLipUXgdx7RCW-vb_qek5dIfHIwAC7o,9805
640
- claude_mpm/services/monitor/handlers/file.py,sha256=tIrE11QqkhBBatqzcYvodiGyaHE30vbT_rciVcFmsWA,9746
640
+ claude_mpm/services/monitor/handlers/file.py,sha256=p3C4wffl0GIcN00b-KkrmZ8F-AmdZlGqLzBqQcqZ9Ns,9729
641
641
  claude_mpm/services/monitor/handlers/hooks.py,sha256=XS0h7FjdOMmrwJyaVE4Ku5HU3nzG12Xf7v-cEwrMe-I,17520
642
642
  claude_mpm/services/monitor/management/__init__.py,sha256=mxaEFRgvvgV85gUpXu_DsnHtywihdP14EisvISAVZuQ,525
643
643
  claude_mpm/services/monitor/management/health.py,sha256=Wm92Cli_4cWD6B89KX_CdpAvvevuEaGB8Ah59ILhFww,3772
644
- claude_mpm/services/monitor/management/lifecycle.py,sha256=YGPnE09ABQuftb-m4_9ZNUMn7BgIv3rx_rzAsn_p3Oc,27357
644
+ claude_mpm/services/monitor/management/lifecycle.py,sha256=WVs231EOEkMOx2ofWDdE8GdWazFS8NZ6xwi185szapI,27340
645
645
  claude_mpm/services/project/__init__.py,sha256=IUclN1L7ChHCNya7PJiVxu4nttxsrj3WRIpwyA1A_hw,512
646
646
  claude_mpm/services/project/analyzer.py,sha256=VHlLrP8-S5gr12w4Yzs7-6d7LWdJKISHPCFSG7SDiQU,38434
647
647
  claude_mpm/services/project/analyzer_refactored.py,sha256=USYEdPAhSoGPqZCpaT89Dw6ElFW_L1yXSURheQjAhLA,18243
@@ -660,7 +660,7 @@ claude_mpm/services/shared/service_factory.py,sha256=blNkIowhIxykrn-a1qsD8Rtkjlk
660
660
  claude_mpm/services/socketio/__init__.py,sha256=PS-2twllga-2mhSfKdu4MgpikfKp_730gMLAqU_9YX4,556
661
661
  claude_mpm/services/socketio/client_proxy.py,sha256=DFPO5OIl-cHusldHPYWKSbnL0dxSLz8h07D9307FfzY,8853
662
662
  claude_mpm/services/socketio/dashboard_server.py,sha256=WahdOUMRX75uVAcfpbLPIyrl496baiv3l7_TjnAJY_g,13749
663
- claude_mpm/services/socketio/event_normalizer.py,sha256=pfapjy_0ZH3x2Yp57fgYPMJ9a2E2yLw5slZmwReY5zY,28601
663
+ claude_mpm/services/socketio/event_normalizer.py,sha256=D_xTE2kTg8k5K34csfbJOVw2VqZn-j9nlwsCiTthI8o,28584
664
664
  claude_mpm/services/socketio/migration_utils.py,sha256=07hz1hi5SQdwN05-Tc_LHnmNjK35-o_GQxOx9d9V2tU,11980
665
665
  claude_mpm/services/socketio/monitor_client.py,sha256=Ufla-Un6cOA0Owa2_1P5FJ8RxHWqKMvwQkL1jRN0dVI,12763
666
666
  claude_mpm/services/socketio/handlers/__init__.py,sha256=lGYFfn5P1eB6ri3HAPuDJMfdCfHIw6mQEbweAihNuHY,873
@@ -668,8 +668,8 @@ claude_mpm/services/socketio/handlers/base.py,sha256=jDcnbuXdiOUv8E4KHUTOcnET9lQ
668
668
  claude_mpm/services/socketio/handlers/code_analysis.py,sha256=BmcJiygXaCVjVJndE-GFi4eN7_b8v7mqScddMTj5DUk,26271
669
669
  claude_mpm/services/socketio/handlers/connection.py,sha256=-qUgeFcj6n6Q_fH6zFykD2Qyif2IVlAj-n6S-ohHg_A,26876
670
670
  claude_mpm/services/socketio/handlers/connection_handler.py,sha256=D8Qfn7FneIIlH0TWMVisB_frCokJVWTzxl8O6IBxjYM,13486
671
- claude_mpm/services/socketio/handlers/file.py,sha256=rmpuvFJI-JuiGSahrdsMvTq-GN5Bhdbg69XbVc0Murg,9883
672
- claude_mpm/services/socketio/handlers/git.py,sha256=dAx4MXFceUq7resl74Rj2PMQdLgg_j9ZOaQ6T5nATgc,37951
671
+ claude_mpm/services/socketio/handlers/file.py,sha256=28ghfPO8-7jZuX723WzW3vDHg6H6iJ3pvfneDA3mf5A,9866
672
+ claude_mpm/services/socketio/handlers/git.py,sha256=xIjGGShyVNXzCtJfydbbnFTJhqzXwHLzGhLrqgy0JGQ,37934
673
673
  claude_mpm/services/socketio/handlers/hook.py,sha256=QqO7ZKeRsHEJ1X3yrxlDoo4qDzzRenLkM_5GVqAHDvU,7904
674
674
  claude_mpm/services/socketio/handlers/memory.py,sha256=Ape6cCMe3uOgMiXRbgQttvgHUABsFXrrxQ9OI-mGM8M,971
675
675
  claude_mpm/services/socketio/handlers/project.py,sha256=yYqWlPfPanA7zH7dgQnP3EpO6fqvvicBFeut5I5K1HI,776
@@ -678,13 +678,13 @@ claude_mpm/services/socketio/server/__init__.py,sha256=S486w-i-hBo3rNW_AtzxbasEg
678
678
  claude_mpm/services/socketio/server/broadcaster.py,sha256=KufM0ziJl8524bDr_j9oedtfAESgfRAavVF2wJyKQTo,21475
679
679
  claude_mpm/services/socketio/server/connection_manager.py,sha256=3-Q2v3iAzsHX7ke9_cQVvwlPa3dDQTWtklW_Qicn_aY,21256
680
680
  claude_mpm/services/socketio/server/core.py,sha256=JKq3XrqjYZE7fHe-riVuh-0iIyDDeRQpwmc2ZpHnvb0,32791
681
- claude_mpm/services/socketio/server/eventbus_integration.py,sha256=IQwzwPg477oLxH0Gu7owWS_HvaM3knoes6Oj04s0gz4,8056
681
+ claude_mpm/services/socketio/server/eventbus_integration.py,sha256=BEJQ0g2lPOVzV5d7FuHbI30r6wxulbu0Ce4cQbCmDFc,8018
682
682
  claude_mpm/services/socketio/server/main.py,sha256=dqNc0FGVWoObQf_9lpOlLSZsfpLGWnwSoiIpWrrVE3M,19687
683
683
  claude_mpm/services/ticket_services/__init__.py,sha256=I01W25n-tBWwZ0TD-dPA63nqzCU2KnpOvbqeysmaa2E,798
684
684
  claude_mpm/services/ticket_services/crud_service.py,sha256=4Ab1HONY219QSdRaLTgRInm6DNJXIUKiihyAree8y8A,11193
685
685
  claude_mpm/services/ticket_services/formatter_service.py,sha256=MQ981yaFuvXWUDLpHHiasc8BIFdeIeMS7Us0CgZHJ0A,9101
686
686
  claude_mpm/services/ticket_services/search_service.py,sha256=CHDITcE6Dqu_98LOeb55qxr4yNpA7iBYSlnWXMg8KAI,9918
687
- claude_mpm/services/ticket_services/validation_service.py,sha256=fmN-Fx_H42caMCd0OJS0o__PjIWyYGSuk9TLP6vXwzo,8640
687
+ claude_mpm/services/ticket_services/validation_service.py,sha256=5Wo4YHLjQmZ1Ey9sYHyTjmtWqidywcV16B1T4zS_d-c,8623
688
688
  claude_mpm/services/ticket_services/workflow_service.py,sha256=qbFMHaV3PlZ6J-YD2RVUugJ6WLVzAy_xCT0xMSPx1SY,7803
689
689
  claude_mpm/services/version_control/__init__.py,sha256=U3bFV1upF3FgNrQGFld0GZt0vb3Eunm71mscgTg7zD0,1510
690
690
  claude_mpm/services/version_control/branch_strategy.py,sha256=IhRDt4qIspvNyeONPJJfVKjtbKVVPTGHjGVgGApxj_Q,23190
@@ -693,28 +693,28 @@ claude_mpm/services/version_control/git_operations.py,sha256=BU3krxip2e6dGG-5Bn_
693
693
  claude_mpm/services/version_control/semantic_versioning.py,sha256=H4XxrA_O-1-8h2TxZ8W9iKFukatcUykSCRbAnR9jLcE,32669
694
694
  claude_mpm/services/version_control/version_parser.py,sha256=6ibCLS9iIkEf5bd1h_caHhINQtNMrP1SDJ_pg9zr9kM,19723
695
695
  claude_mpm/services/visualization/__init__.py,sha256=cTtWxRi07rSLXQKVZa7SKZsYfj6nRouw7HVO85Towfg,401
696
- claude_mpm/services/visualization/mermaid_generator.py,sha256=6N-gg2pb94xLyL0JT26SzKk5f1s8TKg0Q13aQcbJ1UY,34294
696
+ claude_mpm/services/visualization/mermaid_generator.py,sha256=6QGgXtMg_N9rKeRn8wYs3IxuWGKdDVAwFMFWKfIw9s4,34277
697
697
  claude_mpm/storage/__init__.py,sha256=DXnmee6iGqC6ctFLW7_Ty1cVCjYDFuCMkwO4EV0i25k,274
698
698
  claude_mpm/storage/state_storage.py,sha256=_RcHrMDXG6a3rA6itLMTWYUnWGPCiRVHAR_8UPqICiA,16875
699
699
  claude_mpm/tools/__init__.py,sha256=T3GuCYNAHtjVcKCeivY674PaDm48WX96AriQfTKUknY,347
700
700
  claude_mpm/tools/__main__.py,sha256=MKDuxFuujqD5FZcLTqniDNQ2BI8yg5fDSLU3ElV6m6U,5709
701
- claude_mpm/tools/code_tree_analyzer.py,sha256=TNrSWs-fmCnxZmhiVhgLHg2ocFa5PadapjqEcb7de0E,64755
701
+ claude_mpm/tools/code_tree_analyzer.py,sha256=pp6btHvuVcQ-v4asc04rmbh4XlyBOhTesm5k9mdJvHc,64711
702
702
  claude_mpm/tools/code_tree_builder.py,sha256=nz8Sj05QAOaWCXLmAjksBGqgZzQkO1P-I8qGbVXGLJM,18145
703
703
  claude_mpm/tools/code_tree_events.py,sha256=10tf9ZGkPIXzWqYvwq0SIJdIOwKNnxgKWYOmRzVGeLc,13396
704
704
  claude_mpm/tools/socketio_debug.py,sha256=mD9PZwcyQJwIndjRh1Lf64RuUTgvrx-Pcmy77Tzbe4Q,22246
705
705
  claude_mpm/utils/__init__.py,sha256=rkxNE0tDfKEN2lr2LLBuToNSvkF-yjF38607eUXL1vk,353
706
- claude_mpm/utils/agent_dependency_loader.py,sha256=0ULUkh9gkL1FssUtoqszyjHfhI6fRKrwhx8LPuLUQSE,32247
706
+ claude_mpm/utils/agent_dependency_loader.py,sha256=FjWpyd7w03K4YOPF0VLy2wCUgMd8CtDhBamV6LODcGM,32213
707
707
  claude_mpm/utils/config_manager.py,sha256=tTnEGrN3H9kF02CzClt_fwlGelwF_mD3HxYb-y5L7wA,15771
708
708
  claude_mpm/utils/console.py,sha256=2Agd91xj5NSMgvfUFJIUwVnpghnKjrd8EYH7inF12M4,279
709
709
  claude_mpm/utils/dependency_cache.py,sha256=2ZHSZbBCpuSCzk745v9UZ2WD7zp3SHkOLBAZydj82i4,11780
710
710
  claude_mpm/utils/dependency_manager.py,sha256=g9iYA_uyZ4XE8cY-VfhKYd1NA3aqr9ZYT3IBTv_abmY,7356
711
711
  claude_mpm/utils/dependency_strategies.py,sha256=4R2IM297C0_OP2MeqUxJRzsEVp2KDqveS2FlkwDeGq0,12148
712
- claude_mpm/utils/environment_context.py,sha256=N-PBDh-lyZS_WGPiq8iDVV3xDebLn9W7MZHbnLk2jEc,10127
712
+ claude_mpm/utils/environment_context.py,sha256=siqWOYkTDYEbitsADANVIVyezYot2L1mBWCuOUOkN40,10110
713
713
  claude_mpm/utils/error_handler.py,sha256=ic3srMa4fubXg0eaWy9PVEI4ALA7dPZKWoOt1xtzeJM,7922
714
714
  claude_mpm/utils/file_utils.py,sha256=xQcJJ1SNcDcZZlNSty65Yy8kYP_M87lWZ8rARCY82Jc,7790
715
715
  claude_mpm/utils/framework_detection.py,sha256=dCY-N0HzuYS9KBg1BjDw8mJnNb22JqmKBoodjTMzd5w,1183
716
716
  claude_mpm/utils/import_migration_example.py,sha256=sKlV-apfkHDJzzez6uubHXjx91YF_5HPuzu2sLs_U0E,989
717
- claude_mpm/utils/imports.py,sha256=c18Z4qzUmtk9PqjjRJ6dLcYvKqBXgthyMelwWyOm1lA,6671
717
+ claude_mpm/utils/imports.py,sha256=IGcW0W6V-2jTmkVlO-l0Zodo3LRA3zkaumD9J2qn7dE,6654
718
718
  claude_mpm/utils/log_cleanup.py,sha256=5_b7hkpBPN6vQT-OpbVplWElHTiFiPpoXT0oxusGjc0,22270
719
719
  claude_mpm/utils/path_operations.py,sha256=BHO-KZtl4DJ4Ms8tHn0Zq1AOBzUAYcZtowzqhqwR2bg,10802
720
720
  claude_mpm/utils/robust_installer.py,sha256=bOss1hZb2sWEfkCmJvylqizllLQEc1NwNkWJ1kQFMkc,22452
@@ -723,9 +723,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=9mC9V6ThLUu48OMaYaSHwXnxG8BeH70kv7ys
723
723
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
724
724
  claude_mpm/validation/agent_validator.py,sha256=p6T0vpJaB-PyVxIA0hlsFs9lsbX7dvMPXG132AIl3AI,20884
725
725
  claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
726
- claude_mpm-4.3.13.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
727
- claude_mpm-4.3.13.dist-info/METADATA,sha256=BiuGhliP49727P9EGfhzJwBHv0LgCvwyBo2MPm38JCg,16150
728
- claude_mpm-4.3.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
729
- claude_mpm-4.3.13.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
730
- claude_mpm-4.3.13.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
731
- claude_mpm-4.3.13.dist-info/RECORD,,
726
+ claude_mpm-4.3.15.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
727
+ claude_mpm-4.3.15.dist-info/METADATA,sha256=VRsFSHnwI2Z5TzCprS45iYup0zFL33N2t-ED2oy_pcM,16150
728
+ claude_mpm-4.3.15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
729
+ claude_mpm-4.3.15.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
730
+ claude_mpm-4.3.15.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
731
+ claude_mpm-4.3.15.dist-info/RECORD,,