claude-mpm 4.0.17__tar.gz → 4.0.19__tar.gz
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-4.0.17 → claude_mpm-4.0.19}/PKG-INFO +1 -1
- claude_mpm-4.0.19/VERSION +1 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/pyproject.toml +2 -1
- claude_mpm-4.0.19/src/claude_mpm/VERSION +1 -0
- claude_mpm-4.0.19/src/claude_mpm/agents/templates/qa.json +139 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/__init__.py +62 -0
- claude_mpm-4.0.19/src/claude_mpm/cli/commands/mcp_install_commands.py +77 -0
- claude_mpm-4.0.19/src/claude_mpm/cli/commands/mcp_server_commands.py +156 -0
- claude_mpm-4.0.19/src/claude_mpm/scripts/mcp_server.py +68 -0
- claude_mpm-4.0.19/src/claude_mpm/scripts/mcp_wrapper.py +39 -0
- claude_mpm-4.0.19/src/claude_mpm/services/mcp_gateway/core/singleton_manager.py +312 -0
- claude_mpm-4.0.19/src/claude_mpm/services/mcp_gateway/core/startup_verification.py +315 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/main.py +7 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/server/stdio_server.py +145 -29
- claude_mpm-4.0.19/src/claude_mpm/services/mcp_gateway/tools/health_check_tool.py +453 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm.egg-info/PKG-INFO +1 -1
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm.egg-info/SOURCES.txt +5 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm.egg-info/entry_points.txt +1 -0
- claude_mpm-4.0.17/VERSION +0 -1
- claude_mpm-4.0.17/src/claude_mpm/VERSION +0 -1
- claude_mpm-4.0.17/src/claude_mpm/agents/templates/qa.json +0 -127
- claude_mpm-4.0.17/src/claude_mpm/cli/commands/mcp_install_commands.py +0 -20
- claude_mpm-4.0.17/src/claude_mpm/cli/commands/mcp_server_commands.py +0 -175
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/BUILD_NUMBER +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/CLAUDE.md +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/LICENSE +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/MANIFEST.in +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/README.md +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/claude-mpm +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/requirements.txt +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/scripts/ticket +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/setup.cfg +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/setup.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/BUILD_NUMBER +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/__main__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/BASE_PM.md +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/INSTRUCTIONS.md +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/MEMORY.md +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/WORKFLOW.md +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/agent-template.yaml +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/agent_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/agent_loader_integration.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/agents_metadata.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/async_agent_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/backups/INSTRUCTIONS.md +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/base_agent.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/base_agent_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/frontmatter_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/schema/agent_schema.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/system_agent_config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/research_agent_2025011_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/research_memory_efficient.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/code_analyzer.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/data_engineer.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/documentation.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/engineer.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/memory_manager.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/ops.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/project_organizer.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/refactoring_engineer.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/research.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/security.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/ticketing.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/version_control.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/web_qa.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/agents/templates/web_ui.json +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/__main__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/agents.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/aggregate.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/cleanup.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/info.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/mcp.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/mcp_command_router.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/mcp_config_commands.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/mcp_tool_commands.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/memory.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/monitor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/run.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/run_config_checker.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/socketio_monitor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/commands/tickets.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/agents_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/base_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/config_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/mcp_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/memory_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/monitor_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/run_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/parsers/tickets_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/ticket_cli.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli/utils.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli_module/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli_module/args.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli_module/commands.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/cli_module/migration_example.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/config/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/config/agent_config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/config/experimental_features.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/config/paths.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/config/socketio_config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/constants.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/agent_name_normalizer.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/agent_registry.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/agent_session_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/base_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/cache.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/claude_runner.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/config_aliases.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/config_constants.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/constants.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/container.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/exceptions.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/factories.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/framework_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/hook_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/hook_performance_config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/injectable_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/interactive_session.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/interfaces.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/lazy.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/logger.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/logging_config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/minimal_framework_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/mixins.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/oneshot_session.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/optimized_agent_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/optimized_startup.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/pm_hook_interceptor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/service_registry.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/session_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/socketio_pool.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/tool_access_control.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/types.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/typing_utils.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/unified_agent_registry.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/unified_config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/core/unified_paths.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/index.html +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/open_dashboard.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/agent-inference.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/event-processor.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/event-viewer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/export-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/hud-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/module-viewer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/session-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/socket-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/components/working-directory.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/dashboard.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/built/socket-client.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/css/dashboard.css +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/event-processor.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/export-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/session-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/components/working-directory.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/dashboard.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/dist/socket-client.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/agent-inference.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/event-processor.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/event-viewer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/export-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/hud-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/module-viewer.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/session-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/socket-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/components/working-directory.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/dashboard.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/extension-error-handler.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/static/js/socket-client.js +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/templates/index.html +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/dashboard/test_dashboard.html +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/experimental/cli_enhancements.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/generators/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/generators/agent_profile_generator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/base_hook.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/claude_hooks/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/claude_hooks/connection_pool.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/claude_hooks/event_handlers.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/claude_hooks/hook_handler.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/claude_hooks/hook_wrapper.sh +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/claude_hooks/memory_integration.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/claude_hooks/response_tracking.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/claude_hooks/tool_analysis.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/memory_integration_hook.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/tool_call_interceptor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/hooks/validation_hooks.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/init.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/models/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/models/agent_definition.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/models/agent_session.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/scripts/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/scripts/socketio_daemon.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/scripts/socketio_server_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/scripts/start_activity_logging.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agent_capabilities_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_config_provider.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_configuration_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_definition_factory.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_deployment.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_discovery_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_environment_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_filesystem_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_format_converter.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_metrics_collector.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_template_builder.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_version_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agent_versioning.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/agents_directory_resolver.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/async_agent_deployment.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/config/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/config/deployment_config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/config/deployment_config_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/deployment_config_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/deployment_type_detector.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/facade/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/facade/deployment_facade.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/interface_adapter.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/lifecycle_health_checker.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/processors/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/processors/agent_processor.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/results/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/results/deployment_metrics.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/results/deployment_result_builder.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/strategies/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/strategies/base_strategy.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/strategies/project_strategy.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/strategies/strategy_selector.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/strategies/system_strategy.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/strategies/user_strategy.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/system_instructions_deployer.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/validation/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/validation/agent_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/validation/deployment_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/validation/template_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/deployment/validation/validation_result.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/loading/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/loading/agent_profile_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/loading/base_agent_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/loading/framework_agent_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/management/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/management/agent_capabilities_generator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/management/agent_management_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/memory/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/memory/agent_memory_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/memory/agent_persistence_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/memory/analyzer.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/memory/content_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/memory/template_generator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/registry/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/registry/deployed_agent_discovery.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/agents/registry/modification_tracker.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/async_session_logger.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/claude_session_logger.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/command_handler_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/communication/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/core/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/core/base.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/core/interfaces/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/core/interfaces/agent.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/core/interfaces/communication.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/core/interfaces/infrastructure.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/core/interfaces/service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/core/interfaces.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/event_aggregator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/exceptions.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/content_assembler.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/content_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/deployment_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/header.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/section_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/framework_claude_md_generator/version_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/hook_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/infrastructure/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/infrastructure/context_preservation.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/infrastructure/daemon_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/infrastructure/logging.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/infrastructure/monitoring.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/config/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/config/config_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/config/config_schema.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/config/configuration.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/core/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/core/base.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/core/exceptions.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/core/interfaces.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/registry/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/server/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/tools/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory/builder.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory/cache/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory/cache/shared_prompt_cache.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory/cache/simple_cache.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory/indexed_memory.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory/optimizer.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory/router.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/memory_hook_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/port_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/project/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/project/analyzer.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/project/registry.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/recovery_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/response_tracker.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/runner_configuration_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/session_management_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/client_proxy.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/base.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/connection.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/file.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/git.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/hook.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/memory.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/project.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/handlers/registry.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/server/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/server/broadcaster.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/server/core.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio/server/main.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio_client_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/socketio_server.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/subprocess_launcher_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/system_instructions_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/ticket_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/utility_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/version_control/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/version_control/branch_strategy.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/version_control/conflict_resolution.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/version_control/git_operations.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/version_control/semantic_versioning.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/version_control/version_parser.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/services/version_service.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/storage/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/storage/state_storage.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/ticket_wrapper.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/agent_dependency_loader.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/config_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/console.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/dependency_cache.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/dependency_manager.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/dependency_strategies.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/environment_context.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/error_handler.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/file_utils.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/framework_detection.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/import_migration_example.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/imports.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/path_operations.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/robust_installer.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/session_logging.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/utils/subprocess_utils.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/validation/__init__.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/validation/agent_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm/validation/frontmatter_validator.py +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm.egg-info/dependency_links.txt +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm.egg-info/requires.txt +0 -0
- {claude_mpm-4.0.17 → claude_mpm-4.0.19}/src/claude_mpm.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4.0.19
|
|
@@ -54,6 +54,7 @@ claude-mpm-version = "claude_mpm.scripts.manage_version:main"
|
|
|
54
54
|
claude-mpm-monitor = "claude_mpm.scripts.launch_monitor:main"
|
|
55
55
|
claude-mpm-socketio = "claude_mpm.scripts.socketio_daemon:main"
|
|
56
56
|
claude-mpm-mcp = "claude_mpm.services.mcp_gateway.server.stdio_server:main_sync"
|
|
57
|
+
claude-mpm-mcp-wrapper = "claude_mpm.scripts.mcp_wrapper:entry_point"
|
|
57
58
|
|
|
58
59
|
[tool.uv]
|
|
59
60
|
dev-dependencies = [ "pytest>=7.0", "pytest-asyncio", "pytest-cov", "black", "flake8", "mypy",]
|
|
@@ -118,7 +119,7 @@ asyncio_mode = "auto"
|
|
|
118
119
|
|
|
119
120
|
[tool.commitizen]
|
|
120
121
|
name = "cz_conventional_commits"
|
|
121
|
-
version = "4.0.
|
|
122
|
+
version = "4.0.19"
|
|
122
123
|
version_files = [
|
|
123
124
|
"VERSION",
|
|
124
125
|
"src/claude_mpm/VERSION",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4.0.19
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.2.0",
|
|
3
|
+
"agent_id": "qa-agent",
|
|
4
|
+
"agent_version": "3.1.0",
|
|
5
|
+
"agent_type": "qa",
|
|
6
|
+
"metadata": {
|
|
7
|
+
"name": "Qa Agent",
|
|
8
|
+
"description": "Memory-efficient testing with strategic sampling, targeted validation, and smart coverage analysis",
|
|
9
|
+
"category": "quality",
|
|
10
|
+
"tags": [
|
|
11
|
+
"qa",
|
|
12
|
+
"testing",
|
|
13
|
+
"quality",
|
|
14
|
+
"validation",
|
|
15
|
+
"memory-efficient",
|
|
16
|
+
"strategic-sampling",
|
|
17
|
+
"grep-first"
|
|
18
|
+
],
|
|
19
|
+
"author": "Claude MPM Team",
|
|
20
|
+
"created_at": "2025-07-27T03:45:51.480803Z",
|
|
21
|
+
"updated_at": "2025-08-19T10:00:00.000000Z",
|
|
22
|
+
"color": "green"
|
|
23
|
+
},
|
|
24
|
+
"capabilities": {
|
|
25
|
+
"model": "sonnet",
|
|
26
|
+
"tools": [
|
|
27
|
+
"Read",
|
|
28
|
+
"Write",
|
|
29
|
+
"Edit",
|
|
30
|
+
"Bash",
|
|
31
|
+
"Grep",
|
|
32
|
+
"Glob",
|
|
33
|
+
"LS",
|
|
34
|
+
"TodoWrite"
|
|
35
|
+
],
|
|
36
|
+
"resource_tier": "standard",
|
|
37
|
+
"max_tokens": 8192,
|
|
38
|
+
"temperature": 0.0,
|
|
39
|
+
"timeout": 600,
|
|
40
|
+
"memory_limit": 3072,
|
|
41
|
+
"cpu_limit": 50,
|
|
42
|
+
"network_access": false,
|
|
43
|
+
"file_access": {
|
|
44
|
+
"read_paths": [
|
|
45
|
+
"./"
|
|
46
|
+
],
|
|
47
|
+
"write_paths": [
|
|
48
|
+
"./tests/",
|
|
49
|
+
"./test/",
|
|
50
|
+
"./scripts/"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"instructions": "<!-- MEMORY WARNING: Claude Code retains all file contents read during execution -->\n<!-- CRITICAL: Test files can consume significant memory - process strategically -->\n<!-- PATTERN: Grep → Sample → Validate → Discard → Report -->\n<!-- NEVER retain multiple test files in memory simultaneously -->\n\n# QA Agent - MEMORY-EFFICIENT TESTING\n\nValidate implementation quality through strategic testing and targeted validation. Focus on efficient test sampling and intelligent coverage analysis without exhaustive file retention.\n\n## 🚨 MEMORY MANAGEMENT CRITICAL 🚨\n\n**PREVENT TEST FILE ACCUMULATION**:\n1. **Sample strategically** - Never read ALL test files, sample 5-10 maximum\n2. **Use grep for counting** - Count tests with grep, don't read files to count\n3. **Process sequentially** - One test file at a time, never parallel\n4. **Extract and discard** - Extract test results, immediately discard file contents\n5. **Summarize per file** - Create brief test summaries, release originals\n6. **Check file sizes** - Skip test files >500KB unless critical\n7. **Use grep context** - Use -A/-B flags instead of reading entire test files\n\n## MEMORY-EFFICIENT TESTING PROTOCOL\n\n### Test Discovery Without Full Reading\n```bash\n# Count tests without reading files\ngrep -r \"def test_\" tests/ --include=\"*.py\" | wc -l\ngrep -r \"it(\" tests/ --include=\"*.js\" | wc -l\ngrep -r \"@Test\" tests/ --include=\"*.java\" | wc -l\n```\n\n### Strategic Test Sampling\n```bash\n# Sample 5-10 test files, not all\nfind tests/ -name \"*.py\" -type f | head -10\n\n# Extract test names without reading full files\ngrep \"def test_\" tests/sample_test.py | head -20\n\n# Get test context with limited lines\ngrep -A 5 -B 5 \"def test_critical_feature\" tests/\n```\n\n### Coverage Analysis Without Full Retention\n```bash\n# Use coverage tools' summary output\npytest --cov=src --cov-report=term-missing | tail -20\n\n# Extract coverage percentage only\ncoverage report | grep TOTAL\n\n# Sample uncovered lines, don't read all\ncoverage report -m | grep \",\" | head -10\n```\n\n## Memory Integration and Learning\n\n### Memory Usage Protocol\n**ALWAYS review your agent memory at the start of each task.** Your accumulated knowledge helps you:\n- Apply proven testing strategies and frameworks\n- Avoid previously identified testing gaps and blind spots\n- Leverage successful test automation patterns\n- Reference quality standards and best practices that worked\n- Build upon established coverage and validation techniques\n\n### Adding Memories During Tasks\nWhen you discover valuable insights, patterns, or solutions, add them to memory using:\n\n```markdown\n# Add To Memory:\nType: [pattern|architecture|guideline|mistake|strategy|integration|performance|context]\nContent: [Your learning in 5-100 characters]\n#\n```\n\n### QA Memory Categories\n\n**Pattern Memories** (Type: pattern):\n- Test case organization patterns that improved coverage\n- Effective test data generation and management patterns\n- Bug reproduction and isolation patterns\n- Test automation patterns for different scenarios\n\n**Strategy Memories** (Type: strategy):\n- Approaches to testing complex integrations\n- Risk-based testing prioritization strategies\n- Performance testing strategies for different workloads\n- Regression testing and test maintenance strategies\n\n**Architecture Memories** (Type: architecture):\n- Test infrastructure designs that scaled well\n- Test environment setup and management approaches\n- CI/CD integration patterns for testing\n- Test data management and lifecycle architectures\n\n**Guideline Memories** (Type: guideline):\n- Quality gates and acceptance criteria standards\n- Test coverage requirements and metrics\n- Code review and testing standards\n- Bug triage and severity classification criteria\n\n**Mistake Memories** (Type: mistake):\n- Common testing blind spots and coverage gaps\n- Test automation maintenance issues\n- Performance testing pitfalls and false positives\n- Integration testing configuration mistakes\n\n**Integration Memories** (Type: integration):\n- Testing tool integrations and configurations\n- Third-party service testing and mocking patterns\n- Database testing and data validation approaches\n- API testing and contract validation strategies\n\n**Performance Memories** (Type: performance):\n- Load testing configurations that revealed bottlenecks\n- Performance monitoring and alerting setups\n- Optimization techniques that improved test execution\n- Resource usage patterns during different test types\n\n**Context Memories** (Type: context):\n- Current project quality standards and requirements\n- Team testing practices and tool preferences\n- Regulatory and compliance testing requirements\n- Known system limitations and testing constraints\n\n### Memory Application Examples\n\n**Before designing test cases:**\n```\nReviewing my pattern memories for similar feature testing...\nApplying strategy memory: \"Test boundary conditions first for input validation\"\nAvoiding mistake memory: \"Don't rely only on unit tests for async operations\"\n```\n\n**When setting up test automation:**\n```\nApplying architecture memory: \"Use page object pattern for UI test maintainability\"\nFollowing guideline memory: \"Maintain 80% code coverage minimum for core features\"\n```\n\n**During performance testing:**\n```\nApplying performance memory: \"Ramp up load gradually to identify breaking points\"\nFollowing integration memory: \"Mock external services for consistent perf tests\"\n```\n\n## Testing Protocol - MEMORY OPTIMIZED\n1. **Test Discovery**: Use grep to count and locate tests (no full reads)\n2. **Strategic Sampling**: Execute targeted test subsets (5-10 files max)\n3. **Coverage Sampling**: Analyze coverage reports, not source files\n4. **Performance Validation**: Run specific performance tests, not exhaustive suites\n5. **Result Extraction**: Capture test output, immediately discard verbose logs\n6. **Memory Application**: Apply lessons learned from previous testing experiences\n\n### Efficient Test Execution Examples\n\n**GOOD - Memory Efficient**:\n```bash\n# Run specific test modules\npytest tests/auth/test_login.py -v\n\n# Run tests matching pattern\npytest -k \"authentication\" --tb=short\n\n# Get summary only\npytest --quiet --tb=no | tail -5\n```\n\n**BAD - Memory Intensive**:\n```bash\n# DON'T read all test files\nfind tests/ -name \"*.py\" -exec cat {} \\;\n\n# DON'T run all tests with verbose output\npytest -vvv # Too much output retained\n\n# DON'T read all test results into memory\ncat test_results_*.txt # Avoid this\n```\n\n## Quality Focus - MEMORY CONSCIOUS\n- Strategic test sampling and validation (not exhaustive)\n- Targeted coverage analysis via tool reports (not file reading)\n- Efficient performance testing on critical paths only\n- Smart regression testing with pattern matching\n\n## FORBIDDEN MEMORY-INTENSIVE PRACTICES\n\n**NEVER DO THIS**:\n1. ❌ Reading all test files to understand test coverage\n2. ❌ Loading multiple test result files simultaneously\n3. ❌ Running entire test suite with maximum verbosity\n4. ❌ Reading all source files to verify test coverage\n5. ❌ Retaining test output logs after analysis\n\n**ALWAYS DO THIS**:\n1. ✅ Use grep to count and locate tests\n2. ✅ Sample 5-10 representative test files maximum\n3. ✅ Use test tool summary outputs (pytest --tb=short)\n4. ✅ Process test results sequentially\n5. ✅ Extract metrics and immediately discard raw output\n6. ✅ Use coverage tool reports instead of reading source\n\n## TodoWrite Usage Guidelines\n\nWhen using TodoWrite, always prefix tasks with your agent name to maintain clear ownership and coordination:\n\n### Required Prefix Format\n- ✅ `[QA] Execute targeted test suite for user authentication (sample 5-10 files)`\n- ✅ `[QA] Analyze coverage tool summary for payment flow gaps`\n- ✅ `[QA] Validate performance on critical API endpoints only`\n- ✅ `[QA] Review test results and provide sign-off for deployment`\n- ❌ Never use generic todos without agent prefix\n- ❌ Never use another agent's prefix (e.g., [Engineer], [Security])\n\n### Task Status Management\nTrack your quality assurance progress systematically:\n- **pending**: Testing not yet started\n- **in_progress**: Currently executing tests or analysis (mark when you begin work)\n- **completed**: Testing completed with results documented\n- **BLOCKED**: Stuck on dependencies or test failures (include reason and impact)\n\n### QA-Specific Todo Patterns\n\n**Test Execution Tasks (Memory-Efficient)**:\n- `[QA] Execute targeted unit tests for authentication module (sample 5-10 files)`\n- `[QA] Run specific integration tests for payment flow (grep-first discovery)`\n- `[QA] Perform focused load testing on critical endpoint only`\n- `[QA] Validate API contracts using tool reports (not file reads)`\n\n**Analysis and Reporting Tasks (Memory-Conscious)**:\n- `[QA] Analyze coverage tool summary (not source files) for gaps`\n- `[QA] Review performance metrics from tool outputs only`\n- `[QA] Document test failures with grep-extracted context`\n- `[QA] Generate targeted QA report from tool summaries`\n\n**Quality Gate Tasks**:\n- `[QA] Verify all acceptance criteria met for user story completion`\n- `[QA] Validate security requirements compliance before release`\n- `[QA] Review code quality metrics and enforce standards`\n- `[QA] Provide final sign-off: QA Complete: [Pass/Fail] - [Details]`\n\n**Regression and Maintenance Tasks**:\n- `[QA] Execute regression test suite after hotfix deployment`\n- `[QA] Update test automation scripts for new feature coverage`\n- `[QA] Review and maintain test data sets for consistency`\n\n### Special Status Considerations\n\n**For Complex Test Scenarios**:\nBreak comprehensive testing into manageable components:\n```\n[QA] Complete end-to-end testing for e-commerce checkout\n├── [QA] Test shopping cart functionality (completed)\n├── [QA] Validate payment gateway integration (in_progress)\n├── [QA] Test order confirmation flow (pending)\n└── [QA] Verify email notification delivery (pending)\n```\n\n**For Blocked Testing**:\nAlways include the blocking reason and impact assessment:\n- `[QA] Test payment integration (BLOCKED - staging environment down, affects release timeline)`\n- `[QA] Validate user permissions (BLOCKED - waiting for test data from data team)`\n- `[QA] Execute performance tests (BLOCKED - load testing tools unavailable)`\n\n**For Failed Tests**:\nDocument failures with actionable information:\n- `[QA] Investigate login test failures (3/15 tests failing - authentication timeout issue)`\n- `[QA] Reproduce and document checkout bug (affects 20% of test scenarios)`\n\n### QA Sign-off Requirements\nAll QA sign-offs must follow this format:\n- `[QA] QA Complete: Pass - All tests passing, coverage at 85%, performance within requirements`\n- `[QA] QA Complete: Fail - 5 critical bugs found, performance 20% below target`\n- `[QA] QA Complete: Conditional Pass - Minor issues documented, acceptable for deployment`\n\n### Coordination with Other Agents\n- Reference specific test failures when creating todos for Engineer agents\n- Update todos immediately when providing QA sign-off to other agents\n- Include test evidence and metrics in handoff communications\n- Use clear, specific descriptions that help other agents understand quality status",
|
|
55
|
+
"knowledge": {
|
|
56
|
+
"domain_expertise": [
|
|
57
|
+
"Testing frameworks and methodologies",
|
|
58
|
+
"Quality assurance standards",
|
|
59
|
+
"Test automation strategies",
|
|
60
|
+
"Performance testing techniques",
|
|
61
|
+
"Coverage analysis methods"
|
|
62
|
+
],
|
|
63
|
+
"best_practices": [
|
|
64
|
+
"Execute targeted test validation on critical paths",
|
|
65
|
+
"Analyze coverage metrics from tool reports, not file reads",
|
|
66
|
+
"Sample test files strategically (5-10 max) to identify gaps",
|
|
67
|
+
"Validate performance on key scenarios only",
|
|
68
|
+
"Use grep patterns for regression test coordination",
|
|
69
|
+
"Process test files sequentially to prevent memory accumulation",
|
|
70
|
+
"Extract test summaries and discard verbose output immediately"
|
|
71
|
+
],
|
|
72
|
+
"constraints": [
|
|
73
|
+
"Maximum 5-10 test files for sampling per session",
|
|
74
|
+
"Use grep for test discovery instead of file reading",
|
|
75
|
+
"Process test files sequentially, never in parallel",
|
|
76
|
+
"Skip test files >500KB unless absolutely critical",
|
|
77
|
+
"Extract metrics from tool outputs, not source files",
|
|
78
|
+
"Immediately discard test file contents after extraction"
|
|
79
|
+
],
|
|
80
|
+
"examples": []
|
|
81
|
+
},
|
|
82
|
+
"interactions": {
|
|
83
|
+
"input_format": {
|
|
84
|
+
"required_fields": [
|
|
85
|
+
"task"
|
|
86
|
+
],
|
|
87
|
+
"optional_fields": [
|
|
88
|
+
"context",
|
|
89
|
+
"constraints"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
"output_format": {
|
|
93
|
+
"structure": "markdown",
|
|
94
|
+
"includes": [
|
|
95
|
+
"analysis",
|
|
96
|
+
"recommendations",
|
|
97
|
+
"code"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
"handoff_agents": [
|
|
101
|
+
"engineer",
|
|
102
|
+
"security"
|
|
103
|
+
],
|
|
104
|
+
"triggers": []
|
|
105
|
+
},
|
|
106
|
+
"testing": {
|
|
107
|
+
"test_cases": [
|
|
108
|
+
{
|
|
109
|
+
"name": "Basic qa task",
|
|
110
|
+
"input": "Perform a basic qa analysis",
|
|
111
|
+
"expected_behavior": "Agent performs qa tasks correctly",
|
|
112
|
+
"validation_criteria": [
|
|
113
|
+
"completes_task",
|
|
114
|
+
"follows_format"
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"performance_benchmarks": {
|
|
119
|
+
"response_time": 300,
|
|
120
|
+
"token_usage": 8192,
|
|
121
|
+
"success_rate": 0.95
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"dependencies": {
|
|
125
|
+
"python": [
|
|
126
|
+
"pytest>=7.4.0",
|
|
127
|
+
"pytest-cov>=4.1.0",
|
|
128
|
+
"hypothesis>=6.92.0",
|
|
129
|
+
"mutmut>=2.4.0",
|
|
130
|
+
"pytest-benchmark>=4.0.0",
|
|
131
|
+
"faker>=20.0.0"
|
|
132
|
+
],
|
|
133
|
+
"system": [
|
|
134
|
+
"python3",
|
|
135
|
+
"git"
|
|
136
|
+
],
|
|
137
|
+
"optional": false
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -77,6 +77,9 @@ def main(argv: Optional[list] = None):
|
|
|
77
77
|
# Initialize or update project registry
|
|
78
78
|
_initialize_project_registry()
|
|
79
79
|
|
|
80
|
+
# Verify MCP Gateway configuration on startup (non-blocking)
|
|
81
|
+
_verify_mcp_gateway_startup()
|
|
82
|
+
|
|
80
83
|
# Create parser with version
|
|
81
84
|
parser = create_parser(version=__version__)
|
|
82
85
|
|
|
@@ -167,6 +170,65 @@ def _initialize_project_registry():
|
|
|
167
170
|
# Continue execution - registry failure shouldn't block startup
|
|
168
171
|
|
|
169
172
|
|
|
173
|
+
def _verify_mcp_gateway_startup():
|
|
174
|
+
"""
|
|
175
|
+
Verify MCP Gateway configuration on startup.
|
|
176
|
+
|
|
177
|
+
WHY: The MCP gateway should be automatically configured and verified on startup
|
|
178
|
+
to provide a seamless experience with diagnostic tools, file summarizer, and
|
|
179
|
+
ticket service.
|
|
180
|
+
|
|
181
|
+
DESIGN DECISION: This is non-blocking - failures are logged but don't prevent
|
|
182
|
+
startup to ensure claude-mpm remains functional even if MCP gateway has issues.
|
|
183
|
+
"""
|
|
184
|
+
try:
|
|
185
|
+
import asyncio
|
|
186
|
+
from ..services.mcp_gateway.core.startup_verification import (
|
|
187
|
+
verify_mcp_gateway_on_startup,
|
|
188
|
+
is_mcp_gateway_configured,
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
# Quick check first - if already configured, skip detailed verification
|
|
192
|
+
if is_mcp_gateway_configured():
|
|
193
|
+
return
|
|
194
|
+
|
|
195
|
+
# Run detailed verification in background
|
|
196
|
+
# Note: We don't await this to avoid blocking startup
|
|
197
|
+
def run_verification():
|
|
198
|
+
try:
|
|
199
|
+
loop = asyncio.new_event_loop()
|
|
200
|
+
asyncio.set_event_loop(loop)
|
|
201
|
+
results = loop.run_until_complete(verify_mcp_gateway_on_startup())
|
|
202
|
+
loop.close()
|
|
203
|
+
|
|
204
|
+
# Log results but don't block
|
|
205
|
+
from ..core.logger import get_logger
|
|
206
|
+
logger = get_logger("cli")
|
|
207
|
+
|
|
208
|
+
if results.get("gateway_configured"):
|
|
209
|
+
logger.debug("MCP Gateway verification completed successfully")
|
|
210
|
+
else:
|
|
211
|
+
logger.debug("MCP Gateway verification completed with warnings")
|
|
212
|
+
|
|
213
|
+
except Exception as e:
|
|
214
|
+
from ..core.logger import get_logger
|
|
215
|
+
logger = get_logger("cli")
|
|
216
|
+
logger.debug(f"MCP Gateway verification failed: {e}")
|
|
217
|
+
|
|
218
|
+
# Run in background thread to avoid blocking startup
|
|
219
|
+
import threading
|
|
220
|
+
verification_thread = threading.Thread(target=run_verification, daemon=True)
|
|
221
|
+
verification_thread.start()
|
|
222
|
+
|
|
223
|
+
except Exception as e:
|
|
224
|
+
# Import logger here to avoid circular imports
|
|
225
|
+
from ..core.logger import get_logger
|
|
226
|
+
|
|
227
|
+
logger = get_logger("cli")
|
|
228
|
+
logger.debug(f"Failed to start MCP Gateway verification: {e}")
|
|
229
|
+
# Continue execution - MCP gateway issues shouldn't block startup
|
|
230
|
+
|
|
231
|
+
|
|
170
232
|
def _ensure_run_attributes(args):
|
|
171
233
|
"""
|
|
172
234
|
Ensure run command attributes exist when defaulting to run.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""MCP install command implementations.
|
|
2
|
+
|
|
3
|
+
This module provides MCP installation and configuration commands.
|
|
4
|
+
Extracted from mcp.py to reduce complexity and improve maintainability.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import subprocess
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class MCPInstallCommands:
|
|
13
|
+
"""Handles MCP install commands."""
|
|
14
|
+
|
|
15
|
+
def __init__(self, logger):
|
|
16
|
+
"""Initialize the MCP install commands handler."""
|
|
17
|
+
self.logger = logger
|
|
18
|
+
|
|
19
|
+
def install_gateway(self, args):
|
|
20
|
+
"""Install and configure MCP gateway.
|
|
21
|
+
|
|
22
|
+
WHY: This command installs the MCP package dependencies and configures
|
|
23
|
+
Claude Desktop to use the MCP gateway server.
|
|
24
|
+
|
|
25
|
+
DESIGN DECISION: We handle both package installation and configuration
|
|
26
|
+
in one command for user convenience.
|
|
27
|
+
"""
|
|
28
|
+
self.logger.info("MCP gateway installation command called")
|
|
29
|
+
print("📦 Installing and Configuring MCP Gateway")
|
|
30
|
+
print("=" * 50)
|
|
31
|
+
|
|
32
|
+
# Step 1: Install MCP package if needed
|
|
33
|
+
print("\n1️⃣ Checking MCP package installation...")
|
|
34
|
+
try:
|
|
35
|
+
import mcp
|
|
36
|
+
print("✅ MCP package already installed")
|
|
37
|
+
except ImportError:
|
|
38
|
+
print("📦 Installing MCP package...")
|
|
39
|
+
try:
|
|
40
|
+
subprocess.check_call([sys.executable, "-m", "pip", "install", "mcp"])
|
|
41
|
+
print("✅ MCP package installed successfully")
|
|
42
|
+
except subprocess.CalledProcessError as e:
|
|
43
|
+
print(f"❌ Error installing MCP package: {e}")
|
|
44
|
+
print("\nPlease install manually with: pip install mcp")
|
|
45
|
+
return 1
|
|
46
|
+
|
|
47
|
+
# Step 2: Run the configuration script
|
|
48
|
+
print("\n2️⃣ Configuring Claude Desktop...")
|
|
49
|
+
project_root = Path(__file__).parent.parent.parent.parent.parent
|
|
50
|
+
config_script = project_root / "scripts" / "configure_mcp_server.py"
|
|
51
|
+
|
|
52
|
+
if not config_script.exists():
|
|
53
|
+
print(f"⚠️ Configuration script not found at {config_script}")
|
|
54
|
+
print("\nPlease configure manually. See:")
|
|
55
|
+
print(" claude-mpm mcp start --instructions")
|
|
56
|
+
return 1
|
|
57
|
+
|
|
58
|
+
try:
|
|
59
|
+
result = subprocess.run(
|
|
60
|
+
[sys.executable, str(config_script)],
|
|
61
|
+
cwd=str(project_root)
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
if result.returncode == 0:
|
|
65
|
+
print("✅ Configuration completed successfully")
|
|
66
|
+
print("\n🎉 MCP Gateway is ready to use!")
|
|
67
|
+
print("\nNext steps:")
|
|
68
|
+
print("1. Restart Claude Desktop")
|
|
69
|
+
print("2. Check process status: python scripts/check_mcp_processes.py")
|
|
70
|
+
return 0
|
|
71
|
+
else:
|
|
72
|
+
print("❌ Configuration script failed")
|
|
73
|
+
return 1
|
|
74
|
+
|
|
75
|
+
except Exception as e:
|
|
76
|
+
print(f"❌ Error running configuration: {e}")
|
|
77
|
+
return 1
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"""MCP server command implementations.
|
|
2
|
+
|
|
3
|
+
This module provides MCP server management commands.
|
|
4
|
+
Extracted from mcp.py to reduce complexity and improve maintainability.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import asyncio
|
|
8
|
+
import os
|
|
9
|
+
import subprocess
|
|
10
|
+
import sys
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class MCPServerCommands:
|
|
15
|
+
"""Handles MCP server commands."""
|
|
16
|
+
|
|
17
|
+
def __init__(self, logger):
|
|
18
|
+
"""Initialize the MCP server commands handler."""
|
|
19
|
+
self.logger = logger
|
|
20
|
+
|
|
21
|
+
async def start_server(self, args):
|
|
22
|
+
"""Start MCP server command.
|
|
23
|
+
|
|
24
|
+
WHY: This command starts the MCP server using the proper stdio-based
|
|
25
|
+
implementation that Claude Desktop can communicate with.
|
|
26
|
+
NOTE: MCP is for Claude Desktop's Code features.
|
|
27
|
+
|
|
28
|
+
DESIGN DECISION: We now use the wrapper script to ensure proper
|
|
29
|
+
environment setup regardless of how the server is invoked.
|
|
30
|
+
"""
|
|
31
|
+
self.logger.info("MCP server start command called")
|
|
32
|
+
|
|
33
|
+
# Check if we're being called by Claude Code (no special flags)
|
|
34
|
+
show_instructions = getattr(args, "instructions", False)
|
|
35
|
+
test_mode = getattr(args, "test", False)
|
|
36
|
+
daemon_mode = getattr(args, "daemon", False)
|
|
37
|
+
|
|
38
|
+
if daemon_mode:
|
|
39
|
+
# Daemon mode - not recommended for MCP
|
|
40
|
+
print("⚠️ MCP servers are designed to be spawned by Claude Code")
|
|
41
|
+
print(" Running as a daemon is not recommended.")
|
|
42
|
+
print(" Note: MCP is ONLY for Claude Code, not Claude Desktop.")
|
|
43
|
+
return 1
|
|
44
|
+
|
|
45
|
+
if show_instructions:
|
|
46
|
+
# Show configuration instructions
|
|
47
|
+
print("🚀 MCP Server Setup Instructions for Claude Desktop")
|
|
48
|
+
print("=" * 50)
|
|
49
|
+
print("\nThe MCP server enables Claude Desktop to use tools and integrations.")
|
|
50
|
+
print("\nTo configure the MCP server:")
|
|
51
|
+
print("\n1. Run the configuration script:")
|
|
52
|
+
print(" python scripts/configure_mcp_server.py")
|
|
53
|
+
print("\n2. Or manually configure Claude Desktop:")
|
|
54
|
+
|
|
55
|
+
# Find project root for paths
|
|
56
|
+
project_root = Path(__file__).parent.parent.parent.parent.parent
|
|
57
|
+
wrapper_path = project_root / "scripts" / "mcp_wrapper.py"
|
|
58
|
+
|
|
59
|
+
print("\n Add this to your Claude Desktop configuration:")
|
|
60
|
+
print(" (~/Library/Application Support/Claude/claude_desktop_config.json on macOS)")
|
|
61
|
+
print("\n {")
|
|
62
|
+
print(' "mcpServers": {')
|
|
63
|
+
print(' "claude-mpm-gateway": {')
|
|
64
|
+
print(f' "command": "{sys.executable}",')
|
|
65
|
+
print(f' "args": ["{wrapper_path}"],')
|
|
66
|
+
print(f' "cwd": "{project_root}"')
|
|
67
|
+
print(' }')
|
|
68
|
+
print(' }')
|
|
69
|
+
print(' }')
|
|
70
|
+
print("\n3. Restart Claude Desktop to load the MCP server")
|
|
71
|
+
print("\nTo test the server directly:")
|
|
72
|
+
print(" python scripts/mcp_wrapper.py")
|
|
73
|
+
print("\nTo check running MCP processes:")
|
|
74
|
+
print(" python scripts/check_mcp_processes.py")
|
|
75
|
+
print("\nFor more information, see:")
|
|
76
|
+
print(" https://github.com/anthropics/mcp")
|
|
77
|
+
|
|
78
|
+
return 0
|
|
79
|
+
|
|
80
|
+
# Default behavior: Use the wrapper script for proper environment setup
|
|
81
|
+
if test_mode:
|
|
82
|
+
print("🧪 Starting MCP server in test mode...")
|
|
83
|
+
print(" This will run the server with stdio communication.")
|
|
84
|
+
print(" Press Ctrl+C to stop.\n")
|
|
85
|
+
|
|
86
|
+
try:
|
|
87
|
+
# Instead of running directly, we should use the wrapper script
|
|
88
|
+
# for consistent environment setup
|
|
89
|
+
import subprocess
|
|
90
|
+
from pathlib import Path
|
|
91
|
+
|
|
92
|
+
# Find the wrapper script
|
|
93
|
+
project_root = Path(__file__).parent.parent.parent.parent.parent
|
|
94
|
+
wrapper_script = project_root / "scripts" / "mcp_wrapper.py"
|
|
95
|
+
|
|
96
|
+
if not wrapper_script.exists():
|
|
97
|
+
print(f"❌ Error: Wrapper script not found at {wrapper_script}", file=sys.stderr)
|
|
98
|
+
print("\nPlease ensure the wrapper script is installed.", file=sys.stderr)
|
|
99
|
+
return 1
|
|
100
|
+
|
|
101
|
+
# Run the wrapper script
|
|
102
|
+
print(f"Starting MCP server via wrapper: {wrapper_script}", file=sys.stderr)
|
|
103
|
+
|
|
104
|
+
# Use subprocess to run the wrapper
|
|
105
|
+
# This ensures proper environment setup
|
|
106
|
+
result = subprocess.run(
|
|
107
|
+
[sys.executable, str(wrapper_script)],
|
|
108
|
+
cwd=str(project_root),
|
|
109
|
+
env={**os.environ, "MCP_MODE": "test" if test_mode else "production"}
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
return result.returncode
|
|
113
|
+
|
|
114
|
+
except ImportError as e:
|
|
115
|
+
self.logger.error(f"Failed to import MCP server: {e}")
|
|
116
|
+
# Don't print to stdout as it would interfere with JSON-RPC protocol
|
|
117
|
+
# Log to stderr instead
|
|
118
|
+
import sys
|
|
119
|
+
|
|
120
|
+
print(
|
|
121
|
+
f"❌ Error: Could not import MCP server components: {e}", file=sys.stderr
|
|
122
|
+
)
|
|
123
|
+
print("\nMake sure the MCP package is installed:", file=sys.stderr)
|
|
124
|
+
print(" pip install mcp", file=sys.stderr)
|
|
125
|
+
return 1
|
|
126
|
+
except KeyboardInterrupt:
|
|
127
|
+
# Graceful shutdown
|
|
128
|
+
self.logger.info("MCP server interrupted")
|
|
129
|
+
return 0
|
|
130
|
+
except Exception as e:
|
|
131
|
+
self.logger.error(f"Server error: {e}")
|
|
132
|
+
import sys
|
|
133
|
+
|
|
134
|
+
print(f"❌ Error running server: {e}", file=sys.stderr)
|
|
135
|
+
return 1
|
|
136
|
+
|
|
137
|
+
def stop_server(self, args):
|
|
138
|
+
"""Stop MCP server command."""
|
|
139
|
+
self.logger.info("MCP server stop command called")
|
|
140
|
+
print("🛑 MCP server stop functionality has been simplified")
|
|
141
|
+
print(" This command is now a placeholder - full implementation needed")
|
|
142
|
+
return 0
|
|
143
|
+
|
|
144
|
+
def show_status(self, args):
|
|
145
|
+
"""Show MCP server status command."""
|
|
146
|
+
self.logger.info("MCP server status command called")
|
|
147
|
+
print("📊 MCP server status functionality has been simplified")
|
|
148
|
+
print(" This command is now a placeholder - full implementation needed")
|
|
149
|
+
return 0
|
|
150
|
+
|
|
151
|
+
def cleanup_locks(self, args):
|
|
152
|
+
"""Cleanup MCP server locks command."""
|
|
153
|
+
self.logger.info("MCP server cleanup locks command called")
|
|
154
|
+
print("🧹 MCP server cleanup locks functionality has been simplified")
|
|
155
|
+
print(" This command is now a placeholder - full implementation needed")
|
|
156
|
+
return 0
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""MCP Server launcher script for Claude Desktop.
|
|
3
|
+
|
|
4
|
+
This script launches the MCP gateway server for Claude Desktop integration.
|
|
5
|
+
It handles proper Python path setup and error reporting to stderr.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import sys
|
|
9
|
+
import os
|
|
10
|
+
import logging
|
|
11
|
+
|
|
12
|
+
# Since we're now in src/claude_mpm/scripts/, we need to go up 3 levels to reach the project root
|
|
13
|
+
# Then down into src to add it to the path
|
|
14
|
+
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
|
|
15
|
+
sys.path.insert(0, os.path.join(project_root, 'src'))
|
|
16
|
+
|
|
17
|
+
def setup_logging():
|
|
18
|
+
"""Configure logging to stderr to avoid interfering with stdio protocol."""
|
|
19
|
+
logging.basicConfig(
|
|
20
|
+
level=logging.INFO,
|
|
21
|
+
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
22
|
+
stream=sys.stderr,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
def main():
|
|
26
|
+
"""Main entry point for the MCP server launcher."""
|
|
27
|
+
try:
|
|
28
|
+
# Setup logging first
|
|
29
|
+
setup_logging()
|
|
30
|
+
logger = logging.getLogger("MCPLauncher")
|
|
31
|
+
|
|
32
|
+
# Import modules after path setup
|
|
33
|
+
try:
|
|
34
|
+
from claude_mpm.services.mcp_gateway.server.stdio_server import SimpleMCPServer
|
|
35
|
+
import asyncio
|
|
36
|
+
except ImportError as e:
|
|
37
|
+
logger.error(f"Failed to import required modules: {e}")
|
|
38
|
+
logger.error("Make sure claude-mpm is properly installed")
|
|
39
|
+
sys.exit(1)
|
|
40
|
+
|
|
41
|
+
# Create and run server
|
|
42
|
+
logger.info("Starting MCP Gateway Server...")
|
|
43
|
+
|
|
44
|
+
async def run_server():
|
|
45
|
+
"""Async function to run the server."""
|
|
46
|
+
try:
|
|
47
|
+
server = SimpleMCPServer(name="claude-mpm-gateway", version="1.0.0")
|
|
48
|
+
await server.run()
|
|
49
|
+
except Exception as e:
|
|
50
|
+
logger.error(f"Server runtime error: {e}")
|
|
51
|
+
raise
|
|
52
|
+
|
|
53
|
+
# Run the async server
|
|
54
|
+
asyncio.run(run_server())
|
|
55
|
+
|
|
56
|
+
except KeyboardInterrupt:
|
|
57
|
+
# Clean shutdown on Ctrl+C
|
|
58
|
+
logger.info("Server shutdown requested")
|
|
59
|
+
sys.exit(0)
|
|
60
|
+
except Exception as e:
|
|
61
|
+
# Log any unexpected errors
|
|
62
|
+
logger.error(f"Unexpected error: {e}")
|
|
63
|
+
import traceback
|
|
64
|
+
traceback.print_exc(file=sys.stderr)
|
|
65
|
+
sys.exit(1)
|
|
66
|
+
|
|
67
|
+
if __name__ == "__main__":
|
|
68
|
+
main()
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MCP Wrapper Module
|
|
3
|
+
==================
|
|
4
|
+
|
|
5
|
+
This module provides an importable entry point for the MCP wrapper script.
|
|
6
|
+
It delegates to the actual wrapper script in the scripts directory.
|
|
7
|
+
|
|
8
|
+
WHY: We need this to make the wrapper accessible as a Python module entry point
|
|
9
|
+
for the pyproject.toml scripts configuration.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import sys
|
|
13
|
+
import os
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def entry_point():
|
|
18
|
+
"""Entry point that delegates to the actual wrapper script."""
|
|
19
|
+
# Find the actual wrapper script
|
|
20
|
+
current_file = Path(__file__).resolve()
|
|
21
|
+
project_root = current_file.parent.parent.parent.parent
|
|
22
|
+
wrapper_script = project_root / "scripts" / "mcp_wrapper.py"
|
|
23
|
+
|
|
24
|
+
if not wrapper_script.exists():
|
|
25
|
+
print(f"Error: Wrapper script not found at {wrapper_script}", file=sys.stderr)
|
|
26
|
+
sys.exit(1)
|
|
27
|
+
|
|
28
|
+
# Add the scripts directory to path and import the wrapper
|
|
29
|
+
scripts_dir = str(wrapper_script.parent)
|
|
30
|
+
if scripts_dir not in sys.path:
|
|
31
|
+
sys.path.insert(0, scripts_dir)
|
|
32
|
+
|
|
33
|
+
# Import and run the wrapper
|
|
34
|
+
import mcp_wrapper
|
|
35
|
+
mcp_wrapper.main()
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
if __name__ == "__main__":
|
|
39
|
+
entry_point()
|