claude-mpm 3.4.10__py3-none-any.whl → 5.4.55__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 -0
- claude_mpm/VERSION +1 -0
- claude_mpm/__init__.py +50 -12
- claude_mpm/__main__.py +7 -2
- claude_mpm/agents/BASE_AGENT.md +164 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +290 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
- claude_mpm/agents/MEMORY.md +72 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1402 -0
- claude_mpm/agents/WORKFLOW.md +111 -0
- claude_mpm/agents/__init__.py +92 -80
- claude_mpm/agents/agent-template.yaml +83 -0
- claude_mpm/agents/agent_loader.py +560 -745
- claude_mpm/agents/agent_loader_integration.py +53 -55
- claude_mpm/agents/agents_metadata.py +186 -27
- claude_mpm/agents/async_agent_loader.py +436 -0
- claude_mpm/agents/base_agent.json +8 -4
- claude_mpm/agents/frontmatter_validator.py +754 -0
- claude_mpm/agents/system_agent_config.py +222 -155
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/__init__.py +17 -13
- claude_mpm/agents/templates/circuit-breakers.md +1391 -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 +90 -128
- claude_mpm/cli/__main__.py +33 -0
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/__init__.py +36 -12
- claude_mpm/cli/commands/agent_manager.py +1403 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +335 -0
- claude_mpm/cli/commands/agents.py +2503 -168
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/aggregate.py +540 -0
- claude_mpm/cli/commands/analyze.py +553 -0
- claude_mpm/cli/commands/analyze_code.py +528 -0
- claude_mpm/cli/commands/auto_configure.py +1053 -0
- claude_mpm/cli/commands/cleanup.py +588 -0
- claude_mpm/cli/commands/cleanup_orphaned_agents.py +150 -0
- claude_mpm/cli/commands/config.py +586 -0
- claude_mpm/cli/commands/configure.py +2654 -0
- claude_mpm/cli/commands/configure_agent_display.py +282 -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 +286 -0
- claude_mpm/cli/commands/debug.py +1386 -0
- claude_mpm/cli/commands/doctor.py +243 -0
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/info.py +195 -74
- claude_mpm/cli/commands/local_deploy.py +534 -0
- claude_mpm/cli/commands/mcp.py +205 -0
- claude_mpm/cli/commands/mcp_command_router.py +161 -0
- claude_mpm/cli/commands/mcp_config.py +154 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_external_commands.py +249 -0
- claude_mpm/cli/commands/mcp_install_commands.py +346 -0
- claude_mpm/cli/commands/mcp_pipx_config.py +208 -0
- claude_mpm/cli/commands/mcp_server_commands.py +155 -0
- claude_mpm/cli/commands/mcp_setup_external.py +868 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +585 -846
- claude_mpm/cli/commands/monitor.py +228 -310
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +759 -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/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +722 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +195 -0
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/profile.py +276 -0
- claude_mpm/cli/commands/run.py +910 -488
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +1246 -0
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/commands/tickets.py +536 -53
- 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 +297 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +1947 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parser.py +87 -563
- claude_mpm/cli/parsers/__init__.py +35 -0
- claude_mpm/cli/parsers/agent_manager_parser.py +393 -0
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +575 -0
- claude_mpm/cli/parsers/analyze_code_parser.py +170 -0
- claude_mpm/cli/parsers/analyze_parser.py +135 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +120 -0
- claude_mpm/cli/parsers/base_parser.py +644 -0
- claude_mpm/cli/parsers/config_parser.py +208 -0
- claude_mpm/cli/parsers/configure_parser.py +138 -0
- claude_mpm/cli/parsers/dashboard_parser.py +113 -0
- claude_mpm/cli/parsers/debug_parser.py +319 -0
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mcp_parser.py +195 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +142 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +311 -0
- claude_mpm/cli/parsers/profile_parser.py +147 -0
- claude_mpm/cli/parsers/run_parser.py +157 -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 +277 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/shared/__init__.py +40 -0
- claude_mpm/cli/shared/argument_patterns.py +205 -0
- claude_mpm/cli/shared/base_command.py +242 -0
- claude_mpm/cli/shared/error_handling.py +242 -0
- claude_mpm/cli/shared/output_formatters.py +241 -0
- claude_mpm/cli/startup.py +1743 -0
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/startup_logging.py +839 -0
- claude_mpm/cli/utils.py +136 -47
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +42 -64
- claude_mpm/commands/__init__.py +14 -0
- claude_mpm/commands/mpm-config.md +28 -0
- claude_mpm/commands/mpm-doctor.md +20 -0
- claude_mpm/commands/mpm-help.md +20 -0
- claude_mpm/commands/mpm-init.md +120 -0
- claude_mpm/commands/mpm-monitor.md +31 -0
- claude_mpm/commands/mpm-organize.md +120 -0
- claude_mpm/commands/mpm-postmortem.md +21 -0
- claude_mpm/commands/mpm-session-resume.md +30 -0
- claude_mpm/commands/mpm-status.md +20 -0
- claude_mpm/commands/mpm-ticket-view.md +109 -0
- claude_mpm/commands/mpm-version.md +20 -0
- claude_mpm/commands/mpm.md +31 -0
- claude_mpm/config/__init__.py +42 -2
- claude_mpm/config/agent_config.py +402 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +352 -0
- claude_mpm/config/experimental_features.py +217 -0
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/config/paths.py +258 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/config/socketio_config.py +125 -83
- claude_mpm/constants.py +132 -22
- claude_mpm/core/__init__.py +62 -36
- claude_mpm/core/agent_name_normalizer.py +71 -73
- claude_mpm/core/agent_registry.py +385 -492
- claude_mpm/core/agent_session_manager.py +81 -70
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/base_service.py +159 -122
- claude_mpm/core/cache.py +560 -0
- claude_mpm/core/claude_runner.py +696 -916
- claude_mpm/core/config.py +613 -122
- claude_mpm/core/config_aliases.py +74 -73
- claude_mpm/core/config_constants.py +314 -0
- claude_mpm/core/constants.py +361 -0
- claude_mpm/core/container.py +646 -104
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/error_handler.py +623 -0
- claude_mpm/core/exceptions.py +536 -0
- claude_mpm/core/factories.py +105 -109
- 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 +278 -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 +213 -0
- claude_mpm/core/framework/loaders/file_loader.py +176 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +222 -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 +485 -414
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +246 -86
- claude_mpm/core/hook_performance_config.py +147 -0
- claude_mpm/core/injectable_service.py +72 -63
- claude_mpm/core/instruction_reinforcement_hook.py +267 -0
- claude_mpm/core/interactive_session.py +670 -0
- claude_mpm/core/interfaces.py +570 -164
- claude_mpm/core/lazy.py +467 -0
- claude_mpm/core/log_manager.py +707 -0
- claude_mpm/core/logger.py +295 -134
- claude_mpm/core/logging_config.py +474 -0
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/minimal_framework_loader.py +24 -22
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +594 -0
- claude_mpm/core/optimized_agent_loader.py +479 -0
- claude_mpm/core/optimized_startup.py +554 -0
- claude_mpm/core/output_style_manager.py +483 -0
- claude_mpm/core/pm_hook_interceptor.py +197 -82
- 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 +153 -116
- claude_mpm/core/session_manager.py +179 -64
- claude_mpm/core/shared/__init__.py +17 -0
- claude_mpm/core/shared/config_loader.py +326 -0
- claude_mpm/core/shared/path_resolver.py +281 -0
- claude_mpm/core/shared/singleton_manager.py +221 -0
- claude_mpm/core/socketio_pool.py +400 -137
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/tool_access_control.py +64 -57
- claude_mpm/core/types.py +307 -0
- claude_mpm/core/typing_utils.py +553 -0
- claude_mpm/core/unified_agent_registry.py +969 -0
- claude_mpm/core/unified_config.py +570 -0
- claude_mpm/core/unified_paths.py +941 -0
- claude_mpm/dashboard/__init__.py +12 -0
- claude_mpm/dashboard/api/simple_directory.py +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B0uc0UOD.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7RN905-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7xVLGWV.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BIF9m_hv.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BPYeabCQ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Be7GpZd6.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bh0LDWpI.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BofRWZRR.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BovzEFCE.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C30mlcqg.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4B-KCzX.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4JcI4KD.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CBBdVcY8.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDuw-vjf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_Usid8X.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cfqx1Qun.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CiIAseT4.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CnA0NrzZ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cs_tUR18.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyWMqx4W.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzZX-COe.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzeYkLYB.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D3k0OPJN.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9lljYKQ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DGkLK5U1.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DI7hHRFL.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLVjFsZ3.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUrLdbGD.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DY1XQ8fi.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DZX00Y4g.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DaimHw_p.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +323 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dhb8PKl3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dle-35c7.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DmxopI1J.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DwBR2MJi.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/GYwsonyD.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Vzk33B_K.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ZGh7QtNv.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bT1r9zLR.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bTOqqlTd.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/eNVUfhuA.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/iEWssX7S.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/sQeU3Y1z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uuIeMWc-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.D6-I5TpK.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.m1gL8KXf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.CgNOuw-d.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
- claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
- claude_mpm/dashboard/static/svelte-build/index.html +36 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
- claude_mpm/experimental/__init__.py +10 -0
- claude_mpm/experimental/cli_enhancements.py +104 -89
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +76 -66
- claude_mpm/hooks/__init__.py +37 -1
- claude_mpm/hooks/base_hook.py +37 -32
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/connection_pool.py +250 -0
- claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +888 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +652 -875
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +10 -7
- claude_mpm/hooks/claude_hooks/installer.py +806 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +249 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +412 -0
- claude_mpm/hooks/claude_hooks/services/__init__.py +15 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +229 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +254 -0
- claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +106 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +284 -0
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +374 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +224 -0
- 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 +201 -107
- 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 +92 -76
- claude_mpm/hooks/validation_hooks.py +62 -54
- claude_mpm/init.py +518 -83
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +40 -23
- claude_mpm/models/agent_session.py +538 -0
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/schemas/__init__.py +12 -0
- claude_mpm/scripts/__init__.py +15 -0
- claude_mpm/scripts/claude-hook-handler.sh +227 -0
- claude_mpm/scripts/launch_monitor.py +165 -0
- claude_mpm/scripts/mpm_doctor.py +322 -0
- claude_mpm/scripts/socketio_daemon.py +189 -200
- claude_mpm/scripts/start_activity_logging.py +91 -0
- claude_mpm/services/__init__.py +208 -39
- claude_mpm/services/agent_capabilities_service.py +266 -0
- claude_mpm/services/agents/__init__.py +89 -0
- claude_mpm/services/agents/agent_builder.py +514 -0
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_recommendation_service.py +278 -0
- claude_mpm/services/agents/agent_review_service.py +280 -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/__init__.py +21 -0
- claude_mpm/services/agents/deployment/agent_config_provider.py +410 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +358 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +80 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +1037 -0
- claude_mpm/services/agents/deployment/agent_discovery_service.py +546 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +288 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +383 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +505 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +160 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +957 -0
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +273 -0
- claude_mpm/services/agents/deployment/agent_operation_service.py +573 -0
- claude_mpm/services/agents/deployment/agent_record_service.py +418 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +84 -0
- claude_mpm/services/agents/deployment/agent_state_service.py +381 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +1369 -0
- claude_mpm/services/agents/deployment/agent_validator.py +376 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +322 -0
- claude_mpm/services/{agent_versioning.py → agents/deployment/agent_versioning.py} +10 -13
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +149 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +768 -0
- claude_mpm/services/agents/deployment/base_agent_locator.py +132 -0
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +181 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +178 -0
- claude_mpm/services/agents/deployment/deployment_results_manager.py +185 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +120 -0
- claude_mpm/services/agents/deployment/deployment_wrapper.py +129 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +70 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +269 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +226 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/local_template_deployment.py +362 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +1478 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +162 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +240 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +110 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +80 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +92 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +101 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +102 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +269 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +311 -0
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +862 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +315 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +113 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +148 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +131 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +130 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +228 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +21 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +319 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +214 -0
- claude_mpm/services/agents/git_source_manager.py +682 -0
- claude_mpm/services/agents/loading/__init__.py +11 -0
- claude_mpm/services/{agent_profile_loader.py → agents/loading/agent_profile_loader.py} +306 -228
- claude_mpm/services/{base_agent_manager.py → agents/loading/base_agent_manager.py} +106 -91
- claude_mpm/services/agents/loading/framework_agent_loader.py +433 -0
- claude_mpm/services/agents/local_template_manager.py +784 -0
- claude_mpm/services/agents/management/__init__.py +9 -0
- claude_mpm/services/{agent_capabilities_generator.py → agents/management/agent_capabilities_generator.py} +92 -69
- claude_mpm/services/{agent_management_service.py → agents/management/agent_management_service.py} +219 -168
- claude_mpm/services/agents/memory/__init__.py +22 -0
- claude_mpm/services/agents/memory/agent_memory_manager.py +784 -0
- claude_mpm/services/{agent_persistence_service.py → agents/memory/agent_persistence_service.py} +20 -18
- claude_mpm/services/agents/memory/content_manager.py +470 -0
- claude_mpm/services/agents/memory/memory_categorization_service.py +167 -0
- claude_mpm/services/agents/memory/memory_file_service.py +129 -0
- claude_mpm/services/agents/memory/memory_format_service.py +201 -0
- claude_mpm/services/agents/memory/memory_limits_service.py +101 -0
- claude_mpm/services/agents/memory/template_generator.py +83 -0
- claude_mpm/services/agents/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +617 -0
- claude_mpm/services/agents/registry/__init__.py +30 -0
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +273 -0
- claude_mpm/services/{agent_modification_tracker.py → agents/registry/modification_tracker.py} +370 -295
- 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 +1202 -0
- claude_mpm/services/agents/startup_sync.py +259 -0
- claude_mpm/services/agents/toolchain_detector.py +478 -0
- claude_mpm/services/analysis/__init__.py +35 -0
- claude_mpm/services/analysis/clone_detector.py +1030 -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 +665 -0
- claude_mpm/services/claude_session_logger.py +321 -0
- claude_mpm/services/cli/__init__.py +18 -0
- claude_mpm/services/cli/agent_cleanup_service.py +408 -0
- claude_mpm/services/cli/agent_dependency_service.py +395 -0
- claude_mpm/services/cli/agent_listing_service.py +463 -0
- claude_mpm/services/cli/agent_output_formatter.py +605 -0
- claude_mpm/services/cli/agent_validation_service.py +590 -0
- claude_mpm/services/cli/memory_crud_service.py +622 -0
- claude_mpm/services/cli/memory_output_formatter.py +604 -0
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +604 -0
- 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 +362 -0
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +446 -0
- claude_mpm/services/command_handler_service.py +221 -0
- claude_mpm/services/communication/__init__.py +22 -0
- claude_mpm/services/core/__init__.py +108 -0
- claude_mpm/services/core/base.py +269 -0
- claude_mpm/services/core/cache_manager.py +309 -0
- claude_mpm/services/core/interfaces/__init__.py +273 -0
- claude_mpm/services/core/interfaces/agent.py +514 -0
- claude_mpm/services/core/interfaces/communication.py +316 -0
- claude_mpm/services/core/interfaces/health.py +169 -0
- claude_mpm/services/core/interfaces/infrastructure.py +357 -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/service.py +405 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/interfaces.py +81 -0
- claude_mpm/services/core/memory_manager.py +682 -0
- 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 +517 -0
- claude_mpm/services/core/service_container.py +520 -0
- claude_mpm/services/core/service_interfaces.py +436 -0
- claude_mpm/services/diagnostics/__init__.py +18 -0
- claude_mpm/services/diagnostics/checks/__init__.py +38 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +370 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/base_check.py +60 -0
- claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
- claude_mpm/services/diagnostics/checks/common_issues_check.py +363 -0
- claude_mpm/services/diagnostics/checks/configuration_check.py +306 -0
- claude_mpm/services/diagnostics/checks/filesystem_check.py +233 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +520 -0
- claude_mpm/services/diagnostics/checks/instructions_check.py +415 -0
- claude_mpm/services/diagnostics/checks/mcp_check.py +330 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +281 -0
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/checks/startup_log_check.py +319 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +286 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +578 -0
- claude_mpm/services/diagnostics/models.py +138 -0
- claude_mpm/services/event_aggregator.py +582 -0
- claude_mpm/services/event_bus/__init__.py +18 -0
- claude_mpm/services/event_bus/config.py +186 -0
- claude_mpm/services/event_bus/direct_relay.py +312 -0
- claude_mpm/services/event_bus/event_bus.py +396 -0
- claude_mpm/services/event_bus/relay.py +326 -0
- claude_mpm/services/events/__init__.py +44 -0
- claude_mpm/services/events/consumers/__init__.py +18 -0
- claude_mpm/services/events/consumers/dead_letter.py +306 -0
- claude_mpm/services/events/consumers/logging.py +184 -0
- claude_mpm/services/events/consumers/metrics.py +241 -0
- claude_mpm/services/events/consumers/socketio.py +377 -0
- claude_mpm/services/events/core.py +480 -0
- claude_mpm/services/events/interfaces.py +214 -0
- claude_mpm/services/events/producers/__init__.py +14 -0
- claude_mpm/services/events/producers/hook.py +269 -0
- claude_mpm/services/events/producers/system.py +329 -0
- claude_mpm/services/exceptions.py +433 -353
- claude_mpm/services/framework_claude_md_generator/__init__.py +81 -80
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +74 -67
- claude_mpm/services/framework_claude_md_generator/content_validator.py +66 -62
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +82 -60
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +36 -37
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +41 -40
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +15 -15
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +26 -30
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +31 -30
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +579 -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 +159 -111
- claude_mpm/services/infrastructure/__init__.py +52 -0
- claude_mpm/services/infrastructure/context_preservation.py +569 -0
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +209 -0
- claude_mpm/services/infrastructure/monitoring/__init__.py +39 -0
- claude_mpm/services/infrastructure/monitoring/aggregator.py +432 -0
- claude_mpm/services/infrastructure/monitoring/base.py +122 -0
- claude_mpm/services/infrastructure/monitoring/legacy.py +203 -0
- claude_mpm/services/infrastructure/monitoring/network.py +219 -0
- claude_mpm/services/infrastructure/monitoring/process.py +343 -0
- claude_mpm/services/infrastructure/monitoring/resources.py +244 -0
- claude_mpm/services/infrastructure/monitoring/service.py +368 -0
- claude_mpm/services/infrastructure/monitoring.py +71 -0
- 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_service_verifier.py +732 -0
- claude_mpm/services/memory/__init__.py +19 -0
- claude_mpm/services/{memory_builder.py → memory/builder.py} +465 -373
- claude_mpm/services/memory/cache/__init__.py +14 -0
- claude_mpm/services/{shared_prompt_cache.py → memory/cache/shared_prompt_cache.py} +237 -200
- claude_mpm/services/memory/cache/simple_cache.py +331 -0
- claude_mpm/services/memory/failure_tracker.py +578 -0
- claude_mpm/services/memory/indexed_memory.py +648 -0
- claude_mpm/services/{memory_optimizer.py → memory/optimizer.py} +272 -243
- claude_mpm/services/memory/router.py +951 -0
- claude_mpm/services/memory_hook_service.py +470 -0
- 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 +698 -0
- claude_mpm/services/monitor/daemon_manager.py +1076 -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 +730 -0
- claude_mpm/services/monitor/server.py +1493 -0
- claude_mpm/services/monitor_build_service.py +349 -0
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/orphan_detection.py +786 -0
- claude_mpm/services/pm_skills_deployer.py +707 -0
- claude_mpm/services/port_manager.py +597 -0
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/profile_manager.py +337 -0
- claude_mpm/services/project/__init__.py +44 -0
- claude_mpm/services/{project_analyzer.py → project/analyzer.py} +541 -291
- claude_mpm/services/project/analyzer_v2.py +566 -0
- claude_mpm/services/project/architecture_analyzer.py +461 -0
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +462 -0
- 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/language_analyzer.py +265 -0
- claude_mpm/services/project/metrics_collector.py +407 -0
- claude_mpm/services/project/project_organizer.py +1009 -0
- claude_mpm/services/project/registry.py +636 -0
- claude_mpm/services/project/toolchain_analyzer.py +583 -0
- claude_mpm/services/project_port_allocator.py +596 -0
- claude_mpm/services/recovery_manager.py +293 -240
- claude_mpm/services/response_tracker.py +267 -0
- claude_mpm/services/runner_configuration_service.py +605 -0
- claude_mpm/services/self_upgrade_service.py +608 -0
- claude_mpm/services/session_management_service.py +314 -0
- claude_mpm/services/session_manager.py +380 -0
- claude_mpm/services/shared/__init__.py +21 -0
- claude_mpm/services/shared/async_service_base.py +216 -0
- claude_mpm/services/shared/config_service_base.py +301 -0
- claude_mpm/services/shared/lifecycle_service_base.py +308 -0
- claude_mpm/services/shared/manager_base.py +315 -0
- claude_mpm/services/shared/service_factory.py +309 -0
- claude_mpm/services/skills/__init__.py +21 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1324 -0
- claude_mpm/services/skills/selective_skill_deployer.py +744 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +1168 -0
- claude_mpm/services/socketio/__init__.py +25 -0
- claude_mpm/services/socketio/client_proxy.py +229 -0
- claude_mpm/services/socketio/dashboard_server.py +362 -0
- claude_mpm/services/socketio/event_normalizer.py +798 -0
- claude_mpm/services/socketio/handlers/__init__.py +30 -0
- claude_mpm/services/socketio/handlers/base.py +136 -0
- claude_mpm/services/socketio/handlers/code_analysis.py +682 -0
- claude_mpm/services/socketio/handlers/connection.py +643 -0
- claude_mpm/services/socketio/handlers/connection_handler.py +333 -0
- claude_mpm/services/socketio/handlers/file.py +263 -0
- claude_mpm/services/socketio/handlers/git.py +962 -0
- claude_mpm/services/socketio/handlers/hook.py +211 -0
- claude_mpm/services/socketio/handlers/memory.py +26 -0
- claude_mpm/services/socketio/handlers/project.py +24 -0
- claude_mpm/services/socketio/handlers/registry.py +214 -0
- claude_mpm/services/socketio/migration_utils.py +343 -0
- claude_mpm/services/socketio/monitor_client.py +364 -0
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +569 -0
- claude_mpm/services/socketio/server/connection_manager.py +579 -0
- claude_mpm/services/socketio/server/core.py +1079 -0
- claude_mpm/services/socketio/server/eventbus_integration.py +245 -0
- claude_mpm/services/socketio/server/main.py +501 -0
- claude_mpm/services/socketio_client_manager.py +173 -143
- claude_mpm/services/socketio_server.py +38 -1657
- claude_mpm/services/subprocess_launcher_service.py +322 -0
- claude_mpm/services/system_instructions_service.py +270 -0
- claude_mpm/services/ticket_manager.py +25 -209
- claude_mpm/services/ticket_services/__init__.py +26 -0
- claude_mpm/services/ticket_services/crud_service.py +328 -0
- claude_mpm/services/ticket_services/formatter_service.py +290 -0
- claude_mpm/services/ticket_services/search_service.py +324 -0
- claude_mpm/services/ticket_services/validation_service.py +303 -0
- claude_mpm/services/ticket_services/workflow_service.py +244 -0
- 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 +280 -0
- claude_mpm/services/version_control/__init__.py +34 -37
- claude_mpm/services/version_control/branch_strategy.py +26 -17
- claude_mpm/services/version_control/conflict_resolution.py +52 -36
- claude_mpm/services/version_control/git_operations.py +183 -49
- claude_mpm/services/version_control/semantic_versioning.py +172 -61
- claude_mpm/services/version_control/version_parser.py +546 -0
- claude_mpm/services/version_service.py +379 -0
- claude_mpm/services/visualization/__init__.py +15 -0
- claude_mpm/services/visualization/mermaid_generator.py +937 -0
- 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 +439 -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 +405 -0
- claude_mpm/skills/skills_registry.py +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/__init__.py +9 -0
- claude_mpm/storage/state_storage.py +546 -0
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- 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/ticket_wrapper.py +2 -2
- claude_mpm/tools/__init__.py +10 -0
- claude_mpm/tools/__main__.py +208 -0
- 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 +631 -0
- claude_mpm/tools/code_tree_events.py +420 -0
- claude_mpm/tools/socketio_debug.py +671 -0
- claude_mpm/utils/__init__.py +8 -8
- claude_mpm/utils/agent_dependency_loader.py +1090 -0
- claude_mpm/utils/agent_filters.py +261 -0
- claude_mpm/utils/common.py +544 -0
- claude_mpm/utils/config_manager.py +168 -126
- claude_mpm/utils/console.py +11 -0
- claude_mpm/utils/database_connector.py +298 -0
- claude_mpm/utils/dependency_cache.py +373 -0
- claude_mpm/utils/dependency_manager.py +60 -59
- claude_mpm/utils/dependency_strategies.py +381 -0
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/environment_context.py +313 -0
- claude_mpm/utils/error_handler.py +78 -66
- claude_mpm/utils/file_utils.py +305 -0
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/gitignore.py +244 -0
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/path_operations.py +110 -104
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +823 -0
- claude_mpm/utils/session_logging.py +121 -0
- claude_mpm/utils/structured_questions.py +619 -0
- claude_mpm/utils/subprocess_utils.py +343 -0
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +214 -108
- claude_mpm/validation/frontmatter_validator.py +252 -0
- claude_mpm-5.4.55.dist-info/METADATA +999 -0
- claude_mpm-5.4.55.dist-info/RECORD +868 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/entry_points.txt +1 -3
- claude_mpm-5.4.55.dist-info/licenses/LICENSE +94 -0
- claude_mpm-5.4.55.dist-info/licenses/LICENSE-FAQ.md +153 -0
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -88
- claude_mpm/agents/INSTRUCTIONS.md +0 -352
- claude_mpm/agents/backups/INSTRUCTIONS.md +0 -352
- claude_mpm/agents/base_agent_loader.py +0 -529
- claude_mpm/agents/schema/agent_schema.json +0 -314
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -36
- claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -45
- claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -49
- claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -45
- claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -49
- claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/data_engineer.json +0 -110
- claude_mpm/agents/templates/documentation.json +0 -109
- claude_mpm/agents/templates/engineer.json +0 -113
- claude_mpm/agents/templates/ops.json +0 -109
- claude_mpm/agents/templates/pm.json +0 -25
- claude_mpm/agents/templates/qa.json +0 -111
- claude_mpm/agents/templates/research.json +0 -65
- claude_mpm/agents/templates/security.json +0 -113
- claude_mpm/agents/templates/test_integration.json +0 -112
- claude_mpm/agents/templates/version_control.json +0 -107
- claude_mpm/cli/commands/ui.py +0 -57
- claude_mpm/core/simple_runner.py +0 -1046
- claude_mpm/dashboard/open_dashboard.py +0 -34
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/builtin/__init__.py +0 -1
- claude_mpm/hooks/builtin/logging_hook_example.py +0 -165
- claude_mpm/hooks/builtin/memory_hooks_example.py +0 -67
- claude_mpm/hooks/builtin/mpm_command_hook.py +0 -125
- claude_mpm/hooks/builtin/post_delegation_hook_example.py +0 -124
- claude_mpm/hooks/builtin/pre_delegation_hook_example.py +0 -125
- claude_mpm/hooks/builtin/submit_hook_example.py +0 -100
- claude_mpm/hooks/builtin/ticket_extraction_hook_example.py +0 -237
- claude_mpm/hooks/builtin/todo_agent_prefix_hook.py +0 -240
- claude_mpm/hooks/builtin/workflow_start_hook.py +0 -181
- claude_mpm/orchestration/__init__.py +0 -6
- claude_mpm/orchestration/archive/direct_orchestrator.py +0 -195
- claude_mpm/orchestration/archive/factory.py +0 -215
- claude_mpm/orchestration/archive/hook_enabled_orchestrator.py +0 -188
- claude_mpm/orchestration/archive/hook_integration_example.py +0 -178
- claude_mpm/orchestration/archive/interactive_subprocess_orchestrator.py +0 -826
- claude_mpm/orchestration/archive/orchestrator.py +0 -501
- claude_mpm/orchestration/archive/pexpect_orchestrator.py +0 -252
- claude_mpm/orchestration/archive/pty_orchestrator.py +0 -270
- claude_mpm/orchestration/archive/simple_orchestrator.py +0 -82
- claude_mpm/orchestration/archive/subprocess_orchestrator.py +0 -801
- claude_mpm/orchestration/archive/system_prompt_orchestrator.py +0 -278
- claude_mpm/orchestration/archive/wrapper_orchestrator.py +0 -187
- claude_mpm/schemas/workflow_validator.py +0 -411
- claude_mpm/services/agent_deployment.py +0 -1534
- claude_mpm/services/agent_lifecycle_manager.py +0 -1169
- claude_mpm/services/agent_memory_manager.py +0 -1415
- claude_mpm/services/agent_registry.py +0 -676
- claude_mpm/services/deployed_agent_discovery.py +0 -226
- claude_mpm/services/framework_agent_loader.py +0 -337
- claude_mpm/services/framework_claude_md_generator.py +0 -621
- claude_mpm/services/health_monitor.py +0 -892
- claude_mpm/services/memory_router.py +0 -538
- claude_mpm/services/parent_directory_manager/__init__.py +0 -577
- claude_mpm/services/parent_directory_manager/backup_manager.py +0 -258
- claude_mpm/services/parent_directory_manager/config_manager.py +0 -210
- claude_mpm/services/parent_directory_manager/deduplication_manager.py +0 -279
- claude_mpm/services/parent_directory_manager/framework_protector.py +0 -143
- claude_mpm/services/parent_directory_manager/operations.py +0 -186
- claude_mpm/services/parent_directory_manager/state_manager.py +0 -624
- claude_mpm/services/parent_directory_manager/template_deployer.py +0 -579
- claude_mpm/services/parent_directory_manager/validation_manager.py +0 -378
- claude_mpm/services/parent_directory_manager/version_control_helper.py +0 -339
- claude_mpm/services/parent_directory_manager/version_manager.py +0 -222
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -508
- claude_mpm/ui/__init__.py +0 -1
- claude_mpm/ui/rich_terminal_ui.py +0 -295
- claude_mpm/ui/terminal_ui.py +0 -328
- claude_mpm/utils/paths.py +0 -289
- claude_mpm-3.4.10.dist-info/METADATA +0 -183
- claude_mpm-3.4.10.dist-info/RECORD +0 -201
- claude_mpm-3.4.10.dist-info/licenses/LICENSE +0 -21
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/WHEEL +0 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/top_level.txt +0 -0
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Consolidated Agent Registry for Claude MPM.
|
|
3
3
|
|
|
4
|
-
This module
|
|
5
|
-
|
|
6
|
-
- agent_registry_original.py (legacy convenience functions)
|
|
4
|
+
This module provides the primary interface for agent discovery and management.
|
|
5
|
+
All functionality has been consolidated into the unified agent registry system.
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
This module provides:
|
|
9
8
|
- Agent discovery from the framework
|
|
10
9
|
- Agent listing and selection
|
|
11
10
|
- Compatibility with both sync and async interfaces
|
|
12
11
|
- Legacy function names for backwards compatibility
|
|
13
12
|
"""
|
|
14
13
|
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
from pathlib import Path
|
|
18
|
-
from typing import Optional, Dict, Any, List, Set
|
|
19
|
-
import importlib.util
|
|
20
|
-
from datetime import datetime
|
|
14
|
+
import contextlib
|
|
15
|
+
import warnings
|
|
21
16
|
from dataclasses import dataclass
|
|
17
|
+
from datetime import datetime, timezone
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Any, Dict, List, Optional, Set
|
|
20
|
+
|
|
21
|
+
# Import from the unified agent registry system
|
|
22
|
+
from .unified_agent_registry import (
|
|
23
|
+
AgentMetadata as UnifiedAgentMetadata,
|
|
24
|
+
AgentTier,
|
|
25
|
+
AgentType,
|
|
26
|
+
discover_agents as unified_discover_agents,
|
|
27
|
+
get_agent as unified_get_agent,
|
|
28
|
+
get_agent_registry,
|
|
29
|
+
get_core_agents as unified_get_core_agents,
|
|
30
|
+
get_registry_stats as unified_get_registry_stats,
|
|
31
|
+
get_specialized_agents as unified_get_specialized_agents,
|
|
32
|
+
list_agents as unified_list_agents,
|
|
33
|
+
)
|
|
22
34
|
|
|
23
35
|
try:
|
|
24
36
|
from ..core.logger import get_logger
|
|
@@ -26,9 +38,19 @@ except ImportError:
|
|
|
26
38
|
from core.logger import get_logger
|
|
27
39
|
|
|
28
40
|
|
|
41
|
+
# ============================================================================
|
|
42
|
+
# Compatibility Classes - Delegate to Unified Agent Registry
|
|
43
|
+
# ============================================================================
|
|
44
|
+
|
|
45
|
+
|
|
29
46
|
@dataclass
|
|
30
47
|
class AgentMetadata:
|
|
31
|
-
"""
|
|
48
|
+
"""
|
|
49
|
+
COMPATIBILITY WRAPPER for agent metadata.
|
|
50
|
+
|
|
51
|
+
This class now delegates to the UnifiedAgentRegistry system.
|
|
52
|
+
"""
|
|
53
|
+
|
|
32
54
|
name: str
|
|
33
55
|
type: str
|
|
34
56
|
path: str
|
|
@@ -36,421 +58,329 @@ class AgentMetadata:
|
|
|
36
58
|
last_modified: float = 0.0
|
|
37
59
|
specializations: List[str] = None
|
|
38
60
|
description: str = ""
|
|
39
|
-
|
|
61
|
+
|
|
40
62
|
def __post_init__(self):
|
|
41
63
|
if self.specializations is None:
|
|
42
64
|
self.specializations = []
|
|
43
65
|
|
|
66
|
+
@classmethod
|
|
67
|
+
def from_unified(cls, unified_metadata: UnifiedAgentMetadata) -> "AgentMetadata":
|
|
68
|
+
"""Create compatibility metadata from unified metadata."""
|
|
69
|
+
return cls(
|
|
70
|
+
name=unified_metadata.name,
|
|
71
|
+
type=unified_metadata.agent_type.value,
|
|
72
|
+
path=unified_metadata.path,
|
|
73
|
+
tier=unified_metadata.tier.value,
|
|
74
|
+
last_modified=unified_metadata.last_modified,
|
|
75
|
+
specializations=unified_metadata.specializations,
|
|
76
|
+
description=unified_metadata.description,
|
|
77
|
+
)
|
|
78
|
+
|
|
44
79
|
|
|
45
80
|
class SimpleAgentRegistry:
|
|
46
|
-
"""
|
|
47
|
-
|
|
48
|
-
|
|
81
|
+
"""
|
|
82
|
+
COMPATIBILITY WRAPPER for simple agent registry.
|
|
83
|
+
|
|
84
|
+
This class now delegates to the UnifiedAgentRegistry system.
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
def __init__(self, framework_path: Optional[Path] = None):
|
|
88
|
+
"""Initialize with optional framework path (ignored in new implementation)."""
|
|
49
89
|
self.framework_path = framework_path
|
|
90
|
+
self._unified_registry = get_agent_registry()
|
|
50
91
|
self.agents = {}
|
|
51
92
|
self._discover_agents()
|
|
52
|
-
|
|
93
|
+
|
|
53
94
|
def _discover_agents(self):
|
|
54
|
-
"""Discover agents
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
'type': agent_id,
|
|
71
|
-
'path': str(agent_file),
|
|
72
|
-
'last_modified': agent_file.stat().st_mtime,
|
|
73
|
-
'tier': self._determine_tier(agent_file),
|
|
74
|
-
'specializations': self._extract_specializations(agent_id),
|
|
75
|
-
'description': self._extract_description(agent_id)
|
|
76
|
-
}
|
|
77
|
-
|
|
95
|
+
"""Discover agents using the unified registry."""
|
|
96
|
+
unified_agents = self._unified_registry.discover_agents()
|
|
97
|
+
|
|
98
|
+
# Convert to old format for compatibility
|
|
99
|
+
self.agents = {}
|
|
100
|
+
for name, unified_metadata in unified_agents.items():
|
|
101
|
+
self.agents[name] = {
|
|
102
|
+
"name": unified_metadata.name,
|
|
103
|
+
"type": unified_metadata.agent_type.value,
|
|
104
|
+
"path": unified_metadata.path,
|
|
105
|
+
"last_modified": unified_metadata.last_modified,
|
|
106
|
+
"tier": unified_metadata.tier.value,
|
|
107
|
+
"specializations": unified_metadata.specializations,
|
|
108
|
+
"description": unified_metadata.description,
|
|
109
|
+
}
|
|
110
|
+
|
|
78
111
|
def _determine_tier(self, agent_path: Path) -> str:
|
|
79
|
-
"""Determine agent tier based on path."""
|
|
80
|
-
|
|
81
|
-
if
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return
|
|
87
|
-
|
|
112
|
+
"""Determine agent tier based on path (compatibility method)."""
|
|
113
|
+
# Delegate to unified registry logic
|
|
114
|
+
if (
|
|
115
|
+
"project" in str(agent_path)
|
|
116
|
+
or ".claude-mpm" in str(agent_path)
|
|
117
|
+
or ".claude/agents" in str(agent_path)
|
|
118
|
+
):
|
|
119
|
+
return "project"
|
|
120
|
+
if "user" in str(agent_path) or str(Path.home()) in str(agent_path):
|
|
121
|
+
return "user"
|
|
122
|
+
return "system"
|
|
123
|
+
|
|
88
124
|
def _extract_specializations(self, agent_id: str) -> List[str]:
|
|
89
|
-
"""Extract specializations based on agent type."""
|
|
125
|
+
"""Extract specializations based on agent type (compatibility method)."""
|
|
90
126
|
specialization_map = {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
127
|
+
"engineer": ["coding", "architecture", "implementation"],
|
|
128
|
+
"documentation": ["docs", "api", "guides"],
|
|
129
|
+
"qa": ["testing", "quality", "validation"],
|
|
130
|
+
"research": ["analysis", "investigation", "exploration"],
|
|
131
|
+
"ops": ["deployment", "monitoring", "infrastructure"],
|
|
132
|
+
"security": ["security", "audit", "compliance"],
|
|
133
|
+
"version_control": ["git", "versioning", "releases"],
|
|
134
|
+
"data_engineer": ["data", "etl", "analytics"],
|
|
99
135
|
}
|
|
100
136
|
return specialization_map.get(agent_id, [])
|
|
101
|
-
|
|
137
|
+
|
|
102
138
|
def _extract_description(self, agent_id: str) -> str:
|
|
103
|
-
"""Extract description for agent."""
|
|
139
|
+
"""Extract description for agent (compatibility method)."""
|
|
104
140
|
descriptions = {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
141
|
+
"engineer": "Software engineering and implementation",
|
|
142
|
+
"documentation": "Documentation creation and maintenance",
|
|
143
|
+
"qa": "Quality assurance and testing",
|
|
144
|
+
"research": "Research and investigation",
|
|
145
|
+
"ops": "Operations and deployment",
|
|
146
|
+
"security": "Security analysis and compliance",
|
|
147
|
+
"version_control": "Version control and release management",
|
|
148
|
+
"data_engineer": "Data engineering and analytics",
|
|
113
149
|
}
|
|
114
|
-
return descriptions.get(agent_id, f
|
|
115
|
-
|
|
116
|
-
def
|
|
117
|
-
"""List all agents (
|
|
150
|
+
return descriptions.get(agent_id, f"{agent_id.title()} agent")
|
|
151
|
+
|
|
152
|
+
def list_agents(self, **kwargs) -> Dict[str, Any]:
|
|
153
|
+
"""List all agents (compatibility method)."""
|
|
118
154
|
return self.agents
|
|
119
|
-
|
|
120
|
-
def
|
|
121
|
-
"""
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
155
|
+
|
|
156
|
+
def listAgents(self, **kwargs) -> Dict[str, Any]:
|
|
157
|
+
"""DEPRECATED: Use list_agents() instead. Kept for backward compatibility."""
|
|
158
|
+
warnings.warn(
|
|
159
|
+
"listAgents() is deprecated, use list_agents() instead",
|
|
160
|
+
DeprecationWarning,
|
|
161
|
+
stacklevel=2,
|
|
162
|
+
)
|
|
163
|
+
return self.list_agents(**kwargs)
|
|
164
|
+
|
|
165
|
+
def list_agents_filtered(
|
|
166
|
+
self, agent_type: Optional[str] = None, tier: Optional[str] = None
|
|
167
|
+
) -> List[AgentMetadata]:
|
|
168
|
+
"""List agents with optional filtering (compatibility method)."""
|
|
169
|
+
# Use unified registry for filtering
|
|
170
|
+
unified_tier = None
|
|
171
|
+
unified_agent_type = None
|
|
172
|
+
|
|
173
|
+
if tier:
|
|
174
|
+
unified_tier = AgentTier(tier)
|
|
175
|
+
if agent_type:
|
|
176
|
+
try:
|
|
177
|
+
unified_agent_type = AgentType(agent_type)
|
|
178
|
+
except ValueError:
|
|
179
|
+
# Handle legacy agent types
|
|
180
|
+
unified_agent_type = None
|
|
181
|
+
|
|
182
|
+
unified_agents = self._unified_registry.list_agents(
|
|
183
|
+
tier=unified_tier, agent_type=unified_agent_type
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
return [AgentMetadata.from_unified(agent) for agent in unified_agents]
|
|
187
|
+
|
|
140
188
|
def get_agent(self, agent_name: str) -> Optional[AgentMetadata]:
|
|
141
|
-
"""Get a specific agent."""
|
|
142
|
-
|
|
143
|
-
if
|
|
144
|
-
return AgentMetadata(
|
|
145
|
-
name=metadata['name'],
|
|
146
|
-
type=metadata['type'],
|
|
147
|
-
path=metadata['path'],
|
|
148
|
-
tier=metadata.get('tier', 'system'),
|
|
149
|
-
last_modified=metadata.get('last_modified', 0),
|
|
150
|
-
specializations=metadata.get('specializations', []),
|
|
151
|
-
description=metadata.get('description', '')
|
|
152
|
-
)
|
|
189
|
+
"""Get a specific agent (compatibility method)."""
|
|
190
|
+
unified_agent = self._unified_registry.get_agent(agent_name)
|
|
191
|
+
if unified_agent:
|
|
192
|
+
return AgentMetadata.from_unified(unified_agent)
|
|
153
193
|
return None
|
|
154
|
-
|
|
194
|
+
|
|
155
195
|
def discover_agents(self, force_refresh: bool = False) -> Dict[str, AgentMetadata]:
|
|
156
|
-
"""Discover agents (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
196
|
+
"""Discover agents (compatibility method)."""
|
|
197
|
+
unified_agents = self._unified_registry.discover_agents(
|
|
198
|
+
force_refresh=force_refresh
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
# Update internal agents dict for compatibility
|
|
202
|
+
self.agents = {}
|
|
203
|
+
for name, unified_metadata in unified_agents.items():
|
|
204
|
+
self.agents[name] = {
|
|
205
|
+
"name": unified_metadata.name,
|
|
206
|
+
"type": unified_metadata.agent_type.value,
|
|
207
|
+
"path": unified_metadata.path,
|
|
208
|
+
"last_modified": unified_metadata.last_modified,
|
|
209
|
+
"tier": unified_metadata.tier.value,
|
|
210
|
+
"specializations": unified_metadata.specializations,
|
|
211
|
+
"description": unified_metadata.description,
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
# Return compatibility format
|
|
161
215
|
return {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
type=metadata['type'],
|
|
165
|
-
path=metadata['path'],
|
|
166
|
-
tier=metadata.get('tier', 'system'),
|
|
167
|
-
last_modified=metadata.get('last_modified', 0),
|
|
168
|
-
specializations=metadata.get('specializations', []),
|
|
169
|
-
description=metadata.get('description', '')
|
|
170
|
-
)
|
|
171
|
-
for agent_id, metadata in self.agents.items()
|
|
216
|
+
name: AgentMetadata.from_unified(unified_metadata)
|
|
217
|
+
for name, unified_metadata in unified_agents.items()
|
|
172
218
|
}
|
|
173
|
-
|
|
219
|
+
|
|
174
220
|
@property
|
|
175
221
|
def core_agent_types(self) -> Set[str]:
|
|
176
|
-
"""Get core agent types."""
|
|
222
|
+
"""Get core agent types (compatibility property)."""
|
|
177
223
|
return {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
224
|
+
"documentation",
|
|
225
|
+
"engineer",
|
|
226
|
+
"qa",
|
|
227
|
+
"research",
|
|
228
|
+
"ops",
|
|
229
|
+
"security",
|
|
230
|
+
"version_control",
|
|
231
|
+
"data_engineer",
|
|
186
232
|
}
|
|
187
|
-
|
|
233
|
+
|
|
188
234
|
@property
|
|
189
235
|
def specialized_agent_types(self) -> Set[str]:
|
|
190
|
-
"""Get specialized agent types beyond core."""
|
|
191
|
-
all_types =
|
|
236
|
+
"""Get specialized agent types beyond core (compatibility property)."""
|
|
237
|
+
all_types = {metadata["type"] for metadata in self.agents.values()}
|
|
192
238
|
return all_types - self.core_agent_types
|
|
193
239
|
|
|
194
240
|
|
|
195
241
|
class AgentRegistryAdapter:
|
|
196
242
|
"""
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
This adapter
|
|
200
|
-
1. Locates the claude-mpm installation
|
|
201
|
-
2. Provides a clean interface for agent operations
|
|
202
|
-
3. Maintains backwards compatibility
|
|
243
|
+
COMPATIBILITY WRAPPER for agent registry adapter.
|
|
244
|
+
|
|
245
|
+
This adapter now delegates to the UnifiedAgentRegistry system.
|
|
203
246
|
"""
|
|
204
|
-
|
|
247
|
+
|
|
205
248
|
def __init__(self, framework_path: Optional[Path] = None):
|
|
206
|
-
"""
|
|
207
|
-
Initialize the agent registry adapter.
|
|
208
|
-
|
|
209
|
-
Args:
|
|
210
|
-
framework_path: Path to claude-mpm (auto-detected if None)
|
|
211
|
-
"""
|
|
249
|
+
"""Initialize the agent registry adapter (framework_path ignored in new implementation)."""
|
|
212
250
|
self.logger = get_logger("agent_registry")
|
|
213
|
-
self.framework_path = framework_path
|
|
214
|
-
self.
|
|
215
|
-
self.
|
|
216
|
-
|
|
251
|
+
self.framework_path = framework_path # Kept for compatibility
|
|
252
|
+
self._unified_registry = get_agent_registry()
|
|
253
|
+
self.registry = SimpleAgentRegistry(framework_path)
|
|
254
|
+
|
|
217
255
|
def _find_framework(self) -> Optional[Path]:
|
|
218
|
-
"""Find claude-mpm installation.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
4. Common development locations
|
|
225
|
-
"""
|
|
226
|
-
# Check environment variable first
|
|
227
|
-
env_path = os.environ.get("CLAUDE_MPM_PATH")
|
|
228
|
-
if env_path:
|
|
229
|
-
candidate = Path(env_path)
|
|
230
|
-
if self._is_valid_framework_path(candidate):
|
|
231
|
-
self.logger.info(f"Using claude-mpm from CLAUDE_MPM_PATH: {candidate}")
|
|
232
|
-
return candidate
|
|
233
|
-
else:
|
|
234
|
-
self.logger.warning(f"CLAUDE_MPM_PATH is set but invalid: {env_path}")
|
|
235
|
-
|
|
236
|
-
# Check current working directory
|
|
237
|
-
cwd = Path.cwd()
|
|
238
|
-
if self._is_valid_framework_path(cwd):
|
|
239
|
-
return cwd
|
|
240
|
-
|
|
241
|
-
# Check if we're running from within the installed package
|
|
242
|
-
current_file = Path(__file__).resolve()
|
|
243
|
-
for parent in current_file.parents:
|
|
244
|
-
if self._is_valid_framework_path(parent):
|
|
245
|
-
return parent
|
|
246
|
-
# Stop at site-packages or similar
|
|
247
|
-
if parent.name in ("site-packages", "dist-packages", "lib"):
|
|
248
|
-
break
|
|
249
|
-
|
|
250
|
-
# Check common development locations
|
|
251
|
-
candidates = [
|
|
252
|
-
Path.home() / "Projects" / "claude-mpm",
|
|
253
|
-
Path.home() / "claude-mpm",
|
|
254
|
-
]
|
|
255
|
-
|
|
256
|
-
for candidate in candidates:
|
|
257
|
-
if self._is_valid_framework_path(candidate):
|
|
258
|
-
self.logger.info(f"Found claude-mpm at: {candidate}")
|
|
259
|
-
return candidate
|
|
260
|
-
|
|
261
|
-
return None
|
|
262
|
-
|
|
256
|
+
"""Find claude-mpm installation (compatibility method)."""
|
|
257
|
+
# Delegate to unified path manager
|
|
258
|
+
from .unified_paths import get_path_manager
|
|
259
|
+
|
|
260
|
+
return get_path_manager().framework_root
|
|
261
|
+
|
|
263
262
|
def _is_valid_framework_path(self, path: Path) -> bool:
|
|
264
|
-
"""Check if a path is a valid claude-mpm installation."""
|
|
265
|
-
return (
|
|
266
|
-
|
|
267
|
-
(path / "src" / "claude_mpm").exists()
|
|
268
|
-
)
|
|
269
|
-
|
|
263
|
+
"""Check if a path is a valid claude-mpm installation (compatibility method)."""
|
|
264
|
+
return path.exists() and (path / "src" / "claude_mpm").exists()
|
|
265
|
+
|
|
270
266
|
def _initialize_registry(self):
|
|
271
|
-
"""Initialize the agent registry."""
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
return
|
|
275
|
-
|
|
276
|
-
try:
|
|
277
|
-
self.registry = SimpleAgentRegistry(self.framework_path)
|
|
278
|
-
self.logger.info("Agent registry initialized successfully")
|
|
279
|
-
|
|
280
|
-
except Exception as e:
|
|
281
|
-
self.logger.error(f"Failed to initialize registry: {e}")
|
|
282
|
-
|
|
267
|
+
"""Initialize the agent registry (compatibility method)."""
|
|
268
|
+
# Registry is already initialized in __init__
|
|
269
|
+
|
|
283
270
|
def list_agents(self, **kwargs) -> Dict[str, Any]:
|
|
284
|
-
"""
|
|
285
|
-
List available agents.
|
|
286
|
-
|
|
287
|
-
Args:
|
|
288
|
-
**kwargs: Arguments to pass to registry
|
|
289
|
-
|
|
290
|
-
Returns:
|
|
291
|
-
Dictionary of agents with metadata
|
|
292
|
-
"""
|
|
293
|
-
if not self.registry:
|
|
294
|
-
return {}
|
|
295
|
-
|
|
271
|
+
"""List available agents (compatibility method)."""
|
|
296
272
|
try:
|
|
297
|
-
return self.registry.
|
|
273
|
+
return self.registry.list_agents(**kwargs)
|
|
298
274
|
except Exception as e:
|
|
299
275
|
self.logger.error(f"Error listing agents: {e}")
|
|
300
276
|
return {}
|
|
301
|
-
|
|
277
|
+
|
|
302
278
|
def get_agent_definition(self, agent_name: str) -> Optional[str]:
|
|
303
|
-
"""
|
|
304
|
-
Get agent definition by name.
|
|
305
|
-
|
|
306
|
-
Args:
|
|
307
|
-
agent_name: Name of the agent
|
|
308
|
-
|
|
309
|
-
Returns:
|
|
310
|
-
Agent definition content or None
|
|
311
|
-
"""
|
|
312
|
-
if not self.registry:
|
|
313
|
-
return None
|
|
314
|
-
|
|
279
|
+
"""Get agent definition by name (compatibility method)."""
|
|
315
280
|
try:
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
if
|
|
320
|
-
|
|
321
|
-
agent_path = Path(metadata['path'])
|
|
322
|
-
if agent_path.exists():
|
|
323
|
-
return agent_path.read_text()
|
|
324
|
-
|
|
281
|
+
unified_agent = self._unified_registry.get_agent(agent_name)
|
|
282
|
+
if unified_agent:
|
|
283
|
+
agent_path = Path(unified_agent.path)
|
|
284
|
+
if agent_path.exists():
|
|
285
|
+
return agent_path.read_text()
|
|
325
286
|
return None
|
|
326
|
-
|
|
327
287
|
except Exception as e:
|
|
328
288
|
self.logger.error(f"Error getting agent definition: {e}")
|
|
329
289
|
return None
|
|
330
|
-
|
|
331
|
-
def select_agent_for_task(
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
required_specializations: Required agent specializations
|
|
338
|
-
|
|
339
|
-
Returns:
|
|
340
|
-
Agent metadata or None
|
|
341
|
-
"""
|
|
342
|
-
if not self.registry:
|
|
343
|
-
return None
|
|
344
|
-
|
|
290
|
+
|
|
291
|
+
def select_agent_for_task(
|
|
292
|
+
self,
|
|
293
|
+
task_description: str,
|
|
294
|
+
required_specializations: Optional[List[str]] = None,
|
|
295
|
+
) -> Optional[Dict[str, Any]]:
|
|
296
|
+
"""Select optimal agent for a task (compatibility method)."""
|
|
345
297
|
try:
|
|
346
|
-
# Get agents
|
|
347
|
-
|
|
348
|
-
|
|
298
|
+
# Get all agents from unified registry
|
|
299
|
+
unified_agents = self._unified_registry.list_agents()
|
|
300
|
+
|
|
349
301
|
if required_specializations:
|
|
350
302
|
# Filter by specializations
|
|
351
|
-
filtered =
|
|
352
|
-
for
|
|
353
|
-
agent_specs = set(
|
|
303
|
+
filtered = []
|
|
304
|
+
for agent in unified_agents:
|
|
305
|
+
agent_specs = set(agent.specializations)
|
|
354
306
|
if any(spec in agent_specs for spec in required_specializations):
|
|
355
|
-
filtered
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
if not
|
|
307
|
+
filtered.append(agent)
|
|
308
|
+
unified_agents = filtered
|
|
309
|
+
|
|
310
|
+
if not unified_agents:
|
|
359
311
|
return None
|
|
360
|
-
|
|
361
|
-
#
|
|
362
|
-
|
|
363
|
-
agent_id = next(iter(agents))
|
|
312
|
+
|
|
313
|
+
# Return the first matching agent in compatibility format
|
|
314
|
+
agent = unified_agents[0]
|
|
364
315
|
return {
|
|
365
|
-
|
|
366
|
-
|
|
316
|
+
"id": agent.name,
|
|
317
|
+
"metadata": {
|
|
318
|
+
"name": agent.name,
|
|
319
|
+
"type": agent.agent_type.value,
|
|
320
|
+
"path": agent.path,
|
|
321
|
+
"tier": agent.tier.value,
|
|
322
|
+
"specializations": agent.specializations,
|
|
323
|
+
"description": agent.description,
|
|
324
|
+
},
|
|
367
325
|
}
|
|
368
|
-
|
|
326
|
+
|
|
369
327
|
except Exception as e:
|
|
370
328
|
self.logger.error(f"Error selecting agent: {e}")
|
|
371
329
|
return None
|
|
372
|
-
|
|
330
|
+
|
|
373
331
|
def get_agent_hierarchy(self) -> Dict[str, List[str]]:
|
|
374
|
-
"""
|
|
375
|
-
Get agent hierarchy (project → user → system).
|
|
376
|
-
|
|
377
|
-
Returns:
|
|
378
|
-
Dictionary with hierarchy levels and agent names
|
|
379
|
-
"""
|
|
380
|
-
if not self.registry:
|
|
381
|
-
return {
|
|
382
|
-
'project': [],
|
|
383
|
-
'user': [],
|
|
384
|
-
'system': []
|
|
385
|
-
}
|
|
386
|
-
|
|
332
|
+
"""Get agent hierarchy (compatibility method)."""
|
|
387
333
|
try:
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
# Categorize by tier
|
|
398
|
-
for agent_id, metadata in all_agents.items():
|
|
399
|
-
tier = metadata.get('tier', 'system')
|
|
400
|
-
hierarchy[tier].append(agent_id)
|
|
401
|
-
|
|
334
|
+
hierarchy = {"project": [], "user": [], "system": []}
|
|
335
|
+
|
|
336
|
+
# Get agents by tier from unified registry
|
|
337
|
+
for tier in [AgentTier.PROJECT, AgentTier.USER, AgentTier.SYSTEM]:
|
|
338
|
+
agents = self._unified_registry.list_agents(tier=tier)
|
|
339
|
+
hierarchy[tier.value] = [agent.name for agent in agents]
|
|
340
|
+
|
|
402
341
|
return hierarchy
|
|
403
|
-
|
|
342
|
+
|
|
404
343
|
except Exception as e:
|
|
405
344
|
self.logger.error(f"Error getting hierarchy: {e}")
|
|
406
|
-
return {
|
|
407
|
-
|
|
345
|
+
return {"project": [], "user": [], "system": []}
|
|
346
|
+
|
|
408
347
|
def get_core_agents(self) -> List[str]:
|
|
409
|
-
"""
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
def format_agent_for_task_tool(
|
|
427
|
-
""
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
Args:
|
|
431
|
-
agent_name: Name of the agent
|
|
432
|
-
task: Task description
|
|
433
|
-
context: Additional context
|
|
434
|
-
|
|
435
|
-
Returns:
|
|
436
|
-
Formatted Task Tool prompt
|
|
437
|
-
"""
|
|
348
|
+
"""Get list of core system agents (compatibility method)."""
|
|
349
|
+
try:
|
|
350
|
+
core_agents = self._unified_registry.get_core_agents()
|
|
351
|
+
return [agent.name for agent in core_agents]
|
|
352
|
+
except Exception as e:
|
|
353
|
+
self.logger.error(f"Error getting core agents: {e}")
|
|
354
|
+
return [
|
|
355
|
+
"documentation",
|
|
356
|
+
"engineer",
|
|
357
|
+
"qa",
|
|
358
|
+
"research",
|
|
359
|
+
"ops",
|
|
360
|
+
"security",
|
|
361
|
+
"version_control",
|
|
362
|
+
"data_engineer",
|
|
363
|
+
]
|
|
364
|
+
|
|
365
|
+
def format_agent_for_task_tool(
|
|
366
|
+
self, agent_name: str, task: str, context: str = ""
|
|
367
|
+
) -> str:
|
|
368
|
+
"""Format agent delegation for Task Tool (compatibility method)."""
|
|
438
369
|
# Map agent names to nicknames
|
|
439
370
|
nicknames = {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
371
|
+
"documentation": "Documenter",
|
|
372
|
+
"engineer": "Engineer",
|
|
373
|
+
"qa": "QA",
|
|
374
|
+
"research": "Researcher",
|
|
375
|
+
"ops": "Ops",
|
|
376
|
+
"security": "Security",
|
|
377
|
+
"version_control": "Versioner",
|
|
378
|
+
"data_engineer": "Data Engineer",
|
|
448
379
|
}
|
|
449
|
-
|
|
380
|
+
|
|
450
381
|
nickname = nicknames.get(agent_name, agent_name.title())
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
382
|
+
today = datetime.now(timezone.utc).strftime("%Y-%m-%d")
|
|
383
|
+
|
|
454
384
|
return f"""**{nickname}**: {task}
|
|
455
385
|
|
|
456
386
|
TEMPORAL CONTEXT: Today is {today}. Apply date awareness to task execution.
|
|
@@ -463,165 +393,128 @@ TEMPORAL CONTEXT: Today is {today}. Apply date awareness to task execution.
|
|
|
463
393
|
**Expected Results**: Completed task with operational insights"""
|
|
464
394
|
|
|
465
395
|
|
|
396
|
+
# ============================================================================
|
|
397
|
+
# Compatibility Functions - Delegate to Unified Agent Registry
|
|
398
|
+
# ============================================================================
|
|
399
|
+
|
|
466
400
|
# Export main class as AgentRegistry for compatibility
|
|
467
401
|
AgentRegistry = SimpleAgentRegistry
|
|
468
402
|
|
|
469
|
-
|
|
470
|
-
def create_agent_registry(
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
Returns:
|
|
479
|
-
AgentRegistry instance
|
|
480
|
-
"""
|
|
481
|
-
if not framework_path:
|
|
482
|
-
adapter = AgentRegistryAdapter()
|
|
483
|
-
framework_path = adapter.framework_path
|
|
484
|
-
|
|
485
|
-
if framework_path:
|
|
486
|
-
return AgentRegistry(framework_path)
|
|
487
|
-
else:
|
|
488
|
-
raise ValueError("Could not find claude-mpm framework path")
|
|
403
|
+
|
|
404
|
+
def create_agent_registry(
|
|
405
|
+
cache_service: Any = None, framework_path: Optional[Path] = None
|
|
406
|
+
) -> AgentRegistry:
|
|
407
|
+
"""Create a new AgentRegistry instance (compatibility function)."""
|
|
408
|
+
# Ignore parameters and use unified registry
|
|
409
|
+
return AgentRegistry(framework_path)
|
|
410
|
+
|
|
489
411
|
|
|
490
412
|
def discover_agents(force_refresh: bool = False) -> Dict[str, AgentMetadata]:
|
|
491
|
-
"""
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
Args:
|
|
495
|
-
force_refresh: Force cache refresh
|
|
496
|
-
|
|
497
|
-
Returns:
|
|
498
|
-
Dictionary of discovered agents
|
|
499
|
-
"""
|
|
500
|
-
adapter = AgentRegistryAdapter()
|
|
501
|
-
if adapter.registry:
|
|
502
|
-
return adapter.registry.discover_agents(force_refresh=force_refresh)
|
|
503
|
-
return {}
|
|
413
|
+
"""Convenience function for synchronous agent discovery (compatibility function)."""
|
|
414
|
+
return unified_discover_agents()
|
|
415
|
+
|
|
504
416
|
|
|
505
417
|
def get_core_agent_types() -> Set[str]:
|
|
506
|
-
"""
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
Set of core agent type names
|
|
511
|
-
"""
|
|
512
|
-
adapter = AgentRegistryAdapter()
|
|
513
|
-
if adapter.registry:
|
|
514
|
-
return adapter.registry.core_agent_types
|
|
515
|
-
return set()
|
|
418
|
+
"""Get the set of core agent types (compatibility function)."""
|
|
419
|
+
core_agents = unified_get_core_agents()
|
|
420
|
+
return {agent.name for agent in core_agents}
|
|
421
|
+
|
|
516
422
|
|
|
517
423
|
def get_specialized_agent_types() -> Set[str]:
|
|
518
|
-
"""
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
424
|
+
"""Get the set of specialized agent types (compatibility function)."""
|
|
425
|
+
specialized_agents = unified_get_specialized_agents()
|
|
426
|
+
return {agent.name for agent in specialized_agents}
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
def list_agents_all() -> Dict[str, Dict[str, Any]]:
|
|
430
|
+
"""Synchronous function for listing all agents (compatibility function)."""
|
|
431
|
+
unified_agents = unified_discover_agents()
|
|
432
|
+
return {
|
|
433
|
+
name: {
|
|
434
|
+
"name": metadata.name,
|
|
435
|
+
"type": metadata.agent_type.value,
|
|
436
|
+
"path": metadata.path,
|
|
437
|
+
"tier": metadata.tier.value,
|
|
438
|
+
"last_modified": metadata.last_modified,
|
|
439
|
+
"specializations": metadata.specializations,
|
|
440
|
+
"description": metadata.description,
|
|
441
|
+
}
|
|
442
|
+
for name, metadata in unified_agents.items()
|
|
443
|
+
}
|
|
444
|
+
|
|
528
445
|
|
|
529
446
|
def listAgents() -> Dict[str, Dict[str, Any]]:
|
|
530
|
-
"""
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
447
|
+
"""DEPRECATED: Use list_agents_all() instead (compatibility function)."""
|
|
448
|
+
warnings.warn(
|
|
449
|
+
"listAgents() is deprecated, use list_agents_all() instead",
|
|
450
|
+
DeprecationWarning,
|
|
451
|
+
stacklevel=2,
|
|
452
|
+
)
|
|
453
|
+
return list_agents_all()
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
def list_agents(
|
|
457
|
+
agent_type: Optional[str] = None, tier: Optional[str] = None
|
|
458
|
+
) -> List[AgentMetadata]:
|
|
459
|
+
"""Synchronous function to list agents with optional filtering (compatibility function)."""
|
|
460
|
+
# Convert parameters to unified types
|
|
461
|
+
unified_tier = None
|
|
462
|
+
unified_agent_type = None
|
|
463
|
+
|
|
464
|
+
if tier:
|
|
465
|
+
with contextlib.suppress(ValueError):
|
|
466
|
+
unified_tier = AgentTier(tier)
|
|
467
|
+
|
|
468
|
+
if agent_type:
|
|
469
|
+
with contextlib.suppress(ValueError):
|
|
470
|
+
unified_agent_type = AgentType(agent_type)
|
|
471
|
+
|
|
472
|
+
unified_agents = unified_list_agents(
|
|
473
|
+
tier=unified_tier, agent_type=unified_agent_type
|
|
474
|
+
)
|
|
475
|
+
return [AgentMetadata.from_unified(agent) for agent in unified_agents]
|
|
540
476
|
|
|
541
|
-
def list_agents(agent_type: Optional[str] = None, tier: Optional[str] = None) -> List[AgentMetadata]:
|
|
542
|
-
"""
|
|
543
|
-
Synchronous function to list agents with optional filtering
|
|
544
|
-
|
|
545
|
-
Args:
|
|
546
|
-
agent_type: Filter by agent type
|
|
547
|
-
tier: Filter by hierarchy tier
|
|
548
|
-
|
|
549
|
-
Returns:
|
|
550
|
-
List of agent metadata dictionaries
|
|
551
|
-
"""
|
|
552
|
-
adapter = AgentRegistryAdapter()
|
|
553
|
-
if adapter.registry:
|
|
554
|
-
return adapter.registry.list_agents(agent_type=agent_type, tier=tier)
|
|
555
|
-
return []
|
|
556
477
|
|
|
557
478
|
def discover_agents_sync(force_refresh: bool = False) -> Dict[str, AgentMetadata]:
|
|
558
|
-
"""
|
|
559
|
-
Synchronous function for agent discovery
|
|
560
|
-
|
|
561
|
-
Args:
|
|
562
|
-
force_refresh: Force cache refresh
|
|
563
|
-
|
|
564
|
-
Returns:
|
|
565
|
-
Dictionary of discovered agents
|
|
566
|
-
"""
|
|
479
|
+
"""Synchronous function for agent discovery (compatibility function)."""
|
|
567
480
|
return discover_agents(force_refresh)
|
|
568
481
|
|
|
482
|
+
|
|
569
483
|
def get_agent(agent_name: str) -> Optional[Dict[str, Any]]:
|
|
570
|
-
"""
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
if agent:
|
|
583
|
-
return {
|
|
584
|
-
'name': agent.name,
|
|
585
|
-
'type': agent.type,
|
|
586
|
-
'path': agent.path,
|
|
587
|
-
'tier': agent.tier,
|
|
588
|
-
'last_modified': agent.last_modified,
|
|
589
|
-
'specializations': agent.specializations,
|
|
590
|
-
'description': agent.description
|
|
591
|
-
}
|
|
484
|
+
"""Synchronous function to get a specific agent (compatibility function)."""
|
|
485
|
+
unified_agent = unified_get_agent(agent_name)
|
|
486
|
+
if unified_agent:
|
|
487
|
+
return {
|
|
488
|
+
"name": unified_agent.name,
|
|
489
|
+
"type": unified_agent.agent_type.value,
|
|
490
|
+
"path": unified_agent.path,
|
|
491
|
+
"tier": unified_agent.tier.value,
|
|
492
|
+
"last_modified": unified_agent.last_modified,
|
|
493
|
+
"specializations": unified_agent.specializations,
|
|
494
|
+
"description": unified_agent.description,
|
|
495
|
+
}
|
|
592
496
|
return None
|
|
593
497
|
|
|
498
|
+
|
|
594
499
|
def get_registry_stats() -> Dict[str, Any]:
|
|
595
|
-
"""
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
Returns:
|
|
599
|
-
Dictionary of registry statistics
|
|
600
|
-
"""
|
|
601
|
-
adapter = AgentRegistryAdapter()
|
|
602
|
-
if adapter.registry:
|
|
603
|
-
agents = adapter.registry.list_agents()
|
|
604
|
-
return {
|
|
605
|
-
'total_agents': len(agents),
|
|
606
|
-
'agent_types': len(set(a.type for a in agents)),
|
|
607
|
-
'tiers': list(set(a.tier for a in agents))
|
|
608
|
-
}
|
|
609
|
-
return {'total_agents': 0, 'agent_types': 0, 'tiers': []}
|
|
500
|
+
"""Synchronous function to get registry statistics (compatibility function)."""
|
|
501
|
+
return unified_get_registry_stats()
|
|
610
502
|
|
|
611
503
|
|
|
612
504
|
# Export all public symbols
|
|
613
505
|
__all__ = [
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
506
|
+
"AgentMetadata",
|
|
507
|
+
"AgentRegistry",
|
|
508
|
+
"AgentRegistryAdapter",
|
|
509
|
+
"SimpleAgentRegistry",
|
|
510
|
+
"create_agent_registry",
|
|
511
|
+
"discover_agents",
|
|
512
|
+
"discover_agents_sync",
|
|
513
|
+
"get_agent",
|
|
514
|
+
"get_core_agent_types",
|
|
515
|
+
"get_registry_stats",
|
|
516
|
+
"get_specialized_agent_types",
|
|
517
|
+
"listAgents", # Deprecated
|
|
518
|
+
"list_agents",
|
|
519
|
+
"list_agents_all",
|
|
520
|
+
]
|