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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +28 -4
- claude_mpm/agents/templates/engineer.json +11 -3
- claude_mpm/cli/commands/mcp.py +10 -5
- claude_mpm/cli/commands/mcp_setup_external.py +1 -1
- claude_mpm/cli/commands/run.py +8 -0
- claude_mpm/cli/interactive/agent_wizard.py +2 -2
- claude_mpm/cli/startup_logging.py +155 -0
- claude_mpm/core/agent_registry.py +6 -10
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/interactive_session.py +1 -1
- claude_mpm/core/logging_config.py +2 -4
- claude_mpm/core/oneshot_session.py +1 -1
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -1
- claude_mpm/models/agent_session.py +1 -1
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +1 -3
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -1
- claude_mpm/services/agents/registry/__init__.py +1 -1
- claude_mpm/services/cli/agent_listing_service.py +1 -1
- claude_mpm/services/cli/agent_validation_service.py +1 -0
- claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
- claude_mpm/services/core/path_resolver.py +1 -1
- claude_mpm/services/mcp_gateway/server/stdio_server.py +2 -2
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +1 -1
- claude_mpm/services/monitor/handlers/file.py +1 -1
- claude_mpm/services/monitor/management/lifecycle.py +1 -1
- claude_mpm/services/port_manager.py +2 -2
- claude_mpm/services/session_management_service.py +1 -1
- claude_mpm/services/socketio/event_normalizer.py +1 -1
- claude_mpm/services/socketio/handlers/file.py +1 -1
- claude_mpm/services/socketio/handlers/git.py +1 -1
- claude_mpm/services/socketio/server/eventbus_integration.py +0 -1
- claude_mpm/services/ticket_services/validation_service.py +1 -1
- claude_mpm/services/visualization/mermaid_generator.py +1 -1
- claude_mpm/tools/code_tree_analyzer.py +3 -3
- claude_mpm/utils/agent_dependency_loader.py +2 -2
- claude_mpm/utils/environment_context.py +1 -1
- claude_mpm/utils/imports.py +1 -1
- {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/METADATA +1 -1
- {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/RECORD +44 -44
- {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/WHEEL +0 -0
- {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.3.13.dist-info → claude_mpm-4.3.15.dist-info}/licenses/LICENSE +0 -0
- {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.
|
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
|
-
|
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 →
|
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
|
100
|
-
**User reports bug → PM
|
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.
|
7
|
-
"template_version": "2.
|
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",
|
claude_mpm/cli/commands/mcp.py
CHANGED
@@ -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,
|
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.
|
claude_mpm/cli/commands/run.py
CHANGED
@@ -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]:
|
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]:
|
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
|
-
|
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
|
-
|
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
|
claude_mpm/core/api_validator.py
CHANGED
@@ -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:
|
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:
|
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]]:
|
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(
|
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:
|
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]]:
|
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)
|
@@ -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]:
|
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:
|
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:
|
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]:
|
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]:
|
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]]:
|
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:
|
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]:
|
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
|
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:
|
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:
|
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]:
|
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
|
@@ -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]]:
|
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
|
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:
|
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:
|
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]]:
|
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]:
|
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]:
|
211
|
+
) -> Tuple[bool, str]:
|
212
212
|
"""
|
213
213
|
Determine if we should prompt for dependency installation.
|
214
214
|
|
claude_mpm/utils/imports.py
CHANGED
@@ -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]:
|
18
|
+
) -> Optional[Any]:
|
19
19
|
"""
|
20
20
|
Safely import a module with fallback support.
|
21
21
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
|
2
|
-
claude_mpm/VERSION,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
672
|
-
claude_mpm/services/socketio/handlers/git.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
727
|
-
claude_mpm-4.3.
|
728
|
-
claude_mpm-4.3.
|
729
|
-
claude_mpm-4.3.
|
730
|
-
claude_mpm-4.3.
|
731
|
-
claude_mpm-4.3.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|