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/core/interfaces.py
CHANGED
|
@@ -2,13 +2,21 @@
|
|
|
2
2
|
Core Service Interfaces for Claude PM Framework
|
|
3
3
|
==============================================
|
|
4
4
|
|
|
5
|
-
This
|
|
5
|
+
DEPRECATED: This file has been moved to services/core/interfaces.py
|
|
6
|
+
|
|
7
|
+
This file is maintained for backward compatibility only.
|
|
8
|
+
All new code should import from claude_mpm.services.core.interfaces
|
|
9
|
+
|
|
10
|
+
Part of TSK-0046: Service Layer Architecture Reorganization
|
|
11
|
+
|
|
12
|
+
Original description:
|
|
13
|
+
This module defines the core service interfaces that establish contracts for
|
|
6
14
|
dependency injection, service discovery, and framework orchestration.
|
|
7
15
|
|
|
8
16
|
Phase 1 Refactoring: Interface extraction and dependency injection foundation
|
|
9
17
|
- IServiceContainer: Dependency injection container
|
|
10
18
|
- IAgentRegistry: Agent discovery and management
|
|
11
|
-
- IPromptCache: Performance-critical caching
|
|
19
|
+
- IPromptCache: Performance-critical caching
|
|
12
20
|
- IHealthMonitor: Service health monitoring
|
|
13
21
|
- IConfigurationManager: Configuration management
|
|
14
22
|
- ITemplateManager: Template processing and rendering
|
|
@@ -17,145 +25,186 @@ Phase 1 Refactoring: Interface extraction and dependency injection foundation
|
|
|
17
25
|
These interfaces reduce cyclomatic complexity and establish clean separation of concerns.
|
|
18
26
|
"""
|
|
19
27
|
|
|
28
|
+
# Keep original imports to prevent any parsing issues
|
|
20
29
|
from abc import ABC, abstractmethod
|
|
21
|
-
from typing import Any, Dict, List, Optional, Set, Tuple, Union, TypeVar, Generic
|
|
22
30
|
from dataclasses import dataclass
|
|
23
31
|
from datetime import datetime
|
|
24
32
|
from pathlib import Path
|
|
25
|
-
import
|
|
33
|
+
from typing import Any, Dict, Generic, List, Optional, Tuple, TypeVar
|
|
34
|
+
|
|
35
|
+
# Re-export everything from the new location for backward compatibility
|
|
36
|
+
from claude_mpm.services.core.interfaces import ( # noqa: F401
|
|
37
|
+
AgentCapabilitiesInterface,
|
|
38
|
+
AgentDeploymentInterface,
|
|
39
|
+
AgentMetadata,
|
|
40
|
+
CacheEntry,
|
|
41
|
+
CommandHandlerInterface,
|
|
42
|
+
HealthStatus,
|
|
43
|
+
HookServiceInterface,
|
|
44
|
+
IAgentRecommender,
|
|
45
|
+
IAgentRegistry,
|
|
46
|
+
IAutoConfigManager,
|
|
47
|
+
ICacheService,
|
|
48
|
+
IConfigurationManager,
|
|
49
|
+
IConfigurationService,
|
|
50
|
+
ICrashDetector,
|
|
51
|
+
IDeploymentStateManager,
|
|
52
|
+
IErrorHandler,
|
|
53
|
+
IEventBus,
|
|
54
|
+
IHealthCheck,
|
|
55
|
+
IHealthCheckManager,
|
|
56
|
+
IHealthMonitor,
|
|
57
|
+
ILocalProcessManager,
|
|
58
|
+
ILogMonitor,
|
|
59
|
+
IMemoryLeakDetector,
|
|
60
|
+
IModelProvider,
|
|
61
|
+
IModelRouter,
|
|
62
|
+
InterfaceRegistry,
|
|
63
|
+
IPerformanceMonitor,
|
|
64
|
+
IPromptCache,
|
|
65
|
+
IResourceMonitor,
|
|
66
|
+
IRestartManager,
|
|
67
|
+
IRestartPolicy,
|
|
68
|
+
IServiceContainer,
|
|
69
|
+
IServiceFactory,
|
|
70
|
+
IServiceLifecycle,
|
|
71
|
+
IStructuredLogger,
|
|
72
|
+
ITemplateManager,
|
|
73
|
+
IToolchainAnalyzer,
|
|
74
|
+
MemoryHookInterface,
|
|
75
|
+
MemoryServiceInterface,
|
|
76
|
+
ModelCapability,
|
|
77
|
+
ModelProvider,
|
|
78
|
+
ModelResponse,
|
|
79
|
+
ProjectAnalyzerInterface,
|
|
80
|
+
RunnerConfigurationInterface,
|
|
81
|
+
ServiceType,
|
|
82
|
+
SessionManagementInterface,
|
|
83
|
+
SocketIOServiceInterface,
|
|
84
|
+
SubprocessLauncherInterface,
|
|
85
|
+
SystemInstructionsInterface,
|
|
86
|
+
T,
|
|
87
|
+
TemplateRenderContext,
|
|
88
|
+
TicketManagerInterface,
|
|
89
|
+
UtilityServiceInterface,
|
|
90
|
+
VersionServiceInterface,
|
|
91
|
+
)
|
|
26
92
|
|
|
27
93
|
# Type variables for generic interfaces
|
|
28
|
-
T = TypeVar(
|
|
29
|
-
ServiceType = TypeVar(
|
|
94
|
+
T = TypeVar("T")
|
|
95
|
+
ServiceType = TypeVar("ServiceType")
|
|
30
96
|
|
|
31
97
|
|
|
32
98
|
# Core dependency injection interfaces
|
|
33
99
|
class IServiceContainer(ABC):
|
|
34
100
|
"""Service container interface for dependency injection"""
|
|
35
|
-
|
|
101
|
+
|
|
36
102
|
@abstractmethod
|
|
37
|
-
def register(
|
|
103
|
+
def register(
|
|
104
|
+
self, service_type: type, implementation: type, singleton: bool = True
|
|
105
|
+
) -> None:
|
|
38
106
|
"""Register a service implementation"""
|
|
39
|
-
|
|
40
|
-
|
|
107
|
+
|
|
41
108
|
@abstractmethod
|
|
42
109
|
def register_instance(self, service_type: type, instance: Any) -> None:
|
|
43
110
|
"""Register a service instance"""
|
|
44
|
-
|
|
45
|
-
|
|
111
|
+
|
|
46
112
|
@abstractmethod
|
|
47
113
|
def resolve(self, service_type: type) -> Any:
|
|
48
114
|
"""Resolve a service by type"""
|
|
49
|
-
|
|
50
|
-
|
|
115
|
+
|
|
51
116
|
@abstractmethod
|
|
52
117
|
def resolve_all(self, service_type: type) -> List[Any]:
|
|
53
118
|
"""Resolve all implementations of a service type"""
|
|
54
|
-
|
|
55
|
-
|
|
119
|
+
|
|
56
120
|
@abstractmethod
|
|
57
121
|
def is_registered(self, service_type: type) -> bool:
|
|
58
122
|
"""Check if a service type is registered"""
|
|
59
|
-
pass
|
|
60
123
|
|
|
61
124
|
|
|
62
125
|
# Configuration management interfaces
|
|
63
126
|
class IConfigurationService(ABC):
|
|
64
127
|
"""Interface for configuration service (legacy compatibility)"""
|
|
65
|
-
|
|
128
|
+
|
|
66
129
|
@abstractmethod
|
|
67
130
|
def get(self, key: str, default: Any = None) -> Any:
|
|
68
131
|
"""Get configuration value by key"""
|
|
69
|
-
|
|
70
|
-
|
|
132
|
+
|
|
71
133
|
@abstractmethod
|
|
72
134
|
def set(self, key: str, value: Any) -> None:
|
|
73
135
|
"""Set configuration value"""
|
|
74
|
-
|
|
75
|
-
|
|
136
|
+
|
|
76
137
|
@abstractmethod
|
|
77
138
|
def initialize(self) -> bool:
|
|
78
139
|
"""Initialize configuration service"""
|
|
79
|
-
|
|
80
|
-
|
|
140
|
+
|
|
81
141
|
@abstractmethod
|
|
82
142
|
def shutdown(self) -> None:
|
|
83
143
|
"""Shutdown configuration service"""
|
|
84
|
-
|
|
144
|
+
|
|
85
145
|
|
|
86
146
|
class IConfigurationManager(ABC):
|
|
87
147
|
"""Interface for configuration management and validation"""
|
|
88
|
-
|
|
148
|
+
|
|
89
149
|
@abstractmethod
|
|
90
150
|
def get(self, key: str, default: Any = None) -> Any:
|
|
91
151
|
"""Get configuration value by key"""
|
|
92
|
-
|
|
93
|
-
|
|
152
|
+
|
|
94
153
|
@abstractmethod
|
|
95
154
|
def set(self, key: str, value: Any) -> None:
|
|
96
155
|
"""Set configuration value"""
|
|
97
|
-
|
|
98
|
-
|
|
156
|
+
|
|
99
157
|
@abstractmethod
|
|
100
158
|
def get_section(self, section: str) -> Dict[str, Any]:
|
|
101
159
|
"""Get entire configuration section"""
|
|
102
|
-
|
|
103
|
-
|
|
160
|
+
|
|
104
161
|
@abstractmethod
|
|
105
162
|
def validate_schema(self, schema: Dict[str, Any]) -> bool:
|
|
106
163
|
"""Validate configuration against schema"""
|
|
107
|
-
|
|
108
|
-
|
|
164
|
+
|
|
109
165
|
@abstractmethod
|
|
110
166
|
def reload(self) -> None:
|
|
111
167
|
"""Reload configuration from sources"""
|
|
112
|
-
|
|
113
|
-
|
|
168
|
+
|
|
114
169
|
@abstractmethod
|
|
115
170
|
def watch_changes(self, callback: callable) -> None:
|
|
116
171
|
"""Watch for configuration changes"""
|
|
117
|
-
pass
|
|
118
172
|
|
|
119
173
|
|
|
120
174
|
# Cache service interface
|
|
121
175
|
class ICacheService(ABC):
|
|
122
176
|
"""Interface for cache service operations"""
|
|
123
|
-
|
|
177
|
+
|
|
124
178
|
@abstractmethod
|
|
125
179
|
def get(self, key: str) -> Any:
|
|
126
180
|
"""Get value from cache"""
|
|
127
|
-
|
|
128
|
-
|
|
181
|
+
|
|
129
182
|
@abstractmethod
|
|
130
183
|
def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
|
|
131
184
|
"""Set value in cache with optional TTL"""
|
|
132
|
-
|
|
133
|
-
|
|
185
|
+
|
|
134
186
|
@abstractmethod
|
|
135
187
|
def delete(self, key: str) -> bool:
|
|
136
188
|
"""Delete key from cache"""
|
|
137
|
-
|
|
138
|
-
|
|
189
|
+
|
|
139
190
|
@abstractmethod
|
|
140
191
|
def invalidate(self, pattern: str) -> int:
|
|
141
192
|
"""Invalidate keys matching pattern"""
|
|
142
|
-
|
|
143
|
-
|
|
193
|
+
|
|
144
194
|
@abstractmethod
|
|
145
195
|
def clear(self) -> None:
|
|
146
196
|
"""Clear all cache entries"""
|
|
147
|
-
|
|
148
|
-
|
|
197
|
+
|
|
149
198
|
@abstractmethod
|
|
150
199
|
def get_cache_metrics(self) -> Dict[str, Any]:
|
|
151
200
|
"""Get cache performance metrics"""
|
|
152
|
-
pass
|
|
153
201
|
|
|
154
202
|
|
|
155
203
|
# Health monitoring interface
|
|
156
204
|
@dataclass
|
|
157
205
|
class HealthStatus:
|
|
158
206
|
"""Health status data structure"""
|
|
207
|
+
|
|
159
208
|
status: str # healthy, degraded, unhealthy, unknown
|
|
160
209
|
message: str
|
|
161
210
|
timestamp: datetime
|
|
@@ -165,37 +214,33 @@ class HealthStatus:
|
|
|
165
214
|
|
|
166
215
|
class IHealthMonitor(ABC):
|
|
167
216
|
"""Interface for service health monitoring"""
|
|
168
|
-
|
|
217
|
+
|
|
169
218
|
@abstractmethod
|
|
170
219
|
async def check_health(self, service_name: str) -> HealthStatus:
|
|
171
220
|
"""Check health of a specific service"""
|
|
172
|
-
|
|
173
|
-
|
|
221
|
+
|
|
174
222
|
@abstractmethod
|
|
175
223
|
async def get_system_health(self) -> HealthStatus:
|
|
176
224
|
"""Get overall system health"""
|
|
177
|
-
|
|
178
|
-
|
|
225
|
+
|
|
179
226
|
@abstractmethod
|
|
180
227
|
def register_health_check(self, service_name: str, check_func: callable) -> None:
|
|
181
228
|
"""Register a health check function"""
|
|
182
|
-
|
|
183
|
-
|
|
229
|
+
|
|
184
230
|
@abstractmethod
|
|
185
231
|
async def start_monitoring(self) -> None:
|
|
186
232
|
"""Start health monitoring"""
|
|
187
|
-
|
|
188
|
-
|
|
233
|
+
|
|
189
234
|
@abstractmethod
|
|
190
235
|
async def stop_monitoring(self) -> None:
|
|
191
236
|
"""Stop health monitoring"""
|
|
192
|
-
pass
|
|
193
237
|
|
|
194
238
|
|
|
195
239
|
# Agent registry interface
|
|
196
240
|
@dataclass
|
|
197
241
|
class AgentMetadata:
|
|
198
242
|
"""Enhanced agent metadata with specialization and model configuration support"""
|
|
243
|
+
|
|
199
244
|
name: str
|
|
200
245
|
type: str
|
|
201
246
|
path: str
|
|
@@ -213,7 +258,7 @@ class AgentMetadata:
|
|
|
213
258
|
# Model configuration fields
|
|
214
259
|
preferred_model: Optional[str] = None
|
|
215
260
|
model_config: Optional[Dict[str, Any]] = None
|
|
216
|
-
|
|
261
|
+
|
|
217
262
|
def __post_init__(self):
|
|
218
263
|
"""Initialize default values for list fields"""
|
|
219
264
|
if self.capabilities is None:
|
|
@@ -232,42 +277,41 @@ class AgentMetadata:
|
|
|
232
277
|
|
|
233
278
|
class IAgentRegistry(ABC):
|
|
234
279
|
"""Interface for agent discovery and management"""
|
|
235
|
-
|
|
280
|
+
|
|
236
281
|
@abstractmethod
|
|
237
|
-
async def discover_agents(
|
|
282
|
+
async def discover_agents(
|
|
283
|
+
self, force_refresh: bool = False
|
|
284
|
+
) -> Dict[str, AgentMetadata]:
|
|
238
285
|
"""Discover all available agents"""
|
|
239
|
-
|
|
240
|
-
|
|
286
|
+
|
|
241
287
|
@abstractmethod
|
|
242
288
|
async def get_agent(self, agent_name: str) -> Optional[AgentMetadata]:
|
|
243
289
|
"""Get specific agent metadata"""
|
|
244
|
-
|
|
245
|
-
|
|
290
|
+
|
|
246
291
|
@abstractmethod
|
|
247
|
-
async def list_agents(
|
|
292
|
+
async def list_agents(
|
|
293
|
+
self, agent_type: Optional[str] = None, tier: Optional[str] = None
|
|
294
|
+
) -> List[AgentMetadata]:
|
|
248
295
|
"""List agents with optional filtering"""
|
|
249
|
-
|
|
250
|
-
|
|
296
|
+
|
|
251
297
|
@abstractmethod
|
|
252
298
|
async def get_specialized_agents(self, agent_type: str) -> List[AgentMetadata]:
|
|
253
299
|
"""Get agents of a specific specialized type"""
|
|
254
|
-
|
|
255
|
-
|
|
300
|
+
|
|
256
301
|
@abstractmethod
|
|
257
302
|
async def search_by_capability(self, capability: str) -> List[AgentMetadata]:
|
|
258
303
|
"""Search agents by capability"""
|
|
259
|
-
|
|
260
|
-
|
|
304
|
+
|
|
261
305
|
@abstractmethod
|
|
262
306
|
async def get_registry_stats(self) -> Dict[str, Any]:
|
|
263
307
|
"""Get registry statistics"""
|
|
264
|
-
pass
|
|
265
308
|
|
|
266
309
|
|
|
267
310
|
# Prompt cache interface
|
|
268
311
|
@dataclass
|
|
269
312
|
class CacheEntry:
|
|
270
313
|
"""Cache entry with metadata"""
|
|
314
|
+
|
|
271
315
|
key: str
|
|
272
316
|
value: Any
|
|
273
317
|
created_at: float
|
|
@@ -276,7 +320,7 @@ class CacheEntry:
|
|
|
276
320
|
last_accessed: float = 0.0
|
|
277
321
|
size_bytes: int = 0
|
|
278
322
|
metadata: Dict[str, Any] = None
|
|
279
|
-
|
|
323
|
+
|
|
280
324
|
def __post_init__(self):
|
|
281
325
|
if self.metadata is None:
|
|
282
326
|
self.metadata = {}
|
|
@@ -284,42 +328,43 @@ class CacheEntry:
|
|
|
284
328
|
|
|
285
329
|
class IPromptCache(ABC):
|
|
286
330
|
"""Interface for high-performance prompt caching"""
|
|
287
|
-
|
|
331
|
+
|
|
288
332
|
@abstractmethod
|
|
289
333
|
def get(self, key: str) -> Optional[Any]:
|
|
290
334
|
"""Get cached value by key"""
|
|
291
|
-
|
|
292
|
-
|
|
335
|
+
|
|
293
336
|
@abstractmethod
|
|
294
|
-
def set(
|
|
337
|
+
def set(
|
|
338
|
+
self,
|
|
339
|
+
key: str,
|
|
340
|
+
value: Any,
|
|
341
|
+
ttl: Optional[float] = None,
|
|
342
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
343
|
+
) -> bool:
|
|
295
344
|
"""Set cached value with optional TTL"""
|
|
296
|
-
|
|
297
|
-
|
|
345
|
+
|
|
298
346
|
@abstractmethod
|
|
299
347
|
def delete(self, key: str) -> bool:
|
|
300
348
|
"""Delete cached value"""
|
|
301
|
-
|
|
302
|
-
|
|
349
|
+
|
|
303
350
|
@abstractmethod
|
|
304
351
|
def invalidate(self, pattern: str) -> int:
|
|
305
352
|
"""Invalidate cached values matching pattern"""
|
|
306
|
-
|
|
307
|
-
|
|
353
|
+
|
|
308
354
|
@abstractmethod
|
|
309
355
|
def clear(self) -> None:
|
|
310
356
|
"""Clear all cached values"""
|
|
311
|
-
|
|
312
|
-
|
|
357
|
+
|
|
313
358
|
@abstractmethod
|
|
314
359
|
def get_metrics(self) -> Dict[str, Any]:
|
|
315
360
|
"""Get cache performance metrics"""
|
|
316
|
-
pass
|
|
317
361
|
|
|
318
362
|
|
|
319
363
|
# Template management interface
|
|
320
364
|
@dataclass
|
|
321
365
|
class TemplateRenderContext:
|
|
322
366
|
"""Context for template rendering"""
|
|
367
|
+
|
|
323
368
|
variables: Dict[str, Any]
|
|
324
369
|
metadata: Dict[str, Any]
|
|
325
370
|
target_path: Optional[Path] = None
|
|
@@ -328,212 +373,573 @@ class TemplateRenderContext:
|
|
|
328
373
|
|
|
329
374
|
class ITemplateManager(ABC):
|
|
330
375
|
"""Interface for template processing and rendering"""
|
|
331
|
-
|
|
376
|
+
|
|
332
377
|
@abstractmethod
|
|
333
|
-
async def render_template(
|
|
378
|
+
async def render_template(
|
|
379
|
+
self, template_content: str, context: TemplateRenderContext
|
|
380
|
+
) -> str:
|
|
334
381
|
"""Render template with given context"""
|
|
335
|
-
|
|
336
|
-
|
|
382
|
+
|
|
337
383
|
@abstractmethod
|
|
338
384
|
async def load_template(self, template_id: str) -> Optional[str]:
|
|
339
385
|
"""Load template by ID"""
|
|
340
|
-
|
|
341
|
-
|
|
386
|
+
|
|
342
387
|
@abstractmethod
|
|
343
388
|
async def validate_template(self, template_content: str) -> Tuple[bool, List[str]]:
|
|
344
389
|
"""Validate template syntax and variables"""
|
|
345
|
-
|
|
346
|
-
|
|
390
|
+
|
|
347
391
|
@abstractmethod
|
|
348
392
|
def register_template_function(self, name: str, func: callable) -> None:
|
|
349
393
|
"""Register custom template function"""
|
|
350
|
-
pass
|
|
351
394
|
|
|
352
395
|
|
|
353
396
|
# Service factory interface
|
|
354
397
|
class IServiceFactory(Generic[ServiceType], ABC):
|
|
355
398
|
"""Generic interface for service factories"""
|
|
356
|
-
|
|
399
|
+
|
|
357
400
|
@abstractmethod
|
|
358
401
|
def create(self, **kwargs) -> ServiceType:
|
|
359
402
|
"""Create service instance"""
|
|
360
|
-
|
|
361
|
-
|
|
403
|
+
|
|
362
404
|
@abstractmethod
|
|
363
405
|
def create_with_config(self, config: Dict[str, Any]) -> ServiceType:
|
|
364
406
|
"""Create service instance with configuration"""
|
|
365
|
-
|
|
366
|
-
|
|
407
|
+
|
|
367
408
|
@abstractmethod
|
|
368
409
|
def supports_type(self, service_type: type) -> bool:
|
|
369
410
|
"""Check if factory supports service type"""
|
|
370
|
-
pass
|
|
371
411
|
|
|
372
412
|
|
|
373
413
|
# Logging interface
|
|
374
414
|
class IStructuredLogger(ABC):
|
|
375
415
|
"""Interface for structured logging"""
|
|
376
|
-
|
|
416
|
+
|
|
377
417
|
@abstractmethod
|
|
378
418
|
def debug(self, message: str, **kwargs) -> None:
|
|
379
419
|
"""Log debug message with structured data"""
|
|
380
|
-
|
|
381
|
-
|
|
420
|
+
|
|
382
421
|
@abstractmethod
|
|
383
422
|
def info(self, message: str, **kwargs) -> None:
|
|
384
423
|
"""Log info message with structured data"""
|
|
385
|
-
|
|
386
|
-
|
|
424
|
+
|
|
387
425
|
@abstractmethod
|
|
388
426
|
def warning(self, message: str, **kwargs) -> None:
|
|
389
427
|
"""Log warning message with structured data"""
|
|
390
|
-
|
|
391
|
-
|
|
428
|
+
|
|
392
429
|
@abstractmethod
|
|
393
430
|
def error(self, message: str, **kwargs) -> None:
|
|
394
431
|
"""Log error message with structured data"""
|
|
395
|
-
|
|
396
|
-
|
|
432
|
+
|
|
397
433
|
@abstractmethod
|
|
398
434
|
def critical(self, message: str, **kwargs) -> None:
|
|
399
435
|
"""Log critical message with structured data"""
|
|
400
|
-
|
|
401
|
-
|
|
436
|
+
|
|
402
437
|
@abstractmethod
|
|
403
438
|
def set_context(self, **kwargs) -> None:
|
|
404
439
|
"""Set logging context for all subsequent messages"""
|
|
405
|
-
pass
|
|
406
440
|
|
|
407
441
|
|
|
408
442
|
# Service lifecycle interface
|
|
409
443
|
class IServiceLifecycle(ABC):
|
|
410
444
|
"""Interface for service lifecycle management"""
|
|
411
|
-
|
|
445
|
+
|
|
412
446
|
@abstractmethod
|
|
413
447
|
async def initialize(self) -> None:
|
|
414
448
|
"""Initialize the service"""
|
|
415
|
-
|
|
416
|
-
|
|
449
|
+
|
|
417
450
|
@abstractmethod
|
|
418
451
|
async def start(self) -> None:
|
|
419
452
|
"""Start the service"""
|
|
420
|
-
|
|
421
|
-
|
|
453
|
+
|
|
422
454
|
@abstractmethod
|
|
423
455
|
async def stop(self) -> None:
|
|
424
456
|
"""Stop the service"""
|
|
425
|
-
|
|
426
|
-
|
|
457
|
+
|
|
427
458
|
@abstractmethod
|
|
428
459
|
async def restart(self) -> None:
|
|
429
460
|
"""Restart the service"""
|
|
430
|
-
|
|
431
|
-
|
|
461
|
+
|
|
432
462
|
@abstractmethod
|
|
433
463
|
def is_running(self) -> bool:
|
|
434
464
|
"""Check if service is running"""
|
|
435
|
-
pass
|
|
436
465
|
|
|
437
466
|
|
|
438
467
|
# Error handling interface
|
|
439
468
|
class IErrorHandler(ABC):
|
|
440
469
|
"""Interface for centralized error handling"""
|
|
441
|
-
|
|
470
|
+
|
|
442
471
|
@abstractmethod
|
|
443
472
|
def handle_error(self, error: Exception, context: Dict[str, Any]) -> None:
|
|
444
473
|
"""Handle error with context"""
|
|
445
|
-
|
|
446
|
-
|
|
474
|
+
|
|
447
475
|
@abstractmethod
|
|
448
476
|
def register_error_handler(self, error_type: type, handler: callable) -> None:
|
|
449
477
|
"""Register error handler for specific error type"""
|
|
450
|
-
|
|
451
|
-
|
|
478
|
+
|
|
452
479
|
@abstractmethod
|
|
453
480
|
def get_error_stats(self) -> Dict[str, Any]:
|
|
454
481
|
"""Get error statistics"""
|
|
455
|
-
pass
|
|
456
482
|
|
|
457
483
|
|
|
458
484
|
# Performance monitoring interface
|
|
459
485
|
class IPerformanceMonitor(ABC):
|
|
460
486
|
"""Interface for performance monitoring"""
|
|
461
|
-
|
|
487
|
+
|
|
462
488
|
@abstractmethod
|
|
463
489
|
def start_timer(self, operation: str) -> str:
|
|
464
490
|
"""Start timing an operation"""
|
|
465
|
-
|
|
466
|
-
|
|
491
|
+
|
|
467
492
|
@abstractmethod
|
|
468
493
|
def stop_timer(self, timer_id: str) -> float:
|
|
469
494
|
"""Stop timing and return duration"""
|
|
470
|
-
|
|
471
|
-
|
|
495
|
+
|
|
472
496
|
@abstractmethod
|
|
473
|
-
def record_metric(
|
|
497
|
+
def record_metric(
|
|
498
|
+
self, name: str, value: float, tags: Optional[Dict[str, str]] = None
|
|
499
|
+
) -> None:
|
|
474
500
|
"""Record a performance metric"""
|
|
475
|
-
|
|
476
|
-
|
|
501
|
+
|
|
477
502
|
@abstractmethod
|
|
478
503
|
def get_metrics(self) -> Dict[str, Any]:
|
|
479
504
|
"""Get performance metrics"""
|
|
480
|
-
pass
|
|
481
505
|
|
|
482
506
|
|
|
483
507
|
# Event system interface
|
|
484
508
|
class IEventBus(ABC):
|
|
485
509
|
"""Interface for event-driven communication"""
|
|
486
|
-
|
|
510
|
+
|
|
487
511
|
@abstractmethod
|
|
488
512
|
def publish(self, event_type: str, data: Any) -> None:
|
|
489
513
|
"""Publish an event"""
|
|
490
|
-
|
|
491
|
-
|
|
514
|
+
|
|
492
515
|
@abstractmethod
|
|
493
516
|
def subscribe(self, event_type: str, handler: callable) -> str:
|
|
494
517
|
"""Subscribe to events"""
|
|
495
|
-
|
|
496
|
-
|
|
518
|
+
|
|
497
519
|
@abstractmethod
|
|
498
520
|
def unsubscribe(self, subscription_id: str) -> None:
|
|
499
521
|
"""Unsubscribe from events"""
|
|
500
|
-
|
|
501
|
-
|
|
522
|
+
|
|
502
523
|
@abstractmethod
|
|
503
524
|
async def publish_async(self, event_type: str, data: Any) -> None:
|
|
504
525
|
"""Publish an event asynchronously"""
|
|
505
|
-
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
# Agent deployment interface
|
|
529
|
+
class AgentDeploymentInterface(ABC):
|
|
530
|
+
"""Interface for agent deployment operations.
|
|
531
|
+
|
|
532
|
+
WHY: Agent deployment needs to be decoupled from concrete implementations
|
|
533
|
+
to enable different deployment strategies (local, remote, containerized).
|
|
534
|
+
This interface ensures consistency across different deployment backends.
|
|
535
|
+
|
|
536
|
+
DESIGN DECISION: Methods return deployment status/results to enable
|
|
537
|
+
proper error handling and rollback operations when deployments fail.
|
|
538
|
+
"""
|
|
539
|
+
|
|
540
|
+
@abstractmethod
|
|
541
|
+
def deploy_agents(
|
|
542
|
+
self, force: bool = False, include_all: bool = False
|
|
543
|
+
) -> Dict[str, Any]:
|
|
544
|
+
"""Deploy agents to target environment.
|
|
545
|
+
|
|
546
|
+
Args:
|
|
547
|
+
force: Force deployment even if agents already exist
|
|
548
|
+
include_all: Include all agents, ignoring exclusion lists
|
|
549
|
+
|
|
550
|
+
Returns:
|
|
551
|
+
Dictionary with deployment results and status
|
|
552
|
+
"""
|
|
553
|
+
|
|
554
|
+
@abstractmethod
|
|
555
|
+
def validate_agent(self, agent_path: Path) -> Tuple[bool, List[str]]:
|
|
556
|
+
"""Validate agent configuration and structure.
|
|
557
|
+
|
|
558
|
+
Args:
|
|
559
|
+
agent_path: Path to agent configuration file
|
|
560
|
+
|
|
561
|
+
Returns:
|
|
562
|
+
Tuple of (is_valid, list_of_errors)
|
|
563
|
+
"""
|
|
564
|
+
|
|
565
|
+
@abstractmethod
|
|
566
|
+
def clean_deployment(self, preserve_user_agents: bool = True) -> bool:
|
|
567
|
+
"""Clean up deployed agents.
|
|
568
|
+
|
|
569
|
+
Args:
|
|
570
|
+
preserve_user_agents: Whether to keep user-created agents
|
|
571
|
+
|
|
572
|
+
Returns:
|
|
573
|
+
True if cleanup successful
|
|
574
|
+
"""
|
|
575
|
+
|
|
576
|
+
@abstractmethod
|
|
577
|
+
def get_deployment_status(self) -> Dict[str, Any]:
|
|
578
|
+
"""Get current deployment status and metrics.
|
|
579
|
+
|
|
580
|
+
Returns:
|
|
581
|
+
Dictionary with deployment status information
|
|
582
|
+
"""
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
# Memory service interface
|
|
586
|
+
class MemoryServiceInterface(ABC):
|
|
587
|
+
"""Interface for memory management operations.
|
|
588
|
+
|
|
589
|
+
WHY: Memory management is crucial for agent learning and context retention.
|
|
590
|
+
This interface abstracts memory storage, retrieval, and optimization to
|
|
591
|
+
enable different backends (file-based, database, distributed cache).
|
|
592
|
+
|
|
593
|
+
DESIGN DECISION: Memory operations return success/failure status to enable
|
|
594
|
+
proper error handling and fallback strategies when memory is unavailable.
|
|
595
|
+
"""
|
|
596
|
+
|
|
597
|
+
@abstractmethod
|
|
598
|
+
def load_memory(self, agent_id: str) -> Optional[str]:
|
|
599
|
+
"""Load memory for a specific agent.
|
|
600
|
+
|
|
601
|
+
Args:
|
|
602
|
+
agent_id: Identifier of the agent
|
|
603
|
+
|
|
604
|
+
Returns:
|
|
605
|
+
Memory content as string or None if not found
|
|
606
|
+
"""
|
|
607
|
+
|
|
608
|
+
@abstractmethod
|
|
609
|
+
def save_memory(self, agent_id: str, content: str) -> bool:
|
|
610
|
+
"""Save memory for a specific agent.
|
|
611
|
+
|
|
612
|
+
Args:
|
|
613
|
+
agent_id: Identifier of the agent
|
|
614
|
+
content: Memory content to save
|
|
615
|
+
|
|
616
|
+
Returns:
|
|
617
|
+
True if save successful
|
|
618
|
+
"""
|
|
619
|
+
|
|
620
|
+
@abstractmethod
|
|
621
|
+
def validate_memory_size(self, content: str) -> Tuple[bool, Optional[str]]:
|
|
622
|
+
"""Validate memory content size and structure.
|
|
623
|
+
|
|
624
|
+
Args:
|
|
625
|
+
content: Memory content to validate
|
|
626
|
+
|
|
627
|
+
Returns:
|
|
628
|
+
Tuple of (is_valid, error_message)
|
|
629
|
+
"""
|
|
630
|
+
|
|
631
|
+
@abstractmethod
|
|
632
|
+
def optimize_memory(self, agent_id: str) -> bool:
|
|
633
|
+
"""Optimize memory by removing duplicates and consolidating entries.
|
|
634
|
+
|
|
635
|
+
Args:
|
|
636
|
+
agent_id: Identifier of the agent
|
|
637
|
+
|
|
638
|
+
Returns:
|
|
639
|
+
True if optimization successful
|
|
640
|
+
"""
|
|
641
|
+
|
|
642
|
+
@abstractmethod
|
|
643
|
+
def get_memory_metrics(self, agent_id: Optional[str] = None) -> Dict[str, Any]:
|
|
644
|
+
"""Get memory usage metrics.
|
|
645
|
+
|
|
646
|
+
Args:
|
|
647
|
+
agent_id: Optional specific agent ID, or None for all
|
|
648
|
+
|
|
649
|
+
Returns:
|
|
650
|
+
Dictionary with memory metrics
|
|
651
|
+
"""
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
# Hook service interface
|
|
655
|
+
class HookServiceInterface(ABC):
|
|
656
|
+
"""Interface for hook execution operations.
|
|
657
|
+
|
|
658
|
+
WHY: Hooks provide extensibility points for the framework, allowing plugins
|
|
659
|
+
and extensions to modify behavior. This interface ensures consistent hook
|
|
660
|
+
registration, priority handling, and execution across different hook systems.
|
|
661
|
+
|
|
662
|
+
DESIGN DECISION: Separate pre/post delegation methods for clarity and
|
|
663
|
+
performance - no runtime type checking needed during execution.
|
|
664
|
+
"""
|
|
665
|
+
|
|
666
|
+
@abstractmethod
|
|
667
|
+
def register_hook(self, hook: Any) -> bool:
|
|
668
|
+
"""Register a hook with the service.
|
|
669
|
+
|
|
670
|
+
Args:
|
|
671
|
+
hook: Hook instance to register
|
|
672
|
+
|
|
673
|
+
Returns:
|
|
674
|
+
True if registration successful
|
|
675
|
+
"""
|
|
676
|
+
|
|
677
|
+
@abstractmethod
|
|
678
|
+
def execute_pre_delegation_hooks(self, context: Any) -> Any:
|
|
679
|
+
"""Execute all pre-delegation hooks.
|
|
680
|
+
|
|
681
|
+
Args:
|
|
682
|
+
context: Hook execution context
|
|
683
|
+
|
|
684
|
+
Returns:
|
|
685
|
+
Hook execution result
|
|
686
|
+
"""
|
|
687
|
+
|
|
688
|
+
@abstractmethod
|
|
689
|
+
def execute_post_delegation_hooks(self, context: Any) -> Any:
|
|
690
|
+
"""Execute all post-delegation hooks.
|
|
691
|
+
|
|
692
|
+
Args:
|
|
693
|
+
context: Hook execution context
|
|
694
|
+
|
|
695
|
+
Returns:
|
|
696
|
+
Hook execution result
|
|
697
|
+
"""
|
|
698
|
+
|
|
699
|
+
@abstractmethod
|
|
700
|
+
def get_registered_hooks(self) -> Dict[str, List[Any]]:
|
|
701
|
+
"""Get all registered hooks by type.
|
|
702
|
+
|
|
703
|
+
Returns:
|
|
704
|
+
Dictionary mapping hook types to lists of hooks
|
|
705
|
+
"""
|
|
706
|
+
|
|
707
|
+
@abstractmethod
|
|
708
|
+
def clear_hooks(self, hook_type: Optional[str] = None) -> None:
|
|
709
|
+
"""Clear registered hooks.
|
|
710
|
+
|
|
711
|
+
Args:
|
|
712
|
+
hook_type: Optional specific hook type to clear, or None for all
|
|
713
|
+
"""
|
|
714
|
+
|
|
715
|
+
|
|
716
|
+
# WebSocket/SocketIO service interface
|
|
717
|
+
class SocketIOServiceInterface(ABC):
|
|
718
|
+
"""Interface for WebSocket communication.
|
|
719
|
+
|
|
720
|
+
WHY: Real-time communication is essential for monitoring and interactive
|
|
721
|
+
features. This interface abstracts WebSocket/SocketIO implementation to
|
|
722
|
+
enable different transport mechanisms and fallback strategies.
|
|
723
|
+
|
|
724
|
+
DESIGN DECISION: Async methods for non-blocking I/O operations, with
|
|
725
|
+
support for both broadcast and targeted messaging.
|
|
726
|
+
"""
|
|
727
|
+
|
|
728
|
+
@abstractmethod
|
|
729
|
+
async def start(self, host: str = "localhost", port: int = 8765) -> None:
|
|
730
|
+
"""Start the WebSocket server.
|
|
731
|
+
|
|
732
|
+
Args:
|
|
733
|
+
host: Host to bind to
|
|
734
|
+
port: Port to listen on
|
|
735
|
+
"""
|
|
736
|
+
|
|
737
|
+
@abstractmethod
|
|
738
|
+
async def stop(self) -> None:
|
|
739
|
+
"""Stop the WebSocket server."""
|
|
740
|
+
|
|
741
|
+
@abstractmethod
|
|
742
|
+
async def emit(self, event: str, data: Any, room: Optional[str] = None) -> None:
|
|
743
|
+
"""Emit an event to connected clients.
|
|
744
|
+
|
|
745
|
+
Args:
|
|
746
|
+
event: Event name
|
|
747
|
+
data: Event data
|
|
748
|
+
room: Optional room to target
|
|
749
|
+
"""
|
|
750
|
+
|
|
751
|
+
@abstractmethod
|
|
752
|
+
async def broadcast(self, event: str, data: Any) -> None:
|
|
753
|
+
"""Broadcast event to all connected clients.
|
|
754
|
+
|
|
755
|
+
Args:
|
|
756
|
+
event: Event name
|
|
757
|
+
data: Event data
|
|
758
|
+
"""
|
|
759
|
+
|
|
760
|
+
@abstractmethod
|
|
761
|
+
def get_connection_count(self) -> int:
|
|
762
|
+
"""Get number of connected clients.
|
|
763
|
+
|
|
764
|
+
Returns:
|
|
765
|
+
Number of active connections
|
|
766
|
+
"""
|
|
767
|
+
|
|
768
|
+
@abstractmethod
|
|
769
|
+
def is_running(self) -> bool:
|
|
770
|
+
"""Check if server is running.
|
|
771
|
+
|
|
772
|
+
Returns:
|
|
773
|
+
True if server is active
|
|
774
|
+
"""
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
# Project analyzer interface
|
|
778
|
+
class ProjectAnalyzerInterface(ABC):
|
|
779
|
+
"""Interface for project analysis operations.
|
|
780
|
+
|
|
781
|
+
WHY: Understanding project structure and characteristics is essential for
|
|
782
|
+
context-aware agent behavior. This interface abstracts project analysis
|
|
783
|
+
to support different project types and structures.
|
|
784
|
+
|
|
785
|
+
DESIGN DECISION: Returns structured data classes for type safety and
|
|
786
|
+
clear contracts between analysis and consumption components.
|
|
787
|
+
"""
|
|
788
|
+
|
|
789
|
+
@abstractmethod
|
|
790
|
+
def analyze_project(self, project_path: Optional[Path] = None) -> Any:
|
|
791
|
+
"""Analyze project characteristics.
|
|
792
|
+
|
|
793
|
+
Args:
|
|
794
|
+
project_path: Optional path to project, defaults to current
|
|
795
|
+
|
|
796
|
+
Returns:
|
|
797
|
+
ProjectCharacteristics or similar structured data
|
|
798
|
+
"""
|
|
799
|
+
|
|
800
|
+
@abstractmethod
|
|
801
|
+
def detect_technology_stack(self) -> List[str]:
|
|
802
|
+
"""Detect technologies used in the project.
|
|
803
|
+
|
|
804
|
+
Returns:
|
|
805
|
+
List of detected technologies
|
|
806
|
+
"""
|
|
807
|
+
|
|
808
|
+
@abstractmethod
|
|
809
|
+
def analyze_code_patterns(self) -> Dict[str, Any]:
|
|
810
|
+
"""Analyze code patterns and conventions.
|
|
811
|
+
|
|
812
|
+
Returns:
|
|
813
|
+
Dictionary of pattern analysis results
|
|
814
|
+
"""
|
|
815
|
+
|
|
816
|
+
@abstractmethod
|
|
817
|
+
def get_project_structure(self) -> Dict[str, Any]:
|
|
818
|
+
"""Get project directory structure analysis.
|
|
819
|
+
|
|
820
|
+
Returns:
|
|
821
|
+
Dictionary representing project structure
|
|
822
|
+
"""
|
|
823
|
+
|
|
824
|
+
@abstractmethod
|
|
825
|
+
def identify_entry_points(self) -> List[Path]:
|
|
826
|
+
"""Identify project entry points.
|
|
827
|
+
|
|
828
|
+
Returns:
|
|
829
|
+
List of entry point paths
|
|
830
|
+
"""
|
|
831
|
+
|
|
832
|
+
|
|
833
|
+
# Ticket manager interface
|
|
834
|
+
class TicketManagerInterface(ABC):
|
|
835
|
+
"""Interface for ticket management operations.
|
|
836
|
+
|
|
837
|
+
WHY: Ticket management provides work tracking and organization. This
|
|
838
|
+
interface abstracts ticket operations to support different backend
|
|
839
|
+
systems (file-based, API-based, database).
|
|
840
|
+
|
|
841
|
+
DESIGN DECISION: Uses string IDs for flexibility across different
|
|
842
|
+
ticketing systems, with structured data returns for consistency.
|
|
843
|
+
"""
|
|
844
|
+
|
|
845
|
+
@abstractmethod
|
|
846
|
+
def create_task(self, title: str, description: str, **kwargs) -> Optional[str]:
|
|
847
|
+
"""Create a new task ticket.
|
|
848
|
+
|
|
849
|
+
Args:
|
|
850
|
+
title: Task title
|
|
851
|
+
description: Task description
|
|
852
|
+
**kwargs: Additional task properties
|
|
853
|
+
|
|
854
|
+
Returns:
|
|
855
|
+
Task ID if created successfully, None otherwise
|
|
856
|
+
"""
|
|
857
|
+
|
|
858
|
+
@abstractmethod
|
|
859
|
+
def update_task(self, task_id: str, **updates) -> bool:
|
|
860
|
+
"""Update an existing task.
|
|
861
|
+
|
|
862
|
+
Args:
|
|
863
|
+
task_id: ID of task to update
|
|
864
|
+
**updates: Fields to update
|
|
865
|
+
|
|
866
|
+
Returns:
|
|
867
|
+
True if update successful
|
|
868
|
+
"""
|
|
869
|
+
|
|
870
|
+
@abstractmethod
|
|
871
|
+
def get_task(self, task_id: str) -> Optional[Dict[str, Any]]:
|
|
872
|
+
"""Get task details.
|
|
873
|
+
|
|
874
|
+
Args:
|
|
875
|
+
task_id: ID of task to retrieve
|
|
876
|
+
|
|
877
|
+
Returns:
|
|
878
|
+
Task data dictionary or None if not found
|
|
879
|
+
"""
|
|
880
|
+
|
|
881
|
+
@abstractmethod
|
|
882
|
+
def list_tasks(
|
|
883
|
+
self, status: Optional[str] = None, **filters
|
|
884
|
+
) -> List[Dict[str, Any]]:
|
|
885
|
+
"""List tasks with optional filtering.
|
|
886
|
+
|
|
887
|
+
Args:
|
|
888
|
+
status: Optional status filter
|
|
889
|
+
**filters: Additional filter criteria
|
|
890
|
+
|
|
891
|
+
Returns:
|
|
892
|
+
List of task dictionaries
|
|
893
|
+
"""
|
|
894
|
+
|
|
895
|
+
@abstractmethod
|
|
896
|
+
def close_task(self, task_id: str, resolution: Optional[str] = None) -> bool:
|
|
897
|
+
"""Close a task.
|
|
898
|
+
|
|
899
|
+
Args:
|
|
900
|
+
task_id: ID of task to close
|
|
901
|
+
resolution: Optional resolution description
|
|
902
|
+
|
|
903
|
+
Returns:
|
|
904
|
+
True if close successful
|
|
905
|
+
"""
|
|
506
906
|
|
|
507
907
|
|
|
508
908
|
# Interface registry for dependency injection discovery
|
|
509
909
|
class InterfaceRegistry:
|
|
510
910
|
"""Registry of all core interfaces for dependency injection"""
|
|
511
|
-
|
|
911
|
+
|
|
512
912
|
_interfaces = {
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
913
|
+
"service_container": IServiceContainer,
|
|
914
|
+
"configuration_manager": IConfigurationManager,
|
|
915
|
+
"health_monitor": IHealthMonitor,
|
|
916
|
+
"agent_registry": IAgentRegistry,
|
|
917
|
+
"prompt_cache": IPromptCache,
|
|
918
|
+
"template_manager": ITemplateManager,
|
|
919
|
+
"structured_logger": IStructuredLogger,
|
|
920
|
+
"service_lifecycle": IServiceLifecycle,
|
|
921
|
+
"error_handler": IErrorHandler,
|
|
922
|
+
"performance_monitor": IPerformanceMonitor,
|
|
923
|
+
"event_bus": IEventBus,
|
|
924
|
+
"agent_deployment": AgentDeploymentInterface,
|
|
925
|
+
"memory_service": MemoryServiceInterface,
|
|
926
|
+
"hook_service": HookServiceInterface,
|
|
927
|
+
"socketio_service": SocketIOServiceInterface,
|
|
928
|
+
"project_analyzer": ProjectAnalyzerInterface,
|
|
929
|
+
"ticket_manager": TicketManagerInterface,
|
|
524
930
|
}
|
|
525
|
-
|
|
931
|
+
|
|
526
932
|
@classmethod
|
|
527
933
|
def get_interface(cls, name: str) -> Optional[type]:
|
|
528
934
|
"""Get interface by name"""
|
|
529
935
|
return cls._interfaces.get(name)
|
|
530
|
-
|
|
936
|
+
|
|
531
937
|
@classmethod
|
|
532
938
|
def get_all_interfaces(cls) -> Dict[str, type]:
|
|
533
939
|
"""Get all registered interfaces"""
|
|
534
940
|
return cls._interfaces.copy()
|
|
535
|
-
|
|
941
|
+
|
|
536
942
|
@classmethod
|
|
537
943
|
def register_interface(cls, name: str, interface: type) -> None:
|
|
538
944
|
"""Register a new interface"""
|
|
539
|
-
cls._interfaces[name] = interface
|
|
945
|
+
cls._interfaces[name] = interface
|