claude-mpm 5.0.9__py3-none-any.whl → 5.6.23__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.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +4 -0
- claude_mpm/agents/BASE_AGENT.md +164 -0
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +115 -0
- claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +186 -0
- claude_mpm/agents/MEMORY.md +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +479 -616
- claude_mpm/agents/WORKFLOW.md +6 -253
- claude_mpm/agents/agent_loader.py +13 -44
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/frontmatter_validator.py +70 -2
- claude_mpm/agents/templates/circuit-breakers.md +457 -62
- claude_mpm/cli/__init__.py +5 -2
- claude_mpm/cli/__main__.py +4 -0
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/agent_state_manager.py +18 -27
- claude_mpm/cli/commands/agents.py +177 -41
- claude_mpm/cli/commands/agents_reconcile.py +197 -0
- claude_mpm/cli/commands/auto_configure.py +723 -236
- claude_mpm/cli/commands/autotodos.py +566 -0
- claude_mpm/cli/commands/commander.py +216 -0
- claude_mpm/cli/commands/config.py +88 -2
- claude_mpm/cli/commands/configure.py +1874 -170
- claude_mpm/cli/commands/configure_agent_display.py +27 -6
- claude_mpm/cli/commands/hook_errors.py +60 -60
- claude_mpm/cli/commands/monitor.py +2 -2
- claude_mpm/cli/commands/mpm_init/core.py +232 -46
- claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
- claude_mpm/cli/commands/postmortem.py +1 -1
- claude_mpm/cli/commands/profile.py +276 -0
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skill_source.py +51 -2
- claude_mpm/cli/commands/skills.py +379 -204
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/executor.py +141 -19
- claude_mpm/cli/interactive/__init__.py +10 -0
- claude_mpm/cli/interactive/agent_wizard.py +115 -60
- claude_mpm/cli/interactive/questionary_styles.py +65 -0
- claude_mpm/cli/interactive/skill_selector.py +481 -0
- claude_mpm/cli/parsers/agents_parser.py +54 -9
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
- claude_mpm/cli/parsers/base_parser.py +88 -1
- claude_mpm/cli/parsers/commander_parser.py +116 -0
- claude_mpm/cli/parsers/config_parser.py +153 -83
- claude_mpm/cli/parsers/profile_parser.py +147 -0
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/parsers/skill_source_parser.py +4 -0
- claude_mpm/cli/parsers/skills_parser.py +1 -1
- claude_mpm/cli/startup.py +1017 -266
- claude_mpm/cli/startup_display.py +74 -6
- claude_mpm/cli/startup_logging.py +2 -2
- claude_mpm/cli/utils.py +7 -3
- claude_mpm/commander/__init__.py +78 -0
- claude_mpm/commander/adapters/__init__.py +60 -0
- claude_mpm/commander/adapters/auggie.py +260 -0
- claude_mpm/commander/adapters/base.py +288 -0
- claude_mpm/commander/adapters/claude_code.py +392 -0
- claude_mpm/commander/adapters/codex.py +237 -0
- claude_mpm/commander/adapters/communication.py +366 -0
- claude_mpm/commander/adapters/example_usage.py +310 -0
- claude_mpm/commander/adapters/mpm.py +389 -0
- claude_mpm/commander/adapters/registry.py +204 -0
- claude_mpm/commander/api/__init__.py +16 -0
- claude_mpm/commander/api/app.py +121 -0
- claude_mpm/commander/api/errors.py +133 -0
- claude_mpm/commander/api/routes/__init__.py +8 -0
- claude_mpm/commander/api/routes/events.py +184 -0
- claude_mpm/commander/api/routes/inbox.py +171 -0
- claude_mpm/commander/api/routes/messages.py +148 -0
- claude_mpm/commander/api/routes/projects.py +271 -0
- claude_mpm/commander/api/routes/sessions.py +226 -0
- claude_mpm/commander/api/routes/work.py +296 -0
- claude_mpm/commander/api/schemas.py +186 -0
- claude_mpm/commander/chat/__init__.py +7 -0
- claude_mpm/commander/chat/cli.py +146 -0
- claude_mpm/commander/chat/commands.py +96 -0
- claude_mpm/commander/chat/repl.py +310 -0
- claude_mpm/commander/config.py +51 -0
- claude_mpm/commander/config_loader.py +115 -0
- claude_mpm/commander/core/__init__.py +10 -0
- claude_mpm/commander/core/block_manager.py +325 -0
- claude_mpm/commander/core/response_manager.py +323 -0
- claude_mpm/commander/daemon.py +603 -0
- claude_mpm/commander/env_loader.py +59 -0
- claude_mpm/commander/events/__init__.py +26 -0
- claude_mpm/commander/events/manager.py +332 -0
- claude_mpm/commander/frameworks/__init__.py +12 -0
- claude_mpm/commander/frameworks/base.py +146 -0
- claude_mpm/commander/frameworks/claude_code.py +58 -0
- claude_mpm/commander/frameworks/mpm.py +62 -0
- claude_mpm/commander/inbox/__init__.py +16 -0
- claude_mpm/commander/inbox/dedup.py +128 -0
- claude_mpm/commander/inbox/inbox.py +224 -0
- claude_mpm/commander/inbox/models.py +70 -0
- claude_mpm/commander/instance_manager.py +450 -0
- claude_mpm/commander/llm/__init__.py +6 -0
- claude_mpm/commander/llm/openrouter_client.py +167 -0
- claude_mpm/commander/llm/summarizer.py +70 -0
- claude_mpm/commander/memory/__init__.py +45 -0
- claude_mpm/commander/memory/compression.py +347 -0
- claude_mpm/commander/memory/embeddings.py +230 -0
- claude_mpm/commander/memory/entities.py +310 -0
- claude_mpm/commander/memory/example_usage.py +290 -0
- claude_mpm/commander/memory/integration.py +325 -0
- claude_mpm/commander/memory/search.py +381 -0
- claude_mpm/commander/memory/store.py +657 -0
- claude_mpm/commander/models/__init__.py +18 -0
- claude_mpm/commander/models/events.py +121 -0
- claude_mpm/commander/models/project.py +162 -0
- claude_mpm/commander/models/work.py +214 -0
- claude_mpm/commander/parsing/__init__.py +20 -0
- claude_mpm/commander/parsing/extractor.py +132 -0
- claude_mpm/commander/parsing/output_parser.py +270 -0
- claude_mpm/commander/parsing/patterns.py +100 -0
- claude_mpm/commander/persistence/__init__.py +11 -0
- claude_mpm/commander/persistence/event_store.py +274 -0
- claude_mpm/commander/persistence/state_store.py +309 -0
- claude_mpm/commander/persistence/work_store.py +164 -0
- claude_mpm/commander/polling/__init__.py +13 -0
- claude_mpm/commander/polling/event_detector.py +104 -0
- claude_mpm/commander/polling/output_buffer.py +49 -0
- claude_mpm/commander/polling/output_poller.py +153 -0
- claude_mpm/commander/project_session.py +268 -0
- claude_mpm/commander/proxy/__init__.py +12 -0
- claude_mpm/commander/proxy/formatter.py +89 -0
- claude_mpm/commander/proxy/output_handler.py +191 -0
- claude_mpm/commander/proxy/relay.py +155 -0
- claude_mpm/commander/registry.py +410 -0
- claude_mpm/commander/runtime/__init__.py +10 -0
- claude_mpm/commander/runtime/executor.py +191 -0
- claude_mpm/commander/runtime/monitor.py +346 -0
- claude_mpm/commander/session/__init__.py +6 -0
- claude_mpm/commander/session/context.py +81 -0
- claude_mpm/commander/session/manager.py +59 -0
- claude_mpm/commander/tmux_orchestrator.py +361 -0
- claude_mpm/commander/web/__init__.py +1 -0
- claude_mpm/commander/work/__init__.py +30 -0
- claude_mpm/commander/work/executor.py +207 -0
- claude_mpm/commander/work/queue.py +405 -0
- claude_mpm/commander/workflow/__init__.py +27 -0
- claude_mpm/commander/workflow/event_handler.py +241 -0
- claude_mpm/commander/workflow/notifier.py +146 -0
- claude_mpm/commands/mpm-config.md +36 -0
- claude_mpm/commands/mpm-doctor.md +16 -21
- claude_mpm/commands/mpm-help.md +12 -286
- claude_mpm/commands/mpm-init.md +88 -506
- claude_mpm/commands/mpm-monitor.md +22 -401
- claude_mpm/commands/mpm-organize.md +128 -0
- claude_mpm/commands/mpm-postmortem.md +13 -107
- claude_mpm/commands/mpm-session-resume.md +20 -363
- claude_mpm/commands/mpm-status.md +13 -69
- claude_mpm/commands/mpm-ticket-view.md +60 -495
- claude_mpm/commands/mpm-version.md +13 -107
- claude_mpm/commands/mpm.md +8 -0
- claude_mpm/config/agent_presets.py +8 -7
- claude_mpm/config/agent_sources.py +27 -0
- claude_mpm/config/skill_sources.py +16 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +154 -2
- claude_mpm/core/config.py +37 -26
- claude_mpm/core/config_constants.py +74 -9
- claude_mpm/core/constants.py +56 -12
- claude_mpm/core/framework/formatters/content_formatter.py +3 -13
- claude_mpm/core/framework/loaders/agent_loader.py +8 -5
- claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
- claude_mpm/core/framework_loader.py +4 -2
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +12 -11
- claude_mpm/core/logger.py +39 -9
- claude_mpm/core/logging_utils.py +35 -11
- claude_mpm/core/network_config.py +148 -0
- claude_mpm/core/oneshot_session.py +7 -6
- claude_mpm/core/optimized_startup.py +61 -0
- claude_mpm/core/output_style_manager.py +219 -44
- claude_mpm/core/shared/config_loader.py +3 -1
- claude_mpm/core/socketio_pool.py +16 -8
- claude_mpm/core/unified_agent_registry.py +134 -16
- claude_mpm/core/unified_config.py +76 -8
- claude_mpm/core/unified_paths.py +95 -90
- claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/1WZnGYqX.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/67pF3qNn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/6RxdMKe4.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/8cZrfX0h.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.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/BRcwIQNr.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BViJ8lZt.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BcQ-Q0FE.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bpyvgze_.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C3rbW_a-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C8WYN38h.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C9I8FlXH.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIQcWgO2.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIctN7YN.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CKrS_JZW.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CR6P9C4A.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRRR9MD_.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CSXtMOf0.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT-sbxSk.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWm6DJsp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CpqQ1Kzn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9iCMida.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9ykgMoY.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DL2Ldur1.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DPfltzjH.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DR8nis88.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUliQN2b.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DXlhR01x.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_lyTybS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DngoTTgh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DqkmHtDC.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DsDh8EYs.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DypDmXgd.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/IPYC-LnN.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JpevfAFt.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/R8CEIRAd.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Zxy7qc-l.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/qtd3IeO4.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ulBFON_C.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/wQVh1CoA.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.Dr7t0z2J.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.RgBboRvH.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DG-KkbDf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.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/cli_enhancements.py +2 -1
- claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
- claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.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__/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/auto_pause_handler.py +485 -0
- claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +479 -128
- claude_mpm/hooks/claude_hooks/hook_handler.py +254 -83
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +149 -18
- claude_mpm/hooks/claude_hooks/memory_integration.py +67 -19
- claude_mpm/hooks/claude_hooks/response_tracking.py +44 -62
- 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 +69 -30
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +36 -103
- claude_mpm/hooks/claude_hooks/services/state_manager.py +23 -36
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +73 -75
- claude_mpm/hooks/kuzu_memory_hook.py +5 -5
- claude_mpm/hooks/memory_integration_hook.py +46 -1
- claude_mpm/hooks/session_resume_hook.py +89 -1
- claude_mpm/hooks/templates/pre_tool_use_template.py +10 -2
- claude_mpm/init.py +276 -19
- claude_mpm/models/agent_definition.py +7 -0
- claude_mpm/models/git_repository.py +3 -3
- claude_mpm/scripts/claude-hook-handler.sh +87 -20
- claude_mpm/scripts/launch_monitor.py +93 -13
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_builder.py +3 -3
- 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 +2 -2
- claude_mpm/services/agents/cache_git_manager.py +7 -7
- claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
- claude_mpm/services/agents/deployment/agent_discovery_service.py +6 -5
- claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
- claude_mpm/services/agents/deployment/agent_template_builder.py +42 -20
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
- claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +348 -29
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +570 -68
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +57 -4
- claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/recommender.py +5 -3
- claude_mpm/services/agents/single_tier_deployment_service.py +6 -6
- claude_mpm/services/agents/sources/git_source_sync_service.py +129 -11
- claude_mpm/services/agents/startup_sync.py +27 -4
- claude_mpm/services/agents/toolchain_detector.py +10 -6
- claude_mpm/services/analysis/__init__.py +11 -1
- claude_mpm/services/analysis/clone_detector.py +1030 -0
- claude_mpm/services/cli/__init__.py +3 -0
- claude_mpm/services/cli/incremental_pause_manager.py +561 -0
- claude_mpm/services/cli/session_resume_helper.py +10 -2
- claude_mpm/services/command_deployment_service.py +81 -10
- claude_mpm/services/delegation_detector.py +175 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +2 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +31 -1
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
- claude_mpm/services/diagnostics/models.py +14 -1
- claude_mpm/services/event_bus/config.py +3 -1
- claude_mpm/services/event_log.py +325 -0
- claude_mpm/services/git/git_operations_service.py +101 -16
- claude_mpm/services/infrastructure/__init__.py +4 -0
- claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
- claude_mpm/services/monitor/daemon.py +9 -2
- claude_mpm/services/monitor/daemon_manager.py +54 -7
- claude_mpm/services/monitor/management/lifecycle.py +15 -3
- claude_mpm/services/monitor/server.py +796 -30
- claude_mpm/services/pm_skills_deployer.py +884 -0
- claude_mpm/services/profile_manager.py +337 -0
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/self_upgrade_service.py +120 -12
- claude_mpm/services/skills/__init__.py +3 -0
- claude_mpm/services/skills/git_skill_source_manager.py +303 -12
- claude_mpm/services/skills/selective_skill_deployer.py +869 -0
- claude_mpm/services/skills/skill_discovery_service.py +74 -4
- claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
- claude_mpm/services/skills_deployer.py +294 -55
- claude_mpm/services/socketio/dashboard_server.py +1 -0
- claude_mpm/services/socketio/event_normalizer.py +51 -6
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/core.py +386 -108
- claude_mpm/services/socketio/server/main.py +12 -4
- claude_mpm/services/version_control/git_operations.py +103 -0
- claude_mpm/skills/__init__.py +2 -1
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
- claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
- claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
- claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
- claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
- claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
- claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
- claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
- claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
- claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
- claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
- claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
- claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
- claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
- claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
- claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
- claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
- claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
- claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
- claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
- claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
- claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
- claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
- claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
- claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/security-scanning.md +112 -0
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/registry.py +295 -90
- claude_mpm/skills/skill_manager.py +98 -3
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/utils/agent_dependency_loader.py +115 -4
- claude_mpm/utils/agent_filters.py +17 -44
- claude_mpm/utils/gitignore.py +3 -0
- claude_mpm/utils/migration.py +4 -4
- claude_mpm/utils/robust_installer.py +86 -21
- claude_mpm-5.6.23.dist-info/METADATA +393 -0
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/RECORD +508 -261
- claude_mpm-5.6.23.dist-info/entry_points.txt +5 -0
- claude_mpm-5.6.23.dist-info/licenses/LICENSE +94 -0
- claude_mpm-5.6.23.dist-info/licenses/LICENSE-FAQ.md +153 -0
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
- claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
- claude_mpm/agents/BASE_OPS.md +0 -219
- claude_mpm/agents/BASE_PM.md +0 -480
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
- claude_mpm/agents/BASE_QA.md +0 -167
- claude_mpm/agents/BASE_RESEARCH.md +0 -53
- claude_mpm/agents/OUTPUT_STYLE.md +0 -290
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +0 -1322
- claude_mpm/agents/base_agent_loader.py +0 -601
- claude_mpm/cli/commands/agents_detect.py +0 -380
- claude_mpm/cli/commands/agents_recommend.py +0 -309
- claude_mpm/cli/ticket_cli.py +0 -35
- claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
- claude_mpm/commands/mpm-agents-detect.md +0 -177
- claude_mpm/commands/mpm-agents-list.md +0 -131
- claude_mpm/commands/mpm-agents-recommend.md +0 -223
- claude_mpm/commands/mpm-config-view.md +0 -150
- claude_mpm/commands/mpm-ticket-organize.md +0 -304
- claude_mpm/dashboard/analysis_runner.py +0 -455
- claude_mpm/dashboard/index.html +0 -13
- claude_mpm/dashboard/open_dashboard.py +0 -66
- claude_mpm/dashboard/static/css/activity.css +0 -1958
- claude_mpm/dashboard/static/css/connection-status.css +0 -370
- claude_mpm/dashboard/static/css/dashboard.css +0 -4701
- claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
- claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
- claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
- claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
- claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
- claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
- claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
- claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
- claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
- claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
- claude_mpm/dashboard/static/js/connection-manager.js +0 -536
- claude_mpm/dashboard/static/js/dashboard.js +0 -1914
- claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/js/socket-client.js +0 -1474
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/socket.io.min.js +0 -7
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
- claude_mpm/dashboard/templates/code_simple.html +0 -153
- claude_mpm/dashboard/templates/index.html +0 -606
- claude_mpm/dashboard/test_dashboard.html +0 -372
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/scripts/mcp_server.py +0 -75
- claude_mpm/scripts/mcp_wrapper.py +0 -39
- claude_mpm/services/mcp_gateway/__init__.py +0 -159
- claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
- claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
- claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
- claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
- claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
- claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
- claude_mpm/services/mcp_gateway/core/base.py +0 -312
- claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
- claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
- claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
- claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
- claude_mpm/services/mcp_gateway/main.py +0 -589
- claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
- claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
- claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
- claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
- claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
- claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
- claude_mpm-5.0.9.dist-info/METADATA +0 -1028
- claude_mpm-5.0.9.dist-info/entry_points.txt +0 -10
- claude_mpm-5.0.9.dist-info/licenses/LICENSE +0 -21
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/WHEEL +0 -0
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/top_level.txt +0 -0
|
@@ -23,10 +23,14 @@ class CommandDeploymentService(BaseService):
|
|
|
23
23
|
DEPRECATED_COMMANDS = [
|
|
24
24
|
"mpm-agents.md", # Replaced by mpm-agents-list.md
|
|
25
25
|
"mpm-auto-configure.md", # Replaced by mpm-agents-auto-configure.md
|
|
26
|
-
"mpm-config.md", # Replaced by mpm-config
|
|
27
|
-
"mpm-organize.md", # Replaced by mpm-ticket-organize.md
|
|
26
|
+
"mpm-config-view.md", # Replaced by mpm-config.md
|
|
28
27
|
"mpm-resume.md", # Replaced by mpm-session-resume.md
|
|
29
28
|
"mpm-ticket.md", # Replaced by mpm-ticket-view.md
|
|
29
|
+
# Removed - consolidated into /mpm-configure
|
|
30
|
+
"mpm-agents-list.md", # Consolidated into /mpm-configure
|
|
31
|
+
"mpm-agents-detect.md", # Consolidated into /mpm-configure
|
|
32
|
+
"mpm-agents-auto-configure.md", # Consolidated into /mpm-configure
|
|
33
|
+
"mpm-agents-recommend.md", # Consolidated into /mpm-configure
|
|
30
34
|
]
|
|
31
35
|
|
|
32
36
|
def __init__(self):
|
|
@@ -315,10 +319,14 @@ class CommandDeploymentService(BaseService):
|
|
|
315
319
|
replacement_map = {
|
|
316
320
|
"mpm-agents.md": "mpm-agents-list.md",
|
|
317
321
|
"mpm-auto-configure.md": "mpm-agents-auto-configure.md",
|
|
318
|
-
"mpm-config.md": "mpm-config
|
|
319
|
-
"mpm-organize.md": "mpm-ticket-organize.md",
|
|
322
|
+
"mpm-config-view.md": "mpm-config.md",
|
|
320
323
|
"mpm-resume.md": "mpm-session-resume.md",
|
|
321
324
|
"mpm-ticket.md": "mpm-ticket-view.md",
|
|
325
|
+
# Removed commands - consolidated into /mpm-configure
|
|
326
|
+
"mpm-agents-list.md": "mpm-configure (use /mpm-configure)",
|
|
327
|
+
"mpm-agents-detect.md": "mpm-configure (use /mpm-configure)",
|
|
328
|
+
"mpm-agents-auto-configure.md": "mpm-configure (use /mpm-configure)",
|
|
329
|
+
"mpm-agents-recommend.md": "mpm-configure (use /mpm-configure)",
|
|
322
330
|
}
|
|
323
331
|
|
|
324
332
|
for deprecated_cmd in self.DEPRECATED_COMMANDS:
|
|
@@ -345,13 +353,71 @@ class CommandDeploymentService(BaseService):
|
|
|
345
353
|
|
|
346
354
|
return removed
|
|
347
355
|
|
|
356
|
+
def remove_stale_commands(self) -> int:
|
|
357
|
+
"""Remove stale MPM commands that no longer exist in source.
|
|
358
|
+
|
|
359
|
+
This method cleans up deployed commands that have been deleted or renamed
|
|
360
|
+
in the source directory. It's called automatically on startup to ensure
|
|
361
|
+
deployed commands stay in sync with source.
|
|
362
|
+
|
|
363
|
+
Returns:
|
|
364
|
+
Number of stale files removed
|
|
365
|
+
"""
|
|
366
|
+
if not self.target_dir.exists():
|
|
367
|
+
self.logger.debug(
|
|
368
|
+
f"Target directory does not exist: {self.target_dir}, skipping stale command cleanup"
|
|
369
|
+
)
|
|
370
|
+
return 0
|
|
371
|
+
|
|
372
|
+
if not self.source_dir.exists():
|
|
373
|
+
self.logger.warning(
|
|
374
|
+
f"Source directory does not exist: {self.source_dir}, cannot detect stale commands"
|
|
375
|
+
)
|
|
376
|
+
return 0
|
|
377
|
+
|
|
378
|
+
# Get current source commands (ground truth)
|
|
379
|
+
source_commands = {f.name for f in self.source_dir.glob("mpm*.md")}
|
|
380
|
+
|
|
381
|
+
# Get deployed commands
|
|
382
|
+
deployed_commands = {f.name for f in self.target_dir.glob("mpm*.md")}
|
|
383
|
+
|
|
384
|
+
# Find stale commands (deployed but not in source, excluding deprecated)
|
|
385
|
+
stale_commands = (
|
|
386
|
+
deployed_commands - source_commands - set(self.DEPRECATED_COMMANDS)
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
if not stale_commands:
|
|
390
|
+
self.logger.debug("No stale commands found to remove")
|
|
391
|
+
return 0
|
|
392
|
+
|
|
393
|
+
removed = 0
|
|
394
|
+
self.logger.info(f"Cleaning up {len(stale_commands)} stale command(s)...")
|
|
395
|
+
|
|
396
|
+
for stale_cmd in stale_commands:
|
|
397
|
+
stale_file = self.target_dir / stale_cmd
|
|
398
|
+
try:
|
|
399
|
+
stale_file.unlink()
|
|
400
|
+
self.logger.info(
|
|
401
|
+
f"Removed stale command: {stale_cmd} (no longer in source)"
|
|
402
|
+
)
|
|
403
|
+
removed += 1
|
|
404
|
+
except Exception as e:
|
|
405
|
+
# Log error but don't fail startup - this is non-critical
|
|
406
|
+
self.logger.warning(f"Failed to remove stale command {stale_cmd}: {e}")
|
|
407
|
+
|
|
408
|
+
if removed > 0:
|
|
409
|
+
self.logger.info(f"Removed {removed} stale command(s)")
|
|
410
|
+
|
|
411
|
+
return removed
|
|
412
|
+
|
|
348
413
|
|
|
349
414
|
def deploy_commands_on_startup(force: bool = False) -> None:
|
|
350
415
|
"""Convenience function to deploy commands during startup.
|
|
351
416
|
|
|
352
417
|
This function:
|
|
353
418
|
1. Removes deprecated commands that have been replaced
|
|
354
|
-
2.
|
|
419
|
+
2. Removes stale commands that no longer exist in source
|
|
420
|
+
3. Deploys current command files
|
|
355
421
|
|
|
356
422
|
Args:
|
|
357
423
|
force: Force deployment even if files exist
|
|
@@ -359,12 +425,17 @@ def deploy_commands_on_startup(force: bool = False) -> None:
|
|
|
359
425
|
service = CommandDeploymentService()
|
|
360
426
|
logger = get_logger("startup")
|
|
361
427
|
|
|
362
|
-
# Clean up deprecated commands
|
|
363
|
-
|
|
364
|
-
if
|
|
365
|
-
logger.info(f"Cleaned up {
|
|
428
|
+
# Clean up deprecated commands FIRST (known old commands)
|
|
429
|
+
deprecated_count = service.remove_deprecated_commands()
|
|
430
|
+
if deprecated_count > 0:
|
|
431
|
+
logger.info(f"Cleaned up {deprecated_count} deprecated command(s)")
|
|
432
|
+
|
|
433
|
+
# Clean up stale commands SECOND (deployed but not in source anymore)
|
|
434
|
+
stale_count = service.remove_stale_commands()
|
|
435
|
+
if stale_count > 0:
|
|
436
|
+
logger.info(f"Cleaned up {stale_count} stale command(s)")
|
|
366
437
|
|
|
367
|
-
# Deploy current commands
|
|
438
|
+
# Deploy current commands LAST
|
|
368
439
|
result = service.deploy_commands(force=force)
|
|
369
440
|
|
|
370
441
|
if result["deployed"]:
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"""Delegation Pattern Detector for PM outputs.
|
|
2
|
+
|
|
3
|
+
WHY this is needed:
|
|
4
|
+
- Detect when PM asks user to do something manually instead of delegating
|
|
5
|
+
- Convert manual instructions into actionable autotodos
|
|
6
|
+
- Enforce delegation principle in PM workflow
|
|
7
|
+
- Help PM recognize delegation opportunities
|
|
8
|
+
|
|
9
|
+
DESIGN DECISION: Pattern-based detection
|
|
10
|
+
- Simple regex patterns to catch common delegation anti-patterns
|
|
11
|
+
- Extract action items from PM's output
|
|
12
|
+
- Format as autotodos for PM to see and delegate properly
|
|
13
|
+
- Non-invasive - just surfaces patterns for review
|
|
14
|
+
|
|
15
|
+
Examples of patterns to detect:
|
|
16
|
+
- "Make sure .env.local is in your .gitignore"
|
|
17
|
+
- "You'll need to run npm install"
|
|
18
|
+
- "Please run the tests manually"
|
|
19
|
+
- "Remember to update the README"
|
|
20
|
+
- "Don't forget to commit your changes"
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import re
|
|
24
|
+
from typing import Any, Dict, List, Tuple
|
|
25
|
+
|
|
26
|
+
from ..core.logger import get_logger
|
|
27
|
+
|
|
28
|
+
# Delegation anti-patterns with capture groups for action extraction
|
|
29
|
+
# Each pattern is (regex_pattern, todo_template)
|
|
30
|
+
# {match} in template will be replaced with captured text
|
|
31
|
+
USER_DELEGATION_PATTERNS: List[Tuple[str, str]] = [
|
|
32
|
+
# "Make sure (to) X" → "Verify: X"
|
|
33
|
+
(r"(?i)make sure (?:to |that |you )?(.+)", "Verify: {match}"),
|
|
34
|
+
# "You'll/will need to X" → "Task: X"
|
|
35
|
+
(r"(?i)you(?:'ll| will)? need to (.+)", "Task: {match}"),
|
|
36
|
+
# "Please run/execute/do X" → "Execute: X"
|
|
37
|
+
(r"(?i)please (?:run|execute|do) (.+)", "Execute: {match}"),
|
|
38
|
+
# "Remember to X" → "Task: X"
|
|
39
|
+
(r"(?i)remember to (.+)", "Task: {match}"),
|
|
40
|
+
# "Don't forget to X" → "Task: X"
|
|
41
|
+
(r"(?i)don'?t forget to (.+)", "Task: {match}"),
|
|
42
|
+
# "You should/can/could X" → "Suggested: X"
|
|
43
|
+
(r"(?i)you (?:should|can|could) (.+)", "Suggested: {match}"),
|
|
44
|
+
# "Be sure to X" → "Task: X"
|
|
45
|
+
(r"(?i)be sure to (.+)", "Task: {match}"),
|
|
46
|
+
# "Don't forget X" (without 'to') → "Task: X"
|
|
47
|
+
(r"(?i)don'?t forget (.+)", "Task: {match}"),
|
|
48
|
+
# "You may want to X" → "Suggested: X"
|
|
49
|
+
(r"(?i)you may want to (.+)", "Suggested: {match}"),
|
|
50
|
+
# "It's important to X" → "Task: X"
|
|
51
|
+
(r"(?i)it'?s important to (.+)", "Task: {match}"),
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class DelegationDetector:
|
|
56
|
+
"""Detects delegation anti-patterns in PM outputs.
|
|
57
|
+
|
|
58
|
+
WHY this design:
|
|
59
|
+
- Pattern-based detection for common manual instruction phrases
|
|
60
|
+
- Extract actionable tasks from PM's text
|
|
61
|
+
- Format as autotodos for PM visibility
|
|
62
|
+
- Simple and extensible (add new patterns easily)
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
def __init__(self):
|
|
66
|
+
self.logger = get_logger("delegation_detector")
|
|
67
|
+
|
|
68
|
+
def detect_user_delegation(self, text: str) -> List[Dict[str, Any]]:
|
|
69
|
+
"""Detect delegation anti-patterns in text.
|
|
70
|
+
|
|
71
|
+
Scans text for patterns where PM is asking user to do something
|
|
72
|
+
manually instead of delegating to an agent.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
text: PM output text to scan
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
List of detected patterns with:
|
|
79
|
+
- pattern_type: Type of pattern matched
|
|
80
|
+
- original_text: Original sentence matched
|
|
81
|
+
- suggested_todo: Formatted todo text
|
|
82
|
+
- action: Extracted action text
|
|
83
|
+
"""
|
|
84
|
+
detections = []
|
|
85
|
+
|
|
86
|
+
# Split into sentences for better pattern matching
|
|
87
|
+
# Split on period followed by space/newline, or just newline
|
|
88
|
+
# This avoids splitting on periods in filenames like .env.local
|
|
89
|
+
sentences = re.split(r"(?:\.\s+|\n+)", text)
|
|
90
|
+
|
|
91
|
+
for sentence in sentences:
|
|
92
|
+
sentence = sentence.strip()
|
|
93
|
+
if not sentence:
|
|
94
|
+
continue
|
|
95
|
+
|
|
96
|
+
# Try each pattern
|
|
97
|
+
for pattern, todo_template in USER_DELEGATION_PATTERNS:
|
|
98
|
+
match = re.search(pattern, sentence, re.IGNORECASE)
|
|
99
|
+
if match:
|
|
100
|
+
# Extract the captured action
|
|
101
|
+
action = match.group(1).strip()
|
|
102
|
+
|
|
103
|
+
# Skip if action is too short (likely false positive)
|
|
104
|
+
if len(action) < 5:
|
|
105
|
+
continue
|
|
106
|
+
|
|
107
|
+
# Format todo using template
|
|
108
|
+
suggested_todo = todo_template.format(match=action)
|
|
109
|
+
|
|
110
|
+
# Determine pattern type from template prefix
|
|
111
|
+
pattern_type = todo_template.split(":")[0]
|
|
112
|
+
|
|
113
|
+
detection = {
|
|
114
|
+
"pattern_type": pattern_type,
|
|
115
|
+
"original_text": sentence.strip(),
|
|
116
|
+
"suggested_todo": suggested_todo,
|
|
117
|
+
"action": action,
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
detections.append(detection)
|
|
121
|
+
self.logger.debug(
|
|
122
|
+
f"Detected delegation pattern: {pattern_type} - {action}"
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# Only match first pattern per sentence
|
|
126
|
+
break
|
|
127
|
+
|
|
128
|
+
return detections
|
|
129
|
+
|
|
130
|
+
def format_as_autotodo(self, detection: Dict[str, Any]) -> Dict[str, str]:
|
|
131
|
+
"""Format a detection as an autotodo.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
detection: Detection dict from detect_user_delegation
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
Dictionary with todo fields (content, activeForm, status)
|
|
138
|
+
"""
|
|
139
|
+
pattern_type = detection["pattern_type"]
|
|
140
|
+
suggested_todo = detection["suggested_todo"]
|
|
141
|
+
action = detection["action"]
|
|
142
|
+
|
|
143
|
+
# Create todo content
|
|
144
|
+
content = f"[Delegation] {suggested_todo}"
|
|
145
|
+
|
|
146
|
+
# Active form for in-progress display
|
|
147
|
+
active_form = f"Delegating: {action[:30]}..."
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
"content": content,
|
|
151
|
+
"activeForm": active_form,
|
|
152
|
+
"status": "pending",
|
|
153
|
+
"metadata": {
|
|
154
|
+
"pattern_type": pattern_type,
|
|
155
|
+
"original_text": detection["original_text"],
|
|
156
|
+
"action": action,
|
|
157
|
+
"source": "delegation_detector",
|
|
158
|
+
},
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
# Global instance
|
|
163
|
+
_delegation_detector: DelegationDetector | None = None
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def get_delegation_detector() -> DelegationDetector:
|
|
167
|
+
"""Get the global delegation detector instance.
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
DelegationDetector instance
|
|
171
|
+
"""
|
|
172
|
+
global _delegation_detector
|
|
173
|
+
if _delegation_detector is None:
|
|
174
|
+
_delegation_detector = DelegationDetector()
|
|
175
|
+
return _delegation_detector
|
|
@@ -66,9 +66,9 @@ class AgentCheck(BaseDiagnosticCheck):
|
|
|
66
66
|
|
|
67
67
|
if deployed_count == 0:
|
|
68
68
|
status = ValidationSeverity.ERROR
|
|
69
|
-
message = f"No agents deployed (0/{available_count}
|
|
69
|
+
message = f"No agents deployed (0/{available_count} cached)"
|
|
70
70
|
fix_command = "claude-mpm agents deploy"
|
|
71
|
-
fix_description = "Deploy all
|
|
71
|
+
fix_description = "Deploy all cached agents"
|
|
72
72
|
elif deployed_count < available_count:
|
|
73
73
|
status = ValidationSeverity.WARNING
|
|
74
74
|
message = f"{deployed_count}/{available_count} agents deployed"
|
|
@@ -69,6 +69,13 @@ class AgentSourcesCheck(BaseDiagnosticCheck):
|
|
|
69
69
|
fix_command="claude-mpm agent-source add https://github.com/bobmatnyc/claude-mpm-agents",
|
|
70
70
|
fix_description="Add default system repository",
|
|
71
71
|
sub_results=sub_results if self.verbose else [],
|
|
72
|
+
explanation=(
|
|
73
|
+
"Agent sources define where Claude MPM discovers specialized agents. "
|
|
74
|
+
"Without configured sources, no agents can be deployed or delegated to. "
|
|
75
|
+
"This is a critical component for multi-agent workflows."
|
|
76
|
+
),
|
|
77
|
+
severity="critical",
|
|
78
|
+
doc_link="https://github.com/bobmatnyc/claude-mpm/blob/main/docs/guides/agent-sources.md",
|
|
72
79
|
)
|
|
73
80
|
|
|
74
81
|
# Check 2: Configuration is valid YAML
|
|
@@ -141,16 +148,30 @@ class AgentSourcesCheck(BaseDiagnosticCheck):
|
|
|
141
148
|
r for r in sub_results if r.status == ValidationSeverity.WARNING
|
|
142
149
|
]
|
|
143
150
|
|
|
151
|
+
# Determine status and enhanced troubleshooting info (issue #125)
|
|
144
152
|
if error_results:
|
|
145
153
|
status = ValidationSeverity.ERROR
|
|
146
154
|
message = f"Agent sources have {len(error_results)} critical issue(s)"
|
|
147
155
|
fix_command = None
|
|
148
156
|
fix_description = None
|
|
157
|
+
severity = "critical"
|
|
158
|
+
explanation = (
|
|
159
|
+
"Agent sources are the foundation of Claude MPM's delegation system. "
|
|
160
|
+
"Critical errors prevent agent discovery and deployment, blocking "
|
|
161
|
+
"multi-agent workflows entirely."
|
|
162
|
+
)
|
|
163
|
+
doc_link = "https://github.com/bobmatnyc/claude-mpm/blob/main/docs/guides/agent-sources.md"
|
|
149
164
|
elif warning_results:
|
|
150
165
|
status = ValidationSeverity.WARNING
|
|
151
166
|
message = f"Agent sources have {len(warning_results)} minor issue(s)"
|
|
152
167
|
fix_command = "claude-mpm agent-source update"
|
|
153
168
|
fix_description = "Update all sources to refresh cache"
|
|
169
|
+
severity = "medium"
|
|
170
|
+
explanation = (
|
|
171
|
+
"Some agent sources have issues but the system can still function. "
|
|
172
|
+
"You may have limited agent availability or outdated cache."
|
|
173
|
+
)
|
|
174
|
+
doc_link = "https://github.com/bobmatnyc/claude-mpm/blob/main/docs/guides/agent-sources.md"
|
|
154
175
|
else:
|
|
155
176
|
status = OperationResult.SUCCESS
|
|
156
177
|
enabled_count = details["enabled_sources"]
|
|
@@ -158,6 +179,12 @@ class AgentSourcesCheck(BaseDiagnosticCheck):
|
|
|
158
179
|
message = f"All checks passed ({enabled_count} source(s), {agents_count} agent(s))"
|
|
159
180
|
fix_command = None
|
|
160
181
|
fix_description = None
|
|
182
|
+
severity = "info"
|
|
183
|
+
explanation = (
|
|
184
|
+
"Agent sources are properly configured and agents are discoverable. "
|
|
185
|
+
"You can delegate tasks to specialized agents."
|
|
186
|
+
)
|
|
187
|
+
doc_link = ""
|
|
161
188
|
|
|
162
189
|
return DiagnosticResult(
|
|
163
190
|
category=self.category,
|
|
@@ -167,6 +194,9 @@ class AgentSourcesCheck(BaseDiagnosticCheck):
|
|
|
167
194
|
fix_command=fix_command,
|
|
168
195
|
fix_description=fix_description,
|
|
169
196
|
sub_results=sub_results if self.verbose else [],
|
|
197
|
+
explanation=explanation,
|
|
198
|
+
severity=severity,
|
|
199
|
+
doc_link=doc_link,
|
|
170
200
|
)
|
|
171
201
|
|
|
172
202
|
except Exception as e:
|
|
@@ -432,7 +462,7 @@ class AgentSourcesCheck(BaseDiagnosticCheck):
|
|
|
432
462
|
|
|
433
463
|
def _check_cache_directory(self) -> DiagnosticResult:
|
|
434
464
|
"""Check cache directory health."""
|
|
435
|
-
cache_dir = Path.home() / ".claude-mpm" / "cache" / "
|
|
465
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
436
466
|
|
|
437
467
|
if not cache_dir.exists():
|
|
438
468
|
return DiagnosticResult(
|
|
@@ -63,12 +63,36 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
63
63
|
status = OperationResult.SUCCESS
|
|
64
64
|
message = "Configuration is valid"
|
|
65
65
|
|
|
66
|
+
# Add enhanced troubleshooting info (issue #125)
|
|
67
|
+
severity = "medium"
|
|
68
|
+
explanation = ""
|
|
69
|
+
doc_link = ""
|
|
70
|
+
|
|
71
|
+
if status == ValidationSeverity.ERROR:
|
|
72
|
+
severity = "high"
|
|
73
|
+
explanation = (
|
|
74
|
+
"Configuration files control how Claude MPM behaves. Critical errors "
|
|
75
|
+
"in configuration may prevent features from working correctly or cause "
|
|
76
|
+
"unexpected behavior."
|
|
77
|
+
)
|
|
78
|
+
doc_link = "https://github.com/bobmatnyc/claude-mpm/blob/main/docs/configuration.md"
|
|
79
|
+
elif status == ValidationSeverity.WARNING:
|
|
80
|
+
severity = "low"
|
|
81
|
+
explanation = (
|
|
82
|
+
"Configuration has minor issues that may affect optional features. "
|
|
83
|
+
"Core functionality should still work."
|
|
84
|
+
)
|
|
85
|
+
doc_link = "https://github.com/bobmatnyc/claude-mpm/blob/main/docs/configuration.md"
|
|
86
|
+
|
|
66
87
|
return DiagnosticResult(
|
|
67
88
|
category=self.category,
|
|
68
89
|
status=status,
|
|
69
90
|
message=message,
|
|
70
91
|
details=details,
|
|
71
92
|
sub_results=sub_results if self.verbose else [],
|
|
93
|
+
explanation=explanation,
|
|
94
|
+
severity=severity,
|
|
95
|
+
doc_link=doc_link,
|
|
72
96
|
)
|
|
73
97
|
|
|
74
98
|
except Exception as e:
|
|
@@ -65,12 +65,34 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
65
65
|
status = OperationResult.SUCCESS
|
|
66
66
|
message = "Installation is healthy"
|
|
67
67
|
|
|
68
|
+
# Determine severity and explanation based on status (issue #125)
|
|
69
|
+
severity = "medium"
|
|
70
|
+
explanation = ""
|
|
71
|
+
doc_link = ""
|
|
72
|
+
|
|
73
|
+
if status == ValidationSeverity.ERROR:
|
|
74
|
+
severity = "high"
|
|
75
|
+
explanation = (
|
|
76
|
+
"Claude MPM installation verification failed. Critical components are missing "
|
|
77
|
+
"or misconfigured, which will prevent the system from functioning properly."
|
|
78
|
+
)
|
|
79
|
+
doc_link = "https://github.com/bobmatnyc/claude-mpm/blob/main/docs/installation.md"
|
|
80
|
+
elif status == ValidationSeverity.WARNING:
|
|
81
|
+
severity = "medium"
|
|
82
|
+
explanation = (
|
|
83
|
+
"Installation is functional but has minor issues. These may affect "
|
|
84
|
+
"performance or features but won't prevent basic operation."
|
|
85
|
+
)
|
|
86
|
+
|
|
68
87
|
return DiagnosticResult(
|
|
69
88
|
category=self.category,
|
|
70
89
|
status=status,
|
|
71
90
|
message=message,
|
|
72
91
|
details=details,
|
|
73
92
|
sub_results=sub_results if self.verbose else [],
|
|
93
|
+
explanation=explanation,
|
|
94
|
+
severity=severity,
|
|
95
|
+
doc_link=doc_link,
|
|
74
96
|
)
|
|
75
97
|
|
|
76
98
|
except Exception as e:
|
|
@@ -216,12 +216,35 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
216
216
|
status = ValidationSeverity.WARNING
|
|
217
217
|
message = f"All {total_services} MCP services installed but connections not tested"
|
|
218
218
|
|
|
219
|
+
# Enhanced troubleshooting info (issue #125)
|
|
220
|
+
severity = "medium"
|
|
221
|
+
explanation = ""
|
|
222
|
+
doc_link = ""
|
|
223
|
+
|
|
224
|
+
if status == ValidationSeverity.ERROR:
|
|
225
|
+
severity = "high"
|
|
226
|
+
explanation = (
|
|
227
|
+
"MCP services provide enhanced capabilities like vector search, browser automation, "
|
|
228
|
+
"and ticket management. Critical errors prevent these services from functioning."
|
|
229
|
+
)
|
|
230
|
+
doc_link = "https://github.com/bobmatnyc/claude-mpm/blob/main/docs/mcp-services.md"
|
|
231
|
+
elif status == ValidationSeverity.WARNING:
|
|
232
|
+
severity = "low"
|
|
233
|
+
explanation = (
|
|
234
|
+
"MCP services are optional but provide powerful features. "
|
|
235
|
+
"Some services may not be installed or configured properly."
|
|
236
|
+
)
|
|
237
|
+
doc_link = "https://github.com/bobmatnyc/claude-mpm/blob/main/docs/mcp-services.md"
|
|
238
|
+
|
|
219
239
|
return DiagnosticResult(
|
|
220
240
|
category=self.category,
|
|
221
241
|
status=status,
|
|
222
242
|
message=message,
|
|
223
243
|
details=details,
|
|
224
244
|
sub_results=sub_results if self.verbose else [],
|
|
245
|
+
explanation=explanation,
|
|
246
|
+
severity=severity,
|
|
247
|
+
doc_link=doc_link,
|
|
225
248
|
)
|
|
226
249
|
|
|
227
250
|
except Exception as e:
|
|
@@ -28,6 +28,15 @@ class DoctorReporter:
|
|
|
28
28
|
OperationResult.SKIPPED: "⏭️ ",
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
# Severity level emojis (issue #125)
|
|
32
|
+
SEVERITY_SYMBOLS = {
|
|
33
|
+
"critical": "🔴",
|
|
34
|
+
"high": "🟠",
|
|
35
|
+
"medium": "🟡",
|
|
36
|
+
"low": "🟢",
|
|
37
|
+
"info": "🔵",
|
|
38
|
+
}
|
|
39
|
+
|
|
31
40
|
# ANSI color codes
|
|
32
41
|
COLORS = {
|
|
33
42
|
"reset": "\033[0m",
|
|
@@ -93,8 +102,15 @@ class DoctorReporter:
|
|
|
93
102
|
symbol = self.STATUS_SYMBOLS.get(result.status, "?")
|
|
94
103
|
color = self._get_status_color(result.status)
|
|
95
104
|
|
|
105
|
+
# Add severity indicator if present (issue #125)
|
|
106
|
+
severity_prefix = ""
|
|
107
|
+
if result.severity and result.severity != "medium":
|
|
108
|
+
severity_symbol = self.SEVERITY_SYMBOLS.get(result.severity, "")
|
|
109
|
+
if severity_symbol:
|
|
110
|
+
severity_prefix = f"{severity_symbol} {result.severity.upper()}: "
|
|
111
|
+
|
|
96
112
|
# Main result line
|
|
97
|
-
line = f"{indent_str}{symbol} {result.category}: "
|
|
113
|
+
line = f"{indent_str}{severity_prefix}{symbol} {result.category}: "
|
|
98
114
|
|
|
99
115
|
if result.status == OperationResult.SUCCESS:
|
|
100
116
|
line += self._color("OK", color)
|
|
@@ -111,6 +127,15 @@ class DoctorReporter:
|
|
|
111
127
|
message_indent = " " + indent_str
|
|
112
128
|
print(f"{message_indent}{result.message}")
|
|
113
129
|
|
|
130
|
+
# Explanation (issue #125)
|
|
131
|
+
if result.explanation:
|
|
132
|
+
# Format multi-line explanations with proper indentation
|
|
133
|
+
explanation_lines = result.explanation.split("\n")
|
|
134
|
+
for explanation_line in explanation_lines:
|
|
135
|
+
print(
|
|
136
|
+
f"{message_indent}{self._color(explanation_line.strip(), 'gray')}"
|
|
137
|
+
)
|
|
138
|
+
|
|
114
139
|
# Details (in verbose mode)
|
|
115
140
|
if self.verbose and result.details:
|
|
116
141
|
for key, value in result.details.items():
|
|
@@ -126,6 +151,11 @@ class DoctorReporter:
|
|
|
126
151
|
if result.fix_description:
|
|
127
152
|
print(f"{fix_indent} {self._color(result.fix_description, 'gray')}")
|
|
128
153
|
|
|
154
|
+
# Documentation link (issue #125)
|
|
155
|
+
if result.doc_link:
|
|
156
|
+
doc_indent = " " + indent_str
|
|
157
|
+
print(f"{doc_indent}{self._color('📖 Docs:', 'blue')} {result.doc_link}")
|
|
158
|
+
|
|
129
159
|
# Sub-results (in verbose mode)
|
|
130
160
|
if self.verbose and result.sub_results:
|
|
131
161
|
for sub_result in result.sub_results:
|
|
@@ -51,9 +51,14 @@ class DiagnosticResult:
|
|
|
51
51
|
fix_description: Optional[str] = None
|
|
52
52
|
sub_results: List["DiagnosticResult"] = field(default_factory=list)
|
|
53
53
|
|
|
54
|
+
# Enhanced troubleshooting fields (issue #125)
|
|
55
|
+
explanation: str = "" # What this check means and why it matters
|
|
56
|
+
severity: str = "medium" # critical, high, medium, low, info
|
|
57
|
+
doc_link: str = "" # Link to relevant documentation
|
|
58
|
+
|
|
54
59
|
def to_dict(self) -> Dict[str, Any]:
|
|
55
60
|
"""Convert to dictionary for JSON serialization."""
|
|
56
|
-
|
|
61
|
+
result = {
|
|
57
62
|
"category": self.category,
|
|
58
63
|
"status": self.status.value,
|
|
59
64
|
"message": self.message,
|
|
@@ -62,6 +67,14 @@ class DiagnosticResult:
|
|
|
62
67
|
"fix_description": self.fix_description,
|
|
63
68
|
"sub_results": [r.to_dict() for r in self.sub_results],
|
|
64
69
|
}
|
|
70
|
+
# Include enhanced fields if present
|
|
71
|
+
if self.explanation:
|
|
72
|
+
result["explanation"] = self.explanation
|
|
73
|
+
if self.severity != "medium":
|
|
74
|
+
result["severity"] = self.severity
|
|
75
|
+
if self.doc_link:
|
|
76
|
+
result["doc_link"] = self.doc_link
|
|
77
|
+
return result
|
|
65
78
|
|
|
66
79
|
@property
|
|
67
80
|
def has_issues(self) -> bool:
|
|
@@ -52,9 +52,11 @@ class EventBusConfig:
|
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
# Relay configuration
|
|
55
|
+
# DirectSocketIORelay disabled by default - events already emit via direct sio.emit()
|
|
56
|
+
# Enable with CLAUDE_MPM_RELAY_ENABLED=true if needed for external consumers
|
|
55
57
|
relay_enabled: bool = field(
|
|
56
58
|
default_factory=lambda: os.environ.get(
|
|
57
|
-
"CLAUDE_MPM_RELAY_ENABLED", "
|
|
59
|
+
"CLAUDE_MPM_RELAY_ENABLED", "false"
|
|
58
60
|
).lower()
|
|
59
61
|
== "true"
|
|
60
62
|
)
|