claude-mpm 3.4.10__py3-none-any.whl → 5.4.55__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/BUILD_NUMBER +1 -0
- claude_mpm/VERSION +1 -0
- claude_mpm/__init__.py +50 -12
- claude_mpm/__main__.py +7 -2
- claude_mpm/agents/BASE_AGENT.md +164 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +290 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
- claude_mpm/agents/MEMORY.md +72 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1402 -0
- claude_mpm/agents/WORKFLOW.md +111 -0
- claude_mpm/agents/__init__.py +92 -80
- claude_mpm/agents/agent-template.yaml +83 -0
- claude_mpm/agents/agent_loader.py +560 -745
- claude_mpm/agents/agent_loader_integration.py +53 -55
- claude_mpm/agents/agents_metadata.py +186 -27
- claude_mpm/agents/async_agent_loader.py +436 -0
- claude_mpm/agents/base_agent.json +8 -4
- claude_mpm/agents/frontmatter_validator.py +754 -0
- claude_mpm/agents/system_agent_config.py +222 -155
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/__init__.py +17 -13
- claude_mpm/agents/templates/circuit-breakers.md +1391 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/git-file-tracking.md +584 -0
- claude_mpm/agents/templates/pm-examples.md +474 -0
- claude_mpm/agents/templates/pm-red-flags.md +310 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/response-format.md +583 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/agents/templates/validation-templates.md +312 -0
- claude_mpm/cli/__init__.py +90 -128
- claude_mpm/cli/__main__.py +33 -0
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/__init__.py +36 -12
- claude_mpm/cli/commands/agent_manager.py +1403 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +335 -0
- claude_mpm/cli/commands/agents.py +2503 -168
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/aggregate.py +540 -0
- claude_mpm/cli/commands/analyze.py +553 -0
- claude_mpm/cli/commands/analyze_code.py +528 -0
- claude_mpm/cli/commands/auto_configure.py +1053 -0
- claude_mpm/cli/commands/cleanup.py +588 -0
- claude_mpm/cli/commands/cleanup_orphaned_agents.py +150 -0
- claude_mpm/cli/commands/config.py +586 -0
- claude_mpm/cli/commands/configure.py +2654 -0
- claude_mpm/cli/commands/configure_agent_display.py +282 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +184 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/dashboard.py +286 -0
- claude_mpm/cli/commands/debug.py +1386 -0
- claude_mpm/cli/commands/doctor.py +243 -0
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/info.py +195 -74
- claude_mpm/cli/commands/local_deploy.py +534 -0
- claude_mpm/cli/commands/mcp.py +205 -0
- claude_mpm/cli/commands/mcp_command_router.py +161 -0
- claude_mpm/cli/commands/mcp_config.py +154 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_external_commands.py +249 -0
- claude_mpm/cli/commands/mcp_install_commands.py +346 -0
- claude_mpm/cli/commands/mcp_pipx_config.py +208 -0
- claude_mpm/cli/commands/mcp_server_commands.py +155 -0
- claude_mpm/cli/commands/mcp_setup_external.py +868 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +585 -846
- claude_mpm/cli/commands/monitor.py +228 -310
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +759 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +722 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +195 -0
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/profile.py +276 -0
- claude_mpm/cli/commands/run.py +910 -488
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +1246 -0
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/commands/tickets.py +536 -53
- claude_mpm/cli/commands/uninstall.py +176 -0
- claude_mpm/cli/commands/upgrade.py +152 -0
- claude_mpm/cli/commands/verify.py +119 -0
- claude_mpm/cli/executor.py +297 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +1947 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parser.py +87 -563
- claude_mpm/cli/parsers/__init__.py +35 -0
- claude_mpm/cli/parsers/agent_manager_parser.py +393 -0
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +575 -0
- claude_mpm/cli/parsers/analyze_code_parser.py +170 -0
- claude_mpm/cli/parsers/analyze_parser.py +135 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +120 -0
- claude_mpm/cli/parsers/base_parser.py +644 -0
- claude_mpm/cli/parsers/config_parser.py +208 -0
- claude_mpm/cli/parsers/configure_parser.py +138 -0
- claude_mpm/cli/parsers/dashboard_parser.py +113 -0
- claude_mpm/cli/parsers/debug_parser.py +319 -0
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mcp_parser.py +195 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +142 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +311 -0
- claude_mpm/cli/parsers/profile_parser.py +147 -0
- claude_mpm/cli/parsers/run_parser.py +157 -0
- claude_mpm/cli/parsers/search_parser.py +245 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +277 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/shared/__init__.py +40 -0
- claude_mpm/cli/shared/argument_patterns.py +205 -0
- claude_mpm/cli/shared/base_command.py +242 -0
- claude_mpm/cli/shared/error_handling.py +242 -0
- claude_mpm/cli/shared/output_formatters.py +241 -0
- claude_mpm/cli/startup.py +1743 -0
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/startup_logging.py +839 -0
- claude_mpm/cli/utils.py +136 -47
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +42 -64
- claude_mpm/commands/__init__.py +14 -0
- claude_mpm/commands/mpm-config.md +28 -0
- claude_mpm/commands/mpm-doctor.md +20 -0
- claude_mpm/commands/mpm-help.md +20 -0
- claude_mpm/commands/mpm-init.md +120 -0
- claude_mpm/commands/mpm-monitor.md +31 -0
- claude_mpm/commands/mpm-organize.md +120 -0
- claude_mpm/commands/mpm-postmortem.md +21 -0
- claude_mpm/commands/mpm-session-resume.md +30 -0
- claude_mpm/commands/mpm-status.md +20 -0
- claude_mpm/commands/mpm-ticket-view.md +109 -0
- claude_mpm/commands/mpm-version.md +20 -0
- claude_mpm/commands/mpm.md +31 -0
- claude_mpm/config/__init__.py +42 -2
- claude_mpm/config/agent_config.py +402 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +352 -0
- claude_mpm/config/experimental_features.py +217 -0
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/config/paths.py +258 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/config/socketio_config.py +125 -83
- claude_mpm/constants.py +132 -22
- claude_mpm/core/__init__.py +62 -36
- claude_mpm/core/agent_name_normalizer.py +71 -73
- claude_mpm/core/agent_registry.py +385 -492
- claude_mpm/core/agent_session_manager.py +81 -70
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/base_service.py +159 -122
- claude_mpm/core/cache.py +560 -0
- claude_mpm/core/claude_runner.py +696 -916
- claude_mpm/core/config.py +613 -122
- claude_mpm/core/config_aliases.py +74 -73
- claude_mpm/core/config_constants.py +314 -0
- claude_mpm/core/constants.py +361 -0
- claude_mpm/core/container.py +646 -104
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/error_handler.py +623 -0
- claude_mpm/core/exceptions.py +536 -0
- claude_mpm/core/factories.py +105 -109
- claude_mpm/core/file_utils.py +764 -0
- claude_mpm/core/framework/__init__.py +25 -0
- claude_mpm/core/framework/formatters/__init__.py +11 -0
- claude_mpm/core/framework/formatters/capability_generator.py +367 -0
- claude_mpm/core/framework/formatters/content_formatter.py +278 -0
- claude_mpm/core/framework/formatters/context_generator.py +185 -0
- claude_mpm/core/framework/loaders/__init__.py +13 -0
- claude_mpm/core/framework/loaders/agent_loader.py +213 -0
- claude_mpm/core/framework/loaders/file_loader.py +176 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +222 -0
- claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
- claude_mpm/core/framework/processors/__init__.py +11 -0
- claude_mpm/core/framework/processors/memory_processor.py +230 -0
- claude_mpm/core/framework/processors/metadata_processor.py +146 -0
- claude_mpm/core/framework/processors/template_processor.py +244 -0
- claude_mpm/core/framework_loader.py +485 -414
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +246 -86
- claude_mpm/core/hook_performance_config.py +147 -0
- claude_mpm/core/injectable_service.py +72 -63
- claude_mpm/core/instruction_reinforcement_hook.py +267 -0
- claude_mpm/core/interactive_session.py +670 -0
- claude_mpm/core/interfaces.py +570 -164
- claude_mpm/core/lazy.py +467 -0
- claude_mpm/core/log_manager.py +707 -0
- claude_mpm/core/logger.py +295 -134
- claude_mpm/core/logging_config.py +474 -0
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/minimal_framework_loader.py +24 -22
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +594 -0
- claude_mpm/core/optimized_agent_loader.py +479 -0
- claude_mpm/core/optimized_startup.py +554 -0
- claude_mpm/core/output_style_manager.py +483 -0
- claude_mpm/core/pm_hook_interceptor.py +197 -82
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/service_registry.py +153 -116
- claude_mpm/core/session_manager.py +179 -64
- claude_mpm/core/shared/__init__.py +17 -0
- claude_mpm/core/shared/config_loader.py +326 -0
- claude_mpm/core/shared/path_resolver.py +281 -0
- claude_mpm/core/shared/singleton_manager.py +221 -0
- claude_mpm/core/socketio_pool.py +400 -137
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/tool_access_control.py +64 -57
- claude_mpm/core/types.py +307 -0
- claude_mpm/core/typing_utils.py +553 -0
- claude_mpm/core/unified_agent_registry.py +969 -0
- claude_mpm/core/unified_config.py +570 -0
- claude_mpm/core/unified_paths.py +941 -0
- claude_mpm/dashboard/__init__.py +12 -0
- claude_mpm/dashboard/api/simple_directory.py +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B0uc0UOD.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7RN905-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7xVLGWV.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BIF9m_hv.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BPYeabCQ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Be7GpZd6.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bh0LDWpI.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BofRWZRR.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BovzEFCE.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C30mlcqg.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4B-KCzX.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4JcI4KD.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CBBdVcY8.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDuw-vjf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_Usid8X.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cfqx1Qun.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CiIAseT4.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CnA0NrzZ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cs_tUR18.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyWMqx4W.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzZX-COe.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzeYkLYB.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D3k0OPJN.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9lljYKQ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DGkLK5U1.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DI7hHRFL.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLVjFsZ3.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUrLdbGD.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DY1XQ8fi.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DZX00Y4g.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DaimHw_p.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +323 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dhb8PKl3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dle-35c7.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DmxopI1J.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DwBR2MJi.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/GYwsonyD.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Vzk33B_K.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ZGh7QtNv.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bT1r9zLR.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bTOqqlTd.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/eNVUfhuA.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/iEWssX7S.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/sQeU3Y1z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uuIeMWc-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.D6-I5TpK.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.m1gL8KXf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.CgNOuw-d.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
- claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
- claude_mpm/dashboard/static/svelte-build/index.html +36 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
- claude_mpm/experimental/__init__.py +10 -0
- claude_mpm/experimental/cli_enhancements.py +104 -89
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +76 -66
- claude_mpm/hooks/__init__.py +37 -1
- claude_mpm/hooks/base_hook.py +37 -32
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/connection_pool.py +250 -0
- claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +888 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +652 -875
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +10 -7
- claude_mpm/hooks/claude_hooks/installer.py +806 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +249 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +412 -0
- claude_mpm/hooks/claude_hooks/services/__init__.py +15 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +229 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +254 -0
- claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +106 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +284 -0
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +374 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +224 -0
- claude_mpm/hooks/failure_learning/__init__.py +54 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
- claude_mpm/hooks/instruction_reinforcement.py +301 -0
- claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
- claude_mpm/hooks/kuzu_memory_hook.py +386 -0
- claude_mpm/hooks/kuzu_response_hook.py +179 -0
- claude_mpm/hooks/memory_integration_hook.py +201 -107
- claude_mpm/hooks/session_resume_hook.py +121 -0
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/hooks/tool_call_interceptor.py +92 -76
- claude_mpm/hooks/validation_hooks.py +62 -54
- claude_mpm/init.py +518 -83
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +40 -23
- claude_mpm/models/agent_session.py +538 -0
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/schemas/__init__.py +12 -0
- claude_mpm/scripts/__init__.py +15 -0
- claude_mpm/scripts/claude-hook-handler.sh +227 -0
- claude_mpm/scripts/launch_monitor.py +165 -0
- claude_mpm/scripts/mpm_doctor.py +322 -0
- claude_mpm/scripts/socketio_daemon.py +189 -200
- claude_mpm/scripts/start_activity_logging.py +91 -0
- claude_mpm/services/__init__.py +208 -39
- claude_mpm/services/agent_capabilities_service.py +266 -0
- claude_mpm/services/agents/__init__.py +89 -0
- claude_mpm/services/agents/agent_builder.py +514 -0
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_recommendation_service.py +278 -0
- claude_mpm/services/agents/agent_review_service.py +280 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/__init__.py +21 -0
- claude_mpm/services/agents/deployment/agent_config_provider.py +410 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +358 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +80 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +1037 -0
- claude_mpm/services/agents/deployment/agent_discovery_service.py +546 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +288 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +383 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +505 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +160 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +957 -0
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +273 -0
- claude_mpm/services/agents/deployment/agent_operation_service.py +573 -0
- claude_mpm/services/agents/deployment/agent_record_service.py +418 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +84 -0
- claude_mpm/services/agents/deployment/agent_state_service.py +381 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +1369 -0
- claude_mpm/services/agents/deployment/agent_validator.py +376 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +322 -0
- claude_mpm/services/{agent_versioning.py → agents/deployment/agent_versioning.py} +10 -13
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +149 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +768 -0
- claude_mpm/services/agents/deployment/base_agent_locator.py +132 -0
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +181 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +178 -0
- claude_mpm/services/agents/deployment/deployment_results_manager.py +185 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +120 -0
- claude_mpm/services/agents/deployment/deployment_wrapper.py +129 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +70 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +269 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +226 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/local_template_deployment.py +362 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +1478 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +162 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +240 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +110 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +80 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +92 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +101 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +102 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +269 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +311 -0
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +862 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +315 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +113 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +148 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +131 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +130 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +228 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +21 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +319 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +214 -0
- claude_mpm/services/agents/git_source_manager.py +682 -0
- claude_mpm/services/agents/loading/__init__.py +11 -0
- claude_mpm/services/{agent_profile_loader.py → agents/loading/agent_profile_loader.py} +306 -228
- claude_mpm/services/{base_agent_manager.py → agents/loading/base_agent_manager.py} +106 -91
- claude_mpm/services/agents/loading/framework_agent_loader.py +433 -0
- claude_mpm/services/agents/local_template_manager.py +784 -0
- claude_mpm/services/agents/management/__init__.py +9 -0
- claude_mpm/services/{agent_capabilities_generator.py → agents/management/agent_capabilities_generator.py} +92 -69
- claude_mpm/services/{agent_management_service.py → agents/management/agent_management_service.py} +219 -168
- claude_mpm/services/agents/memory/__init__.py +22 -0
- claude_mpm/services/agents/memory/agent_memory_manager.py +784 -0
- claude_mpm/services/{agent_persistence_service.py → agents/memory/agent_persistence_service.py} +20 -18
- claude_mpm/services/agents/memory/content_manager.py +470 -0
- claude_mpm/services/agents/memory/memory_categorization_service.py +167 -0
- claude_mpm/services/agents/memory/memory_file_service.py +129 -0
- claude_mpm/services/agents/memory/memory_format_service.py +201 -0
- claude_mpm/services/agents/memory/memory_limits_service.py +101 -0
- claude_mpm/services/agents/memory/template_generator.py +83 -0
- claude_mpm/services/agents/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +617 -0
- claude_mpm/services/agents/registry/__init__.py +30 -0
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +273 -0
- claude_mpm/services/{agent_modification_tracker.py → agents/registry/modification_tracker.py} +370 -295
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1202 -0
- claude_mpm/services/agents/startup_sync.py +259 -0
- claude_mpm/services/agents/toolchain_detector.py +478 -0
- claude_mpm/services/analysis/__init__.py +35 -0
- claude_mpm/services/analysis/clone_detector.py +1030 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/async_session_logger.py +665 -0
- claude_mpm/services/claude_session_logger.py +321 -0
- claude_mpm/services/cli/__init__.py +18 -0
- claude_mpm/services/cli/agent_cleanup_service.py +408 -0
- claude_mpm/services/cli/agent_dependency_service.py +395 -0
- claude_mpm/services/cli/agent_listing_service.py +463 -0
- claude_mpm/services/cli/agent_output_formatter.py +605 -0
- claude_mpm/services/cli/agent_validation_service.py +590 -0
- claude_mpm/services/cli/memory_crud_service.py +622 -0
- claude_mpm/services/cli/memory_output_formatter.py +604 -0
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +604 -0
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +372 -0
- claude_mpm/services/cli/startup_checker.py +362 -0
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +446 -0
- claude_mpm/services/command_handler_service.py +221 -0
- claude_mpm/services/communication/__init__.py +22 -0
- claude_mpm/services/core/__init__.py +108 -0
- claude_mpm/services/core/base.py +269 -0
- claude_mpm/services/core/cache_manager.py +309 -0
- claude_mpm/services/core/interfaces/__init__.py +273 -0
- claude_mpm/services/core/interfaces/agent.py +514 -0
- claude_mpm/services/core/interfaces/communication.py +316 -0
- claude_mpm/services/core/interfaces/health.py +169 -0
- claude_mpm/services/core/interfaces/infrastructure.py +357 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/project.py +121 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/service.py +405 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/interfaces.py +81 -0
- claude_mpm/services/core/memory_manager.py +682 -0
- claude_mpm/services/core/models/__init__.py +70 -0
- claude_mpm/services/core/models/agent_config.py +384 -0
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +239 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/models/toolchain.py +306 -0
- claude_mpm/services/core/path_resolver.py +517 -0
- claude_mpm/services/core/service_container.py +520 -0
- claude_mpm/services/core/service_interfaces.py +436 -0
- claude_mpm/services/diagnostics/__init__.py +18 -0
- claude_mpm/services/diagnostics/checks/__init__.py +38 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +370 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/base_check.py +60 -0
- claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
- claude_mpm/services/diagnostics/checks/common_issues_check.py +363 -0
- claude_mpm/services/diagnostics/checks/configuration_check.py +306 -0
- claude_mpm/services/diagnostics/checks/filesystem_check.py +233 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +520 -0
- claude_mpm/services/diagnostics/checks/instructions_check.py +415 -0
- claude_mpm/services/diagnostics/checks/mcp_check.py +330 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +281 -0
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/checks/startup_log_check.py +319 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +286 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +578 -0
- claude_mpm/services/diagnostics/models.py +138 -0
- claude_mpm/services/event_aggregator.py +582 -0
- claude_mpm/services/event_bus/__init__.py +18 -0
- claude_mpm/services/event_bus/config.py +186 -0
- claude_mpm/services/event_bus/direct_relay.py +312 -0
- claude_mpm/services/event_bus/event_bus.py +396 -0
- claude_mpm/services/event_bus/relay.py +326 -0
- claude_mpm/services/events/__init__.py +44 -0
- claude_mpm/services/events/consumers/__init__.py +18 -0
- claude_mpm/services/events/consumers/dead_letter.py +306 -0
- claude_mpm/services/events/consumers/logging.py +184 -0
- claude_mpm/services/events/consumers/metrics.py +241 -0
- claude_mpm/services/events/consumers/socketio.py +377 -0
- claude_mpm/services/events/core.py +480 -0
- claude_mpm/services/events/interfaces.py +214 -0
- claude_mpm/services/events/producers/__init__.py +14 -0
- claude_mpm/services/events/producers/hook.py +269 -0
- claude_mpm/services/events/producers/system.py +329 -0
- claude_mpm/services/exceptions.py +433 -353
- claude_mpm/services/framework_claude_md_generator/__init__.py +81 -80
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +74 -67
- claude_mpm/services/framework_claude_md_generator/content_validator.py +66 -62
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +82 -60
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +36 -37
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +41 -40
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +15 -15
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +26 -30
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +31 -30
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +579 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/hook_installer_service.py +506 -0
- claude_mpm/services/hook_service.py +159 -111
- claude_mpm/services/infrastructure/__init__.py +52 -0
- claude_mpm/services/infrastructure/context_preservation.py +569 -0
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +209 -0
- claude_mpm/services/infrastructure/monitoring/__init__.py +39 -0
- claude_mpm/services/infrastructure/monitoring/aggregator.py +432 -0
- claude_mpm/services/infrastructure/monitoring/base.py +122 -0
- claude_mpm/services/infrastructure/monitoring/legacy.py +203 -0
- claude_mpm/services/infrastructure/monitoring/network.py +219 -0
- claude_mpm/services/infrastructure/monitoring/process.py +343 -0
- claude_mpm/services/infrastructure/monitoring/resources.py +244 -0
- claude_mpm/services/infrastructure/monitoring/service.py +368 -0
- claude_mpm/services/infrastructure/monitoring.py +71 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +155 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +427 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +1542 -0
- claude_mpm/services/mcp_service_verifier.py +732 -0
- claude_mpm/services/memory/__init__.py +19 -0
- claude_mpm/services/{memory_builder.py → memory/builder.py} +465 -373
- claude_mpm/services/memory/cache/__init__.py +14 -0
- claude_mpm/services/{shared_prompt_cache.py → memory/cache/shared_prompt_cache.py} +237 -200
- claude_mpm/services/memory/cache/simple_cache.py +331 -0
- claude_mpm/services/memory/failure_tracker.py +578 -0
- claude_mpm/services/memory/indexed_memory.py +648 -0
- claude_mpm/services/{memory_optimizer.py → memory/optimizer.py} +272 -243
- claude_mpm/services/memory/router.py +951 -0
- claude_mpm/services/memory_hook_service.py +470 -0
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +452 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +698 -0
- claude_mpm/services/monitor/daemon_manager.py +1076 -0
- claude_mpm/services/monitor/event_emitter.py +350 -0
- claude_mpm/services/monitor/handlers/__init__.py +21 -0
- claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
- claude_mpm/services/monitor/handlers/dashboard.py +299 -0
- claude_mpm/services/monitor/handlers/file.py +264 -0
- claude_mpm/services/monitor/handlers/hooks.py +512 -0
- claude_mpm/services/monitor/management/__init__.py +18 -0
- claude_mpm/services/monitor/management/health.py +124 -0
- claude_mpm/services/monitor/management/lifecycle.py +730 -0
- claude_mpm/services/monitor/server.py +1493 -0
- claude_mpm/services/monitor_build_service.py +349 -0
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/orphan_detection.py +786 -0
- claude_mpm/services/pm_skills_deployer.py +707 -0
- claude_mpm/services/port_manager.py +597 -0
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/profile_manager.py +337 -0
- claude_mpm/services/project/__init__.py +44 -0
- claude_mpm/services/{project_analyzer.py → project/analyzer.py} +541 -291
- claude_mpm/services/project/analyzer_v2.py +566 -0
- claude_mpm/services/project/architecture_analyzer.py +461 -0
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +462 -0
- claude_mpm/services/project/detection_strategies.py +719 -0
- claude_mpm/services/project/documentation_manager.py +554 -0
- claude_mpm/services/project/enhanced_analyzer.py +572 -0
- claude_mpm/services/project/language_analyzer.py +265 -0
- claude_mpm/services/project/metrics_collector.py +407 -0
- claude_mpm/services/project/project_organizer.py +1009 -0
- claude_mpm/services/project/registry.py +636 -0
- claude_mpm/services/project/toolchain_analyzer.py +583 -0
- claude_mpm/services/project_port_allocator.py +596 -0
- claude_mpm/services/recovery_manager.py +293 -240
- claude_mpm/services/response_tracker.py +267 -0
- claude_mpm/services/runner_configuration_service.py +605 -0
- claude_mpm/services/self_upgrade_service.py +608 -0
- claude_mpm/services/session_management_service.py +314 -0
- claude_mpm/services/session_manager.py +380 -0
- claude_mpm/services/shared/__init__.py +21 -0
- claude_mpm/services/shared/async_service_base.py +216 -0
- claude_mpm/services/shared/config_service_base.py +301 -0
- claude_mpm/services/shared/lifecycle_service_base.py +308 -0
- claude_mpm/services/shared/manager_base.py +315 -0
- claude_mpm/services/shared/service_factory.py +309 -0
- claude_mpm/services/skills/__init__.py +21 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1324 -0
- claude_mpm/services/skills/selective_skill_deployer.py +744 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +1168 -0
- claude_mpm/services/socketio/__init__.py +25 -0
- claude_mpm/services/socketio/client_proxy.py +229 -0
- claude_mpm/services/socketio/dashboard_server.py +362 -0
- claude_mpm/services/socketio/event_normalizer.py +798 -0
- claude_mpm/services/socketio/handlers/__init__.py +30 -0
- claude_mpm/services/socketio/handlers/base.py +136 -0
- claude_mpm/services/socketio/handlers/code_analysis.py +682 -0
- claude_mpm/services/socketio/handlers/connection.py +643 -0
- claude_mpm/services/socketio/handlers/connection_handler.py +333 -0
- claude_mpm/services/socketio/handlers/file.py +263 -0
- claude_mpm/services/socketio/handlers/git.py +962 -0
- claude_mpm/services/socketio/handlers/hook.py +211 -0
- claude_mpm/services/socketio/handlers/memory.py +26 -0
- claude_mpm/services/socketio/handlers/project.py +24 -0
- claude_mpm/services/socketio/handlers/registry.py +214 -0
- claude_mpm/services/socketio/migration_utils.py +343 -0
- claude_mpm/services/socketio/monitor_client.py +364 -0
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +569 -0
- claude_mpm/services/socketio/server/connection_manager.py +579 -0
- claude_mpm/services/socketio/server/core.py +1079 -0
- claude_mpm/services/socketio/server/eventbus_integration.py +245 -0
- claude_mpm/services/socketio/server/main.py +501 -0
- claude_mpm/services/socketio_client_manager.py +173 -143
- claude_mpm/services/socketio_server.py +38 -1657
- claude_mpm/services/subprocess_launcher_service.py +322 -0
- claude_mpm/services/system_instructions_service.py +270 -0
- claude_mpm/services/ticket_manager.py +25 -209
- claude_mpm/services/ticket_services/__init__.py +26 -0
- claude_mpm/services/ticket_services/crud_service.py +328 -0
- claude_mpm/services/ticket_services/formatter_service.py +290 -0
- claude_mpm/services/ticket_services/search_service.py +324 -0
- claude_mpm/services/ticket_services/validation_service.py +303 -0
- claude_mpm/services/ticket_services/workflow_service.py +244 -0
- claude_mpm/services/unified/__init__.py +65 -0
- claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
- claude_mpm/services/unified/config_strategies/__init__.py +175 -0
- claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
- claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
- claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
- claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
- claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
- claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
- claude_mpm/services/unified/deployment_strategies/base.py +553 -0
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
- claude_mpm/services/unified/deployment_strategies/local.py +607 -0
- claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
- claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
- claude_mpm/services/unified/interfaces.py +475 -0
- claude_mpm/services/unified/migration.py +509 -0
- claude_mpm/services/unified/strategies.py +534 -0
- claude_mpm/services/unified/unified_analyzer.py +542 -0
- claude_mpm/services/unified/unified_config.py +691 -0
- claude_mpm/services/unified/unified_deployment.py +466 -0
- claude_mpm/services/utility_service.py +280 -0
- claude_mpm/services/version_control/__init__.py +34 -37
- claude_mpm/services/version_control/branch_strategy.py +26 -17
- claude_mpm/services/version_control/conflict_resolution.py +52 -36
- claude_mpm/services/version_control/git_operations.py +183 -49
- claude_mpm/services/version_control/semantic_versioning.py +172 -61
- claude_mpm/services/version_control/version_parser.py +546 -0
- claude_mpm/services/version_service.py +379 -0
- claude_mpm/services/visualization/__init__.py +15 -0
- claude_mpm/services/visualization/mermaid_generator.py +937 -0
- claude_mpm/skills/__init__.py +42 -0
- claude_mpm/skills/agent_skills_injector.py +324 -0
- claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +573 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/security-scanning.md +439 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +405 -0
- claude_mpm/skills/skills_registry.py +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/__init__.py +9 -0
- claude_mpm/storage/state_storage.py +546 -0
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/ticket_wrapper.py +2 -2
- claude_mpm/tools/__init__.py +10 -0
- claude_mpm/tools/__main__.py +208 -0
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/tools/code_tree_builder.py +631 -0
- claude_mpm/tools/code_tree_events.py +420 -0
- claude_mpm/tools/socketio_debug.py +671 -0
- claude_mpm/utils/__init__.py +8 -8
- claude_mpm/utils/agent_dependency_loader.py +1090 -0
- claude_mpm/utils/agent_filters.py +261 -0
- claude_mpm/utils/common.py +544 -0
- claude_mpm/utils/config_manager.py +168 -126
- claude_mpm/utils/console.py +11 -0
- claude_mpm/utils/database_connector.py +298 -0
- claude_mpm/utils/dependency_cache.py +373 -0
- claude_mpm/utils/dependency_manager.py +60 -59
- claude_mpm/utils/dependency_strategies.py +381 -0
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/environment_context.py +313 -0
- claude_mpm/utils/error_handler.py +78 -66
- claude_mpm/utils/file_utils.py +305 -0
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/gitignore.py +244 -0
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/path_operations.py +110 -104
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +823 -0
- claude_mpm/utils/session_logging.py +121 -0
- claude_mpm/utils/structured_questions.py +619 -0
- claude_mpm/utils/subprocess_utils.py +343 -0
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +214 -108
- claude_mpm/validation/frontmatter_validator.py +252 -0
- claude_mpm-5.4.55.dist-info/METADATA +999 -0
- claude_mpm-5.4.55.dist-info/RECORD +868 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/entry_points.txt +1 -3
- claude_mpm-5.4.55.dist-info/licenses/LICENSE +94 -0
- claude_mpm-5.4.55.dist-info/licenses/LICENSE-FAQ.md +153 -0
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -88
- claude_mpm/agents/INSTRUCTIONS.md +0 -352
- claude_mpm/agents/backups/INSTRUCTIONS.md +0 -352
- claude_mpm/agents/base_agent_loader.py +0 -529
- claude_mpm/agents/schema/agent_schema.json +0 -314
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -36
- claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -45
- claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -49
- claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -45
- claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -49
- claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/data_engineer.json +0 -110
- claude_mpm/agents/templates/documentation.json +0 -109
- claude_mpm/agents/templates/engineer.json +0 -113
- claude_mpm/agents/templates/ops.json +0 -109
- claude_mpm/agents/templates/pm.json +0 -25
- claude_mpm/agents/templates/qa.json +0 -111
- claude_mpm/agents/templates/research.json +0 -65
- claude_mpm/agents/templates/security.json +0 -113
- claude_mpm/agents/templates/test_integration.json +0 -112
- claude_mpm/agents/templates/version_control.json +0 -107
- claude_mpm/cli/commands/ui.py +0 -57
- claude_mpm/core/simple_runner.py +0 -1046
- claude_mpm/dashboard/open_dashboard.py +0 -34
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/builtin/__init__.py +0 -1
- claude_mpm/hooks/builtin/logging_hook_example.py +0 -165
- claude_mpm/hooks/builtin/memory_hooks_example.py +0 -67
- claude_mpm/hooks/builtin/mpm_command_hook.py +0 -125
- claude_mpm/hooks/builtin/post_delegation_hook_example.py +0 -124
- claude_mpm/hooks/builtin/pre_delegation_hook_example.py +0 -125
- claude_mpm/hooks/builtin/submit_hook_example.py +0 -100
- claude_mpm/hooks/builtin/ticket_extraction_hook_example.py +0 -237
- claude_mpm/hooks/builtin/todo_agent_prefix_hook.py +0 -240
- claude_mpm/hooks/builtin/workflow_start_hook.py +0 -181
- claude_mpm/orchestration/__init__.py +0 -6
- claude_mpm/orchestration/archive/direct_orchestrator.py +0 -195
- claude_mpm/orchestration/archive/factory.py +0 -215
- claude_mpm/orchestration/archive/hook_enabled_orchestrator.py +0 -188
- claude_mpm/orchestration/archive/hook_integration_example.py +0 -178
- claude_mpm/orchestration/archive/interactive_subprocess_orchestrator.py +0 -826
- claude_mpm/orchestration/archive/orchestrator.py +0 -501
- claude_mpm/orchestration/archive/pexpect_orchestrator.py +0 -252
- claude_mpm/orchestration/archive/pty_orchestrator.py +0 -270
- claude_mpm/orchestration/archive/simple_orchestrator.py +0 -82
- claude_mpm/orchestration/archive/subprocess_orchestrator.py +0 -801
- claude_mpm/orchestration/archive/system_prompt_orchestrator.py +0 -278
- claude_mpm/orchestration/archive/wrapper_orchestrator.py +0 -187
- claude_mpm/schemas/workflow_validator.py +0 -411
- claude_mpm/services/agent_deployment.py +0 -1534
- claude_mpm/services/agent_lifecycle_manager.py +0 -1169
- claude_mpm/services/agent_memory_manager.py +0 -1415
- claude_mpm/services/agent_registry.py +0 -676
- claude_mpm/services/deployed_agent_discovery.py +0 -226
- claude_mpm/services/framework_agent_loader.py +0 -337
- claude_mpm/services/framework_claude_md_generator.py +0 -621
- claude_mpm/services/health_monitor.py +0 -892
- claude_mpm/services/memory_router.py +0 -538
- claude_mpm/services/parent_directory_manager/__init__.py +0 -577
- claude_mpm/services/parent_directory_manager/backup_manager.py +0 -258
- claude_mpm/services/parent_directory_manager/config_manager.py +0 -210
- claude_mpm/services/parent_directory_manager/deduplication_manager.py +0 -279
- claude_mpm/services/parent_directory_manager/framework_protector.py +0 -143
- claude_mpm/services/parent_directory_manager/operations.py +0 -186
- claude_mpm/services/parent_directory_manager/state_manager.py +0 -624
- claude_mpm/services/parent_directory_manager/template_deployer.py +0 -579
- claude_mpm/services/parent_directory_manager/validation_manager.py +0 -378
- claude_mpm/services/parent_directory_manager/version_control_helper.py +0 -339
- claude_mpm/services/parent_directory_manager/version_manager.py +0 -222
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -508
- claude_mpm/ui/__init__.py +0 -1
- claude_mpm/ui/rich_terminal_ui.py +0 -295
- claude_mpm/ui/terminal_ui.py +0 -328
- claude_mpm/utils/paths.py +0 -289
- claude_mpm-3.4.10.dist-info/METADATA +0 -183
- claude_mpm-3.4.10.dist-info/RECORD +0 -201
- claude_mpm-3.4.10.dist-info/licenses/LICENSE +0 -21
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/WHEEL +0 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pull Request Template Service
|
|
3
|
+
==============================
|
|
4
|
+
|
|
5
|
+
Generates consistent PR titles and descriptions for agent/skill improvements.
|
|
6
|
+
|
|
7
|
+
Design Decisions:
|
|
8
|
+
- Follows conventional commit format
|
|
9
|
+
- Generates comprehensive PR descriptions with testing checklists
|
|
10
|
+
- Supports both agent and skill PR types
|
|
11
|
+
- Validates conventional commit message format
|
|
12
|
+
|
|
13
|
+
Example:
|
|
14
|
+
>>> service = PRTemplateService()
|
|
15
|
+
>>> title = service.generate_pr_title("research", "improve memory efficiency", PRType.AGENT)
|
|
16
|
+
>>> print(title)
|
|
17
|
+
feat(agent): improve research - improve memory efficiency
|
|
18
|
+
|
|
19
|
+
>>> body = service.generate_agent_pr_body(
|
|
20
|
+
... agent_name="research",
|
|
21
|
+
... problem="Memory exhaustion with >50 files",
|
|
22
|
+
... solution="Add hard limit of 5 files per session",
|
|
23
|
+
... testing_notes="Tested with 100-file codebase",
|
|
24
|
+
... related_issues=["#157"]
|
|
25
|
+
... )
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from enum import Enum
|
|
29
|
+
from typing import List, Optional
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class PRType(Enum):
|
|
33
|
+
"""Type of pull request."""
|
|
34
|
+
|
|
35
|
+
AGENT = "agent"
|
|
36
|
+
SKILL = "skill"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class PRTemplateService:
|
|
40
|
+
"""
|
|
41
|
+
Service for generating PR templates.
|
|
42
|
+
|
|
43
|
+
Generates consistent PR titles and descriptions following
|
|
44
|
+
conventional commit format and best practices.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
# Conventional commit types
|
|
48
|
+
COMMIT_TYPES = {
|
|
49
|
+
"feat": "New feature or enhancement",
|
|
50
|
+
"fix": "Bug fix",
|
|
51
|
+
"docs": "Documentation changes",
|
|
52
|
+
"refactor": "Code refactoring without feature changes",
|
|
53
|
+
"test": "Adding or updating tests",
|
|
54
|
+
"chore": "Maintenance tasks",
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
def generate_pr_title(
|
|
58
|
+
self,
|
|
59
|
+
item_name: str,
|
|
60
|
+
brief_description: str,
|
|
61
|
+
pr_type: PRType,
|
|
62
|
+
commit_type: str = "feat",
|
|
63
|
+
) -> str:
|
|
64
|
+
"""
|
|
65
|
+
Generate PR title in conventional commit format.
|
|
66
|
+
|
|
67
|
+
Format: {commit_type}({scope}): {item} - {brief_description}
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
item_name: Agent or skill name (e.g., "research", "fastapi-testing")
|
|
71
|
+
brief_description: Brief description (e.g., "improve memory handling")
|
|
72
|
+
pr_type: Type of PR (agent or skill)
|
|
73
|
+
commit_type: Conventional commit type (default: "feat")
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
Formatted PR title
|
|
77
|
+
|
|
78
|
+
Example:
|
|
79
|
+
>>> service = PRTemplateService()
|
|
80
|
+
>>> service.generate_pr_title("research", "improve memory handling", PRType.AGENT)
|
|
81
|
+
'feat(agent): improve research - improve memory handling'
|
|
82
|
+
"""
|
|
83
|
+
scope = pr_type.value
|
|
84
|
+
return f"{commit_type}({scope}): improve {item_name} - {brief_description}"
|
|
85
|
+
|
|
86
|
+
def generate_agent_pr_body(
|
|
87
|
+
self,
|
|
88
|
+
agent_name: str,
|
|
89
|
+
problem: str,
|
|
90
|
+
solution: str,
|
|
91
|
+
testing_notes: str,
|
|
92
|
+
related_issues: Optional[List[str]] = None,
|
|
93
|
+
) -> str:
|
|
94
|
+
"""
|
|
95
|
+
Generate PR body for agent improvements.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
agent_name: Agent name (e.g., "research")
|
|
99
|
+
problem: Problem statement (what wasn't working)
|
|
100
|
+
solution: Solution overview (what was changed)
|
|
101
|
+
testing_notes: Testing performed
|
|
102
|
+
related_issues: Related issue numbers (e.g., ["#157", "#142"])
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Formatted PR body in markdown
|
|
106
|
+
|
|
107
|
+
Example:
|
|
108
|
+
>>> service = PRTemplateService()
|
|
109
|
+
>>> body = service.generate_agent_pr_body(
|
|
110
|
+
... agent_name="research",
|
|
111
|
+
... problem="Memory exhaustion when analyzing >50 files",
|
|
112
|
+
... solution="Add hard limit of 5 files per session with MCP summarizer",
|
|
113
|
+
... testing_notes="Tested with 100-file codebase, memory stayed under 4GB",
|
|
114
|
+
... related_issues=["#157"]
|
|
115
|
+
... )
|
|
116
|
+
"""
|
|
117
|
+
related_section = ""
|
|
118
|
+
if related_issues:
|
|
119
|
+
related_section = "\n\n## Related Issues\n\n"
|
|
120
|
+
for issue in related_issues:
|
|
121
|
+
# Check if it's just a number or already has #
|
|
122
|
+
issue_ref = issue if issue.startswith("#") else f"#{issue}"
|
|
123
|
+
related_section += f"Closes {issue_ref}\n"
|
|
124
|
+
|
|
125
|
+
return f"""## Problem Statement
|
|
126
|
+
|
|
127
|
+
{problem}
|
|
128
|
+
|
|
129
|
+
## Proposed Solution
|
|
130
|
+
|
|
131
|
+
{solution}
|
|
132
|
+
|
|
133
|
+
## Changes Made
|
|
134
|
+
|
|
135
|
+
**Agent:** `{agent_name}`
|
|
136
|
+
|
|
137
|
+
{self._format_changes_placeholder()}
|
|
138
|
+
|
|
139
|
+
## Testing Performed
|
|
140
|
+
|
|
141
|
+
{testing_notes}
|
|
142
|
+
|
|
143
|
+
- [x] Validated YAML frontmatter syntax
|
|
144
|
+
- [x] Tested agent with sample tasks
|
|
145
|
+
- [x] Verified no regression in existing behavior
|
|
146
|
+
{related_section}
|
|
147
|
+
## Checklist
|
|
148
|
+
|
|
149
|
+
- [x] Instructions are clear and unambiguous
|
|
150
|
+
- [x] No conflicting guidance
|
|
151
|
+
- [x] Follows agent architecture best practices
|
|
152
|
+
- [x] Documentation updated if needed
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
🤖 Generated with Claude MPM Agent Improver
|
|
156
|
+
Co-Authored-By: agent-improver <noreply@anthropic.com>
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
def generate_skill_pr_body(
|
|
160
|
+
self,
|
|
161
|
+
skill_name: str,
|
|
162
|
+
improvements: str,
|
|
163
|
+
justification: str,
|
|
164
|
+
examples: str,
|
|
165
|
+
related_issues: Optional[List[str]] = None,
|
|
166
|
+
) -> str:
|
|
167
|
+
"""
|
|
168
|
+
Generate PR body for skill improvements.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
skill_name: Skill name (e.g., "fastapi-testing")
|
|
172
|
+
improvements: Description of improvements made
|
|
173
|
+
justification: Why these improvements were needed
|
|
174
|
+
examples: Examples added or updated
|
|
175
|
+
related_issues: Related issue numbers
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Formatted PR body in markdown
|
|
179
|
+
|
|
180
|
+
Example:
|
|
181
|
+
>>> service = PRTemplateService()
|
|
182
|
+
>>> body = service.generate_skill_pr_body(
|
|
183
|
+
... skill_name="fastapi-testing",
|
|
184
|
+
... improvements="Added async test patterns and database handling",
|
|
185
|
+
... justification="Users struggled with async endpoint testing",
|
|
186
|
+
... examples="pytest-asyncio config, AsyncClient usage, DB rollback patterns",
|
|
187
|
+
... related_issues=["#203"]
|
|
188
|
+
... )
|
|
189
|
+
"""
|
|
190
|
+
related_section = ""
|
|
191
|
+
if related_issues:
|
|
192
|
+
related_section = "\n\n## Related Issues\n\n"
|
|
193
|
+
for issue in related_issues:
|
|
194
|
+
issue_ref = issue if issue.startswith("#") else f"#{issue}"
|
|
195
|
+
related_section += f"Requested by: Issue {issue_ref}\n"
|
|
196
|
+
|
|
197
|
+
return f"""## Skill Enhancement
|
|
198
|
+
|
|
199
|
+
**Skill:** `{skill_name}`
|
|
200
|
+
|
|
201
|
+
## Motivation
|
|
202
|
+
|
|
203
|
+
{justification}
|
|
204
|
+
|
|
205
|
+
## Improvements
|
|
206
|
+
|
|
207
|
+
{improvements}
|
|
208
|
+
|
|
209
|
+
## Examples Added
|
|
210
|
+
|
|
211
|
+
{examples}
|
|
212
|
+
|
|
213
|
+
## Testing
|
|
214
|
+
|
|
215
|
+
- [x] Validated YAML frontmatter
|
|
216
|
+
- [x] Verified skill syntax
|
|
217
|
+
- [x] Tested examples in relevant project
|
|
218
|
+
- [x] No conflicts with existing skills
|
|
219
|
+
{related_section}
|
|
220
|
+
---
|
|
221
|
+
🤖 Generated with Claude MPM Skills Manager
|
|
222
|
+
Co-Authored-By: skills-manager <noreply@anthropic.com>
|
|
223
|
+
"""
|
|
224
|
+
|
|
225
|
+
def validate_conventional_commit(self, message: str) -> bool:
|
|
226
|
+
"""
|
|
227
|
+
Validate that message follows conventional commit format.
|
|
228
|
+
|
|
229
|
+
Format: type(scope): description
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
message: Commit message to validate
|
|
233
|
+
|
|
234
|
+
Returns:
|
|
235
|
+
True if message follows conventional commit format
|
|
236
|
+
|
|
237
|
+
Example:
|
|
238
|
+
>>> service = PRTemplateService()
|
|
239
|
+
>>> service.validate_conventional_commit("feat(agent): improve research")
|
|
240
|
+
True
|
|
241
|
+
>>> service.validate_conventional_commit("improve research agent")
|
|
242
|
+
False
|
|
243
|
+
"""
|
|
244
|
+
if not message:
|
|
245
|
+
return False
|
|
246
|
+
|
|
247
|
+
# Extract first line (title)
|
|
248
|
+
first_line = message.split("\n")[0]
|
|
249
|
+
|
|
250
|
+
# Check basic format: type(scope): description
|
|
251
|
+
if ":" not in first_line:
|
|
252
|
+
return False
|
|
253
|
+
|
|
254
|
+
# Split into type/scope and description
|
|
255
|
+
parts = first_line.split(":", 1)
|
|
256
|
+
if len(parts) != 2:
|
|
257
|
+
return False
|
|
258
|
+
|
|
259
|
+
type_scope = parts[0].strip()
|
|
260
|
+
description = parts[1].strip()
|
|
261
|
+
|
|
262
|
+
# Check type(scope) format
|
|
263
|
+
if "(" not in type_scope or ")" not in type_scope:
|
|
264
|
+
return False
|
|
265
|
+
|
|
266
|
+
# Extract type
|
|
267
|
+
commit_type = type_scope.split("(")[0].strip()
|
|
268
|
+
|
|
269
|
+
# Validate type is recognized
|
|
270
|
+
if commit_type not in self.COMMIT_TYPES:
|
|
271
|
+
return False
|
|
272
|
+
|
|
273
|
+
# Check description is not empty
|
|
274
|
+
if not description:
|
|
275
|
+
return False
|
|
276
|
+
|
|
277
|
+
return True
|
|
278
|
+
|
|
279
|
+
def _format_changes_placeholder(self) -> str:
|
|
280
|
+
"""
|
|
281
|
+
Generate placeholder text for changes section.
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
Formatted changes placeholder
|
|
285
|
+
"""
|
|
286
|
+
return """_Detailed changes will be visible in the diff. Key modifications:_
|
|
287
|
+
- [List specific instruction changes]
|
|
288
|
+
- [List frontmatter updates if any]
|
|
289
|
+
- [List any related file changes]"""
|
|
290
|
+
|
|
291
|
+
def generate_commit_message(
|
|
292
|
+
self,
|
|
293
|
+
item_name: str,
|
|
294
|
+
brief_description: str,
|
|
295
|
+
detailed_changes: str,
|
|
296
|
+
pr_type: PRType,
|
|
297
|
+
commit_type: str = "feat",
|
|
298
|
+
) -> str:
|
|
299
|
+
"""
|
|
300
|
+
Generate conventional commit message.
|
|
301
|
+
|
|
302
|
+
Args:
|
|
303
|
+
item_name: Agent or skill name
|
|
304
|
+
brief_description: Brief description
|
|
305
|
+
detailed_changes: Detailed list of changes
|
|
306
|
+
pr_type: Type (agent or skill)
|
|
307
|
+
commit_type: Conventional commit type
|
|
308
|
+
|
|
309
|
+
Returns:
|
|
310
|
+
Formatted commit message
|
|
311
|
+
|
|
312
|
+
Example:
|
|
313
|
+
>>> service = PRTemplateService()
|
|
314
|
+
>>> msg = service.generate_commit_message(
|
|
315
|
+
... "research",
|
|
316
|
+
... "improve memory efficiency",
|
|
317
|
+
... "- Add hard limit of 5 files\\n- Document MCP summarizer",
|
|
318
|
+
... PRType.AGENT
|
|
319
|
+
... )
|
|
320
|
+
"""
|
|
321
|
+
scope = pr_type.value
|
|
322
|
+
title = f"{commit_type}({scope}): improve {item_name} - {brief_description}"
|
|
323
|
+
|
|
324
|
+
return f"""{title}
|
|
325
|
+
|
|
326
|
+
{detailed_changes}
|
|
327
|
+
|
|
328
|
+
🤖 Generated with Claude MPM
|
|
329
|
+
"""
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Profile Manager Service
|
|
3
|
+
======================
|
|
4
|
+
|
|
5
|
+
Manages agent and skill filtering based on deployment profiles.
|
|
6
|
+
|
|
7
|
+
A profile defines which agents and skills should be deployed, reducing
|
|
8
|
+
context usage by limiting available agents to only what's needed for
|
|
9
|
+
a specific project or workflow.
|
|
10
|
+
|
|
11
|
+
Profile Structure:
|
|
12
|
+
profile:
|
|
13
|
+
name: framework-development
|
|
14
|
+
description: Python backend + TypeScript/Svelte dashboard
|
|
15
|
+
|
|
16
|
+
agents:
|
|
17
|
+
enabled:
|
|
18
|
+
- python-engineer
|
|
19
|
+
- typescript-engineer
|
|
20
|
+
disabled:
|
|
21
|
+
- java-engineer
|
|
22
|
+
- dart-engineer
|
|
23
|
+
|
|
24
|
+
skills:
|
|
25
|
+
enabled:
|
|
26
|
+
- flask
|
|
27
|
+
- pytest
|
|
28
|
+
disabled_categories:
|
|
29
|
+
- wordpress-*
|
|
30
|
+
- react-*
|
|
31
|
+
|
|
32
|
+
Usage:
|
|
33
|
+
# Auto-detect project directory (searches for .claude-mpm in cwd and parents)
|
|
34
|
+
profile_manager = ProfileManager()
|
|
35
|
+
|
|
36
|
+
# Or explicitly specify project directory
|
|
37
|
+
profile_manager = ProfileManager(project_dir=Path("/path/to/project"))
|
|
38
|
+
|
|
39
|
+
profile_manager.load_profile("framework-development")
|
|
40
|
+
|
|
41
|
+
if profile_manager.is_agent_enabled("python-engineer"):
|
|
42
|
+
# Deploy agent
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
if profile_manager.is_skill_enabled("flask"):
|
|
46
|
+
# Deploy skill
|
|
47
|
+
pass
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
import fnmatch
|
|
51
|
+
from pathlib import Path
|
|
52
|
+
from typing import Any, Dict, Optional, Set
|
|
53
|
+
|
|
54
|
+
import yaml
|
|
55
|
+
|
|
56
|
+
from ..core.logger import get_logger
|
|
57
|
+
|
|
58
|
+
logger = get_logger(__name__)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class ProfileManager:
|
|
62
|
+
"""
|
|
63
|
+
Manages deployment profiles for agent and skill filtering.
|
|
64
|
+
|
|
65
|
+
Provides methods to:
|
|
66
|
+
- Load profiles from YAML files
|
|
67
|
+
- Check if agents are enabled/disabled
|
|
68
|
+
- Check if skills are enabled/disabled (with glob pattern support)
|
|
69
|
+
- Get lists of enabled/disabled entities
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
def __init__(
|
|
73
|
+
self, project_dir: Optional[Path] = None, profiles_dir: Optional[Path] = None
|
|
74
|
+
):
|
|
75
|
+
"""
|
|
76
|
+
Initialize ProfileManager.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
project_dir: Project root directory. If not provided, tries to find
|
|
80
|
+
.claude-mpm directory in current or parent directories.
|
|
81
|
+
profiles_dir: Directory containing profile YAML files. If provided,
|
|
82
|
+
takes precedence over project_dir.
|
|
83
|
+
"""
|
|
84
|
+
if profiles_dir:
|
|
85
|
+
self.profiles_dir = profiles_dir
|
|
86
|
+
elif project_dir:
|
|
87
|
+
self.profiles_dir = Path(project_dir) / ".claude-mpm" / "profiles"
|
|
88
|
+
else:
|
|
89
|
+
# Try to find .claude-mpm directory automatically
|
|
90
|
+
self.profiles_dir = self._find_profiles_dir()
|
|
91
|
+
|
|
92
|
+
self.active_profile: Optional[str] = None
|
|
93
|
+
self._profile_data: Dict[str, Any] = {}
|
|
94
|
+
|
|
95
|
+
# Cached sets for performance
|
|
96
|
+
self._enabled_agents: Set[str] = set()
|
|
97
|
+
self._disabled_agents: Set[str] = set()
|
|
98
|
+
self._enabled_skills: Set[str] = set()
|
|
99
|
+
self._disabled_skill_patterns: list[str] = []
|
|
100
|
+
|
|
101
|
+
def _find_profiles_dir(self) -> Path:
|
|
102
|
+
"""Find profiles directory by searching for .claude-mpm in cwd and parents.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Path to profiles directory (may not exist yet)
|
|
106
|
+
"""
|
|
107
|
+
current = Path.cwd()
|
|
108
|
+
|
|
109
|
+
# Search current directory and up to 5 parent directories
|
|
110
|
+
for _ in range(6):
|
|
111
|
+
profiles_dir = current / ".claude-mpm" / "profiles"
|
|
112
|
+
if profiles_dir.exists():
|
|
113
|
+
logger.debug(f"Found profiles directory at: {profiles_dir}")
|
|
114
|
+
return profiles_dir
|
|
115
|
+
if current.parent == current: # Reached filesystem root
|
|
116
|
+
break
|
|
117
|
+
current = current.parent
|
|
118
|
+
|
|
119
|
+
# Fallback to cwd (directory may not exist yet, which is fine)
|
|
120
|
+
fallback = Path.cwd() / ".claude-mpm" / "profiles"
|
|
121
|
+
logger.debug(f"Profiles directory not found, using fallback: {fallback}")
|
|
122
|
+
return fallback
|
|
123
|
+
|
|
124
|
+
def load_profile(self, profile_name: str) -> bool:
|
|
125
|
+
"""
|
|
126
|
+
Load profile from YAML file.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
profile_name: Name of profile (without .yaml extension)
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
bool: True if profile loaded successfully, False otherwise
|
|
133
|
+
"""
|
|
134
|
+
profile_path = self.profiles_dir / f"{profile_name}.yaml"
|
|
135
|
+
|
|
136
|
+
logger.debug(f"Looking for profile at: {profile_path}")
|
|
137
|
+
|
|
138
|
+
if not profile_path.exists():
|
|
139
|
+
logger.warning(f"Profile not found: {profile_path}")
|
|
140
|
+
return False
|
|
141
|
+
|
|
142
|
+
try:
|
|
143
|
+
with profile_path.open("r") as f:
|
|
144
|
+
self._profile_data = yaml.safe_load(f) or {}
|
|
145
|
+
|
|
146
|
+
# Extract profile metadata
|
|
147
|
+
profile_info = self._profile_data.get("profile", {})
|
|
148
|
+
self.active_profile = profile_info.get("name", profile_name)
|
|
149
|
+
|
|
150
|
+
# Parse agents
|
|
151
|
+
agents_config = self._profile_data.get("agents", {})
|
|
152
|
+
self._enabled_agents = set(agents_config.get("enabled", []))
|
|
153
|
+
self._disabled_agents = set(agents_config.get("disabled", []))
|
|
154
|
+
|
|
155
|
+
# Parse skills
|
|
156
|
+
skills_config = self._profile_data.get("skills", {})
|
|
157
|
+
self._enabled_skills = set(skills_config.get("enabled", []))
|
|
158
|
+
self._disabled_skill_patterns = skills_config.get("disabled_categories", [])
|
|
159
|
+
|
|
160
|
+
logger.info(
|
|
161
|
+
f"Loaded profile '{self.active_profile}': "
|
|
162
|
+
f"{len(self._enabled_agents)} agents, "
|
|
163
|
+
f"{len(self._enabled_skills)} skills enabled"
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
return True
|
|
167
|
+
|
|
168
|
+
except Exception as e:
|
|
169
|
+
logger.error(f"Failed to load profile {profile_name}: {e}")
|
|
170
|
+
return False
|
|
171
|
+
|
|
172
|
+
def is_agent_enabled(self, agent_name: str) -> bool:
|
|
173
|
+
"""
|
|
174
|
+
Check if agent is enabled in active profile.
|
|
175
|
+
|
|
176
|
+
If no profile is loaded, all agents are enabled by default.
|
|
177
|
+
|
|
178
|
+
Args:
|
|
179
|
+
agent_name: Name of agent to check
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
bool: True if agent should be deployed
|
|
183
|
+
"""
|
|
184
|
+
if not self.active_profile:
|
|
185
|
+
# No profile active - all agents enabled
|
|
186
|
+
return True
|
|
187
|
+
|
|
188
|
+
# If enabled list exists, agent must be in it
|
|
189
|
+
if self._enabled_agents:
|
|
190
|
+
return agent_name in self._enabled_agents
|
|
191
|
+
|
|
192
|
+
# Otherwise, agent must NOT be in disabled list
|
|
193
|
+
return agent_name not in self._disabled_agents
|
|
194
|
+
|
|
195
|
+
def is_skill_enabled(self, skill_name: str) -> bool:
|
|
196
|
+
"""
|
|
197
|
+
Check if skill is enabled in active profile.
|
|
198
|
+
|
|
199
|
+
Supports both short names (flask) and full names (toolchains-python-frameworks-flask).
|
|
200
|
+
Supports glob pattern matching for disabled_categories.
|
|
201
|
+
|
|
202
|
+
If no profile is loaded, all skills are enabled by default.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
skill_name: Name of skill to check (e.g., "flask", "toolchains-python-frameworks-flask")
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
bool: True if skill should be deployed
|
|
209
|
+
"""
|
|
210
|
+
if not self.active_profile:
|
|
211
|
+
# No profile active - all skills enabled
|
|
212
|
+
return True
|
|
213
|
+
|
|
214
|
+
# Check if skill is explicitly disabled by pattern
|
|
215
|
+
for pattern in self._disabled_skill_patterns:
|
|
216
|
+
if fnmatch.fnmatch(skill_name, pattern):
|
|
217
|
+
logger.debug(
|
|
218
|
+
f"Skill '{skill_name}' matched disabled pattern '{pattern}'"
|
|
219
|
+
)
|
|
220
|
+
return False
|
|
221
|
+
|
|
222
|
+
# If enabled list exists, check for match
|
|
223
|
+
if self._enabled_skills:
|
|
224
|
+
# Exact match
|
|
225
|
+
if skill_name in self._enabled_skills:
|
|
226
|
+
return True
|
|
227
|
+
|
|
228
|
+
# Check if full skill name ends with short name from enabled list
|
|
229
|
+
# Example: "toolchains-python-frameworks-flask" matches "flask"
|
|
230
|
+
for short_name in self._enabled_skills:
|
|
231
|
+
if skill_name.endswith(f"-{short_name}"):
|
|
232
|
+
return True
|
|
233
|
+
# Also check if short name is contained as a segment
|
|
234
|
+
if f"-{short_name}-" in skill_name or skill_name.startswith(
|
|
235
|
+
f"{short_name}-"
|
|
236
|
+
):
|
|
237
|
+
return True
|
|
238
|
+
|
|
239
|
+
return False
|
|
240
|
+
|
|
241
|
+
# No enabled list and didn't match disabled pattern - allow it
|
|
242
|
+
return True
|
|
243
|
+
|
|
244
|
+
def get_enabled_agents(self) -> Set[str]:
|
|
245
|
+
"""
|
|
246
|
+
Get set of enabled agent names.
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
Set[str]: Agent names that should be deployed
|
|
250
|
+
"""
|
|
251
|
+
return self._enabled_agents.copy()
|
|
252
|
+
|
|
253
|
+
def get_disabled_agents(self) -> Set[str]:
|
|
254
|
+
"""
|
|
255
|
+
Get set of disabled agent names.
|
|
256
|
+
|
|
257
|
+
Returns:
|
|
258
|
+
Set[str]: Agent names that should NOT be deployed
|
|
259
|
+
"""
|
|
260
|
+
return self._disabled_agents.copy()
|
|
261
|
+
|
|
262
|
+
def get_enabled_skills(self) -> Set[str]:
|
|
263
|
+
"""
|
|
264
|
+
Get set of explicitly enabled skill names.
|
|
265
|
+
|
|
266
|
+
Returns:
|
|
267
|
+
Set[str]: Skill names that should be deployed
|
|
268
|
+
"""
|
|
269
|
+
return self._enabled_skills.copy()
|
|
270
|
+
|
|
271
|
+
def get_disabled_skill_patterns(self) -> list[str]:
|
|
272
|
+
"""
|
|
273
|
+
Get list of disabled skill glob patterns.
|
|
274
|
+
|
|
275
|
+
Returns:
|
|
276
|
+
list[str]: Glob patterns for skills that should NOT be deployed
|
|
277
|
+
"""
|
|
278
|
+
return self._disabled_skill_patterns.copy()
|
|
279
|
+
|
|
280
|
+
def get_filtering_summary(self) -> Dict[str, Any]:
|
|
281
|
+
"""
|
|
282
|
+
Get summary of current profile filtering.
|
|
283
|
+
|
|
284
|
+
Returns:
|
|
285
|
+
Dict containing:
|
|
286
|
+
- active_profile: Name of active profile (or None)
|
|
287
|
+
- enabled_agents_count: Number of explicitly enabled agents
|
|
288
|
+
- disabled_agents_count: Number of explicitly disabled agents
|
|
289
|
+
- enabled_skills_count: Number of explicitly enabled skills
|
|
290
|
+
- disabled_patterns_count: Number of disabled skill patterns
|
|
291
|
+
"""
|
|
292
|
+
return {
|
|
293
|
+
"active_profile": self.active_profile,
|
|
294
|
+
"enabled_agents_count": len(self._enabled_agents),
|
|
295
|
+
"disabled_agents_count": len(self._disabled_agents),
|
|
296
|
+
"enabled_skills_count": len(self._enabled_skills),
|
|
297
|
+
"disabled_patterns_count": len(self._disabled_skill_patterns),
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
def list_available_profiles(self) -> list[str]:
|
|
301
|
+
"""
|
|
302
|
+
List all available profile names in profiles directory.
|
|
303
|
+
|
|
304
|
+
Returns:
|
|
305
|
+
list[str]: Profile names (without .yaml extension)
|
|
306
|
+
"""
|
|
307
|
+
if not self.profiles_dir.exists():
|
|
308
|
+
return []
|
|
309
|
+
|
|
310
|
+
profiles = []
|
|
311
|
+
for profile_path in self.profiles_dir.glob("*.yaml"):
|
|
312
|
+
profiles.append(profile_path.stem)
|
|
313
|
+
|
|
314
|
+
return sorted(profiles)
|
|
315
|
+
|
|
316
|
+
def get_profile_description(self, profile_name: str) -> Optional[str]:
|
|
317
|
+
"""
|
|
318
|
+
Get description of a profile without loading it fully.
|
|
319
|
+
|
|
320
|
+
Args:
|
|
321
|
+
profile_name: Name of profile
|
|
322
|
+
|
|
323
|
+
Returns:
|
|
324
|
+
Optional[str]: Profile description or None if not found
|
|
325
|
+
"""
|
|
326
|
+
profile_path = self.profiles_dir / f"{profile_name}.yaml"
|
|
327
|
+
|
|
328
|
+
if not profile_path.exists():
|
|
329
|
+
return None
|
|
330
|
+
|
|
331
|
+
try:
|
|
332
|
+
with profile_path.open("r") as f:
|
|
333
|
+
data = yaml.safe_load(f) or {}
|
|
334
|
+
profile_info = data.get("profile", {})
|
|
335
|
+
return profile_info.get("description")
|
|
336
|
+
except Exception:
|
|
337
|
+
return None
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Project Management Services Module
|
|
3
|
+
==================================
|
|
4
|
+
|
|
5
|
+
This module contains all project-related services including
|
|
6
|
+
project analysis and registry management.
|
|
7
|
+
|
|
8
|
+
Part of TSK-0046: Service Layer Architecture Reorganization
|
|
9
|
+
Part of TSK-0054: Auto-Configuration Feature - Phase 2
|
|
10
|
+
|
|
11
|
+
Services:
|
|
12
|
+
- ProjectAnalyzer: Analyzes project structure and metadata
|
|
13
|
+
- ProjectRegistry: Manages project registration and discovery
|
|
14
|
+
- ToolchainAnalyzerService: Analyzes project toolchains for auto-configuration
|
|
15
|
+
|
|
16
|
+
Detection Strategies:
|
|
17
|
+
- NodeJSDetectionStrategy: Detects Node.js projects
|
|
18
|
+
- PythonDetectionStrategy: Detects Python projects
|
|
19
|
+
- RustDetectionStrategy: Detects Rust projects
|
|
20
|
+
- GoDetectionStrategy: Detects Go projects
|
|
21
|
+
- IToolchainDetectionStrategy: Base interface for detection strategies
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from .analyzer import ProjectAnalyzer
|
|
25
|
+
from .detection_strategies import (
|
|
26
|
+
GoDetectionStrategy,
|
|
27
|
+
IToolchainDetectionStrategy,
|
|
28
|
+
NodeJSDetectionStrategy,
|
|
29
|
+
PythonDetectionStrategy,
|
|
30
|
+
RustDetectionStrategy,
|
|
31
|
+
)
|
|
32
|
+
from .registry import ProjectRegistry
|
|
33
|
+
from .toolchain_analyzer import ToolchainAnalyzerService
|
|
34
|
+
|
|
35
|
+
__all__ = [
|
|
36
|
+
"GoDetectionStrategy",
|
|
37
|
+
"IToolchainDetectionStrategy",
|
|
38
|
+
"NodeJSDetectionStrategy",
|
|
39
|
+
"ProjectAnalyzer",
|
|
40
|
+
"ProjectRegistry",
|
|
41
|
+
"PythonDetectionStrategy",
|
|
42
|
+
"RustDetectionStrategy",
|
|
43
|
+
"ToolchainAnalyzerService",
|
|
44
|
+
]
|