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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Framework module for Claude MPM.
|
|
2
|
+
|
|
3
|
+
This module provides the modular framework loading system with specialized components
|
|
4
|
+
for handling different aspects of framework initialization and management.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .formatters import CapabilityGenerator, ContentFormatter, ContextGenerator
|
|
8
|
+
from .loaders import AgentLoader, FileLoader, InstructionLoader, PackagedLoader
|
|
9
|
+
from .processors import MemoryProcessor, MetadataProcessor, TemplateProcessor
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"AgentLoader",
|
|
13
|
+
"CapabilityGenerator",
|
|
14
|
+
# Formatters
|
|
15
|
+
"ContentFormatter",
|
|
16
|
+
"ContextGenerator",
|
|
17
|
+
# Loaders
|
|
18
|
+
"FileLoader",
|
|
19
|
+
"InstructionLoader",
|
|
20
|
+
"MemoryProcessor",
|
|
21
|
+
# Processors
|
|
22
|
+
"MetadataProcessor",
|
|
23
|
+
"PackagedLoader",
|
|
24
|
+
"TemplateProcessor",
|
|
25
|
+
]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Framework formatters for content generation and formatting."""
|
|
2
|
+
|
|
3
|
+
from .capability_generator import CapabilityGenerator
|
|
4
|
+
from .content_formatter import ContentFormatter
|
|
5
|
+
from .context_generator import ContextGenerator
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"CapabilityGenerator",
|
|
9
|
+
"ContentFormatter",
|
|
10
|
+
"ContextGenerator",
|
|
11
|
+
]
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
"""Agent capability generator for dynamic agent discovery."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Any, Dict, List, Optional
|
|
6
|
+
|
|
7
|
+
import yaml
|
|
8
|
+
|
|
9
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
10
|
+
|
|
11
|
+
# Import resource handling for packaged installations
|
|
12
|
+
try:
|
|
13
|
+
from importlib.resources import files
|
|
14
|
+
except ImportError:
|
|
15
|
+
try:
|
|
16
|
+
from importlib_resources import files
|
|
17
|
+
except ImportError:
|
|
18
|
+
files = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class CapabilityGenerator:
|
|
22
|
+
"""Generates agent capability sections from deployed agents."""
|
|
23
|
+
|
|
24
|
+
def __init__(self):
|
|
25
|
+
"""Initialize the capability generator."""
|
|
26
|
+
self.logger = get_logger("capability_generator")
|
|
27
|
+
|
|
28
|
+
def generate_capabilities_section(
|
|
29
|
+
self,
|
|
30
|
+
deployed_agents: List[Dict[str, Any]],
|
|
31
|
+
local_agents: Dict[str, Dict[str, Any]],
|
|
32
|
+
) -> str:
|
|
33
|
+
"""Generate dynamic agent capabilities section.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
deployed_agents: List of deployed agent metadata
|
|
37
|
+
local_agents: Dictionary of local JSON template agents
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
Formatted capabilities section string
|
|
41
|
+
"""
|
|
42
|
+
# Build capabilities section
|
|
43
|
+
section = "\n\n## Available Agent Capabilities\n\n"
|
|
44
|
+
|
|
45
|
+
# Combine deployed and local agents
|
|
46
|
+
all_agents = {} # key: agent_id, value: (agent_data, priority)
|
|
47
|
+
|
|
48
|
+
# Add local agents first (highest priority)
|
|
49
|
+
for agent_id, agent_data in local_agents.items():
|
|
50
|
+
all_agents[agent_id] = (agent_data, -1) # Priority -1 for local agents
|
|
51
|
+
|
|
52
|
+
# Add deployed agents with lower priority
|
|
53
|
+
for priority, agent_data in enumerate(deployed_agents):
|
|
54
|
+
agent_id = agent_data["id"]
|
|
55
|
+
# Only add if not already present
|
|
56
|
+
if agent_id not in all_agents:
|
|
57
|
+
all_agents[agent_id] = (agent_data, priority)
|
|
58
|
+
|
|
59
|
+
# Extract just the agent data and sort
|
|
60
|
+
final_agents = [agent_data for agent_data, _ in all_agents.values()]
|
|
61
|
+
|
|
62
|
+
if not final_agents:
|
|
63
|
+
return self.get_fallback_capabilities()
|
|
64
|
+
|
|
65
|
+
# Sort agents alphabetically by ID
|
|
66
|
+
final_agents.sort(key=lambda x: x["id"])
|
|
67
|
+
|
|
68
|
+
# Display all agents with their rich descriptions
|
|
69
|
+
for agent in final_agents:
|
|
70
|
+
# Clean up display name - handle common acronyms
|
|
71
|
+
display_name = agent.get("display_name", agent["id"])
|
|
72
|
+
display_name = (
|
|
73
|
+
display_name.replace("Qa ", "QA ")
|
|
74
|
+
.replace("Ui ", "UI ")
|
|
75
|
+
.replace("Api ", "API ")
|
|
76
|
+
)
|
|
77
|
+
if display_name.lower() == "qa agent":
|
|
78
|
+
display_name = "QA Agent"
|
|
79
|
+
|
|
80
|
+
# Add local indicator if this is a local agent
|
|
81
|
+
if agent.get("is_local"):
|
|
82
|
+
tier_label = f" [LOCAL-{agent.get('tier', 'PROJECT').upper()}]"
|
|
83
|
+
section += f"\n### {display_name} (`{agent['id']}`) {tier_label}\n"
|
|
84
|
+
else:
|
|
85
|
+
section += f"\n### {display_name} (`{agent['id']}`)\n"
|
|
86
|
+
|
|
87
|
+
section += f"{agent.get('description', 'Specialized agent')}\n"
|
|
88
|
+
|
|
89
|
+
# Add routing information if available
|
|
90
|
+
if agent.get("routing"):
|
|
91
|
+
routing = agent["routing"]
|
|
92
|
+
routing_hints = []
|
|
93
|
+
|
|
94
|
+
if routing.get("keywords"):
|
|
95
|
+
# Show first 5 keywords for brevity
|
|
96
|
+
keywords = routing["keywords"][:5]
|
|
97
|
+
routing_hints.append(f"Keywords: {', '.join(keywords)}")
|
|
98
|
+
|
|
99
|
+
if routing.get("paths"):
|
|
100
|
+
# Show first 3 paths for brevity
|
|
101
|
+
paths = routing["paths"][:3]
|
|
102
|
+
routing_hints.append(f"Paths: {', '.join(paths)}")
|
|
103
|
+
|
|
104
|
+
if routing.get("priority"):
|
|
105
|
+
routing_hints.append(f"Priority: {routing['priority']}")
|
|
106
|
+
|
|
107
|
+
if routing_hints:
|
|
108
|
+
section += f"- **Routing**: {' | '.join(routing_hints)}\n"
|
|
109
|
+
|
|
110
|
+
# Add when_to_use if present
|
|
111
|
+
if routing.get("when_to_use"):
|
|
112
|
+
section += f"- **When to use**: {routing['when_to_use']}\n"
|
|
113
|
+
|
|
114
|
+
# Add any additional metadata if present
|
|
115
|
+
if agent.get("authority"):
|
|
116
|
+
section += f"- **Authority**: {agent['authority']}\n"
|
|
117
|
+
if agent.get("primary_function"):
|
|
118
|
+
section += f"- **Primary Function**: {agent['primary_function']}\n"
|
|
119
|
+
if agent.get("handoff_to"):
|
|
120
|
+
section += f"- **Handoff To**: {agent['handoff_to']}\n"
|
|
121
|
+
if agent.get("tools") and agent["tools"] != "standard":
|
|
122
|
+
section += f"- **Tools**: {agent['tools']}\n"
|
|
123
|
+
if agent.get("model") and agent["model"] != "opus":
|
|
124
|
+
section += f"- **Model**: {agent['model']}\n"
|
|
125
|
+
|
|
126
|
+
# Add memory routing information if available
|
|
127
|
+
if agent.get("memory_routing"):
|
|
128
|
+
memory_routing = agent["memory_routing"]
|
|
129
|
+
if memory_routing.get("description"):
|
|
130
|
+
section += (
|
|
131
|
+
f"- **Memory Routing**: {memory_routing['description']}\n"
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
# Add simple Context-Aware Agent Selection
|
|
135
|
+
section += "\n## Context-Aware Agent Selection\n\n"
|
|
136
|
+
section += "Select agents based on their descriptions above. Key principles:\n"
|
|
137
|
+
section += "- **PM questions** → Answer directly (only exception)\n"
|
|
138
|
+
section += "- Match task requirements to agent descriptions and authority\n"
|
|
139
|
+
section += "- Consider agent handoff recommendations\n"
|
|
140
|
+
section += "- Use the agent ID in parentheses when delegating via Task tool\n"
|
|
141
|
+
|
|
142
|
+
# Add summary
|
|
143
|
+
section += f"\n**Total Available Agents**: {len(final_agents)}\n"
|
|
144
|
+
|
|
145
|
+
return section
|
|
146
|
+
|
|
147
|
+
def parse_agent_metadata(self, agent_file: Path) -> Optional[Dict[str, Any]]:
|
|
148
|
+
"""Parse agent metadata from deployed agent file.
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
agent_file: Path to deployed agent file
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
Dictionary with agent metadata or None
|
|
155
|
+
"""
|
|
156
|
+
try:
|
|
157
|
+
with agent_file.open() as f:
|
|
158
|
+
content = f.read()
|
|
159
|
+
|
|
160
|
+
# Default values
|
|
161
|
+
agent_data = {
|
|
162
|
+
"id": agent_file.stem,
|
|
163
|
+
"display_name": agent_file.stem.replace("_", " ")
|
|
164
|
+
.replace("-", " ")
|
|
165
|
+
.title(),
|
|
166
|
+
"description": "Specialized agent",
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
# Extract YAML frontmatter if present
|
|
170
|
+
if content.startswith("---"):
|
|
171
|
+
end_marker = content.find("---", 3)
|
|
172
|
+
if end_marker > 0:
|
|
173
|
+
frontmatter = content[3:end_marker]
|
|
174
|
+
metadata = yaml.safe_load(frontmatter)
|
|
175
|
+
if metadata:
|
|
176
|
+
# Use name as ID for Task tool
|
|
177
|
+
agent_data["id"] = metadata.get("name", agent_data["id"])
|
|
178
|
+
agent_data["display_name"] = (
|
|
179
|
+
metadata.get("name", agent_data["display_name"])
|
|
180
|
+
.replace("-", " ")
|
|
181
|
+
.title()
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# Copy all metadata fields directly
|
|
185
|
+
for key, value in metadata.items():
|
|
186
|
+
if key not in ["name"]: # Skip already processed fields
|
|
187
|
+
agent_data[key] = value
|
|
188
|
+
|
|
189
|
+
# Try to load routing metadata from JSON template if not in YAML frontmatter
|
|
190
|
+
if "routing" not in agent_data:
|
|
191
|
+
routing_data = self.load_routing_from_template(agent_file.stem)
|
|
192
|
+
if routing_data:
|
|
193
|
+
agent_data["routing"] = routing_data
|
|
194
|
+
|
|
195
|
+
# Try to load memory routing metadata from JSON template
|
|
196
|
+
if "memory_routing" not in agent_data:
|
|
197
|
+
memory_routing_data = self.load_memory_routing_from_template(
|
|
198
|
+
agent_file.stem
|
|
199
|
+
)
|
|
200
|
+
if memory_routing_data:
|
|
201
|
+
agent_data["memory_routing"] = memory_routing_data
|
|
202
|
+
|
|
203
|
+
return agent_data
|
|
204
|
+
|
|
205
|
+
except Exception as e:
|
|
206
|
+
self.logger.debug(f"Could not parse metadata from {agent_file}: {e}")
|
|
207
|
+
return None
|
|
208
|
+
|
|
209
|
+
def load_routing_from_template(
|
|
210
|
+
self, agent_name: str, framework_path: Optional[Path] = None
|
|
211
|
+
) -> Optional[Dict[str, Any]]:
|
|
212
|
+
"""Load routing metadata from agent JSON template.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
agent_name: Name of the agent
|
|
216
|
+
framework_path: Path to framework installation
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
Dictionary with routing metadata or None if not found
|
|
220
|
+
"""
|
|
221
|
+
try:
|
|
222
|
+
# Check if we have a framework path
|
|
223
|
+
if not framework_path or framework_path == Path("__PACKAGED__"):
|
|
224
|
+
# For packaged installations, try to load from package resources
|
|
225
|
+
if files:
|
|
226
|
+
try:
|
|
227
|
+
templates_package = files("claude_mpm.agents.templates")
|
|
228
|
+
template_file = templates_package / f"{agent_name}.json"
|
|
229
|
+
|
|
230
|
+
if template_file.is_file():
|
|
231
|
+
template_content = template_file.read_text()
|
|
232
|
+
template_data = json.loads(template_content)
|
|
233
|
+
return template_data.get("routing")
|
|
234
|
+
except Exception as e:
|
|
235
|
+
self.logger.debug(
|
|
236
|
+
f"Could not load routing from packaged template for {agent_name}: {e}"
|
|
237
|
+
)
|
|
238
|
+
return None
|
|
239
|
+
|
|
240
|
+
# For development mode, load from filesystem
|
|
241
|
+
templates_dir = (
|
|
242
|
+
framework_path / "src" / "claude_mpm" / "agents" / "templates"
|
|
243
|
+
)
|
|
244
|
+
template_file = templates_dir / f"{agent_name}.json"
|
|
245
|
+
|
|
246
|
+
if template_file.exists():
|
|
247
|
+
with template_file.open() as f:
|
|
248
|
+
template_data = json.load(f)
|
|
249
|
+
return template_data.get("routing")
|
|
250
|
+
|
|
251
|
+
# Also check for variations in naming (underscore vs dash)
|
|
252
|
+
alternative_names = list(
|
|
253
|
+
{
|
|
254
|
+
agent_name.replace("-", "_"),
|
|
255
|
+
agent_name.replace("_", "-"),
|
|
256
|
+
agent_name.replace("-", ""),
|
|
257
|
+
agent_name.replace("_", ""),
|
|
258
|
+
}
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
for alt_name in alternative_names:
|
|
262
|
+
if alt_name != agent_name:
|
|
263
|
+
alt_file = templates_dir / f"{alt_name}.json"
|
|
264
|
+
if alt_file.exists():
|
|
265
|
+
with alt_file.open() as f:
|
|
266
|
+
template_data = json.load(f)
|
|
267
|
+
return template_data.get("routing")
|
|
268
|
+
|
|
269
|
+
return None
|
|
270
|
+
|
|
271
|
+
except Exception as e:
|
|
272
|
+
self.logger.debug(f"Could not load routing metadata for {agent_name}: {e}")
|
|
273
|
+
return None
|
|
274
|
+
|
|
275
|
+
def load_memory_routing_from_template(
|
|
276
|
+
self, agent_name: str, framework_path: Optional[Path] = None
|
|
277
|
+
) -> Optional[Dict[str, Any]]:
|
|
278
|
+
"""Load memory routing metadata from agent JSON template.
|
|
279
|
+
|
|
280
|
+
Args:
|
|
281
|
+
agent_name: Name of the agent
|
|
282
|
+
framework_path: Path to framework installation
|
|
283
|
+
|
|
284
|
+
Returns:
|
|
285
|
+
Dictionary with memory routing metadata or None if not found
|
|
286
|
+
"""
|
|
287
|
+
try:
|
|
288
|
+
# Check if we have a framework path
|
|
289
|
+
if not framework_path or framework_path == Path("__PACKAGED__"):
|
|
290
|
+
# For packaged installations, try to load from package resources
|
|
291
|
+
if files:
|
|
292
|
+
try:
|
|
293
|
+
templates_package = files("claude_mpm.agents.templates")
|
|
294
|
+
template_file = templates_package / f"{agent_name}.json"
|
|
295
|
+
|
|
296
|
+
if template_file.is_file():
|
|
297
|
+
template_content = template_file.read_text()
|
|
298
|
+
template_data = json.loads(template_content)
|
|
299
|
+
return template_data.get("memory_routing")
|
|
300
|
+
except Exception as e:
|
|
301
|
+
self.logger.debug(
|
|
302
|
+
f"Could not load memory routing from packaged template for {agent_name}: {e}"
|
|
303
|
+
)
|
|
304
|
+
return None
|
|
305
|
+
|
|
306
|
+
# For development mode, load from filesystem
|
|
307
|
+
templates_dir = (
|
|
308
|
+
framework_path / "src" / "claude_mpm" / "agents" / "templates"
|
|
309
|
+
)
|
|
310
|
+
template_file = templates_dir / f"{agent_name}.json"
|
|
311
|
+
|
|
312
|
+
if template_file.exists():
|
|
313
|
+
with template_file.open() as f:
|
|
314
|
+
template_data = json.load(f)
|
|
315
|
+
return template_data.get("memory_routing")
|
|
316
|
+
|
|
317
|
+
# Also check for variations in naming
|
|
318
|
+
alternative_names = list(
|
|
319
|
+
{
|
|
320
|
+
agent_name.replace("-", "_"),
|
|
321
|
+
agent_name.replace("_", "-"),
|
|
322
|
+
agent_name.replace("-agent", ""),
|
|
323
|
+
agent_name.replace("_agent", ""),
|
|
324
|
+
agent_name + "_agent",
|
|
325
|
+
agent_name + "-agent",
|
|
326
|
+
}
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
for alt_name in alternative_names:
|
|
330
|
+
if alt_name != agent_name:
|
|
331
|
+
alt_file = templates_dir / f"{alt_name}.json"
|
|
332
|
+
if alt_file.exists():
|
|
333
|
+
with alt_file.open() as f:
|
|
334
|
+
template_data = json.load(f)
|
|
335
|
+
return template_data.get("memory_routing")
|
|
336
|
+
|
|
337
|
+
return None
|
|
338
|
+
|
|
339
|
+
except Exception as e:
|
|
340
|
+
self.logger.debug(
|
|
341
|
+
f"Could not load memory routing from template for {agent_name}: {e}"
|
|
342
|
+
)
|
|
343
|
+
return None
|
|
344
|
+
|
|
345
|
+
def get_fallback_capabilities(self) -> str:
|
|
346
|
+
"""Return fallback capabilities when dynamic discovery fails.
|
|
347
|
+
|
|
348
|
+
Returns:
|
|
349
|
+
Fallback agent capabilities section
|
|
350
|
+
"""
|
|
351
|
+
return """
|
|
352
|
+
|
|
353
|
+
## Available Agent Capabilities
|
|
354
|
+
|
|
355
|
+
You have the following specialized agents available for delegation:
|
|
356
|
+
|
|
357
|
+
- **Engineer** (`engineer`): Code implementation and development
|
|
358
|
+
- **Research** (`research-agent`): Investigation and analysis
|
|
359
|
+
- **QA** (`qa-agent`): Testing and quality assurance
|
|
360
|
+
- **Documentation** (`documentation-agent`): Documentation creation and maintenance
|
|
361
|
+
- **Security** (`security-agent`): Security analysis and protection
|
|
362
|
+
- **Data Engineer** (`data-engineer`): Data management and pipelines
|
|
363
|
+
- **Ops** (`ops-agent`): Deployment and operations
|
|
364
|
+
- **Version Control** (`version-control`): Git operations and version management
|
|
365
|
+
|
|
366
|
+
**IMPORTANT**: Use the exact agent ID in parentheses when delegating tasks.
|
|
367
|
+
"""
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"""Framework content formatter for generating instructions."""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from typing import Any, Dict, Optional
|
|
5
|
+
|
|
6
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ContentFormatter:
|
|
10
|
+
"""Formats framework content for injection into prompts."""
|
|
11
|
+
|
|
12
|
+
def __init__(self):
|
|
13
|
+
"""Initialize the content formatter."""
|
|
14
|
+
self.logger = get_logger("content_formatter")
|
|
15
|
+
|
|
16
|
+
def strip_metadata_comments(self, content: str) -> str:
|
|
17
|
+
"""Strip metadata HTML comments from content.
|
|
18
|
+
|
|
19
|
+
Removes comments like:
|
|
20
|
+
<!-- FRAMEWORK_VERSION: 0010 -->
|
|
21
|
+
<!-- LAST_MODIFIED: 2025-08-10T00:00:00Z -->
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
content: Content to clean
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
Cleaned content without metadata comments
|
|
28
|
+
"""
|
|
29
|
+
# Remove HTML comments that contain metadata
|
|
30
|
+
cleaned = re.sub(
|
|
31
|
+
r"<!--\s*(FRAMEWORK_VERSION|LAST_MODIFIED|WORKFLOW_VERSION|PROJECT_WORKFLOW_VERSION|CUSTOM_PROJECT_WORKFLOW)[^>]*-->\n?",
|
|
32
|
+
"",
|
|
33
|
+
content,
|
|
34
|
+
)
|
|
35
|
+
# Also remove any leading blank lines that might result
|
|
36
|
+
return cleaned.lstrip("\n")
|
|
37
|
+
|
|
38
|
+
def format_full_framework(
|
|
39
|
+
self,
|
|
40
|
+
framework_content: Dict[str, Any],
|
|
41
|
+
capabilities_section: str,
|
|
42
|
+
context_section: str,
|
|
43
|
+
inject_output_style: bool = False,
|
|
44
|
+
output_style_content: Optional[str] = None,
|
|
45
|
+
) -> str:
|
|
46
|
+
"""Format complete framework instructions.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
framework_content: Dictionary containing framework content
|
|
50
|
+
capabilities_section: Generated agent capabilities section
|
|
51
|
+
context_section: Generated temporal/user context section
|
|
52
|
+
inject_output_style: Whether to inject output style content
|
|
53
|
+
output_style_content: Output style content to inject (if needed)
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Formatted framework instructions
|
|
57
|
+
"""
|
|
58
|
+
# If we have the full framework INSTRUCTIONS.md, use it
|
|
59
|
+
if framework_content.get("framework_instructions"):
|
|
60
|
+
instructions = self.strip_metadata_comments(
|
|
61
|
+
framework_content["framework_instructions"]
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Add custom INSTRUCTIONS.md if present (overrides or extends framework instructions)
|
|
65
|
+
if framework_content.get("custom_instructions"):
|
|
66
|
+
level = framework_content.get("custom_instructions_level", "unknown")
|
|
67
|
+
instructions += f"\n\n## Custom PM Instructions ({level} level)\n\n"
|
|
68
|
+
instructions += "**The following custom instructions override or extend the framework defaults:**\n\n"
|
|
69
|
+
instructions += self.strip_metadata_comments(
|
|
70
|
+
framework_content["custom_instructions"]
|
|
71
|
+
)
|
|
72
|
+
instructions += "\n"
|
|
73
|
+
|
|
74
|
+
# Add WORKFLOW.md after instructions
|
|
75
|
+
if framework_content.get("workflow_instructions"):
|
|
76
|
+
workflow_content = self.strip_metadata_comments(
|
|
77
|
+
framework_content["workflow_instructions"]
|
|
78
|
+
)
|
|
79
|
+
level = framework_content.get("workflow_instructions_level", "system")
|
|
80
|
+
if level != "system":
|
|
81
|
+
instructions += f"\n\n## Workflow Instructions ({level} level)\n\n"
|
|
82
|
+
instructions += "**The following workflow instructions override system defaults:**\n\n"
|
|
83
|
+
instructions += f"{workflow_content}\n"
|
|
84
|
+
|
|
85
|
+
# Add MEMORY.md after workflow instructions
|
|
86
|
+
if framework_content.get("memory_instructions"):
|
|
87
|
+
memory_content = self.strip_metadata_comments(
|
|
88
|
+
framework_content["memory_instructions"]
|
|
89
|
+
)
|
|
90
|
+
level = framework_content.get("memory_instructions_level", "system")
|
|
91
|
+
if level != "system":
|
|
92
|
+
instructions += f"\n\n## Memory Instructions ({level} level)\n\n"
|
|
93
|
+
instructions += "**The following memory instructions override system defaults:**\n\n"
|
|
94
|
+
instructions += f"{memory_content}\n"
|
|
95
|
+
|
|
96
|
+
# Add actual PM memories after memory instructions
|
|
97
|
+
if framework_content.get("actual_memories"):
|
|
98
|
+
instructions += "\n\n## Current PM Memories\n\n"
|
|
99
|
+
instructions += "**The following are your accumulated memories and knowledge from this project:**\n\n"
|
|
100
|
+
instructions += framework_content["actual_memories"]
|
|
101
|
+
instructions += "\n"
|
|
102
|
+
|
|
103
|
+
# NOTE: Agent memories are now injected at agent deployment time
|
|
104
|
+
# in agent_template_builder.py, not in PM instructions.
|
|
105
|
+
# This ensures each agent gets its own memory, not all memories embedded in PM.
|
|
106
|
+
|
|
107
|
+
# Add dynamic agent capabilities section
|
|
108
|
+
instructions += capabilities_section
|
|
109
|
+
|
|
110
|
+
# Add enhanced temporal and user context for better awareness
|
|
111
|
+
instructions += context_section
|
|
112
|
+
|
|
113
|
+
# Add BASE_PM.md framework requirements AFTER INSTRUCTIONS.md
|
|
114
|
+
if framework_content.get("base_pm_instructions"):
|
|
115
|
+
base_pm = self.strip_metadata_comments(
|
|
116
|
+
framework_content["base_pm_instructions"]
|
|
117
|
+
)
|
|
118
|
+
instructions += f"\n\n{base_pm}"
|
|
119
|
+
|
|
120
|
+
# Inject output style content if needed (for Claude < 1.0.83)
|
|
121
|
+
if inject_output_style and output_style_content:
|
|
122
|
+
instructions += "\n\n## Output Style Configuration\n"
|
|
123
|
+
instructions += "**Note: The following output style is injected for Claude < 1.0.83**\n\n"
|
|
124
|
+
instructions += output_style_content
|
|
125
|
+
instructions += "\n"
|
|
126
|
+
|
|
127
|
+
# Clean up any trailing whitespace
|
|
128
|
+
return instructions.rstrip() + "\n"
|
|
129
|
+
|
|
130
|
+
# Otherwise generate minimal framework
|
|
131
|
+
return self.format_minimal_framework(framework_content)
|
|
132
|
+
|
|
133
|
+
def format_minimal_framework(self, framework_content: Dict[str, Any]) -> str:
|
|
134
|
+
"""Format minimal framework instructions when full framework not available.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
framework_content: Dictionary containing framework content
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Minimal framework instructions
|
|
141
|
+
"""
|
|
142
|
+
instructions = """# Claude MPM Framework Instructions
|
|
143
|
+
|
|
144
|
+
You are operating within the Claude Multi-Agent Project Manager (MPM) framework.
|
|
145
|
+
|
|
146
|
+
## Core Role
|
|
147
|
+
You are a multi-agent orchestrator. Your primary responsibilities are:
|
|
148
|
+
- Delegate all implementation work to specialized agents via Task Tool
|
|
149
|
+
- Coordinate multi-agent workflows and cross-agent collaboration
|
|
150
|
+
- Extract and track TODO/BUG/FEATURE items for ticket creation
|
|
151
|
+
- Maintain project visibility and strategic oversight
|
|
152
|
+
- NEVER perform direct implementation work yourself
|
|
153
|
+
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
# Add agent definitions if available
|
|
157
|
+
if framework_content.get("agents"):
|
|
158
|
+
instructions += "## Available Agents\n\n"
|
|
159
|
+
instructions += "You have the following specialized agents available for delegation:\n\n"
|
|
160
|
+
|
|
161
|
+
# List agents with brief descriptions and correct IDs
|
|
162
|
+
agent_list = []
|
|
163
|
+
for agent_name in sorted(framework_content["agents"].keys()):
|
|
164
|
+
# Use the actual agent_name as the ID (it's the filename stem)
|
|
165
|
+
agent_id = agent_name
|
|
166
|
+
clean_name = agent_name.replace("-", " ").replace("_", " ").title()
|
|
167
|
+
if (
|
|
168
|
+
"engineer" in agent_name.lower()
|
|
169
|
+
and "data" not in agent_name.lower()
|
|
170
|
+
):
|
|
171
|
+
agent_list.append(
|
|
172
|
+
f"- **Engineer Agent** (`{agent_id}`): Code implementation and development"
|
|
173
|
+
)
|
|
174
|
+
elif "qa" in agent_name.lower():
|
|
175
|
+
agent_list.append(
|
|
176
|
+
f"- **QA Agent** (`{agent_id}`): Testing and quality assurance"
|
|
177
|
+
)
|
|
178
|
+
elif "documentation" in agent_name.lower():
|
|
179
|
+
agent_list.append(
|
|
180
|
+
f"- **Documentation Agent** (`{agent_id}`): Documentation creation and maintenance"
|
|
181
|
+
)
|
|
182
|
+
elif "research" in agent_name.lower():
|
|
183
|
+
agent_list.append(
|
|
184
|
+
f"- **Research Agent** (`{agent_id}`): Investigation and analysis"
|
|
185
|
+
)
|
|
186
|
+
elif "security" in agent_name.lower():
|
|
187
|
+
agent_list.append(
|
|
188
|
+
f"- **Security Agent** (`{agent_id}`): Security analysis and protection"
|
|
189
|
+
)
|
|
190
|
+
elif "version" in agent_name.lower():
|
|
191
|
+
agent_list.append(
|
|
192
|
+
f"- **Version Control Agent** (`{agent_id}`): Git operations and version management"
|
|
193
|
+
)
|
|
194
|
+
elif "ops" in agent_name.lower():
|
|
195
|
+
agent_list.append(
|
|
196
|
+
f"- **Ops Agent** (`{agent_id}`): Deployment and operations"
|
|
197
|
+
)
|
|
198
|
+
elif "data" in agent_name.lower():
|
|
199
|
+
agent_list.append(
|
|
200
|
+
f"- **Data Engineer Agent** (`{agent_id}`): Data management and AI API integration"
|
|
201
|
+
)
|
|
202
|
+
else:
|
|
203
|
+
agent_list.append(
|
|
204
|
+
f"- **{clean_name}** (`{agent_id}`): Available for specialized tasks"
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
instructions += "\n".join(agent_list) + "\n\n"
|
|
208
|
+
|
|
209
|
+
# Add full agent details
|
|
210
|
+
instructions += "### Agent Details\n\n"
|
|
211
|
+
for agent_name, agent_content in sorted(
|
|
212
|
+
framework_content["agents"].items()
|
|
213
|
+
):
|
|
214
|
+
instructions += f"#### {agent_name.replace('-', ' ').title()}\n"
|
|
215
|
+
instructions += agent_content + "\n\n"
|
|
216
|
+
|
|
217
|
+
# Add orchestration principles
|
|
218
|
+
instructions += """
|
|
219
|
+
## Orchestration Principles
|
|
220
|
+
1. **Always Delegate**: Never perform direct work - use Task Tool for all implementation
|
|
221
|
+
2. **Comprehensive Context**: Provide rich, filtered context to each agent
|
|
222
|
+
3. **Track Everything**: Extract all TODO/BUG/FEATURE items systematically
|
|
223
|
+
4. **Cross-Agent Coordination**: Orchestrate workflows spanning multiple agents
|
|
224
|
+
5. **Results Integration**: Actively receive and integrate agent results
|
|
225
|
+
|
|
226
|
+
## Task Tool Format
|
|
227
|
+
```
|
|
228
|
+
**[Agent Name]**: [Clear task description with deliverables]
|
|
229
|
+
|
|
230
|
+
TEMPORAL CONTEXT: Today is [date]. Apply date awareness to [specific considerations].
|
|
231
|
+
|
|
232
|
+
**Task**: [Detailed task breakdown]
|
|
233
|
+
1. [Specific action item 1]
|
|
234
|
+
2. [Specific action item 2]
|
|
235
|
+
3. [Specific action item 3]
|
|
236
|
+
|
|
237
|
+
**Context**: [Comprehensive filtered context for this agent]
|
|
238
|
+
**Authority**: [Agent's decision-making scope]
|
|
239
|
+
**Expected Results**: [Specific deliverables needed]
|
|
240
|
+
**Integration**: [How results integrate with other work]
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Ticket Extraction Patterns
|
|
244
|
+
Extract tickets from these patterns:
|
|
245
|
+
- TODO: [description] → TODO ticket
|
|
246
|
+
- BUG: [description] → BUG ticket
|
|
247
|
+
- FEATURE: [description] → FEATURE ticket
|
|
248
|
+
- ISSUE: [description] → ISSUE ticket
|
|
249
|
+
- FIXME: [description] → BUG ticket
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
"""
|
|
253
|
+
|
|
254
|
+
return instructions
|
|
255
|
+
|
|
256
|
+
def get_fallback_capabilities(self) -> str:
|
|
257
|
+
"""Return fallback capabilities when dynamic discovery fails.
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
Fallback agent capabilities section
|
|
261
|
+
"""
|
|
262
|
+
return """
|
|
263
|
+
|
|
264
|
+
## Available Agent Capabilities
|
|
265
|
+
|
|
266
|
+
You have the following specialized agents available for delegation:
|
|
267
|
+
|
|
268
|
+
- **Engineer** (`engineer`): Code implementation and development
|
|
269
|
+
- **Research** (`research-agent`): Investigation and analysis
|
|
270
|
+
- **QA** (`qa-agent`): Testing and quality assurance
|
|
271
|
+
- **Documentation** (`documentation-agent`): Documentation creation and maintenance
|
|
272
|
+
- **Security** (`security-agent`): Security analysis and protection
|
|
273
|
+
- **Data Engineer** (`data-engineer`): Data management and pipelines
|
|
274
|
+
- **Ops** (`ops-agent`): Deployment and operations
|
|
275
|
+
- **Version Control** (`version-control`): Git operations and version management
|
|
276
|
+
|
|
277
|
+
**IMPORTANT**: Use the exact agent ID in parentheses when delegating tasks.
|
|
278
|
+
"""
|