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.
- 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
|
@@ -13,7 +13,7 @@ import asyncio
|
|
|
13
13
|
import threading
|
|
14
14
|
import time
|
|
15
15
|
from collections import deque
|
|
16
|
-
from datetime import datetime
|
|
16
|
+
from datetime import datetime, timezone
|
|
17
17
|
from pathlib import Path
|
|
18
18
|
from typing import Any, Dict, Set
|
|
19
19
|
|
|
@@ -34,10 +34,7 @@ import contextlib
|
|
|
34
34
|
|
|
35
35
|
from claude_mpm.services.version_service import VersionService
|
|
36
36
|
|
|
37
|
-
from ....core.constants import
|
|
38
|
-
SystemLimits,
|
|
39
|
-
TimeoutConfig,
|
|
40
|
-
)
|
|
37
|
+
from ....core.constants import SystemLimits, TimeoutConfig
|
|
41
38
|
from ....core.logging_config import get_logger
|
|
42
39
|
from ....core.unified_paths import get_project_root, get_scripts_dir
|
|
43
40
|
from ...exceptions import SocketIOServerError as MPMConnectionError
|
|
@@ -195,6 +192,9 @@ class SocketIOServerCore:
|
|
|
195
192
|
# Setup HTTP API endpoints for receiving events from hook handlers
|
|
196
193
|
self._setup_http_api()
|
|
197
194
|
|
|
195
|
+
# Setup simple directory API
|
|
196
|
+
self._setup_directory_api()
|
|
197
|
+
|
|
198
198
|
# Find and serve static files
|
|
199
199
|
self._setup_static_files()
|
|
200
200
|
|
|
@@ -208,7 +208,7 @@ class SocketIOServerCore:
|
|
|
208
208
|
await self.site.start()
|
|
209
209
|
|
|
210
210
|
self.running = True
|
|
211
|
-
self.stats["start_time"] = datetime.now()
|
|
211
|
+
self.stats["start_time"] = datetime.now(timezone.utc)
|
|
212
212
|
|
|
213
213
|
self.logger.info(
|
|
214
214
|
f"Socket.IO server listening on http://{self.host}:{self.port}"
|
|
@@ -390,6 +390,118 @@ class SocketIOServerCore:
|
|
|
390
390
|
self.app.router.add_post("/api/events", api_events_handler)
|
|
391
391
|
self.logger.info("✅ HTTP API endpoint registered at /api/events")
|
|
392
392
|
|
|
393
|
+
# Add working directory endpoint
|
|
394
|
+
async def working_directory_handler(request):
|
|
395
|
+
"""Handle GET /api/working-directory to provide current working directory."""
|
|
396
|
+
from pathlib import Path
|
|
397
|
+
|
|
398
|
+
try:
|
|
399
|
+
working_dir = Path.cwd()
|
|
400
|
+
home_dir = str(Path.home())
|
|
401
|
+
|
|
402
|
+
return web.json_response(
|
|
403
|
+
{
|
|
404
|
+
"working_directory": working_dir,
|
|
405
|
+
"home_directory": home_dir,
|
|
406
|
+
"process_cwd": working_dir,
|
|
407
|
+
"session_id": getattr(self, "session_id", None),
|
|
408
|
+
}
|
|
409
|
+
)
|
|
410
|
+
except Exception as e:
|
|
411
|
+
self.logger.error(f"Error getting working directory: {e}")
|
|
412
|
+
return web.json_response(
|
|
413
|
+
{
|
|
414
|
+
"working_directory": "/Users/masa/Projects/claude-mpm",
|
|
415
|
+
"home_directory": "/Users/masa",
|
|
416
|
+
"error": str(e),
|
|
417
|
+
},
|
|
418
|
+
status=500,
|
|
419
|
+
)
|
|
420
|
+
|
|
421
|
+
self.app.router.add_get("/api/working-directory", working_directory_handler)
|
|
422
|
+
self.logger.info(
|
|
423
|
+
"✅ Working directory endpoint registered at /api/working-directory"
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
# Add file reading endpoint for source viewer
|
|
427
|
+
async def file_read_handler(request):
|
|
428
|
+
"""Handle GET /api/file/read for reading source files."""
|
|
429
|
+
|
|
430
|
+
file_path = request.query.get("path", "")
|
|
431
|
+
|
|
432
|
+
if not file_path:
|
|
433
|
+
return web.json_response({"error": "No path provided"}, status=400)
|
|
434
|
+
|
|
435
|
+
abs_path = Path(Path(file_path).resolve().expanduser())
|
|
436
|
+
|
|
437
|
+
# Security check - ensure file is within the project
|
|
438
|
+
try:
|
|
439
|
+
project_root = Path.cwd()
|
|
440
|
+
if not abs_path.startswith(project_root):
|
|
441
|
+
return web.json_response({"error": "Access denied"}, status=403)
|
|
442
|
+
except Exception:
|
|
443
|
+
pass
|
|
444
|
+
|
|
445
|
+
if not Path(abs_path).exists():
|
|
446
|
+
return web.json_response({"error": "File not found"}, status=404)
|
|
447
|
+
|
|
448
|
+
if not Path(abs_path).is_file():
|
|
449
|
+
return web.json_response({"error": "Not a file"}, status=400)
|
|
450
|
+
|
|
451
|
+
try:
|
|
452
|
+
# Read file with appropriate encoding
|
|
453
|
+
encodings = ["utf-8", "latin-1", "cp1252"]
|
|
454
|
+
content = None
|
|
455
|
+
|
|
456
|
+
for encoding in encodings:
|
|
457
|
+
try:
|
|
458
|
+
with Path(abs_path).open(
|
|
459
|
+
encoding=encoding,
|
|
460
|
+
) as f:
|
|
461
|
+
content = f.read()
|
|
462
|
+
break
|
|
463
|
+
except UnicodeDecodeError:
|
|
464
|
+
continue
|
|
465
|
+
|
|
466
|
+
if content is None:
|
|
467
|
+
return web.json_response(
|
|
468
|
+
{"error": "Could not decode file"}, status=400
|
|
469
|
+
)
|
|
470
|
+
|
|
471
|
+
return web.json_response(
|
|
472
|
+
{
|
|
473
|
+
"path": abs_path,
|
|
474
|
+
"name": Path(abs_path).name,
|
|
475
|
+
"content": content,
|
|
476
|
+
"lines": len(content.splitlines()),
|
|
477
|
+
"size": Path(abs_path).stat().st_size,
|
|
478
|
+
}
|
|
479
|
+
)
|
|
480
|
+
|
|
481
|
+
except PermissionError:
|
|
482
|
+
return web.json_response({"error": "Permission denied"}, status=403)
|
|
483
|
+
except Exception as e:
|
|
484
|
+
return web.json_response({"error": str(e)}, status=500)
|
|
485
|
+
|
|
486
|
+
self.app.router.add_get("/api/file/read", file_read_handler)
|
|
487
|
+
self.logger.info("✅ File reading API registered at /api/file/read")
|
|
488
|
+
|
|
489
|
+
def _setup_directory_api(self):
|
|
490
|
+
"""Setup simple directory listing API.
|
|
491
|
+
|
|
492
|
+
WHY: Provides a dead-simple way to list directory contents via HTTP GET
|
|
493
|
+
without complex WebSocket interactions.
|
|
494
|
+
"""
|
|
495
|
+
try:
|
|
496
|
+
from claude_mpm.dashboard.api.simple_directory import register_routes
|
|
497
|
+
|
|
498
|
+
register_routes(self.app)
|
|
499
|
+
self.logger.info(
|
|
500
|
+
"✅ Simple directory API registered at /api/directory/list"
|
|
501
|
+
)
|
|
502
|
+
except Exception as e:
|
|
503
|
+
self.logger.error(f"Failed to setup directory API: {e}")
|
|
504
|
+
|
|
393
505
|
def _setup_static_files(self):
|
|
394
506
|
"""Setup static file serving for the dashboard."""
|
|
395
507
|
try:
|
|
@@ -440,6 +552,26 @@ class SocketIOServerCore:
|
|
|
440
552
|
|
|
441
553
|
self.app.router.add_get("/dashboard", dashboard_handler)
|
|
442
554
|
|
|
555
|
+
# Serve simple code view template at /code-simple
|
|
556
|
+
async def code_simple_handler(request):
|
|
557
|
+
code_simple_template = (
|
|
558
|
+
self.dashboard_path.parent / "templates" / "code_simple.html"
|
|
559
|
+
)
|
|
560
|
+
if code_simple_template.exists():
|
|
561
|
+
self.logger.debug(
|
|
562
|
+
f"Serving code simple template from: {code_simple_template}"
|
|
563
|
+
)
|
|
564
|
+
return web.FileResponse(code_simple_template)
|
|
565
|
+
# Return error if template doesn't exist
|
|
566
|
+
self.logger.warning(
|
|
567
|
+
f"Code simple template not found at: {code_simple_template}"
|
|
568
|
+
)
|
|
569
|
+
return web.Response(
|
|
570
|
+
text="Simple code view not available", status=404
|
|
571
|
+
)
|
|
572
|
+
|
|
573
|
+
self.app.router.add_get("/code-simple", code_simple_handler)
|
|
574
|
+
|
|
443
575
|
# Serve version.json from dashboard directory
|
|
444
576
|
async def version_handler(request):
|
|
445
577
|
version_file = self.dashboard_path / "version.json"
|
|
@@ -614,7 +746,9 @@ class SocketIOServerCore:
|
|
|
614
746
|
uptime_seconds = 0
|
|
615
747
|
if self.stats.get("start_time"):
|
|
616
748
|
uptime_seconds = int(
|
|
617
|
-
(
|
|
749
|
+
(
|
|
750
|
+
datetime.now(timezone.utc) - self.stats["start_time"]
|
|
751
|
+
).total_seconds()
|
|
618
752
|
)
|
|
619
753
|
|
|
620
754
|
# Get active sessions from main server if available
|
|
@@ -631,7 +765,7 @@ class SocketIOServerCore:
|
|
|
631
765
|
heartbeat_data = {
|
|
632
766
|
"type": "system",
|
|
633
767
|
"subtype": "heartbeat",
|
|
634
|
-
"timestamp": datetime.now().isoformat(),
|
|
768
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
635
769
|
"source": "server",
|
|
636
770
|
"data": {
|
|
637
771
|
"uptime_seconds": uptime_seconds,
|
|
@@ -7,14 +7,15 @@ WHY this integration module:
|
|
|
7
7
|
- Provides clean separation of concerns
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
import
|
|
10
|
+
from datetime import datetime, timezone
|
|
11
11
|
from typing import Optional
|
|
12
12
|
|
|
13
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
13
14
|
from claude_mpm.services.event_bus import EventBus
|
|
14
15
|
from claude_mpm.services.event_bus.config import get_config
|
|
15
16
|
from claude_mpm.services.event_bus.direct_relay import DirectSocketIORelay
|
|
16
17
|
|
|
17
|
-
logger =
|
|
18
|
+
logger = get_logger(__name__)
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class EventBusIntegration:
|
|
@@ -48,17 +49,16 @@ class EventBusIntegration:
|
|
|
48
49
|
Returns:
|
|
49
50
|
bool: True if setup successful
|
|
50
51
|
"""
|
|
51
|
-
from datetime import datetime
|
|
52
52
|
|
|
53
53
|
print(
|
|
54
|
-
f"[{datetime.now().isoformat()}] EventBusIntegration.setup() called",
|
|
54
|
+
f"[{datetime.now(timezone.utc).isoformat()}] EventBusIntegration.setup() called",
|
|
55
55
|
flush=True,
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
if not self.enabled:
|
|
59
59
|
logger.info("EventBus integration disabled by configuration")
|
|
60
60
|
print(
|
|
61
|
-
f"[{datetime.now().isoformat()}] EventBus integration disabled by configuration",
|
|
61
|
+
f"[{datetime.now(timezone.utc).isoformat()}] EventBus integration disabled by configuration",
|
|
62
62
|
flush=True,
|
|
63
63
|
)
|
|
64
64
|
return False
|
|
@@ -66,12 +66,13 @@ class EventBusIntegration:
|
|
|
66
66
|
try:
|
|
67
67
|
# Get EventBus instance
|
|
68
68
|
print(
|
|
69
|
-
f"[{datetime.now().isoformat()}] Getting EventBus instance...",
|
|
69
|
+
f"[{datetime.now(timezone.utc).isoformat()}] Getting EventBus instance...",
|
|
70
70
|
flush=True,
|
|
71
71
|
)
|
|
72
72
|
self.event_bus = EventBus.get_instance()
|
|
73
73
|
print(
|
|
74
|
-
f"[{datetime.now().isoformat()}] EventBus instance obtained",
|
|
74
|
+
f"[{datetime.now(timezone.utc).isoformat()}] EventBus instance obtained",
|
|
75
|
+
flush=True,
|
|
75
76
|
)
|
|
76
77
|
|
|
77
78
|
# Apply configuration
|
|
@@ -79,31 +80,36 @@ class EventBusIntegration:
|
|
|
79
80
|
|
|
80
81
|
# Create direct relay that uses server's broadcaster
|
|
81
82
|
print(
|
|
82
|
-
f"[{datetime.now().isoformat()}] Creating DirectSocketIORelay...",
|
|
83
|
+
f"[{datetime.now(timezone.utc).isoformat()}] Creating DirectSocketIORelay...",
|
|
83
84
|
flush=True,
|
|
84
85
|
)
|
|
85
86
|
if self.server:
|
|
86
87
|
self.relay = DirectSocketIORelay(self.server)
|
|
87
88
|
print(
|
|
88
|
-
f"[{datetime.now().isoformat()}] DirectSocketIORelay created with server instance",
|
|
89
|
+
f"[{datetime.now(timezone.utc).isoformat()}] DirectSocketIORelay created with server instance",
|
|
89
90
|
flush=True,
|
|
90
91
|
)
|
|
91
92
|
else:
|
|
92
93
|
logger.warning("No server instance provided, relay won't work")
|
|
93
94
|
print(
|
|
94
|
-
f"[{datetime.now().isoformat()}] WARNING: No server instance for relay",
|
|
95
|
+
f"[{datetime.now(timezone.utc).isoformat()}] WARNING: No server instance for relay",
|
|
95
96
|
flush=True,
|
|
96
97
|
)
|
|
97
98
|
return False
|
|
98
99
|
|
|
99
100
|
# Start the relay
|
|
100
|
-
print(
|
|
101
|
+
print(
|
|
102
|
+
f"[{datetime.now(timezone.utc).isoformat()}] Starting relay...",
|
|
103
|
+
flush=True,
|
|
104
|
+
)
|
|
101
105
|
self.relay.start()
|
|
102
|
-
print(
|
|
106
|
+
print(
|
|
107
|
+
f"[{datetime.now(timezone.utc).isoformat()}] Relay started", flush=True
|
|
108
|
+
)
|
|
103
109
|
|
|
104
110
|
logger.info("EventBus integration setup complete with DirectSocketIORelay")
|
|
105
111
|
print(
|
|
106
|
-
f"[{datetime.now().isoformat()}] EventBus integration setup complete with DirectSocketIORelay",
|
|
112
|
+
f"[{datetime.now(timezone.utc).isoformat()}] EventBus integration setup complete with DirectSocketIORelay",
|
|
107
113
|
flush=True,
|
|
108
114
|
)
|
|
109
115
|
return True
|
|
@@ -111,7 +117,7 @@ class EventBusIntegration:
|
|
|
111
117
|
except Exception as e:
|
|
112
118
|
logger.error(f"Failed to setup EventBus integration: {e}")
|
|
113
119
|
print(
|
|
114
|
-
f"[{datetime.now().isoformat()}] Failed to setup EventBus integration: {e}",
|
|
120
|
+
f"[{datetime.now(timezone.utc).isoformat()}] Failed to setup EventBus integration: {e}",
|
|
115
121
|
flush=True,
|
|
116
122
|
)
|
|
117
123
|
import traceback
|
|
@@ -13,9 +13,11 @@ import asyncio
|
|
|
13
13
|
import threading
|
|
14
14
|
import time
|
|
15
15
|
from collections import deque
|
|
16
|
-
from datetime import datetime
|
|
16
|
+
from datetime import datetime, timezone
|
|
17
17
|
from typing import Any, Dict, List, Optional, Set
|
|
18
18
|
|
|
19
|
+
from ....core.enums import ServiceState
|
|
20
|
+
|
|
19
21
|
try:
|
|
20
22
|
import aiohttp
|
|
21
23
|
import socketio
|
|
@@ -28,9 +30,7 @@ except ImportError:
|
|
|
28
30
|
aiohttp = None
|
|
29
31
|
web = None
|
|
30
32
|
|
|
31
|
-
from ....core.constants import
|
|
32
|
-
SystemLimits,
|
|
33
|
-
)
|
|
33
|
+
from ....core.constants import SystemLimits
|
|
34
34
|
from ....core.logging_config import get_logger
|
|
35
35
|
from ...core.interfaces.communication import SocketIOServiceInterface
|
|
36
36
|
from ..handlers import EventHandlerRegistry, FileEventHandler, GitEventHandler
|
|
@@ -107,7 +107,7 @@ class SocketIOServer(SocketIOServiceInterface):
|
|
|
107
107
|
# Debug logging for EventBus initialization
|
|
108
108
|
self.logger.info("Starting Socket.IO server with EventBus integration...")
|
|
109
109
|
print(
|
|
110
|
-
f"[{datetime.now().isoformat()}] SocketIOServer.start_sync() called",
|
|
110
|
+
f"[{datetime.now(timezone.utc).isoformat()}] SocketIOServer.start_sync() called",
|
|
111
111
|
flush=True,
|
|
112
112
|
)
|
|
113
113
|
|
|
@@ -172,7 +172,7 @@ class SocketIOServer(SocketIOServiceInterface):
|
|
|
172
172
|
# WHY: This connects the EventBus to the Socket.IO server, allowing
|
|
173
173
|
# events from other parts of the system to be broadcast to dashboard
|
|
174
174
|
print(
|
|
175
|
-
f"[{datetime.now().isoformat()}] Setting up EventBus integration...",
|
|
175
|
+
f"[{datetime.now(timezone.utc).isoformat()}] Setting up EventBus integration...",
|
|
176
176
|
flush=True,
|
|
177
177
|
)
|
|
178
178
|
|
|
@@ -183,26 +183,26 @@ class SocketIOServer(SocketIOServiceInterface):
|
|
|
183
183
|
"Broadcaster not initialized - cannot setup EventBus integration"
|
|
184
184
|
)
|
|
185
185
|
print(
|
|
186
|
-
f"[{datetime.now().isoformat()}] ERROR: Broadcaster not initialized",
|
|
186
|
+
f"[{datetime.now(timezone.utc).isoformat()}] ERROR: Broadcaster not initialized",
|
|
187
187
|
flush=True,
|
|
188
188
|
)
|
|
189
189
|
else:
|
|
190
190
|
print(
|
|
191
|
-
f"[{datetime.now().isoformat()}] Broadcaster ready, proceeding with EventBus setup",
|
|
191
|
+
f"[{datetime.now(timezone.utc).isoformat()}] Broadcaster ready, proceeding with EventBus setup",
|
|
192
192
|
flush=True,
|
|
193
193
|
)
|
|
194
194
|
|
|
195
195
|
try:
|
|
196
196
|
self.eventbus_integration = EventBusIntegration(self)
|
|
197
197
|
print(
|
|
198
|
-
f"[{datetime.now().isoformat()}] EventBusIntegration instance created",
|
|
198
|
+
f"[{datetime.now(timezone.utc).isoformat()}] EventBusIntegration instance created",
|
|
199
199
|
flush=True,
|
|
200
200
|
)
|
|
201
201
|
|
|
202
202
|
if self.eventbus_integration.setup(self.port):
|
|
203
203
|
self.logger.info("EventBus integration setup successful")
|
|
204
204
|
print(
|
|
205
|
-
f"[{datetime.now().isoformat()}] EventBus integration setup successful",
|
|
205
|
+
f"[{datetime.now(timezone.utc).isoformat()}] EventBus integration setup successful",
|
|
206
206
|
flush=True,
|
|
207
207
|
)
|
|
208
208
|
|
|
@@ -214,19 +214,19 @@ class SocketIOServer(SocketIOServiceInterface):
|
|
|
214
214
|
relay_stats = self.eventbus_integration.relay.get_stats()
|
|
215
215
|
self.logger.info(f"EventBus relay stats: {relay_stats}")
|
|
216
216
|
print(
|
|
217
|
-
f"[{datetime.now().isoformat()}] EventBus relay stats: {relay_stats}",
|
|
217
|
+
f"[{datetime.now(timezone.utc).isoformat()}] EventBus relay stats: {relay_stats}",
|
|
218
218
|
flush=True,
|
|
219
219
|
)
|
|
220
220
|
else:
|
|
221
221
|
self.logger.warning("EventBus integration setup failed or disabled")
|
|
222
222
|
print(
|
|
223
|
-
f"[{datetime.now().isoformat()}] EventBus integration setup failed or disabled",
|
|
223
|
+
f"[{datetime.now(timezone.utc).isoformat()}] EventBus integration setup failed or disabled",
|
|
224
224
|
flush=True,
|
|
225
225
|
)
|
|
226
226
|
except Exception as e:
|
|
227
227
|
self.logger.error(f"Failed to setup EventBus integration: {e}")
|
|
228
228
|
print(
|
|
229
|
-
f"[{datetime.now().isoformat()}] Failed to setup EventBus integration: {e}",
|
|
229
|
+
f"[{datetime.now(timezone.utc).isoformat()}] Failed to setup EventBus integration: {e}",
|
|
230
230
|
flush=True,
|
|
231
231
|
)
|
|
232
232
|
import traceback
|
|
@@ -265,15 +265,15 @@ class SocketIOServer(SocketIOServiceInterface):
|
|
|
265
265
|
except Exception as e:
|
|
266
266
|
self.logger.error(f"Error during EventBus teardown: {e}")
|
|
267
267
|
|
|
268
|
-
# Stop
|
|
268
|
+
# Stop event handlers
|
|
269
269
|
if self.event_registry:
|
|
270
|
-
from ..handlers import
|
|
271
|
-
|
|
272
|
-
# Stop analysis runner
|
|
273
|
-
analysis_handler = self.event_registry.get_handler(CodeAnalysisEventHandler)
|
|
274
|
-
if analysis_handler and hasattr(analysis_handler, "cleanup"):
|
|
275
|
-
analysis_handler.cleanup()
|
|
270
|
+
from ..handlers import ConnectionEventHandler
|
|
276
271
|
|
|
272
|
+
# DISABLED: File Tree interface removed from dashboard
|
|
273
|
+
# Stop analysis runner (code analysis handler is disabled)
|
|
274
|
+
# analysis_handler = self.event_registry.get_handler(CodeAnalysisEventHandler)
|
|
275
|
+
# if analysis_handler and hasattr(analysis_handler, "cleanup"):
|
|
276
|
+
# analysis_handler.cleanup()
|
|
277
277
|
# Stop health monitoring in connection handler
|
|
278
278
|
conn_handler = self.event_registry.get_handler(ConnectionEventHandler)
|
|
279
279
|
if conn_handler and hasattr(conn_handler, "stop_health_monitoring"):
|
|
@@ -382,9 +382,9 @@ class SocketIOServer(SocketIOServiceInterface):
|
|
|
382
382
|
# Track active session for heartbeat
|
|
383
383
|
self.active_sessions[session_id] = {
|
|
384
384
|
"session_id": session_id,
|
|
385
|
-
"start_time": datetime.now().isoformat(),
|
|
385
|
+
"start_time": datetime.now(timezone.utc).isoformat(),
|
|
386
386
|
"agent": "pm", # Default to PM, will be updated if delegated
|
|
387
|
-
"status":
|
|
387
|
+
"status": ServiceState.RUNNING,
|
|
388
388
|
"launch_method": launch_method,
|
|
389
389
|
"working_dir": working_dir,
|
|
390
390
|
}
|
|
@@ -472,7 +472,7 @@ class SocketIOServer(SocketIOServiceInterface):
|
|
|
472
472
|
WHY: Provides session information for system heartbeat events.
|
|
473
473
|
"""
|
|
474
474
|
# Clean up old sessions (older than 1 hour)
|
|
475
|
-
cutoff_time = datetime.now().timestamp() - 3600
|
|
475
|
+
cutoff_time = datetime.now(timezone.utc).timestamp() - 3600
|
|
476
476
|
sessions_to_remove = []
|
|
477
477
|
|
|
478
478
|
for session_id, session_data in self.active_sessions.items():
|
|
@@ -480,7 +480,7 @@ class SocketIOServer(SocketIOServiceInterface):
|
|
|
480
480
|
start_time = datetime.fromisoformat(session_data["start_time"])
|
|
481
481
|
if start_time.timestamp() < cutoff_time:
|
|
482
482
|
sessions_to_remove.append(session_id)
|
|
483
|
-
except:
|
|
483
|
+
except Exception:
|
|
484
484
|
pass
|
|
485
485
|
|
|
486
486
|
for session_id in sessions_to_remove:
|
|
@@ -18,7 +18,7 @@ import importlib.metadata
|
|
|
18
18
|
import socket
|
|
19
19
|
import threading
|
|
20
20
|
import time
|
|
21
|
-
from datetime import datetime
|
|
21
|
+
from datetime import datetime, timezone
|
|
22
22
|
from typing import Any, Dict, List, Optional, Tuple
|
|
23
23
|
|
|
24
24
|
from claude_mpm.core.constants import NetworkConfig, PerformanceConfig, TimeoutConfig
|
|
@@ -59,7 +59,7 @@ class ServerInfo:
|
|
|
59
59
|
"supported_client_versions", []
|
|
60
60
|
)
|
|
61
61
|
self.compatibility_matrix = response_data.get("compatibility_matrix", {})
|
|
62
|
-
self.detected_at = datetime.
|
|
62
|
+
self.detected_at = datetime.now(timezone.utc)
|
|
63
63
|
|
|
64
64
|
@property
|
|
65
65
|
def url(self) -> str:
|
|
@@ -161,7 +161,7 @@ class SocketIOClientManager:
|
|
|
161
161
|
self.logger.debug(f"Error checking {host}:{port}: {e}")
|
|
162
162
|
continue
|
|
163
163
|
|
|
164
|
-
self.last_discovery = datetime.
|
|
164
|
+
self.last_discovery = datetime.now(timezone.utc)
|
|
165
165
|
return discovered
|
|
166
166
|
|
|
167
167
|
def find_best_server(
|
|
@@ -323,7 +323,7 @@ class SocketIOClientManager:
|
|
|
323
323
|
try:
|
|
324
324
|
event_data = {
|
|
325
325
|
"type": event_type,
|
|
326
|
-
"timestamp": datetime.
|
|
326
|
+
"timestamp": datetime.now(timezone.utc).isoformat() + "Z",
|
|
327
327
|
"data": data,
|
|
328
328
|
"client_version": self.client_version,
|
|
329
329
|
}
|
|
@@ -22,6 +22,7 @@ import tty
|
|
|
22
22
|
from typing import Any, Dict, List, Optional
|
|
23
23
|
|
|
24
24
|
from claude_mpm.core.base_service import BaseService
|
|
25
|
+
from claude_mpm.core.enums import OperationResult, ServiceState
|
|
25
26
|
from claude_mpm.services.core.interfaces import SubprocessLauncherInterface
|
|
26
27
|
|
|
27
28
|
|
|
@@ -62,9 +63,17 @@ class SubprocessLauncherService(BaseService, SubprocessLauncherInterface):
|
|
|
62
63
|
try:
|
|
63
64
|
env = kwargs.get("env", self.prepare_subprocess_environment())
|
|
64
65
|
self.launch_subprocess_interactive(command, env)
|
|
65
|
-
return {
|
|
66
|
+
return {
|
|
67
|
+
"status": OperationResult.SUCCESS,
|
|
68
|
+
"command": command,
|
|
69
|
+
"method": "interactive",
|
|
70
|
+
}
|
|
66
71
|
except Exception as e:
|
|
67
|
-
return {
|
|
72
|
+
return {
|
|
73
|
+
"status": OperationResult.FAILED,
|
|
74
|
+
"error": str(e),
|
|
75
|
+
"command": command,
|
|
76
|
+
}
|
|
68
77
|
|
|
69
78
|
async def launch_subprocess_async(
|
|
70
79
|
self, command: List[str], **kwargs
|
|
@@ -109,7 +118,7 @@ class SubprocessLauncherService(BaseService, SubprocessLauncherInterface):
|
|
|
109
118
|
# For now, return unknown status
|
|
110
119
|
return {
|
|
111
120
|
"process_id": process_id,
|
|
112
|
-
"status":
|
|
121
|
+
"status": OperationResult.UNKNOWN,
|
|
113
122
|
"message": "Process tracking not implemented",
|
|
114
123
|
}
|
|
115
124
|
|
|
@@ -160,7 +169,7 @@ class SubprocessLauncherService(BaseService, SubprocessLauncherInterface):
|
|
|
160
169
|
# Notify WebSocket clients
|
|
161
170
|
if self.websocket_server:
|
|
162
171
|
self.websocket_server.claude_status_changed(
|
|
163
|
-
status=
|
|
172
|
+
status=ServiceState.RUNNING,
|
|
164
173
|
pid=process.pid,
|
|
165
174
|
message="Claude subprocess started",
|
|
166
175
|
)
|
|
@@ -195,7 +204,7 @@ class SubprocessLauncherService(BaseService, SubprocessLauncherInterface):
|
|
|
195
204
|
# Notify WebSocket clients
|
|
196
205
|
if self.websocket_server:
|
|
197
206
|
self.websocket_server.claude_status_changed(
|
|
198
|
-
status=
|
|
207
|
+
status=ServiceState.STOPPED,
|
|
199
208
|
message=f"Claude subprocess exited with code {process.returncode}",
|
|
200
209
|
)
|
|
201
210
|
|
|
@@ -268,16 +277,11 @@ class SubprocessLauncherService(BaseService, SubprocessLauncherInterface):
|
|
|
268
277
|
Returns:
|
|
269
278
|
True if subprocess mode with PTY is available
|
|
270
279
|
"""
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
import tty
|
|
277
|
-
|
|
278
|
-
return True
|
|
279
|
-
except ImportError:
|
|
280
|
-
return False
|
|
280
|
+
import importlib.util
|
|
281
|
+
|
|
282
|
+
# Check if we can import required modules
|
|
283
|
+
required = ["pty", "select", "termios", "tty"]
|
|
284
|
+
return all(importlib.util.find_spec(mod) is not None for mod in required)
|
|
281
285
|
|
|
282
286
|
def create_subprocess_command(
|
|
283
287
|
self, base_cmd: List[str], additional_args: Optional[List[str]] = None
|
|
@@ -10,7 +10,7 @@ Extracted from ClaudeRunner to follow Single Responsibility Principle.
|
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
12
|
import re
|
|
13
|
-
from datetime import datetime
|
|
13
|
+
from datetime import datetime, timezone
|
|
14
14
|
from typing import List, Optional, Tuple
|
|
15
15
|
|
|
16
16
|
from claude_mpm.config.paths import paths
|
|
@@ -112,9 +112,7 @@ class SystemInstructionsService(BaseService, SystemInstructionsInterface):
|
|
|
112
112
|
self.agent_capabilities_service
|
|
113
113
|
and "{{AGENT_CAPABILITIES}}" in base_pm_content
|
|
114
114
|
):
|
|
115
|
-
capabilities = (
|
|
116
|
-
self.agent_capabilities_service.generate_deployed_agent_capabilities()
|
|
117
|
-
)
|
|
115
|
+
capabilities = self.agent_capabilities_service.generate_deployed_agent_capabilities()
|
|
118
116
|
base_pm_content = base_pm_content.replace(
|
|
119
117
|
"{{AGENT_CAPABILITIES}}", capabilities
|
|
120
118
|
)
|
|
@@ -126,7 +124,7 @@ class SystemInstructionsService(BaseService, SystemInstructionsInterface):
|
|
|
126
124
|
|
|
127
125
|
# Replace current date
|
|
128
126
|
if "{{CURRENT_DATE}}" in base_pm_content:
|
|
129
|
-
current_date = datetime.now().strftime("%Y-%m-%d")
|
|
127
|
+
current_date = datetime.now(timezone.utc).strftime("%Y-%m-%d")
|
|
130
128
|
base_pm_content = base_pm_content.replace(
|
|
131
129
|
"{{CURRENT_DATE}}", current_date
|
|
132
130
|
)
|
|
@@ -11,17 +11,17 @@ DESIGN DECISIONS:
|
|
|
11
11
|
- Provides sanitization for user inputs
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
from typing import Any, Dict, List, Optional, Tuple
|
|
14
|
+
from typing import Any, ClassVar, Dict, List, Optional, Tuple
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class TicketValidationService:
|
|
18
18
|
"""Service for validating ticket inputs."""
|
|
19
19
|
|
|
20
20
|
# Valid ticket types
|
|
21
|
-
VALID_TYPES = ["task", "issue", "epic", "bug", "feature", "story"]
|
|
21
|
+
VALID_TYPES: ClassVar[list] = ["task", "issue", "epic", "bug", "feature", "story"]
|
|
22
22
|
|
|
23
23
|
# Valid ticket statuses
|
|
24
|
-
VALID_STATUSES = [
|
|
24
|
+
VALID_STATUSES: ClassVar[list] = [
|
|
25
25
|
"open",
|
|
26
26
|
"in_progress",
|
|
27
27
|
"ready",
|
|
@@ -34,10 +34,10 @@ class TicketValidationService:
|
|
|
34
34
|
]
|
|
35
35
|
|
|
36
36
|
# Valid priorities
|
|
37
|
-
VALID_PRIORITIES = ["low", "medium", "high", "critical"]
|
|
37
|
+
VALID_PRIORITIES: ClassVar[list] = ["low", "medium", "high", "critical"]
|
|
38
38
|
|
|
39
39
|
# Valid workflow states
|
|
40
|
-
VALID_WORKFLOW_STATES = [
|
|
40
|
+
VALID_WORKFLOW_STATES: ClassVar[list] = [
|
|
41
41
|
"todo",
|
|
42
42
|
"in_progress",
|
|
43
43
|
"ready",
|