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/core/cache.py
CHANGED
|
@@ -19,7 +19,7 @@ import pickle
|
|
|
19
19
|
import threading
|
|
20
20
|
from collections import OrderedDict
|
|
21
21
|
from dataclasses import dataclass, field
|
|
22
|
-
from datetime import datetime
|
|
22
|
+
from datetime import datetime, timezone
|
|
23
23
|
from typing import Any, Callable, Dict, Optional, TypeVar, Union
|
|
24
24
|
|
|
25
25
|
from ..core.logger import get_logger
|
|
@@ -43,12 +43,12 @@ class CacheEntry:
|
|
|
43
43
|
"""Check if entry has expired based on TTL."""
|
|
44
44
|
if self.ttl is None:
|
|
45
45
|
return False
|
|
46
|
-
age = (datetime.now() - self.created_at).total_seconds()
|
|
46
|
+
age = (datetime.now(timezone.utc) - self.created_at).total_seconds()
|
|
47
47
|
return age > self.ttl
|
|
48
48
|
|
|
49
49
|
def touch(self):
|
|
50
50
|
"""Update last access time and increment counter."""
|
|
51
|
-
self.last_accessed = datetime.now()
|
|
51
|
+
self.last_accessed = datetime.now(timezone.utc)
|
|
52
52
|
self.access_count += 1
|
|
53
53
|
|
|
54
54
|
|
|
@@ -129,13 +129,13 @@ class FileSystemCache:
|
|
|
129
129
|
# Rough estimate using JSON serialization
|
|
130
130
|
try:
|
|
131
131
|
return len(json.dumps(value))
|
|
132
|
-
except:
|
|
132
|
+
except Exception:
|
|
133
133
|
return 1000 # Default estimate
|
|
134
134
|
else:
|
|
135
135
|
# Use pickle for size estimation
|
|
136
136
|
try:
|
|
137
137
|
return len(pickle.dumps(value))
|
|
138
|
-
except:
|
|
138
|
+
except Exception:
|
|
139
139
|
return 100 # Default small size
|
|
140
140
|
|
|
141
141
|
def _evict_lru(self):
|
|
@@ -288,10 +288,10 @@ class FileSystemCache:
|
|
|
288
288
|
"""Read file from disk."""
|
|
289
289
|
try:
|
|
290
290
|
if "b" in mode:
|
|
291
|
-
with open(
|
|
291
|
+
with Path(file_path).open(mode) as f:
|
|
292
292
|
return f.read()
|
|
293
293
|
else:
|
|
294
|
-
with open(
|
|
294
|
+
with Path(file_path).open(mode, encoding=encoding) as f:
|
|
295
295
|
return f.read()
|
|
296
296
|
except Exception as e:
|
|
297
297
|
self._logger.error(f"Failed to read file {file_path}: {e}")
|
|
@@ -391,7 +391,7 @@ class FileSystemCache:
|
|
|
391
391
|
|
|
392
392
|
try:
|
|
393
393
|
self.persist_path.parent.mkdir(parents=True, exist_ok=True)
|
|
394
|
-
with
|
|
394
|
+
with self.persist_path.open("wb") as f:
|
|
395
395
|
pickle.dump(self._cache, f)
|
|
396
396
|
self._logger.debug(f"Cache persisted to {self.persist_path}")
|
|
397
397
|
except Exception as e:
|
|
@@ -403,7 +403,7 @@ class FileSystemCache:
|
|
|
403
403
|
return
|
|
404
404
|
|
|
405
405
|
try:
|
|
406
|
-
with
|
|
406
|
+
with self.persist_path.open("rb") as f:
|
|
407
407
|
loaded_cache = pickle.load(f)
|
|
408
408
|
|
|
409
409
|
# Rebuild cache with validation
|
claude_mpm/core/claude_runner.py
CHANGED
|
@@ -6,15 +6,9 @@ from typing import Optional
|
|
|
6
6
|
|
|
7
7
|
# Core imports that don't cause circular dependencies
|
|
8
8
|
from claude_mpm.core.container import get_container
|
|
9
|
-
from claude_mpm.core.interfaces import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
from claude_mpm.core.logging_config import (
|
|
13
|
-
get_logger,
|
|
14
|
-
)
|
|
15
|
-
from claude_mpm.services.core.interfaces import (
|
|
16
|
-
RunnerConfigurationInterface,
|
|
17
|
-
)
|
|
9
|
+
from claude_mpm.core.interfaces import AgentDeploymentInterface
|
|
10
|
+
from claude_mpm.core.logging_config import get_logger
|
|
11
|
+
from claude_mpm.services.core.interfaces import RunnerConfigurationInterface
|
|
18
12
|
|
|
19
13
|
# Type checking imports to avoid circular dependencies
|
|
20
14
|
|
|
@@ -42,8 +36,19 @@ class ClaudeRunner:
|
|
|
42
36
|
launch_method: str = "exec", # "exec" or "subprocess"
|
|
43
37
|
enable_websocket: bool = False,
|
|
44
38
|
websocket_port: int = 8765,
|
|
39
|
+
use_native_agents: bool = False, # Use --agents flag instead of file deployment
|
|
45
40
|
):
|
|
46
|
-
"""Initialize the Claude runner.
|
|
41
|
+
"""Initialize the Claude runner.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
enable_tickets: Enable ticket extraction (deprecated)
|
|
45
|
+
log_level: Logging level
|
|
46
|
+
claude_args: Additional arguments for Claude CLI
|
|
47
|
+
launch_method: "exec" or "subprocess" launch mode
|
|
48
|
+
enable_websocket: Enable WebSocket server
|
|
49
|
+
websocket_port: WebSocket server port
|
|
50
|
+
use_native_agents: Use --agents CLI flag instead of .claude/agents/ deployment
|
|
51
|
+
"""
|
|
47
52
|
self.logger = get_logger(__name__)
|
|
48
53
|
|
|
49
54
|
# Initialize configuration service
|
|
@@ -75,6 +80,7 @@ class ClaudeRunner:
|
|
|
75
80
|
launch_method=launch_method,
|
|
76
81
|
enable_websocket=enable_websocket,
|
|
77
82
|
websocket_port=websocket_port,
|
|
83
|
+
use_native_agents=use_native_agents,
|
|
78
84
|
)
|
|
79
85
|
|
|
80
86
|
# Set configuration attributes
|
|
@@ -84,6 +90,7 @@ class ClaudeRunner:
|
|
|
84
90
|
self.launch_method = config_data["launch_method"]
|
|
85
91
|
self.enable_websocket = config_data["enable_websocket"]
|
|
86
92
|
self.websocket_port = config_data["websocket_port"]
|
|
93
|
+
self.use_native_agents = config_data.get("use_native_agents", False)
|
|
87
94
|
self.config = config_data["config"]
|
|
88
95
|
|
|
89
96
|
# Initialize project logger using the service
|
|
@@ -462,13 +469,11 @@ class ClaudeRunner:
|
|
|
462
469
|
if (
|
|
463
470
|
"author: claude-mpm-project" in existing_content
|
|
464
471
|
or "source: project" in existing_content
|
|
465
|
-
):
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
f"Project agent {agent_name} is up to date"
|
|
471
|
-
)
|
|
472
|
+
) and target_file.stat().st_mtime >= json_file.stat().st_mtime:
|
|
473
|
+
needs_update = False
|
|
474
|
+
self.logger.debug(
|
|
475
|
+
f"Project agent {agent_name} is up to date"
|
|
476
|
+
)
|
|
472
477
|
|
|
473
478
|
if needs_update:
|
|
474
479
|
# Build the agent markdown using the pre-initialized service and base agent data
|
|
@@ -797,31 +802,8 @@ Use these agents to delegate specialized work via the Task tool.
|
|
|
797
802
|
raise RuntimeError("Subprocess launcher service not available")
|
|
798
803
|
|
|
799
804
|
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
return """You are Claude Code running in Claude MPM (Multi-Agent Project Manager).
|
|
803
|
-
|
|
804
|
-
You have access to native subagents via the Task tool with subagent_type parameter:
|
|
805
|
-
- engineer: For coding, implementation, and technical tasks
|
|
806
|
-
- qa: For testing, validation, and quality assurance
|
|
807
|
-
- documentation: For docs, guides, and explanations
|
|
808
|
-
- research: For investigation and analysis
|
|
809
|
-
- security: For security-related tasks
|
|
810
|
-
- ops: For deployment and infrastructure
|
|
811
|
-
- version-control: For git and version management
|
|
812
|
-
- data-engineer: For data processing and APIs
|
|
813
|
-
|
|
814
|
-
Use these agents by calling: Task(description="task description", subagent_type="agent_name")
|
|
815
|
-
|
|
816
|
-
IMPORTANT: The Task tool accepts both naming formats:
|
|
817
|
-
- Capitalized format: "Research", "Engineer", "QA", "Version Control", "Data Engineer"
|
|
818
|
-
- Lowercase format: "research", "engineer", "qa", "version-control", "data-engineer"
|
|
819
|
-
|
|
820
|
-
Both formats work correctly. When you see capitalized names (matching TodoWrite prefixes),
|
|
821
|
-
automatically normalize them to lowercase-hyphenated format for the Task tool.
|
|
822
|
-
|
|
823
|
-
Work efficiently and delegate appropriately to subagents when needed."""
|
|
824
|
-
|
|
805
|
+
# Moved to claude_mpm.core.system_context to avoid circular imports
|
|
806
|
+
from claude_mpm.core.system_context import create_simple_context
|
|
825
807
|
|
|
826
808
|
# Backward compatibility alias
|
|
827
809
|
SimpleClaudeRunner = ClaudeRunner
|
claude_mpm/core/config.py
CHANGED
|
@@ -14,11 +14,13 @@ from typing import Any, Dict, List, Optional, Tuple, Union
|
|
|
14
14
|
|
|
15
15
|
import yaml
|
|
16
16
|
|
|
17
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
18
|
+
|
|
17
19
|
from ..utils.config_manager import ConfigurationManager
|
|
18
20
|
from .exceptions import ConfigurationError, FileOperationError
|
|
19
21
|
from .unified_paths import get_path_manager
|
|
20
22
|
|
|
21
|
-
logger =
|
|
23
|
+
logger = get_logger(__name__)
|
|
22
24
|
|
|
23
25
|
|
|
24
26
|
class Config:
|
|
@@ -54,7 +56,7 @@ class Config:
|
|
|
54
56
|
# Double-check locking pattern for thread safety
|
|
55
57
|
if cls._instance is None:
|
|
56
58
|
cls._instance = super().__new__(cls)
|
|
57
|
-
logger.
|
|
59
|
+
logger.debug("Creating new Config singleton instance")
|
|
58
60
|
else:
|
|
59
61
|
logger.debug(
|
|
60
62
|
"Reusing existing Config singleton instance (concurrent init)"
|
|
@@ -100,7 +102,7 @@ class Config:
|
|
|
100
102
|
return
|
|
101
103
|
|
|
102
104
|
Config._initialized = True
|
|
103
|
-
logger.
|
|
105
|
+
logger.debug("Initializing Config singleton for the first time")
|
|
104
106
|
|
|
105
107
|
# Initialize instance variables inside the lock to ensure thread safety
|
|
106
108
|
self._config: Dict[str, Any] = {}
|
|
@@ -199,7 +201,7 @@ class Config:
|
|
|
199
201
|
# Set flag IMMEDIATELY before logging to prevent any possibility of duplicate
|
|
200
202
|
# messages. No lock needed here since we're already inside __init__ lock
|
|
201
203
|
Config._success_logged = True
|
|
202
|
-
logger.
|
|
204
|
+
logger.debug(
|
|
203
205
|
f"✓ Successfully loaded configuration from {file_path}"
|
|
204
206
|
)
|
|
205
207
|
else:
|
|
@@ -251,7 +253,7 @@ class Config:
|
|
|
251
253
|
"operation": "read",
|
|
252
254
|
"error_type": type(e).__name__,
|
|
253
255
|
},
|
|
254
|
-
)
|
|
256
|
+
) from e
|
|
255
257
|
except Exception as e:
|
|
256
258
|
# Catch any remaining unexpected errors and wrap them as configuration errors
|
|
257
259
|
raise ConfigurationError(
|
|
@@ -261,7 +263,7 @@ class Config:
|
|
|
261
263
|
"error_type": type(e).__name__,
|
|
262
264
|
"original_error": str(e),
|
|
263
265
|
},
|
|
264
|
-
)
|
|
266
|
+
) from e
|
|
265
267
|
|
|
266
268
|
def _load_env_vars(self) -> None:
|
|
267
269
|
"""Load configuration from environment variables."""
|
|
@@ -527,11 +529,36 @@ class Config:
|
|
|
527
529
|
},
|
|
528
530
|
},
|
|
529
531
|
},
|
|
532
|
+
# Monitor server configuration (decoupled from dashboard)
|
|
533
|
+
"monitor_server": {
|
|
534
|
+
"host": "localhost",
|
|
535
|
+
"port": 8765, # Default monitor port (shared with dashboard)
|
|
536
|
+
"enable_health_monitoring": True,
|
|
537
|
+
"auto_start": False, # Don't auto-start with dashboard by default
|
|
538
|
+
"event_buffer_size": 2000, # Larger buffer for monitor server
|
|
539
|
+
"client_timeout": 60, # Timeout for inactive clients
|
|
540
|
+
},
|
|
541
|
+
# Dashboard server configuration (connects to monitor)
|
|
542
|
+
"dashboard_server": {
|
|
543
|
+
"host": "localhost",
|
|
544
|
+
"port": 8765, # Dashboard UI port
|
|
545
|
+
"monitor_host": "localhost", # Monitor server host to connect to
|
|
546
|
+
"monitor_port": 8765, # Monitor server port to connect to
|
|
547
|
+
"auto_connect_monitor": True, # Automatically connect to monitor
|
|
548
|
+
"monitor_reconnect": True, # Auto-reconnect to monitor if disconnected
|
|
549
|
+
"fallback_standalone": True, # Run in standalone mode if monitor unavailable
|
|
550
|
+
},
|
|
530
551
|
# Agent deployment configuration
|
|
531
552
|
"agent_deployment": {
|
|
532
553
|
"excluded_agents": [], # List of agent IDs to exclude from deployment
|
|
533
554
|
"exclude_dependencies": False, # Whether to exclude agent dependencies too
|
|
534
555
|
"case_sensitive": False, # Whether agent name matching is case-sensitive
|
|
556
|
+
"filter_non_mpm_agents": True, # Filter out non-MPM agents by default
|
|
557
|
+
"mpm_author_patterns": [
|
|
558
|
+
"claude mpm",
|
|
559
|
+
"claude-mpm",
|
|
560
|
+
"anthropic",
|
|
561
|
+
], # Patterns for MPM agents
|
|
535
562
|
},
|
|
536
563
|
# Instruction reinforcement system configuration
|
|
537
564
|
"instruction_reinforcement": {
|
|
@@ -551,6 +578,35 @@ class Config:
|
|
|
551
578
|
"[PM-REMINDER] Your role is coordination and management",
|
|
552
579
|
],
|
|
553
580
|
},
|
|
581
|
+
# Session management configuration
|
|
582
|
+
"session": {
|
|
583
|
+
"auto_save": True, # Enable automatic session saving
|
|
584
|
+
"save_interval": 300, # Auto-save interval in seconds (5 minutes)
|
|
585
|
+
},
|
|
586
|
+
# Update checking configuration
|
|
587
|
+
"updates": {
|
|
588
|
+
"check_enabled": True, # Enable automatic update checks
|
|
589
|
+
"check_frequency": "daily", # Options: "always", "daily", "weekly", "never"
|
|
590
|
+
"check_claude_code": True, # Check Claude Code version compatibility
|
|
591
|
+
"auto_upgrade": False, # Automatically upgrade without prompting (use with caution)
|
|
592
|
+
"cache_ttl": 86400, # Cache update check results (24 hours)
|
|
593
|
+
},
|
|
594
|
+
# Agent synchronization configuration
|
|
595
|
+
"agent_sync": {
|
|
596
|
+
"enabled": True, # Enable automatic agent sync on startup
|
|
597
|
+
"sources": [
|
|
598
|
+
{
|
|
599
|
+
"id": "github-remote",
|
|
600
|
+
"url": "https://raw.githubusercontent.com/bobmatnyc/claude-mpm-agents/main/agents",
|
|
601
|
+
"priority": 100,
|
|
602
|
+
"enabled": True,
|
|
603
|
+
}
|
|
604
|
+
],
|
|
605
|
+
"sync_interval": "startup", # Options: "startup", "hourly", "daily", "manual"
|
|
606
|
+
"cache_dir": str(
|
|
607
|
+
Path.home() / ".claude-mpm" / "cache" / "remote-agents"
|
|
608
|
+
),
|
|
609
|
+
},
|
|
554
610
|
}
|
|
555
611
|
|
|
556
612
|
# Apply defaults for missing keys
|
|
@@ -561,6 +617,9 @@ class Config:
|
|
|
561
617
|
# Validate health and recovery configuration
|
|
562
618
|
self._validate_health_recovery_config()
|
|
563
619
|
|
|
620
|
+
# Validate session configuration
|
|
621
|
+
self._validate_session_config()
|
|
622
|
+
|
|
564
623
|
def get(self, key: str, default: Any = None) -> Any:
|
|
565
624
|
"""Get configuration value."""
|
|
566
625
|
# Support nested keys with dot notation
|
|
@@ -624,7 +683,7 @@ class Config:
|
|
|
624
683
|
"format": format,
|
|
625
684
|
"error_type": type(e).__name__,
|
|
626
685
|
},
|
|
627
|
-
)
|
|
686
|
+
) from e
|
|
628
687
|
except Exception as e:
|
|
629
688
|
# Re-raise ConfigurationError as-is, wrap others
|
|
630
689
|
if isinstance(e, ConfigurationError):
|
|
@@ -636,7 +695,7 @@ class Config:
|
|
|
636
695
|
"format": format,
|
|
637
696
|
"error_type": type(e).__name__,
|
|
638
697
|
},
|
|
639
|
-
)
|
|
698
|
+
) from e
|
|
640
699
|
|
|
641
700
|
def validate(self, schema: Dict[str, Any]) -> bool:
|
|
642
701
|
"""
|
|
@@ -737,6 +796,40 @@ class Config:
|
|
|
737
796
|
except Exception as e:
|
|
738
797
|
logger.error(f"Error validating health/recovery configuration: {e}")
|
|
739
798
|
|
|
799
|
+
def _validate_session_config(self) -> None:
|
|
800
|
+
"""Validate session management configuration."""
|
|
801
|
+
try:
|
|
802
|
+
session_config = self.get("session", {})
|
|
803
|
+
|
|
804
|
+
# Validate save_interval range (60-1800 seconds)
|
|
805
|
+
save_interval = session_config.get("save_interval", 300)
|
|
806
|
+
if not isinstance(save_interval, int):
|
|
807
|
+
logger.warning(
|
|
808
|
+
f"Session save_interval must be integer, got {type(save_interval).__name__}, using default 300"
|
|
809
|
+
)
|
|
810
|
+
self.set("session.save_interval", 300)
|
|
811
|
+
elif save_interval < 60:
|
|
812
|
+
logger.warning(
|
|
813
|
+
f"Session save_interval must be at least 60 seconds, got {save_interval}, using 60"
|
|
814
|
+
)
|
|
815
|
+
self.set("session.save_interval", 60)
|
|
816
|
+
elif save_interval > 1800:
|
|
817
|
+
logger.warning(
|
|
818
|
+
f"Session save_interval must be at most 1800 seconds (30 min), got {save_interval}, using 1800"
|
|
819
|
+
)
|
|
820
|
+
self.set("session.save_interval", 1800)
|
|
821
|
+
|
|
822
|
+
# Validate auto_save is boolean
|
|
823
|
+
auto_save = session_config.get("auto_save", True)
|
|
824
|
+
if not isinstance(auto_save, bool):
|
|
825
|
+
logger.warning(
|
|
826
|
+
f"Session auto_save must be boolean, got {type(auto_save).__name__}, using True"
|
|
827
|
+
)
|
|
828
|
+
self.set("session.auto_save", True)
|
|
829
|
+
|
|
830
|
+
except Exception as e:
|
|
831
|
+
logger.error(f"Error validating session configuration: {e}")
|
|
832
|
+
|
|
740
833
|
def get_health_monitoring_config(self) -> Dict[str, Any]:
|
|
741
834
|
"""Get health monitoring configuration with defaults."""
|
|
742
835
|
base_config = {
|
|
@@ -14,13 +14,14 @@ Aliases are stored in ~/.claude-mpm/config_aliases.json
|
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
16
|
import json
|
|
17
|
-
import logging
|
|
18
17
|
from typing import Dict, List, Optional, Tuple
|
|
19
18
|
|
|
19
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
20
|
+
|
|
20
21
|
from ..utils.config_manager import ConfigurationManager
|
|
21
22
|
from .unified_paths import get_path_manager
|
|
22
23
|
|
|
23
|
-
logger =
|
|
24
|
+
logger = get_logger(__name__)
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
class ConfigAliasError(Exception):
|
|
@@ -87,7 +88,7 @@ class ConfigAliasManager:
|
|
|
87
88
|
self.config_mgr.save_json(aliases, self.aliases_file, sort_keys=True)
|
|
88
89
|
except Exception as e:
|
|
89
90
|
logger.error(f"Failed to save aliases: {e}")
|
|
90
|
-
raise ConfigAliasError(f"Failed to save aliases: {e}")
|
|
91
|
+
raise ConfigAliasError(f"Failed to save aliases: {e}") from e
|
|
91
92
|
|
|
92
93
|
def create_alias(self, alias_name: str, directory_path: str) -> None:
|
|
93
94
|
"""
|
|
@@ -210,7 +211,7 @@ class ConfigAliasManager:
|
|
|
210
211
|
except Exception as e:
|
|
211
212
|
raise InvalidDirectoryError(
|
|
212
213
|
f"Cannot create directory '{directory_path}': {e}"
|
|
213
|
-
)
|
|
214
|
+
) from e
|
|
214
215
|
|
|
215
216
|
# Verify we can write to the directory
|
|
216
217
|
test_file = directory_path / ".claude_pm_test"
|
|
@@ -220,14 +221,14 @@ class ConfigAliasManager:
|
|
|
220
221
|
except Exception as e:
|
|
221
222
|
raise InvalidDirectoryError(
|
|
222
223
|
f"Directory '{directory_path}' is not writable: {e}"
|
|
223
|
-
)
|
|
224
|
+
) from e
|
|
224
225
|
|
|
225
226
|
return directory_path
|
|
226
227
|
|
|
227
228
|
except InvalidDirectoryError:
|
|
228
229
|
raise
|
|
229
230
|
except Exception as e:
|
|
230
|
-
raise InvalidDirectoryError(f"Invalid directory path '{path}': {e}")
|
|
231
|
+
raise InvalidDirectoryError(f"Invalid directory path '{path}': {e}") from e
|
|
231
232
|
|
|
232
233
|
def get_alias(self, alias_name: str) -> Optional[str]:
|
|
233
234
|
"""
|
claude_mpm/core/constants.py
CHANGED
|
@@ -4,6 +4,7 @@ This module consolidates all magic numbers and configuration constants
|
|
|
4
4
|
that were previously scattered throughout the codebase.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
from pathlib import Path
|
|
7
8
|
from typing import Tuple
|
|
8
9
|
|
|
9
10
|
|
|
@@ -214,7 +215,7 @@ class Defaults:
|
|
|
214
215
|
DEFAULT_TEMPERATURE = 0.5
|
|
215
216
|
|
|
216
217
|
# Logging defaults
|
|
217
|
-
DEFAULT_LOG_LEVEL = "
|
|
218
|
+
DEFAULT_LOG_LEVEL = "OFF"
|
|
218
219
|
DEFAULT_LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
219
220
|
|
|
220
221
|
# Session defaults
|
|
@@ -294,3 +295,67 @@ SOCKETIO_PORT_RANGE = NetworkConfig.SOCKETIO_PORT_RANGE
|
|
|
294
295
|
QUERY_TIMEOUT = TimeoutConfig.QUERY_TIMEOUT
|
|
295
296
|
MAX_RETRIES = RetryConfig.MAX_RETRIES
|
|
296
297
|
DEFAULT_TIMEOUT = TimeoutConfig.DEFAULT_TIMEOUT
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
# ==============================================================================
|
|
301
|
+
# NEW ORGANIZED CONSTANTS (Phase 1 Refactoring)
|
|
302
|
+
# ==============================================================================
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
class NetworkPorts:
|
|
306
|
+
"""Network port configuration."""
|
|
307
|
+
|
|
308
|
+
# Use existing values from NetworkConfig
|
|
309
|
+
DEFAULT_SOCKETIO = NetworkConfig.DEFAULT_SOCKETIO_PORT
|
|
310
|
+
DEFAULT_DASHBOARD = NetworkConfig.DEFAULT_DASHBOARD_PORT
|
|
311
|
+
PORT_RANGE_START = NetworkConfig.SOCKETIO_PORT_RANGE[0]
|
|
312
|
+
PORT_RANGE_END = NetworkConfig.SOCKETIO_PORT_RANGE[1]
|
|
313
|
+
|
|
314
|
+
@classmethod
|
|
315
|
+
def get_port_range(cls) -> range:
|
|
316
|
+
"""Get the valid port range."""
|
|
317
|
+
return range(cls.PORT_RANGE_START, cls.PORT_RANGE_END + 1)
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
class ProjectPaths:
|
|
321
|
+
"""Project-specific paths and directories."""
|
|
322
|
+
|
|
323
|
+
# Claude directories
|
|
324
|
+
CLAUDE_DIR = ".claude"
|
|
325
|
+
CLAUDE_AGENTS_DIR = ".claude/agents"
|
|
326
|
+
CLAUDE_CONFIG_FILE = ".claude/config.yaml"
|
|
327
|
+
|
|
328
|
+
# MPM directories
|
|
329
|
+
MPM_DIR = ".claude-mpm"
|
|
330
|
+
MPM_SESSION_DIR = ".claude-mpm/session"
|
|
331
|
+
MPM_PROMPTS_DIR = ".claude-mpm/prompts"
|
|
332
|
+
MPM_LOGS_DIR = ".claude-mpm/logs"
|
|
333
|
+
MPM_CONFIG_DIR = ".claude-mpm/config"
|
|
334
|
+
MPM_MEMORY_DIR = ".claude-mpm/memory"
|
|
335
|
+
MPM_CACHE_DIR = ".claude-mpm/cache"
|
|
336
|
+
|
|
337
|
+
# Config files
|
|
338
|
+
MPM_CONFIG_FILE = "config.yaml"
|
|
339
|
+
AGENT_CONFIG_FILE = "agent_config.yaml"
|
|
340
|
+
EXPERIMENTAL_CONFIG = "experimental.json"
|
|
341
|
+
SOCKETIO_CONFIG = "socketio_config.yaml"
|
|
342
|
+
|
|
343
|
+
# Special files
|
|
344
|
+
EXPERIMENTAL_ACCEPTED = ".experimental_accepted"
|
|
345
|
+
VERSION_FILE = "VERSION"
|
|
346
|
+
BUILD_NUMBER_FILE = "BUILD_NUMBER"
|
|
347
|
+
|
|
348
|
+
@classmethod
|
|
349
|
+
def get_mpm_home(cls) -> Path:
|
|
350
|
+
"""Get the MPM home directory."""
|
|
351
|
+
return Path.home() / cls.MPM_DIR
|
|
352
|
+
|
|
353
|
+
@classmethod
|
|
354
|
+
def get_project_mpm_dir(cls) -> Path:
|
|
355
|
+
"""Get the project-specific MPM directory."""
|
|
356
|
+
return Path.cwd() / cls.MPM_DIR
|
|
357
|
+
|
|
358
|
+
@classmethod
|
|
359
|
+
def get_claude_dir(cls) -> Path:
|
|
360
|
+
"""Get the Claude directory."""
|
|
361
|
+
return Path.cwd() / cls.CLAUDE_DIR
|
claude_mpm/core/container.py
CHANGED
|
@@ -538,10 +538,16 @@ class DIContainer(IServiceContainer):
|
|
|
538
538
|
|
|
539
539
|
elif registration.lifetime == ServiceLifetime.SCOPED:
|
|
540
540
|
# Check current scope
|
|
541
|
-
if
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
541
|
+
if (
|
|
542
|
+
self._current_scope
|
|
543
|
+
and (
|
|
544
|
+
instance := self._current_scope.get_scoped_instance(
|
|
545
|
+
service_type
|
|
546
|
+
)
|
|
547
|
+
)
|
|
548
|
+
is not None
|
|
549
|
+
):
|
|
550
|
+
return instance
|
|
545
551
|
|
|
546
552
|
# Mark as resolving
|
|
547
553
|
self._resolving.add(service_type)
|
|
@@ -636,7 +642,7 @@ class DIContainer(IServiceContainer):
|
|
|
636
642
|
if reg_type.__name__ == param_type:
|
|
637
643
|
param_type = reg_type
|
|
638
644
|
break
|
|
639
|
-
except:
|
|
645
|
+
except Exception:
|
|
640
646
|
# If we can't resolve, skip this parameter
|
|
641
647
|
if param.default != param.empty:
|
|
642
648
|
kwargs[param_name] = param.default
|