claude-mpm 4.20.3__py3-none-any.whl → 5.1.8__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/agents/BASE_PM.md +35 -6
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +1241 -667
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +75 -2
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/frontmatter_validator.py +1 -1
- claude_mpm/agents/templates/circuit-breakers.md +1254 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/cli/__init__.py +37 -2
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +188 -30
- claude_mpm/cli/commands/agents.py +959 -36
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/aggregate.py +1 -1
- claude_mpm/cli/commands/analyze.py +3 -3
- claude_mpm/cli/commands/auto_configure.py +537 -239
- claude_mpm/cli/commands/cleanup.py +1 -1
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +924 -45
- claude_mpm/cli/commands/configure_agent_display.py +4 -4
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/debug.py +12 -12
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/mcp_install_commands.py +1 -1
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +573 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +67 -1
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +125 -167
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +835 -44
- claude_mpm/cli/executor.py +78 -3
- claude_mpm/cli/interactive/agent_wizard.py +1032 -47
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +256 -4
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
- claude_mpm/cli/parsers/base_parser.py +53 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +145 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +564 -108
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/utils.py +1 -1
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
- claude_mpm/commands/mpm-agents-detect.md +9 -0
- claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
- claude_mpm/commands/mpm-agents-recommend.md +9 -0
- claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +17 -2
- claude_mpm/commands/mpm-init.md +28 -3
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -0
- claude_mpm/commands/mpm-status.md +9 -0
- claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +9 -0
- claude_mpm/commands/mpm.md +11 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/constants.py +13 -0
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +19 -35
- claude_mpm/core/config.py +24 -0
- claude_mpm/core/constants.py +1 -1
- claude_mpm/core/framework/__init__.py +3 -16
- claude_mpm/core/framework/loaders/file_loader.py +54 -101
- claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
- claude_mpm/core/framework/processors/metadata_processor.py +1 -1
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +41 -2
- claude_mpm/core/interactive_session.py +131 -10
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +110 -8
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/unified_config.py +22 -0
- claude_mpm/dashboard/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +15 -15
- claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
- claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
- claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
- claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
- claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +76 -58
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +138 -121
- claude_mpm/dashboard/templates/code_simple.html +23 -23
- claude_mpm/dashboard/templates/index.html +18 -18
- claude_mpm/experimental/cli_enhancements.py +1 -5
- 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/event_handlers.py +3 -1
- claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
- claude_mpm/hooks/claude_hooks/installer.py +45 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
- 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/hooks/failure_learning/__init__.py +2 -8
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
- claude_mpm/hooks/kuzu_response_hook.py +1 -5
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/scripts/claude-hook-handler.sh +3 -3
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/agents/agent_builder.py +45 -9
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
- claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
- claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
- claude_mpm/services/agents/local_template_manager.py +50 -10
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +36 -16
- claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
- claude_mpm/services/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/core/models/agent_config.py +3 -0
- claude_mpm/services/core/models/process.py +4 -0
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
- claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
- claude_mpm/services/diagnostics/models.py +21 -0
- claude_mpm/services/event_bus/direct_relay.py +3 -3
- claude_mpm/services/event_bus/event_bus.py +36 -3
- claude_mpm/services/event_bus/relay.py +23 -7
- claude_mpm/services/events/consumers/logging.py +1 -2
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
- claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
- claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +5 -13
- claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
- claude_mpm/services/local_ops/health_manager.py +1 -4
- claude_mpm/services/local_ops/process_manager.py +1 -1
- claude_mpm/services/local_ops/resource_monitor.py +2 -2
- claude_mpm/services/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
- claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
- claude_mpm/services/mcp_gateway/core/process_pool.py +41 -26
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/memory/failure_tracker.py +19 -4
- claude_mpm/services/memory/optimizer.py +1 -1
- claude_mpm/services/model/model_router.py +8 -9
- claude_mpm/services/monitor/daemon.py +29 -9
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- claude_mpm/services/monitor/server.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/port_manager.py +1 -1
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/documentation_manager.py +2 -1
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +17 -3
- claude_mpm/services/self_upgrade_service.py +165 -7
- claude_mpm/services/session_management_service.py +16 -4
- claude_mpm/services/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- claude_mpm/services/socketio/handlers/connection.py +1 -1
- claude_mpm/services/socketio/handlers/git.py +2 -2
- claude_mpm/services/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- claude_mpm/services/system_instructions_service.py +1 -3
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
- claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +3 -3
- claude_mpm/skills/agent_skills_injector.py +42 -49
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
- claude_mpm/skills/bundled/performance-profiling.md +6 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
- claude_mpm/skills/skills_registry.py +44 -48
- claude_mpm/skills/skills_service.py +117 -108
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/tools/__main__.py +8 -8
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/utils/agent_dependency_loader.py +80 -13
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +244 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +3 -5
- claude_mpm/utils/structured_questions.py +619 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +496 -65
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +328 -416
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/agent-manager.json +0 -273
- claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
- claude_mpm/agents/templates/api_qa.json +0 -180
- claude_mpm/agents/templates/circuit_breakers.md +0 -638
- claude_mpm/agents/templates/clerk-ops.json +0 -235
- claude_mpm/agents/templates/code_analyzer.json +0 -101
- claude_mpm/agents/templates/content-agent.json +0 -358
- claude_mpm/agents/templates/dart_engineer.json +0 -307
- claude_mpm/agents/templates/data_engineer.json +0 -225
- claude_mpm/agents/templates/documentation.json +0 -211
- claude_mpm/agents/templates/engineer.json +0 -210
- claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
- claude_mpm/agents/templates/golang_engineer.json +0 -270
- claude_mpm/agents/templates/imagemagick.json +0 -264
- claude_mpm/agents/templates/java_engineer.json +0 -346
- claude_mpm/agents/templates/local_ops_agent.json +0 -1840
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
- claude_mpm/agents/templates/memory_manager.json +0 -158
- claude_mpm/agents/templates/nextjs_engineer.json +0 -285
- claude_mpm/agents/templates/ops.json +0 -185
- claude_mpm/agents/templates/php-engineer.json +0 -281
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -140
- claude_mpm/agents/templates/prompt-engineer.json +0 -737
- claude_mpm/agents/templates/python_engineer.json +0 -387
- claude_mpm/agents/templates/qa.json +0 -242
- claude_mpm/agents/templates/react_engineer.json +0 -238
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -188
- claude_mpm/agents/templates/ruby-engineer.json +0 -280
- claude_mpm/agents/templates/rust_engineer.json +0 -275
- claude_mpm/agents/templates/security.json +0 -202
- claude_mpm/agents/templates/svelte-engineer.json +0 -225
- claude_mpm/agents/templates/ticketing.json +0 -177
- claude_mpm/agents/templates/typescript_engineer.json +0 -285
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
- claude_mpm/agents/templates/version_control.json +0 -157
- claude_mpm/agents/templates/web_qa.json +0 -399
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/cli/commands/mpm_init.py +0 -2093
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
- claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
- claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
- claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
- claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
- claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
- claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
- claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/built/react/events.js +0 -30
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
- claude_mpm/dashboard/static/built/shared/logger.js +0 -385
- claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/react/events.js +0 -30
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/js/shared/logger.js +0 -385
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
- claude_mpm/dashboard/static/legacy/activity.html +0 -736
- claude_mpm/dashboard/static/legacy/agents.html +0 -786
- claude_mpm/dashboard/static/legacy/files.html +0 -747
- claude_mpm/dashboard/static/legacy/tools.html +0 -831
- claude_mpm/dashboard/static/monitors.html +0 -431
- claude_mpm/dashboard/static/production/events.html +0 -659
- claude_mpm/dashboard/static/production/main.html +0 -698
- claude_mpm/dashboard/static/production/monitors.html +0 -483
- claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
- claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
- claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
- claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -75
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -184
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -107
- claude_mpm/skills/bundled/collaboration/requesting-code-review/code-reviewer.md +0 -146
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -118
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -177
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -175
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -314
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -227
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -74
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -32
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -328
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -209
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -123
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -304
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -96
- claude_mpm/tools/code_tree_analyzer.py +0 -1825
- /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
- /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
- /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
- /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
|
@@ -369,7 +369,8 @@ class DocumentationManager:
|
|
|
369
369
|
sorted_sections = sorted(
|
|
370
370
|
sections.items(),
|
|
371
371
|
key=lambda x: self.SECTION_PRIORITY.get(
|
|
372
|
-
self._get_section_key(x[0]),
|
|
372
|
+
self._get_section_key(x[0]),
|
|
373
|
+
50, # Default priority
|
|
373
374
|
),
|
|
374
375
|
reverse=True, # Higher priority first
|
|
375
376
|
)
|
|
@@ -58,6 +58,10 @@ class ProjectOrganizer:
|
|
|
58
58
|
".mcp-vector-search/",
|
|
59
59
|
".kuzu-memory/",
|
|
60
60
|
"kuzu-memories/", # kuzu-memory database directory
|
|
61
|
+
# User-specific config files (should NOT be committed)
|
|
62
|
+
".mcp.json",
|
|
63
|
+
".claude.json",
|
|
64
|
+
".claude/",
|
|
61
65
|
# Python artifacts
|
|
62
66
|
"__pycache__/",
|
|
63
67
|
"*.py[cod]",
|
|
@@ -318,7 +318,9 @@ class ToolchainAnalyzerService(BaseService, IToolchainAnalyzer):
|
|
|
318
318
|
else (
|
|
319
319
|
3
|
|
320
320
|
if f.confidence == ConfidenceLevel.MEDIUM
|
|
321
|
-
else 2
|
|
321
|
+
else 2
|
|
322
|
+
if f.confidence == ConfidenceLevel.LOW
|
|
323
|
+
else 1
|
|
322
324
|
)
|
|
323
325
|
),
|
|
324
326
|
f.popularity_score,
|
|
@@ -10,10 +10,14 @@ This service handles:
|
|
|
10
10
|
5. Hook service registration
|
|
11
11
|
|
|
12
12
|
Extracted from ClaudeRunner to follow Single Responsibility Principle.
|
|
13
|
+
|
|
14
|
+
DEPENDENCY INJECTION:
|
|
15
|
+
This service uses protocol-based dependency injection to avoid circular imports
|
|
16
|
+
when registering the SessionManagementService.
|
|
13
17
|
"""
|
|
14
18
|
|
|
15
19
|
import os
|
|
16
|
-
from typing import Any, Dict, List, Optional, Tuple
|
|
20
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
|
17
21
|
|
|
18
22
|
from claude_mpm.core.base_service import BaseService
|
|
19
23
|
from claude_mpm.core.config import Config
|
|
@@ -22,6 +26,13 @@ from claude_mpm.core.logger import get_project_logger
|
|
|
22
26
|
from claude_mpm.core.shared.config_loader import ConfigLoader
|
|
23
27
|
from claude_mpm.services.core.interfaces import RunnerConfigurationInterface
|
|
24
28
|
|
|
29
|
+
# Protocol imports for type checking without circular dependencies
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from claude_mpm.core.protocols import ClaudeRunnerProtocol
|
|
32
|
+
else:
|
|
33
|
+
# At runtime, accept any object with matching interface
|
|
34
|
+
ClaudeRunnerProtocol = Any
|
|
35
|
+
|
|
25
36
|
|
|
26
37
|
class RunnerConfigurationService(BaseService, RunnerConfigurationInterface):
|
|
27
38
|
"""Service for configuring and initializing ClaudeRunner components."""
|
|
@@ -168,6 +179,7 @@ class RunnerConfigurationService(BaseService, RunnerConfigurationInterface):
|
|
|
168
179
|
"launch_method": kwargs.get("launch_method", "exec"),
|
|
169
180
|
"enable_websocket": kwargs.get("enable_websocket", False),
|
|
170
181
|
"websocket_port": kwargs.get("websocket_port", 8765),
|
|
182
|
+
"use_native_agents": kwargs.get("use_native_agents", False),
|
|
171
183
|
}
|
|
172
184
|
|
|
173
185
|
# Initialize main configuration using ConfigLoader
|
|
@@ -494,12 +506,14 @@ class RunnerConfigurationService(BaseService, RunnerConfigurationInterface):
|
|
|
494
506
|
)
|
|
495
507
|
return None
|
|
496
508
|
|
|
497
|
-
def register_session_management_service(
|
|
509
|
+
def register_session_management_service(
|
|
510
|
+
self, container, runner: "ClaudeRunnerProtocol"
|
|
511
|
+
):
|
|
498
512
|
"""Register session management service in the DI container.
|
|
499
513
|
|
|
500
514
|
Args:
|
|
501
515
|
container: DI container instance
|
|
502
|
-
runner: ClaudeRunner instance
|
|
516
|
+
runner: ClaudeRunner instance (or any object matching ClaudeRunnerProtocol)
|
|
503
517
|
|
|
504
518
|
Returns:
|
|
505
519
|
Initialized session management service or None if failed
|
|
@@ -4,9 +4,11 @@ Self-Upgrade Service
|
|
|
4
4
|
|
|
5
5
|
Handles version checking and self-upgrade functionality for claude-mpm.
|
|
6
6
|
Supports pip, pipx, and npm installations with automatic detection.
|
|
7
|
+
Also checks Claude Code version compatibility.
|
|
7
8
|
|
|
8
9
|
WHY: Users should be notified of updates and have an easy way to upgrade
|
|
9
|
-
without manually running installation commands.
|
|
10
|
+
without manually running installation commands. Claude Code version checking
|
|
11
|
+
ensures compatibility with required features.
|
|
10
12
|
|
|
11
13
|
DESIGN DECISIONS:
|
|
12
14
|
- Detects installation method (pip/pipx/npm/editable)
|
|
@@ -14,9 +16,11 @@ DESIGN DECISIONS:
|
|
|
14
16
|
- Interactive upgrade prompts with confirmation
|
|
15
17
|
- Automatic restart after upgrade
|
|
16
18
|
- Graceful failure handling (never breaks existing installation)
|
|
19
|
+
- Claude Code version detection and compatibility checking
|
|
17
20
|
"""
|
|
18
21
|
|
|
19
22
|
import os
|
|
23
|
+
import re
|
|
20
24
|
import subprocess
|
|
21
25
|
import sys
|
|
22
26
|
from datetime import datetime, timezone
|
|
@@ -47,17 +51,23 @@ class SelfUpgradeService:
|
|
|
47
51
|
Capabilities:
|
|
48
52
|
- Detect current installation method
|
|
49
53
|
- Check PyPI/npm for latest version
|
|
54
|
+
- Check Claude Code version and compatibility
|
|
50
55
|
- Prompt user for upgrade confirmation
|
|
51
56
|
- Execute upgrade command
|
|
52
57
|
- Restart after upgrade
|
|
53
58
|
"""
|
|
54
59
|
|
|
60
|
+
# Claude Code version requirements
|
|
61
|
+
CLAUDE_CODE_MIN_VERSION = "1.0.92"
|
|
62
|
+
CLAUDE_CODE_RECOMMENDED_VERSION = "2.0.30"
|
|
63
|
+
|
|
55
64
|
def __init__(self):
|
|
56
65
|
"""Initialize the self-upgrade service."""
|
|
57
66
|
self.logger = get_logger("SelfUpgradeService")
|
|
58
67
|
self.version_checker = PackageVersionChecker()
|
|
59
68
|
self.current_version = self._get_current_version()
|
|
60
69
|
self.installation_method = self._detect_installation_method()
|
|
70
|
+
self.claude_code_version = self._get_claude_code_version()
|
|
61
71
|
|
|
62
72
|
def _get_current_version(self) -> str:
|
|
63
73
|
"""
|
|
@@ -117,6 +127,109 @@ class SelfUpgradeService:
|
|
|
117
127
|
# Default to pip
|
|
118
128
|
return InstallationMethod.PIP
|
|
119
129
|
|
|
130
|
+
def _get_claude_code_version(self) -> Optional[str]:
|
|
131
|
+
"""
|
|
132
|
+
Get the installed Claude Code version.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
Version string (e.g., "2.0.30") or None if not installed
|
|
136
|
+
"""
|
|
137
|
+
try:
|
|
138
|
+
# Try to get Claude Code version via CLI
|
|
139
|
+
result = subprocess.run(
|
|
140
|
+
["claude", "--version"],
|
|
141
|
+
check=False,
|
|
142
|
+
capture_output=True,
|
|
143
|
+
text=True,
|
|
144
|
+
timeout=5,
|
|
145
|
+
)
|
|
146
|
+
if result.returncode == 0:
|
|
147
|
+
# Parse version from output
|
|
148
|
+
# Expected format: "Claude Code 2.0.30" or similar
|
|
149
|
+
match = re.search(r"(\d+\.\d+\.\d+)", result.stdout)
|
|
150
|
+
if match:
|
|
151
|
+
return match.group(1)
|
|
152
|
+
except (FileNotFoundError, subprocess.TimeoutExpired):
|
|
153
|
+
# Claude Code not installed or command not found
|
|
154
|
+
pass
|
|
155
|
+
except Exception as e:
|
|
156
|
+
self.logger.debug(f"Failed to detect Claude Code version: {e}")
|
|
157
|
+
|
|
158
|
+
return None
|
|
159
|
+
|
|
160
|
+
def check_claude_code_compatibility(self) -> Dict[str, any]:
|
|
161
|
+
"""
|
|
162
|
+
Check Claude Code version compatibility.
|
|
163
|
+
|
|
164
|
+
Returns:
|
|
165
|
+
Dict with compatibility information:
|
|
166
|
+
{
|
|
167
|
+
"installed": bool,
|
|
168
|
+
"version": str or None,
|
|
169
|
+
"meets_minimum": bool,
|
|
170
|
+
"is_recommended": bool,
|
|
171
|
+
"status": str,
|
|
172
|
+
"message": str
|
|
173
|
+
}
|
|
174
|
+
"""
|
|
175
|
+
if not self.claude_code_version:
|
|
176
|
+
return {
|
|
177
|
+
"installed": False,
|
|
178
|
+
"version": None,
|
|
179
|
+
"meets_minimum": False,
|
|
180
|
+
"is_recommended": False,
|
|
181
|
+
"status": "not_installed",
|
|
182
|
+
"message": (
|
|
183
|
+
"Claude Code is not installed or not in PATH.\n"
|
|
184
|
+
" Install from: https://docs.anthropic.com/en/docs/claude-code"
|
|
185
|
+
),
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
try:
|
|
189
|
+
current = version.parse(self.claude_code_version)
|
|
190
|
+
minimum = version.parse(self.CLAUDE_CODE_MIN_VERSION)
|
|
191
|
+
recommended = version.parse(self.CLAUDE_CODE_RECOMMENDED_VERSION)
|
|
192
|
+
|
|
193
|
+
meets_minimum = current >= minimum
|
|
194
|
+
is_recommended = current >= recommended
|
|
195
|
+
|
|
196
|
+
if is_recommended:
|
|
197
|
+
status = "optimal"
|
|
198
|
+
message = f"Claude Code v{self.claude_code_version} (optimal version)"
|
|
199
|
+
elif meets_minimum:
|
|
200
|
+
status = "compatible"
|
|
201
|
+
message = (
|
|
202
|
+
f"Claude Code v{self.claude_code_version} is compatible\n"
|
|
203
|
+
f" Recommended: Upgrade to v{self.CLAUDE_CODE_RECOMMENDED_VERSION}+ for best experience"
|
|
204
|
+
)
|
|
205
|
+
else:
|
|
206
|
+
status = "outdated"
|
|
207
|
+
message = (
|
|
208
|
+
f"Claude Code v{self.claude_code_version} is outdated\n"
|
|
209
|
+
f" Minimum required: v{self.CLAUDE_CODE_MIN_VERSION}\n"
|
|
210
|
+
f" Recommended: v{self.CLAUDE_CODE_RECOMMENDED_VERSION}+"
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
return {
|
|
214
|
+
"installed": True,
|
|
215
|
+
"version": self.claude_code_version,
|
|
216
|
+
"meets_minimum": meets_minimum,
|
|
217
|
+
"is_recommended": is_recommended,
|
|
218
|
+
"status": status,
|
|
219
|
+
"message": message,
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
except Exception as e:
|
|
223
|
+
self.logger.debug(f"Version comparison failed: {e}")
|
|
224
|
+
return {
|
|
225
|
+
"installed": True,
|
|
226
|
+
"version": self.claude_code_version,
|
|
227
|
+
"meets_minimum": False,
|
|
228
|
+
"is_recommended": False,
|
|
229
|
+
"status": "unknown",
|
|
230
|
+
"message": f"Unable to verify Claude Code version: {e}",
|
|
231
|
+
}
|
|
232
|
+
|
|
120
233
|
async def check_for_update(
|
|
121
234
|
self, cache_ttl: Optional[int] = None
|
|
122
235
|
) -> Optional[Dict[str, any]]:
|
|
@@ -212,7 +325,7 @@ class SelfUpgradeService:
|
|
|
212
325
|
|
|
213
326
|
def prompt_for_upgrade(self, update_info: Dict[str, any]) -> bool:
|
|
214
327
|
"""
|
|
215
|
-
Prompt user to upgrade.
|
|
328
|
+
Prompt user to upgrade with enhanced formatting.
|
|
216
329
|
|
|
217
330
|
Args:
|
|
218
331
|
update_info: Update information dict
|
|
@@ -224,11 +337,19 @@ class SelfUpgradeService:
|
|
|
224
337
|
latest = update_info["latest"]
|
|
225
338
|
method = update_info.get("installation_method", "unknown")
|
|
226
339
|
|
|
227
|
-
|
|
340
|
+
# Enhanced notification with release notes link
|
|
341
|
+
print("\n" + "=" * 70)
|
|
342
|
+
print("📢 Update Available for claude-mpm")
|
|
343
|
+
print("=" * 70)
|
|
228
344
|
print(f" Current: v{current}")
|
|
229
345
|
print(f" Latest: v{latest}")
|
|
230
|
-
print(f"
|
|
231
|
-
print(
|
|
346
|
+
print(f" Method: {method}")
|
|
347
|
+
print()
|
|
348
|
+
print(f" Upgrade: {update_info['upgrade_command']}")
|
|
349
|
+
print(
|
|
350
|
+
f" Release: https://github.com/bobmatnyc/claude-mpm/releases/tag/v{latest}"
|
|
351
|
+
)
|
|
352
|
+
print("=" * 70)
|
|
232
353
|
|
|
233
354
|
try:
|
|
234
355
|
response = input("\nWould you like to upgrade now? [y/N]: ").strip().lower()
|
|
@@ -237,6 +358,24 @@ class SelfUpgradeService:
|
|
|
237
358
|
print("\n")
|
|
238
359
|
return False
|
|
239
360
|
|
|
361
|
+
def display_update_notification(self, update_info: Dict[str, any]) -> None:
|
|
362
|
+
"""
|
|
363
|
+
Display a non-interactive update notification.
|
|
364
|
+
|
|
365
|
+
Args:
|
|
366
|
+
update_info: Update information dict
|
|
367
|
+
"""
|
|
368
|
+
current = update_info["current"]
|
|
369
|
+
latest = update_info["latest"]
|
|
370
|
+
command = update_info.get("upgrade_command", "pip install --upgrade claude-mpm")
|
|
371
|
+
|
|
372
|
+
print(f"\nℹ️ Update available: v{current} → v{latest}")
|
|
373
|
+
print(f" Run: {command}")
|
|
374
|
+
print(
|
|
375
|
+
f" Release notes: https://github.com/bobmatnyc/claude-mpm/releases/tag/v{latest}"
|
|
376
|
+
)
|
|
377
|
+
print()
|
|
378
|
+
|
|
240
379
|
def perform_upgrade(self, update_info: Dict[str, any]) -> Tuple[bool, str]:
|
|
241
380
|
"""
|
|
242
381
|
Perform the upgrade.
|
|
@@ -309,13 +448,15 @@ class SelfUpgradeService:
|
|
|
309
448
|
print("Please restart claude-mpm manually.")
|
|
310
449
|
|
|
311
450
|
async def check_and_prompt_on_startup(
|
|
312
|
-
self, auto_upgrade: bool = False
|
|
451
|
+
self, auto_upgrade: bool = False, check_claude_code: bool = True
|
|
313
452
|
) -> Optional[Dict[str, any]]:
|
|
314
453
|
"""
|
|
315
454
|
Check for updates on startup and optionally prompt user.
|
|
455
|
+
Also checks Claude Code version compatibility.
|
|
316
456
|
|
|
317
457
|
Args:
|
|
318
458
|
auto_upgrade: If True, upgrade without prompting (use with caution)
|
|
459
|
+
check_claude_code: If True, also check Claude Code compatibility
|
|
319
460
|
|
|
320
461
|
Returns:
|
|
321
462
|
Update info if available, None otherwise
|
|
@@ -325,14 +466,31 @@ class SelfUpgradeService:
|
|
|
325
466
|
return None
|
|
326
467
|
|
|
327
468
|
try:
|
|
469
|
+
# Check Claude Code compatibility first
|
|
470
|
+
if check_claude_code:
|
|
471
|
+
claude_compat = self.check_claude_code_compatibility()
|
|
472
|
+
if not claude_compat["installed"]:
|
|
473
|
+
print("\n⚠️ Claude Code Not Detected")
|
|
474
|
+
print(" " + claude_compat["message"])
|
|
475
|
+
elif claude_compat["status"] == "outdated":
|
|
476
|
+
print("\n⚠️ Claude Code Outdated")
|
|
477
|
+
print(" " + claude_compat["message"].replace("\n", "\n "))
|
|
478
|
+
elif claude_compat["status"] == "compatible":
|
|
479
|
+
# Only show if verbose or debug
|
|
480
|
+
self.logger.debug(claude_compat["message"])
|
|
481
|
+
|
|
482
|
+
# Check for claude-mpm updates
|
|
328
483
|
update_info = await self.check_for_update()
|
|
329
484
|
|
|
330
485
|
if update_info and update_info.get("update_available"):
|
|
331
|
-
if auto_upgrade
|
|
486
|
+
if auto_upgrade:
|
|
332
487
|
success, message = self.perform_upgrade(update_info)
|
|
333
488
|
print(message)
|
|
334
489
|
if success:
|
|
335
490
|
self.restart_after_upgrade()
|
|
491
|
+
else:
|
|
492
|
+
# Just display notification, don't prompt during startup
|
|
493
|
+
self.display_update_notification(update_info)
|
|
336
494
|
|
|
337
495
|
return update_info
|
|
338
496
|
|
|
@@ -9,29 +9,41 @@ This service handles:
|
|
|
9
9
|
4. Session logging and cleanup
|
|
10
10
|
|
|
11
11
|
Extracted from ClaudeRunner to follow Single Responsibility Principle.
|
|
12
|
+
|
|
13
|
+
DEPENDENCY INJECTION:
|
|
14
|
+
This service uses protocol-based dependency injection to avoid circular imports.
|
|
15
|
+
It accepts a ClaudeRunnerProtocol instead of importing ClaudeRunner directly.
|
|
12
16
|
"""
|
|
13
17
|
|
|
14
18
|
import time
|
|
15
19
|
import uuid
|
|
16
20
|
from datetime import timezone
|
|
17
|
-
from typing import Any, Dict, List, Optional
|
|
21
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional
|
|
18
22
|
|
|
19
23
|
from claude_mpm.core.base_service import BaseService
|
|
20
24
|
from claude_mpm.core.enums import OperationResult, ServiceState
|
|
21
25
|
from claude_mpm.services.core.interfaces import SessionManagementInterface
|
|
22
26
|
|
|
27
|
+
# Protocol imports for type checking without circular dependencies
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from claude_mpm.core.protocols import ClaudeRunnerProtocol
|
|
30
|
+
else:
|
|
31
|
+
# At runtime, accept any object with matching interface
|
|
32
|
+
ClaudeRunnerProtocol = Any
|
|
33
|
+
|
|
23
34
|
|
|
24
35
|
class SessionManagementService(BaseService, SessionManagementInterface):
|
|
25
36
|
"""Service for managing Claude session orchestration."""
|
|
26
37
|
|
|
27
|
-
def __init__(self, runner=None):
|
|
38
|
+
def __init__(self, runner: Optional["ClaudeRunnerProtocol"] = None):
|
|
28
39
|
"""Initialize the session management service.
|
|
29
40
|
|
|
30
41
|
Args:
|
|
31
|
-
runner: ClaudeRunner instance
|
|
42
|
+
runner: ClaudeRunner instance (or any object matching ClaudeRunnerProtocol)
|
|
43
|
+
for delegation
|
|
32
44
|
"""
|
|
33
45
|
super().__init__(name="session_management_service")
|
|
34
|
-
self.runner = runner
|
|
46
|
+
self.runner: Optional[ClaudeRunnerProtocol] = runner
|
|
35
47
|
self.active_sessions = {} # Track active sessions
|
|
36
48
|
|
|
37
49
|
async def _initialize(self) -> None:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Skills management services.
|
|
2
|
+
|
|
3
|
+
This package provides services for Git-based skills management:
|
|
4
|
+
- GitSkillSourceManager: Multi-repository orchestration with priority resolution
|
|
5
|
+
- SkillDiscoveryService: Parse skills from Git repositories (Markdown with YAML frontmatter)
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from claude_mpm.services.skills.git_skill_source_manager import GitSkillSourceManager
|
|
9
|
+
from claude_mpm.services.skills.skill_discovery_service import (
|
|
10
|
+
SkillDiscoveryService,
|
|
11
|
+
SkillMetadata,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"GitSkillSourceManager",
|
|
16
|
+
"SkillDiscoveryService",
|
|
17
|
+
"SkillMetadata",
|
|
18
|
+
]
|