claude-mpm 4.1.26__py3-none-any.whl → 5.0.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/BUILD_NUMBER +1 -1
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +20 -5
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
- claude_mpm/agents/BASE_DOCUMENTATION.md +53 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/BASE_OPS.md +219 -0
- claude_mpm/agents/BASE_PM.md +432 -158
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +787 -0
- claude_mpm/agents/BASE_QA.md +167 -0
- claude_mpm/agents/BASE_RESEARCH.md +53 -0
- claude_mpm/agents/OUTPUT_STYLE.md +254 -29
- claude_mpm/agents/PM_INSTRUCTIONS.md +969 -0
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +355 -191
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +41 -14
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/async_agent_loader.py +3 -3
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +21 -44
- claude_mpm/agents/frontmatter_validator.py +292 -252
- claude_mpm/agents/system_agent_config.py +3 -2
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/circuit-breakers.md +1005 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/git-file-tracking.md +584 -0
- claude_mpm/agents/templates/pm-examples.md +474 -0
- claude_mpm/agents/templates/pm-red-flags.md +310 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/response-format.md +583 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/agents/templates/validation-templates.md +312 -0
- claude_mpm/cli/__init__.py +72 -376
- claude_mpm/cli/commands/__init__.py +4 -0
- claude_mpm/cli/commands/agent_manager.py +675 -20
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +344 -0
- claude_mpm/cli/commands/agents.py +1673 -178
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- claude_mpm/cli/commands/aggregate.py +11 -7
- claude_mpm/cli/commands/analyze.py +18 -13
- claude_mpm/cli/commands/analyze_code.py +8 -4
- claude_mpm/cli/commands/auto_configure.py +566 -0
- claude_mpm/cli/commands/cleanup.py +12 -12
- claude_mpm/cli/commands/config.py +54 -17
- claude_mpm/cli/commands/configure.py +1184 -1055
- claude_mpm/cli/commands/configure_agent_display.py +261 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +184 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/dashboard.py +50 -52
- claude_mpm/cli/commands/debug.py +19 -19
- claude_mpm/cli/commands/doctor.py +51 -7
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/info.py +3 -4
- claude_mpm/cli/commands/local_deploy.py +534 -0
- claude_mpm/cli/commands/mcp.py +17 -10
- claude_mpm/cli/commands/mcp_command_router.py +11 -0
- claude_mpm/cli/commands/mcp_config.py +154 -0
- claude_mpm/cli/commands/mcp_external_commands.py +249 -0
- claude_mpm/cli/commands/mcp_install_commands.py +101 -32
- claude_mpm/cli/commands/mcp_pipx_config.py +2 -2
- claude_mpm/cli/commands/mcp_setup_external.py +868 -0
- claude_mpm/cli/commands/memory.py +55 -21
- claude_mpm/cli/commands/monitor.py +160 -70
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +573 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +114 -4
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +252 -167
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +1225 -0
- claude_mpm/cli/commands/uninstall.py +176 -0
- claude_mpm/cli/commands/upgrade.py +152 -0
- claude_mpm/cli/commands/verify.py +119 -0
- claude_mpm/cli/executor.py +279 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +1872 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parser.py +79 -2
- claude_mpm/cli/parsers/__init__.py +7 -1
- claude_mpm/cli/parsers/agent_manager_parser.py +161 -1
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +369 -1
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +196 -3
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/configure_parser.py +11 -15
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mcp_parser.py +15 -0
- claude_mpm/cli/parsers/monitor_parser.py +12 -2
- claude_mpm/cli/parsers/mpm_init_parser.py +179 -9
- claude_mpm/cli/parsers/run_parser.py +5 -0
- claude_mpm/cli/parsers/search_parser.py +245 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +282 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/shared/argument_patterns.py +20 -13
- claude_mpm/cli/shared/base_command.py +2 -2
- claude_mpm/cli/shared/output_formatters.py +28 -19
- claude_mpm/cli/startup.py +994 -0
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/startup_logging.py +179 -13
- claude_mpm/cli/utils.py +54 -3
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/mpm-agents-auto-configure.md +278 -0
- claude_mpm/commands/mpm-agents-detect.md +177 -0
- claude_mpm/commands/mpm-agents-list.md +131 -0
- claude_mpm/commands/mpm-agents-recommend.md +223 -0
- claude_mpm/commands/mpm-config-view.md +150 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +297 -5
- claude_mpm/commands/mpm-init.md +401 -17
- claude_mpm/commands/mpm-monitor.md +418 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -0
- claude_mpm/commands/mpm-status.md +79 -8
- claude_mpm/commands/mpm-ticket-organize.md +304 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +122 -0
- claude_mpm/commands/mpm.md +12 -0
- claude_mpm/config/agent_config.py +4 -4
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/experimental_features.py +7 -7
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/config/paths.py +3 -2
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/config/socketio_config.py +3 -3
- claude_mpm/constants.py +28 -1
- claude_mpm/core/__init__.py +53 -17
- claude_mpm/core/agent_name_normalizer.py +3 -2
- claude_mpm/core/agent_registry.py +2 -2
- claude_mpm/core/agent_session_manager.py +10 -10
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/base_service.py +33 -23
- claude_mpm/core/cache.py +9 -9
- claude_mpm/core/claude_runner.py +24 -42
- claude_mpm/core/config.py +101 -8
- claude_mpm/core/config_aliases.py +7 -6
- claude_mpm/core/constants.py +66 -1
- claude_mpm/core/container.py +11 -5
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/error_handler.py +623 -0
- claude_mpm/core/factories.py +1 -1
- claude_mpm/core/file_utils.py +764 -0
- claude_mpm/core/framework/__init__.py +25 -0
- claude_mpm/core/framework/formatters/__init__.py +11 -0
- claude_mpm/core/framework/formatters/capability_generator.py +367 -0
- claude_mpm/core/framework/formatters/content_formatter.py +288 -0
- claude_mpm/core/framework/formatters/context_generator.py +185 -0
- claude_mpm/core/framework/loaders/__init__.py +13 -0
- claude_mpm/core/framework/loaders/agent_loader.py +210 -0
- claude_mpm/core/framework/loaders/file_loader.py +176 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +181 -0
- claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
- claude_mpm/core/framework/processors/__init__.py +11 -0
- claude_mpm/core/framework/processors/memory_processor.py +230 -0
- claude_mpm/core/framework/processors/metadata_processor.py +146 -0
- claude_mpm/core/framework/processors/template_processor.py +244 -0
- claude_mpm/core/framework_loader.py +321 -1631
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +49 -8
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +4 -3
- claude_mpm/core/interactive_session.py +146 -18
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/lazy.py +3 -3
- claude_mpm/core/log_manager.py +92 -23
- claude_mpm/core/logger.py +22 -15
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/oneshot_session.py +122 -15
- claude_mpm/core/optimized_agent_loader.py +9 -9
- claude_mpm/core/optimized_startup.py +1 -1
- claude_mpm/core/output_style_manager.py +12 -192
- claude_mpm/core/pm_hook_interceptor.py +18 -12
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/service_registry.py +7 -3
- claude_mpm/core/session_manager.py +14 -12
- claude_mpm/core/shared/config_loader.py +1 -1
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/socketio_pool.py +15 -15
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/tool_access_control.py +3 -2
- claude_mpm/core/types.py +4 -11
- claude_mpm/core/typing_utils.py +7 -6
- claude_mpm/core/unified_agent_registry.py +115 -11
- claude_mpm/core/unified_config.py +6 -6
- claude_mpm/core/unified_paths.py +23 -20
- claude_mpm/dashboard/analysis_runner.py +4 -4
- claude_mpm/dashboard/api/simple_directory.py +261 -0
- claude_mpm/dashboard/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +600 -18
- claude_mpm/dashboard/static/js/components/activity-tree.js +181 -195
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +105 -102
- claude_mpm/dashboard/static/js/components/agent-inference.js +34 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +67 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
- claude_mpm/dashboard/static/js/components/event-viewer.js +50 -13
- claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +36 -16
- claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +49 -23
- claude_mpm/dashboard/static/js/components/session-manager.js +19 -19
- claude_mpm/dashboard/static/js/components/socket-manager.js +5 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +520 -88
- claude_mpm/dashboard/static/js/components/working-directory.js +46 -11
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +309 -178
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +183 -139
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/socket.io.min.js +7 -0
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
- claude_mpm/dashboard/templates/code_simple.html +153 -0
- claude_mpm/dashboard/templates/index.html +125 -122
- claude_mpm/experimental/cli_enhancements.py +5 -7
- claude_mpm/generators/agent_profile_generator.py +5 -3
- claude_mpm/hooks/__init__.py +37 -1
- claude_mpm/hooks/base_hook.py +5 -4
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
- claude_mpm/hooks/claude_hooks/event_handlers.py +24 -19
- claude_mpm/hooks/claude_hooks/hook_handler.py +29 -22
- claude_mpm/hooks/claude_hooks/installer.py +67 -22
- claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
- claude_mpm/hooks/claude_hooks/response_tracking.py +57 -17
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +62 -64
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +140 -76
- claude_mpm/hooks/claude_hooks/services/state_manager.py +11 -9
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
- claude_mpm/hooks/failure_learning/__init__.py +54 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
- claude_mpm/hooks/instruction_reinforcement.py +301 -0
- claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
- claude_mpm/hooks/kuzu_memory_hook.py +386 -0
- claude_mpm/hooks/kuzu_response_hook.py +179 -0
- claude_mpm/hooks/memory_integration_hook.py +1 -1
- claude_mpm/hooks/session_resume_hook.py +121 -0
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/hooks/tool_call_interceptor.py +8 -5
- claude_mpm/hooks/validation_hooks.py +3 -3
- claude_mpm/init.py +23 -4
- claude_mpm/models/agent_session.py +8 -6
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/scripts/claude-hook-handler.sh +35 -9
- claude_mpm/scripts/launch_monitor.py +85 -0
- claude_mpm/scripts/mcp_server.py +3 -5
- claude_mpm/scripts/mpm_doctor.py +3 -2
- claude_mpm/scripts/socketio_daemon.py +159 -512
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/__init__.py +144 -160
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/agent_builder.py +56 -18
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_deployment.py +164 -17
- claude_mpm/services/agents/deployment/agent_discovery_service.py +191 -41
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +5 -5
- claude_mpm/services/agents/deployment/agent_format_converter.py +56 -12
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -7
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_record_service.py +4 -4
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +939 -50
- claude_mpm/services/agents/deployment/agent_validator.py +31 -7
- claude_mpm/services/agents/deployment/agent_version_manager.py +8 -5
- claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +3 -2
- claude_mpm/services/agents/deployment/deployment_config_loader.py +131 -7
- claude_mpm/services/agents/deployment/deployment_type_detector.py +10 -14
- claude_mpm/services/agents/deployment/deployment_wrapper.py +58 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
- claude_mpm/services/agents/deployment/local_template_deployment.py +360 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +249 -53
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +8 -7
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +7 -5
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +10 -10
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -43
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/deployment/validation/template_validator.py +64 -44
- claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/agent_profile_loader.py +10 -9
- claude_mpm/services/agents/loading/base_agent_manager.py +16 -6
- claude_mpm/services/agents/loading/framework_agent_loader.py +11 -14
- claude_mpm/services/agents/local_template_manager.py +784 -0
- claude_mpm/services/agents/management/agent_capabilities_generator.py +3 -2
- claude_mpm/services/agents/management/agent_management_service.py +5 -5
- claude_mpm/services/agents/memory/agent_memory_manager.py +32 -29
- claude_mpm/services/agents/memory/content_manager.py +17 -9
- claude_mpm/services/agents/memory/memory_categorization_service.py +4 -2
- claude_mpm/services/agents/memory/memory_file_service.py +32 -6
- claude_mpm/services/agents/memory/memory_format_service.py +6 -4
- claude_mpm/services/agents/memory/memory_limits_service.py +4 -2
- claude_mpm/services/agents/memory/template_generator.py +3 -3
- claude_mpm/services/agents/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +615 -0
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +3 -3
- claude_mpm/services/agents/registry/modification_tracker.py +30 -19
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/async_session_logger.py +141 -98
- claude_mpm/services/claude_session_logger.py +82 -74
- claude_mpm/services/cli/agent_cleanup_service.py +5 -0
- claude_mpm/services/cli/agent_listing_service.py +5 -5
- claude_mpm/services/cli/agent_validation_service.py +3 -1
- claude_mpm/services/cli/memory_crud_service.py +12 -7
- claude_mpm/services/cli/memory_output_formatter.py +2 -2
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +104 -13
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +372 -0
- claude_mpm/services/cli/startup_checker.py +13 -10
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +209 -13
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +88 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- claude_mpm/services/core/interfaces/health.py +169 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/project.py +121 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/memory_manager.py +92 -47
- claude_mpm/services/core/models/__init__.py +70 -0
- claude_mpm/services/core/models/agent_config.py +384 -0
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +239 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/models/toolchain.py +306 -0
- claude_mpm/services/core/path_resolver.py +36 -14
- claude_mpm/services/diagnostics/__init__.py +2 -2
- claude_mpm/services/diagnostics/checks/__init__.py +8 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +30 -34
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
- claude_mpm/services/diagnostics/checks/common_issues_check.py +28 -27
- claude_mpm/services/diagnostics/checks/configuration_check.py +26 -25
- claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
- claude_mpm/services/diagnostics/checks/installation_check.py +165 -60
- claude_mpm/services/diagnostics/checks/instructions_check.py +21 -21
- claude_mpm/services/diagnostics/checks/mcp_check.py +57 -44
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +24 -24
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
- claude_mpm/services/diagnostics/diagnostic_runner.py +31 -13
- claude_mpm/services/diagnostics/doctor_reporter.py +305 -47
- claude_mpm/services/diagnostics/models.py +37 -21
- claude_mpm/services/event_aggregator.py +5 -3
- claude_mpm/services/event_bus/direct_relay.py +11 -7
- claude_mpm/services/event_bus/event_bus.py +51 -9
- claude_mpm/services/event_bus/relay.py +33 -14
- claude_mpm/services/events/consumers/dead_letter.py +7 -5
- claude_mpm/services/events/consumers/logging.py +1 -2
- claude_mpm/services/events/core.py +5 -6
- claude_mpm/services/events/producers/hook.py +6 -6
- claude_mpm/services/events/producers/system.py +8 -8
- claude_mpm/services/exceptions.py +5 -5
- claude_mpm/services/framework_claude_md_generator/__init__.py +1 -1
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +5 -5
- claude_mpm/services/framework_claude_md_generator/content_validator.py +2 -2
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +3 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
- claude_mpm/services/framework_claude_md_generator/version_manager.py +1 -1
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/hook_installer_service.py +506 -0
- claude_mpm/services/hook_service.py +5 -6
- claude_mpm/services/infrastructure/context_preservation.py +13 -11
- claude_mpm/services/infrastructure/daemon_manager.py +9 -9
- claude_mpm/services/infrastructure/logging.py +2 -2
- claude_mpm/services/infrastructure/monitoring/__init__.py +2 -6
- claude_mpm/services/infrastructure/monitoring/aggregator.py +13 -18
- claude_mpm/services/infrastructure/monitoring/base.py +5 -13
- claude_mpm/services/infrastructure/monitoring/network.py +7 -6
- claude_mpm/services/infrastructure/monitoring/process.py +13 -12
- claude_mpm/services/infrastructure/monitoring/resources.py +8 -7
- claude_mpm/services/infrastructure/monitoring/service.py +16 -15
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +155 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +427 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +1542 -0
- claude_mpm/services/mcp_gateway/__init__.py +97 -93
- claude_mpm/services/mcp_gateway/auto_configure.py +43 -38
- claude_mpm/services/mcp_gateway/config/config_loader.py +3 -3
- claude_mpm/services/mcp_gateway/config/configuration.py +24 -5
- claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
- claude_mpm/services/mcp_gateway/core/base.py +20 -33
- claude_mpm/services/mcp_gateway/core/process_pool.py +591 -31
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +2 -2
- claude_mpm/services/mcp_gateway/core/startup_verification.py +3 -3
- claude_mpm/services/mcp_gateway/main.py +90 -15
- claude_mpm/services/mcp_gateway/registry/service_registry.py +4 -2
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +12 -9
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +5 -10
- claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -17
- claude_mpm/services/mcp_gateway/tools/__init__.py +14 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +10 -9
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +654 -0
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +36 -34
- claude_mpm/services/mcp_gateway/tools/hello_world.py +8 -8
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +555 -0
- claude_mpm/services/mcp_gateway/utils/__init__.py +14 -0
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +160 -0
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +170 -0
- claude_mpm/services/mcp_service_verifier.py +732 -0
- claude_mpm/services/memory/builder.py +9 -8
- claude_mpm/services/memory/cache/shared_prompt_cache.py +2 -1
- claude_mpm/services/memory/cache/simple_cache.py +2 -2
- claude_mpm/services/memory/failure_tracker.py +578 -0
- claude_mpm/services/memory/indexed_memory.py +8 -8
- claude_mpm/services/memory/optimizer.py +8 -9
- claude_mpm/services/memory/router.py +3 -3
- claude_mpm/services/memory_hook_service.py +165 -4
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +452 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +691 -0
- claude_mpm/services/monitor/daemon_manager.py +1040 -0
- claude_mpm/services/monitor/event_emitter.py +350 -0
- claude_mpm/services/monitor/handlers/__init__.py +21 -0
- claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
- claude_mpm/services/monitor/handlers/dashboard.py +299 -0
- claude_mpm/services/monitor/handlers/file.py +264 -0
- claude_mpm/services/monitor/handlers/hooks.py +512 -0
- claude_mpm/services/monitor/management/__init__.py +18 -0
- claude_mpm/services/monitor/management/health.py +124 -0
- claude_mpm/services/monitor/management/lifecycle.py +724 -0
- claude_mpm/services/monitor/server.py +817 -0
- claude_mpm/services/monitor_build_service.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/orphan_detection.py +786 -0
- claude_mpm/services/port_manager.py +3 -3
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/__init__.py +23 -0
- claude_mpm/services/project/analyzer.py +3 -3
- claude_mpm/services/project/architecture_analyzer.py +5 -5
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +4 -4
- claude_mpm/services/project/detection_strategies.py +719 -0
- claude_mpm/services/project/documentation_manager.py +554 -0
- claude_mpm/services/project/enhanced_analyzer.py +572 -0
- claude_mpm/services/project/metrics_collector.py +4 -4
- claude_mpm/services/project/project_organizer.py +1005 -0
- claude_mpm/services/project/registry.py +13 -7
- claude_mpm/services/project/toolchain_analyzer.py +583 -0
- claude_mpm/services/project_port_allocator.py +596 -0
- claude_mpm/services/response_tracker.py +21 -10
- claude_mpm/services/runner_configuration_service.py +17 -3
- claude_mpm/services/self_upgrade_service.py +500 -0
- claude_mpm/services/session_management_service.py +23 -9
- claude_mpm/services/session_manager.py +380 -0
- claude_mpm/services/shared/__init__.py +2 -1
- claude_mpm/services/shared/async_service_base.py +16 -27
- claude_mpm/services/shared/config_service_base.py +17 -14
- claude_mpm/services/shared/lifecycle_service_base.py +1 -14
- claude_mpm/services/shared/service_factory.py +8 -5
- claude_mpm/services/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- claude_mpm/services/socketio/client_proxy.py +60 -5
- claude_mpm/services/socketio/dashboard_server.py +361 -0
- claude_mpm/services/socketio/event_normalizer.py +10 -6
- claude_mpm/services/socketio/handlers/__init__.py +5 -2
- claude_mpm/services/socketio/handlers/base.py +2 -2
- claude_mpm/services/socketio/handlers/code_analysis.py +90 -27
- claude_mpm/services/socketio/handlers/connection.py +22 -41
- claude_mpm/services/socketio/handlers/connection_handler.py +13 -10
- claude_mpm/services/socketio/handlers/file.py +46 -10
- claude_mpm/services/socketio/handlers/git.py +9 -9
- claude_mpm/services/socketio/handlers/hook.py +29 -17
- claude_mpm/services/socketio/handlers/registry.py +4 -2
- claude_mpm/services/socketio/monitor_client.py +364 -0
- claude_mpm/services/socketio/server/broadcaster.py +9 -7
- claude_mpm/services/socketio/server/connection_manager.py +2 -2
- claude_mpm/services/socketio/server/core.py +142 -8
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +24 -24
- claude_mpm/services/socketio_client_manager.py +4 -4
- claude_mpm/services/subprocess_launcher_service.py +19 -15
- claude_mpm/services/system_instructions_service.py +3 -5
- claude_mpm/services/ticket_services/formatter_service.py +1 -1
- claude_mpm/services/ticket_services/validation_service.py +5 -5
- claude_mpm/services/unified/__init__.py +65 -0
- claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
- claude_mpm/services/unified/config_strategies/__init__.py +175 -0
- claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
- claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
- claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
- claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
- claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
- claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
- claude_mpm/services/unified/deployment_strategies/base.py +553 -0
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
- claude_mpm/services/unified/deployment_strategies/local.py +607 -0
- claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
- claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
- claude_mpm/services/unified/interfaces.py +475 -0
- claude_mpm/services/unified/migration.py +509 -0
- claude_mpm/services/unified/strategies.py +534 -0
- claude_mpm/services/unified/unified_analyzer.py +542 -0
- claude_mpm/services/unified/unified_config.py +691 -0
- claude_mpm/services/unified/unified_deployment.py +466 -0
- claude_mpm/services/utility_service.py +6 -3
- claude_mpm/services/version_control/branch_strategy.py +2 -2
- claude_mpm/services/version_control/conflict_resolution.py +14 -8
- claude_mpm/services/version_control/git_operations.py +26 -24
- claude_mpm/services/version_control/semantic_versioning.py +14 -14
- claude_mpm/services/version_control/version_parser.py +14 -11
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +42 -0
- claude_mpm/skills/agent_skills_injector.py +324 -0
- claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +573 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +310 -0
- claude_mpm/skills/skills_registry.py +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/state_storage.py +31 -31
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/tools/__main__.py +9 -9
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/tools/code_tree_builder.py +6 -6
- claude_mpm/tools/code_tree_events.py +14 -10
- claude_mpm/tools/socketio_debug.py +11 -11
- claude_mpm/utils/agent_dependency_loader.py +184 -36
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/common.py +544 -0
- claude_mpm/utils/config_manager.py +12 -6
- claude_mpm/utils/database_connector.py +298 -0
- claude_mpm/utils/dependency_cache.py +5 -3
- claude_mpm/utils/dependency_strategies.py +15 -10
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/environment_context.py +4 -3
- claude_mpm/utils/error_handler.py +5 -3
- claude_mpm/utils/file_utils.py +13 -14
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/path_operations.py +7 -4
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +131 -24
- claude_mpm/utils/session_logging.py +2 -2
- claude_mpm/utils/structured_questions.py +619 -0
- claude_mpm/utils/subprocess_utils.py +9 -8
- claude_mpm/validation/agent_validator.py +6 -6
- claude_mpm/validation/frontmatter_validator.py +6 -6
- claude_mpm-5.0.9.dist-info/METADATA +1028 -0
- claude_mpm-5.0.9.dist-info/RECORD +864 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -261
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/agent-manager.json +0 -270
- claude_mpm/agents/templates/agent-manager.md +0 -619
- claude_mpm/agents/templates/agentic_coder_optimizer.json +0 -222
- claude_mpm/agents/templates/api_qa.json +0 -171
- claude_mpm/agents/templates/code_analyzer.json +0 -95
- claude_mpm/agents/templates/data_engineer.json +0 -152
- claude_mpm/agents/templates/documentation.json +0 -175
- claude_mpm/agents/templates/engineer.json +0 -176
- claude_mpm/agents/templates/imagemagick.json +0 -261
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/memory_manager.json +0 -155
- claude_mpm/agents/templates/ops.json +0 -175
- claude_mpm/agents/templates/project_organizer.json +0 -130
- claude_mpm/agents/templates/qa.json +0 -223
- claude_mpm/agents/templates/refactoring_engineer.json +0 -266
- claude_mpm/agents/templates/research.json +0 -163
- claude_mpm/agents/templates/security.json +0 -153
- claude_mpm/agents/templates/ticketing.json +0 -169
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -281
- claude_mpm/agents/templates/version_control.json +0 -147
- claude_mpm/agents/templates/web_qa.json +0 -254
- claude_mpm/agents/templates/web_ui.json +0 -176
- claude_mpm/cli/commands/configure_tui.py +0 -1927
- claude_mpm/cli/commands/mpm_init.py +0 -594
- claude_mpm/cli/commands/socketio_monitor.py +0 -233
- claude_mpm/commands/mpm-agents.md +0 -12
- claude_mpm/commands/mpm-config.md +0 -18
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/css/code-tree.css +0 -1408
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/js/components/code-tree.js +0 -3220
- claude_mpm/dashboard/static/js/components/code-viewer.js +0 -480
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1040
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
- claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
- claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
- claude_mpm/scripts/socketio_server_manager.py +0 -349
- claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
- claude_mpm/services/cli/dashboard_launcher.py +0 -423
- claude_mpm/services/cli/socketio_manager.py +0 -537
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -286
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -645
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -602
- claude_mpm/services/project/analyzer_refactored.py +0 -450
- claude_mpm/tools/code_tree_analyzer.py +0 -1693
- claude_mpm-4.1.26.dist-info/METADATA +0 -332
- claude_mpm-4.1.26.dist-info/RECORD +0 -606
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent Hierarchy Component
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Displays agents in a hierarchical tree structure with PM at the top level.
|
|
5
5
|
* Shows subagents as children of the PM that spawned them, tracking delegation
|
|
6
6
|
* relationships from Task tool calls.
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
8
|
* WHY: Provides clear visualization of agent delegation relationships, making it
|
|
9
9
|
* easier to understand the flow of work through PM and subagent delegations.
|
|
10
|
-
*
|
|
10
|
+
*
|
|
11
11
|
* DESIGN DECISION: Uses tree-based visualization with expand/collapse functionality
|
|
12
12
|
* to handle complex delegation chains while maintaining performance with large
|
|
13
13
|
* event streams. Separates hierarchy building from rendering for flexibility.
|
|
@@ -17,7 +17,7 @@ class AgentHierarchy {
|
|
|
17
17
|
constructor(agentInference, eventViewer) {
|
|
18
18
|
this.agentInference = agentInference;
|
|
19
19
|
this.eventViewer = eventViewer;
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
// Hierarchy state
|
|
22
22
|
this.state = {
|
|
23
23
|
// Tree structure with PM nodes at root
|
|
@@ -29,16 +29,16 @@ class AgentHierarchy {
|
|
|
29
29
|
// Currently selected node
|
|
30
30
|
selectedNode: null
|
|
31
31
|
};
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
// Default expand all nodes initially
|
|
34
34
|
this.expandAll = true;
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
// Set up event listeners
|
|
37
37
|
this.setupEventListeners();
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
console.log('Agent hierarchy component initialized');
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
/**
|
|
43
43
|
* Set up event listeners for safe interaction
|
|
44
44
|
*/
|
|
@@ -52,7 +52,7 @@ class AgentHierarchy {
|
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
/**
|
|
57
57
|
* Build hierarchical structure from events
|
|
58
58
|
* @returns {Object} Tree structure with PM at root
|
|
@@ -60,12 +60,12 @@ class AgentHierarchy {
|
|
|
60
60
|
buildHierarchy() {
|
|
61
61
|
// Process agent inference first
|
|
62
62
|
this.agentInference.processAgentInference();
|
|
63
|
-
|
|
63
|
+
|
|
64
64
|
// Get PM delegations and events
|
|
65
65
|
const pmDelegations = this.agentInference.getPMDelegations();
|
|
66
66
|
const events = this.eventViewer.events;
|
|
67
67
|
const eventAgentMap = this.agentInference.getEventAgentMap();
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
// Create root PM nodes
|
|
70
70
|
const mainPM = {
|
|
71
71
|
id: 'pm_main',
|
|
@@ -79,17 +79,17 @@ class AgentHierarchy {
|
|
|
79
79
|
endTime: null,
|
|
80
80
|
expanded: true
|
|
81
81
|
};
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
// Map to store multiple implied PM groups
|
|
84
84
|
const impliedPMGroups = new Map();
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
// Clear node map
|
|
87
87
|
this.state.nodeMap.clear();
|
|
88
88
|
this.state.nodeMap.set(mainPM.id, mainPM);
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
// Track which agents have been added
|
|
91
91
|
const processedAgents = new Set();
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
// Process explicit PM delegations
|
|
94
94
|
for (const [delegationId, delegation] of pmDelegations) {
|
|
95
95
|
const agentNode = {
|
|
@@ -107,11 +107,11 @@ class AgentHierarchy {
|
|
|
107
107
|
endIndex: delegation.endIndex,
|
|
108
108
|
expanded: this.expandAll || this.state.expandedNodes.has(delegationId)
|
|
109
109
|
};
|
|
110
|
-
|
|
110
|
+
|
|
111
111
|
mainPM.children.push(agentNode);
|
|
112
112
|
this.state.nodeMap.set(delegationId, agentNode);
|
|
113
113
|
processedAgents.add(delegation.agentName);
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
// Update main PM stats
|
|
116
116
|
mainPM.eventCount++;
|
|
117
117
|
if (!mainPM.startTime || new Date(delegation.timestamp) < new Date(mainPM.startTime)) {
|
|
@@ -124,10 +124,10 @@ class AgentHierarchy {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
-
|
|
127
|
+
|
|
128
128
|
// Get orphan subagent groups from agent inference
|
|
129
129
|
const orphanGroups = this.agentInference.getOrphanGroups();
|
|
130
|
-
|
|
130
|
+
|
|
131
131
|
// Create implied PM nodes for each orphan group
|
|
132
132
|
let impliedPMCounter = 1;
|
|
133
133
|
for (const [groupingKey, orphans] of orphanGroups) {
|
|
@@ -146,14 +146,14 @@ class AgentHierarchy {
|
|
|
146
146
|
isImplied: true,
|
|
147
147
|
tooltip: 'Inferred PM - Subagents started without explicit PM delegation'
|
|
148
148
|
};
|
|
149
|
-
|
|
149
|
+
|
|
150
150
|
impliedPMGroups.set(groupingKey, impliedPM);
|
|
151
151
|
this.state.nodeMap.set(impliedPM.id, impliedPM);
|
|
152
152
|
impliedPMCounter++;
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
// Group orphan events by agent name within this implied PM
|
|
155
155
|
const agentEventGroups = new Map();
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
for (const orphan of orphans) {
|
|
158
158
|
// Find all events for this orphan agent
|
|
159
159
|
const agentEvents = [];
|
|
@@ -168,7 +168,7 @@ class AgentHierarchy {
|
|
|
168
168
|
break;
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
|
|
171
|
+
|
|
172
172
|
if (isOrphan) {
|
|
173
173
|
agentEvents.push({
|
|
174
174
|
eventIndex: index,
|
|
@@ -178,7 +178,7 @@ class AgentHierarchy {
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
});
|
|
181
|
-
|
|
181
|
+
|
|
182
182
|
if (agentEvents.length > 0) {
|
|
183
183
|
if (!agentEventGroups.has(orphan.agentName)) {
|
|
184
184
|
agentEventGroups.set(orphan.agentName, []);
|
|
@@ -186,14 +186,14 @@ class AgentHierarchy {
|
|
|
186
186
|
agentEventGroups.get(orphan.agentName).push(...agentEvents);
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
|
-
|
|
189
|
+
|
|
190
190
|
// Create subagent nodes for each agent in this implied PM group
|
|
191
191
|
for (const [agentName, agentEvents] of agentEventGroups) {
|
|
192
192
|
if (agentEvents.length === 0) continue;
|
|
193
|
-
|
|
193
|
+
|
|
194
194
|
const firstEvent = agentEvents[0].event;
|
|
195
195
|
const lastEvent = agentEvents[agentEvents.length - 1].event;
|
|
196
|
-
|
|
196
|
+
|
|
197
197
|
const agentNode = {
|
|
198
198
|
id: `implied_agent_${groupingKey}_${agentName}`,
|
|
199
199
|
type: 'subagent',
|
|
@@ -211,10 +211,10 @@ class AgentHierarchy {
|
|
|
211
211
|
isImplied: true,
|
|
212
212
|
tooltip: 'This agent was spawned without an explicit PM Task delegation'
|
|
213
213
|
};
|
|
214
|
-
|
|
214
|
+
|
|
215
215
|
impliedPM.children.push(agentNode);
|
|
216
216
|
this.state.nodeMap.set(agentNode.id, agentNode);
|
|
217
|
-
|
|
217
|
+
|
|
218
218
|
// Update implied PM stats
|
|
219
219
|
impliedPM.eventCount += agentEvents.length;
|
|
220
220
|
if (!impliedPM.startTime || new Date(firstEvent.timestamp) < new Date(impliedPM.startTime)) {
|
|
@@ -225,7 +225,7 @@ class AgentHierarchy {
|
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
|
-
|
|
228
|
+
|
|
229
229
|
// Also find completely orphaned subagent events (not caught by SubagentStart)
|
|
230
230
|
const uncategorizedOrphans = [];
|
|
231
231
|
events.forEach((event, index) => {
|
|
@@ -233,7 +233,7 @@ class AgentHierarchy {
|
|
|
233
233
|
if (inference && inference.type === 'subagent') {
|
|
234
234
|
// Check if this agent is already in a PM delegation or implied PM
|
|
235
235
|
let isOrphan = true;
|
|
236
|
-
|
|
236
|
+
|
|
237
237
|
// Check explicit delegations
|
|
238
238
|
for (const [_, delegation] of pmDelegations) {
|
|
239
239
|
if (delegation.agentEvents.some(e => e.eventIndex === index)) {
|
|
@@ -241,7 +241,7 @@ class AgentHierarchy {
|
|
|
241
241
|
break;
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
|
|
244
|
+
|
|
245
245
|
// Check implied PMs
|
|
246
246
|
if (isOrphan) {
|
|
247
247
|
for (const [_, impliedPM] of impliedPMGroups) {
|
|
@@ -254,7 +254,7 @@ class AgentHierarchy {
|
|
|
254
254
|
if (!isOrphan) break;
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
|
-
|
|
257
|
+
|
|
258
258
|
if (isOrphan) {
|
|
259
259
|
uncategorizedOrphans.push({
|
|
260
260
|
eventIndex: index,
|
|
@@ -264,7 +264,7 @@ class AgentHierarchy {
|
|
|
264
264
|
}
|
|
265
265
|
}
|
|
266
266
|
});
|
|
267
|
-
|
|
267
|
+
|
|
268
268
|
// If there are uncategorized orphans, create a generic implied PM for them
|
|
269
269
|
if (uncategorizedOrphans.length > 0) {
|
|
270
270
|
const genericImpliedPM = {
|
|
@@ -281,7 +281,7 @@ class AgentHierarchy {
|
|
|
281
281
|
isImplied: true,
|
|
282
282
|
tooltip: 'Orphan agents without clear grouping'
|
|
283
283
|
};
|
|
284
|
-
|
|
284
|
+
|
|
285
285
|
// Group by agent name
|
|
286
286
|
const agentGroups = new Map();
|
|
287
287
|
for (const orphan of uncategorizedOrphans) {
|
|
@@ -291,12 +291,12 @@ class AgentHierarchy {
|
|
|
291
291
|
}
|
|
292
292
|
agentGroups.get(agentName).push(orphan);
|
|
293
293
|
}
|
|
294
|
-
|
|
294
|
+
|
|
295
295
|
// Create nodes for each agent
|
|
296
296
|
for (const [agentName, agentEvents] of agentGroups) {
|
|
297
297
|
const firstEvent = agentEvents[0].event;
|
|
298
298
|
const lastEvent = agentEvents[agentEvents.length - 1].event;
|
|
299
|
-
|
|
299
|
+
|
|
300
300
|
const agentNode = {
|
|
301
301
|
id: `implied_generic_${agentName}`,
|
|
302
302
|
type: 'subagent',
|
|
@@ -313,11 +313,11 @@ class AgentHierarchy {
|
|
|
313
313
|
expanded: this.expandAll,
|
|
314
314
|
isImplied: true
|
|
315
315
|
};
|
|
316
|
-
|
|
316
|
+
|
|
317
317
|
genericImpliedPM.children.push(agentNode);
|
|
318
318
|
this.state.nodeMap.set(agentNode.id, agentNode);
|
|
319
319
|
genericImpliedPM.eventCount += agentEvents.length;
|
|
320
|
-
|
|
320
|
+
|
|
321
321
|
if (!genericImpliedPM.startTime || new Date(firstEvent.timestamp) < new Date(genericImpliedPM.startTime)) {
|
|
322
322
|
genericImpliedPM.startTime = firstEvent.timestamp;
|
|
323
323
|
}
|
|
@@ -325,13 +325,13 @@ class AgentHierarchy {
|
|
|
325
325
|
genericImpliedPM.endTime = lastEvent.timestamp;
|
|
326
326
|
}
|
|
327
327
|
}
|
|
328
|
-
|
|
328
|
+
|
|
329
329
|
if (genericImpliedPM.children.length > 0) {
|
|
330
330
|
impliedPMGroups.set('generic', genericImpliedPM);
|
|
331
331
|
this.state.nodeMap.set(genericImpliedPM.id, genericImpliedPM);
|
|
332
332
|
}
|
|
333
333
|
}
|
|
334
|
-
|
|
334
|
+
|
|
335
335
|
// Count PM's own events (not delegated)
|
|
336
336
|
let pmOwnEvents = 0;
|
|
337
337
|
events.forEach((event, index) => {
|
|
@@ -346,32 +346,32 @@ class AgentHierarchy {
|
|
|
346
346
|
}
|
|
347
347
|
});
|
|
348
348
|
mainPM.eventCount += pmOwnEvents;
|
|
349
|
-
|
|
349
|
+
|
|
350
350
|
// Update PM status based on children
|
|
351
351
|
if (mainPM.children.length > 0) {
|
|
352
352
|
const hasActive = mainPM.children.some(child => child.status === 'active');
|
|
353
353
|
mainPM.status = hasActive ? 'active' : 'completed';
|
|
354
354
|
}
|
|
355
|
-
|
|
355
|
+
|
|
356
356
|
// Build final tree structure
|
|
357
357
|
const tree = {
|
|
358
358
|
roots: []
|
|
359
359
|
};
|
|
360
|
-
|
|
360
|
+
|
|
361
361
|
// Only add PMs that have content
|
|
362
362
|
if (mainPM.eventCount > 0 || mainPM.children.length > 0) {
|
|
363
363
|
tree.roots.push(mainPM);
|
|
364
364
|
}
|
|
365
|
-
|
|
365
|
+
|
|
366
366
|
// Add all implied PM groups that have content
|
|
367
367
|
for (const [_, impliedPM] of impliedPMGroups) {
|
|
368
368
|
if (impliedPM.children.length > 0) {
|
|
369
369
|
tree.roots.push(impliedPM);
|
|
370
370
|
}
|
|
371
371
|
}
|
|
372
|
-
|
|
372
|
+
|
|
373
373
|
this.state.hierarchyTree = tree;
|
|
374
|
-
|
|
374
|
+
|
|
375
375
|
console.log('Hierarchy built:', {
|
|
376
376
|
mainPM: {
|
|
377
377
|
children: mainPM.children.length,
|
|
@@ -382,10 +382,10 @@ class AgentHierarchy {
|
|
|
382
382
|
totalImpliedAgents: Array.from(impliedPMGroups.values())
|
|
383
383
|
.reduce((sum, pm) => sum + pm.children.length, 0)
|
|
384
384
|
});
|
|
385
|
-
|
|
385
|
+
|
|
386
386
|
return tree;
|
|
387
387
|
}
|
|
388
|
-
|
|
388
|
+
|
|
389
389
|
/**
|
|
390
390
|
* Extract delegation context from PM Task call
|
|
391
391
|
* @param {Object} pmCall - The PM's Task tool call event
|
|
@@ -393,11 +393,11 @@ class AgentHierarchy {
|
|
|
393
393
|
*/
|
|
394
394
|
extractDelegationContext(pmCall) {
|
|
395
395
|
if (!pmCall) return 'Unknown delegation';
|
|
396
|
-
|
|
396
|
+
|
|
397
397
|
// Try to extract task description from tool parameters
|
|
398
398
|
const params = pmCall.tool_parameters || pmCall.data?.tool_parameters || {};
|
|
399
399
|
const task = params.task || params.request || params.description;
|
|
400
|
-
|
|
400
|
+
|
|
401
401
|
if (task) {
|
|
402
402
|
// Truncate long tasks
|
|
403
403
|
const maxLength = 100;
|
|
@@ -406,7 +406,7 @@ class AgentHierarchy {
|
|
|
406
406
|
}
|
|
407
407
|
return task;
|
|
408
408
|
}
|
|
409
|
-
|
|
409
|
+
|
|
410
410
|
// Fallback to tool input
|
|
411
411
|
const toolInput = pmCall.tool_input || pmCall.data?.tool_input;
|
|
412
412
|
if (toolInput && typeof toolInput === 'string') {
|
|
@@ -416,10 +416,10 @@ class AgentHierarchy {
|
|
|
416
416
|
}
|
|
417
417
|
return toolInput;
|
|
418
418
|
}
|
|
419
|
-
|
|
419
|
+
|
|
420
420
|
return 'Task delegation';
|
|
421
421
|
}
|
|
422
|
-
|
|
422
|
+
|
|
423
423
|
/**
|
|
424
424
|
* Render the hierarchy tree to HTML
|
|
425
425
|
* @param {Object} filters - Optional filters for display
|
|
@@ -427,20 +427,20 @@ class AgentHierarchy {
|
|
|
427
427
|
*/
|
|
428
428
|
render(filters = {}) {
|
|
429
429
|
const tree = this.state.hierarchyTree || this.buildHierarchy();
|
|
430
|
-
|
|
430
|
+
|
|
431
431
|
if (!tree.roots || tree.roots.length === 0) {
|
|
432
432
|
return '<div class="agent-hierarchy-empty">No agent activity detected</div>';
|
|
433
433
|
}
|
|
434
|
-
|
|
434
|
+
|
|
435
435
|
// Apply filters if provided
|
|
436
436
|
const filteredTree = this.applyFilters(tree, filters);
|
|
437
|
-
|
|
437
|
+
|
|
438
438
|
// Generate HTML
|
|
439
439
|
const html = filteredTree.roots.map(root => this.renderNode(root, 0)).join('');
|
|
440
|
-
|
|
440
|
+
|
|
441
441
|
return `<div class="agent-hierarchy">${html}</div>`;
|
|
442
442
|
}
|
|
443
|
-
|
|
443
|
+
|
|
444
444
|
/**
|
|
445
445
|
* Render a single node and its children
|
|
446
446
|
* @param {Object} node - Node to render
|
|
@@ -451,23 +451,23 @@ class AgentHierarchy {
|
|
|
451
451
|
const isExpanded = node.expanded || this.state.expandedNodes.has(node.id);
|
|
452
452
|
const hasChildren = node.children && node.children.length > 0;
|
|
453
453
|
const isSelected = this.state.selectedNode === node.id;
|
|
454
|
-
|
|
454
|
+
|
|
455
455
|
// Icon based on node type and status
|
|
456
456
|
const icon = this.getNodeIcon(node);
|
|
457
457
|
const expandIcon = hasChildren ? (isExpanded ? '▼' : '▶') : ' ';
|
|
458
|
-
|
|
458
|
+
|
|
459
459
|
// Status color
|
|
460
460
|
const statusClass = this.getStatusClass(node.status);
|
|
461
|
-
|
|
461
|
+
|
|
462
462
|
// Add special styling for implied nodes
|
|
463
463
|
const impliedClass = node.isImplied ? 'agent-node-implied' : '';
|
|
464
464
|
const tooltipAttr = node.tooltip ? `title="${this.escapeHtml(node.tooltip)}"` : '';
|
|
465
|
-
|
|
465
|
+
|
|
466
466
|
// Build node HTML
|
|
467
467
|
let html = `
|
|
468
|
-
<div class="agent-node agent-node-level-${level} ${isSelected ? 'agent-node-selected' : ''} ${impliedClass}"
|
|
468
|
+
<div class="agent-node agent-node-level-${level} ${isSelected ? 'agent-node-selected' : ''} ${impliedClass}"
|
|
469
469
|
data-node-id="${node.id}" ${tooltipAttr}>
|
|
470
|
-
<div class="agent-node-header ${statusClass}"
|
|
470
|
+
<div class="agent-node-header ${statusClass}"
|
|
471
471
|
data-toggle-node="${node.id}" style="cursor: pointer">
|
|
472
472
|
<span class="agent-node-expand">${expandIcon}</span>
|
|
473
473
|
<span class="agent-node-icon">${icon}</span>
|
|
@@ -478,11 +478,11 @@ class AgentHierarchy {
|
|
|
478
478
|
</span>
|
|
479
479
|
</div>
|
|
480
480
|
`;
|
|
481
|
-
|
|
481
|
+
|
|
482
482
|
// Add details if expanded
|
|
483
483
|
if (isExpanded && (node.delegationContext || node.startTime)) {
|
|
484
484
|
html += '<div class="agent-node-details">';
|
|
485
|
-
|
|
485
|
+
|
|
486
486
|
if (node.delegationContext && node.delegationContext !== 'Unknown delegation') {
|
|
487
487
|
html += `
|
|
488
488
|
<div class="agent-delegation-context">
|
|
@@ -490,7 +490,7 @@ class AgentHierarchy {
|
|
|
490
490
|
</div>
|
|
491
491
|
`;
|
|
492
492
|
}
|
|
493
|
-
|
|
493
|
+
|
|
494
494
|
if (node.startTime) {
|
|
495
495
|
const duration = this.calculateDuration(node.startTime, node.endTime);
|
|
496
496
|
html += `
|
|
@@ -500,22 +500,22 @@ class AgentHierarchy {
|
|
|
500
500
|
</div>
|
|
501
501
|
`;
|
|
502
502
|
}
|
|
503
|
-
|
|
503
|
+
|
|
504
504
|
html += '</div>';
|
|
505
505
|
}
|
|
506
|
-
|
|
506
|
+
|
|
507
507
|
// Render children if expanded
|
|
508
508
|
if (isExpanded && hasChildren) {
|
|
509
509
|
html += '<div class="agent-node-children">';
|
|
510
510
|
html += node.children.map(child => this.renderNode(child, level + 1)).join('');
|
|
511
511
|
html += '</div>';
|
|
512
512
|
}
|
|
513
|
-
|
|
513
|
+
|
|
514
514
|
html += '</div>';
|
|
515
|
-
|
|
515
|
+
|
|
516
516
|
return html;
|
|
517
517
|
}
|
|
518
|
-
|
|
518
|
+
|
|
519
519
|
/**
|
|
520
520
|
* Get icon for node based on type and status
|
|
521
521
|
* @param {Object} node - Node to get icon for
|
|
@@ -525,7 +525,7 @@ class AgentHierarchy {
|
|
|
525
525
|
if (node.type === 'pm') {
|
|
526
526
|
return node.isImplied ? '🔍' : '👔';
|
|
527
527
|
}
|
|
528
|
-
|
|
528
|
+
|
|
529
529
|
// Map agent names to icons
|
|
530
530
|
const agentIcons = {
|
|
531
531
|
'Engineer Agent': '🔧',
|
|
@@ -538,10 +538,10 @@ class AgentHierarchy {
|
|
|
538
538
|
'Data Engineer Agent': '💾',
|
|
539
539
|
'Test Integration Agent': '🧪'
|
|
540
540
|
};
|
|
541
|
-
|
|
541
|
+
|
|
542
542
|
return agentIcons[node.name] || '🤖';
|
|
543
543
|
}
|
|
544
|
-
|
|
544
|
+
|
|
545
545
|
/**
|
|
546
546
|
* Get status class for styling
|
|
547
547
|
* @param {string} status - Node status
|
|
@@ -561,7 +561,7 @@ class AgentHierarchy {
|
|
|
561
561
|
return 'agent-status-unknown';
|
|
562
562
|
}
|
|
563
563
|
}
|
|
564
|
-
|
|
564
|
+
|
|
565
565
|
/**
|
|
566
566
|
* Toggle node expansion
|
|
567
567
|
* @param {string} nodeId - ID of node to toggle
|
|
@@ -569,7 +569,7 @@ class AgentHierarchy {
|
|
|
569
569
|
toggleNode(nodeId) {
|
|
570
570
|
const node = this.state.nodeMap.get(nodeId);
|
|
571
571
|
if (!node) return;
|
|
572
|
-
|
|
572
|
+
|
|
573
573
|
if (this.state.expandedNodes.has(nodeId)) {
|
|
574
574
|
this.state.expandedNodes.delete(nodeId);
|
|
575
575
|
node.expanded = false;
|
|
@@ -577,13 +577,13 @@ class AgentHierarchy {
|
|
|
577
577
|
this.state.expandedNodes.add(nodeId);
|
|
578
578
|
node.expanded = true;
|
|
579
579
|
}
|
|
580
|
-
|
|
580
|
+
|
|
581
581
|
// Trigger re-render
|
|
582
582
|
if (window.dashboard) {
|
|
583
583
|
window.dashboard.renderCurrentTab();
|
|
584
584
|
}
|
|
585
585
|
}
|
|
586
|
-
|
|
586
|
+
|
|
587
587
|
/**
|
|
588
588
|
* Select a node
|
|
589
589
|
* @param {string} nodeId - ID of node to select
|
|
@@ -591,7 +591,7 @@ class AgentHierarchy {
|
|
|
591
591
|
selectNode(nodeId) {
|
|
592
592
|
this.state.selectedNode = nodeId;
|
|
593
593
|
const node = this.state.nodeMap.get(nodeId);
|
|
594
|
-
|
|
594
|
+
|
|
595
595
|
if (node) {
|
|
596
596
|
// Dispatch event for other components to react
|
|
597
597
|
const event = new CustomEvent('agentNodeSelected', {
|
|
@@ -600,7 +600,7 @@ class AgentHierarchy {
|
|
|
600
600
|
document.dispatchEvent(event);
|
|
601
601
|
}
|
|
602
602
|
}
|
|
603
|
-
|
|
603
|
+
|
|
604
604
|
/**
|
|
605
605
|
* Apply filters to the tree
|
|
606
606
|
* @param {Object} tree - Tree to filter
|
|
@@ -611,22 +611,22 @@ class AgentHierarchy {
|
|
|
611
611
|
if (!filters || Object.keys(filters).length === 0) {
|
|
612
612
|
return tree;
|
|
613
613
|
}
|
|
614
|
-
|
|
614
|
+
|
|
615
615
|
// Clone tree structure for filtering
|
|
616
616
|
const filteredTree = {
|
|
617
617
|
roots: []
|
|
618
618
|
};
|
|
619
|
-
|
|
619
|
+
|
|
620
620
|
for (const root of tree.roots) {
|
|
621
621
|
const filteredRoot = this.filterNode(root, filters);
|
|
622
622
|
if (filteredRoot) {
|
|
623
623
|
filteredTree.roots.push(filteredRoot);
|
|
624
624
|
}
|
|
625
625
|
}
|
|
626
|
-
|
|
626
|
+
|
|
627
627
|
return filteredTree;
|
|
628
628
|
}
|
|
629
|
-
|
|
629
|
+
|
|
630
630
|
/**
|
|
631
631
|
* Filter a single node and its children
|
|
632
632
|
* @param {Object} node - Node to filter
|
|
@@ -636,7 +636,7 @@ class AgentHierarchy {
|
|
|
636
636
|
filterNode(node, filters) {
|
|
637
637
|
// Check if node matches filters
|
|
638
638
|
let matches = true;
|
|
639
|
-
|
|
639
|
+
|
|
640
640
|
if (filters.searchText) {
|
|
641
641
|
const searchLower = filters.searchText.toLowerCase();
|
|
642
642
|
matches = matches && (
|
|
@@ -644,15 +644,15 @@ class AgentHierarchy {
|
|
|
644
644
|
(node.delegationContext && node.delegationContext.toLowerCase().includes(searchLower))
|
|
645
645
|
);
|
|
646
646
|
}
|
|
647
|
-
|
|
647
|
+
|
|
648
648
|
if (filters.agentType) {
|
|
649
649
|
matches = matches && node.name.includes(filters.agentType);
|
|
650
650
|
}
|
|
651
|
-
|
|
651
|
+
|
|
652
652
|
if (filters.status) {
|
|
653
653
|
matches = matches && node.status === filters.status;
|
|
654
654
|
}
|
|
655
|
-
|
|
655
|
+
|
|
656
656
|
// Filter children recursively
|
|
657
657
|
let filteredChildren = [];
|
|
658
658
|
if (node.children) {
|
|
@@ -663,7 +663,7 @@ class AgentHierarchy {
|
|
|
663
663
|
}
|
|
664
664
|
}
|
|
665
665
|
}
|
|
666
|
-
|
|
666
|
+
|
|
667
667
|
// Include node if it matches or has matching children
|
|
668
668
|
if (matches || filteredChildren.length > 0) {
|
|
669
669
|
return {
|
|
@@ -671,10 +671,10 @@ class AgentHierarchy {
|
|
|
671
671
|
children: filteredChildren
|
|
672
672
|
};
|
|
673
673
|
}
|
|
674
|
-
|
|
674
|
+
|
|
675
675
|
return null;
|
|
676
676
|
}
|
|
677
|
-
|
|
677
|
+
|
|
678
678
|
/**
|
|
679
679
|
* Format timestamp for display
|
|
680
680
|
* @param {string} timestamp - ISO timestamp
|
|
@@ -690,7 +690,7 @@ class AgentHierarchy {
|
|
|
690
690
|
hour12: false
|
|
691
691
|
});
|
|
692
692
|
}
|
|
693
|
-
|
|
693
|
+
|
|
694
694
|
/**
|
|
695
695
|
* Calculate duration between timestamps
|
|
696
696
|
* @param {string} start - Start timestamp
|
|
@@ -699,11 +699,11 @@ class AgentHierarchy {
|
|
|
699
699
|
*/
|
|
700
700
|
calculateDuration(start, end) {
|
|
701
701
|
if (!start || !end) return '';
|
|
702
|
-
|
|
702
|
+
|
|
703
703
|
const startTime = new Date(start).getTime();
|
|
704
704
|
const endTime = new Date(end).getTime();
|
|
705
705
|
const duration = endTime - startTime;
|
|
706
|
-
|
|
706
|
+
|
|
707
707
|
if (duration < 1000) {
|
|
708
708
|
return `${duration}ms`;
|
|
709
709
|
} else if (duration < 60000) {
|
|
@@ -714,7 +714,7 @@ class AgentHierarchy {
|
|
|
714
714
|
return `${minutes}m ${seconds}s`;
|
|
715
715
|
}
|
|
716
716
|
}
|
|
717
|
-
|
|
717
|
+
|
|
718
718
|
/**
|
|
719
719
|
* Escape HTML for safe rendering
|
|
720
720
|
* @param {string} text - Text to escape
|
|
@@ -726,7 +726,7 @@ class AgentHierarchy {
|
|
|
726
726
|
div.textContent = text;
|
|
727
727
|
return div.innerHTML;
|
|
728
728
|
}
|
|
729
|
-
|
|
729
|
+
|
|
730
730
|
/**
|
|
731
731
|
* Update hierarchy when new events arrive
|
|
732
732
|
* @param {Array} events - New events
|
|
@@ -735,7 +735,7 @@ class AgentHierarchy {
|
|
|
735
735
|
// Rebuild hierarchy with new events
|
|
736
736
|
this.buildHierarchy();
|
|
737
737
|
}
|
|
738
|
-
|
|
738
|
+
|
|
739
739
|
/**
|
|
740
740
|
* Clear the hierarchy
|
|
741
741
|
*/
|
|
@@ -745,7 +745,7 @@ class AgentHierarchy {
|
|
|
745
745
|
this.state.expandedNodes.clear();
|
|
746
746
|
this.state.selectedNode = null;
|
|
747
747
|
}
|
|
748
|
-
|
|
748
|
+
|
|
749
749
|
/**
|
|
750
750
|
* Expand all nodes
|
|
751
751
|
*/
|
|
@@ -756,7 +756,7 @@ class AgentHierarchy {
|
|
|
756
756
|
}
|
|
757
757
|
this.expandAll = true;
|
|
758
758
|
}
|
|
759
|
-
|
|
759
|
+
|
|
760
760
|
/**
|
|
761
761
|
* Collapse all nodes
|
|
762
762
|
*/
|
|
@@ -771,4 +771,7 @@ class AgentHierarchy {
|
|
|
771
771
|
|
|
772
772
|
// ES6 Module export
|
|
773
773
|
export { AgentHierarchy };
|
|
774
|
-
export default AgentHierarchy;
|
|
774
|
+
export default AgentHierarchy;
|
|
775
|
+
|
|
776
|
+
// Make AgentHierarchy globally available for dist/dashboard.js
|
|
777
|
+
window.AgentHierarchy = AgentHierarchy;
|