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
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
"""Instruction cache service for managing assembled PM instruction content.
|
|
2
|
+
|
|
3
|
+
WHY: Linux systems have ARG_MAX limits (~128-256KB) that prevent passing
|
|
4
|
+
assembled PM instructions (~450KB) via CLI arguments. This service caches
|
|
5
|
+
the complete assembled instruction content to a file that Claude Code can
|
|
6
|
+
load directly.
|
|
7
|
+
|
|
8
|
+
DESIGN DECISION: Cache FULL assembled instruction content (BASE_PM + PM_INSTRUCTIONS
|
|
9
|
+
+ WORKFLOW + capabilities + temporal context) rather than single source file.
|
|
10
|
+
Uses SHA-256 hash-based invalidation to update cache only when assembled content
|
|
11
|
+
changes. This avoids unnecessary file I/O while ensuring cache stays synchronized.
|
|
12
|
+
|
|
13
|
+
Trade-offs:
|
|
14
|
+
- Performance: Hash computation adds ~1ms overhead but saves 450KB arg passing
|
|
15
|
+
- Complexity: Content-based hashing vs. multi-file dependency tracking
|
|
16
|
+
- Reliability: Hash-based validation is deterministic and platform-independent
|
|
17
|
+
- Flexibility: Caller assembles content, service only caches (separation of concerns)
|
|
18
|
+
|
|
19
|
+
Alternatives Considered:
|
|
20
|
+
1. File-based tracking: Rejected - can't detect changes in dynamic components
|
|
21
|
+
2. Multi-file dependency tracking: Rejected - complex and error-prone
|
|
22
|
+
3. No caching (always pass via CLI): Rejected due to Linux ARG_MAX limits
|
|
23
|
+
4. Database caching: Rejected as overkill for single-content caching
|
|
24
|
+
|
|
25
|
+
Extension Points:
|
|
26
|
+
- Compression: Add gzip compression if content sizes grow beyond disk constraints
|
|
27
|
+
- Multiple cache slots: Support caching different agent instruction sets
|
|
28
|
+
- TTL-based invalidation: Add time-based expiration for dynamic content
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
import hashlib
|
|
32
|
+
import json
|
|
33
|
+
from datetime import datetime, timezone
|
|
34
|
+
from pathlib import Path
|
|
35
|
+
from typing import Any, Dict, Optional
|
|
36
|
+
|
|
37
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
38
|
+
|
|
39
|
+
logger = get_logger(__name__)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class InstructionCacheService:
|
|
43
|
+
"""Manages cached assembled PM instruction content for file-based loading.
|
|
44
|
+
|
|
45
|
+
The cache is stored at `.claude-mpm/PM_INSTRUCTIONS.md` and includes
|
|
46
|
+
a metadata file `.claude-mpm/PM_INSTRUCTIONS.md.meta` containing:
|
|
47
|
+
- content_hash: SHA-256 of assembled instruction content
|
|
48
|
+
- content_size_bytes: Size of cached content in bytes
|
|
49
|
+
- content_type: Type identifier ("assembled_instruction")
|
|
50
|
+
- components: List of instruction components that were assembled
|
|
51
|
+
- cached_at: ISO timestamp of cache creation
|
|
52
|
+
- version: Cache format version
|
|
53
|
+
|
|
54
|
+
Cache Updates:
|
|
55
|
+
- Triggered during agent deployment or interactive sessions
|
|
56
|
+
- Accepts pre-assembled instruction content from caller
|
|
57
|
+
- Only updates if content hash changes
|
|
58
|
+
- Atomic writes to prevent partial updates
|
|
59
|
+
- Graceful error handling (deployment continues on cache failure)
|
|
60
|
+
|
|
61
|
+
Performance:
|
|
62
|
+
- Hash computation: O(n) where n = content size, ~1ms for 450KB content
|
|
63
|
+
- Cache validation: O(1) metadata read + O(n) hash computation
|
|
64
|
+
- Update operation: O(n) content write, atomic via temp file
|
|
65
|
+
|
|
66
|
+
Error Handling:
|
|
67
|
+
- All methods return result dicts instead of raising exceptions
|
|
68
|
+
- Errors are logged but don't propagate to callers
|
|
69
|
+
- Graceful degradation: Cache failures don't break deployments
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
CACHE_DIR = ".claude-mpm"
|
|
73
|
+
CACHE_FILENAME = "PM_INSTRUCTIONS.md"
|
|
74
|
+
META_FILENAME = "PM_INSTRUCTIONS.md.meta"
|
|
75
|
+
CACHE_VERSION = "1.0"
|
|
76
|
+
|
|
77
|
+
def __init__(self, project_root: Optional[Path] = None) -> None:
|
|
78
|
+
"""Initialize instruction cache service.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
project_root: Project root directory. If None, uses current directory.
|
|
82
|
+
"""
|
|
83
|
+
self.project_root = project_root or Path.cwd()
|
|
84
|
+
self.cache_dir = self.project_root / self.CACHE_DIR
|
|
85
|
+
self.cache_file = self.cache_dir / self.CACHE_FILENAME
|
|
86
|
+
self.meta_file = self.cache_dir / self.META_FILENAME
|
|
87
|
+
self.logger = get_logger(__name__)
|
|
88
|
+
|
|
89
|
+
def update_cache(
|
|
90
|
+
self, instruction_content: str, force: bool = False
|
|
91
|
+
) -> Dict[str, Any]:
|
|
92
|
+
"""Update cache with assembled instruction content.
|
|
93
|
+
|
|
94
|
+
This method implements atomic cache updates using a temp file strategy:
|
|
95
|
+
1. Calculate content hash
|
|
96
|
+
2. Compare with cached hash (if exists)
|
|
97
|
+
3. If different or force=True, write content to temp file
|
|
98
|
+
4. Atomically replace cache with temp file
|
|
99
|
+
5. Write metadata with new hash
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
instruction_content: Complete assembled instruction content
|
|
103
|
+
(BASE_PM + PM_INSTRUCTIONS + WORKFLOW + capabilities + temporal context)
|
|
104
|
+
force: Force update even if hash matches
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
Result dictionary with:
|
|
108
|
+
- updated: Whether cache was updated
|
|
109
|
+
- reason: Why update occurred or was skipped
|
|
110
|
+
- cache_path: Path to cache file
|
|
111
|
+
- content_hash: SHA-256 hash of content
|
|
112
|
+
- content_size_kb: Size of content in KB
|
|
113
|
+
|
|
114
|
+
Error Handling:
|
|
115
|
+
Does NOT raise exceptions - returns error in result dict.
|
|
116
|
+
This ensures cache failures don't break agent deployments.
|
|
117
|
+
|
|
118
|
+
Example:
|
|
119
|
+
>>> service = InstructionCacheService()
|
|
120
|
+
>>> assembled = "# BASE_PM\\n...\\n# PM_INSTRUCTIONS\\n..."
|
|
121
|
+
>>> result = service.update_cache(instruction_content=assembled)
|
|
122
|
+
>>> if result["updated"]:
|
|
123
|
+
... print(f"Cache updated: {result['reason']}")
|
|
124
|
+
"""
|
|
125
|
+
try:
|
|
126
|
+
# Ensure cache directory exists
|
|
127
|
+
self.cache_dir.mkdir(parents=True, exist_ok=True)
|
|
128
|
+
|
|
129
|
+
# Calculate content hash
|
|
130
|
+
content_hash = self._calculate_hash_from_content(instruction_content)
|
|
131
|
+
|
|
132
|
+
# Check if update needed
|
|
133
|
+
if not force and self.is_cache_valid(instruction_content):
|
|
134
|
+
return {
|
|
135
|
+
"updated": False,
|
|
136
|
+
"reason": "cache_valid",
|
|
137
|
+
"cache_path": str(self.cache_file),
|
|
138
|
+
"content_hash": content_hash,
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
# Write content to cache (atomic operation)
|
|
142
|
+
temp_file = self.cache_file.with_suffix(".tmp")
|
|
143
|
+
temp_file.write_text(instruction_content, encoding="utf-8")
|
|
144
|
+
temp_file.replace(self.cache_file)
|
|
145
|
+
|
|
146
|
+
# Write metadata
|
|
147
|
+
self._write_metadata(content_hash, len(instruction_content))
|
|
148
|
+
|
|
149
|
+
self.logger.info(f"Updated instruction cache: {self.cache_file}")
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
"updated": True,
|
|
153
|
+
"reason": "content_changed" if not force else "forced",
|
|
154
|
+
"cache_path": str(self.cache_file),
|
|
155
|
+
"content_hash": content_hash,
|
|
156
|
+
"content_size_kb": len(instruction_content) / 1024,
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
except Exception as e:
|
|
160
|
+
self.logger.error(f"Failed to update instruction cache: {e}")
|
|
161
|
+
return {
|
|
162
|
+
"updated": False,
|
|
163
|
+
"reason": "error",
|
|
164
|
+
"error": str(e),
|
|
165
|
+
"cache_path": str(self.cache_file),
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
def get_cache_path(self) -> Path:
|
|
169
|
+
"""Get path to cache file.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
Path to PM_INSTRUCTIONS.md cache
|
|
173
|
+
|
|
174
|
+
Example:
|
|
175
|
+
>>> service = InstructionCacheService()
|
|
176
|
+
>>> cache_path = service.get_cache_path()
|
|
177
|
+
>>> print(cache_path) # .claude-mpm/PM_INSTRUCTIONS.md
|
|
178
|
+
"""
|
|
179
|
+
return self.cache_file
|
|
180
|
+
|
|
181
|
+
def is_cache_valid(self, instruction_content: str) -> bool:
|
|
182
|
+
"""Check if cache matches current assembled content.
|
|
183
|
+
|
|
184
|
+
Validation checks:
|
|
185
|
+
1. Cache file exists
|
|
186
|
+
2. Metadata file exists
|
|
187
|
+
3. Content hash matches cached hash
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
instruction_content: Current assembled instruction to validate against
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
True if cache exists and hash matches content
|
|
194
|
+
|
|
195
|
+
Example:
|
|
196
|
+
>>> service = InstructionCacheService()
|
|
197
|
+
>>> assembled = "# BASE_PM\\n...\\n# PM_INSTRUCTIONS\\n..."
|
|
198
|
+
>>> if not service.is_cache_valid(assembled):
|
|
199
|
+
... service.update_cache(assembled)
|
|
200
|
+
"""
|
|
201
|
+
try:
|
|
202
|
+
if not self.cache_file.exists() or not self.meta_file.exists():
|
|
203
|
+
return False
|
|
204
|
+
|
|
205
|
+
content_hash = self._calculate_hash_from_content(instruction_content)
|
|
206
|
+
cached_hash = self._get_cached_hash()
|
|
207
|
+
|
|
208
|
+
return content_hash == cached_hash
|
|
209
|
+
|
|
210
|
+
except Exception as e:
|
|
211
|
+
self.logger.debug(f"Cache validation failed: {e}")
|
|
212
|
+
return False
|
|
213
|
+
|
|
214
|
+
def invalidate_cache(self) -> bool:
|
|
215
|
+
"""Invalidate cache by removing cache files.
|
|
216
|
+
|
|
217
|
+
This method removes both the cache file and metadata file,
|
|
218
|
+
forcing a fresh cache creation on next update.
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
True if cache was invalidated (files removed), False otherwise
|
|
222
|
+
|
|
223
|
+
Example:
|
|
224
|
+
>>> service = InstructionCacheService()
|
|
225
|
+
>>> if service.invalidate_cache():
|
|
226
|
+
... print("Cache cleared")
|
|
227
|
+
"""
|
|
228
|
+
try:
|
|
229
|
+
removed = False
|
|
230
|
+
if self.cache_file.exists():
|
|
231
|
+
self.cache_file.unlink()
|
|
232
|
+
removed = True
|
|
233
|
+
if self.meta_file.exists():
|
|
234
|
+
self.meta_file.unlink()
|
|
235
|
+
removed = True
|
|
236
|
+
|
|
237
|
+
if removed:
|
|
238
|
+
self.logger.info("Invalidated instruction cache")
|
|
239
|
+
|
|
240
|
+
return removed
|
|
241
|
+
|
|
242
|
+
except Exception as e:
|
|
243
|
+
self.logger.error(f"Failed to invalidate cache: {e}")
|
|
244
|
+
return False
|
|
245
|
+
|
|
246
|
+
def get_cache_info(self) -> Dict[str, Any]:
|
|
247
|
+
"""Get information about current cache state.
|
|
248
|
+
|
|
249
|
+
Returns cache metadata including existence, sizes, and timestamps
|
|
250
|
+
for debugging and monitoring. Note: cannot validate cache without
|
|
251
|
+
current content, so cache_valid is always None.
|
|
252
|
+
|
|
253
|
+
Returns:
|
|
254
|
+
Dictionary with cache metadata:
|
|
255
|
+
- cache_exists: Whether cache file exists
|
|
256
|
+
- cache_path: Path to cache file
|
|
257
|
+
- cache_valid: Always None (validation requires current content)
|
|
258
|
+
- content_type: Type of cached content ("assembled_instruction")
|
|
259
|
+
- cache_size_kb: Cache file size in KB (if exists)
|
|
260
|
+
- cached_at: Cache creation timestamp (if exists)
|
|
261
|
+
- content_hash: Content hash (if cache exists)
|
|
262
|
+
- content_size_bytes: Cached content size in bytes (if exists)
|
|
263
|
+
- components: List of instruction components (if exists)
|
|
264
|
+
|
|
265
|
+
Example:
|
|
266
|
+
>>> service = InstructionCacheService()
|
|
267
|
+
>>> info = service.get_cache_info()
|
|
268
|
+
>>> print(f"Cache exists: {info['cache_exists']}")
|
|
269
|
+
>>> print(f"Size: {info.get('cache_size_kb', 0):.1f}KB")
|
|
270
|
+
"""
|
|
271
|
+
info: Dict[str, Any] = {
|
|
272
|
+
"cache_exists": self.cache_file.exists(),
|
|
273
|
+
"cache_path": str(self.cache_file),
|
|
274
|
+
"cache_valid": None, # Can't validate without current content
|
|
275
|
+
"content_type": "assembled_instruction",
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
try:
|
|
279
|
+
if self.cache_file.exists():
|
|
280
|
+
info["cache_size_kb"] = self.cache_file.stat().st_size / 1024
|
|
281
|
+
|
|
282
|
+
# Load metadata
|
|
283
|
+
if self.meta_file.exists():
|
|
284
|
+
meta = json.loads(self.meta_file.read_text())
|
|
285
|
+
info.update(
|
|
286
|
+
{
|
|
287
|
+
"cached_at": meta.get("cached_at"),
|
|
288
|
+
"content_hash": meta.get("content_hash"),
|
|
289
|
+
"content_size_bytes": meta.get("content_size_bytes"),
|
|
290
|
+
"components": meta.get("components", []),
|
|
291
|
+
"cache_version": meta.get("version"),
|
|
292
|
+
}
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
except Exception as e:
|
|
296
|
+
info["error"] = str(e)
|
|
297
|
+
|
|
298
|
+
return info
|
|
299
|
+
|
|
300
|
+
def _calculate_hash_from_content(self, content: str) -> str:
|
|
301
|
+
"""Calculate SHA-256 hash of content string.
|
|
302
|
+
|
|
303
|
+
Args:
|
|
304
|
+
content: String content to hash
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
Hex digest of SHA-256 hash
|
|
308
|
+
|
|
309
|
+
Performance:
|
|
310
|
+
- Time complexity: O(n) where n = content size
|
|
311
|
+
- Memory usage: O(1) - hash computed incrementally
|
|
312
|
+
"""
|
|
313
|
+
sha256 = hashlib.sha256()
|
|
314
|
+
sha256.update(content.encode("utf-8"))
|
|
315
|
+
return sha256.hexdigest()
|
|
316
|
+
|
|
317
|
+
def _get_cached_hash(self) -> Optional[str]:
|
|
318
|
+
"""Get cached content hash from metadata.
|
|
319
|
+
|
|
320
|
+
Returns:
|
|
321
|
+
Cached hash or None if not available
|
|
322
|
+
"""
|
|
323
|
+
try:
|
|
324
|
+
if not self.meta_file.exists():
|
|
325
|
+
return None
|
|
326
|
+
|
|
327
|
+
meta = json.loads(self.meta_file.read_text())
|
|
328
|
+
return meta.get("content_hash")
|
|
329
|
+
|
|
330
|
+
except Exception as e:
|
|
331
|
+
self.logger.debug(f"Failed to read cached hash: {e}")
|
|
332
|
+
return None
|
|
333
|
+
|
|
334
|
+
def _write_metadata(self, content_hash: str, content_size: int) -> None:
|
|
335
|
+
"""Write cache metadata file.
|
|
336
|
+
|
|
337
|
+
Metadata includes:
|
|
338
|
+
- version: Cache format version (for future compatibility)
|
|
339
|
+
- content_type: Type identifier ("assembled_instruction")
|
|
340
|
+
- content_hash: SHA-256 hash of assembled content
|
|
341
|
+
- content_size_bytes: Size of cached content in bytes
|
|
342
|
+
- components: List of instruction components that were assembled
|
|
343
|
+
- cached_at: ISO 8601 timestamp with UTC timezone
|
|
344
|
+
|
|
345
|
+
Args:
|
|
346
|
+
content_hash: SHA-256 hash of assembled content
|
|
347
|
+
content_size: Size of content in bytes
|
|
348
|
+
|
|
349
|
+
Example metadata:
|
|
350
|
+
{
|
|
351
|
+
"version": "1.0",
|
|
352
|
+
"content_type": "assembled_instruction",
|
|
353
|
+
"content_hash": "abc123...",
|
|
354
|
+
"content_size_bytes": 450000,
|
|
355
|
+
"components": ["BASE_PM.md", "PM_INSTRUCTIONS.md", ...],
|
|
356
|
+
"cached_at": "2025-11-30T15:30:00Z"
|
|
357
|
+
}
|
|
358
|
+
"""
|
|
359
|
+
metadata = {
|
|
360
|
+
"version": self.CACHE_VERSION,
|
|
361
|
+
"content_type": "assembled_instruction",
|
|
362
|
+
"components": [
|
|
363
|
+
"BASE_PM.md",
|
|
364
|
+
"PM_INSTRUCTIONS.md",
|
|
365
|
+
"WORKFLOW.md",
|
|
366
|
+
"agent_capabilities",
|
|
367
|
+
"temporal_context",
|
|
368
|
+
],
|
|
369
|
+
"content_hash": content_hash,
|
|
370
|
+
"content_size_bytes": content_size,
|
|
371
|
+
"cached_at": datetime.now(timezone.utc).isoformat(),
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
self.meta_file.write_text(json.dumps(metadata, indent=2))
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Local Operations Service Package
|
|
3
|
+
=================================
|
|
4
|
+
|
|
5
|
+
WHY: Provides process management and health monitoring capabilities for local
|
|
6
|
+
development deployments. This package implements the core infrastructure needed
|
|
7
|
+
by the local-ops-agent to spawn, track, manage, and monitor background processes.
|
|
8
|
+
|
|
9
|
+
DESIGN DECISION: Organized as a service package under services/ to integrate
|
|
10
|
+
with the existing service architecture and dependency injection system.
|
|
11
|
+
|
|
12
|
+
ARCHITECTURE:
|
|
13
|
+
- StateManager: Persistent deployment state tracking
|
|
14
|
+
- ProcessManager: Process lifecycle management with isolation
|
|
15
|
+
- HealthCheckManager: Three-tier health monitoring (HTTP, process, resource)
|
|
16
|
+
- HealthChecks: HTTP, process, and resource health check implementations
|
|
17
|
+
- CrashDetector: Crash detection via health status monitoring
|
|
18
|
+
- RestartPolicy: Intelligent restart policies with exponential backoff
|
|
19
|
+
- RestartManager: Auto-restart orchestration with circuit breaker
|
|
20
|
+
- MemoryLeakDetector: Proactive memory leak detection using trend analysis
|
|
21
|
+
- LogMonitor: Real-time log file monitoring for error patterns
|
|
22
|
+
- ResourceMonitor: Comprehensive resource exhaustion prevention
|
|
23
|
+
- Data Models: Process status, deployment state, health status, restart history,
|
|
24
|
+
stability metrics (memory trends, log matches, resource usage)
|
|
25
|
+
- Interfaces: ILocalProcessManager, IDeploymentStateManager, IHealthCheckManager,
|
|
26
|
+
ICrashDetector, IRestartPolicy, IRestartManager, IMemoryLeakDetector,
|
|
27
|
+
ILogMonitor, IResourceMonitor
|
|
28
|
+
|
|
29
|
+
USAGE:
|
|
30
|
+
from claude_mpm.services.local_ops import (
|
|
31
|
+
LocalProcessManager,
|
|
32
|
+
DeploymentStateManager,
|
|
33
|
+
HealthCheckManager,
|
|
34
|
+
StartConfig,
|
|
35
|
+
HealthStatus,
|
|
36
|
+
)
|
|
37
|
+
from claude_mpm.core.enums import ServiceState
|
|
38
|
+
|
|
39
|
+
# Initialize managers
|
|
40
|
+
state_manager = DeploymentStateManager(".claude-mpm/deployment-state.json")
|
|
41
|
+
process_manager = LocalProcessManager(state_manager)
|
|
42
|
+
health_manager = HealthCheckManager(process_manager, check_interval=30)
|
|
43
|
+
|
|
44
|
+
# Start a process
|
|
45
|
+
config = StartConfig(
|
|
46
|
+
command=["npm", "run", "dev"],
|
|
47
|
+
working_directory="/path/to/project",
|
|
48
|
+
port=3000
|
|
49
|
+
)
|
|
50
|
+
deployment = process_manager.start(config)
|
|
51
|
+
|
|
52
|
+
# Check health
|
|
53
|
+
health = health_manager.check_health(deployment.deployment_id)
|
|
54
|
+
|
|
55
|
+
# Start background monitoring
|
|
56
|
+
health_manager.start_monitoring()
|
|
57
|
+
|
|
58
|
+
Note: ProcessStatus has been consolidated into ServiceState (core.enums) as of Phase 3A Batch 24.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
# Re-export data models and interfaces for convenience
|
|
62
|
+
from claude_mpm.core.enums import HealthStatus
|
|
63
|
+
from claude_mpm.services.core.interfaces.health import IHealthCheck, IHealthCheckManager
|
|
64
|
+
from claude_mpm.services.core.interfaces.process import (
|
|
65
|
+
IDeploymentStateManager,
|
|
66
|
+
ILocalProcessManager,
|
|
67
|
+
)
|
|
68
|
+
from claude_mpm.services.core.interfaces.restart import (
|
|
69
|
+
ICrashDetector,
|
|
70
|
+
IRestartManager,
|
|
71
|
+
IRestartPolicy,
|
|
72
|
+
)
|
|
73
|
+
from claude_mpm.services.core.interfaces.stability import (
|
|
74
|
+
ILogMonitor,
|
|
75
|
+
IMemoryLeakDetector,
|
|
76
|
+
IResourceMonitor,
|
|
77
|
+
)
|
|
78
|
+
from claude_mpm.services.core.models.health import DeploymentHealth, HealthCheckResult
|
|
79
|
+
from claude_mpm.services.core.models.process import (
|
|
80
|
+
PROTECTED_PORT_RANGES,
|
|
81
|
+
DeploymentState,
|
|
82
|
+
ProcessInfo,
|
|
83
|
+
ProcessStatus,
|
|
84
|
+
StartConfig,
|
|
85
|
+
is_port_protected,
|
|
86
|
+
)
|
|
87
|
+
from claude_mpm.services.core.models.restart import (
|
|
88
|
+
CircuitBreakerState,
|
|
89
|
+
RestartAttempt,
|
|
90
|
+
RestartConfig,
|
|
91
|
+
RestartHistory,
|
|
92
|
+
)
|
|
93
|
+
from claude_mpm.services.core.models.stability import (
|
|
94
|
+
LogPatternMatch,
|
|
95
|
+
MemoryTrend,
|
|
96
|
+
ResourceUsage,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
# Import service implementations
|
|
100
|
+
from .health_manager import HealthCheckManager
|
|
101
|
+
from .log_monitor import LogMonitor
|
|
102
|
+
from .memory_leak_detector import MemoryLeakDetector
|
|
103
|
+
from .process_manager import LocalProcessManager, PortConflictError, ProcessSpawnError
|
|
104
|
+
from .resource_monitor import ResourceMonitor
|
|
105
|
+
from .state_manager import DeploymentStateManager, StateCorruptionError
|
|
106
|
+
from .unified_manager import UnifiedLocalOpsManager
|
|
107
|
+
|
|
108
|
+
__all__ = [
|
|
109
|
+
"PROTECTED_PORT_RANGES",
|
|
110
|
+
# Data models - Restart
|
|
111
|
+
"CircuitBreakerState",
|
|
112
|
+
"CrashDetector",
|
|
113
|
+
"DeploymentHealth",
|
|
114
|
+
"DeploymentState",
|
|
115
|
+
# Service implementations
|
|
116
|
+
"DeploymentStateManager",
|
|
117
|
+
"HealthCheckManager",
|
|
118
|
+
"HealthCheckResult",
|
|
119
|
+
# Data models - Health
|
|
120
|
+
"HealthStatus",
|
|
121
|
+
"ICrashDetector",
|
|
122
|
+
# Interfaces
|
|
123
|
+
"IDeploymentStateManager",
|
|
124
|
+
"IHealthCheck",
|
|
125
|
+
"IHealthCheckManager",
|
|
126
|
+
"ILocalProcessManager",
|
|
127
|
+
"ILogMonitor",
|
|
128
|
+
"IMemoryLeakDetector",
|
|
129
|
+
"IResourceMonitor",
|
|
130
|
+
"IRestartManager",
|
|
131
|
+
"IRestartPolicy",
|
|
132
|
+
"LocalProcessManager",
|
|
133
|
+
"LogMonitor",
|
|
134
|
+
"LogPatternMatch",
|
|
135
|
+
"MemoryLeakDetector",
|
|
136
|
+
# Data models - Stability
|
|
137
|
+
"MemoryTrend",
|
|
138
|
+
"PortConflictError",
|
|
139
|
+
"ProcessInfo",
|
|
140
|
+
"ProcessSpawnError",
|
|
141
|
+
"ProcessStatus",
|
|
142
|
+
# Data models - Process
|
|
143
|
+
"ResourceMonitor",
|
|
144
|
+
"ResourceUsage",
|
|
145
|
+
"RestartAttempt",
|
|
146
|
+
"RestartConfig",
|
|
147
|
+
"RestartHistory",
|
|
148
|
+
"RestartManager",
|
|
149
|
+
"RestartPolicy",
|
|
150
|
+
"StartConfig",
|
|
151
|
+
# Exceptions
|
|
152
|
+
"StateCorruptionError",
|
|
153
|
+
"UnifiedLocalOpsManager",
|
|
154
|
+
"is_port_protected",
|
|
155
|
+
]
|