claude-mpm 5.0.2__py3-none-any.whl → 5.4.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1218 -905
- claude_mpm/agents/agent_loader.py +10 -17
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/frontmatter_validator.py +68 -0
- claude_mpm/agents/templates/circuit-breakers.md +431 -45
- claude_mpm/cli/__init__.py +0 -1
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_state_manager.py +67 -23
- claude_mpm/cli/commands/agents.py +446 -25
- claude_mpm/cli/commands/auto_configure.py +535 -233
- claude_mpm/cli/commands/configure.py +1500 -147
- claude_mpm/cli/commands/configure_agent_display.py +13 -6
- claude_mpm/cli/commands/mpm_init/core.py +158 -1
- claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +1 -39
- claude_mpm/cli/commands/skills.py +322 -19
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/executor.py +8 -0
- claude_mpm/cli/interactive/agent_wizard.py +302 -195
- claude_mpm/cli/parsers/agents_parser.py +137 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
- claude_mpm/cli/parsers/base_parser.py +9 -0
- claude_mpm/cli/parsers/skills_parser.py +7 -0
- claude_mpm/cli/startup.py +133 -85
- claude_mpm/commands/mpm-agents-auto-configure.md +2 -2
- claude_mpm/commands/mpm-agents-list.md +2 -2
- claude_mpm/commands/mpm-config-view.md +2 -2
- claude_mpm/commands/mpm-help.md +3 -0
- claude_mpm/commands/{mpm-ticket-organize.md → mpm-organize.md} +4 -5
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +2 -2
- claude_mpm/commands/mpm-ticket-view.md +2 -2
- claude_mpm/config/agent_presets.py +312 -82
- claude_mpm/config/agent_sources.py +27 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +2 -25
- claude_mpm/core/framework/loaders/agent_loader.py +8 -5
- claude_mpm/core/framework/loaders/file_loader.py +54 -101
- claude_mpm/core/interactive_session.py +19 -5
- claude_mpm/core/oneshot_session.py +16 -4
- claude_mpm/core/output_style_manager.py +173 -43
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/socketio_pool.py +3 -3
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/unified_agent_registry.py +134 -16
- claude_mpm/core/unified_config.py +22 -0
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +35 -2
- claude_mpm/hooks/claude_hooks/hook_handler.py +4 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -0
- claude_mpm/models/agent_definition.py +7 -0
- claude_mpm/scripts/launch_monitor.py +93 -13
- claude_mpm/services/agents/agent_recommendation_service.py +279 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +3 -2
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +110 -3
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +518 -55
- claude_mpm/services/agents/git_source_manager.py +20 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +45 -6
- claude_mpm/services/agents/toolchain_detector.py +6 -5
- claude_mpm/services/analysis/__init__.py +35 -0
- claude_mpm/services/analysis/clone_detector.py +1030 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/command_deployment_service.py +106 -5
- claude_mpm/services/core/base.py +7 -2
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- claude_mpm/services/event_bus/config.py +3 -1
- claude_mpm/services/git/git_operations_service.py +8 -8
- claude_mpm/services/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/monitor/daemon.py +37 -10
- claude_mpm/services/monitor/daemon_manager.py +134 -21
- claude_mpm/services/monitor/server.py +225 -19
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/runner_configuration_service.py +16 -3
- claude_mpm/services/session_management_service.py +16 -4
- claude_mpm/services/socketio/event_normalizer.py +15 -1
- claude_mpm/services/socketio/server/core.py +160 -21
- claude_mpm/services/version_control/git_operations.py +103 -0
- claude_mpm/utils/agent_filters.py +261 -0
- claude_mpm/utils/gitignore.py +3 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +5 -1
- {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/METADATA +69 -84
- {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/RECORD +112 -153
- {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/entry_points.txt +0 -2
- claude_mpm/dashboard/analysis_runner.py +0 -455
- claude_mpm/dashboard/index.html +0 -13
- claude_mpm/dashboard/open_dashboard.py +0 -66
- claude_mpm/dashboard/static/css/activity.css +0 -1958
- claude_mpm/dashboard/static/css/connection-status.css +0 -370
- claude_mpm/dashboard/static/css/dashboard.css +0 -4701
- claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
- claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
- claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
- claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
- claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
- claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
- claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
- claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
- claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
- claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
- claude_mpm/dashboard/static/js/connection-manager.js +0 -536
- claude_mpm/dashboard/static/js/dashboard.js +0 -1914
- claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/js/socket-client.js +0 -1474
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/socket.io.min.js +0 -7
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
- claude_mpm/dashboard/templates/code_simple.html +0 -153
- claude_mpm/dashboard/templates/index.html +0 -606
- claude_mpm/dashboard/test_dashboard.html +0 -372
- claude_mpm/scripts/mcp_server.py +0 -75
- claude_mpm/scripts/mcp_wrapper.py +0 -39
- claude_mpm/services/mcp_gateway/__init__.py +0 -159
- claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
- claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
- claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
- claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
- claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
- claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
- claude_mpm/services/mcp_gateway/core/base.py +0 -312
- claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
- claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
- claude_mpm/services/mcp_gateway/core/process_pool.py +0 -971
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
- claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
- claude_mpm/services/mcp_gateway/main.py +0 -589
- claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
- claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
- claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
- claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
- claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
- claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
- /claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +0 -0
- {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/WHEEL +0 -0
- {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/top_level.txt +0 -0
|
@@ -51,6 +51,63 @@ class MultiSourceAgentDeploymentService:
|
|
|
51
51
|
self.logger = get_logger(__name__)
|
|
52
52
|
self.version_manager = AgentVersionManager()
|
|
53
53
|
|
|
54
|
+
def _build_canonical_id_for_agent(self, agent_info: Dict[str, Any]) -> str:
|
|
55
|
+
"""Build or retrieve canonical_id for an agent.
|
|
56
|
+
|
|
57
|
+
NEW: Supports enhanced agent matching via canonical_id.
|
|
58
|
+
|
|
59
|
+
Priority:
|
|
60
|
+
1. Use existing canonical_id from agent_info if present
|
|
61
|
+
2. Generate from collection_id + agent_id if available
|
|
62
|
+
3. Fallback to legacy:{filename} for backward compatibility
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
agent_info: Agent dictionary with metadata
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Canonical ID string for matching
|
|
69
|
+
|
|
70
|
+
Example:
|
|
71
|
+
Remote agent: "bobmatnyc/claude-mpm-agents:pm"
|
|
72
|
+
Legacy agent: "legacy:custom-agent"
|
|
73
|
+
"""
|
|
74
|
+
# Priority 1: Existing canonical_id
|
|
75
|
+
if "canonical_id" in agent_info:
|
|
76
|
+
return agent_info["canonical_id"]
|
|
77
|
+
|
|
78
|
+
# Priority 2: Generate from collection_id + agent_id
|
|
79
|
+
collection_id = agent_info.get("collection_id")
|
|
80
|
+
agent_id = agent_info.get("agent_id")
|
|
81
|
+
|
|
82
|
+
if collection_id and agent_id:
|
|
83
|
+
canonical_id = f"{collection_id}:{agent_id}"
|
|
84
|
+
# Cache it in agent_info for future use
|
|
85
|
+
agent_info["canonical_id"] = canonical_id
|
|
86
|
+
return canonical_id
|
|
87
|
+
|
|
88
|
+
# Priority 3: Fallback to legacy format
|
|
89
|
+
# Use filename or agent name
|
|
90
|
+
agent_name = agent_info.get("name") or agent_info.get("metadata", {}).get(
|
|
91
|
+
"name", "unknown"
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# Extract filename from path
|
|
95
|
+
path_str = (
|
|
96
|
+
agent_info.get("path")
|
|
97
|
+
or agent_info.get("file_path")
|
|
98
|
+
or agent_info.get("source_file")
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
if path_str:
|
|
102
|
+
filename = Path(path_str).stem
|
|
103
|
+
canonical_id = f"legacy:{filename}"
|
|
104
|
+
else:
|
|
105
|
+
canonical_id = f"legacy:{agent_name}"
|
|
106
|
+
|
|
107
|
+
# Cache it
|
|
108
|
+
agent_info["canonical_id"] = canonical_id
|
|
109
|
+
return canonical_id
|
|
110
|
+
|
|
54
111
|
def discover_agents_from_all_sources(
|
|
55
112
|
self,
|
|
56
113
|
system_templates_dir: Optional[Path] = None,
|
|
@@ -156,11 +213,19 @@ class MultiSourceAgentDeploymentService:
|
|
|
156
213
|
agent_info["source"] = source_name
|
|
157
214
|
agent_info["source_dir"] = str(source_dir)
|
|
158
215
|
|
|
216
|
+
# NEW: Build canonical_id for enhanced matching
|
|
217
|
+
canonical_id = self._build_canonical_id_for_agent(agent_info)
|
|
218
|
+
|
|
219
|
+
# Group by canonical_id (PRIMARY) for enhanced matching
|
|
220
|
+
# This allows matching agents from different sources with same canonical_id
|
|
221
|
+
# while maintaining backward compatibility with name-based matching
|
|
222
|
+
matching_key = canonical_id
|
|
223
|
+
|
|
159
224
|
# Initialize list if this is the first occurrence of this agent
|
|
160
|
-
if
|
|
161
|
-
agents_by_name[
|
|
225
|
+
if matching_key not in agents_by_name:
|
|
226
|
+
agents_by_name[matching_key] = []
|
|
162
227
|
|
|
163
|
-
agents_by_name[
|
|
228
|
+
agents_by_name[matching_key].append(agent_info)
|
|
164
229
|
|
|
165
230
|
# Use more specific log message
|
|
166
231
|
self.logger.info(
|
|
@@ -189,6 +254,48 @@ class MultiSourceAgentDeploymentService:
|
|
|
189
254
|
|
|
190
255
|
return agents_by_name
|
|
191
256
|
|
|
257
|
+
def get_agents_by_collection(
|
|
258
|
+
self,
|
|
259
|
+
collection_id: str,
|
|
260
|
+
remote_agents_dir: Optional[Path] = None,
|
|
261
|
+
) -> List[Dict[str, Any]]:
|
|
262
|
+
"""Get all agents from a specific collection.
|
|
263
|
+
|
|
264
|
+
NEW: Enables collection-based agent selection.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
collection_id: Collection identifier (e.g., "bobmatnyc/claude-mpm-agents")
|
|
268
|
+
remote_agents_dir: Directory containing remote agents cache
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
List of agent dictionaries from the specified collection
|
|
272
|
+
|
|
273
|
+
Example:
|
|
274
|
+
>>> service = MultiSourceAgentDeploymentService()
|
|
275
|
+
>>> agents = service.get_agents_by_collection("bobmatnyc/claude-mpm-agents")
|
|
276
|
+
>>> len(agents)
|
|
277
|
+
45
|
|
278
|
+
"""
|
|
279
|
+
if not remote_agents_dir:
|
|
280
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache"
|
|
281
|
+
remote_agents_dir = cache_dir / "remote-agents"
|
|
282
|
+
|
|
283
|
+
if not remote_agents_dir.exists():
|
|
284
|
+
self.logger.warning(
|
|
285
|
+
f"Remote agents directory not found: {remote_agents_dir}"
|
|
286
|
+
)
|
|
287
|
+
return []
|
|
288
|
+
|
|
289
|
+
# Use RemoteAgentDiscoveryService to get collection agents
|
|
290
|
+
remote_service = RemoteAgentDiscoveryService(remote_agents_dir)
|
|
291
|
+
collection_agents = remote_service.get_agents_by_collection(collection_id)
|
|
292
|
+
|
|
293
|
+
self.logger.info(
|
|
294
|
+
f"Retrieved {len(collection_agents)} agents from collection '{collection_id}'"
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
return collection_agents
|
|
298
|
+
|
|
192
299
|
def select_highest_version_agents(
|
|
193
300
|
self, agents_by_name: Dict[str, List[Dict[str, Any]]]
|
|
194
301
|
) -> Dict[str, Dict[str, Any]]:
|