claude-mpm 4.1.26__py3-none-any.whl → 5.0.9__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 +432 -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 +254 -29
- claude_mpm/agents/PM_INSTRUCTIONS.md +969 -0
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +355 -191
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +41 -14
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/async_agent_loader.py +3 -3
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +21 -44
- claude_mpm/agents/frontmatter_validator.py +292 -252
- claude_mpm/agents/system_agent_config.py +3 -2
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/circuit-breakers.md +1005 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/git-file-tracking.md +584 -0
- claude_mpm/agents/templates/pm-examples.md +474 -0
- claude_mpm/agents/templates/pm-red-flags.md +310 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/response-format.md +583 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/agents/templates/validation-templates.md +312 -0
- claude_mpm/cli/__init__.py +72 -376
- claude_mpm/cli/commands/__init__.py +4 -0
- claude_mpm/cli/commands/agent_manager.py +675 -20
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +344 -0
- claude_mpm/cli/commands/agents.py +1673 -178
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- claude_mpm/cli/commands/aggregate.py +11 -7
- claude_mpm/cli/commands/analyze.py +18 -13
- claude_mpm/cli/commands/analyze_code.py +8 -4
- claude_mpm/cli/commands/auto_configure.py +566 -0
- claude_mpm/cli/commands/cleanup.py +12 -12
- claude_mpm/cli/commands/config.py +54 -17
- claude_mpm/cli/commands/configure.py +1184 -1055
- 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 +184 -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 +19 -19
- claude_mpm/cli/commands/doctor.py +51 -7
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/info.py +3 -4
- claude_mpm/cli/commands/local_deploy.py +534 -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 +573 -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/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +252 -167
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +1225 -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 +279 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +1872 -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/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +369 -1
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +196 -3
- claude_mpm/cli/parsers/config_parser.py +96 -43
- 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/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +282 -0
- claude_mpm/cli/parsers/source_parser.py +138 -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 +994 -0
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/startup_logging.py +179 -13
- claude_mpm/cli/utils.py +54 -3
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/mpm-agents-auto-configure.md +278 -0
- claude_mpm/commands/mpm-agents-detect.md +177 -0
- claude_mpm/commands/mpm-agents-list.md +131 -0
- claude_mpm/commands/mpm-agents-recommend.md +223 -0
- claude_mpm/commands/mpm-config-view.md +150 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +297 -5
- claude_mpm/commands/mpm-init.md +401 -17
- claude_mpm/commands/mpm-monitor.md +418 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -0
- claude_mpm/commands/mpm-status.md +79 -8
- claude_mpm/commands/mpm-ticket-organize.md +304 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +122 -0
- claude_mpm/commands/mpm.md +12 -0
- claude_mpm/config/agent_config.py +4 -4
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- 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/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/config/socketio_config.py +3 -3
- claude_mpm/constants.py +28 -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 +24 -42
- claude_mpm/core/config.py +101 -8
- claude_mpm/core/config_aliases.py +7 -6
- claude_mpm/core/constants.py +66 -1
- 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 +25 -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 +176 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +181 -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_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +49 -8
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +4 -3
- claude_mpm/core/interactive_session.py +146 -18
- 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 +22 -15
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/oneshot_session.py +122 -15
- 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/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/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/shared/singleton_manager.py +11 -4
- claude_mpm/core/socketio_pool.py +15 -15
- claude_mpm/core/system_context.py +38 -0
- 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/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +600 -18
- claude_mpm/dashboard/static/js/components/activity-tree.js +181 -195
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +105 -102
- claude_mpm/dashboard/static/js/components/agent-inference.js +34 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +67 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- 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 +50 -13
- 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 +36 -16
- claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +49 -23
- claude_mpm/dashboard/static/js/components/session-manager.js +19 -19
- claude_mpm/dashboard/static/js/components/socket-manager.js +5 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +520 -88
- claude_mpm/dashboard/static/js/components/working-directory.js +46 -11
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +309 -178
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +183 -139
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -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/templates/code_simple.html +153 -0
- claude_mpm/dashboard/templates/index.html +125 -122
- claude_mpm/experimental/cli_enhancements.py +5 -7
- 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/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
- claude_mpm/hooks/claude_hooks/event_handlers.py +24 -19
- 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/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +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 +54 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -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 +179 -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/git_repository.py +198 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/scripts/claude-hook-handler.sh +35 -9
- 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/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/__init__.py +144 -160
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/agent_builder.py +56 -18
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_deployment.py +164 -17
- claude_mpm/services/agents/deployment/agent_discovery_service.py +191 -41
- 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 +5 -7
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- 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_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +939 -50
- 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/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +3 -2
- 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/facade/deployment_facade.py +3 -3
- 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 +249 -53
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- 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 +10 -10
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -43
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- 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/git_source_manager.py +629 -0
- 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 +11 -14
- claude_mpm/services/agents/local_template_manager.py +784 -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/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- 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 +209 -13
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +88 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- claude_mpm/services/core/interfaces/health.py +169 -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 +70 -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 +8 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +30 -34
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- 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 +21 -21
- claude_mpm/services/diagnostics/checks/mcp_check.py +57 -44
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +24 -24
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
- claude_mpm/services/diagnostics/diagnostic_runner.py +31 -13
- claude_mpm/services/diagnostics/doctor_reporter.py +305 -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 +11 -7
- 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/consumers/logging.py +1 -2
- 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/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- 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 +2 -6
- claude_mpm/services/infrastructure/monitoring/aggregator.py +13 -18
- 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/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +155 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +26 -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 +427 -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 +1542 -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 +24 -5
- 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 +591 -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 +5 -10
- claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -17
- 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 +555 -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 +732 -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 +452 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +691 -0
- claude_mpm/services/monitor/daemon_manager.py +1040 -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 +3 -3
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- 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 +554 -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 +583 -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 +17 -3
- claude_mpm/services/self_upgrade_service.py +500 -0
- claude_mpm/services/session_management_service.py +23 -9
- 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/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- 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 +22 -41
- 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 +9 -9
- 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 +142 -8
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +24 -24
- 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 +3 -5
- 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 +900 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -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 +471 -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 +466 -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 +14 -8
- 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/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- 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/database-migration.md +199 -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/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/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/refactoring-patterns.md +180 -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/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/scripts/with_server.py +129 -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 +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/state_storage.py +31 -31
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/tools/__main__.py +9 -9
- 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 +184 -36
- claude_mpm/utils/agent_filters.py +288 -0
- 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 +5 -3
- 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/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/path_operations.py +7 -4
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +131 -24
- claude_mpm/utils/session_logging.py +2 -2
- claude_mpm/utils/structured_questions.py +619 -0
- 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-5.0.9.dist-info/METADATA +1028 -0
- claude_mpm-5.0.9.dist-info/RECORD +864 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -261
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/agent-manager.json +0 -270
- claude_mpm/agents/templates/agent-manager.md +0 -619
- claude_mpm/agents/templates/agentic_coder_optimizer.json +0 -222
- claude_mpm/agents/templates/api_qa.json +0 -171
- claude_mpm/agents/templates/code_analyzer.json +0 -95
- claude_mpm/agents/templates/data_engineer.json +0 -152
- claude_mpm/agents/templates/documentation.json +0 -175
- claude_mpm/agents/templates/engineer.json +0 -176
- claude_mpm/agents/templates/imagemagick.json +0 -261
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/memory_manager.json +0 -155
- claude_mpm/agents/templates/ops.json +0 -175
- claude_mpm/agents/templates/project_organizer.json +0 -130
- claude_mpm/agents/templates/qa.json +0 -223
- claude_mpm/agents/templates/refactoring_engineer.json +0 -266
- claude_mpm/agents/templates/research.json +0 -163
- claude_mpm/agents/templates/security.json +0 -153
- claude_mpm/agents/templates/ticketing.json +0 -169
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -281
- claude_mpm/agents/templates/version_control.json +0 -147
- claude_mpm/agents/templates/web_qa.json +0 -254
- claude_mpm/agents/templates/web_ui.json +0 -176
- 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/commands/mpm-agents.md +0 -12
- claude_mpm/commands/mpm-config.md +0 -18
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/css/code-tree.css +0 -1408
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- 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-5.0.9.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
|
@@ -16,6 +16,7 @@ import os
|
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
from typing import Any, Dict
|
|
18
18
|
|
|
19
|
+
from ...core.enums import OutputFormat
|
|
19
20
|
from ...core.shared.config_loader import ConfigLoader
|
|
20
21
|
from ...services.agents.memory import AgentMemoryManager
|
|
21
22
|
from ...services.cli.memory_crud_service import MemoryCRUDService
|
|
@@ -23,6 +24,14 @@ from ...services.cli.memory_output_formatter import MemoryOutputFormatter
|
|
|
23
24
|
from ..shared.base_command import CommandResult, MemoryCommand
|
|
24
25
|
|
|
25
26
|
|
|
27
|
+
def _is_structured_output(args) -> bool:
|
|
28
|
+
"""Check if args specify structured output format (JSON/YAML)."""
|
|
29
|
+
if hasattr(args, "format"):
|
|
30
|
+
fmt = str(args.format).lower()
|
|
31
|
+
return fmt in (OutputFormat.JSON, OutputFormat.YAML)
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
|
|
26
35
|
class MemoryManagementCommand(MemoryCommand):
|
|
27
36
|
"""Memory management command using shared utilities."""
|
|
28
37
|
|
|
@@ -39,7 +48,7 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
39
48
|
config_loader = ConfigLoader()
|
|
40
49
|
config = config_loader.load_main_config()
|
|
41
50
|
# Use CLAUDE_MPM_USER_PWD if available, otherwise use current working directory
|
|
42
|
-
user_pwd = os.environ.get("CLAUDE_MPM_USER_PWD",
|
|
51
|
+
user_pwd = os.environ.get("CLAUDE_MPM_USER_PWD", Path.cwd())
|
|
43
52
|
current_dir = Path(user_pwd)
|
|
44
53
|
self._memory_manager = AgentMemoryManager(config, current_dir)
|
|
45
54
|
return self._memory_manager
|
|
@@ -60,6 +69,31 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
60
69
|
self._crud_service = MemoryCRUDService(memory_manager=self.memory_manager)
|
|
61
70
|
return self._crud_service
|
|
62
71
|
|
|
72
|
+
def _get_output_format(self, args) -> str:
|
|
73
|
+
"""
|
|
74
|
+
Get output format from args with enum default.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
args: Command arguments
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
Output format string (compatible with both enum and string usage)
|
|
81
|
+
"""
|
|
82
|
+
return getattr(args, "format", OutputFormat.TEXT)
|
|
83
|
+
|
|
84
|
+
def _is_structured_format(self, format_str: str) -> bool:
|
|
85
|
+
"""
|
|
86
|
+
Check if format is structured (JSON/YAML).
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
format_str: Format string to check
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
True if format is JSON or YAML
|
|
93
|
+
"""
|
|
94
|
+
fmt = str(format_str).lower()
|
|
95
|
+
return fmt in (OutputFormat.JSON, OutputFormat.YAML)
|
|
96
|
+
|
|
63
97
|
def validate_args(self, args) -> str:
|
|
64
98
|
"""Validate command arguments."""
|
|
65
99
|
# Check if memory command is valid
|
|
@@ -104,8 +138,8 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
104
138
|
available_commands = list(command_map.keys())
|
|
105
139
|
error_msg = f"Unknown memory command: {args.memory_command}"
|
|
106
140
|
|
|
107
|
-
output_format =
|
|
108
|
-
if output_format
|
|
141
|
+
output_format = self._get_output_format(args)
|
|
142
|
+
if self._is_structured_format(output_format):
|
|
109
143
|
return CommandResult.error_result(
|
|
110
144
|
error_msg, data={"available_commands": available_commands}
|
|
111
145
|
)
|
|
@@ -120,9 +154,9 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
120
154
|
def _show_status(self, args) -> CommandResult:
|
|
121
155
|
"""Show memory system status."""
|
|
122
156
|
try:
|
|
123
|
-
output_format =
|
|
157
|
+
output_format = self._get_output_format(args)
|
|
124
158
|
|
|
125
|
-
if output_format
|
|
159
|
+
if self._is_structured_format(output_format):
|
|
126
160
|
# Structured output
|
|
127
161
|
status_data = self._get_status_data()
|
|
128
162
|
return CommandResult.success_result(
|
|
@@ -175,7 +209,7 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
175
209
|
def _show_memories(self, args) -> CommandResult:
|
|
176
210
|
"""Show agent memories."""
|
|
177
211
|
try:
|
|
178
|
-
output_format =
|
|
212
|
+
output_format = self._get_output_format(args)
|
|
179
213
|
agent_id = getattr(args, "agent_id", None)
|
|
180
214
|
raw_output = getattr(args, "raw", False)
|
|
181
215
|
|
|
@@ -245,7 +279,7 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
245
279
|
def _init_memory(self, args) -> CommandResult:
|
|
246
280
|
"""Initialize project-specific memories."""
|
|
247
281
|
try:
|
|
248
|
-
output_format =
|
|
282
|
+
output_format = self._get_output_format(args)
|
|
249
283
|
|
|
250
284
|
# Use CRUD service for initialization task
|
|
251
285
|
result = self.crud_service.init_project_memories()
|
|
@@ -255,7 +289,7 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
255
289
|
result.get("error", "Failed to create initialization task")
|
|
256
290
|
)
|
|
257
291
|
|
|
258
|
-
if output_format
|
|
292
|
+
if self._is_structured_format(output_format):
|
|
259
293
|
# Return structured task data
|
|
260
294
|
return CommandResult.success_result(
|
|
261
295
|
"Memory initialization task created", data=result.get("task_data")
|
|
@@ -293,7 +327,7 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
293
327
|
def _add_learning(self, args) -> CommandResult:
|
|
294
328
|
"""Add learning to agent memory."""
|
|
295
329
|
try:
|
|
296
|
-
output_format =
|
|
330
|
+
output_format = self._get_output_format(args)
|
|
297
331
|
|
|
298
332
|
# Extract arguments
|
|
299
333
|
agent_id = getattr(args, "agent_id", None)
|
|
@@ -313,7 +347,7 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
313
347
|
result.get("error", "Failed to add learning")
|
|
314
348
|
)
|
|
315
349
|
|
|
316
|
-
if output_format
|
|
350
|
+
if self._is_structured_format(output_format):
|
|
317
351
|
# Return structured result
|
|
318
352
|
return CommandResult.success_result(
|
|
319
353
|
"Learning added to agent memory", data=result
|
|
@@ -333,7 +367,7 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
333
367
|
def _clean_memory(self, args) -> CommandResult:
|
|
334
368
|
"""Clean up old/unused memory files."""
|
|
335
369
|
try:
|
|
336
|
-
output_format =
|
|
370
|
+
output_format = self._get_output_format(args)
|
|
337
371
|
agent_id = getattr(args, "agent_id", None)
|
|
338
372
|
dry_run = getattr(args, "dry_run", True)
|
|
339
373
|
|
|
@@ -343,7 +377,7 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
343
377
|
if not result.get("success"):
|
|
344
378
|
return CommandResult.error_result(result.get("error", "Cleanup failed"))
|
|
345
379
|
|
|
346
|
-
if output_format
|
|
380
|
+
if self._is_structured_format(output_format):
|
|
347
381
|
# Return structured cleanup results
|
|
348
382
|
return CommandResult.success_result(
|
|
349
383
|
result.get("message", "Memory cleanup completed"), data=result
|
|
@@ -384,10 +418,10 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
384
418
|
def _optimize_memory(self, args) -> CommandResult:
|
|
385
419
|
"""Optimize memory files."""
|
|
386
420
|
try:
|
|
387
|
-
output_format =
|
|
421
|
+
output_format = self._get_output_format(args)
|
|
388
422
|
agent_id = getattr(args, "agent_id", None)
|
|
389
423
|
|
|
390
|
-
if output_format
|
|
424
|
+
if self._is_structured_format(output_format):
|
|
391
425
|
# For structured output, perform optimization and return results
|
|
392
426
|
if agent_id:
|
|
393
427
|
result = self.memory_manager.optimize_memory(agent_id)
|
|
@@ -419,9 +453,9 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
419
453
|
def _build_memory(self, args) -> CommandResult:
|
|
420
454
|
"""Build agent memories from project documentation."""
|
|
421
455
|
try:
|
|
422
|
-
output_format =
|
|
456
|
+
output_format = self._get_output_format(args)
|
|
423
457
|
|
|
424
|
-
if output_format
|
|
458
|
+
if self._is_structured_format(output_format):
|
|
425
459
|
# For structured output, return build results
|
|
426
460
|
build_data = {
|
|
427
461
|
"built_memories": [],
|
|
@@ -442,9 +476,9 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
442
476
|
def _cross_reference_memory(self, args) -> CommandResult:
|
|
443
477
|
"""Find cross-references and common patterns."""
|
|
444
478
|
try:
|
|
445
|
-
output_format =
|
|
479
|
+
output_format = self._get_output_format(args)
|
|
446
480
|
|
|
447
|
-
if output_format
|
|
481
|
+
if self._is_structured_format(output_format):
|
|
448
482
|
# For structured output, return cross-reference results
|
|
449
483
|
crossref_data = {
|
|
450
484
|
"common_patterns": [],
|
|
@@ -465,9 +499,9 @@ class MemoryManagementCommand(MemoryCommand):
|
|
|
465
499
|
def _route_memory_command(self, args) -> CommandResult:
|
|
466
500
|
"""Route memory command to appropriate agent."""
|
|
467
501
|
try:
|
|
468
|
-
output_format =
|
|
502
|
+
output_format = self._get_output_format(args)
|
|
469
503
|
|
|
470
|
-
if output_format
|
|
504
|
+
if self._is_structured_format(output_format):
|
|
471
505
|
# For structured output, return routing results
|
|
472
506
|
routing_data = {
|
|
473
507
|
"routed_to": "memory_agent",
|
|
@@ -495,7 +529,7 @@ def manage_memory(args) -> int:
|
|
|
495
529
|
result = command.execute(args)
|
|
496
530
|
|
|
497
531
|
# Print result if structured output format is requested
|
|
498
|
-
if
|
|
532
|
+
if _is_structured_output(args):
|
|
499
533
|
command.print_result(result, args)
|
|
500
534
|
|
|
501
535
|
return result.exit_code
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Monitor command implementation for claude-mpm.
|
|
3
3
|
|
|
4
|
-
WHY: This module provides CLI commands for managing the
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
WHY: This module provides CLI commands for managing the unified monitoring daemon,
|
|
5
|
+
providing a single stable way to launch all monitoring functionality including
|
|
6
|
+
HTTP dashboard, Socket.IO events, real AST analysis, and Claude Code hook ingestion.
|
|
7
7
|
|
|
8
8
|
DESIGN DECISIONS:
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
9
|
+
- Use UnifiedMonitorDaemon for single stable monitoring service
|
|
10
|
+
- Single port (8765) for all functionality
|
|
11
|
+
- Support both foreground and daemon modes
|
|
12
|
+
- Real AST analysis using CodeTreeAnalyzer
|
|
13
|
+
- Integrated dashboard and Socket.IO server
|
|
13
14
|
"""
|
|
14
15
|
|
|
15
16
|
from typing import Optional
|
|
16
17
|
|
|
17
18
|
from ...constants import MonitorCommands
|
|
19
|
+
from ...services.monitor.daemon import UnifiedMonitorDaemon
|
|
18
20
|
from ..shared import BaseCommand, CommandResult
|
|
19
|
-
from .dashboard import DashboardCommand
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class MonitorCommand(BaseCommand):
|
|
23
|
-
"""Monitor command
|
|
24
|
+
"""Monitor command for managing the unified monitoring daemon."""
|
|
24
25
|
|
|
25
26
|
def __init__(self):
|
|
26
27
|
super().__init__("monitor")
|
|
27
|
-
|
|
28
|
-
self.dashboard_command = DashboardCommand()
|
|
28
|
+
self.daemon = None
|
|
29
29
|
|
|
30
30
|
def validate_args(self, args) -> Optional[str]:
|
|
31
31
|
"""Validate command arguments."""
|
|
@@ -38,25 +38,23 @@ class MonitorCommand(BaseCommand):
|
|
|
38
38
|
return None
|
|
39
39
|
|
|
40
40
|
def run(self, args) -> CommandResult:
|
|
41
|
-
"""Execute the monitor command
|
|
41
|
+
"""Execute the monitor command using unified monitoring daemon."""
|
|
42
42
|
try:
|
|
43
|
-
self.logger.info("Monitor command
|
|
43
|
+
self.logger.info("Monitor command using unified monitoring daemon")
|
|
44
44
|
|
|
45
45
|
# Handle default case (no subcommand) - default to status
|
|
46
46
|
if not hasattr(args, "monitor_command") or not args.monitor_command:
|
|
47
|
-
return self.
|
|
47
|
+
return self._status_monitor(args)
|
|
48
48
|
|
|
49
|
-
#
|
|
49
|
+
# Route to specific monitor commands
|
|
50
50
|
if args.monitor_command == MonitorCommands.START.value:
|
|
51
|
-
return self.
|
|
51
|
+
return self._start_monitor(args)
|
|
52
52
|
if args.monitor_command == MonitorCommands.STOP.value:
|
|
53
|
-
return self.
|
|
53
|
+
return self._stop_monitor(args)
|
|
54
54
|
if args.monitor_command == MonitorCommands.RESTART.value:
|
|
55
|
-
return self.
|
|
55
|
+
return self._restart_monitor(args)
|
|
56
56
|
if args.monitor_command == MonitorCommands.STATUS.value:
|
|
57
|
-
return self.
|
|
58
|
-
if args.monitor_command == MonitorCommands.PORT.value:
|
|
59
|
-
return self._start_dashboard_on_port(args)
|
|
57
|
+
return self._status_monitor(args)
|
|
60
58
|
|
|
61
59
|
return CommandResult.error_result(
|
|
62
60
|
f"Unknown monitor command: {args.monitor_command}"
|
|
@@ -66,66 +64,164 @@ class MonitorCommand(BaseCommand):
|
|
|
66
64
|
self.logger.error(f"Error executing monitor command: {e}", exc_info=True)
|
|
67
65
|
return CommandResult.error_result(f"Error executing monitor command: {e}")
|
|
68
66
|
|
|
69
|
-
def
|
|
70
|
-
"""Start the
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
def _start_monitor(self, args) -> CommandResult:
|
|
68
|
+
"""Start the unified monitor daemon."""
|
|
69
|
+
port = getattr(args, "port", None)
|
|
70
|
+
if port is None:
|
|
71
|
+
port = 8765 # Default to 8765 for unified monitor
|
|
72
|
+
host = getattr(args, "host", "localhost")
|
|
73
|
+
|
|
74
|
+
# Check for explicit foreground flag first, then background flag
|
|
75
|
+
# Default to daemon/background mode if neither specified
|
|
76
|
+
if getattr(args, "foreground", False):
|
|
77
|
+
daemon_mode = False
|
|
78
|
+
elif getattr(args, "background", None) is not None:
|
|
79
|
+
daemon_mode = getattr(args, "background", False)
|
|
80
|
+
else:
|
|
81
|
+
# Default to daemon/background mode
|
|
82
|
+
daemon_mode = True
|
|
83
|
+
|
|
84
|
+
mode_str = "background/daemon" if daemon_mode else "foreground"
|
|
85
|
+
self.logger.info(
|
|
86
|
+
f"Starting unified monitor daemon on {host}:{port} (mode: {mode_str})"
|
|
87
|
+
)
|
|
78
88
|
|
|
79
|
-
|
|
89
|
+
# Create unified monitor daemon
|
|
90
|
+
self.daemon = UnifiedMonitorDaemon(
|
|
91
|
+
host=host, port=port, daemon_mode=daemon_mode
|
|
92
|
+
)
|
|
80
93
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
#
|
|
85
|
-
if
|
|
86
|
-
|
|
94
|
+
# Get force restart flag
|
|
95
|
+
force_restart = getattr(args, "force", False)
|
|
96
|
+
|
|
97
|
+
# Check if already running
|
|
98
|
+
if self.daemon.lifecycle.is_running() and not force_restart:
|
|
99
|
+
existing_pid = self.daemon.lifecycle.get_pid()
|
|
100
|
+
return CommandResult.success_result(
|
|
101
|
+
f"Unified monitor daemon already running with PID {existing_pid}",
|
|
102
|
+
data={
|
|
103
|
+
"url": f"http://{host}:{port}",
|
|
104
|
+
"port": port,
|
|
105
|
+
"pid": existing_pid,
|
|
106
|
+
},
|
|
107
|
+
)
|
|
87
108
|
|
|
88
|
-
|
|
109
|
+
# Start the daemon (with force restart if specified)
|
|
110
|
+
if self.daemon.start(force_restart=force_restart):
|
|
111
|
+
# For daemon mode, verify it actually started
|
|
112
|
+
if daemon_mode:
|
|
113
|
+
# Give it a moment to fully initialize
|
|
114
|
+
import time
|
|
115
|
+
|
|
116
|
+
time.sleep(0.5)
|
|
117
|
+
|
|
118
|
+
# Check if it's actually running
|
|
119
|
+
if not self.daemon.lifecycle.is_running():
|
|
120
|
+
return CommandResult.error_result(
|
|
121
|
+
"Monitor daemon failed to start. Check ~/.claude-mpm/monitor-daemon.log for details."
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Get the actual PID
|
|
125
|
+
actual_pid = self.daemon.lifecycle.get_pid()
|
|
126
|
+
mode_info = f" in background (PID: {actual_pid})"
|
|
127
|
+
else:
|
|
128
|
+
mode_info = " in foreground"
|
|
129
|
+
|
|
130
|
+
return CommandResult.success_result(
|
|
131
|
+
f"Unified monitor daemon started on {host}:{port}{mode_info}",
|
|
132
|
+
data={"url": f"http://{host}:{port}", "port": port, "mode": mode_str},
|
|
133
|
+
)
|
|
89
134
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
self.logger.info("Restarting unified dashboard service")
|
|
135
|
+
# Check if error was due to port already in use
|
|
136
|
+
import socket
|
|
93
137
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
138
|
+
try:
|
|
139
|
+
test_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
140
|
+
test_sock.connect((host, port))
|
|
141
|
+
test_sock.close()
|
|
142
|
+
return CommandResult.error_result(
|
|
143
|
+
f"Port {port} is already in use. Try 'claude-mpm monitor stop' first or use a different port."
|
|
144
|
+
)
|
|
145
|
+
except Exception:
|
|
146
|
+
pass
|
|
98
147
|
|
|
99
|
-
|
|
100
|
-
|
|
148
|
+
return CommandResult.error_result(
|
|
149
|
+
"Failed to start unified monitor daemon. Check ~/.claude-mpm/monitor-daemon.log for details."
|
|
150
|
+
)
|
|
101
151
|
|
|
102
|
-
|
|
152
|
+
def _stop_monitor(self, args) -> CommandResult:
|
|
153
|
+
"""Stop the unified monitor daemon."""
|
|
154
|
+
# Don't log here - the daemon will log when it stops
|
|
155
|
+
|
|
156
|
+
# Get parameters from args or use defaults
|
|
157
|
+
port = getattr(args, "port", None)
|
|
158
|
+
if port is None:
|
|
159
|
+
port = 8765 # Default to 8765 for unified monitor
|
|
160
|
+
host = getattr(args, "host", "localhost")
|
|
161
|
+
|
|
162
|
+
# Create daemon instance to check status and stop
|
|
163
|
+
# For stop, we need to know if it was started in daemon mode
|
|
164
|
+
# We default to daemon mode since that's the usual case
|
|
165
|
+
daemon_mode = True
|
|
166
|
+
daemon = UnifiedMonitorDaemon(host=host, port=port, daemon_mode=daemon_mode)
|
|
167
|
+
|
|
168
|
+
if not daemon.lifecycle.is_running():
|
|
169
|
+
return CommandResult.success_result("No unified monitor daemon running")
|
|
170
|
+
|
|
171
|
+
# Stop the daemon
|
|
172
|
+
if daemon.stop():
|
|
173
|
+
return CommandResult.success_result("Unified monitor daemon stopped")
|
|
174
|
+
return CommandResult.error_result("Failed to stop unified monitor daemon")
|
|
175
|
+
|
|
176
|
+
def _restart_monitor(self, args) -> CommandResult:
|
|
177
|
+
"""Restart the unified monitor daemon."""
|
|
178
|
+
self.logger.info("Restarting unified monitor daemon")
|
|
179
|
+
|
|
180
|
+
# Get parameters from args or use defaults
|
|
181
|
+
port = getattr(args, "port", None)
|
|
182
|
+
if port is None:
|
|
183
|
+
port = 8765 # Default to 8765 for unified monitor
|
|
184
|
+
host = getattr(args, "host", "localhost")
|
|
185
|
+
|
|
186
|
+
# For restart, default to daemon mode (the usual use case)
|
|
187
|
+
# unless explicitly running in foreground
|
|
188
|
+
daemon_mode = not getattr(args, "foreground", False)
|
|
189
|
+
|
|
190
|
+
# Create daemon instance with proper parameters
|
|
191
|
+
daemon = UnifiedMonitorDaemon(host=host, port=port, daemon_mode=daemon_mode)
|
|
192
|
+
|
|
193
|
+
# Restart the daemon
|
|
194
|
+
if daemon.restart():
|
|
195
|
+
return CommandResult.success_result(
|
|
196
|
+
f"Unified monitor daemon restarted on {host}:{port}"
|
|
197
|
+
)
|
|
198
|
+
return CommandResult.error_result("Failed to restart unified monitor daemon")
|
|
103
199
|
|
|
104
|
-
|
|
105
|
-
|
|
200
|
+
def _status_monitor(self, args) -> CommandResult:
|
|
201
|
+
"""Get unified monitor daemon status."""
|
|
106
202
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
203
|
+
# Create daemon instance to check status
|
|
204
|
+
daemon = UnifiedMonitorDaemon()
|
|
205
|
+
status_data = daemon.status()
|
|
110
206
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
args.background = True
|
|
207
|
+
# Format output message
|
|
208
|
+
if status_data["running"]:
|
|
209
|
+
message = f"Unified monitor daemon is running at http://{status_data['host']}:{status_data['port']}"
|
|
210
|
+
if status_data.get("pid"):
|
|
211
|
+
message += f" (PID: {status_data['pid']})"
|
|
212
|
+
else:
|
|
213
|
+
message = "Unified monitor daemon is not running"
|
|
119
214
|
|
|
120
|
-
return
|
|
215
|
+
return CommandResult.success_result(message, data=status_data)
|
|
121
216
|
|
|
122
217
|
|
|
123
218
|
def manage_monitor(args):
|
|
124
219
|
"""
|
|
125
220
|
Main entry point for monitor command.
|
|
126
221
|
|
|
127
|
-
The monitor command
|
|
128
|
-
|
|
222
|
+
The monitor command manages the unified monitoring daemon that provides
|
|
223
|
+
a single stable way to launch all monitoring functionality including
|
|
224
|
+
HTTP dashboard, Socket.IO events, real AST analysis, and Claude Code hooks.
|
|
129
225
|
"""
|
|
130
226
|
command = MonitorCommand()
|
|
131
227
|
error = command.validate_args(args)
|
|
@@ -148,9 +244,3 @@ def manage_monitor(args):
|
|
|
148
244
|
if result.message:
|
|
149
245
|
print(f"Error: {result.message}")
|
|
150
246
|
return 1
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
# All legacy functions have been removed.
|
|
154
|
-
# The monitor command now delegates to the unified dashboard service.
|
|
155
|
-
# This consolidation provides a single service that handles both HTTP (port 8765)
|
|
156
|
-
# and Socket.IO (also on port 8765) rather than separate services on different ports.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""MPM initialization command package.
|
|
2
|
+
|
|
3
|
+
This package provides comprehensive project initialization and update capabilities
|
|
4
|
+
for Claude Code and Claude MPM. It includes:
|
|
5
|
+
|
|
6
|
+
- Core command class (MPMInitCommand) for orchestrating initialization
|
|
7
|
+
- Click CLI commands for command-line interface
|
|
8
|
+
- Modular components for prompts, display, git analysis, and modes
|
|
9
|
+
- Support for multiple initialization modes (create, update, review, quick-update, catchup)
|
|
10
|
+
|
|
11
|
+
Main Components:
|
|
12
|
+
- core.py: MPMInitCommand class - main initialization orchestrator
|
|
13
|
+
- mpm_init_cli.py: Click command definitions and CLI entry points
|
|
14
|
+
- prompts.py: Prompt building functions for agent delegation
|
|
15
|
+
- display.py: Display and UI helper functions
|
|
16
|
+
- git_activity.py: Git history analysis and context building
|
|
17
|
+
- modes.py: Mode-specific handlers (review, dry-run, quick-update, etc.)
|
|
18
|
+
|
|
19
|
+
Public API:
|
|
20
|
+
- MPMInitCommand: Main command class (from core)
|
|
21
|
+
- mpm_init: Click command group (from mpm_init_cli)
|
|
22
|
+
|
|
23
|
+
Example Usage:
|
|
24
|
+
# Programmatic usage
|
|
25
|
+
from claude_mpm.cli.commands.mpm_init import MPMInitCommand
|
|
26
|
+
command = MPMInitCommand(project_path)
|
|
27
|
+
result = command.initialize_project()
|
|
28
|
+
|
|
29
|
+
# CLI usage (via Click)
|
|
30
|
+
from claude_mpm.cli.commands.mpm_init import mpm_init
|
|
31
|
+
# Command is registered with Click and invoked via CLI
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
# Import core components for re-export
|
|
35
|
+
from .core import MPMInitCommand
|
|
36
|
+
|
|
37
|
+
# Import the Click command group - this must be imported from parent level
|
|
38
|
+
# to avoid circular dependencies, as mpm_init_cli imports from core
|
|
39
|
+
# We'll handle this via late import in __all__
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
# Main command class
|
|
43
|
+
"MPMInitCommand",
|
|
44
|
+
"core",
|
|
45
|
+
# Internal modules (for internal package use)
|
|
46
|
+
"display",
|
|
47
|
+
"git_activity",
|
|
48
|
+
"modes",
|
|
49
|
+
# Click CLI command (imported via __getattr__ to avoid circular import)
|
|
50
|
+
"mpm_init",
|
|
51
|
+
"prompts",
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def __getattr__(name):
|
|
56
|
+
"""Lazy import to avoid circular dependencies.
|
|
57
|
+
|
|
58
|
+
This allows importing mpm_init Click command without importing
|
|
59
|
+
mpm_init_cli at module load time, which would cause circular imports.
|
|
60
|
+
"""
|
|
61
|
+
if name == "mpm_init":
|
|
62
|
+
# Lazy import the Click command group
|
|
63
|
+
from ..mpm_init_cli import mpm_init as _mpm_init
|
|
64
|
+
|
|
65
|
+
return _mpm_init
|
|
66
|
+
|
|
67
|
+
# For internal module imports, import them directly
|
|
68
|
+
if name in ("display", "git_activity", "prompts", "modes", "core"):
|
|
69
|
+
import importlib
|
|
70
|
+
|
|
71
|
+
return importlib.import_module(f".{name}", __package__)
|
|
72
|
+
|
|
73
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|