claude-mpm 4.1.26__py3-none-any.whl → 4.24.0__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/BUILD_NUMBER +1 -1
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +20 -5
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
- claude_mpm/agents/BASE_DOCUMENTATION.md +53 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/BASE_OPS.md +219 -0
- claude_mpm/agents/BASE_PM.md +420 -158
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +787 -0
- claude_mpm/agents/BASE_QA.md +167 -0
- claude_mpm/agents/BASE_RESEARCH.md +53 -0
- claude_mpm/agents/OUTPUT_STYLE.md +299 -29
- claude_mpm/agents/PM_INSTRUCTIONS.md +1159 -0
- claude_mpm/agents/WORKFLOW.md +355 -191
- claude_mpm/agents/agent_loader.py +40 -10
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/async_agent_loader.py +3 -3
- claude_mpm/agents/base_agent_loader.py +11 -9
- claude_mpm/agents/frontmatter_validator.py +291 -251
- claude_mpm/agents/system_agent_config.py +3 -2
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/agent-manager.json +7 -4
- claude_mpm/agents/templates/{agentic_coder_optimizer.json → agentic-coder-optimizer.json} +33 -7
- claude_mpm/agents/templates/api_qa.json +16 -4
- claude_mpm/agents/templates/circuit_breakers.md +638 -0
- claude_mpm/agents/templates/clerk-ops.json +235 -0
- claude_mpm/agents/templates/code_analyzer.json +10 -4
- claude_mpm/agents/templates/content-agent.json +358 -0
- claude_mpm/agents/templates/dart_engineer.json +307 -0
- claude_mpm/agents/templates/data_engineer.json +87 -14
- claude_mpm/agents/templates/documentation.json +76 -13
- claude_mpm/agents/templates/engineer.json +43 -9
- claude_mpm/agents/templates/gcp_ops_agent.json +253 -0
- claude_mpm/agents/templates/git_file_tracking.md +584 -0
- claude_mpm/agents/templates/golang_engineer.json +270 -0
- claude_mpm/agents/templates/imagemagick.json +5 -2
- claude_mpm/agents/templates/java_engineer.json +346 -0
- claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
- claude_mpm/agents/templates/local_ops_agent.json +1840 -0
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +400 -0
- claude_mpm/agents/templates/memory_manager.json +6 -3
- claude_mpm/agents/templates/nextjs_engineer.json +285 -0
- claude_mpm/agents/templates/ops.json +14 -4
- claude_mpm/agents/templates/php-engineer.json +287 -0
- claude_mpm/agents/templates/pm_examples.md +474 -0
- claude_mpm/agents/templates/pm_red_flags.md +262 -0
- claude_mpm/agents/templates/product_owner.json +338 -0
- claude_mpm/agents/templates/project_organizer.json +19 -5
- claude_mpm/agents/templates/prompt-engineer.json +737 -0
- claude_mpm/agents/templates/python_engineer.json +387 -0
- claude_mpm/agents/templates/qa.json +25 -5
- claude_mpm/agents/templates/react_engineer.json +239 -0
- claude_mpm/agents/templates/refactoring_engineer.json +15 -5
- claude_mpm/agents/templates/research.json +46 -21
- claude_mpm/agents/templates/response_format.md +583 -0
- claude_mpm/agents/templates/ruby-engineer.json +280 -0
- claude_mpm/agents/templates/rust_engineer.json +275 -0
- claude_mpm/agents/templates/security.json +59 -10
- claude_mpm/agents/templates/svelte-engineer.json +225 -0
- claude_mpm/agents/templates/tauri_engineer.json +274 -0
- claude_mpm/agents/templates/ticketing.json +16 -7
- claude_mpm/agents/templates/typescript_engineer.json +285 -0
- claude_mpm/agents/templates/validation_templates.md +312 -0
- claude_mpm/agents/templates/vercel_ops_agent.json +164 -33
- claude_mpm/agents/templates/version_control.json +16 -4
- claude_mpm/agents/templates/web_qa.json +167 -21
- claude_mpm/agents/templates/web_ui.json +18 -5
- claude_mpm/cli/__init__.py +38 -378
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_manager.py +675 -20
- claude_mpm/cli/commands/agent_state_manager.py +186 -0
- claude_mpm/cli/commands/agents.py +722 -150
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- claude_mpm/cli/commands/aggregate.py +10 -6
- claude_mpm/cli/commands/analyze.py +15 -10
- claude_mpm/cli/commands/analyze_code.py +8 -4
- claude_mpm/cli/commands/auto_configure.py +570 -0
- claude_mpm/cli/commands/cleanup.py +12 -12
- claude_mpm/cli/commands/config.py +47 -13
- claude_mpm/cli/commands/configure.py +469 -1064
- claude_mpm/cli/commands/configure_agent_display.py +261 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +167 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/dashboard.py +50 -52
- claude_mpm/cli/commands/debug.py +7 -7
- claude_mpm/cli/commands/doctor.py +43 -7
- claude_mpm/cli/commands/info.py +3 -4
- claude_mpm/cli/commands/local_deploy.py +537 -0
- claude_mpm/cli/commands/mcp.py +17 -10
- claude_mpm/cli/commands/mcp_command_router.py +11 -0
- claude_mpm/cli/commands/mcp_config.py +154 -0
- claude_mpm/cli/commands/mcp_external_commands.py +249 -0
- claude_mpm/cli/commands/mcp_install_commands.py +101 -32
- claude_mpm/cli/commands/mcp_pipx_config.py +2 -2
- claude_mpm/cli/commands/mcp_setup_external.py +868 -0
- claude_mpm/cli/commands/memory.py +55 -21
- claude_mpm/cli/commands/monitor.py +160 -70
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +525 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +114 -4
- claude_mpm/cli/commands/run.py +169 -42
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skills.py +488 -0
- claude_mpm/cli/commands/uninstall.py +176 -0
- claude_mpm/cli/commands/upgrade.py +152 -0
- claude_mpm/cli/commands/verify.py +119 -0
- claude_mpm/cli/executor.py +204 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +962 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parser.py +79 -2
- claude_mpm/cli/parsers/__init__.py +7 -1
- claude_mpm/cli/parsers/agent_manager_parser.py +161 -1
- claude_mpm/cli/parsers/agents_parser.py +116 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +143 -3
- claude_mpm/cli/parsers/configure_parser.py +11 -15
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mcp_parser.py +15 -0
- claude_mpm/cli/parsers/monitor_parser.py +12 -2
- claude_mpm/cli/parsers/mpm_init_parser.py +179 -9
- claude_mpm/cli/parsers/run_parser.py +5 -0
- claude_mpm/cli/parsers/search_parser.py +245 -0
- claude_mpm/cli/parsers/skills_parser.py +137 -0
- claude_mpm/cli/shared/argument_patterns.py +20 -13
- claude_mpm/cli/shared/base_command.py +2 -2
- claude_mpm/cli/shared/output_formatters.py +28 -19
- claude_mpm/cli/startup.py +562 -0
- claude_mpm/cli/startup_logging.py +179 -13
- claude_mpm/cli/utils.py +53 -2
- claude_mpm/commands/mpm-agents-detect.md +168 -0
- claude_mpm/commands/mpm-agents-recommend.md +214 -0
- claude_mpm/commands/mpm-agents.md +118 -8
- claude_mpm/commands/mpm-auto-configure.md +269 -0
- claude_mpm/commands/mpm-config.md +137 -14
- claude_mpm/commands/mpm-help.md +285 -5
- claude_mpm/commands/mpm-init.md +374 -15
- claude_mpm/commands/mpm-monitor.md +409 -0
- claude_mpm/commands/mpm-organize.md +295 -0
- claude_mpm/commands/mpm-resume.md +372 -0
- claude_mpm/commands/mpm-status.md +71 -9
- claude_mpm/commands/mpm-tickets.md +56 -7
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +2 -0
- claude_mpm/config/agent_config.py +4 -4
- claude_mpm/config/experimental_features.py +7 -7
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/config/paths.py +3 -2
- claude_mpm/config/socketio_config.py +3 -3
- claude_mpm/constants.py +15 -1
- claude_mpm/core/__init__.py +53 -17
- claude_mpm/core/agent_name_normalizer.py +3 -2
- claude_mpm/core/agent_registry.py +2 -2
- claude_mpm/core/agent_session_manager.py +10 -10
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/base_service.py +33 -23
- claude_mpm/core/cache.py +9 -9
- claude_mpm/core/claude_runner.py +19 -8
- claude_mpm/core/config.py +85 -8
- claude_mpm/core/config_aliases.py +7 -6
- claude_mpm/core/constants.py +65 -0
- claude_mpm/core/container.py +11 -5
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/error_handler.py +623 -0
- claude_mpm/core/factories.py +1 -1
- claude_mpm/core/file_utils.py +764 -0
- claude_mpm/core/framework/__init__.py +38 -0
- claude_mpm/core/framework/formatters/__init__.py +11 -0
- claude_mpm/core/framework/formatters/capability_generator.py +367 -0
- claude_mpm/core/framework/formatters/content_formatter.py +288 -0
- claude_mpm/core/framework/formatters/context_generator.py +185 -0
- claude_mpm/core/framework/loaders/__init__.py +13 -0
- claude_mpm/core/framework/loaders/agent_loader.py +210 -0
- claude_mpm/core/framework/loaders/file_loader.py +223 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +161 -0
- claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
- claude_mpm/core/framework/processors/__init__.py +11 -0
- claude_mpm/core/framework/processors/memory_processor.py +230 -0
- claude_mpm/core/framework/processors/metadata_processor.py +146 -0
- claude_mpm/core/framework/processors/template_processor.py +244 -0
- claude_mpm/core/framework_loader.py +321 -1631
- claude_mpm/core/hook_manager.py +8 -6
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +4 -3
- claude_mpm/core/interactive_session.py +55 -8
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/lazy.py +3 -3
- claude_mpm/core/log_manager.py +92 -23
- claude_mpm/core/logger.py +19 -14
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/oneshot_session.py +51 -7
- claude_mpm/core/optimized_agent_loader.py +9 -9
- claude_mpm/core/optimized_startup.py +1 -1
- claude_mpm/core/output_style_manager.py +12 -192
- claude_mpm/core/pm_hook_interceptor.py +18 -12
- claude_mpm/core/service_registry.py +7 -3
- claude_mpm/core/session_manager.py +14 -12
- claude_mpm/core/shared/config_loader.py +1 -1
- claude_mpm/core/socketio_pool.py +15 -15
- claude_mpm/core/tool_access_control.py +3 -2
- claude_mpm/core/types.py +4 -11
- claude_mpm/core/typing_utils.py +7 -6
- claude_mpm/core/unified_agent_registry.py +115 -11
- claude_mpm/core/unified_config.py +6 -6
- claude_mpm/core/unified_paths.py +23 -20
- claude_mpm/dashboard/analysis_runner.py +4 -4
- claude_mpm/dashboard/api/simple_directory.py +261 -0
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +188 -0
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +156 -0
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +38 -0
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +92 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +248 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +61 -0
- claude_mpm/dashboard/static/archive/test_activity_connection.html +179 -0
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +68 -0
- claude_mpm/dashboard/static/archive/test_dashboard.html +409 -0
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +519 -0
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +181 -0
- claude_mpm/dashboard/static/archive/test_file_data.html +315 -0
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +243 -0
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +234 -0
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +117 -0
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +115 -0
- claude_mpm/dashboard/static/archive/test_file_viewer.html +224 -0
- claude_mpm/dashboard/static/archive/test_final_activity.html +220 -0
- claude_mpm/dashboard/static/archive/test_tab_fix.html +139 -0
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/built/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +777 -0
- claude_mpm/dashboard/static/built/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/built/components/build-tracker.js +333 -0
- claude_mpm/dashboard/static/built/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +353 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +235 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +409 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +435 -0
- claude_mpm/dashboard/static/built/components/code-tree.js +1 -1
- claude_mpm/dashboard/static/built/components/code-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/connection-debug.js +654 -0
- claude_mpm/dashboard/static/built/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/built/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/built/components/file-viewer.js +2 -0
- claude_mpm/dashboard/static/built/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/nav-bar.js +145 -0
- claude_mpm/dashboard/static/built/components/page-structure.js +429 -0
- claude_mpm/dashboard/static/built/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/built/connection-manager.js +536 -0
- claude_mpm/dashboard/static/built/dashboard.js +1 -1
- claude_mpm/dashboard/static/built/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/built/react/events.js +30 -0
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +396 -0
- claude_mpm/dashboard/static/built/shared/event-bus.js +330 -0
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +540 -0
- claude_mpm/dashboard/static/built/shared/logger.js +385 -0
- claude_mpm/dashboard/static/built/shared/page-structure.js +249 -0
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +253 -0
- claude_mpm/dashboard/static/built/socket-client.js +1 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/css/dashboard.css +588 -6
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/dist/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/dist/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/dist/dashboard.js +1 -1
- claude_mpm/dashboard/static/dist/react/events.js +30 -0
- claude_mpm/dashboard/static/dist/socket-client.js +1 -1
- claude_mpm/dashboard/static/events.html +607 -0
- claude_mpm/dashboard/static/index.html +635 -0
- claude_mpm/dashboard/static/js/components/activity-tree.js +3 -17
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +4 -1
- claude_mpm/dashboard/static/js/components/agent-inference.js +3 -0
- claude_mpm/dashboard/static/js/components/build-tracker.js +8 -0
- claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/js/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
- claude_mpm/dashboard/static/js/components/event-viewer.js +39 -2
- claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +30 -10
- claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +26 -0
- claude_mpm/dashboard/static/js/components/session-manager.js +7 -7
- claude_mpm/dashboard/static/js/components/socket-manager.js +4 -0
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +455 -23
- claude_mpm/dashboard/static/js/components/working-directory.js +44 -9
- claude_mpm/dashboard/static/js/dashboard.js +245 -132
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +396 -0
- claude_mpm/dashboard/static/js/shared/event-bus.js +330 -0
- claude_mpm/dashboard/static/js/shared/logger.js +385 -0
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +253 -0
- claude_mpm/dashboard/static/js/socket-client.js +49 -22
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +562 -0
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/legacy/activity.html +736 -0
- claude_mpm/dashboard/static/legacy/agents.html +786 -0
- claude_mpm/dashboard/static/legacy/files.html +747 -0
- claude_mpm/dashboard/static/legacy/tools.html +831 -0
- claude_mpm/dashboard/static/monitors.html +431 -0
- claude_mpm/dashboard/static/production/events.html +659 -0
- claude_mpm/dashboard/static/production/main.html +698 -0
- claude_mpm/dashboard/static/production/monitors.html +483 -0
- claude_mpm/dashboard/static/socket.io.min.js +7 -0
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
- claude_mpm/dashboard/static/test-archive/dashboard.html +635 -0
- claude_mpm/dashboard/static/test-archive/debug-events.html +147 -0
- claude_mpm/dashboard/static/test-archive/test-navigation.html +256 -0
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +180 -0
- claude_mpm/dashboard/static/test-archive/test_debug.html +25 -0
- claude_mpm/dashboard/templates/code_simple.html +153 -0
- claude_mpm/dashboard/templates/index.html +112 -109
- claude_mpm/experimental/cli_enhancements.py +4 -2
- claude_mpm/generators/agent_profile_generator.py +5 -3
- claude_mpm/hooks/__init__.py +37 -1
- claude_mpm/hooks/base_hook.py +5 -4
- claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
- claude_mpm/hooks/claude_hooks/event_handlers.py +21 -18
- claude_mpm/hooks/claude_hooks/hook_handler.py +29 -22
- claude_mpm/hooks/claude_hooks/installer.py +67 -22
- claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
- claude_mpm/hooks/claude_hooks/response_tracking.py +57 -17
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +62 -64
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +140 -76
- claude_mpm/hooks/claude_hooks/services/state_manager.py +11 -9
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
- claude_mpm/hooks/failure_learning/__init__.py +60 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +235 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +217 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +286 -0
- claude_mpm/hooks/instruction_reinforcement.py +301 -0
- claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
- claude_mpm/hooks/kuzu_memory_hook.py +386 -0
- claude_mpm/hooks/kuzu_response_hook.py +183 -0
- claude_mpm/hooks/memory_integration_hook.py +1 -1
- claude_mpm/hooks/session_resume_hook.py +121 -0
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/hooks/tool_call_interceptor.py +8 -5
- claude_mpm/hooks/validation_hooks.py +3 -3
- claude_mpm/init.py +23 -4
- claude_mpm/models/agent_session.py +8 -6
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/scripts/claude-hook-handler.sh +33 -7
- claude_mpm/scripts/launch_monitor.py +85 -0
- claude_mpm/scripts/mcp_server.py +3 -5
- claude_mpm/scripts/mpm_doctor.py +3 -2
- claude_mpm/scripts/socketio_daemon.py +159 -512
- claude_mpm/services/__init__.py +144 -160
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/agent_builder.py +13 -11
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_deployment.py +38 -15
- claude_mpm/services/agents/deployment/agent_discovery_service.py +125 -7
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +5 -5
- claude_mpm/services/agents/deployment/agent_format_converter.py +56 -12
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +4 -2
- claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_record_service.py +4 -4
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +715 -47
- claude_mpm/services/agents/deployment/agent_validator.py +31 -7
- claude_mpm/services/agents/deployment/agent_version_manager.py +8 -5
- claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
- claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
- claude_mpm/services/agents/deployment/deployment_config_loader.py +131 -7
- claude_mpm/services/agents/deployment/deployment_type_detector.py +10 -14
- claude_mpm/services/agents/deployment/deployment_wrapper.py +58 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
- claude_mpm/services/agents/deployment/local_template_deployment.py +360 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +134 -38
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +8 -7
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +7 -5
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +9 -6
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/template_validator.py +64 -44
- claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
- claude_mpm/services/agents/loading/agent_profile_loader.py +10 -9
- claude_mpm/services/agents/loading/base_agent_manager.py +16 -6
- claude_mpm/services/agents/loading/framework_agent_loader.py +2 -2
- claude_mpm/services/agents/local_template_manager.py +744 -0
- claude_mpm/services/agents/management/agent_capabilities_generator.py +3 -2
- claude_mpm/services/agents/management/agent_management_service.py +5 -5
- claude_mpm/services/agents/memory/agent_memory_manager.py +32 -29
- claude_mpm/services/agents/memory/content_manager.py +17 -9
- claude_mpm/services/agents/memory/memory_categorization_service.py +4 -2
- claude_mpm/services/agents/memory/memory_file_service.py +32 -6
- claude_mpm/services/agents/memory/memory_format_service.py +6 -4
- claude_mpm/services/agents/memory/memory_limits_service.py +4 -2
- claude_mpm/services/agents/memory/template_generator.py +3 -3
- claude_mpm/services/agents/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +615 -0
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +3 -3
- claude_mpm/services/agents/registry/modification_tracker.py +30 -19
- claude_mpm/services/async_session_logger.py +141 -98
- claude_mpm/services/claude_session_logger.py +82 -74
- claude_mpm/services/cli/agent_cleanup_service.py +5 -0
- claude_mpm/services/cli/agent_listing_service.py +5 -5
- claude_mpm/services/cli/agent_validation_service.py +3 -1
- claude_mpm/services/cli/memory_crud_service.py +12 -7
- claude_mpm/services/cli/memory_output_formatter.py +2 -2
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +104 -13
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +372 -0
- claude_mpm/services/cli/startup_checker.py +13 -10
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +9 -7
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/base.py +26 -11
- claude_mpm/services/core/interfaces/__init__.py +90 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- claude_mpm/services/core/interfaces/health.py +172 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/project.py +121 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/memory_manager.py +92 -47
- claude_mpm/services/core/models/__init__.py +79 -0
- claude_mpm/services/core/models/agent_config.py +384 -0
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +239 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/models/toolchain.py +306 -0
- claude_mpm/services/core/path_resolver.py +36 -14
- claude_mpm/services/diagnostics/__init__.py +2 -2
- claude_mpm/services/diagnostics/checks/__init__.py +4 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +30 -32
- claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
- claude_mpm/services/diagnostics/checks/common_issues_check.py +28 -27
- claude_mpm/services/diagnostics/checks/configuration_check.py +26 -25
- claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
- claude_mpm/services/diagnostics/checks/installation_check.py +165 -60
- claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
- claude_mpm/services/diagnostics/checks/mcp_check.py +57 -43
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1066 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +24 -23
- claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
- claude_mpm/services/diagnostics/diagnostic_runner.py +22 -13
- claude_mpm/services/diagnostics/doctor_reporter.py +275 -47
- claude_mpm/services/diagnostics/models.py +37 -21
- claude_mpm/services/event_aggregator.py +5 -3
- claude_mpm/services/event_bus/direct_relay.py +8 -4
- claude_mpm/services/event_bus/event_bus.py +51 -9
- claude_mpm/services/event_bus/relay.py +33 -14
- claude_mpm/services/events/consumers/dead_letter.py +7 -5
- claude_mpm/services/events/core.py +5 -6
- claude_mpm/services/events/producers/hook.py +6 -6
- claude_mpm/services/events/producers/system.py +8 -8
- claude_mpm/services/exceptions.py +5 -5
- claude_mpm/services/framework_claude_md_generator/__init__.py +1 -1
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +5 -5
- claude_mpm/services/framework_claude_md_generator/content_validator.py +2 -2
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +3 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
- claude_mpm/services/framework_claude_md_generator/version_manager.py +1 -1
- claude_mpm/services/hook_installer_service.py +506 -0
- claude_mpm/services/hook_service.py +5 -6
- claude_mpm/services/infrastructure/context_preservation.py +13 -11
- claude_mpm/services/infrastructure/daemon_manager.py +9 -9
- claude_mpm/services/infrastructure/logging.py +2 -2
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -1
- claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
- claude_mpm/services/infrastructure/monitoring/base.py +5 -13
- claude_mpm/services/infrastructure/monitoring/network.py +7 -6
- claude_mpm/services/infrastructure/monitoring/process.py +13 -12
- claude_mpm/services/infrastructure/monitoring/resources.py +8 -7
- claude_mpm/services/infrastructure/monitoring/service.py +16 -15
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/local_ops/__init__.py +165 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +28 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +430 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +1612 -0
- claude_mpm/services/mcp_gateway/__init__.py +97 -93
- claude_mpm/services/mcp_gateway/auto_configure.py +43 -38
- claude_mpm/services/mcp_gateway/config/config_loader.py +3 -3
- claude_mpm/services/mcp_gateway/config/configuration.py +23 -4
- claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
- claude_mpm/services/mcp_gateway/core/base.py +20 -33
- claude_mpm/services/mcp_gateway/core/process_pool.py +585 -31
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +2 -2
- claude_mpm/services/mcp_gateway/core/startup_verification.py +3 -3
- claude_mpm/services/mcp_gateway/main.py +90 -15
- claude_mpm/services/mcp_gateway/registry/service_registry.py +4 -2
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +12 -9
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +4 -4
- claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -15
- claude_mpm/services/mcp_gateway/tools/__init__.py +14 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +10 -9
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +654 -0
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +36 -34
- claude_mpm/services/mcp_gateway/tools/hello_world.py +8 -8
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +551 -0
- claude_mpm/services/mcp_gateway/utils/__init__.py +14 -0
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +160 -0
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +170 -0
- claude_mpm/services/mcp_service_verifier.py +729 -0
- claude_mpm/services/memory/builder.py +9 -8
- claude_mpm/services/memory/cache/shared_prompt_cache.py +2 -1
- claude_mpm/services/memory/cache/simple_cache.py +2 -2
- claude_mpm/services/memory/failure_tracker.py +578 -0
- claude_mpm/services/memory/indexed_memory.py +8 -8
- claude_mpm/services/memory/optimizer.py +8 -9
- claude_mpm/services/memory/router.py +3 -3
- claude_mpm/services/memory_hook_service.py +165 -4
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +453 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +671 -0
- claude_mpm/services/monitor/daemon_manager.py +963 -0
- claude_mpm/services/monitor/event_emitter.py +350 -0
- claude_mpm/services/monitor/handlers/__init__.py +21 -0
- claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
- claude_mpm/services/monitor/handlers/dashboard.py +299 -0
- claude_mpm/services/monitor/handlers/file.py +264 -0
- claude_mpm/services/monitor/handlers/hooks.py +512 -0
- claude_mpm/services/monitor/management/__init__.py +18 -0
- claude_mpm/services/monitor/management/health.py +124 -0
- claude_mpm/services/monitor/management/lifecycle.py +724 -0
- claude_mpm/services/monitor/server.py +817 -0
- claude_mpm/services/monitor_build_service.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/orphan_detection.py +786 -0
- claude_mpm/services/port_manager.py +2 -2
- claude_mpm/services/project/__init__.py +23 -0
- claude_mpm/services/project/analyzer.py +3 -3
- claude_mpm/services/project/architecture_analyzer.py +5 -5
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +4 -4
- claude_mpm/services/project/detection_strategies.py +719 -0
- claude_mpm/services/project/documentation_manager.py +553 -0
- claude_mpm/services/project/enhanced_analyzer.py +572 -0
- claude_mpm/services/project/metrics_collector.py +4 -4
- claude_mpm/services/project/project_organizer.py +1005 -0
- claude_mpm/services/project/registry.py +13 -7
- claude_mpm/services/project/toolchain_analyzer.py +581 -0
- claude_mpm/services/project_port_allocator.py +596 -0
- claude_mpm/services/response_tracker.py +21 -10
- claude_mpm/services/runner_configuration_service.py +1 -0
- claude_mpm/services/self_upgrade_service.py +500 -0
- claude_mpm/services/session_management_service.py +7 -5
- claude_mpm/services/session_manager.py +380 -0
- claude_mpm/services/shared/__init__.py +2 -1
- claude_mpm/services/shared/async_service_base.py +16 -27
- claude_mpm/services/shared/config_service_base.py +17 -14
- claude_mpm/services/shared/lifecycle_service_base.py +1 -14
- claude_mpm/services/shared/service_factory.py +8 -5
- claude_mpm/services/socketio/client_proxy.py +60 -5
- claude_mpm/services/socketio/dashboard_server.py +361 -0
- claude_mpm/services/socketio/event_normalizer.py +10 -6
- claude_mpm/services/socketio/handlers/__init__.py +5 -2
- claude_mpm/services/socketio/handlers/base.py +2 -2
- claude_mpm/services/socketio/handlers/code_analysis.py +90 -27
- claude_mpm/services/socketio/handlers/connection.py +21 -40
- claude_mpm/services/socketio/handlers/connection_handler.py +13 -10
- claude_mpm/services/socketio/handlers/file.py +46 -10
- claude_mpm/services/socketio/handlers/git.py +8 -8
- claude_mpm/services/socketio/handlers/hook.py +29 -17
- claude_mpm/services/socketio/handlers/registry.py +4 -2
- claude_mpm/services/socketio/monitor_client.py +364 -0
- claude_mpm/services/socketio/server/broadcaster.py +9 -7
- claude_mpm/services/socketio/server/connection_manager.py +2 -2
- claude_mpm/services/socketio/server/core.py +141 -4
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +23 -21
- claude_mpm/services/socketio_client_manager.py +4 -4
- claude_mpm/services/subprocess_launcher_service.py +19 -15
- claude_mpm/services/system_instructions_service.py +2 -2
- claude_mpm/services/ticket_services/formatter_service.py +1 -1
- claude_mpm/services/ticket_services/validation_service.py +5 -5
- claude_mpm/services/unified/__init__.py +65 -0
- claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +903 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +746 -0
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
- claude_mpm/services/unified/config_strategies/__init__.py +175 -0
- claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
- claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
- claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
- claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
- claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
- claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
- claude_mpm/services/unified/deployment_strategies/base.py +553 -0
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
- claude_mpm/services/unified/deployment_strategies/local.py +607 -0
- claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
- claude_mpm/services/unified/deployment_strategies/vercel.py +475 -0
- claude_mpm/services/unified/interfaces.py +475 -0
- claude_mpm/services/unified/migration.py +509 -0
- claude_mpm/services/unified/strategies.py +534 -0
- claude_mpm/services/unified/unified_analyzer.py +542 -0
- claude_mpm/services/unified/unified_config.py +691 -0
- claude_mpm/services/unified/unified_deployment.py +470 -0
- claude_mpm/services/utility_service.py +6 -3
- claude_mpm/services/version_control/branch_strategy.py +2 -2
- claude_mpm/services/version_control/conflict_resolution.py +8 -4
- claude_mpm/services/version_control/git_operations.py +26 -24
- claude_mpm/services/version_control/semantic_versioning.py +14 -14
- claude_mpm/services/version_control/version_parser.py +14 -11
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/skills/__init__.py +42 -0
- claude_mpm/skills/agent_skills_injector.py +324 -0
- claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +573 -0
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +310 -0
- claude_mpm/skills/skills_registry.py +348 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/state_storage.py +31 -31
- claude_mpm/tools/__main__.py +1 -1
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/tools/code_tree_builder.py +6 -6
- claude_mpm/tools/code_tree_events.py +14 -10
- claude_mpm/tools/socketio_debug.py +11 -11
- claude_mpm/utils/agent_dependency_loader.py +108 -27
- claude_mpm/utils/common.py +544 -0
- claude_mpm/utils/config_manager.py +12 -6
- claude_mpm/utils/database_connector.py +298 -0
- claude_mpm/utils/dependency_cache.py +2 -2
- claude_mpm/utils/dependency_strategies.py +15 -10
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/environment_context.py +4 -3
- claude_mpm/utils/error_handler.py +5 -3
- claude_mpm/utils/file_utils.py +13 -14
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/path_operations.py +7 -4
- claude_mpm/utils/robust_installer.py +133 -24
- claude_mpm/utils/session_logging.py +2 -2
- claude_mpm/utils/subprocess_utils.py +9 -8
- claude_mpm/validation/agent_validator.py +6 -6
- claude_mpm/validation/frontmatter_validator.py +6 -6
- claude_mpm-4.24.0.dist-info/METADATA +675 -0
- claude_mpm-4.24.0.dist-info/RECORD +1018 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -261
- claude_mpm/agents/templates/agent-manager.md +0 -619
- claude_mpm/cli/commands/configure_tui.py +0 -1927
- claude_mpm/cli/commands/mpm_init.py +0 -594
- claude_mpm/cli/commands/socketio_monitor.py +0 -233
- claude_mpm/dashboard/static/css/code-tree.css +0 -1408
- claude_mpm/dashboard/static/js/components/code-tree.js +0 -3220
- claude_mpm/dashboard/static/js/components/code-viewer.js +0 -480
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1040
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
- claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
- claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
- claude_mpm/scripts/socketio_server_manager.py +0 -349
- claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
- claude_mpm/services/cli/dashboard_launcher.py +0 -423
- claude_mpm/services/cli/socketio_manager.py +0 -537
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -286
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -645
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -602
- claude_mpm/services/project/analyzer_refactored.py +0 -450
- claude_mpm/tools/code_tree_analyzer.py +0 -1693
- claude_mpm-4.1.26.dist-info/METADATA +0 -332
- claude_mpm-4.1.26.dist-info/RECORD +0 -606
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MCP Configuration Command
|
|
3
|
+
=========================
|
|
4
|
+
|
|
5
|
+
Command for managing MCP service configurations with pipx preference.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
from ...services.mcp_config_manager import MCPConfigManager
|
|
12
|
+
from ..shared import BaseCommand, CommandResult
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class MCPConfigCommand(BaseCommand):
|
|
16
|
+
"""Manage MCP service configurations."""
|
|
17
|
+
|
|
18
|
+
def __init__(self):
|
|
19
|
+
super().__init__("mcp-config")
|
|
20
|
+
|
|
21
|
+
def run(self, args) -> CommandResult:
|
|
22
|
+
"""Execute the MCP configuration command."""
|
|
23
|
+
manager = MCPConfigManager()
|
|
24
|
+
|
|
25
|
+
# Handle different sub-commands
|
|
26
|
+
if hasattr(args, "mcp_config_command"):
|
|
27
|
+
command = args.mcp_config_command
|
|
28
|
+
|
|
29
|
+
if command == "detect":
|
|
30
|
+
return self._detect_services(manager)
|
|
31
|
+
if command == "update":
|
|
32
|
+
return self._update_config(manager, args)
|
|
33
|
+
if command == "validate":
|
|
34
|
+
return self._validate_config(manager)
|
|
35
|
+
if command == "install":
|
|
36
|
+
return self._install_services(manager)
|
|
37
|
+
return self._show_status(manager)
|
|
38
|
+
return self._show_status(manager)
|
|
39
|
+
|
|
40
|
+
def _detect_services(self, manager: MCPConfigManager) -> CommandResult:
|
|
41
|
+
"""Detect available MCP services."""
|
|
42
|
+
results = {}
|
|
43
|
+
for service in manager.PIPX_SERVICES:
|
|
44
|
+
path = manager.detect_service_path(service)
|
|
45
|
+
results[service] = {
|
|
46
|
+
"found": path is not None,
|
|
47
|
+
"path": path or "Not found",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return CommandResult(
|
|
51
|
+
success=True,
|
|
52
|
+
message="MCP service detection complete",
|
|
53
|
+
data=results,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def _update_config(self, manager: MCPConfigManager, args) -> CommandResult:
|
|
57
|
+
"""Update MCP configuration."""
|
|
58
|
+
force_pipx = getattr(args, "force_pipx", True)
|
|
59
|
+
success, message = manager.update_mcp_config(force_pipx=force_pipx)
|
|
60
|
+
|
|
61
|
+
if success:
|
|
62
|
+
# Show the updated configuration
|
|
63
|
+
config_path = Path.cwd() / ".mcp.json"
|
|
64
|
+
if config_path.exists():
|
|
65
|
+
with config_path.open() as f:
|
|
66
|
+
config = json.load(f)
|
|
67
|
+
return CommandResult(
|
|
68
|
+
success=True,
|
|
69
|
+
message=message,
|
|
70
|
+
data=config,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
return CommandResult(
|
|
74
|
+
success=success,
|
|
75
|
+
message=message,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
def _validate_config(self, manager: MCPConfigManager) -> CommandResult:
|
|
79
|
+
"""Validate current MCP configuration."""
|
|
80
|
+
results = manager.validate_configuration()
|
|
81
|
+
|
|
82
|
+
all_valid = all(results.values()) if results else False
|
|
83
|
+
message = (
|
|
84
|
+
"All MCP services are properly configured"
|
|
85
|
+
if all_valid
|
|
86
|
+
else "Some MCP services are not accessible"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
return CommandResult(
|
|
90
|
+
success=all_valid,
|
|
91
|
+
message=message,
|
|
92
|
+
data=results,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
def _install_services(self, manager: MCPConfigManager) -> CommandResult:
|
|
96
|
+
"""Install missing MCP services."""
|
|
97
|
+
success, message = manager.install_missing_services()
|
|
98
|
+
return CommandResult(
|
|
99
|
+
success=success,
|
|
100
|
+
message=message,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
def _show_status(self, manager: MCPConfigManager) -> CommandResult:
|
|
104
|
+
"""Show current MCP configuration status."""
|
|
105
|
+
# Detect services
|
|
106
|
+
detected = {}
|
|
107
|
+
for service in manager.PIPX_SERVICES:
|
|
108
|
+
path = manager.detect_service_path(service)
|
|
109
|
+
detected[service] = {
|
|
110
|
+
"installed": path is not None,
|
|
111
|
+
"path": path or "Not installed",
|
|
112
|
+
"via_pipx": path and "pipx" in path if path else False,
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
# Validate configuration
|
|
116
|
+
config_valid = manager.validate_configuration()
|
|
117
|
+
|
|
118
|
+
# Read current config
|
|
119
|
+
config_path = Path.cwd() / ".mcp.json"
|
|
120
|
+
current_config = {}
|
|
121
|
+
if config_path.exists():
|
|
122
|
+
try:
|
|
123
|
+
with config_path.open() as f:
|
|
124
|
+
current_config = json.load(f)
|
|
125
|
+
except Exception:
|
|
126
|
+
pass
|
|
127
|
+
|
|
128
|
+
status_data = {
|
|
129
|
+
"services": detected,
|
|
130
|
+
"configuration_valid": config_valid,
|
|
131
|
+
"config_file_exists": config_path.exists(),
|
|
132
|
+
"configured_services": list(current_config.get("mcpServers", {}).keys()),
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return CommandResult(
|
|
136
|
+
success=True,
|
|
137
|
+
message="MCP configuration status",
|
|
138
|
+
data=status_data,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def manage_mcp_config(args):
|
|
143
|
+
"""
|
|
144
|
+
Entry point for MCP configuration command.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
args: Parsed command line arguments
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
Exit code
|
|
151
|
+
"""
|
|
152
|
+
command = MCPConfigCommand()
|
|
153
|
+
result = command.execute(args)
|
|
154
|
+
return result.exit_code
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"""MCP external services command implementations.
|
|
2
|
+
|
|
3
|
+
This module provides commands for managing external MCP services
|
|
4
|
+
like mcp-vector-search and mcp-browser.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class MCPExternalCommands:
|
|
9
|
+
"""Handles MCP external service commands."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, logger):
|
|
12
|
+
"""Initialize the MCP external commands handler."""
|
|
13
|
+
self.logger = logger
|
|
14
|
+
|
|
15
|
+
def manage_external(self, args):
|
|
16
|
+
"""Manage external MCP services.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
args: Parsed command line arguments
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
int: Exit code (0 for success, non-zero for failure)
|
|
23
|
+
"""
|
|
24
|
+
# Get the external subcommand if it exists
|
|
25
|
+
external_action = getattr(args, "external_action", None)
|
|
26
|
+
|
|
27
|
+
if not external_action:
|
|
28
|
+
# No subcommand provided, show help
|
|
29
|
+
self._show_help()
|
|
30
|
+
return 0
|
|
31
|
+
|
|
32
|
+
# Route to appropriate handler
|
|
33
|
+
if external_action == "setup":
|
|
34
|
+
return self._setup_external(args)
|
|
35
|
+
if external_action == "list":
|
|
36
|
+
return self._list_external(args)
|
|
37
|
+
if external_action == "check":
|
|
38
|
+
return self._check_external(args)
|
|
39
|
+
if external_action == "fix-browser":
|
|
40
|
+
return self._fix_browser(args)
|
|
41
|
+
if external_action == "detect":
|
|
42
|
+
return self._detect_and_update(args)
|
|
43
|
+
print(f"Unknown external subcommand: {external_action}")
|
|
44
|
+
self._show_help()
|
|
45
|
+
return 1
|
|
46
|
+
|
|
47
|
+
def _setup_external(self, args):
|
|
48
|
+
"""Setup external MCP services in Claude Code.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
args: Command line arguments
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
int: Exit code
|
|
55
|
+
"""
|
|
56
|
+
print("📦 Setting up External MCP Services")
|
|
57
|
+
print("=" * 50)
|
|
58
|
+
|
|
59
|
+
from .mcp_setup_external import MCPExternalServicesSetup
|
|
60
|
+
|
|
61
|
+
setup = MCPExternalServicesSetup(self.logger)
|
|
62
|
+
|
|
63
|
+
# First install Python packages
|
|
64
|
+
print("\n1️⃣ Installing Python packages...")
|
|
65
|
+
if not setup.check_and_install_pip_packages():
|
|
66
|
+
print("⚠️ Some Python packages could not be installed")
|
|
67
|
+
print(" You may need to install them manually:")
|
|
68
|
+
print(" pip install mcp-vector-search mcp-browser")
|
|
69
|
+
|
|
70
|
+
# Then configure in Claude Code
|
|
71
|
+
print("\n2️⃣ Configuring Claude Code...")
|
|
72
|
+
force = getattr(args, "force", False)
|
|
73
|
+
if setup.setup_external_services(force=force):
|
|
74
|
+
print("\n✅ External services setup completed successfully!")
|
|
75
|
+
print("\nNext steps:")
|
|
76
|
+
print("1. Restart Claude Code to load the new services")
|
|
77
|
+
print("2. Check status with: claude-mpm mcp external list")
|
|
78
|
+
print("3. The services will be available in Claude as separate MCP servers")
|
|
79
|
+
return 0
|
|
80
|
+
print("\n❌ Failed to setup external services")
|
|
81
|
+
print("Please check the error messages above and try again")
|
|
82
|
+
return 1
|
|
83
|
+
|
|
84
|
+
def _list_external(self, args):
|
|
85
|
+
"""List external MCP services and their status.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
args: Command line arguments
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
int: Exit code
|
|
92
|
+
"""
|
|
93
|
+
from .mcp_setup_external import MCPExternalServicesSetup
|
|
94
|
+
|
|
95
|
+
setup = MCPExternalServicesSetup(self.logger)
|
|
96
|
+
setup.list_external_services()
|
|
97
|
+
return 0
|
|
98
|
+
|
|
99
|
+
def _check_external(self, args):
|
|
100
|
+
"""Check if external services are properly configured.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
args: Command line arguments
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
int: Exit code
|
|
107
|
+
"""
|
|
108
|
+
print("🔍 Checking External MCP Services Configuration")
|
|
109
|
+
print("=" * 50)
|
|
110
|
+
|
|
111
|
+
import json
|
|
112
|
+
from pathlib import Path
|
|
113
|
+
|
|
114
|
+
# Check Claude Code configuration
|
|
115
|
+
config_paths = [
|
|
116
|
+
Path.home()
|
|
117
|
+
/ "Library"
|
|
118
|
+
/ "Application Support"
|
|
119
|
+
/ "Claude"
|
|
120
|
+
/ "claude_desktop_config.json", # macOS
|
|
121
|
+
Path.home() / ".config" / "Claude" / "claude_desktop_config.json", # Linux
|
|
122
|
+
Path.home()
|
|
123
|
+
/ "AppData"
|
|
124
|
+
/ "Roaming"
|
|
125
|
+
/ "Claude"
|
|
126
|
+
/ "claude_desktop_config.json", # Windows
|
|
127
|
+
Path.home() / ".claude" / "claude_desktop_config.json", # Alternative
|
|
128
|
+
Path.home() / ".claude.json", # Legacy
|
|
129
|
+
]
|
|
130
|
+
|
|
131
|
+
config_found = False
|
|
132
|
+
for config_path in config_paths:
|
|
133
|
+
if config_path.exists():
|
|
134
|
+
config_found = True
|
|
135
|
+
print(f"\n📄 Found config: {config_path}")
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
with config_path.open() as f:
|
|
139
|
+
config = json.load(f)
|
|
140
|
+
|
|
141
|
+
mcp_servers = config.get("mcpServers", {})
|
|
142
|
+
|
|
143
|
+
# Check for external services
|
|
144
|
+
external_services = ["mcp-vector-search", "mcp-browser"]
|
|
145
|
+
for service in external_services:
|
|
146
|
+
if service in mcp_servers:
|
|
147
|
+
print(f" ✅ {service} is configured")
|
|
148
|
+
server_config = mcp_servers[service]
|
|
149
|
+
print(f" Command: {server_config.get('command')}")
|
|
150
|
+
print(f" Args: {server_config.get('args')}")
|
|
151
|
+
else:
|
|
152
|
+
print(f" ❌ {service} is NOT configured")
|
|
153
|
+
|
|
154
|
+
except Exception as e:
|
|
155
|
+
print(f" ❌ Error reading config: {e}")
|
|
156
|
+
|
|
157
|
+
break
|
|
158
|
+
|
|
159
|
+
if not config_found:
|
|
160
|
+
print("❌ No Claude Code configuration found")
|
|
161
|
+
print(" Please run: claude-mpm mcp install")
|
|
162
|
+
|
|
163
|
+
# Check Python packages
|
|
164
|
+
print("\n🐍 Python Package Status:")
|
|
165
|
+
from .mcp_setup_external import MCPExternalServicesSetup
|
|
166
|
+
|
|
167
|
+
setup = MCPExternalServicesSetup(self.logger)
|
|
168
|
+
|
|
169
|
+
packages = [
|
|
170
|
+
("mcp-vector-search", "mcp_vector_search"),
|
|
171
|
+
("mcp-browser", "mcp_browser"),
|
|
172
|
+
]
|
|
173
|
+
|
|
174
|
+
for package_name, module_name in packages:
|
|
175
|
+
if setup._check_python_package(module_name):
|
|
176
|
+
print(f" ✅ {package_name} is installed")
|
|
177
|
+
else:
|
|
178
|
+
print(f" ❌ {package_name} is NOT installed")
|
|
179
|
+
|
|
180
|
+
return 0
|
|
181
|
+
|
|
182
|
+
def _fix_browser(self, args):
|
|
183
|
+
"""Fix mcp-browser configuration to use pipx installation.
|
|
184
|
+
|
|
185
|
+
Args:
|
|
186
|
+
args: Command line arguments
|
|
187
|
+
|
|
188
|
+
Returns:
|
|
189
|
+
int: Exit code
|
|
190
|
+
"""
|
|
191
|
+
from .mcp_setup_external import MCPExternalServicesSetup
|
|
192
|
+
|
|
193
|
+
setup = MCPExternalServicesSetup(self.logger)
|
|
194
|
+
if setup.fix_browser_configuration():
|
|
195
|
+
return 0
|
|
196
|
+
return 1
|
|
197
|
+
|
|
198
|
+
def _detect_and_update(self, args):
|
|
199
|
+
"""Auto-detect MCP service installations and update configuration.
|
|
200
|
+
|
|
201
|
+
Prioritizes local development installations over pipx/system.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
args: Command line arguments
|
|
205
|
+
|
|
206
|
+
Returns:
|
|
207
|
+
int: Exit code
|
|
208
|
+
"""
|
|
209
|
+
from .mcp_setup_external import MCPExternalServicesSetup
|
|
210
|
+
|
|
211
|
+
setup = MCPExternalServicesSetup(self.logger)
|
|
212
|
+
force = getattr(args, "force", False)
|
|
213
|
+
|
|
214
|
+
if setup.update_mcp_json_with_detected(force=force):
|
|
215
|
+
print("\n✅ Configuration updated successfully!")
|
|
216
|
+
print("\nNext steps:")
|
|
217
|
+
print("1. Review the .mcp.json file to verify the configuration")
|
|
218
|
+
print("2. Restart Claude Code to load the updated services")
|
|
219
|
+
return 0
|
|
220
|
+
print("\n❌ Failed to update configuration")
|
|
221
|
+
return 1
|
|
222
|
+
|
|
223
|
+
def _show_help(self):
|
|
224
|
+
"""Show help for external commands."""
|
|
225
|
+
print("\nMCP External Services Management")
|
|
226
|
+
print("=" * 40)
|
|
227
|
+
print("\nAvailable commands:")
|
|
228
|
+
print(
|
|
229
|
+
" setup - Setup external MCP services (mcp-vector-search, mcp-browser)"
|
|
230
|
+
)
|
|
231
|
+
print(" list - List available external services and their status")
|
|
232
|
+
print(" check - Check configuration and installation status")
|
|
233
|
+
print(
|
|
234
|
+
" detect - Auto-detect installations and update .mcp.json (prioritizes local dev)"
|
|
235
|
+
)
|
|
236
|
+
print(" fix-browser - Fix mcp-browser configuration to use pipx installation")
|
|
237
|
+
print("\nUsage:")
|
|
238
|
+
print(" claude-mpm mcp external setup # Interactive setup")
|
|
239
|
+
print(" claude-mpm mcp external setup --force # Force reconfiguration")
|
|
240
|
+
print(" claude-mpm mcp external detect # Auto-detect and update config")
|
|
241
|
+
print(
|
|
242
|
+
" claude-mpm mcp external detect --force # Force update even if configured"
|
|
243
|
+
)
|
|
244
|
+
print(" claude-mpm mcp external list # Show service status")
|
|
245
|
+
print(" claude-mpm mcp external check # Detailed configuration check")
|
|
246
|
+
print(" claude-mpm mcp external fix-browser # Fix mcp-browser to use pipx")
|
|
247
|
+
print("\nExternal services provide additional capabilities:")
|
|
248
|
+
print(" - mcp-vector-search: Semantic code search with embeddings")
|
|
249
|
+
print(" - mcp-browser: Web browsing and content extraction")
|
|
@@ -31,11 +31,12 @@ class MCPInstallCommands:
|
|
|
31
31
|
|
|
32
32
|
# Step 1: Install MCP package if needed
|
|
33
33
|
print("\n1️⃣ Checking MCP package installation...")
|
|
34
|
-
|
|
35
|
-
import mcp
|
|
34
|
+
import importlib.util
|
|
36
35
|
|
|
36
|
+
mcp_spec = importlib.util.find_spec("mcp")
|
|
37
|
+
if mcp_spec:
|
|
37
38
|
print("✅ MCP package already installed")
|
|
38
|
-
|
|
39
|
+
else:
|
|
39
40
|
print("📦 Installing MCP package...")
|
|
40
41
|
try:
|
|
41
42
|
subprocess.check_call([sys.executable, "-m", "pip", "install", "mcp"])
|
|
@@ -46,19 +47,50 @@ class MCPInstallCommands:
|
|
|
46
47
|
return 1
|
|
47
48
|
|
|
48
49
|
# Step 2: Configure Claude Code with the new CLI command
|
|
49
|
-
print("\n2️⃣ Configuring Claude Code
|
|
50
|
+
print("\n2️⃣ Configuring Claude Code...")
|
|
50
51
|
try:
|
|
51
52
|
success = self._configure_claude_desktop(args.force)
|
|
52
|
-
if success:
|
|
53
|
-
print("
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
if not success:
|
|
54
|
+
print("❌ Main gateway configuration failed")
|
|
55
|
+
return 1
|
|
56
|
+
|
|
57
|
+
# Step 3: Setup external MCP services
|
|
58
|
+
print("\n3️⃣ Setting up External MCP Services...")
|
|
59
|
+
from .mcp_setup_external import MCPExternalServicesSetup
|
|
60
|
+
|
|
61
|
+
external_setup = MCPExternalServicesSetup(self.logger)
|
|
62
|
+
|
|
63
|
+
# Check if user wants to set up external services
|
|
64
|
+
response = (
|
|
65
|
+
input(
|
|
66
|
+
"\nDo you want to set up external MCP services (mcp-vector-search, mcp-browser)? (Y/n): "
|
|
67
|
+
)
|
|
68
|
+
.strip()
|
|
69
|
+
.lower()
|
|
70
|
+
)
|
|
71
|
+
if response in ["", "y", "yes"]:
|
|
72
|
+
# Install Python packages for external services
|
|
73
|
+
external_setup.check_and_install_pip_packages()
|
|
74
|
+
|
|
75
|
+
# Setup external services in Claude Code config
|
|
76
|
+
if external_setup.setup_external_services(force=args.force):
|
|
77
|
+
print("✅ External services configured successfully")
|
|
78
|
+
else:
|
|
79
|
+
print("⚠️ Some external services may not have been configured")
|
|
80
|
+
else:
|
|
81
|
+
print("⏭️ Skipping external services setup")
|
|
82
|
+
print(
|
|
83
|
+
" You can set them up later with: claude-mpm mcp external setup"
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
print("\n✅ Configuration completed successfully")
|
|
87
|
+
print("\n🎉 MCP Gateway is ready to use!")
|
|
88
|
+
print("\nNext steps:")
|
|
89
|
+
print("1. Restart Claude Code (if running)")
|
|
90
|
+
print("2. Test the server: claude-mpm mcp server --test")
|
|
91
|
+
print("3. Check status: claude-mpm mcp status")
|
|
92
|
+
print("4. List external services: claude-mpm mcp external list")
|
|
93
|
+
return 0
|
|
62
94
|
|
|
63
95
|
except Exception as e:
|
|
64
96
|
print(f"❌ Error during configuration: {e}")
|
|
@@ -67,9 +99,9 @@ class MCPInstallCommands:
|
|
|
67
99
|
def _configure_claude_desktop(self, force=False):
|
|
68
100
|
"""Configure Claude Code to use the MCP gateway via CLI command.
|
|
69
101
|
|
|
70
|
-
WHY: Claude Code reads MCP server configurations from
|
|
71
|
-
|
|
72
|
-
|
|
102
|
+
WHY: Claude Code reads MCP server configurations from a platform-specific
|
|
103
|
+
configuration file. This method updates that file to include the claude-mpm-gateway
|
|
104
|
+
server configuration.
|
|
73
105
|
|
|
74
106
|
Args:
|
|
75
107
|
force: Whether to overwrite existing configuration
|
|
@@ -139,11 +171,49 @@ class MCPInstallCommands:
|
|
|
139
171
|
Returns:
|
|
140
172
|
Path or None: Path to Claude Code config file
|
|
141
173
|
"""
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
#
|
|
145
|
-
|
|
146
|
-
|
|
174
|
+
import platform
|
|
175
|
+
|
|
176
|
+
# Try multiple possible locations for Claude Code config
|
|
177
|
+
possible_paths = [
|
|
178
|
+
Path.home()
|
|
179
|
+
/ "Library"
|
|
180
|
+
/ "Application Support"
|
|
181
|
+
/ "Claude"
|
|
182
|
+
/ "claude_desktop_config.json", # macOS
|
|
183
|
+
Path.home() / ".config" / "Claude" / "claude_desktop_config.json", # Linux
|
|
184
|
+
Path.home()
|
|
185
|
+
/ "AppData"
|
|
186
|
+
/ "Roaming"
|
|
187
|
+
/ "Claude"
|
|
188
|
+
/ "claude_desktop_config.json", # Windows
|
|
189
|
+
Path.home() / ".claude" / "claude_desktop_config.json", # Alternative
|
|
190
|
+
Path.home() / ".claude.json", # Legacy
|
|
191
|
+
]
|
|
192
|
+
|
|
193
|
+
for path in possible_paths:
|
|
194
|
+
if path.exists():
|
|
195
|
+
return path
|
|
196
|
+
|
|
197
|
+
# If none exist, return the platform-appropriate default
|
|
198
|
+
system = platform.system()
|
|
199
|
+
if system == "Darwin": # macOS
|
|
200
|
+
return (
|
|
201
|
+
Path.home()
|
|
202
|
+
/ "Library"
|
|
203
|
+
/ "Application Support"
|
|
204
|
+
/ "Claude"
|
|
205
|
+
/ "claude_desktop_config.json"
|
|
206
|
+
)
|
|
207
|
+
if system == "Windows":
|
|
208
|
+
return (
|
|
209
|
+
Path.home()
|
|
210
|
+
/ "AppData"
|
|
211
|
+
/ "Roaming"
|
|
212
|
+
/ "Claude"
|
|
213
|
+
/ "claude_desktop_config.json"
|
|
214
|
+
)
|
|
215
|
+
# Linux and others
|
|
216
|
+
return Path.home() / ".config" / "Claude" / "claude_desktop_config.json"
|
|
147
217
|
|
|
148
218
|
def _find_claude_mpm_executable(self):
|
|
149
219
|
"""Find the claude-mpm executable path.
|
|
@@ -172,13 +242,12 @@ class MCPInstallCommands:
|
|
|
172
242
|
return str(executable_path)
|
|
173
243
|
|
|
174
244
|
# Fallback: Use Python module invocation if no executable found
|
|
175
|
-
|
|
176
|
-
import claude_mpm
|
|
245
|
+
import importlib.util
|
|
177
246
|
|
|
247
|
+
claude_mpm_spec = importlib.util.find_spec("claude_mpm")
|
|
248
|
+
if claude_mpm_spec:
|
|
178
249
|
print(f" Using Python module: {sys.executable} -m claude_mpm")
|
|
179
250
|
return sys.executable
|
|
180
|
-
except ImportError:
|
|
181
|
-
pass
|
|
182
251
|
|
|
183
252
|
return None
|
|
184
253
|
|
|
@@ -193,7 +262,7 @@ class MCPInstallCommands:
|
|
|
193
262
|
dict or None: Configuration dictionary
|
|
194
263
|
"""
|
|
195
264
|
import json
|
|
196
|
-
from datetime import datetime
|
|
265
|
+
from datetime import datetime, timezone
|
|
197
266
|
|
|
198
267
|
config = {}
|
|
199
268
|
|
|
@@ -201,7 +270,7 @@ class MCPInstallCommands:
|
|
|
201
270
|
if not force:
|
|
202
271
|
# Check if claude-mpm-gateway already exists
|
|
203
272
|
try:
|
|
204
|
-
with open(
|
|
273
|
+
with config_path.open() as f:
|
|
205
274
|
existing_config = json.load(f)
|
|
206
275
|
|
|
207
276
|
if (
|
|
@@ -226,7 +295,7 @@ class MCPInstallCommands:
|
|
|
226
295
|
|
|
227
296
|
# Create backup
|
|
228
297
|
backup_path = config_path.with_suffix(
|
|
229
|
-
f'.backup.{datetime.now().strftime("%Y%m%d_%H%M%S")}.json'
|
|
298
|
+
f'.backup.{datetime.now(timezone.utc).strftime("%Y%m%d_%H%M%S")}.json'
|
|
230
299
|
)
|
|
231
300
|
try:
|
|
232
301
|
config_path.rename(backup_path)
|
|
@@ -236,11 +305,11 @@ class MCPInstallCommands:
|
|
|
236
305
|
else:
|
|
237
306
|
# Force mode - create backup but proceed
|
|
238
307
|
try:
|
|
239
|
-
with open(
|
|
308
|
+
with config_path.open() as f:
|
|
240
309
|
existing_config = json.load(f)
|
|
241
310
|
config = existing_config
|
|
242
311
|
print(" Force mode: Overwriting existing configuration")
|
|
243
|
-
except:
|
|
312
|
+
except Exception:
|
|
244
313
|
pass # File doesn't exist or is invalid, start fresh
|
|
245
314
|
|
|
246
315
|
# Ensure mcpServers section exists
|
|
@@ -266,7 +335,7 @@ class MCPInstallCommands:
|
|
|
266
335
|
config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
267
336
|
|
|
268
337
|
# Write configuration with nice formatting
|
|
269
|
-
with open(
|
|
338
|
+
with config_path.open("w") as f:
|
|
270
339
|
json.dump(config, f, indent=2)
|
|
271
340
|
|
|
272
341
|
print(f"\n✅ Configuration saved to {config_path}")
|
|
@@ -110,7 +110,7 @@ def configure_mcp_for_pipx(args) -> int:
|
|
|
110
110
|
existing_config = {}
|
|
111
111
|
if config_path.exists():
|
|
112
112
|
try:
|
|
113
|
-
with open(
|
|
113
|
+
with config_path.open() as f:
|
|
114
114
|
existing_config = json.load(f)
|
|
115
115
|
print("✅ Existing config loaded")
|
|
116
116
|
except json.JSONDecodeError:
|
|
@@ -145,7 +145,7 @@ def configure_mcp_for_pipx(args) -> int:
|
|
|
145
145
|
# Write config
|
|
146
146
|
if not args.dry_run:
|
|
147
147
|
try:
|
|
148
|
-
with open(
|
|
148
|
+
with config_path.open("w") as f:
|
|
149
149
|
json.dump(existing_config, f, indent=2)
|
|
150
150
|
print(f"\n✅ Configuration written to: {config_path}")
|
|
151
151
|
except Exception as e:
|