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
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Chrome DevTools MCP Auto-Installer
|
|
3
|
+
===================================
|
|
4
|
+
|
|
5
|
+
Automatically installs and configures chrome-devtools-mcp on startup
|
|
6
|
+
to enable browser automation and web interaction capabilities in Claude Code.
|
|
7
|
+
|
|
8
|
+
WHY: Users should have browser automation capabilities out-of-the-box without
|
|
9
|
+
manual MCP server configuration.
|
|
10
|
+
|
|
11
|
+
DESIGN DECISION: Non-blocking installation that doesn't prevent startup if it fails.
|
|
12
|
+
Uses the `claude mcp add` command for native Claude Code integration.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import json
|
|
16
|
+
import subprocess
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import Optional, Tuple
|
|
19
|
+
|
|
20
|
+
from ..core.logger import get_logger
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ChromeDevToolsInstaller:
|
|
24
|
+
"""Manages automatic installation of chrome-devtools-mcp."""
|
|
25
|
+
|
|
26
|
+
MCP_SERVER_NAME = "chrome-devtools"
|
|
27
|
+
INSTALL_COMMAND = ["npx", "chrome-devtools-mcp@latest"]
|
|
28
|
+
|
|
29
|
+
def __init__(self):
|
|
30
|
+
"""Initialize the chrome-devtools installer."""
|
|
31
|
+
self.logger = get_logger(__name__)
|
|
32
|
+
self.claude_config_path = Path.home() / ".claude.json"
|
|
33
|
+
|
|
34
|
+
def is_already_configured(self) -> bool:
|
|
35
|
+
"""
|
|
36
|
+
Check if chrome-devtools-mcp is already configured in Claude.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
True if already configured, False otherwise
|
|
40
|
+
"""
|
|
41
|
+
try:
|
|
42
|
+
if not self.claude_config_path.exists():
|
|
43
|
+
self.logger.debug("Claude config file not found")
|
|
44
|
+
return False
|
|
45
|
+
|
|
46
|
+
with open(self.claude_config_path) as f:
|
|
47
|
+
config = json.load(f)
|
|
48
|
+
|
|
49
|
+
# Check if chrome-devtools is in mcpServers
|
|
50
|
+
mcp_servers = config.get("mcpServers", {})
|
|
51
|
+
is_configured = self.MCP_SERVER_NAME in mcp_servers
|
|
52
|
+
|
|
53
|
+
if is_configured:
|
|
54
|
+
self.logger.debug(
|
|
55
|
+
f"{self.MCP_SERVER_NAME} already configured in Claude"
|
|
56
|
+
)
|
|
57
|
+
else:
|
|
58
|
+
self.logger.debug(f"{self.MCP_SERVER_NAME} not found in Claude config")
|
|
59
|
+
|
|
60
|
+
return is_configured
|
|
61
|
+
|
|
62
|
+
except json.JSONDecodeError as e:
|
|
63
|
+
self.logger.warning(f"Failed to parse Claude config: {e}")
|
|
64
|
+
return False
|
|
65
|
+
except Exception as e:
|
|
66
|
+
self.logger.debug(f"Error checking Chrome DevTools configuration: {e}")
|
|
67
|
+
return False
|
|
68
|
+
|
|
69
|
+
def install_mcp_server(self) -> Tuple[bool, Optional[str]]:
|
|
70
|
+
"""
|
|
71
|
+
Install chrome-devtools-mcp using the claude CLI.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Tuple of (success: bool, error_message: Optional[str])
|
|
75
|
+
"""
|
|
76
|
+
try:
|
|
77
|
+
# Build the command: claude mcp add chrome-devtools -- npx chrome-devtools-mcp@latest
|
|
78
|
+
command = [
|
|
79
|
+
"claude",
|
|
80
|
+
"mcp",
|
|
81
|
+
"add",
|
|
82
|
+
self.MCP_SERVER_NAME,
|
|
83
|
+
"--",
|
|
84
|
+
] + self.INSTALL_COMMAND
|
|
85
|
+
|
|
86
|
+
self.logger.debug(f"Running: {' '.join(command)}")
|
|
87
|
+
|
|
88
|
+
# Run the command with timeout
|
|
89
|
+
result = subprocess.run(
|
|
90
|
+
command,
|
|
91
|
+
capture_output=True,
|
|
92
|
+
text=True,
|
|
93
|
+
timeout=30, # 30 second timeout
|
|
94
|
+
check=False,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
if result.returncode == 0:
|
|
98
|
+
self.logger.info(
|
|
99
|
+
f"Successfully installed {self.MCP_SERVER_NAME} MCP server"
|
|
100
|
+
)
|
|
101
|
+
return True, None
|
|
102
|
+
|
|
103
|
+
# Command failed
|
|
104
|
+
error_msg = (
|
|
105
|
+
f"Failed to install {self.MCP_SERVER_NAME}: {result.stderr.strip()}"
|
|
106
|
+
)
|
|
107
|
+
self.logger.warning(error_msg)
|
|
108
|
+
return False, error_msg
|
|
109
|
+
|
|
110
|
+
except subprocess.TimeoutExpired:
|
|
111
|
+
error_msg = (
|
|
112
|
+
f"Installation of {self.MCP_SERVER_NAME} timed out after 30 seconds"
|
|
113
|
+
)
|
|
114
|
+
self.logger.warning(error_msg)
|
|
115
|
+
return False, error_msg
|
|
116
|
+
|
|
117
|
+
except FileNotFoundError:
|
|
118
|
+
error_msg = "Claude CLI not found. Is Claude Code installed?"
|
|
119
|
+
self.logger.warning(error_msg)
|
|
120
|
+
return False, error_msg
|
|
121
|
+
|
|
122
|
+
except Exception as e:
|
|
123
|
+
error_msg = f"Unexpected error installing {self.MCP_SERVER_NAME}: {e}"
|
|
124
|
+
self.logger.warning(error_msg)
|
|
125
|
+
return False, error_msg
|
|
126
|
+
|
|
127
|
+
def auto_install(self, quiet: bool = False) -> bool:
|
|
128
|
+
"""
|
|
129
|
+
Automatically install chrome-devtools-mcp if not already configured.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
quiet: If True, suppress console output
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
True if installation succeeded or already configured, False otherwise
|
|
136
|
+
"""
|
|
137
|
+
# Check if already configured
|
|
138
|
+
if self.is_already_configured():
|
|
139
|
+
if not quiet:
|
|
140
|
+
print("✓ Chrome DevTools MCP ready", flush=True)
|
|
141
|
+
return True
|
|
142
|
+
|
|
143
|
+
# Show progress feedback
|
|
144
|
+
if not quiet:
|
|
145
|
+
print("Installing Chrome DevTools MCP...", end=" ", flush=True)
|
|
146
|
+
|
|
147
|
+
# Install the MCP server
|
|
148
|
+
success, error = self.install_mcp_server()
|
|
149
|
+
|
|
150
|
+
if success:
|
|
151
|
+
if not quiet:
|
|
152
|
+
print("✓", flush=True)
|
|
153
|
+
return True
|
|
154
|
+
|
|
155
|
+
# Installation failed
|
|
156
|
+
if not quiet:
|
|
157
|
+
print("(skipped)", flush=True)
|
|
158
|
+
|
|
159
|
+
# Log the error but don't fail startup
|
|
160
|
+
self.logger.debug(f"Chrome DevTools installation skipped: {error}")
|
|
161
|
+
return False
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def auto_install_chrome_devtools(quiet: bool = False) -> bool:
|
|
165
|
+
"""
|
|
166
|
+
Convenience function to auto-install chrome-devtools-mcp.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
quiet: If True, suppress console output
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
True if installation succeeded or already configured, False otherwise
|
|
173
|
+
"""
|
|
174
|
+
installer = ChromeDevToolsInstaller()
|
|
175
|
+
return installer.auto_install(quiet=quiet)
|
|
@@ -111,14 +111,14 @@ class SimpleAgentManager:
|
|
|
111
111
|
local_agents = self._discover_local_template_agents()
|
|
112
112
|
agents.extend(local_agents)
|
|
113
113
|
|
|
114
|
-
# Discover
|
|
114
|
+
# Discover Git-sourced agents if requested
|
|
115
115
|
if include_remote:
|
|
116
116
|
try:
|
|
117
|
-
|
|
118
|
-
agents.extend(
|
|
119
|
-
self.logger.info(f"Discovered {len(
|
|
117
|
+
git_agents = self._discover_git_agents()
|
|
118
|
+
agents.extend(git_agents)
|
|
119
|
+
self.logger.info(f"Discovered {len(git_agents)} Git-sourced agents")
|
|
120
120
|
except Exception as e:
|
|
121
|
-
self.logger.warning(f"Failed to discover
|
|
121
|
+
self.logger.warning(f"Failed to discover Git-sourced agents: {e}")
|
|
122
122
|
|
|
123
123
|
# Sort agents by name for consistent display
|
|
124
124
|
agents.sort(key=lambda a: a.name)
|
|
@@ -152,7 +152,7 @@ class SimpleAgentManager:
|
|
|
152
152
|
|
|
153
153
|
# Get metadata for display info
|
|
154
154
|
metadata = template_data.get("metadata", {})
|
|
155
|
-
metadata.get("name", agent_id)
|
|
155
|
+
display_name = metadata.get("name", agent_id)
|
|
156
156
|
description = metadata.get(
|
|
157
157
|
"description", "No description available"
|
|
158
158
|
)
|
|
@@ -182,9 +182,10 @@ class SimpleAgentManager:
|
|
|
182
182
|
dependencies=display_tools,
|
|
183
183
|
)
|
|
184
184
|
|
|
185
|
-
# Set deployment status
|
|
185
|
+
# Set deployment status and display name
|
|
186
186
|
agent_config.is_deployed = is_deployed
|
|
187
187
|
agent_config.source_type = "local"
|
|
188
|
+
agent_config.display_name = display_name
|
|
188
189
|
|
|
189
190
|
agents.append(agent_config)
|
|
190
191
|
|
|
@@ -207,20 +208,20 @@ class SimpleAgentManager:
|
|
|
207
208
|
|
|
208
209
|
return agents
|
|
209
210
|
|
|
210
|
-
def
|
|
211
|
-
"""Discover agents from
|
|
211
|
+
def _discover_git_agents(self) -> List[AgentConfig]:
|
|
212
|
+
"""Discover agents from Git sources using GitSourceManager."""
|
|
212
213
|
try:
|
|
213
214
|
from claude_mpm.services.agents.git_source_manager import GitSourceManager
|
|
214
215
|
|
|
215
|
-
# Initialize source manager (uses ~/.claude-mpm/cache/
|
|
216
|
+
# Initialize source manager (uses ~/.claude-mpm/cache/agents by default)
|
|
216
217
|
source_manager = GitSourceManager()
|
|
217
218
|
|
|
218
219
|
# Discover all cached agents from all repositories
|
|
219
|
-
|
|
220
|
+
git_agent_dicts = source_manager.list_cached_agents()
|
|
220
221
|
|
|
221
222
|
# Convert to AgentConfig objects for UI display
|
|
222
223
|
agents = []
|
|
223
|
-
for agent_dict in
|
|
224
|
+
for agent_dict in git_agent_dicts:
|
|
224
225
|
# Extract metadata
|
|
225
226
|
metadata = agent_dict.get("metadata", {})
|
|
226
227
|
agent_id = agent_dict.get("agent_id", "unknown")
|
|
@@ -235,7 +236,7 @@ class SimpleAgentManager:
|
|
|
235
236
|
# Create AgentConfig with source information
|
|
236
237
|
# Store full agent_dict for later use in deployment
|
|
237
238
|
agent_config = AgentConfig(
|
|
238
|
-
name=
|
|
239
|
+
name=name, # Use display name for UI
|
|
239
240
|
description=(
|
|
240
241
|
f"[{category}] {description[:60]}..."
|
|
241
242
|
if len(description) > 60
|
|
@@ -248,6 +249,7 @@ class SimpleAgentManager:
|
|
|
248
249
|
agent_config.source_type = "remote"
|
|
249
250
|
agent_config.is_deployed = is_deployed
|
|
250
251
|
agent_config.display_name = name
|
|
252
|
+
agent_config.agent_id = agent_id # Store technical ID for reference
|
|
251
253
|
agent_config.full_agent_id = agent_id
|
|
252
254
|
agent_config.source_dict = agent_dict # Store full dict for deployment
|
|
253
255
|
|
|
@@ -272,9 +274,9 @@ class SimpleAgentManager:
|
|
|
272
274
|
True if agent is deployed, False otherwise
|
|
273
275
|
"""
|
|
274
276
|
# Check virtual deployment state (primary method)
|
|
277
|
+
# Only checking project-level deployment in simplified architecture
|
|
275
278
|
deployment_state_paths = [
|
|
276
279
|
Path.cwd() / ".claude" / "agents" / ".mpm_deployment_state",
|
|
277
|
-
Path.home() / ".claude" / "agents" / ".mpm_deployment_state",
|
|
278
280
|
]
|
|
279
281
|
|
|
280
282
|
for state_path in deployment_state_paths:
|
|
@@ -319,8 +321,8 @@ class SimpleAgentManager:
|
|
|
319
321
|
leaf_name = agent_id.split("/")[-1]
|
|
320
322
|
agent_file_names.append(f"{leaf_name}.md")
|
|
321
323
|
|
|
322
|
-
# Check .claude
|
|
323
|
-
project_agents_dir = Path.cwd() / ".claude
|
|
324
|
+
# Check .claude/agents/ directory (project deployment)
|
|
325
|
+
project_agents_dir = Path.cwd() / ".claude" / "agents"
|
|
324
326
|
if project_agents_dir.exists():
|
|
325
327
|
for agent_file_name in agent_file_names:
|
|
326
328
|
agent_file = project_agents_dir / agent_file_name
|
|
@@ -330,15 +332,4 @@ class SimpleAgentManager:
|
|
|
330
332
|
)
|
|
331
333
|
return True
|
|
332
334
|
|
|
333
|
-
# Check ~/.claude/agents/ directory (user level)
|
|
334
|
-
user_agents_dir = Path.home() / ".claude" / "agents"
|
|
335
|
-
if user_agents_dir.exists():
|
|
336
|
-
for agent_file_name in agent_file_names:
|
|
337
|
-
agent_file = user_agents_dir / agent_file_name
|
|
338
|
-
if agent_file.exists():
|
|
339
|
-
self.logger.debug(
|
|
340
|
-
f"Agent {agent_id} found as physical file: {agent_file}"
|
|
341
|
-
)
|
|
342
|
-
return True
|
|
343
|
-
|
|
344
335
|
return False
|
|
@@ -157,9 +157,6 @@ class AgentsCommand(AgentCommand):
|
|
|
157
157
|
"configure": self._configure_deployment,
|
|
158
158
|
# Migration command (DEPRECATION support)
|
|
159
159
|
"migrate-to-project": self._migrate_to_project,
|
|
160
|
-
# Auto-configuration commands (TSK-0054 Phase 5)
|
|
161
|
-
"detect": self._detect_toolchain,
|
|
162
|
-
"recommend": self._recommend_agents,
|
|
163
160
|
# Agent selection modes (Phase 3: 1M-382)
|
|
164
161
|
"deploy-minimal": self._deploy_minimal_configuration,
|
|
165
162
|
"deploy-auto": self._deploy_auto_configure,
|
|
@@ -167,6 +164,10 @@ class AgentsCommand(AgentCommand):
|
|
|
167
164
|
"available": self._list_available_from_sources,
|
|
168
165
|
# Agent discovery with rich filtering (Phase 1: Discovery & Browsing)
|
|
169
166
|
"discover": self._discover_agents,
|
|
167
|
+
# NEW: Collection-based agent management
|
|
168
|
+
"list-collections": self._list_collections,
|
|
169
|
+
"deploy-collection": self._deploy_collection,
|
|
170
|
+
"list-by-collection": self._list_by_collection,
|
|
170
171
|
# Cache git management commands
|
|
171
172
|
"cache-status": self._cache_status,
|
|
172
173
|
"cache-pull": self._cache_pull,
|
|
@@ -560,7 +561,7 @@ class AgentsCommand(AgentCommand):
|
|
|
560
561
|
"""Deploy agents using two-phase sync: cache → deploy.
|
|
561
562
|
|
|
562
563
|
Phase 3 Integration (1M-486): Uses Git sync service for deployment.
|
|
563
|
-
- Phase 1: Sync agents to ~/.claude-mpm/cache/
|
|
564
|
+
- Phase 1: Sync agents to ~/.claude-mpm/cache/agents/ (if needed)
|
|
564
565
|
- Phase 2: Deploy from cache to project .claude-mpm/agents/
|
|
565
566
|
|
|
566
567
|
This replaces the old single-tier deployment with a multi-project
|
|
@@ -1378,7 +1379,7 @@ class AgentsCommand(AgentCommand):
|
|
|
1378
1379
|
return CommandResult.error_result("agent_id is required")
|
|
1379
1380
|
|
|
1380
1381
|
import os
|
|
1381
|
-
import subprocess
|
|
1382
|
+
import subprocess # nosec B404
|
|
1382
1383
|
|
|
1383
1384
|
from ...services.agents.local_template_manager import (
|
|
1384
1385
|
LocalAgentTemplateManager,
|
|
@@ -1414,7 +1415,7 @@ class AgentsCommand(AgentCommand):
|
|
|
1414
1415
|
|
|
1415
1416
|
# Use system editor
|
|
1416
1417
|
editor = getattr(args, "editor", None) or os.environ.get("EDITOR", "nano")
|
|
1417
|
-
subprocess.run([editor, str(template_file)], check=True)
|
|
1418
|
+
subprocess.run([editor, str(template_file)], check=True) # nosec B603
|
|
1418
1419
|
return CommandResult.success_result(
|
|
1419
1420
|
f"Agent '{agent_id}' edited successfully"
|
|
1420
1421
|
)
|
|
@@ -1518,8 +1519,6 @@ class AgentsCommand(AgentCommand):
|
|
|
1518
1519
|
console.print("For a better experience with integrated configuration:")
|
|
1519
1520
|
console.print(" • Agent management")
|
|
1520
1521
|
console.print(" • Skills management")
|
|
1521
|
-
console.print(" • Template editing")
|
|
1522
|
-
console.print(" • Behavior configuration")
|
|
1523
1522
|
console.print(" • Startup settings\n")
|
|
1524
1523
|
|
|
1525
1524
|
console.print("Please use: [bold green]claude-mpm config[/bold green]\n")
|
|
@@ -1821,34 +1820,6 @@ class AgentsCommand(AgentCommand):
|
|
|
1821
1820
|
f"Error in interactive configuration: {e}"
|
|
1822
1821
|
)
|
|
1823
1822
|
|
|
1824
|
-
def _detect_toolchain(self, args) -> CommandResult:
|
|
1825
|
-
"""Detect project toolchain without deploying agents.
|
|
1826
|
-
|
|
1827
|
-
Part of TSK-0054 Phase 5: Auto-configuration CLI integration.
|
|
1828
|
-
"""
|
|
1829
|
-
try:
|
|
1830
|
-
from .agents_detect import AgentsDetectCommand
|
|
1831
|
-
|
|
1832
|
-
cmd = AgentsDetectCommand()
|
|
1833
|
-
return cmd.run(args)
|
|
1834
|
-
except Exception as e:
|
|
1835
|
-
self.logger.error(f"Error detecting toolchain: {e}", exc_info=True)
|
|
1836
|
-
return CommandResult.error_result(f"Error detecting toolchain: {e}")
|
|
1837
|
-
|
|
1838
|
-
def _recommend_agents(self, args) -> CommandResult:
|
|
1839
|
-
"""Recommend agents based on project toolchain.
|
|
1840
|
-
|
|
1841
|
-
Part of TSK-0054 Phase 5: Auto-configuration CLI integration.
|
|
1842
|
-
"""
|
|
1843
|
-
try:
|
|
1844
|
-
from .agents_recommend import AgentsRecommendCommand
|
|
1845
|
-
|
|
1846
|
-
cmd = AgentsRecommendCommand()
|
|
1847
|
-
return cmd.run(args)
|
|
1848
|
-
except Exception as e:
|
|
1849
|
-
self.logger.error(f"Error recommending agents: {e}", exc_info=True)
|
|
1850
|
-
return CommandResult.error_result(f"Error recommending agents: {e}")
|
|
1851
|
-
|
|
1852
1823
|
def _migrate_to_project(self, args) -> CommandResult:
|
|
1853
1824
|
"""Migrate user-level agents to project-level.
|
|
1854
1825
|
|
|
@@ -2157,6 +2128,171 @@ class AgentsCommand(AgentCommand):
|
|
|
2157
2128
|
self.logger.error(f"Error in auto-configure: {e}", exc_info=True)
|
|
2158
2129
|
return CommandResult.error_result(f"Error in auto-configure: {e}")
|
|
2159
2130
|
|
|
2131
|
+
def _list_collections(self, args) -> CommandResult:
|
|
2132
|
+
"""List all available agent collections.
|
|
2133
|
+
|
|
2134
|
+
NEW: Shows all collections with agent counts and metadata.
|
|
2135
|
+
Enables discovery of available agent collections before deployment.
|
|
2136
|
+
"""
|
|
2137
|
+
try:
|
|
2138
|
+
from pathlib import Path
|
|
2139
|
+
|
|
2140
|
+
from ...services.agents.deployment.remote_agent_discovery_service import (
|
|
2141
|
+
RemoteAgentDiscoveryService,
|
|
2142
|
+
)
|
|
2143
|
+
|
|
2144
|
+
# Get remote agents cache directory
|
|
2145
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
2146
|
+
|
|
2147
|
+
if not cache_dir.exists():
|
|
2148
|
+
return CommandResult.error_result(
|
|
2149
|
+
"No remote agent collections found. Run 'claude-mpm agents deploy' first."
|
|
2150
|
+
)
|
|
2151
|
+
|
|
2152
|
+
# Use RemoteAgentDiscoveryService to list collections
|
|
2153
|
+
remote_service = RemoteAgentDiscoveryService(cache_dir)
|
|
2154
|
+
collections = remote_service.list_collections()
|
|
2155
|
+
|
|
2156
|
+
if not collections:
|
|
2157
|
+
return CommandResult.success_result(
|
|
2158
|
+
"No agent collections found in cache.", data={"collections": []}
|
|
2159
|
+
)
|
|
2160
|
+
|
|
2161
|
+
# Format output
|
|
2162
|
+
output_lines = ["Available Agent Collections:\n"]
|
|
2163
|
+
for collection in collections:
|
|
2164
|
+
output_lines.append(
|
|
2165
|
+
f" • {collection['collection_id']} ({collection['agent_count']} agents)"
|
|
2166
|
+
)
|
|
2167
|
+
|
|
2168
|
+
return CommandResult.success_result(
|
|
2169
|
+
"\n".join(output_lines), data={"collections": collections}
|
|
2170
|
+
)
|
|
2171
|
+
|
|
2172
|
+
except Exception as e:
|
|
2173
|
+
self.logger.error(f"Error listing collections: {e}", exc_info=True)
|
|
2174
|
+
return CommandResult.error_result(f"Error listing collections: {e}")
|
|
2175
|
+
|
|
2176
|
+
def _deploy_collection(self, args) -> CommandResult:
|
|
2177
|
+
"""Deploy all agents from a specific collection.
|
|
2178
|
+
|
|
2179
|
+
NEW: Enables bulk deployment of all agents from a named collection.
|
|
2180
|
+
Useful for deploying entire agent sets at once.
|
|
2181
|
+
"""
|
|
2182
|
+
try:
|
|
2183
|
+
from pathlib import Path
|
|
2184
|
+
|
|
2185
|
+
from ...services.agents.deployment.multi_source_deployment_service import (
|
|
2186
|
+
MultiSourceAgentDeploymentService,
|
|
2187
|
+
)
|
|
2188
|
+
|
|
2189
|
+
collection_id = args.collection_id
|
|
2190
|
+
|
|
2191
|
+
# Get agents from collection
|
|
2192
|
+
service = MultiSourceAgentDeploymentService()
|
|
2193
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
2194
|
+
agents = service.get_agents_by_collection(collection_id, cache_dir)
|
|
2195
|
+
|
|
2196
|
+
if not agents:
|
|
2197
|
+
return CommandResult.error_result(
|
|
2198
|
+
f"No agents found in collection '{collection_id}'"
|
|
2199
|
+
)
|
|
2200
|
+
|
|
2201
|
+
# Dry run mode
|
|
2202
|
+
if getattr(args, "dry_run", False):
|
|
2203
|
+
agent_names = [
|
|
2204
|
+
agent.get("metadata", {}).get("name", "Unknown") for agent in agents
|
|
2205
|
+
]
|
|
2206
|
+
output = f"Would deploy {len(agents)} agents from collection '{collection_id}':\n"
|
|
2207
|
+
for name in agent_names:
|
|
2208
|
+
output += f" • {name}\n"
|
|
2209
|
+
return CommandResult.success_result(
|
|
2210
|
+
output,
|
|
2211
|
+
data={"collection_id": collection_id, "agent_count": len(agents)},
|
|
2212
|
+
)
|
|
2213
|
+
|
|
2214
|
+
# Deploy agents
|
|
2215
|
+
# TODO: Implement actual deployment logic using deployment service
|
|
2216
|
+
# For now, show what would be deployed
|
|
2217
|
+
return CommandResult.success_result(
|
|
2218
|
+
f"Deployment of collection '{collection_id}' would deploy {len(agents)} agents.\n"
|
|
2219
|
+
f"(Full deployment implementation pending)",
|
|
2220
|
+
data={
|
|
2221
|
+
"collection_id": collection_id,
|
|
2222
|
+
"agent_count": len(agents),
|
|
2223
|
+
"status": "pending_implementation",
|
|
2224
|
+
},
|
|
2225
|
+
)
|
|
2226
|
+
|
|
2227
|
+
except Exception as e:
|
|
2228
|
+
self.logger.error(f"Error deploying collection: {e}", exc_info=True)
|
|
2229
|
+
return CommandResult.error_result(f"Error deploying collection: {e}")
|
|
2230
|
+
|
|
2231
|
+
def _list_by_collection(self, args) -> CommandResult:
|
|
2232
|
+
"""List agents from a specific collection.
|
|
2233
|
+
|
|
2234
|
+
NEW: Shows detailed information about agents in a collection.
|
|
2235
|
+
Supports multiple output formats (table, json, yaml).
|
|
2236
|
+
"""
|
|
2237
|
+
try:
|
|
2238
|
+
import json as json_lib
|
|
2239
|
+
from pathlib import Path
|
|
2240
|
+
|
|
2241
|
+
from ...services.agents.deployment.multi_source_deployment_service import (
|
|
2242
|
+
MultiSourceAgentDeploymentService,
|
|
2243
|
+
)
|
|
2244
|
+
|
|
2245
|
+
collection_id = args.collection_id
|
|
2246
|
+
output_format = getattr(args, "format", "table")
|
|
2247
|
+
|
|
2248
|
+
# Get agents from collection
|
|
2249
|
+
service = MultiSourceAgentDeploymentService()
|
|
2250
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
2251
|
+
agents = service.get_agents_by_collection(collection_id, cache_dir)
|
|
2252
|
+
|
|
2253
|
+
if not agents:
|
|
2254
|
+
return CommandResult.error_result(
|
|
2255
|
+
f"No agents found in collection '{collection_id}'"
|
|
2256
|
+
)
|
|
2257
|
+
|
|
2258
|
+
# Format output based on requested format
|
|
2259
|
+
if output_format == "json":
|
|
2260
|
+
return CommandResult.success_result(
|
|
2261
|
+
json_lib.dumps(agents, indent=2),
|
|
2262
|
+
data={"collection_id": collection_id, "agents": agents},
|
|
2263
|
+
)
|
|
2264
|
+
if output_format == "yaml":
|
|
2265
|
+
try:
|
|
2266
|
+
import yaml
|
|
2267
|
+
|
|
2268
|
+
return CommandResult.success_result(
|
|
2269
|
+
yaml.dump(agents, default_flow_style=False),
|
|
2270
|
+
data={"collection_id": collection_id, "agents": agents},
|
|
2271
|
+
)
|
|
2272
|
+
except ImportError:
|
|
2273
|
+
return CommandResult.error_result(
|
|
2274
|
+
"YAML support not available (install PyYAML)"
|
|
2275
|
+
)
|
|
2276
|
+
|
|
2277
|
+
# Table format (default)
|
|
2278
|
+
output_lines = [f"Agents in collection '{collection_id}':\n"]
|
|
2279
|
+
for agent in agents:
|
|
2280
|
+
metadata = agent.get("metadata", {})
|
|
2281
|
+
name = metadata.get("name", "Unknown")
|
|
2282
|
+
description = metadata.get("description", "No description")
|
|
2283
|
+
version = agent.get("version", "unknown")
|
|
2284
|
+
output_lines.append(f" • {name} (v{version})")
|
|
2285
|
+
output_lines.append(f" {description}\n")
|
|
2286
|
+
|
|
2287
|
+
return CommandResult.success_result(
|
|
2288
|
+
"\n".join(output_lines),
|
|
2289
|
+
data={"collection_id": collection_id, "agent_count": len(agents)},
|
|
2290
|
+
)
|
|
2291
|
+
|
|
2292
|
+
except Exception as e:
|
|
2293
|
+
self.logger.error(f"Error listing collection agents: {e}", exc_info=True)
|
|
2294
|
+
return CommandResult.error_result(f"Error listing collection agents: {e}")
|
|
2295
|
+
|
|
2160
2296
|
def _cache_status(self, args) -> CommandResult:
|
|
2161
2297
|
"""Show git status of agent cache.
|
|
2162
2298
|
|
|
@@ -2166,7 +2302,7 @@ class AgentsCommand(AgentCommand):
|
|
|
2166
2302
|
try:
|
|
2167
2303
|
from ...services.agents.cache_git_manager import CacheGitManager
|
|
2168
2304
|
|
|
2169
|
-
cache_dir = Path.home() / ".claude-mpm" / "cache" / "
|
|
2305
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
2170
2306
|
manager = CacheGitManager(cache_dir)
|
|
2171
2307
|
|
|
2172
2308
|
if not manager.is_git_repo():
|
|
@@ -2239,7 +2375,7 @@ class AgentsCommand(AgentCommand):
|
|
|
2239
2375
|
try:
|
|
2240
2376
|
from ...services.agents.cache_git_manager import CacheGitManager
|
|
2241
2377
|
|
|
2242
|
-
cache_dir = Path.home() / ".claude-mpm" / "cache" / "
|
|
2378
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
2243
2379
|
manager = CacheGitManager(cache_dir)
|
|
2244
2380
|
|
|
2245
2381
|
if not manager.is_git_repo():
|
|
@@ -2266,7 +2402,7 @@ class AgentsCommand(AgentCommand):
|
|
|
2266
2402
|
try:
|
|
2267
2403
|
from ...services.agents.cache_git_manager import CacheGitManager
|
|
2268
2404
|
|
|
2269
|
-
cache_dir = Path.home() / ".claude-mpm" / "cache" / "
|
|
2405
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
2270
2406
|
manager = CacheGitManager(cache_dir)
|
|
2271
2407
|
|
|
2272
2408
|
if not manager.is_git_repo():
|
|
@@ -2298,7 +2434,7 @@ class AgentsCommand(AgentCommand):
|
|
|
2298
2434
|
try:
|
|
2299
2435
|
from ...services.agents.cache_git_manager import CacheGitManager
|
|
2300
2436
|
|
|
2301
|
-
cache_dir = Path.home() / ".claude-mpm" / "cache" / "
|
|
2437
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
2302
2438
|
manager = CacheGitManager(cache_dir)
|
|
2303
2439
|
|
|
2304
2440
|
if not manager.is_git_repo():
|
|
@@ -2346,7 +2482,7 @@ class AgentsCommand(AgentCommand):
|
|
|
2346
2482
|
try:
|
|
2347
2483
|
from ...services.agents.cache_git_manager import CacheGitManager
|
|
2348
2484
|
|
|
2349
|
-
cache_dir = Path.home() / ".claude-mpm" / "cache" / "
|
|
2485
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
2350
2486
|
manager = CacheGitManager(cache_dir)
|
|
2351
2487
|
|
|
2352
2488
|
if not manager.is_git_repo():
|