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
|
@@ -21,6 +21,15 @@ from dataclasses import dataclass
|
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
from typing import Any, Dict, List, Optional, Tuple
|
|
23
23
|
|
|
24
|
+
from ..models.agent_config import (
|
|
25
|
+
AgentCapabilities,
|
|
26
|
+
AgentRecommendation,
|
|
27
|
+
ConfigurationPreview,
|
|
28
|
+
ConfigurationResult,
|
|
29
|
+
ValidationResult,
|
|
30
|
+
)
|
|
31
|
+
from ..models.toolchain import ToolchainAnalysis
|
|
32
|
+
|
|
24
33
|
|
|
25
34
|
# Agent registry interface
|
|
26
35
|
@dataclass
|
|
@@ -328,3 +337,178 @@ class RunnerConfigurationInterface(ABC):
|
|
|
328
337
|
Args:
|
|
329
338
|
config: Logging configuration
|
|
330
339
|
"""
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
# Agent recommender interface
|
|
343
|
+
class IAgentRecommender(ABC):
|
|
344
|
+
"""Interface for agent recommendation operations.
|
|
345
|
+
|
|
346
|
+
WHY: Automated agent recommendation is critical for the auto-configuration
|
|
347
|
+
feature. This interface abstracts the recommendation logic to enable different
|
|
348
|
+
scoring algorithms, rule-based systems, and ML-based approaches.
|
|
349
|
+
|
|
350
|
+
DESIGN DECISION: Separates recommendation from configuration to enable
|
|
351
|
+
independent testing and different recommendation strategies (rule-based,
|
|
352
|
+
ML-based, hybrid). Returns structured recommendations with confidence scores.
|
|
353
|
+
"""
|
|
354
|
+
|
|
355
|
+
@abstractmethod
|
|
356
|
+
def recommend_agents(
|
|
357
|
+
self,
|
|
358
|
+
toolchain: ToolchainAnalysis,
|
|
359
|
+
constraints: Optional[Dict[str, Any]] = None,
|
|
360
|
+
) -> List[AgentRecommendation]:
|
|
361
|
+
"""Recommend agents based on toolchain analysis.
|
|
362
|
+
|
|
363
|
+
Analyzes the toolchain and recommends agents that best match the
|
|
364
|
+
project's technical requirements. Considers:
|
|
365
|
+
- Language compatibility
|
|
366
|
+
- Framework expertise
|
|
367
|
+
- Deployment environment requirements
|
|
368
|
+
- Optional user-defined constraints (max agents, required capabilities)
|
|
369
|
+
|
|
370
|
+
Args:
|
|
371
|
+
toolchain: Complete toolchain analysis results
|
|
372
|
+
constraints: Optional constraints for recommendations:
|
|
373
|
+
- max_agents: Maximum number of agents to recommend
|
|
374
|
+
- required_capabilities: List of required agent capabilities
|
|
375
|
+
- excluded_agents: List of agent IDs to exclude
|
|
376
|
+
- min_confidence: Minimum confidence score threshold
|
|
377
|
+
|
|
378
|
+
Returns:
|
|
379
|
+
List[AgentRecommendation]: Ordered list of recommended agents
|
|
380
|
+
with confidence scores and reasoning
|
|
381
|
+
|
|
382
|
+
Raises:
|
|
383
|
+
ValueError: If constraints are invalid or contradictory
|
|
384
|
+
"""
|
|
385
|
+
|
|
386
|
+
@abstractmethod
|
|
387
|
+
def get_agent_capabilities(self, agent_id: str) -> AgentCapabilities:
|
|
388
|
+
"""Get detailed capabilities for an agent.
|
|
389
|
+
|
|
390
|
+
Retrieves comprehensive capability information for a specific agent:
|
|
391
|
+
- Supported languages and frameworks
|
|
392
|
+
- Specialization areas
|
|
393
|
+
- Required toolchain components
|
|
394
|
+
- Performance characteristics
|
|
395
|
+
|
|
396
|
+
Args:
|
|
397
|
+
agent_id: Unique identifier of the agent
|
|
398
|
+
|
|
399
|
+
Returns:
|
|
400
|
+
AgentCapabilities: Complete capability information
|
|
401
|
+
|
|
402
|
+
Raises:
|
|
403
|
+
KeyError: If agent_id does not exist
|
|
404
|
+
"""
|
|
405
|
+
|
|
406
|
+
@abstractmethod
|
|
407
|
+
def match_score(self, agent_id: str, toolchain: ToolchainAnalysis) -> float:
|
|
408
|
+
"""Calculate match score between agent and toolchain.
|
|
409
|
+
|
|
410
|
+
Computes a numerical score (0.0 to 1.0) indicating how well an agent
|
|
411
|
+
matches the project's toolchain. Higher scores indicate better matches.
|
|
412
|
+
Considers:
|
|
413
|
+
- Language compatibility
|
|
414
|
+
- Framework experience
|
|
415
|
+
- Deployment target alignment
|
|
416
|
+
- Toolchain component coverage
|
|
417
|
+
|
|
418
|
+
Args:
|
|
419
|
+
agent_id: Unique identifier of the agent
|
|
420
|
+
toolchain: Complete toolchain analysis
|
|
421
|
+
|
|
422
|
+
Returns:
|
|
423
|
+
float: Match score between 0.0 (no match) and 1.0 (perfect match)
|
|
424
|
+
|
|
425
|
+
Raises:
|
|
426
|
+
KeyError: If agent_id does not exist
|
|
427
|
+
"""
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
# Auto-configuration manager interface
|
|
431
|
+
class IAutoConfigManager(ABC):
|
|
432
|
+
"""Interface for automated configuration management.
|
|
433
|
+
|
|
434
|
+
WHY: Auto-configuration orchestrates the entire process of analyzing,
|
|
435
|
+
recommending, validating, and deploying agents. This interface abstracts
|
|
436
|
+
the orchestration logic to enable different workflows and approval processes.
|
|
437
|
+
|
|
438
|
+
DESIGN DECISION: Provides both preview and apply modes to enable user review
|
|
439
|
+
before deployment. Includes validation to catch configuration issues early.
|
|
440
|
+
Supports both interactive (confirmation required) and automated modes.
|
|
441
|
+
"""
|
|
442
|
+
|
|
443
|
+
@abstractmethod
|
|
444
|
+
async def auto_configure(
|
|
445
|
+
self, project_path: Path, confirmation_required: bool = True
|
|
446
|
+
) -> ConfigurationResult:
|
|
447
|
+
"""Perform automated agent configuration.
|
|
448
|
+
|
|
449
|
+
Complete end-to-end configuration workflow:
|
|
450
|
+
1. Analyze project toolchain
|
|
451
|
+
2. Generate agent recommendations
|
|
452
|
+
3. Validate proposed configuration
|
|
453
|
+
4. Request user confirmation (if required)
|
|
454
|
+
5. Deploy approved agents
|
|
455
|
+
6. Verify deployment success
|
|
456
|
+
|
|
457
|
+
Args:
|
|
458
|
+
project_path: Path to the project root directory
|
|
459
|
+
confirmation_required: Whether to require user approval before deployment
|
|
460
|
+
|
|
461
|
+
Returns:
|
|
462
|
+
ConfigurationResult: Complete configuration results including
|
|
463
|
+
deployed agents, validation results, and any errors
|
|
464
|
+
|
|
465
|
+
Raises:
|
|
466
|
+
FileNotFoundError: If project_path does not exist
|
|
467
|
+
PermissionError: If unable to write to project directory
|
|
468
|
+
ValidationError: If configuration validation fails critically
|
|
469
|
+
"""
|
|
470
|
+
|
|
471
|
+
@abstractmethod
|
|
472
|
+
def validate_configuration(
|
|
473
|
+
self, recommendations: List[AgentRecommendation]
|
|
474
|
+
) -> ValidationResult:
|
|
475
|
+
"""Validate proposed configuration before deployment.
|
|
476
|
+
|
|
477
|
+
Performs comprehensive validation of recommended agents:
|
|
478
|
+
- Checks for conflicting agent capabilities
|
|
479
|
+
- Verifies resource requirements are met
|
|
480
|
+
- Validates agent compatibility with project
|
|
481
|
+
- Identifies potential configuration issues
|
|
482
|
+
|
|
483
|
+
Args:
|
|
484
|
+
recommendations: List of agent recommendations to validate
|
|
485
|
+
|
|
486
|
+
Returns:
|
|
487
|
+
ValidationResult: Validation result with any warnings or errors
|
|
488
|
+
|
|
489
|
+
Raises:
|
|
490
|
+
ValueError: If recommendations list is empty or invalid
|
|
491
|
+
"""
|
|
492
|
+
|
|
493
|
+
@abstractmethod
|
|
494
|
+
def preview_configuration(self, project_path: Path) -> ConfigurationPreview:
|
|
495
|
+
"""Preview what would be configured without applying changes.
|
|
496
|
+
|
|
497
|
+
Performs analysis and recommendation without making any changes:
|
|
498
|
+
- Analyzes project toolchain
|
|
499
|
+
- Generates recommendations
|
|
500
|
+
- Validates configuration
|
|
501
|
+
- Returns preview of what would be deployed
|
|
502
|
+
|
|
503
|
+
Useful for testing and showing users what would happen before
|
|
504
|
+
committing to changes.
|
|
505
|
+
|
|
506
|
+
Args:
|
|
507
|
+
project_path: Path to the project root directory
|
|
508
|
+
|
|
509
|
+
Returns:
|
|
510
|
+
ConfigurationPreview: Preview of configuration that would be applied
|
|
511
|
+
|
|
512
|
+
Raises:
|
|
513
|
+
FileNotFoundError: If project_path does not exist
|
|
514
|
+
"""
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Health Check Interfaces for Claude MPM Framework
|
|
3
|
+
=================================================
|
|
4
|
+
|
|
5
|
+
WHY: This module defines interfaces for health monitoring operations,
|
|
6
|
+
enabling the local-ops-agent to perform comprehensive health checks on
|
|
7
|
+
deployed processes including HTTP endpoints, process status, and resource usage.
|
|
8
|
+
|
|
9
|
+
DESIGN DECISION: Health check interfaces are separated to enable modular
|
|
10
|
+
health monitoring with different check types (HTTP, process, resource).
|
|
11
|
+
|
|
12
|
+
ARCHITECTURE:
|
|
13
|
+
- IHealthCheck: Interface for individual health check implementations
|
|
14
|
+
- IHealthCheckManager: Interface for orchestrating multiple health checks
|
|
15
|
+
- Health data models defined in models/health.py
|
|
16
|
+
|
|
17
|
+
USAGE:
|
|
18
|
+
http_check = HttpHealthCheck(endpoint="http://localhost:3000/health")
|
|
19
|
+
process_check = ProcessHealthCheck(process_manager)
|
|
20
|
+
resource_check = ResourceHealthCheck(process_manager)
|
|
21
|
+
|
|
22
|
+
health_manager = HealthCheckManager(
|
|
23
|
+
process_manager=process_manager,
|
|
24
|
+
check_interval=30
|
|
25
|
+
)
|
|
26
|
+
health_manager.start_monitoring()
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from abc import ABC, abstractmethod
|
|
30
|
+
from typing import List
|
|
31
|
+
|
|
32
|
+
from claude_mpm.services.core.models.health import DeploymentHealth, HealthCheckResult
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class IHealthCheck(ABC):
|
|
36
|
+
"""
|
|
37
|
+
Interface for individual health check implementations.
|
|
38
|
+
|
|
39
|
+
WHY: Abstracts different types of health checks (HTTP, process, resource)
|
|
40
|
+
to enable flexible health monitoring strategies.
|
|
41
|
+
|
|
42
|
+
DESIGN DECISION: Each check type implements this interface to provide
|
|
43
|
+
a consistent API for executing checks and interpreting results.
|
|
44
|
+
|
|
45
|
+
Thread Safety: Implementations must be thread-safe for concurrent execution.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
@abstractmethod
|
|
49
|
+
def check(self, deployment_id: str, **kwargs) -> HealthCheckResult:
|
|
50
|
+
"""
|
|
51
|
+
Execute the health check for a deployment.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
deployment_id: Unique deployment identifier
|
|
55
|
+
**kwargs: Check-specific parameters (e.g., endpoint URL, thresholds)
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
HealthCheckResult with check status and details
|
|
59
|
+
|
|
60
|
+
Raises:
|
|
61
|
+
ValueError: If deployment_id not found
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
@abstractmethod
|
|
65
|
+
def get_check_type(self) -> str:
|
|
66
|
+
"""
|
|
67
|
+
Get the type identifier for this health check.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Check type string (e.g., "http", "process", "resource")
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class IHealthCheckManager(ABC):
|
|
75
|
+
"""
|
|
76
|
+
Interface for coordinating health checks across deployments.
|
|
77
|
+
|
|
78
|
+
WHY: Health monitoring requires orchestrating multiple check types,
|
|
79
|
+
aggregating results, and maintaining historical data. This interface
|
|
80
|
+
provides a high-level API for comprehensive health monitoring.
|
|
81
|
+
|
|
82
|
+
DESIGN DECISION: Provides both synchronous (check_health) and asynchronous
|
|
83
|
+
(background monitoring) operations to support different use cases.
|
|
84
|
+
|
|
85
|
+
Background Monitoring:
|
|
86
|
+
- Runs health checks at regular intervals
|
|
87
|
+
- Maintains historical health data
|
|
88
|
+
- Triggers callbacks on status changes
|
|
89
|
+
- Thread-safe with proper locking
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
@abstractmethod
|
|
93
|
+
def check_health(self, deployment_id: str) -> DeploymentHealth:
|
|
94
|
+
"""
|
|
95
|
+
Execute all health checks for a deployment.
|
|
96
|
+
|
|
97
|
+
WHY: Provides a comprehensive health snapshot by running all
|
|
98
|
+
registered health checks and aggregating results.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
deployment_id: Unique deployment identifier
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
DeploymentHealth with aggregated status and check results
|
|
105
|
+
|
|
106
|
+
Raises:
|
|
107
|
+
ValueError: If deployment_id not found
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
@abstractmethod
|
|
111
|
+
def start_monitoring(self) -> None:
|
|
112
|
+
"""
|
|
113
|
+
Start background health monitoring.
|
|
114
|
+
|
|
115
|
+
WHY: Enables continuous health tracking without manual polling.
|
|
116
|
+
Monitoring runs in a separate daemon thread.
|
|
117
|
+
|
|
118
|
+
Thread Safety: Creates a daemon thread that performs periodic checks.
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
@abstractmethod
|
|
122
|
+
def stop_monitoring(self) -> None:
|
|
123
|
+
"""
|
|
124
|
+
Stop background health monitoring.
|
|
125
|
+
|
|
126
|
+
WHY: Gracefully stops the monitoring thread and releases resources.
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
@abstractmethod
|
|
130
|
+
def is_monitoring(self) -> bool:
|
|
131
|
+
"""
|
|
132
|
+
Check if background monitoring is active.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
True if monitoring thread is running
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
@abstractmethod
|
|
139
|
+
def get_health_history(
|
|
140
|
+
self, deployment_id: str, limit: int = 10
|
|
141
|
+
) -> List[DeploymentHealth]:
|
|
142
|
+
"""
|
|
143
|
+
Get historical health check results for a deployment.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
deployment_id: Unique deployment identifier
|
|
147
|
+
limit: Maximum number of historical entries to return
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
List of DeploymentHealth objects, newest first
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
@abstractmethod
|
|
154
|
+
def register_status_callback(self, callback) -> None:
|
|
155
|
+
"""
|
|
156
|
+
Register a callback for health status changes.
|
|
157
|
+
|
|
158
|
+
WHY: Enables reactive behavior based on health status changes
|
|
159
|
+
(e.g., alerts, auto-recovery, logging).
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
callback: Function called with (deployment_id, old_status, new_status)
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
__all__ = [
|
|
167
|
+
"IHealthCheck",
|
|
168
|
+
"IHealthCheckManager",
|
|
169
|
+
]
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Model Provider Interfaces for Claude MPM Framework
|
|
3
|
+
==================================================
|
|
4
|
+
|
|
5
|
+
WHY: This module defines the interfaces for content processing model providers,
|
|
6
|
+
enabling support for both local (Ollama) and cloud (Claude) models with
|
|
7
|
+
intelligent routing and auto-fallback capabilities.
|
|
8
|
+
|
|
9
|
+
DESIGN DECISION: Model providers implement a common interface (IModelProvider)
|
|
10
|
+
to enable polymorphic use and easy switching between providers. The abstraction
|
|
11
|
+
allows for provider-specific optimizations while maintaining a consistent API.
|
|
12
|
+
|
|
13
|
+
ARCHITECTURE:
|
|
14
|
+
- IModelProvider: Core provider interface for content analysis
|
|
15
|
+
- ModelCapability: Enum of supported content processing tasks
|
|
16
|
+
- ModelProvider: Enum of available provider types
|
|
17
|
+
- ModelResponse: Standardized response format across providers
|
|
18
|
+
|
|
19
|
+
USAGE:
|
|
20
|
+
provider = OllamaProvider()
|
|
21
|
+
if await provider.is_available():
|
|
22
|
+
response = await provider.analyze_content(
|
|
23
|
+
content="Your text here",
|
|
24
|
+
task=ModelCapability.SEO_ANALYSIS
|
|
25
|
+
)
|
|
26
|
+
if response.success:
|
|
27
|
+
print(f"Analysis from {response.model}: {response.result}")
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
from abc import ABC, abstractmethod
|
|
31
|
+
from dataclasses import dataclass, field
|
|
32
|
+
from enum import Enum
|
|
33
|
+
from typing import Any, Dict, List, Optional
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class ModelCapability(Enum):
|
|
37
|
+
"""
|
|
38
|
+
Content processing capabilities supported by model providers.
|
|
39
|
+
|
|
40
|
+
WHY: Defines task-specific analysis types for content processing.
|
|
41
|
+
Each capability may route to different models optimized for that task.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
SEO_ANALYSIS = "seo_analysis"
|
|
45
|
+
READABILITY = "readability"
|
|
46
|
+
GRAMMAR = "grammar"
|
|
47
|
+
SUMMARIZATION = "summarization"
|
|
48
|
+
KEYWORD_EXTRACTION = "keyword_extraction"
|
|
49
|
+
ACCESSIBILITY = "accessibility"
|
|
50
|
+
SENTIMENT = "sentiment"
|
|
51
|
+
GENERAL = "general"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ModelProvider(Enum):
|
|
55
|
+
"""
|
|
56
|
+
Available model provider backends.
|
|
57
|
+
|
|
58
|
+
WHY: Enables configuration-based routing between providers.
|
|
59
|
+
|
|
60
|
+
Values:
|
|
61
|
+
CLAUDE: Cloud-based Claude API (always available)
|
|
62
|
+
OLLAMA: Local Ollama installation (requires local setup)
|
|
63
|
+
AUTO: Intelligent routing with Ollama-first, Claude fallback
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
CLAUDE = "claude"
|
|
67
|
+
OLLAMA = "ollama"
|
|
68
|
+
AUTO = "auto"
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@dataclass
|
|
72
|
+
class ModelResponse:
|
|
73
|
+
"""
|
|
74
|
+
Standardized response from model providers.
|
|
75
|
+
|
|
76
|
+
WHY: Provides consistent response format across all providers,
|
|
77
|
+
enabling transparent provider switching and unified error handling.
|
|
78
|
+
|
|
79
|
+
Attributes:
|
|
80
|
+
success: Whether the operation succeeded
|
|
81
|
+
provider: Name of provider that handled request (e.g., "ollama", "claude")
|
|
82
|
+
model: Specific model used (e.g., "llama3.3:70b", "claude-3-5-sonnet")
|
|
83
|
+
task: Task that was performed
|
|
84
|
+
result: Analysis result text
|
|
85
|
+
metadata: Provider-specific metadata (tokens, timing, etc.)
|
|
86
|
+
error: Error message if success=False
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
success: bool
|
|
90
|
+
provider: str
|
|
91
|
+
model: str
|
|
92
|
+
task: str
|
|
93
|
+
result: str
|
|
94
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
95
|
+
error: Optional[str] = None
|
|
96
|
+
|
|
97
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
98
|
+
"""Convert response to dictionary for serialization."""
|
|
99
|
+
return {
|
|
100
|
+
"success": self.success,
|
|
101
|
+
"provider": self.provider,
|
|
102
|
+
"model": self.model,
|
|
103
|
+
"task": self.task,
|
|
104
|
+
"result": self.result,
|
|
105
|
+
"metadata": self.metadata,
|
|
106
|
+
"error": self.error,
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class IModelProvider(ABC):
|
|
111
|
+
"""
|
|
112
|
+
Interface for content processing model providers.
|
|
113
|
+
|
|
114
|
+
WHY: Defines contract for all model providers (Claude, Ollama, future providers).
|
|
115
|
+
Enables polymorphic use and easy provider switching without changing client code.
|
|
116
|
+
|
|
117
|
+
DESIGN PATTERN: Strategy pattern - allows runtime selection of model provider
|
|
118
|
+
based on availability, configuration, and task requirements.
|
|
119
|
+
|
|
120
|
+
Implementations should:
|
|
121
|
+
- Handle provider-specific connection management
|
|
122
|
+
- Map capabilities to optimal models
|
|
123
|
+
- Provide robust error handling
|
|
124
|
+
- Return standardized ModelResponse objects
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
@abstractmethod
|
|
128
|
+
async def is_available(self) -> bool:
|
|
129
|
+
"""
|
|
130
|
+
Check if provider is available and functional.
|
|
131
|
+
|
|
132
|
+
WHY: Enables auto-fallback routing. Local providers may not always be
|
|
133
|
+
available (Ollama not running), while cloud providers need API keys.
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
True if provider is ready to handle requests
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
@abstractmethod
|
|
140
|
+
async def analyze_content(
|
|
141
|
+
self,
|
|
142
|
+
content: str,
|
|
143
|
+
task: ModelCapability,
|
|
144
|
+
model: Optional[str] = None,
|
|
145
|
+
**kwargs,
|
|
146
|
+
) -> ModelResponse:
|
|
147
|
+
"""
|
|
148
|
+
Analyze content with specified task.
|
|
149
|
+
|
|
150
|
+
WHY: Core content processing method. Handles all analysis types
|
|
151
|
+
with task-specific prompting and model selection.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
content: Text content to analyze
|
|
155
|
+
task: Type of analysis to perform
|
|
156
|
+
model: Optional specific model to use (overrides default)
|
|
157
|
+
**kwargs: Provider-specific options (temperature, max_tokens, etc.)
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
ModelResponse with analysis results or error
|
|
161
|
+
|
|
162
|
+
Example:
|
|
163
|
+
response = await provider.analyze_content(
|
|
164
|
+
content="Your article text",
|
|
165
|
+
task=ModelCapability.SEO_ANALYSIS,
|
|
166
|
+
temperature=0.7
|
|
167
|
+
)
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
@abstractmethod
|
|
171
|
+
def get_supported_capabilities(self) -> List[ModelCapability]:
|
|
172
|
+
"""
|
|
173
|
+
Return list of capabilities this provider supports.
|
|
174
|
+
|
|
175
|
+
WHY: Enables capability-based routing. Some providers may not
|
|
176
|
+
support all task types.
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
List of supported ModelCapability values
|
|
180
|
+
"""
|
|
181
|
+
|
|
182
|
+
@abstractmethod
|
|
183
|
+
async def get_available_models(self) -> List[str]:
|
|
184
|
+
"""
|
|
185
|
+
List models available from this provider.
|
|
186
|
+
|
|
187
|
+
WHY: Enables model validation and user selection. Local providers
|
|
188
|
+
may have different models installed than expected.
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
List of model names/identifiers
|
|
192
|
+
|
|
193
|
+
Example:
|
|
194
|
+
models = await provider.get_available_models()
|
|
195
|
+
# ["llama3.3:70b", "gemma2:9b", "mistral:7b"]
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
@abstractmethod
|
|
199
|
+
async def get_model_info(self, model: str) -> Dict[str, Any]:
|
|
200
|
+
"""
|
|
201
|
+
Get detailed information about a specific model.
|
|
202
|
+
|
|
203
|
+
WHY: Provides model metadata for UI display and capability checking.
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
model: Model name/identifier
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
Dictionary with model details (size, parameters, capabilities, etc.)
|
|
210
|
+
"""
|
|
211
|
+
|
|
212
|
+
@abstractmethod
|
|
213
|
+
async def shutdown(self) -> None:
|
|
214
|
+
"""
|
|
215
|
+
Shutdown provider and cleanup resources.
|
|
216
|
+
|
|
217
|
+
WHY: Proper resource cleanup for connection pools, HTTP sessions, etc.
|
|
218
|
+
"""
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class IModelRouter(ABC):
|
|
222
|
+
"""
|
|
223
|
+
Interface for intelligent model routing with fallback.
|
|
224
|
+
|
|
225
|
+
WHY: Manages provider selection and fallback logic. Routes requests
|
|
226
|
+
to optimal provider based on availability and configuration.
|
|
227
|
+
|
|
228
|
+
DESIGN PATTERN: Chain of Responsibility - tries providers in order
|
|
229
|
+
until one succeeds or all fail.
|
|
230
|
+
"""
|
|
231
|
+
|
|
232
|
+
@abstractmethod
|
|
233
|
+
async def analyze_content(
|
|
234
|
+
self,
|
|
235
|
+
content: str,
|
|
236
|
+
task: ModelCapability,
|
|
237
|
+
model: Optional[str] = None,
|
|
238
|
+
**kwargs,
|
|
239
|
+
) -> ModelResponse:
|
|
240
|
+
"""
|
|
241
|
+
Route content analysis to optimal provider.
|
|
242
|
+
|
|
243
|
+
WHY: Single entry point for all content analysis. Handles provider
|
|
244
|
+
selection, fallback, and error recovery transparently.
|
|
245
|
+
|
|
246
|
+
Args:
|
|
247
|
+
content: Text content to analyze
|
|
248
|
+
task: Type of analysis to perform
|
|
249
|
+
model: Optional specific model to use
|
|
250
|
+
**kwargs: Provider-specific options
|
|
251
|
+
|
|
252
|
+
Returns:
|
|
253
|
+
ModelResponse from successful provider
|
|
254
|
+
"""
|
|
255
|
+
|
|
256
|
+
@abstractmethod
|
|
257
|
+
def get_active_provider(self) -> Optional[str]:
|
|
258
|
+
"""
|
|
259
|
+
Get name of currently active provider.
|
|
260
|
+
|
|
261
|
+
Returns:
|
|
262
|
+
Provider name or None if no provider active
|
|
263
|
+
"""
|
|
264
|
+
|
|
265
|
+
@abstractmethod
|
|
266
|
+
async def get_provider_status(self) -> Dict[str, Dict[str, Any]]:
|
|
267
|
+
"""
|
|
268
|
+
Get status of all configured providers.
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
Dictionary mapping provider names to status info
|
|
272
|
+
"""
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
__all__ = [
|
|
276
|
+
"IModelProvider",
|
|
277
|
+
"IModelRouter",
|
|
278
|
+
"ModelCapability",
|
|
279
|
+
"ModelProvider",
|
|
280
|
+
"ModelResponse",
|
|
281
|
+
]
|