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
claude_mpm/services/{agent_management_service.py → agents/management/agent_management_service.py}
RENAMED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
1
3
|
#!/usr/bin/env python3
|
|
2
4
|
"""
|
|
3
5
|
Agent Management Service
|
|
@@ -9,96 +11,105 @@ section extraction/updates, and version management.
|
|
|
9
11
|
Uses python-frontmatter and mistune for markdown parsing as recommended.
|
|
10
12
|
"""
|
|
11
13
|
|
|
12
|
-
import os
|
|
13
14
|
import re
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import logging
|
|
17
|
-
from pathlib import Path
|
|
18
|
-
from typing import Dict, List, Optional, Tuple, Any
|
|
19
|
-
from datetime import datetime
|
|
15
|
+
from datetime import datetime, timezone
|
|
16
|
+
from typing import Any, Dict, List, Optional
|
|
20
17
|
|
|
21
18
|
import frontmatter
|
|
22
19
|
import mistune
|
|
20
|
+
import yaml
|
|
23
21
|
|
|
24
|
-
from
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
23
|
+
from claude_mpm.core.unified_paths import get_path_manager
|
|
24
|
+
from claude_mpm.models.agent_definition import (
|
|
25
|
+
AgentDefinition,
|
|
26
|
+
AgentMetadata,
|
|
27
|
+
AgentPermissions,
|
|
28
|
+
AgentSection,
|
|
29
|
+
AgentType,
|
|
30
|
+
AgentWorkflow,
|
|
27
31
|
)
|
|
28
|
-
from .
|
|
29
|
-
|
|
30
|
-
from ..
|
|
32
|
+
from claude_mpm.services.memory.cache.shared_prompt_cache import SharedPromptCache
|
|
33
|
+
|
|
34
|
+
from ..deployment.agent_versioning import AgentVersionManager
|
|
31
35
|
|
|
32
|
-
logger =
|
|
36
|
+
logger = get_logger(__name__)
|
|
33
37
|
|
|
34
38
|
|
|
35
39
|
class AgentManager:
|
|
36
40
|
"""Manages agent definitions with CRUD operations and versioning."""
|
|
37
|
-
|
|
38
|
-
def __init__(
|
|
41
|
+
|
|
42
|
+
def __init__(
|
|
43
|
+
self, framework_dir: Optional[Path] = None, project_dir: Optional[Path] = None
|
|
44
|
+
):
|
|
39
45
|
"""
|
|
40
46
|
Initialize AgentManager.
|
|
41
|
-
|
|
47
|
+
|
|
42
48
|
Args:
|
|
43
49
|
framework_dir: Path to agents templates directory
|
|
44
50
|
project_dir: Path to project-specific agents directory
|
|
45
51
|
"""
|
|
46
|
-
# Use
|
|
52
|
+
# Use get_path_manager() for consistent path discovery
|
|
47
53
|
if framework_dir is None:
|
|
48
54
|
try:
|
|
49
55
|
# Use agents templates directory
|
|
50
|
-
self.framework_dir =
|
|
56
|
+
self.framework_dir = (
|
|
57
|
+
Path(__file__).parent.parent / "agents" / "templates"
|
|
58
|
+
)
|
|
51
59
|
except Exception:
|
|
52
60
|
# Fallback to agents directory
|
|
53
|
-
self.framework_dir =
|
|
61
|
+
self.framework_dir = get_path_manager().get_agents_dir()
|
|
54
62
|
else:
|
|
55
63
|
self.framework_dir = framework_dir
|
|
56
|
-
|
|
64
|
+
|
|
57
65
|
if project_dir is None:
|
|
58
|
-
project_root =
|
|
59
|
-
|
|
66
|
+
project_root = get_path_manager().get_project_root()
|
|
67
|
+
# Use direct agents directory without subdirectory to match deployment expectations
|
|
68
|
+
self.project_dir = project_root / get_path_manager().CONFIG_DIR / "agents"
|
|
60
69
|
else:
|
|
61
70
|
self.project_dir = project_dir
|
|
62
71
|
self.version_manager = AgentVersionManager()
|
|
63
72
|
self.cache = SharedPromptCache.get_instance()
|
|
64
73
|
self._markdown = mistune.create_markdown()
|
|
65
|
-
|
|
66
|
-
def create_agent(
|
|
74
|
+
|
|
75
|
+
def create_agent(
|
|
76
|
+
self, name: str, definition: AgentDefinition, location: str = "project"
|
|
77
|
+
) -> Path:
|
|
67
78
|
"""
|
|
68
79
|
Create a new agent definition file.
|
|
69
|
-
|
|
80
|
+
|
|
70
81
|
Args:
|
|
71
82
|
name: Agent name (e.g., "performance-agent")
|
|
72
83
|
definition: Agent definition object
|
|
73
84
|
location: "project" or "framework"
|
|
74
|
-
|
|
85
|
+
|
|
75
86
|
Returns:
|
|
76
87
|
Path to created file
|
|
77
88
|
"""
|
|
78
89
|
# Determine target directory
|
|
79
90
|
target_dir = self.project_dir if location == "project" else self.framework_dir
|
|
80
91
|
target_dir.mkdir(parents=True, exist_ok=True)
|
|
81
|
-
|
|
92
|
+
|
|
82
93
|
# Generate markdown content
|
|
83
94
|
content = self._definition_to_markdown(definition)
|
|
84
|
-
|
|
95
|
+
|
|
85
96
|
# Write file
|
|
86
97
|
file_path = target_dir / f"{name}.md"
|
|
87
|
-
file_path.write_text(content, encoding=
|
|
88
|
-
|
|
98
|
+
file_path.write_text(content, encoding="utf-8")
|
|
99
|
+
|
|
89
100
|
# Clear cache
|
|
90
101
|
self._clear_agent_cache(name)
|
|
91
|
-
|
|
102
|
+
|
|
92
103
|
logger.info(f"Created agent '{name}' at {file_path}")
|
|
93
104
|
return file_path
|
|
94
|
-
|
|
105
|
+
|
|
95
106
|
def read_agent(self, name: str) -> Optional[AgentDefinition]:
|
|
96
107
|
"""
|
|
97
108
|
Read an agent definition.
|
|
98
|
-
|
|
109
|
+
|
|
99
110
|
Args:
|
|
100
111
|
name: Agent name (without .md extension)
|
|
101
|
-
|
|
112
|
+
|
|
102
113
|
Returns:
|
|
103
114
|
AgentDefinition or None if not found
|
|
104
115
|
"""
|
|
@@ -107,25 +118,26 @@ class AgentManager:
|
|
|
107
118
|
if not agent_path:
|
|
108
119
|
logger.warning(f"Agent '{name}' not found")
|
|
109
120
|
return None
|
|
110
|
-
|
|
121
|
+
|
|
111
122
|
try:
|
|
112
123
|
# Read and parse the file
|
|
113
|
-
content = agent_path.read_text(encoding=
|
|
124
|
+
content = agent_path.read_text(encoding="utf-8")
|
|
114
125
|
return self._parse_agent_markdown(content, name, str(agent_path))
|
|
115
126
|
except Exception as e:
|
|
116
127
|
logger.error(f"Error reading agent '{name}': {e}")
|
|
117
128
|
return None
|
|
118
|
-
|
|
119
|
-
def update_agent(
|
|
120
|
-
|
|
129
|
+
|
|
130
|
+
def update_agent(
|
|
131
|
+
self, name: str, updates: Dict[str, Any], increment_version: bool = True
|
|
132
|
+
) -> Optional[AgentDefinition]:
|
|
121
133
|
"""
|
|
122
134
|
Update an agent definition.
|
|
123
|
-
|
|
135
|
+
|
|
124
136
|
Args:
|
|
125
137
|
name: Agent name
|
|
126
138
|
updates: Dictionary of updates to apply
|
|
127
139
|
increment_version: Whether to increment serial version
|
|
128
|
-
|
|
140
|
+
|
|
129
141
|
Returns:
|
|
130
142
|
Updated AgentDefinition or None if failed
|
|
131
143
|
"""
|
|
@@ -133,51 +145,58 @@ class AgentManager:
|
|
|
133
145
|
agent_def = self.read_agent(name)
|
|
134
146
|
if not agent_def:
|
|
135
147
|
return None
|
|
136
|
-
|
|
148
|
+
|
|
137
149
|
# Apply updates
|
|
138
150
|
for key, value in updates.items():
|
|
139
151
|
if hasattr(agent_def, key):
|
|
140
152
|
setattr(agent_def, key, value)
|
|
141
153
|
elif key in ["type", "model_preference", "tags", "specializations"]:
|
|
142
154
|
setattr(agent_def.metadata, key, value)
|
|
143
|
-
|
|
155
|
+
|
|
144
156
|
# Increment version if requested
|
|
145
157
|
if increment_version:
|
|
146
158
|
agent_def.metadata.increment_serial_version()
|
|
147
|
-
agent_def.metadata.last_updated = datetime.now()
|
|
148
|
-
|
|
159
|
+
agent_def.metadata.last_updated = datetime.now(timezone.utc)
|
|
160
|
+
|
|
149
161
|
# Write back
|
|
150
162
|
agent_path = self._find_agent_file(name)
|
|
151
163
|
if agent_path:
|
|
152
164
|
content = self._definition_to_markdown(agent_def)
|
|
153
|
-
agent_path.write_text(content, encoding=
|
|
154
|
-
|
|
165
|
+
agent_path.write_text(content, encoding="utf-8")
|
|
166
|
+
|
|
155
167
|
# Clear cache
|
|
156
168
|
self._clear_agent_cache(name)
|
|
157
|
-
|
|
158
|
-
logger.info(
|
|
169
|
+
|
|
170
|
+
logger.info(
|
|
171
|
+
f"Updated agent '{name}' to version {agent_def.metadata.version}"
|
|
172
|
+
)
|
|
159
173
|
return agent_def
|
|
160
|
-
|
|
174
|
+
|
|
161
175
|
return None
|
|
162
|
-
|
|
163
|
-
def update_section(
|
|
164
|
-
|
|
176
|
+
|
|
177
|
+
def update_section(
|
|
178
|
+
self,
|
|
179
|
+
name: str,
|
|
180
|
+
section: AgentSection,
|
|
181
|
+
content: str,
|
|
182
|
+
increment_version: bool = True,
|
|
183
|
+
) -> Optional[AgentDefinition]:
|
|
165
184
|
"""
|
|
166
185
|
Update a specific section of an agent.
|
|
167
|
-
|
|
186
|
+
|
|
168
187
|
Args:
|
|
169
188
|
name: Agent name
|
|
170
189
|
section: Section to update
|
|
171
190
|
content: New section content
|
|
172
191
|
increment_version: Whether to increment version
|
|
173
|
-
|
|
192
|
+
|
|
174
193
|
Returns:
|
|
175
194
|
Updated AgentDefinition or None
|
|
176
195
|
"""
|
|
177
196
|
agent_def = self.read_agent(name)
|
|
178
197
|
if not agent_def:
|
|
179
198
|
return None
|
|
180
|
-
|
|
199
|
+
|
|
181
200
|
# Map section to attribute
|
|
182
201
|
section_map = {
|
|
183
202
|
AgentSection.PRIMARY_ROLE: "primary_role",
|
|
@@ -185,18 +204,22 @@ class AgentManager:
|
|
|
185
204
|
AgentSection.TOOLS: "tools_commands",
|
|
186
205
|
AgentSection.ESCALATION: "escalation_triggers",
|
|
187
206
|
AgentSection.KPI: "kpis",
|
|
188
|
-
AgentSection.DEPENDENCIES: "dependencies"
|
|
207
|
+
AgentSection.DEPENDENCIES: "dependencies",
|
|
189
208
|
}
|
|
190
|
-
|
|
209
|
+
|
|
191
210
|
if section in section_map:
|
|
192
211
|
attr_name = section_map[section]
|
|
193
|
-
if section in [
|
|
194
|
-
|
|
212
|
+
if section in [
|
|
213
|
+
AgentSection.CAPABILITIES,
|
|
214
|
+
AgentSection.ESCALATION,
|
|
215
|
+
AgentSection.KPI,
|
|
216
|
+
AgentSection.DEPENDENCIES,
|
|
217
|
+
]:
|
|
195
218
|
# Parse list content
|
|
196
219
|
setattr(agent_def, attr_name, self._parse_list_content(content))
|
|
197
220
|
else:
|
|
198
221
|
setattr(agent_def, attr_name, content.strip())
|
|
199
|
-
|
|
222
|
+
|
|
200
223
|
# Special handling for complex sections
|
|
201
224
|
elif section == AgentSection.WHEN_TO_USE:
|
|
202
225
|
agent_def.when_to_use = self._parse_when_to_use(content)
|
|
@@ -204,32 +227,32 @@ class AgentManager:
|
|
|
204
227
|
agent_def.authority = self._parse_authority(content)
|
|
205
228
|
elif section == AgentSection.WORKFLOWS:
|
|
206
229
|
agent_def.workflows = self._parse_workflows(content)
|
|
207
|
-
|
|
230
|
+
|
|
208
231
|
# Update raw section
|
|
209
232
|
agent_def.raw_sections[section.value] = content
|
|
210
|
-
|
|
233
|
+
|
|
211
234
|
# Increment version
|
|
212
235
|
if increment_version:
|
|
213
236
|
agent_def.metadata.increment_serial_version()
|
|
214
|
-
agent_def.metadata.last_updated = datetime.now()
|
|
215
|
-
|
|
237
|
+
agent_def.metadata.last_updated = datetime.now(timezone.utc)
|
|
238
|
+
|
|
216
239
|
# Write back
|
|
217
240
|
return self.update_agent(name, {}, increment_version=False)
|
|
218
|
-
|
|
241
|
+
|
|
219
242
|
def delete_agent(self, name: str) -> bool:
|
|
220
243
|
"""
|
|
221
244
|
Delete an agent definition.
|
|
222
|
-
|
|
245
|
+
|
|
223
246
|
Args:
|
|
224
247
|
name: Agent name
|
|
225
|
-
|
|
248
|
+
|
|
226
249
|
Returns:
|
|
227
250
|
True if deleted, False otherwise
|
|
228
251
|
"""
|
|
229
252
|
agent_path = self._find_agent_file(name)
|
|
230
253
|
if not agent_path:
|
|
231
254
|
return False
|
|
232
|
-
|
|
255
|
+
|
|
233
256
|
try:
|
|
234
257
|
agent_path.unlink()
|
|
235
258
|
self._clear_agent_cache(name)
|
|
@@ -238,19 +261,19 @@ class AgentManager:
|
|
|
238
261
|
except Exception as e:
|
|
239
262
|
logger.error(f"Error deleting agent '{name}': {e}")
|
|
240
263
|
return False
|
|
241
|
-
|
|
264
|
+
|
|
242
265
|
def list_agents(self, location: Optional[str] = None) -> Dict[str, Dict[str, Any]]:
|
|
243
266
|
"""
|
|
244
267
|
List all available agents.
|
|
245
|
-
|
|
268
|
+
|
|
246
269
|
Args:
|
|
247
270
|
location: Filter by location ("project", "framework", or None for all)
|
|
248
|
-
|
|
271
|
+
|
|
249
272
|
Returns:
|
|
250
273
|
Dictionary of agent info
|
|
251
274
|
"""
|
|
252
275
|
agents = {}
|
|
253
|
-
|
|
276
|
+
|
|
254
277
|
# Check framework agents
|
|
255
278
|
if location in [None, "framework"]:
|
|
256
279
|
for agent_file in self.framework_dir.glob("*.md"):
|
|
@@ -263,9 +286,9 @@ class AgentManager:
|
|
|
263
286
|
"path": str(agent_file),
|
|
264
287
|
"version": agent_def.metadata.version,
|
|
265
288
|
"type": agent_def.metadata.type.value,
|
|
266
|
-
"specializations": agent_def.metadata.specializations
|
|
289
|
+
"specializations": agent_def.metadata.specializations,
|
|
267
290
|
}
|
|
268
|
-
|
|
291
|
+
|
|
269
292
|
# Check project agents
|
|
270
293
|
if location in [None, "project"] and self.project_dir.exists():
|
|
271
294
|
for agent_file in self.project_dir.glob("*.md"):
|
|
@@ -277,29 +300,29 @@ class AgentManager:
|
|
|
277
300
|
"path": str(agent_file),
|
|
278
301
|
"version": agent_def.metadata.version,
|
|
279
302
|
"type": agent_def.metadata.type.value,
|
|
280
|
-
"specializations": agent_def.metadata.specializations
|
|
303
|
+
"specializations": agent_def.metadata.specializations,
|
|
281
304
|
}
|
|
282
|
-
|
|
305
|
+
|
|
283
306
|
return agents
|
|
284
|
-
|
|
307
|
+
|
|
285
308
|
def get_agent_api(self, name: str) -> Optional[Dict[str, Any]]:
|
|
286
309
|
"""
|
|
287
310
|
Get agent data in API-friendly format.
|
|
288
|
-
|
|
311
|
+
|
|
289
312
|
Args:
|
|
290
313
|
name: Agent name
|
|
291
|
-
|
|
314
|
+
|
|
292
315
|
Returns:
|
|
293
316
|
Agent data dictionary or None
|
|
294
317
|
"""
|
|
295
318
|
agent_def = self.read_agent(name)
|
|
296
319
|
if not agent_def:
|
|
297
320
|
return None
|
|
298
|
-
|
|
321
|
+
|
|
299
322
|
return agent_def.to_dict()
|
|
300
|
-
|
|
323
|
+
|
|
301
324
|
# Private helper methods
|
|
302
|
-
|
|
325
|
+
|
|
303
326
|
def _find_agent_file(self, name: str) -> Optional[Path]:
|
|
304
327
|
"""Find agent file in project or framework directories."""
|
|
305
328
|
# Check project first (higher precedence)
|
|
@@ -307,19 +330,21 @@ class AgentManager:
|
|
|
307
330
|
project_path = self.project_dir / f"{name}.md"
|
|
308
331
|
if project_path.exists():
|
|
309
332
|
return project_path
|
|
310
|
-
|
|
333
|
+
|
|
311
334
|
# Check framework
|
|
312
335
|
framework_path = self.framework_dir / f"{name}.md"
|
|
313
336
|
if framework_path.exists():
|
|
314
337
|
return framework_path
|
|
315
|
-
|
|
338
|
+
|
|
316
339
|
return None
|
|
317
|
-
|
|
318
|
-
def _parse_agent_markdown(
|
|
340
|
+
|
|
341
|
+
def _parse_agent_markdown(
|
|
342
|
+
self, content: str, name: str, file_path: str
|
|
343
|
+
) -> AgentDefinition:
|
|
319
344
|
"""Parse markdown content into AgentDefinition."""
|
|
320
345
|
# Parse frontmatter
|
|
321
346
|
post = frontmatter.loads(content)
|
|
322
|
-
|
|
347
|
+
|
|
323
348
|
# Extract metadata
|
|
324
349
|
metadata = AgentMetadata(
|
|
325
350
|
type=AgentType(post.metadata.get("type", "core")),
|
|
@@ -328,155 +353,177 @@ class AgentManager:
|
|
|
328
353
|
last_updated=post.metadata.get("last_updated"),
|
|
329
354
|
author=post.metadata.get("author"),
|
|
330
355
|
tags=post.metadata.get("tags", []),
|
|
331
|
-
specializations=post.metadata.get("specializations", [])
|
|
356
|
+
specializations=post.metadata.get("specializations", []),
|
|
332
357
|
)
|
|
333
|
-
|
|
358
|
+
|
|
334
359
|
# Extract version from content if not in frontmatter
|
|
335
360
|
if not post.metadata.get("version"):
|
|
336
361
|
version = self.version_manager.extract_version_from_markdown(content)
|
|
337
362
|
if version:
|
|
338
363
|
metadata.version = version
|
|
339
|
-
|
|
364
|
+
|
|
340
365
|
# Parse sections
|
|
341
366
|
sections = self._extract_sections(post.content)
|
|
342
|
-
|
|
367
|
+
|
|
343
368
|
# Extract title
|
|
344
|
-
title_match = re.search(r
|
|
345
|
-
title = title_match.group(1) if title_match else name.replace(
|
|
346
|
-
|
|
369
|
+
title_match = re.search(r"^#\s+(.+)$", post.content, re.MULTILINE)
|
|
370
|
+
title = title_match.group(1) if title_match else name.replace("-", " ").title()
|
|
371
|
+
|
|
347
372
|
# Build definition
|
|
348
|
-
|
|
373
|
+
return AgentDefinition(
|
|
349
374
|
name=name,
|
|
350
375
|
title=title,
|
|
351
376
|
file_path=file_path,
|
|
352
377
|
metadata=metadata,
|
|
353
378
|
primary_role=sections.get("Primary Role", ""),
|
|
354
|
-
when_to_use=self._parse_when_to_use(
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
379
|
+
when_to_use=self._parse_when_to_use(
|
|
380
|
+
sections.get("When to Use This Agent", "")
|
|
381
|
+
),
|
|
382
|
+
capabilities=self._parse_list_content(
|
|
383
|
+
sections.get("Core Capabilities", "")
|
|
384
|
+
),
|
|
385
|
+
authority=self._parse_authority(
|
|
386
|
+
sections.get("Authority & Permissions", "")
|
|
387
|
+
),
|
|
388
|
+
workflows=self._parse_workflows(
|
|
389
|
+
sections.get("Agent-Specific Workflows", "")
|
|
390
|
+
),
|
|
391
|
+
escalation_triggers=self._parse_list_content(
|
|
392
|
+
sections.get("Unique Escalation Triggers", "")
|
|
393
|
+
),
|
|
394
|
+
kpis=self._parse_list_content(
|
|
395
|
+
sections.get("Key Performance Indicators", "")
|
|
396
|
+
),
|
|
397
|
+
dependencies=self._parse_list_content(
|
|
398
|
+
sections.get("Critical Dependencies", "")
|
|
399
|
+
),
|
|
361
400
|
tools_commands=sections.get("Specialized Tools/Commands", ""),
|
|
362
401
|
raw_content=content,
|
|
363
|
-
raw_sections=sections
|
|
402
|
+
raw_sections=sections,
|
|
364
403
|
)
|
|
365
|
-
|
|
366
|
-
return definition
|
|
367
|
-
|
|
404
|
+
|
|
368
405
|
def _extract_sections(self, content: str) -> Dict[str, str]:
|
|
369
406
|
"""Extract sections from markdown content."""
|
|
370
407
|
sections = {}
|
|
371
408
|
current_section = None
|
|
372
409
|
current_content = []
|
|
373
|
-
|
|
410
|
+
|
|
374
411
|
# Split into lines
|
|
375
|
-
lines = content.split(
|
|
376
|
-
|
|
412
|
+
lines = content.split("\n")
|
|
413
|
+
|
|
377
414
|
for line in lines:
|
|
378
415
|
# Check if this is a section header
|
|
379
|
-
header_match = re.match(r
|
|
416
|
+
header_match = re.match(r"^##\s+(?:🎯|🔧|🔑|📋|🚨|📊|🔄|🛠️)?\s*(.+)$", line)
|
|
380
417
|
if header_match:
|
|
381
418
|
# Save previous section
|
|
382
419
|
if current_section:
|
|
383
|
-
sections[current_section] =
|
|
384
|
-
|
|
420
|
+
sections[current_section] = "\n".join(current_content).strip()
|
|
421
|
+
|
|
385
422
|
# Start new section
|
|
386
423
|
current_section = header_match.group(1).strip()
|
|
387
424
|
current_content = []
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
425
|
+
# Add to current section
|
|
426
|
+
elif current_section:
|
|
427
|
+
current_content.append(line)
|
|
428
|
+
|
|
393
429
|
# Save last section
|
|
394
430
|
if current_section:
|
|
395
|
-
sections[current_section] =
|
|
396
|
-
|
|
431
|
+
sections[current_section] = "\n".join(current_content).strip()
|
|
432
|
+
|
|
397
433
|
return sections
|
|
398
|
-
|
|
434
|
+
|
|
399
435
|
def _parse_list_content(self, content: str) -> List[str]:
|
|
400
436
|
"""Parse bullet point or numbered list content."""
|
|
401
437
|
items = []
|
|
402
|
-
for line in content.split(
|
|
438
|
+
for line in content.split("\n"):
|
|
403
439
|
# Match bullet points or numbered items
|
|
404
|
-
match = re.match(r
|
|
440
|
+
match = re.match(r"^[-*•]\s+(.+)$|^\d+\.\s+(.+)$", line.strip())
|
|
405
441
|
if match:
|
|
406
442
|
item = match.group(1) or match.group(2)
|
|
407
443
|
items.append(item.strip())
|
|
408
444
|
return items
|
|
409
|
-
|
|
445
|
+
|
|
410
446
|
def _parse_when_to_use(self, content: str) -> Dict[str, List[str]]:
|
|
411
447
|
"""Parse When to Use section."""
|
|
412
448
|
result = {"select": [], "do_not_select": []}
|
|
413
449
|
current_mode = None
|
|
414
|
-
|
|
415
|
-
for line in content.split(
|
|
416
|
-
if
|
|
450
|
+
|
|
451
|
+
for line in content.split("\n"):
|
|
452
|
+
if (
|
|
453
|
+
"Select this agent when:" in line
|
|
454
|
+
or "**Select this agent when:**" in line
|
|
455
|
+
):
|
|
417
456
|
current_mode = "select"
|
|
418
457
|
elif "Do NOT select for:" in line or "**Do NOT select for:**" in line:
|
|
419
458
|
current_mode = "do_not_select"
|
|
420
|
-
elif current_mode and line.strip().startswith(
|
|
459
|
+
elif current_mode and line.strip().startswith("-"):
|
|
421
460
|
item = line.strip()[1:].strip()
|
|
422
461
|
result[current_mode].append(item)
|
|
423
|
-
|
|
462
|
+
|
|
424
463
|
return result
|
|
425
|
-
|
|
464
|
+
|
|
426
465
|
def _parse_authority(self, content: str) -> AgentPermissions:
|
|
427
466
|
"""Parse Authority & Permissions section."""
|
|
428
467
|
permissions = AgentPermissions()
|
|
429
468
|
current_section = None
|
|
430
|
-
|
|
431
|
-
for line in content.split(
|
|
469
|
+
|
|
470
|
+
for line in content.split("\n"):
|
|
432
471
|
if "Exclusive Write Access" in line:
|
|
433
472
|
current_section = "write"
|
|
434
473
|
elif "Forbidden Operations" in line:
|
|
435
474
|
current_section = "forbidden"
|
|
436
475
|
elif "Read Access" in line:
|
|
437
476
|
current_section = "read"
|
|
438
|
-
elif current_section and line.strip().startswith(
|
|
477
|
+
elif current_section and line.strip().startswith("-"):
|
|
439
478
|
item = line.strip()[1:].strip()
|
|
440
479
|
# Remove inline comments
|
|
441
|
-
item = re.sub(r
|
|
442
|
-
|
|
480
|
+
item = re.sub(r"\s*#.*$", "", item).strip()
|
|
481
|
+
|
|
443
482
|
if current_section == "write":
|
|
444
483
|
permissions.exclusive_write_access.append(item)
|
|
445
484
|
elif current_section == "forbidden":
|
|
446
485
|
permissions.forbidden_operations.append(item)
|
|
447
486
|
elif current_section == "read":
|
|
448
487
|
permissions.read_access.append(item)
|
|
449
|
-
|
|
488
|
+
|
|
450
489
|
return permissions
|
|
451
|
-
|
|
490
|
+
|
|
452
491
|
def _parse_workflows(self, content: str) -> List[AgentWorkflow]:
|
|
453
492
|
"""Parse workflows from YAML blocks."""
|
|
454
493
|
workflows = []
|
|
455
|
-
|
|
494
|
+
|
|
456
495
|
# Find all YAML blocks
|
|
457
|
-
yaml_blocks = re.findall(r
|
|
458
|
-
|
|
496
|
+
yaml_blocks = re.findall(r"```yaml\n(.*?)\n```", content, re.DOTALL)
|
|
497
|
+
|
|
459
498
|
for block in yaml_blocks:
|
|
460
499
|
try:
|
|
461
500
|
data = yaml.safe_load(block)
|
|
462
|
-
if isinstance(data, dict) and all(
|
|
501
|
+
if isinstance(data, dict) and all(
|
|
502
|
+
k in data for k in ["trigger", "process", "output"]
|
|
503
|
+
):
|
|
463
504
|
# Extract workflow name from preceding heading if available
|
|
464
|
-
name_match = re.search(
|
|
505
|
+
name_match = re.search(
|
|
506
|
+
r"###\s+(.+)\n```yaml\n" + re.escape(block), content
|
|
507
|
+
)
|
|
465
508
|
name = name_match.group(1) if name_match else "Unnamed Workflow"
|
|
466
|
-
|
|
509
|
+
|
|
467
510
|
workflow = AgentWorkflow(
|
|
468
511
|
name=name,
|
|
469
512
|
trigger=data["trigger"],
|
|
470
|
-
process=
|
|
513
|
+
process=(
|
|
514
|
+
data["process"]
|
|
515
|
+
if isinstance(data["process"], list)
|
|
516
|
+
else [data["process"]]
|
|
517
|
+
),
|
|
471
518
|
output=data["output"],
|
|
472
|
-
raw_yaml=block
|
|
519
|
+
raw_yaml=block,
|
|
473
520
|
)
|
|
474
521
|
workflows.append(workflow)
|
|
475
522
|
except yaml.YAMLError:
|
|
476
523
|
logger.warning("Failed to parse YAML workflow block")
|
|
477
|
-
|
|
524
|
+
|
|
478
525
|
return workflows
|
|
479
|
-
|
|
526
|
+
|
|
480
527
|
def _definition_to_markdown(self, definition: AgentDefinition) -> str:
|
|
481
528
|
"""Convert AgentDefinition back to markdown."""
|
|
482
529
|
# Start with frontmatter
|
|
@@ -487,21 +534,21 @@ class AgentManager:
|
|
|
487
534
|
"last_updated": definition.metadata.last_updated,
|
|
488
535
|
"author": definition.metadata.author,
|
|
489
536
|
"tags": definition.metadata.tags,
|
|
490
|
-
"specializations": definition.metadata.specializations
|
|
537
|
+
"specializations": definition.metadata.specializations,
|
|
491
538
|
}
|
|
492
|
-
|
|
539
|
+
|
|
493
540
|
# Remove None values
|
|
494
541
|
frontmatter_data = {k: v for k, v in frontmatter_data.items() if v is not None}
|
|
495
|
-
|
|
542
|
+
|
|
496
543
|
# Build content
|
|
497
544
|
content = []
|
|
498
545
|
content.append(f"# {definition.title}\n")
|
|
499
|
-
|
|
546
|
+
|
|
500
547
|
# Primary Role
|
|
501
548
|
content.append("## 🎯 Primary Role")
|
|
502
549
|
content.append(definition.primary_role)
|
|
503
550
|
content.append("")
|
|
504
|
-
|
|
551
|
+
|
|
505
552
|
# When to Use
|
|
506
553
|
content.append("## 🎯 When to Use This Agent")
|
|
507
554
|
content.append("")
|
|
@@ -513,13 +560,13 @@ class AgentManager:
|
|
|
513
560
|
for item in definition.when_to_use.get("do_not_select", []):
|
|
514
561
|
content.append(f"- {item}")
|
|
515
562
|
content.append("")
|
|
516
|
-
|
|
563
|
+
|
|
517
564
|
# Capabilities
|
|
518
565
|
content.append("## 🔧 Core Capabilities")
|
|
519
566
|
for capability in definition.capabilities:
|
|
520
567
|
content.append(f"- {capability}")
|
|
521
568
|
content.append("")
|
|
522
|
-
|
|
569
|
+
|
|
523
570
|
# Authority
|
|
524
571
|
content.append("## 🔑 Authority & Permissions")
|
|
525
572
|
content.append("")
|
|
@@ -531,7 +578,7 @@ class AgentManager:
|
|
|
531
578
|
for item in definition.authority.forbidden_operations:
|
|
532
579
|
content.append(f"- {item}")
|
|
533
580
|
content.append("")
|
|
534
|
-
|
|
581
|
+
|
|
535
582
|
# Workflows
|
|
536
583
|
if definition.workflows:
|
|
537
584
|
content.append("## 📋 Agent-Specific Workflows")
|
|
@@ -542,55 +589,59 @@ class AgentManager:
|
|
|
542
589
|
yaml_content = {
|
|
543
590
|
"trigger": workflow.trigger,
|
|
544
591
|
"process": workflow.process,
|
|
545
|
-
"output": workflow.output
|
|
592
|
+
"output": workflow.output,
|
|
546
593
|
}
|
|
547
|
-
content.append(
|
|
594
|
+
content.append(
|
|
595
|
+
yaml.dump(yaml_content, default_flow_style=False).strip()
|
|
596
|
+
)
|
|
548
597
|
content.append("```")
|
|
549
598
|
content.append("")
|
|
550
|
-
|
|
599
|
+
|
|
551
600
|
# Escalation
|
|
552
601
|
if definition.escalation_triggers:
|
|
553
602
|
content.append("## 🚨 Unique Escalation Triggers")
|
|
554
603
|
for trigger in definition.escalation_triggers:
|
|
555
604
|
content.append(f"- {trigger}")
|
|
556
605
|
content.append("")
|
|
557
|
-
|
|
606
|
+
|
|
558
607
|
# KPIs
|
|
559
608
|
if definition.kpis:
|
|
560
609
|
content.append("## 📊 Key Performance Indicators")
|
|
561
610
|
for i, kpi in enumerate(definition.kpis, 1):
|
|
562
611
|
content.append(f"{i}. {kpi}")
|
|
563
612
|
content.append("")
|
|
564
|
-
|
|
613
|
+
|
|
565
614
|
# Dependencies
|
|
566
615
|
if definition.dependencies:
|
|
567
616
|
content.append("## 🔄 Critical Dependencies")
|
|
568
617
|
for dep in definition.dependencies:
|
|
569
618
|
content.append(f"- {dep}")
|
|
570
619
|
content.append("")
|
|
571
|
-
|
|
620
|
+
|
|
572
621
|
# Tools
|
|
573
622
|
if definition.tools_commands:
|
|
574
623
|
content.append("## 🛠️ Specialized Tools/Commands")
|
|
575
624
|
content.append(definition.tools_commands)
|
|
576
625
|
content.append("")
|
|
577
|
-
|
|
626
|
+
|
|
578
627
|
# Footer
|
|
579
628
|
content.append("---")
|
|
580
629
|
content.append(f"**Agent Type**: {definition.metadata.type.value}")
|
|
581
630
|
content.append(f"**Model Preference**: {definition.metadata.model_preference}")
|
|
582
631
|
content.append(f"**Version**: {definition.metadata.version}")
|
|
583
632
|
if definition.metadata.last_updated:
|
|
584
|
-
content.append(
|
|
585
|
-
|
|
633
|
+
content.append(
|
|
634
|
+
f"**Last Updated**: {definition.metadata.last_updated.strftime('%Y-%m-%d %H:%M:%S')}"
|
|
635
|
+
)
|
|
636
|
+
|
|
586
637
|
# Combine with frontmatter
|
|
587
|
-
post = frontmatter.Post(
|
|
638
|
+
post = frontmatter.Post("\n".join(content), **frontmatter_data)
|
|
588
639
|
return frontmatter.dumps(post)
|
|
589
|
-
|
|
640
|
+
|
|
590
641
|
def _clear_agent_cache(self, name: str):
|
|
591
642
|
"""Clear cache for a specific agent."""
|
|
592
643
|
try:
|
|
593
644
|
cache_key = f"agent_prompt:{name}:md"
|
|
594
645
|
self.cache.invalidate(cache_key)
|
|
595
646
|
except Exception as e:
|
|
596
|
-
logger.warning(f"Failed to clear cache for agent '{name}': {e}")
|
|
647
|
+
logger.warning(f"Failed to clear cache for agent '{name}': {e}")
|