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
claude_mpm/cli/commands/run.py
CHANGED
|
@@ -15,23 +15,24 @@ DESIGN DECISIONS:
|
|
|
15
15
|
|
|
16
16
|
import subprocess
|
|
17
17
|
import sys
|
|
18
|
-
from datetime import datetime
|
|
18
|
+
from datetime import datetime, timezone
|
|
19
19
|
from typing import Optional
|
|
20
20
|
|
|
21
21
|
from ...constants import LogLevel
|
|
22
22
|
from ...core.logger import get_logger
|
|
23
23
|
from ...core.unified_paths import get_scripts_dir
|
|
24
|
-
from ...services.cli.dashboard_launcher import DashboardLauncher
|
|
25
24
|
from ...services.cli.session_manager import SessionManager
|
|
26
|
-
|
|
25
|
+
|
|
26
|
+
# SocketIOManager functionality now provided by UnifiedDashboardManager
|
|
27
27
|
from ...services.cli.startup_checker import StartupCheckerService
|
|
28
|
+
from ...services.cli.unified_dashboard_manager import UnifiedDashboardManager
|
|
28
29
|
from ..shared import BaseCommand, CommandResult
|
|
29
30
|
from ..startup_logging import (
|
|
30
31
|
cleanup_old_startup_logs,
|
|
31
32
|
log_startup_status,
|
|
32
33
|
setup_startup_logging,
|
|
33
34
|
)
|
|
34
|
-
from ..utils import get_user_input
|
|
35
|
+
from ..utils import get_user_input
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
def filter_claude_mpm_args(claude_args):
|
|
@@ -67,6 +68,7 @@ def filter_claude_mpm_args(claude_args):
|
|
|
67
68
|
"--no-native-agents",
|
|
68
69
|
"--launch-method",
|
|
69
70
|
"--mpm-resume",
|
|
71
|
+
"--reload-agents", # New flag to force rebuild system agents
|
|
70
72
|
# Dependency checking flags (MPM-specific)
|
|
71
73
|
"--no-check-dependencies",
|
|
72
74
|
"--force-check-dependencies",
|
|
@@ -165,10 +167,10 @@ def create_session_context(session_id, session_manager):
|
|
|
165
167
|
# Session Resumption
|
|
166
168
|
|
|
167
169
|
You are resuming session {session_id[:8]}... which was:
|
|
168
|
-
- Created: {session_data.get(
|
|
169
|
-
- Last used: {session_data.get(
|
|
170
|
-
- Context: {session_data.get(
|
|
171
|
-
- Use count: {session_data.get(
|
|
170
|
+
- Created: {session_data.get("created_at", "unknown")}
|
|
171
|
+
- Last used: {session_data.get("last_used", "unknown")}
|
|
172
|
+
- Context: {session_data.get("context", "default")}
|
|
173
|
+
- Use count: {session_data.get("use_count", 0)}
|
|
172
174
|
"""
|
|
173
175
|
|
|
174
176
|
# Add information about agents previously run in this session
|
|
@@ -324,7 +326,7 @@ class RunCommand(BaseCommand):
|
|
|
324
326
|
self.logger.warning(f"Session {resume_session_id} not found")
|
|
325
327
|
else:
|
|
326
328
|
self.logger.info("No recent interactive sessions found")
|
|
327
|
-
print("
|
|
329
|
+
print("[INFO]️ No recent interactive sessions found to resume")
|
|
328
330
|
else:
|
|
329
331
|
# Resume specific session by ID
|
|
330
332
|
resume_session_id = args.mpm_resume
|
|
@@ -359,7 +361,7 @@ class RunCommand(BaseCommand):
|
|
|
359
361
|
loader = AgentDependencyLoader(auto_install=False)
|
|
360
362
|
|
|
361
363
|
# Check if agents have changed
|
|
362
|
-
|
|
364
|
+
_has_changed, deployment_hash = loader.has_agents_changed()
|
|
363
365
|
|
|
364
366
|
# Determine if we should check dependencies
|
|
365
367
|
should_check, check_reason = smart_checker.should_check_dependencies(
|
|
@@ -423,16 +425,16 @@ class RunCommand(BaseCommand):
|
|
|
423
425
|
self.logger.warning(f"Dependency check failed: {e}")
|
|
424
426
|
|
|
425
427
|
def _setup_monitoring(self, args):
|
|
426
|
-
"""Setup monitoring configuration using
|
|
428
|
+
"""Setup monitoring configuration using UnifiedDashboardManager."""
|
|
427
429
|
monitor_mode = getattr(args, "monitor", False)
|
|
428
430
|
websocket_port = 8765 # Default port
|
|
429
431
|
|
|
430
432
|
if monitor_mode:
|
|
431
|
-
# Use
|
|
432
|
-
|
|
433
|
+
# Use UnifiedDashboardManager for server management
|
|
434
|
+
dashboard_manager = UnifiedDashboardManager(self.logger)
|
|
433
435
|
|
|
434
436
|
# Check dependencies
|
|
435
|
-
deps_ok, error_msg =
|
|
437
|
+
deps_ok, error_msg = dashboard_manager.ensure_dependencies()
|
|
436
438
|
if not deps_ok:
|
|
437
439
|
self.logger.warning(
|
|
438
440
|
f"Socket.IO dependencies not available: {error_msg}, disabling monitor mode"
|
|
@@ -440,8 +442,8 @@ class RunCommand(BaseCommand):
|
|
|
440
442
|
monitor_mode = False
|
|
441
443
|
else:
|
|
442
444
|
# Find available port and start server
|
|
443
|
-
websocket_port =
|
|
444
|
-
success,
|
|
445
|
+
websocket_port = dashboard_manager.find_available_port(8765)
|
|
446
|
+
success, _server_info = dashboard_manager.start_server(
|
|
445
447
|
port=websocket_port
|
|
446
448
|
)
|
|
447
449
|
|
|
@@ -451,12 +453,12 @@ class RunCommand(BaseCommand):
|
|
|
451
453
|
)
|
|
452
454
|
monitor_mode = False
|
|
453
455
|
else:
|
|
454
|
-
# Use
|
|
455
|
-
|
|
456
|
-
monitor_url =
|
|
456
|
+
# Use UnifiedDashboardManager for browser opening only
|
|
457
|
+
dashboard_manager = UnifiedDashboardManager(self.logger)
|
|
458
|
+
monitor_url = dashboard_manager.get_dashboard_url(websocket_port)
|
|
457
459
|
|
|
458
460
|
# Try to open browser
|
|
459
|
-
browser_opened =
|
|
461
|
+
browser_opened = dashboard_manager.open_browser(monitor_url)
|
|
460
462
|
args._browser_opened_by_cli = browser_opened
|
|
461
463
|
|
|
462
464
|
if not browser_opened:
|
|
@@ -521,7 +523,7 @@ class RunCommand(BaseCommand):
|
|
|
521
523
|
# Update session usage
|
|
522
524
|
session = session_manager.load_session(resume_session_id)
|
|
523
525
|
if session:
|
|
524
|
-
session.last_used = datetime.now().isoformat()
|
|
526
|
+
session.last_used = datetime.now(timezone.utc).isoformat()
|
|
525
527
|
session.use_count += 1
|
|
526
528
|
session_manager.save_session(session)
|
|
527
529
|
else:
|
|
@@ -567,6 +569,77 @@ class RunCommand(BaseCommand):
|
|
|
567
569
|
return False
|
|
568
570
|
|
|
569
571
|
|
|
572
|
+
def _handle_reload_agents(logger):
|
|
573
|
+
"""
|
|
574
|
+
Handle the --reload-agents flag by deleting all local claude-mpm system agents.
|
|
575
|
+
|
|
576
|
+
This forces a fresh rebuild of system agents on the next deployment,
|
|
577
|
+
while preserving user-created agents.
|
|
578
|
+
|
|
579
|
+
Args:
|
|
580
|
+
logger: Logger instance for output
|
|
581
|
+
"""
|
|
582
|
+
try:
|
|
583
|
+
logger.info("Reloading system agents - cleaning existing deployments...")
|
|
584
|
+
|
|
585
|
+
# Import the cleanup service
|
|
586
|
+
from ...services.agents.deployment.agent_deployment import (
|
|
587
|
+
AgentDeploymentService,
|
|
588
|
+
)
|
|
589
|
+
from ...services.cli.agent_cleanup_service import AgentCleanupService
|
|
590
|
+
|
|
591
|
+
# Create services
|
|
592
|
+
deployment_service = AgentDeploymentService()
|
|
593
|
+
cleanup_service = AgentCleanupService(deployment_service)
|
|
594
|
+
|
|
595
|
+
# Determine the agents directory
|
|
596
|
+
agents_dir = None # Will auto-detect project or user directory
|
|
597
|
+
|
|
598
|
+
# Clean deployed agents (preserves user agents)
|
|
599
|
+
result = cleanup_service.clean_deployed_agents(agents_dir)
|
|
600
|
+
|
|
601
|
+
# Check if cleanup was successful based on the result structure
|
|
602
|
+
# The service returns a dict with 'removed', 'preserved', and possibly 'errors' keys
|
|
603
|
+
# If it has 'success' key, use it; otherwise infer from the result
|
|
604
|
+
success = (
|
|
605
|
+
result.get("success", True)
|
|
606
|
+
if "success" in result
|
|
607
|
+
else not result.get("errors")
|
|
608
|
+
)
|
|
609
|
+
|
|
610
|
+
if success:
|
|
611
|
+
removed_count = result.get("cleaned_count", len(result.get("removed", [])))
|
|
612
|
+
removed_agents = result.get("removed", [])
|
|
613
|
+
preserved_agents = result.get("preserved", [])
|
|
614
|
+
|
|
615
|
+
if removed_count > 0:
|
|
616
|
+
logger.info(f"✅ Successfully removed {removed_count} system agents")
|
|
617
|
+
if removed_agents:
|
|
618
|
+
logger.debug(f"Removed agents: {', '.join(removed_agents)}")
|
|
619
|
+
print(f"🔄 Cleaned {removed_count} claude-mpm system agents")
|
|
620
|
+
else:
|
|
621
|
+
logger.info("No system agents found to clean")
|
|
622
|
+
print("[INFO]️ No system agents found - already clean")
|
|
623
|
+
|
|
624
|
+
if preserved_agents:
|
|
625
|
+
logger.info(f"Preserved {len(preserved_agents)} user-created agents")
|
|
626
|
+
print(f"✅ Preserved {len(preserved_agents)} user-created agents")
|
|
627
|
+
|
|
628
|
+
print("🚀 System agents will be rebuilt on next use")
|
|
629
|
+
else:
|
|
630
|
+
error = result.get("error", "Cleanup failed")
|
|
631
|
+
if result.get("errors"):
|
|
632
|
+
error = f"Cleanup errors: {', '.join(result['errors'])}"
|
|
633
|
+
logger.error(f"Failed to clean system agents: {error}")
|
|
634
|
+
print(f"❌ Error cleaning agents: {error}")
|
|
635
|
+
|
|
636
|
+
except Exception as e:
|
|
637
|
+
logger.error(f"Error handling --reload-agents: {e}", exc_info=True)
|
|
638
|
+
print(f"❌ Failed to reload agents: {e}")
|
|
639
|
+
# Don't fail the entire session, just log the error
|
|
640
|
+
print("⚠️ Continuing with existing agents...")
|
|
641
|
+
|
|
642
|
+
|
|
570
643
|
def run_session(args):
|
|
571
644
|
"""
|
|
572
645
|
Main entry point for run command.
|
|
@@ -595,8 +668,10 @@ def run_session_legacy(args):
|
|
|
595
668
|
Args:
|
|
596
669
|
args: Parsed command line arguments
|
|
597
670
|
"""
|
|
598
|
-
#
|
|
599
|
-
|
|
671
|
+
# Only setup startup logging if user wants logging
|
|
672
|
+
if args.logging != LogLevel.OFF.value:
|
|
673
|
+
# Set up startup logging to file early in the process
|
|
674
|
+
setup_startup_logging(Path.cwd())
|
|
600
675
|
|
|
601
676
|
logger = get_logger("cli")
|
|
602
677
|
if args.logging != LogLevel.OFF.value:
|
|
@@ -604,12 +679,13 @@ def run_session_legacy(args):
|
|
|
604
679
|
# Log file already announced in startup_logging.py when created
|
|
605
680
|
|
|
606
681
|
# Clean up old startup logs (using configured retention count)
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
682
|
+
if args.logging != LogLevel.OFF.value:
|
|
683
|
+
try:
|
|
684
|
+
deleted_count = cleanup_old_startup_logs(Path.cwd())
|
|
685
|
+
if deleted_count > 0:
|
|
686
|
+
logger.debug(f"Cleaned up {deleted_count} old startup log files")
|
|
687
|
+
except Exception as e:
|
|
688
|
+
logger.debug(f"Failed to clean up old logs: {e}")
|
|
613
689
|
|
|
614
690
|
# Log MCP and monitor startup status
|
|
615
691
|
if args.logging != LogLevel.OFF.value:
|
|
@@ -623,6 +699,18 @@ def run_session_legacy(args):
|
|
|
623
699
|
# Check for memory usage issues with .claude.json
|
|
624
700
|
_check_claude_json_memory(args, logger)
|
|
625
701
|
|
|
702
|
+
# Handle --reload-agents flag if specified
|
|
703
|
+
if getattr(args, "reload_agents", False):
|
|
704
|
+
_handle_reload_agents(logger)
|
|
705
|
+
|
|
706
|
+
# Trigger vector search indexing
|
|
707
|
+
try:
|
|
708
|
+
from ...cli.startup_logging import start_vector_search_indexing
|
|
709
|
+
|
|
710
|
+
start_vector_search_indexing()
|
|
711
|
+
except Exception as e:
|
|
712
|
+
logger.debug(f"Failed to start vector search indexing: {e}")
|
|
713
|
+
|
|
626
714
|
try:
|
|
627
715
|
from ...core.claude_runner import ClaudeRunner, create_simple_context
|
|
628
716
|
except ImportError:
|
|
@@ -651,7 +739,7 @@ def run_session_legacy(args):
|
|
|
651
739
|
logger.warning(f"Session {resume_session_id} not found")
|
|
652
740
|
else:
|
|
653
741
|
logger.info("No recent interactive sessions found")
|
|
654
|
-
print("
|
|
742
|
+
print("[INFO]️ No recent interactive sessions found to resume")
|
|
655
743
|
else:
|
|
656
744
|
# Resume specific session by ID
|
|
657
745
|
resume_session_id = args.mpm_resume
|
|
@@ -682,134 +770,127 @@ def run_session_legacy(args):
|
|
|
682
770
|
if getattr(args, "no_native_agents", False):
|
|
683
771
|
print("Native agents disabled")
|
|
684
772
|
else:
|
|
685
|
-
#
|
|
686
|
-
list_agent_versions_at_startup()
|
|
687
|
-
|
|
688
|
-
# Smart dependency checking - only when needed
|
|
689
|
-
if getattr(args, "check_dependencies", True): # Default to checking
|
|
690
|
-
try:
|
|
691
|
-
from ...utils.agent_dependency_loader import AgentDependencyLoader
|
|
692
|
-
from ...utils.dependency_cache import SmartDependencyChecker
|
|
693
|
-
from ...utils.environment_context import should_prompt_for_dependencies
|
|
773
|
+
# Agent versions removed from startup display - use /mpm-agents to view
|
|
774
|
+
# list_agent_versions_at_startup()
|
|
775
|
+
pass
|
|
694
776
|
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
777
|
+
# Smart dependency checking - only when needed
|
|
778
|
+
if getattr(args, "check_dependencies", True): # Default to checking
|
|
779
|
+
try:
|
|
780
|
+
from ...utils.agent_dependency_loader import AgentDependencyLoader
|
|
781
|
+
from ...utils.dependency_cache import SmartDependencyChecker
|
|
782
|
+
from ...utils.environment_context import should_prompt_for_dependencies
|
|
698
783
|
|
|
699
|
-
|
|
700
|
-
|
|
784
|
+
# Initialize smart checker
|
|
785
|
+
smart_checker = SmartDependencyChecker()
|
|
786
|
+
loader = AgentDependencyLoader(auto_install=False)
|
|
701
787
|
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
force_check=getattr(args, "force_check_dependencies", False),
|
|
705
|
-
deployment_hash=deployment_hash,
|
|
706
|
-
)
|
|
788
|
+
# Check if agents have changed
|
|
789
|
+
_has_changed, deployment_hash = loader.has_agents_changed()
|
|
707
790
|
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
)
|
|
791
|
+
# Determine if we should check dependencies
|
|
792
|
+
should_check, check_reason = smart_checker.should_check_dependencies(
|
|
793
|
+
force_check=getattr(args, "force_check_dependencies", False),
|
|
794
|
+
deployment_hash=deployment_hash,
|
|
795
|
+
)
|
|
714
796
|
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
)
|
|
797
|
+
if should_check:
|
|
798
|
+
# Check if we're in an environment where prompting makes sense
|
|
799
|
+
can_prompt, prompt_reason = should_prompt_for_dependencies(
|
|
800
|
+
force_prompt=getattr(args, "force_prompt", False),
|
|
801
|
+
force_skip=getattr(args, "no_prompt", False),
|
|
802
|
+
)
|
|
719
803
|
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
loader=loader,
|
|
723
|
-
force_check=getattr(args, "force_check_dependencies", False),
|
|
724
|
-
)
|
|
804
|
+
logger.debug(f"Dependency check needed: {check_reason}")
|
|
805
|
+
logger.debug(f"Interactive prompting: {can_prompt} ({prompt_reason})")
|
|
725
806
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
if can_prompt and missing_count > 0:
|
|
732
|
-
# Interactive prompt for installation
|
|
733
|
-
print("\n📦 Missing dependencies detected:")
|
|
734
|
-
for dep in results["summary"]["missing_python"][:5]:
|
|
735
|
-
print(f" - {dep}")
|
|
736
|
-
if missing_count > 5:
|
|
737
|
-
print(f" ... and {missing_count - 5} more")
|
|
738
|
-
|
|
739
|
-
print("\nWould you like to install them now?")
|
|
740
|
-
print(" [y] Yes, install missing dependencies")
|
|
741
|
-
print(" [n] No, continue without installing")
|
|
742
|
-
print(" [q] Quit")
|
|
743
|
-
|
|
744
|
-
sys.stdout.flush() # Ensure prompt is displayed before input
|
|
745
|
-
|
|
746
|
-
# Check if we're in a TTY environment for proper input handling
|
|
747
|
-
if not sys.stdin.isatty():
|
|
748
|
-
# In non-TTY environment (like pipes), use readline
|
|
749
|
-
print("\nChoice [y/n/q]: ", end="", flush=True)
|
|
750
|
-
try:
|
|
751
|
-
response = sys.stdin.readline().strip().lower()
|
|
752
|
-
# Handle various line endings and control characters
|
|
753
|
-
response = (
|
|
754
|
-
response.replace("\r", "")
|
|
755
|
-
.replace("\n", "")
|
|
756
|
-
.strip()
|
|
757
|
-
)
|
|
758
|
-
except (EOFError, KeyboardInterrupt):
|
|
759
|
-
response = "q"
|
|
760
|
-
else:
|
|
761
|
-
# In TTY environment, use normal input()
|
|
762
|
-
try:
|
|
763
|
-
response = (
|
|
764
|
-
input("\nChoice [y/n/q]: ").strip().lower()
|
|
765
|
-
)
|
|
766
|
-
except (EOFError, KeyboardInterrupt):
|
|
767
|
-
response = "q"
|
|
807
|
+
# Get or check dependencies
|
|
808
|
+
results, was_cached = smart_checker.get_or_check_dependencies(
|
|
809
|
+
loader=loader,
|
|
810
|
+
force_check=getattr(args, "force_check_dependencies", False),
|
|
811
|
+
)
|
|
768
812
|
|
|
813
|
+
# Show summary if there are missing dependencies
|
|
814
|
+
if results["summary"]["missing_python"]:
|
|
815
|
+
missing_count = len(results["summary"]["missing_python"])
|
|
816
|
+
print(f"⚠️ {missing_count} agent dependencies missing")
|
|
817
|
+
|
|
818
|
+
if can_prompt and missing_count > 0:
|
|
819
|
+
# Interactive prompt for installation
|
|
820
|
+
print("\n📦 Missing dependencies detected:")
|
|
821
|
+
for dep in results["summary"]["missing_python"][:5]:
|
|
822
|
+
print(f" - {dep}")
|
|
823
|
+
if missing_count > 5:
|
|
824
|
+
print(f" ... and {missing_count - 5} more")
|
|
825
|
+
|
|
826
|
+
print("\nWould you like to install them now?")
|
|
827
|
+
print(" [y] Yes, install missing dependencies")
|
|
828
|
+
print(" [n] No, continue without installing")
|
|
829
|
+
print(" [q] Quit")
|
|
830
|
+
|
|
831
|
+
sys.stdout.flush() # Ensure prompt is displayed before input
|
|
832
|
+
|
|
833
|
+
# Check if we're in a TTY environment for proper input handling
|
|
834
|
+
if not sys.stdin.isatty():
|
|
835
|
+
# In non-TTY environment (like pipes), use readline
|
|
836
|
+
print("\nChoice [y/n/q]: ", end="", flush=True)
|
|
769
837
|
try:
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
(
|
|
774
|
-
|
|
775
|
-
error,
|
|
776
|
-
) = loader.install_missing_dependencies(
|
|
777
|
-
results["summary"]["missing_python"]
|
|
778
|
-
)
|
|
779
|
-
if success:
|
|
780
|
-
print("✅ Dependencies installed successfully")
|
|
781
|
-
# Invalidate cache after installation
|
|
782
|
-
smart_checker.cache.invalidate(deployment_hash)
|
|
783
|
-
else:
|
|
784
|
-
print(f"❌ Installation failed: {error}")
|
|
785
|
-
elif response == "q":
|
|
786
|
-
print("👋 Exiting...")
|
|
787
|
-
return
|
|
788
|
-
else:
|
|
789
|
-
print(
|
|
790
|
-
"⏩ Continuing without installing dependencies"
|
|
791
|
-
)
|
|
838
|
+
response = sys.stdin.readline().strip().lower()
|
|
839
|
+
# Handle various line endings and control characters
|
|
840
|
+
response = (
|
|
841
|
+
response.replace("\r", "").replace("\n", "").strip()
|
|
842
|
+
)
|
|
792
843
|
except (EOFError, KeyboardInterrupt):
|
|
793
|
-
|
|
844
|
+
response = "q"
|
|
794
845
|
else:
|
|
795
|
-
#
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
)
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
846
|
+
# In TTY environment, use normal input()
|
|
847
|
+
try:
|
|
848
|
+
response = input("\nChoice [y/n/q]: ").strip().lower()
|
|
849
|
+
except (EOFError, KeyboardInterrupt):
|
|
850
|
+
response = "q"
|
|
851
|
+
|
|
852
|
+
try:
|
|
853
|
+
if response == "y":
|
|
854
|
+
print("\n🔧 Installing missing dependencies...")
|
|
855
|
+
loader.auto_install = True
|
|
856
|
+
(
|
|
857
|
+
success,
|
|
858
|
+
error,
|
|
859
|
+
) = loader.install_missing_dependencies(
|
|
860
|
+
results["summary"]["missing_python"]
|
|
802
861
|
)
|
|
803
|
-
|
|
804
|
-
|
|
862
|
+
if success:
|
|
863
|
+
print("✅ Dependencies installed successfully")
|
|
864
|
+
# Invalidate cache after installation
|
|
865
|
+
smart_checker.cache.invalidate(deployment_hash)
|
|
866
|
+
else:
|
|
867
|
+
print(f"❌ Installation failed: {error}")
|
|
868
|
+
elif response == "q":
|
|
869
|
+
print("👋 Exiting...")
|
|
870
|
+
return
|
|
871
|
+
else:
|
|
872
|
+
print("⏩ Continuing without installing dependencies")
|
|
873
|
+
except (EOFError, KeyboardInterrupt):
|
|
874
|
+
print("\n⏩ Continuing without installing dependencies")
|
|
805
875
|
else:
|
|
806
|
-
|
|
876
|
+
# Non-interactive environment or prompting disabled
|
|
877
|
+
print(
|
|
878
|
+
" Run 'pip install \"claude-mpm[agents]\"' to install all agent dependencies"
|
|
879
|
+
)
|
|
880
|
+
if not can_prompt:
|
|
881
|
+
logger.debug(
|
|
882
|
+
f"Not prompting for installation: {prompt_reason}"
|
|
883
|
+
)
|
|
884
|
+
elif was_cached:
|
|
885
|
+
logger.debug("Dependencies satisfied (cached result)")
|
|
807
886
|
else:
|
|
808
|
-
logger.debug(
|
|
887
|
+
logger.debug("All dependencies satisfied")
|
|
888
|
+
else:
|
|
889
|
+
logger.debug(f"Skipping dependency check: {check_reason}")
|
|
809
890
|
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
891
|
+
except Exception as e:
|
|
892
|
+
if args.logging != LogLevel.OFF.value:
|
|
893
|
+
logger.debug(f"Could not check agent dependencies: {e}")
|
|
813
894
|
# Continue anyway - don't block execution
|
|
814
895
|
|
|
815
896
|
# Create simple runner
|
|
@@ -824,7 +905,7 @@ def run_session_legacy(args):
|
|
|
824
905
|
raw_claude_args = ["--resume", *raw_claude_args]
|
|
825
906
|
logger.info("✅ Added --resume to claude_args")
|
|
826
907
|
else:
|
|
827
|
-
logger.info("
|
|
908
|
+
logger.info("[INFO]️ --resume already in claude_args")
|
|
828
909
|
|
|
829
910
|
# Filter out claude-mpm specific flags before passing to Claude CLI
|
|
830
911
|
logger.debug(f"Pre-filter claude_args: {raw_claude_args}")
|
|
@@ -855,12 +936,12 @@ def run_session_legacy(args):
|
|
|
855
936
|
|
|
856
937
|
# Display Socket.IO server info if enabled
|
|
857
938
|
if enable_websocket:
|
|
858
|
-
# Use
|
|
859
|
-
|
|
939
|
+
# Use UnifiedDashboardManager for server management
|
|
940
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
860
941
|
|
|
861
942
|
# Check dependencies
|
|
862
943
|
print("🔧 Checking Socket.IO dependencies...")
|
|
863
|
-
deps_ok, error_msg =
|
|
944
|
+
deps_ok, error_msg = dashboard_manager.ensure_dependencies()
|
|
864
945
|
|
|
865
946
|
if not deps_ok:
|
|
866
947
|
print(f"❌ Failed to install Socket.IO dependencies: {error_msg}")
|
|
@@ -874,8 +955,8 @@ def run_session_legacy(args):
|
|
|
874
955
|
|
|
875
956
|
# Find available port and start server if in monitor mode
|
|
876
957
|
if monitor_mode:
|
|
877
|
-
websocket_port =
|
|
878
|
-
success, server_info =
|
|
958
|
+
websocket_port = dashboard_manager.find_available_port(websocket_port)
|
|
959
|
+
success, server_info = dashboard_manager.start_server(
|
|
879
960
|
port=websocket_port
|
|
880
961
|
)
|
|
881
962
|
|
|
@@ -886,18 +967,23 @@ def run_session_legacy(args):
|
|
|
886
967
|
" Note: Socket.IO monitoring using exec mode with Claude Code hooks"
|
|
887
968
|
)
|
|
888
969
|
|
|
889
|
-
# Use
|
|
890
|
-
|
|
891
|
-
monitor_url =
|
|
892
|
-
browser_opened =
|
|
970
|
+
# Use UnifiedDashboardManager for browser opening
|
|
971
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
972
|
+
monitor_url = dashboard_manager.get_dashboard_url(websocket_port)
|
|
973
|
+
browser_opened = dashboard_manager.open_browser(monitor_url)
|
|
893
974
|
args._browser_opened_by_cli = browser_opened
|
|
894
975
|
|
|
895
976
|
if not browser_opened:
|
|
896
977
|
print(f"💡 Monitor interface available at: {monitor_url}")
|
|
897
978
|
else:
|
|
898
979
|
print("⚠️ Failed to launch Socket.IO monitor")
|
|
980
|
+
print("Dashboard is not running. To enable monitoring:")
|
|
981
|
+
print(" 1. Use the --monitor flag: claude-mpm run --monitor")
|
|
982
|
+
print(
|
|
983
|
+
" 2. Or start dashboard separately: claude-mpm dashboard start"
|
|
984
|
+
)
|
|
899
985
|
print(
|
|
900
|
-
f"
|
|
986
|
+
f" 3. Dashboard will be available at: http://localhost:{websocket_port}"
|
|
901
987
|
)
|
|
902
988
|
args._browser_opened_by_cli = False
|
|
903
989
|
else:
|
|
@@ -930,7 +1016,7 @@ def run_session_legacy(args):
|
|
|
930
1016
|
# Update session usage
|
|
931
1017
|
session = session_manager.load_session(resume_session_id)
|
|
932
1018
|
if session:
|
|
933
|
-
session.last_used = datetime.now().isoformat()
|
|
1019
|
+
session.last_used = datetime.now(timezone.utc).isoformat()
|
|
934
1020
|
session.use_count += 1
|
|
935
1021
|
session_manager.save_session(session)
|
|
936
1022
|
else:
|
|
@@ -966,16 +1052,15 @@ def run_session_legacy(args):
|
|
|
966
1052
|
runner.run_interactive(context)
|
|
967
1053
|
|
|
968
1054
|
|
|
969
|
-
# Legacy helper functions - now delegating to
|
|
1055
|
+
# Legacy helper functions - now delegating to UnifiedDashboardManager
|
|
970
1056
|
def launch_socketio_monitor(port, logger):
|
|
971
1057
|
"""Launch the Socket.IO monitoring dashboard (legacy compatibility)."""
|
|
972
|
-
|
|
973
|
-
success, server_info =
|
|
1058
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
1059
|
+
success, server_info = dashboard_manager.start_server(port=port)
|
|
974
1060
|
|
|
975
1061
|
if success:
|
|
976
|
-
# Open browser using
|
|
977
|
-
|
|
978
|
-
browser_opened = launcher._open_browser(server_info.url)
|
|
1062
|
+
# Open browser using UnifiedDashboardManager
|
|
1063
|
+
browser_opened = dashboard_manager.open_browser(server_info.url)
|
|
979
1064
|
return success, browser_opened
|
|
980
1065
|
|
|
981
1066
|
return False, False
|
|
@@ -983,21 +1068,21 @@ def launch_socketio_monitor(port, logger):
|
|
|
983
1068
|
|
|
984
1069
|
def _check_socketio_server_running(port, logger):
|
|
985
1070
|
"""Check if a Socket.IO server is running on the specified port (legacy compatibility)."""
|
|
986
|
-
|
|
987
|
-
return
|
|
1071
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
1072
|
+
return dashboard_manager.is_server_running(port)
|
|
988
1073
|
|
|
989
1074
|
|
|
990
1075
|
def _start_standalone_socketio_server(port, logger):
|
|
991
1076
|
"""Start a standalone Socket.IO server (legacy compatibility)."""
|
|
992
|
-
|
|
993
|
-
success, _ =
|
|
1077
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
1078
|
+
success, _ = dashboard_manager.start_server(port=port)
|
|
994
1079
|
return success
|
|
995
1080
|
|
|
996
1081
|
|
|
997
1082
|
def open_in_browser_tab(url, logger):
|
|
998
1083
|
"""Open URL in browser, attempting to reuse existing tabs when possible."""
|
|
999
|
-
|
|
1000
|
-
return
|
|
1084
|
+
manager = UnifiedDashboardManager(logger)
|
|
1085
|
+
return manager.open_browser(url)
|
|
1001
1086
|
|
|
1002
1087
|
|
|
1003
1088
|
def _check_claude_json_memory(args, logger):
|