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
|
@@ -63,7 +63,7 @@ except ImportError:
|
|
|
63
63
|
try:
|
|
64
64
|
from claude_mpm.services.mcp_gateway.server.mcp_gateway import MCPGateway
|
|
65
65
|
except ImportError as e:
|
|
66
|
-
raise ImportError(f"Critical: Cannot import MCPGateway server: {e}")
|
|
66
|
+
raise ImportError(f"Critical: Cannot import MCPGateway server: {e}") from e
|
|
67
67
|
|
|
68
68
|
try:
|
|
69
69
|
from claude_mpm.services.mcp_gateway.server.stdio_handler import StdioHandler
|
|
@@ -107,13 +107,16 @@ try:
|
|
|
107
107
|
except ImportError:
|
|
108
108
|
DocumentSummarizerTool = None
|
|
109
109
|
|
|
110
|
+
# Ticket tools removed - using mcp-ticketer instead
|
|
111
|
+
UnifiedTicketTool = None
|
|
112
|
+
|
|
110
113
|
try:
|
|
111
|
-
from claude_mpm.services.mcp_gateway.tools.
|
|
112
|
-
|
|
114
|
+
from claude_mpm.services.mcp_gateway.tools.external_mcp_services import (
|
|
115
|
+
ExternalMCPServiceManager,
|
|
113
116
|
)
|
|
114
117
|
except ImportError:
|
|
115
|
-
#
|
|
116
|
-
|
|
118
|
+
# External MCP services are optional
|
|
119
|
+
ExternalMCPServiceManager = None
|
|
117
120
|
|
|
118
121
|
# Manager module removed - using simplified architecture
|
|
119
122
|
|
|
@@ -148,6 +151,7 @@ class MCPGatewayOrchestrator:
|
|
|
148
151
|
self.registry: Optional[ToolRegistry] = None
|
|
149
152
|
self.communication: Optional[StdioHandler] = None
|
|
150
153
|
self.configuration: Optional[MCPConfiguration] = None
|
|
154
|
+
self.external_services: Optional[ExternalMCPServiceManager] = None
|
|
151
155
|
|
|
152
156
|
# Shutdown handling
|
|
153
157
|
self._shutdown_event = asyncio.Event()
|
|
@@ -175,10 +179,13 @@ class MCPGatewayOrchestrator:
|
|
|
175
179
|
|
|
176
180
|
# Load configuration
|
|
177
181
|
self.configuration = MCPConfiguration()
|
|
178
|
-
if
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
+
if (
|
|
183
|
+
self.config_path
|
|
184
|
+
and self.config_path.exists()
|
|
185
|
+
and not self.configuration.load_config(self.config_path)
|
|
186
|
+
):
|
|
187
|
+
self.logger.error("Failed to load configuration")
|
|
188
|
+
return False
|
|
182
189
|
|
|
183
190
|
# Initialize tool registry with error handling
|
|
184
191
|
try:
|
|
@@ -199,6 +206,42 @@ class MCPGatewayOrchestrator:
|
|
|
199
206
|
self.logger.warning(f"Failed to register some tools: {e}")
|
|
200
207
|
# Continue - server can run with partial tools
|
|
201
208
|
|
|
209
|
+
# Initialize external MCP services if available
|
|
210
|
+
if ExternalMCPServiceManager is not None:
|
|
211
|
+
try:
|
|
212
|
+
self.logger.info("Initializing external MCP services...")
|
|
213
|
+
self.external_services = ExternalMCPServiceManager()
|
|
214
|
+
external_services = (
|
|
215
|
+
await self.external_services.initialize_services()
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
if external_services and self.registry:
|
|
219
|
+
for service in external_services:
|
|
220
|
+
try:
|
|
221
|
+
if self.registry.register_tool(
|
|
222
|
+
service, category="external"
|
|
223
|
+
):
|
|
224
|
+
self.logger.info(
|
|
225
|
+
f"Registered external service: {service.service_name}"
|
|
226
|
+
)
|
|
227
|
+
else:
|
|
228
|
+
self.logger.warning(
|
|
229
|
+
f"Failed to register external service: {service.service_name}"
|
|
230
|
+
)
|
|
231
|
+
except Exception as e:
|
|
232
|
+
self.logger.warning(
|
|
233
|
+
f"Error registering {service.service_name}: {e}"
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
self.logger.info(
|
|
237
|
+
f"Initialized {len(external_services)} external MCP services"
|
|
238
|
+
)
|
|
239
|
+
except Exception as e:
|
|
240
|
+
self.logger.warning(
|
|
241
|
+
f"Failed to initialize external MCP services: {e}"
|
|
242
|
+
)
|
|
243
|
+
self.external_services = None
|
|
244
|
+
|
|
202
245
|
# Initialize communication handler with fallback
|
|
203
246
|
try:
|
|
204
247
|
self.communication = StdioHandler()
|
|
@@ -271,12 +314,37 @@ class MCPGatewayOrchestrator:
|
|
|
271
314
|
except Exception as e:
|
|
272
315
|
self.logger.warning(f"Could not load document summarizer: {e}")
|
|
273
316
|
|
|
274
|
-
#
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
317
|
+
# Kuzu-Memory Service (now a required dependency)
|
|
318
|
+
try:
|
|
319
|
+
from .tools.kuzu_memory_service import KuzuMemoryService
|
|
320
|
+
|
|
321
|
+
tools.append(KuzuMemoryService())
|
|
322
|
+
self.logger.info("KuzuMemoryService added to built-in tools")
|
|
323
|
+
except Exception as e:
|
|
324
|
+
self.logger.warning(f"Could not load KuzuMemoryService: {e}")
|
|
325
|
+
|
|
326
|
+
# MCP Vector Search Service (optional - will auto-install on first use)
|
|
327
|
+
try:
|
|
328
|
+
from .tools.external_mcp_services import MCPVectorSearchService
|
|
329
|
+
|
|
330
|
+
vector_search = MCPVectorSearchService()
|
|
331
|
+
# Try to initialize without interactive prompts during gateway startup
|
|
332
|
+
# This will only succeed if already installed
|
|
333
|
+
init_success = await vector_search.initialize(
|
|
334
|
+
auto_install=False, interactive=False
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
if init_success:
|
|
338
|
+
tools.append(vector_search)
|
|
339
|
+
self.logger.info("MCPVectorSearchService added to built-in tools")
|
|
340
|
+
else:
|
|
341
|
+
self.logger.debug(
|
|
342
|
+
"mcp-vector-search not installed - will be available via auto-install on first use"
|
|
343
|
+
)
|
|
344
|
+
except Exception as e:
|
|
345
|
+
self.logger.debug(f"Could not load MCPVectorSearchService: {e}")
|
|
346
|
+
|
|
347
|
+
# Ticket tools removed - mcp-ticketer provides ticket functionality
|
|
280
348
|
|
|
281
349
|
if not tools:
|
|
282
350
|
self.logger.warning("No tools available to register")
|
|
@@ -371,6 +439,13 @@ class MCPGatewayOrchestrator:
|
|
|
371
439
|
except Exception as e:
|
|
372
440
|
self.logger.warning(f"Error during communication shutdown: {e}")
|
|
373
441
|
|
|
442
|
+
# Shutdown external services
|
|
443
|
+
if self.external_services:
|
|
444
|
+
try:
|
|
445
|
+
await self.external_services.shutdown()
|
|
446
|
+
except Exception as e:
|
|
447
|
+
self.logger.warning(f"Error during external services shutdown: {e}")
|
|
448
|
+
|
|
374
449
|
self.logger.info("MCP Gateway shutdown complete")
|
|
375
450
|
|
|
376
451
|
except Exception as e:
|
|
@@ -224,7 +224,8 @@ class MCPServiceRegistry(ManagerBase):
|
|
|
224
224
|
try:
|
|
225
225
|
import asyncio
|
|
226
226
|
|
|
227
|
-
asyncio.create_task(instance.stop())
|
|
227
|
+
_task = asyncio.create_task(instance.stop())
|
|
228
|
+
# Fire-and-forget shutdown during unregister
|
|
228
229
|
except Exception as e:
|
|
229
230
|
self.logger.warning(
|
|
230
231
|
f"Error stopping service {interface.__name__}: {e}"
|
|
@@ -335,7 +336,8 @@ class MCPServiceRegistry(ManagerBase):
|
|
|
335
336
|
try:
|
|
336
337
|
import asyncio
|
|
337
338
|
|
|
338
|
-
asyncio.create_task(instance.stop())
|
|
339
|
+
_task = asyncio.create_task(instance.stop())
|
|
340
|
+
# Fire-and-forget shutdown during clear
|
|
339
341
|
except Exception as e:
|
|
340
342
|
self.logger.warning(f"Error stopping service: {e}")
|
|
341
343
|
|
|
@@ -11,7 +11,7 @@ Part of ISS-0035: MCP Server Implementation - Core Server and Tool Registry
|
|
|
11
11
|
import asyncio
|
|
12
12
|
import re
|
|
13
13
|
import traceback
|
|
14
|
-
from datetime import datetime
|
|
14
|
+
from datetime import datetime, timezone
|
|
15
15
|
from threading import RLock
|
|
16
16
|
from typing import Any, Dict, List, Optional, Set
|
|
17
17
|
|
|
@@ -159,9 +159,9 @@ class ToolRegistry(BaseMCPService, IMCPToolRegistry):
|
|
|
159
159
|
|
|
160
160
|
# Update metrics
|
|
161
161
|
self._metrics["total_tools"] = len(self._adapters)
|
|
162
|
-
self._metrics["registration_time"][
|
|
163
|
-
|
|
164
|
-
|
|
162
|
+
self._metrics["registration_time"][tool_name] = datetime.now(
|
|
163
|
+
timezone.utc
|
|
164
|
+
).isoformat()
|
|
165
165
|
self._metrics["invocations"][tool_name] = 0
|
|
166
166
|
self._metrics["errors"][tool_name] = 0
|
|
167
167
|
|
|
@@ -216,7 +216,8 @@ class ToolRegistry(BaseMCPService, IMCPToolRegistry):
|
|
|
216
216
|
|
|
217
217
|
# Shutdown adapter (outside lock to avoid deadlock)
|
|
218
218
|
try:
|
|
219
|
-
asyncio.create_task(adapter.shutdown())
|
|
219
|
+
_task = asyncio.create_task(adapter.shutdown())
|
|
220
|
+
# Fire-and-forget shutdown during tool unregister
|
|
220
221
|
except Exception as e:
|
|
221
222
|
self.log_warning(f"Error shutting down tool adapter {tool_name}: {e}")
|
|
222
223
|
|
|
@@ -272,7 +273,7 @@ class ToolRegistry(BaseMCPService, IMCPToolRegistry):
|
|
|
272
273
|
error handling, metrics tracking, and validation.
|
|
273
274
|
"""
|
|
274
275
|
tool_name = invocation.tool_name
|
|
275
|
-
start_time = datetime.now()
|
|
276
|
+
start_time = datetime.now(timezone.utc)
|
|
276
277
|
|
|
277
278
|
try:
|
|
278
279
|
self.log_info(f"Invoking tool: {tool_name}")
|
|
@@ -300,7 +301,7 @@ class ToolRegistry(BaseMCPService, IMCPToolRegistry):
|
|
|
300
301
|
result = await adapter.invoke(invocation)
|
|
301
302
|
|
|
302
303
|
# Calculate execution time
|
|
303
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
304
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
304
305
|
result.execution_time = execution_time
|
|
305
306
|
|
|
306
307
|
# Update metrics
|
|
@@ -308,7 +309,9 @@ class ToolRegistry(BaseMCPService, IMCPToolRegistry):
|
|
|
308
309
|
self._metrics["invocations"][tool_name] = (
|
|
309
310
|
self._metrics["invocations"].get(tool_name, 0) + 1
|
|
310
311
|
)
|
|
311
|
-
self._metrics["last_invocation"][tool_name] = datetime.now(
|
|
312
|
+
self._metrics["last_invocation"][tool_name] = datetime.now(
|
|
313
|
+
timezone.utc
|
|
314
|
+
).isoformat()
|
|
312
315
|
|
|
313
316
|
if not result.success:
|
|
314
317
|
self._metrics["errors"][tool_name] = (
|
|
@@ -331,7 +334,7 @@ class ToolRegistry(BaseMCPService, IMCPToolRegistry):
|
|
|
331
334
|
self._metrics["errors"].get(tool_name, 0) + 1
|
|
332
335
|
)
|
|
333
336
|
|
|
334
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
337
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
335
338
|
|
|
336
339
|
return MCPToolResult(
|
|
337
340
|
success=False, error=error_msg, execution_time=execution_time
|
|
@@ -16,17 +16,12 @@ import asyncio
|
|
|
16
16
|
import contextlib
|
|
17
17
|
import json
|
|
18
18
|
import traceback
|
|
19
|
-
from datetime import datetime
|
|
19
|
+
from datetime import datetime, timezone
|
|
20
20
|
from typing import Any, Callable, Dict, List, Optional, Union
|
|
21
21
|
|
|
22
22
|
# Import from the official MCP package
|
|
23
23
|
from mcp.server import Server
|
|
24
|
-
from mcp.types import
|
|
25
|
-
EmbeddedResource,
|
|
26
|
-
ImageContent,
|
|
27
|
-
TextContent,
|
|
28
|
-
Tool,
|
|
29
|
-
)
|
|
24
|
+
from mcp.types import EmbeddedResource, ImageContent, TextContent, Tool
|
|
30
25
|
|
|
31
26
|
from claude_mpm.services.mcp_gateway.core.base import BaseMCPService
|
|
32
27
|
from claude_mpm.services.mcp_gateway.core.interfaces import (
|
|
@@ -148,7 +143,7 @@ class MCPGateway(BaseMCPService, IMCPGateway):
|
|
|
148
143
|
invocation = MCPToolInvocation(
|
|
149
144
|
tool_name=name,
|
|
150
145
|
parameters=arguments,
|
|
151
|
-
request_id=f"req_{datetime.now().timestamp()}",
|
|
146
|
+
request_id=f"req_{datetime.now(timezone.utc).timestamp()}",
|
|
152
147
|
)
|
|
153
148
|
|
|
154
149
|
try:
|
|
@@ -212,7 +207,7 @@ class MCPGateway(BaseMCPService, IMCPGateway):
|
|
|
212
207
|
self.log_warning("No tool registry set - server will have no tools")
|
|
213
208
|
|
|
214
209
|
# Initialize metrics
|
|
215
|
-
self._metrics["start_time"] = datetime.now().isoformat()
|
|
210
|
+
self._metrics["start_time"] = datetime.now(timezone.utc).isoformat()
|
|
216
211
|
|
|
217
212
|
# Update capabilities based on registry
|
|
218
213
|
if self._tool_registry:
|
|
@@ -287,7 +282,7 @@ class MCPGateway(BaseMCPService, IMCPGateway):
|
|
|
287
282
|
try:
|
|
288
283
|
# Update metrics
|
|
289
284
|
self._metrics["requests_handled"] += 1
|
|
290
|
-
self._metrics["last_request_time"] = datetime.now().isoformat()
|
|
285
|
+
self._metrics["last_request_time"] = datetime.now(timezone.utc).isoformat()
|
|
291
286
|
|
|
292
287
|
# Extract request details
|
|
293
288
|
method = request.get("method", "")
|
|
@@ -17,6 +17,8 @@ import logging
|
|
|
17
17
|
import os
|
|
18
18
|
import sys
|
|
19
19
|
import time
|
|
20
|
+
from datetime import timezone
|
|
21
|
+
from pathlib import Path
|
|
20
22
|
from typing import Any, Dict
|
|
21
23
|
|
|
22
24
|
# Import MCP SDK components
|
|
@@ -28,15 +30,8 @@ from mcp.types import TextContent, Tool
|
|
|
28
30
|
# Import pydantic for model patching
|
|
29
31
|
from claude_mpm.core.logger import get_logger
|
|
30
32
|
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
from claude_mpm.services.mcp_gateway.tools.unified_ticket_tool import (
|
|
34
|
-
UnifiedTicketTool,
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
TICKET_TOOLS_AVAILABLE = True
|
|
38
|
-
except ImportError:
|
|
39
|
-
TICKET_TOOLS_AVAILABLE = False
|
|
33
|
+
# Ticket tools removed - using mcp-ticketer instead
|
|
34
|
+
TICKET_TOOLS_AVAILABLE = False
|
|
40
35
|
|
|
41
36
|
|
|
42
37
|
def apply_backward_compatibility_patches():
|
|
@@ -70,7 +65,6 @@ def apply_backward_compatibility_patches():
|
|
|
70
65
|
and hasattr(request, "params")
|
|
71
66
|
and request.params is not None
|
|
72
67
|
):
|
|
73
|
-
|
|
74
68
|
# Convert params to dict to check for clientInfo
|
|
75
69
|
params_dict = request.params
|
|
76
70
|
if hasattr(params_dict, "model_dump"):
|
|
@@ -547,12 +541,9 @@ class SimpleMCPServer:
|
|
|
547
541
|
|
|
548
542
|
result = f"Python: {sys.version}"
|
|
549
543
|
elif info_type == "cwd":
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
result = f"Working Directory: {os.getcwd()}"
|
|
544
|
+
result = f"Working Directory: {Path.cwd()}"
|
|
553
545
|
elif info_type == "all":
|
|
554
546
|
import datetime
|
|
555
|
-
import os
|
|
556
547
|
import platform
|
|
557
548
|
import sys
|
|
558
549
|
|
|
@@ -560,9 +551,9 @@ class SimpleMCPServer:
|
|
|
560
551
|
f"=== System Status ===\n"
|
|
561
552
|
f"Platform: {platform.system()} {platform.release()}\n"
|
|
562
553
|
f"Python: {sys.version.split()[0]}\n"
|
|
563
|
-
f"Working Directory: {
|
|
554
|
+
f"Working Directory: {Path.cwd()}\n"
|
|
564
555
|
f"Server: {self.name} v{self.version}\n"
|
|
565
|
-
f"Timestamp: {datetime.datetime.now().isoformat()}\n"
|
|
556
|
+
f"Timestamp: {datetime.datetime.now(timezone.utc).isoformat()}\n"
|
|
566
557
|
f"Tools Available: status, document_summarizer{', ticket' if self.unified_ticket_tool else ''}"
|
|
567
558
|
)
|
|
568
559
|
else:
|
|
@@ -628,7 +619,8 @@ class SimpleMCPServer:
|
|
|
628
619
|
|
|
629
620
|
try:
|
|
630
621
|
self.logger.info("Initializing unified ticket tool...")
|
|
631
|
-
|
|
622
|
+
# Ticket tools removed - using mcp-ticketer instead
|
|
623
|
+
self.unified_ticket_tool = None
|
|
632
624
|
# If the tool has an async init method, call it
|
|
633
625
|
if hasattr(self.unified_ticket_tool, "initialize"):
|
|
634
626
|
await self.unified_ticket_tool.initialize()
|
|
@@ -12,13 +12,25 @@ from .base_adapter import (
|
|
|
12
12
|
SystemInfoToolAdapter,
|
|
13
13
|
)
|
|
14
14
|
from .document_summarizer import DocumentSummarizerTool
|
|
15
|
-
from .
|
|
15
|
+
from .kuzu_memory_service import (
|
|
16
|
+
KuzuMemoryService,
|
|
17
|
+
get_context,
|
|
18
|
+
recall_memories,
|
|
19
|
+
search_memories,
|
|
20
|
+
store_memory,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
# Ticket tools removed - using mcp-ticketer instead
|
|
16
24
|
|
|
17
25
|
__all__ = [
|
|
18
26
|
"BaseToolAdapter",
|
|
19
27
|
"CalculatorToolAdapter",
|
|
20
28
|
"DocumentSummarizerTool",
|
|
21
29
|
"EchoToolAdapter",
|
|
30
|
+
"KuzuMemoryService",
|
|
22
31
|
"SystemInfoToolAdapter",
|
|
23
|
-
"
|
|
32
|
+
"get_context",
|
|
33
|
+
"recall_memories",
|
|
34
|
+
"search_memories",
|
|
35
|
+
"store_memory",
|
|
24
36
|
]
|
|
@@ -8,7 +8,7 @@ Part of ISS-0035: MCP Server Implementation - Core Server and Tool Registry
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
from abc import ABC
|
|
11
|
-
from datetime import datetime
|
|
11
|
+
from datetime import datetime, timezone
|
|
12
12
|
from typing import Any, Dict
|
|
13
13
|
|
|
14
14
|
from claude_mpm.services.mcp_gateway.core.base import BaseMCPService
|
|
@@ -195,7 +195,7 @@ class BaseToolAdapter(BaseMCPService, IMCPToolAdapter, ABC):
|
|
|
195
195
|
self._metrics["average_execution_time"] = (
|
|
196
196
|
self._metrics["total_execution_time"] / self._metrics["invocations"]
|
|
197
197
|
)
|
|
198
|
-
self._metrics["last_invocation"] = datetime.now().isoformat()
|
|
198
|
+
self._metrics["last_invocation"] = datetime.now(timezone.utc).isoformat()
|
|
199
199
|
|
|
200
200
|
|
|
201
201
|
class EchoToolAdapter(BaseToolAdapter):
|
|
@@ -235,7 +235,7 @@ class EchoToolAdapter(BaseToolAdapter):
|
|
|
235
235
|
Returns:
|
|
236
236
|
Tool execution result with echoed message
|
|
237
237
|
"""
|
|
238
|
-
start_time = datetime.now()
|
|
238
|
+
start_time = datetime.now(timezone.utc)
|
|
239
239
|
|
|
240
240
|
try:
|
|
241
241
|
# Get parameters
|
|
@@ -246,7 +246,7 @@ class EchoToolAdapter(BaseToolAdapter):
|
|
|
246
246
|
result = message.upper() if uppercase else message
|
|
247
247
|
|
|
248
248
|
# Calculate execution time
|
|
249
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
249
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
250
250
|
|
|
251
251
|
# Update metrics
|
|
252
252
|
self._update_metrics(True, execution_time)
|
|
@@ -259,7 +259,7 @@ class EchoToolAdapter(BaseToolAdapter):
|
|
|
259
259
|
)
|
|
260
260
|
|
|
261
261
|
except Exception as e:
|
|
262
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
262
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
263
263
|
self._update_metrics(False, execution_time)
|
|
264
264
|
self._metrics["last_error"] = str(e)
|
|
265
265
|
|
|
@@ -321,7 +321,7 @@ class CalculatorToolAdapter(BaseToolAdapter):
|
|
|
321
321
|
Returns:
|
|
322
322
|
Tool execution result with calculation
|
|
323
323
|
"""
|
|
324
|
-
start_time = datetime.now()
|
|
324
|
+
start_time = datetime.now(timezone.utc)
|
|
325
325
|
|
|
326
326
|
try:
|
|
327
327
|
# Get parameters
|
|
@@ -348,7 +348,7 @@ class CalculatorToolAdapter(BaseToolAdapter):
|
|
|
348
348
|
raise ValueError(f"Unknown operation: {operation}")
|
|
349
349
|
|
|
350
350
|
# Calculate execution time
|
|
351
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
351
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
352
352
|
|
|
353
353
|
# Update metrics
|
|
354
354
|
self._update_metrics(True, execution_time)
|
|
@@ -361,7 +361,7 @@ class CalculatorToolAdapter(BaseToolAdapter):
|
|
|
361
361
|
)
|
|
362
362
|
|
|
363
363
|
except Exception as e:
|
|
364
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
364
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
365
365
|
self._update_metrics(False, execution_time)
|
|
366
366
|
self._metrics["last_error"] = str(e)
|
|
367
367
|
|
|
@@ -408,7 +408,7 @@ class SystemInfoToolAdapter(BaseToolAdapter):
|
|
|
408
408
|
Returns:
|
|
409
409
|
Tool execution result with system information
|
|
410
410
|
"""
|
|
411
|
-
start_time = datetime.now()
|
|
411
|
+
start_time = datetime.now(timezone.utc)
|
|
412
412
|
|
|
413
413
|
try:
|
|
414
414
|
import platform
|
|
@@ -443,15 +443,15 @@ class SystemInfoToolAdapter(BaseToolAdapter):
|
|
|
443
443
|
}
|
|
444
444
|
elif info_type == "time":
|
|
445
445
|
result = {
|
|
446
|
-
"current": datetime.now().isoformat(),
|
|
447
|
-
"timestamp": datetime.now().timestamp(),
|
|
448
|
-
"timezone": str(datetime.now().astimezone().tzinfo),
|
|
446
|
+
"current": datetime.now(timezone.utc).isoformat(),
|
|
447
|
+
"timestamp": datetime.now(timezone.utc).timestamp(),
|
|
448
|
+
"timezone": str(datetime.now(timezone.utc).astimezone().tzinfo),
|
|
449
449
|
}
|
|
450
450
|
else:
|
|
451
451
|
raise ValueError(f"Unknown info type: {info_type}")
|
|
452
452
|
|
|
453
453
|
# Calculate execution time
|
|
454
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
454
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
455
455
|
|
|
456
456
|
# Update metrics
|
|
457
457
|
self._update_metrics(True, execution_time)
|
|
@@ -465,7 +465,7 @@ class SystemInfoToolAdapter(BaseToolAdapter):
|
|
|
465
465
|
|
|
466
466
|
except ImportError as e:
|
|
467
467
|
# Handle missing psutil dependency gracefully
|
|
468
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
468
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
469
469
|
self._update_metrics(False, execution_time)
|
|
470
470
|
|
|
471
471
|
return MCPToolResult(
|
|
@@ -474,7 +474,7 @@ class SystemInfoToolAdapter(BaseToolAdapter):
|
|
|
474
474
|
execution_time=execution_time,
|
|
475
475
|
)
|
|
476
476
|
except Exception as e:
|
|
477
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
477
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
478
478
|
self._update_metrics(False, execution_time)
|
|
479
479
|
self._metrics["last_error"] = str(e)
|
|
480
480
|
|
|
@@ -10,10 +10,9 @@ Part of ISS-0037: Document Summarizer Tool - Intelligent Document Processing
|
|
|
10
10
|
|
|
11
11
|
import hashlib
|
|
12
12
|
import mimetypes
|
|
13
|
-
import os
|
|
14
13
|
import re
|
|
15
14
|
from collections import OrderedDict
|
|
16
|
-
from datetime import datetime
|
|
15
|
+
from datetime import datetime, timezone
|
|
17
16
|
from pathlib import Path
|
|
18
17
|
from typing import Any, Dict, List, Optional, Tuple
|
|
19
18
|
|
|
@@ -74,7 +73,7 @@ class LRUCache:
|
|
|
74
73
|
if not self.cache:
|
|
75
74
|
break
|
|
76
75
|
# Remove least recently used item
|
|
77
|
-
|
|
76
|
+
_removed_key, removed_value = self.cache.popitem(last=False)
|
|
78
77
|
self.current_memory -= removed_value.get("size_bytes", 0)
|
|
79
78
|
|
|
80
79
|
# Add new item
|
|
@@ -240,7 +239,7 @@ class DocumentSummarizerTool(BaseToolAdapter):
|
|
|
240
239
|
|
|
241
240
|
def _get_file_hash(self, file_path: str) -> str:
|
|
242
241
|
"""Generate hash for file caching."""
|
|
243
|
-
stat =
|
|
242
|
+
stat = Path(file_path).stat()
|
|
244
243
|
hash_input = f"{file_path}:{stat.st_size}:{stat.st_mtime}"
|
|
245
244
|
return hashlib.md5(hash_input.encode()).hexdigest()
|
|
246
245
|
|
|
@@ -306,7 +305,7 @@ class DocumentSummarizerTool(BaseToolAdapter):
|
|
|
306
305
|
continue
|
|
307
306
|
|
|
308
307
|
# If all fail, read as binary and decode with errors='ignore'
|
|
309
|
-
with open(
|
|
308
|
+
with file_path.open("rb") as f:
|
|
310
309
|
content = f.read()
|
|
311
310
|
return content.decode("utf-8", errors="ignore")
|
|
312
311
|
|
|
@@ -605,7 +604,7 @@ class DocumentSummarizerTool(BaseToolAdapter):
|
|
|
605
604
|
Returns:
|
|
606
605
|
Tool execution result with summary
|
|
607
606
|
"""
|
|
608
|
-
start_time = datetime.now()
|
|
607
|
+
start_time = datetime.now(timezone.utc)
|
|
609
608
|
|
|
610
609
|
try:
|
|
611
610
|
# Get parameters
|
|
@@ -628,7 +627,9 @@ class DocumentSummarizerTool(BaseToolAdapter):
|
|
|
628
627
|
cached_result = self._cache.get(cache_key)
|
|
629
628
|
if cached_result:
|
|
630
629
|
cache_hit = True
|
|
631
|
-
execution_time = (
|
|
630
|
+
execution_time = (
|
|
631
|
+
datetime.now(timezone.utc) - start_time
|
|
632
|
+
).total_seconds()
|
|
632
633
|
self._update_metrics(True, execution_time)
|
|
633
634
|
|
|
634
635
|
return MCPToolResult(
|
|
@@ -709,7 +710,7 @@ class DocumentSummarizerTool(BaseToolAdapter):
|
|
|
709
710
|
self._cache.put(cache_key, result.copy(), summary_size)
|
|
710
711
|
|
|
711
712
|
# Calculate execution time
|
|
712
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
713
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
713
714
|
|
|
714
715
|
# Update metrics
|
|
715
716
|
self._update_metrics(True, execution_time)
|
|
@@ -730,7 +731,7 @@ class DocumentSummarizerTool(BaseToolAdapter):
|
|
|
730
731
|
)
|
|
731
732
|
|
|
732
733
|
except Exception as e:
|
|
733
|
-
execution_time = (datetime.now() - start_time).total_seconds()
|
|
734
|
+
execution_time = (datetime.now(timezone.utc) - start_time).total_seconds()
|
|
734
735
|
self._update_metrics(False, execution_time)
|
|
735
736
|
self._metrics["last_error"] = str(e)
|
|
736
737
|
|