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
|
@@ -65,6 +65,7 @@ class AgentDependencyLoader:
|
|
|
65
65
|
self.deployment_state_file = (
|
|
66
66
|
Path.cwd() / ".claude" / "agents" / ".mpm_deployment_state"
|
|
67
67
|
)
|
|
68
|
+
self.is_uv_tool = self._check_uv_tool_installation()
|
|
68
69
|
|
|
69
70
|
def discover_deployed_agents(self) -> Dict[str, Path]:
|
|
70
71
|
"""
|
|
@@ -191,9 +192,42 @@ class AgentDependencyLoader:
|
|
|
191
192
|
logger.debug(f"Loaded dependencies for {len(agent_dependencies)} agents")
|
|
192
193
|
return agent_dependencies
|
|
193
194
|
|
|
195
|
+
def _check_uv_tool_installation(self) -> bool:
|
|
196
|
+
"""
|
|
197
|
+
Check if running in UV tool environment (no pip available).
|
|
198
|
+
|
|
199
|
+
WHY: UV tool environments don't have pip installed. The executable
|
|
200
|
+
path typically contains ".local/share/uv/tools/" and the UV_TOOL_DIR
|
|
201
|
+
environment variable is set. In such environments, we need to use
|
|
202
|
+
'uv pip' instead of 'python -m pip'.
|
|
203
|
+
|
|
204
|
+
Returns:
|
|
205
|
+
True if UV tool environment, False otherwise
|
|
206
|
+
"""
|
|
207
|
+
import os
|
|
208
|
+
|
|
209
|
+
# Check UV_TOOL_DIR environment variable
|
|
210
|
+
uv_tool_dir = os.environ.get("UV_TOOL_DIR", "")
|
|
211
|
+
if uv_tool_dir and "claude-mpm" in uv_tool_dir:
|
|
212
|
+
logger.debug(f"UV tool environment detected via UV_TOOL_DIR: {uv_tool_dir}")
|
|
213
|
+
return True
|
|
214
|
+
|
|
215
|
+
# Check executable path for UV tool patterns
|
|
216
|
+
executable = sys.executable
|
|
217
|
+
if ".local/share/uv/tools/" in executable or "/uv/tools/" in executable:
|
|
218
|
+
logger.debug(
|
|
219
|
+
f"UV tool environment detected via executable path: {executable}"
|
|
220
|
+
)
|
|
221
|
+
return True
|
|
222
|
+
|
|
223
|
+
return False
|
|
224
|
+
|
|
194
225
|
def check_python_dependency(self, package_spec: str) -> Tuple[bool, Optional[str]]:
|
|
195
226
|
"""
|
|
196
|
-
Check if a Python package dependency is satisfied.
|
|
227
|
+
Check if a Python package dependency is satisfied in the TARGET environment.
|
|
228
|
+
|
|
229
|
+
WHY: UV tool environments use a separate Python installation. We must check
|
|
230
|
+
packages in the same environment where they would be installed/used.
|
|
197
231
|
|
|
198
232
|
Args:
|
|
199
233
|
package_spec: Package specification (e.g., "pandas>=2.0.0")
|
|
@@ -221,7 +255,70 @@ class AgentDependencyLoader:
|
|
|
221
255
|
)
|
|
222
256
|
return True, "optional-skipped"
|
|
223
257
|
|
|
224
|
-
#
|
|
258
|
+
# For UV tool environments, check via UV's Python
|
|
259
|
+
if self.is_uv_tool:
|
|
260
|
+
try:
|
|
261
|
+
verify_cmd = [
|
|
262
|
+
"uv",
|
|
263
|
+
"run",
|
|
264
|
+
"--no-project",
|
|
265
|
+
"python",
|
|
266
|
+
"-c",
|
|
267
|
+
f"import importlib.metadata; print(importlib.metadata.version('{package_name}'))",
|
|
268
|
+
]
|
|
269
|
+
result = subprocess.run(
|
|
270
|
+
verify_cmd, capture_output=True, timeout=30, check=False
|
|
271
|
+
)
|
|
272
|
+
if result.returncode == 0:
|
|
273
|
+
version = result.stdout.decode().strip()
|
|
274
|
+
self.checked_packages.add(package_name)
|
|
275
|
+
if req.specifier.contains(version):
|
|
276
|
+
logger.debug(
|
|
277
|
+
f"Package {package_name} {version} satisfied in UV environment"
|
|
278
|
+
)
|
|
279
|
+
return True, version
|
|
280
|
+
logger.debug(
|
|
281
|
+
f"{package_name} {version} does not satisfy {req.specifier}"
|
|
282
|
+
)
|
|
283
|
+
return False, version
|
|
284
|
+
# Check alternatives for optional packages
|
|
285
|
+
if package_name in self.OPTIONAL_DB_PACKAGES:
|
|
286
|
+
for alternative in self.OPTIONAL_DB_PACKAGES[package_name]:
|
|
287
|
+
alt_cmd = [
|
|
288
|
+
"uv",
|
|
289
|
+
"run",
|
|
290
|
+
"--no-project",
|
|
291
|
+
"python",
|
|
292
|
+
"-c",
|
|
293
|
+
f"import importlib.metadata; print(importlib.metadata.version('{alternative}'))",
|
|
294
|
+
]
|
|
295
|
+
alt_result = subprocess.run(
|
|
296
|
+
alt_cmd, capture_output=True, timeout=30, check=False
|
|
297
|
+
)
|
|
298
|
+
if alt_result.returncode == 0:
|
|
299
|
+
alt_version = alt_result.stdout.decode().strip()
|
|
300
|
+
logger.info(
|
|
301
|
+
f"Using {alternative} as alternative to {package_name}"
|
|
302
|
+
)
|
|
303
|
+
self.checked_packages.add(package_name)
|
|
304
|
+
return True, f"{alternative}:{alt_version}"
|
|
305
|
+
# If no alternatives work, mark as optional failure
|
|
306
|
+
self.optional_failed[package_name] = "No alternatives available"
|
|
307
|
+
logger.warning(
|
|
308
|
+
f"Optional package {package_name} not found, marking as optional"
|
|
309
|
+
)
|
|
310
|
+
return True, "optional-not-found"
|
|
311
|
+
return False, None
|
|
312
|
+
except subprocess.TimeoutExpired:
|
|
313
|
+
logger.warning(f"Timeout checking {package_name} in UV environment")
|
|
314
|
+
return False, None
|
|
315
|
+
except Exception as e:
|
|
316
|
+
logger.debug(
|
|
317
|
+
f"Error checking {package_name} in UV environment: {e}"
|
|
318
|
+
)
|
|
319
|
+
return False, None
|
|
320
|
+
|
|
321
|
+
# For normal Python, try to import and check version
|
|
225
322
|
try:
|
|
226
323
|
import importlib.metadata
|
|
227
324
|
|
|
@@ -658,12 +755,26 @@ class AgentDependencyLoader:
|
|
|
658
755
|
"Robust installer not available, falling back to simple installation"
|
|
659
756
|
)
|
|
660
757
|
try:
|
|
661
|
-
cmd = [sys.executable, "-m", "pip", "install"]
|
|
662
|
-
|
|
663
758
|
# Check environment and add appropriate flags
|
|
664
759
|
import os
|
|
665
760
|
import sysconfig
|
|
666
761
|
|
|
762
|
+
# Check if in UV tool environment (no pip available)
|
|
763
|
+
uv_tool_dir = os.environ.get("UV_TOOL_DIR", "")
|
|
764
|
+
is_uv_tool = (
|
|
765
|
+
(uv_tool_dir and "claude-mpm" in uv_tool_dir)
|
|
766
|
+
or ".local/share/uv/tools/" in sys.executable
|
|
767
|
+
or "/uv/tools/" in sys.executable
|
|
768
|
+
)
|
|
769
|
+
|
|
770
|
+
if is_uv_tool:
|
|
771
|
+
cmd = ["uv", "pip", "install", "--python", sys.executable]
|
|
772
|
+
logger.debug(
|
|
773
|
+
f"Using 'uv pip install --python {sys.executable}' for UV tool environment"
|
|
774
|
+
)
|
|
775
|
+
else:
|
|
776
|
+
cmd = [sys.executable, "-m", "pip", "install"]
|
|
777
|
+
|
|
667
778
|
# Check if in virtualenv
|
|
668
779
|
in_virtualenv = (
|
|
669
780
|
(hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix)
|
|
@@ -4,10 +4,14 @@ Agent filtering utilities for claude-mpm.
|
|
|
4
4
|
WHY: This module provides centralized filtering logic to remove non-deployable
|
|
5
5
|
agents (BASE_AGENT) and already-deployed agents from user-facing displays.
|
|
6
6
|
|
|
7
|
+
ARCHITECTURE:
|
|
8
|
+
- SOURCE: ~/.claude-mpm/cache/agents/ (git repository cache)
|
|
9
|
+
- DEPLOYMENT: .claude/agents/ (project-level deployment location)
|
|
10
|
+
|
|
7
11
|
DESIGN DECISIONS:
|
|
8
12
|
- BASE_AGENT is a build tool, not a deployable agent - filter everywhere
|
|
9
|
-
- Deployed agent detection
|
|
10
|
-
|
|
13
|
+
- Deployed agent detection checks .claude/agents/ for all deployed agents
|
|
14
|
+
- Supports both virtual (.mpm_deployment_state) and physical (.md files) detection
|
|
11
15
|
- Case-insensitive BASE_AGENT detection for robustness
|
|
12
16
|
- Pure functions for easy testing and reuse
|
|
13
17
|
|
|
@@ -102,10 +106,11 @@ def get_deployed_agent_ids(project_dir: Optional[Path] = None) -> Set[str]:
|
|
|
102
106
|
|
|
103
107
|
Design Rationale:
|
|
104
108
|
- Primary detection: Virtual deployment state (.mpm_deployment_state)
|
|
105
|
-
- Fallback detection: Physical .md files
|
|
109
|
+
- Fallback detection: Physical .md files in .claude/agents/
|
|
106
110
|
- Returns leaf names for consistent comparison with agent_id formats
|
|
107
111
|
- Combines both detection methods for complete coverage
|
|
108
112
|
- Graceful error handling for malformed or missing state files
|
|
113
|
+
- Only checks project-level deployment (simplified architecture)
|
|
109
114
|
|
|
110
115
|
Related:
|
|
111
116
|
- Fixes checkbox interface showing all agents as "○ [Available]" instead of "● [Installed]"
|
|
@@ -115,24 +120,17 @@ def get_deployed_agent_ids(project_dir: Optional[Path] = None) -> Set[str]:
|
|
|
115
120
|
deployed = set()
|
|
116
121
|
|
|
117
122
|
# Track if project_dir was explicitly provided
|
|
118
|
-
explicit_project_dir = project_dir is not None
|
|
119
123
|
|
|
120
124
|
if project_dir is None:
|
|
121
125
|
project_dir = Path.cwd()
|
|
122
126
|
|
|
123
127
|
# NEW: Check virtual deployment state (primary method)
|
|
124
128
|
# This is the current deployment model used by Claude Code
|
|
129
|
+
# Only checking project-level deployment in simplified architecture
|
|
125
130
|
deployment_state_paths = [
|
|
126
131
|
project_dir / ".claude" / "agents" / ".mpm_deployment_state",
|
|
127
132
|
]
|
|
128
133
|
|
|
129
|
-
# Only check user-level state if using default project directory
|
|
130
|
-
# This prevents test isolation issues when explicit project_dir is provided
|
|
131
|
-
if not explicit_project_dir:
|
|
132
|
-
deployment_state_paths.append(
|
|
133
|
-
Path.home() / ".claude" / "agents" / ".mpm_deployment_state"
|
|
134
|
-
)
|
|
135
|
-
|
|
136
134
|
for state_path in deployment_state_paths:
|
|
137
135
|
if state_path.exists():
|
|
138
136
|
try:
|
|
@@ -162,42 +160,17 @@ def get_deployed_agent_ids(project_dir: Optional[Path] = None) -> Set[str]:
|
|
|
162
160
|
continue
|
|
163
161
|
|
|
164
162
|
# EXISTING: Check physical .md files (fallback for backward compatibility)
|
|
165
|
-
# Check
|
|
166
|
-
|
|
167
|
-
if
|
|
168
|
-
for file in
|
|
169
|
-
if file.stem not in {"BASE-AGENT", ".DS_Store"}:
|
|
170
|
-
deployed.add(file.stem)
|
|
171
|
-
|
|
172
|
-
# Check legacy architecture
|
|
173
|
-
legacy_agents_dir = project_dir / ".claude" / "agents"
|
|
174
|
-
if legacy_agents_dir.exists():
|
|
175
|
-
for file in legacy_agents_dir.glob("*.md"):
|
|
163
|
+
# Check project deployment location (.claude/agents/)
|
|
164
|
+
agents_dir = project_dir / ".claude" / "agents"
|
|
165
|
+
if agents_dir.exists():
|
|
166
|
+
for file in agents_dir.glob("*.md"):
|
|
176
167
|
if file.stem not in {"BASE-AGENT", ".DS_Store"}:
|
|
177
168
|
deployed.add(file.stem)
|
|
178
169
|
|
|
179
|
-
#
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if file.stem not in {
|
|
184
|
-
"BASE-AGENT",
|
|
185
|
-
".DS_Store",
|
|
186
|
-
"README",
|
|
187
|
-
"circuit-breakers",
|
|
188
|
-
}:
|
|
189
|
-
# Skip template/example files
|
|
190
|
-
if not any(x in file.stem for x in ["example", "template", "pm-"]):
|
|
191
|
-
deployed.add(file.stem)
|
|
192
|
-
|
|
193
|
-
# Check user-level directory only if using default project directory
|
|
194
|
-
# This prevents test isolation issues when explicit project_dir is provided
|
|
195
|
-
if not explicit_project_dir:
|
|
196
|
-
user_agents_dir = Path.home() / ".claude" / "agents"
|
|
197
|
-
if user_agents_dir.exists():
|
|
198
|
-
for file in user_agents_dir.glob("*.md"):
|
|
199
|
-
if file.stem not in {"BASE-AGENT", ".DS_Store"}:
|
|
200
|
-
deployed.add(file.stem)
|
|
170
|
+
# NOTE: .claude/templates/ contains PM instruction templates, NOT deployed agents
|
|
171
|
+
# It should NOT be checked here. Agents are deployed to:
|
|
172
|
+
# - .mpm_deployment_state (virtual deployment)
|
|
173
|
+
# - .claude/agents/*.md (project deployment)
|
|
201
174
|
|
|
202
175
|
return deployed
|
|
203
176
|
|
claude_mpm/utils/gitignore.py
CHANGED
|
@@ -212,6 +212,9 @@ def ensure_claude_mpm_gitignore(project_dir: str = ".") -> dict:
|
|
|
212
212
|
entries_to_add = [
|
|
213
213
|
".claude-mpm/",
|
|
214
214
|
".claude/agents/",
|
|
215
|
+
".mcp.json",
|
|
216
|
+
".claude.json",
|
|
217
|
+
".claude/",
|
|
215
218
|
]
|
|
216
219
|
|
|
217
220
|
added, existing = manager.ensure_entries(entries_to_add)
|
claude_mpm/utils/migration.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
WHY: Phase 3 of 1M-486 requires migrating from old single-tier deployment
|
|
4
4
|
(~/.claude/agents/, ~/.claude/skills/) to new two-phase architecture:
|
|
5
|
-
- Cache: ~/.claude-mpm/cache/
|
|
5
|
+
- Cache: ~/.claude-mpm/cache/agents/, ~/.claude-mpm/cache/skills/
|
|
6
6
|
- Deployment: .claude-mpm/agents/, .claude-mpm/skills/
|
|
7
7
|
|
|
8
8
|
DESIGN DECISIONS:
|
|
@@ -41,7 +41,7 @@ class MigrationUtility:
|
|
|
41
41
|
self.old_agent_dir = Path.home() / ".claude" / "agents"
|
|
42
42
|
self.old_skill_dir = Path.home() / ".claude" / "skills"
|
|
43
43
|
|
|
44
|
-
self.new_agent_cache = Path.home() / ".claude-mpm" / "cache" / "
|
|
44
|
+
self.new_agent_cache = Path.home() / ".claude-mpm" / "cache" / "agents"
|
|
45
45
|
self.new_skill_cache = Path.home() / ".claude-mpm" / "cache" / "skills"
|
|
46
46
|
|
|
47
47
|
def detect_old_locations(self) -> Dict[str, bool]:
|
|
@@ -80,7 +80,7 @@ class MigrationUtility:
|
|
|
80
80
|
def migrate_agents(
|
|
81
81
|
self, dry_run: bool = False, auto_confirm: bool = False
|
|
82
82
|
) -> Dict[str, any]:
|
|
83
|
-
"""Migrate agents from ~/.claude/agents/ to ~/.claude-mpm/cache/
|
|
83
|
+
"""Migrate agents from ~/.claude/agents/ to ~/.claude-mpm/cache/agents/.
|
|
84
84
|
|
|
85
85
|
Args:
|
|
86
86
|
dry_run: Preview migration without making changes
|
|
@@ -329,7 +329,7 @@ class MigrationUtility:
|
|
|
329
329
|
|
|
330
330
|
warning += "\nThe deployment architecture has changed:\n"
|
|
331
331
|
warning += " OLD: ~/.claude/agents/ (single-tier, global)\n"
|
|
332
|
-
warning += " NEW: ~/.claude-mpm/cache/
|
|
332
|
+
warning += " NEW: ~/.claude-mpm/cache/agents/ → .claude-mpm/agents/ (two-phase, per-project)\n\n"
|
|
333
333
|
|
|
334
334
|
warning += "To migrate:\n"
|
|
335
335
|
warning += " claude-mpm migrate\n\n"
|
|
@@ -82,6 +82,7 @@ class RobustPackageInstaller:
|
|
|
82
82
|
self.attempts: List[InstallAttempt] = []
|
|
83
83
|
self.success_cache: Dict[str, bool] = {}
|
|
84
84
|
self.in_virtualenv = self._check_virtualenv()
|
|
85
|
+
self.is_uv_tool = self._check_uv_tool_installation()
|
|
85
86
|
self.is_pep668_managed = self._check_pep668_managed()
|
|
86
87
|
self.pep668_warning_shown = False
|
|
87
88
|
|
|
@@ -261,6 +262,36 @@ class RobustPackageInstaller:
|
|
|
261
262
|
|
|
262
263
|
return False
|
|
263
264
|
|
|
265
|
+
def _check_uv_tool_installation(self) -> bool:
|
|
266
|
+
"""
|
|
267
|
+
Check if running in UV tool environment (no pip available).
|
|
268
|
+
|
|
269
|
+
WHY: UV tool environments don't have pip installed. The executable
|
|
270
|
+
path typically contains ".local/share/uv/tools/" and the UV_TOOL_DIR
|
|
271
|
+
environment variable is set. In such environments, we need to use
|
|
272
|
+
'uv pip' instead of 'python -m pip'.
|
|
273
|
+
|
|
274
|
+
Returns:
|
|
275
|
+
True if UV tool environment, False otherwise
|
|
276
|
+
"""
|
|
277
|
+
import os
|
|
278
|
+
|
|
279
|
+
# Check UV_TOOL_DIR environment variable
|
|
280
|
+
uv_tool_dir = os.environ.get("UV_TOOL_DIR", "")
|
|
281
|
+
if uv_tool_dir and "claude-mpm" in uv_tool_dir:
|
|
282
|
+
logger.debug(f"UV tool environment detected via UV_TOOL_DIR: {uv_tool_dir}")
|
|
283
|
+
return True
|
|
284
|
+
|
|
285
|
+
# Check executable path for UV tool patterns
|
|
286
|
+
executable = sys.executable
|
|
287
|
+
if ".local/share/uv/tools/" in executable or "/uv/tools/" in executable:
|
|
288
|
+
logger.debug(
|
|
289
|
+
f"UV tool environment detected via executable path: {executable}"
|
|
290
|
+
)
|
|
291
|
+
return True
|
|
292
|
+
|
|
293
|
+
return False
|
|
294
|
+
|
|
264
295
|
def _show_pep668_warning(self) -> None:
|
|
265
296
|
"""
|
|
266
297
|
Show warning about PEP 668 managed environment.
|
|
@@ -301,7 +332,14 @@ class RobustPackageInstaller:
|
|
|
301
332
|
Returns:
|
|
302
333
|
Command as list of arguments
|
|
303
334
|
"""
|
|
304
|
-
|
|
335
|
+
# UV tool environments don't have pip; use uv pip install --python instead
|
|
336
|
+
if self.is_uv_tool:
|
|
337
|
+
base_cmd = ["uv", "pip", "install", "--python", sys.executable]
|
|
338
|
+
logger.debug(
|
|
339
|
+
f"Using 'uv pip install --python {sys.executable}' for UV tool environment"
|
|
340
|
+
)
|
|
341
|
+
else:
|
|
342
|
+
base_cmd = [sys.executable, "-m", "pip", "install"]
|
|
305
343
|
|
|
306
344
|
# Determine appropriate flags based on environment
|
|
307
345
|
if self.in_virtualenv:
|
|
@@ -442,42 +480,56 @@ class RobustPackageInstaller:
|
|
|
442
480
|
|
|
443
481
|
def _verify_installation(self, package_spec: str) -> bool:
|
|
444
482
|
"""
|
|
445
|
-
Verify that a package was successfully installed.
|
|
483
|
+
Verify that a package was successfully installed in the TARGET environment.
|
|
484
|
+
|
|
485
|
+
WHY: UV installs packages to its own Python environment, not the current process.
|
|
486
|
+
We must verify in the same environment where packages were installed.
|
|
446
487
|
|
|
447
488
|
Args:
|
|
448
489
|
package_spec: Package specification
|
|
449
490
|
|
|
450
491
|
Returns:
|
|
451
|
-
True if package is installed and importable
|
|
492
|
+
True if package is installed and importable in the target environment
|
|
452
493
|
"""
|
|
453
494
|
package_name = self._extract_package_name(package_spec)
|
|
454
495
|
|
|
455
|
-
# Convert package name to import name (e.g., tree-sitter-ruby -> tree_sitter_ruby)
|
|
456
|
-
import_name = package_name.replace("-", "_")
|
|
457
|
-
|
|
458
496
|
try:
|
|
459
|
-
|
|
497
|
+
if self.is_uv_tool:
|
|
498
|
+
# For UV tool, verify via UV's Python environment
|
|
499
|
+
verify_cmd = [
|
|
500
|
+
"uv",
|
|
501
|
+
"run",
|
|
502
|
+
"--no-project",
|
|
503
|
+
"python",
|
|
504
|
+
"-c",
|
|
505
|
+
f"import importlib.metadata; print(importlib.metadata.version('{package_name}'))",
|
|
506
|
+
]
|
|
507
|
+
result = subprocess.run(
|
|
508
|
+
verify_cmd, capture_output=True, timeout=30, check=False
|
|
509
|
+
)
|
|
510
|
+
if result.returncode == 0:
|
|
511
|
+
logger.debug(
|
|
512
|
+
f"Package {package_name} verified in UV environment: {result.stdout.decode().strip()}"
|
|
513
|
+
)
|
|
514
|
+
return True
|
|
515
|
+
logger.debug(
|
|
516
|
+
f"Package {package_name} not found in UV environment: {result.stderr.decode().strip()}"
|
|
517
|
+
)
|
|
518
|
+
return False
|
|
519
|
+
# For normal Python, use importlib.metadata in current process
|
|
460
520
|
import importlib.metadata
|
|
461
521
|
|
|
462
522
|
try:
|
|
463
523
|
version = importlib.metadata.version(package_name)
|
|
464
524
|
logger.debug(f"Package {package_name} version {version} is installed")
|
|
465
|
-
|
|
466
|
-
# For tree-sitter packages, don't try to import (they have C extensions)
|
|
467
|
-
if package_name.startswith("tree-sitter-"):
|
|
468
|
-
return True
|
|
469
|
-
|
|
470
|
-
# Try to import the package
|
|
471
|
-
try:
|
|
472
|
-
__import__(import_name)
|
|
473
|
-
return True
|
|
474
|
-
except ImportError:
|
|
475
|
-
# Some packages have different import names, that's OK
|
|
476
|
-
return True
|
|
525
|
+
return True
|
|
477
526
|
|
|
478
527
|
except importlib.metadata.PackageNotFoundError:
|
|
479
528
|
return False
|
|
480
529
|
|
|
530
|
+
except subprocess.TimeoutExpired:
|
|
531
|
+
logger.warning(f"Verification timeout for {package_name}")
|
|
532
|
+
return False
|
|
481
533
|
except ImportError:
|
|
482
534
|
# Fallback for older Python versions
|
|
483
535
|
try:
|
|
@@ -487,6 +539,9 @@ class RobustPackageInstaller:
|
|
|
487
539
|
return True
|
|
488
540
|
except pkg_resources.DistributionNotFound:
|
|
489
541
|
return False
|
|
542
|
+
except Exception as e:
|
|
543
|
+
logger.debug(f"Verification error for {package_name}: {e}")
|
|
544
|
+
return False
|
|
490
545
|
|
|
491
546
|
def _is_retryable_error(self, error: Optional[str]) -> bool:
|
|
492
547
|
"""
|
|
@@ -651,7 +706,14 @@ class RobustPackageInstaller:
|
|
|
651
706
|
Tuple of (success, error_message)
|
|
652
707
|
"""
|
|
653
708
|
try:
|
|
654
|
-
|
|
709
|
+
# UV tool environments don't have pip; use uv pip install --python instead
|
|
710
|
+
if self.is_uv_tool:
|
|
711
|
+
cmd = ["uv", "pip", "install", "--python", sys.executable]
|
|
712
|
+
logger.debug(
|
|
713
|
+
f"Using 'uv pip install --python {sys.executable}' for batch installation"
|
|
714
|
+
)
|
|
715
|
+
else:
|
|
716
|
+
cmd = [sys.executable, "-m", "pip", "install"]
|
|
655
717
|
|
|
656
718
|
# Add appropriate flags based on environment
|
|
657
719
|
if self.in_virtualenv:
|
|
@@ -702,7 +764,10 @@ class RobustPackageInstaller:
|
|
|
702
764
|
|
|
703
765
|
# Add environment status
|
|
704
766
|
lines.append("")
|
|
705
|
-
if self.
|
|
767
|
+
if self.is_uv_tool:
|
|
768
|
+
lines.append("✓ Environment: UV Tool Environment")
|
|
769
|
+
lines.append(" Using 'uv pip' command (pip not available)")
|
|
770
|
+
elif self.in_virtualenv:
|
|
706
771
|
lines.append("✓ Environment: Virtual Environment (isolated)")
|
|
707
772
|
lines.append(" No special pip flags needed")
|
|
708
773
|
elif self.is_pep668_managed:
|