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
|
@@ -228,8 +228,8 @@ class AgentDisplay:
|
|
|
228
228
|
[bold]Model:[/bold] {model}
|
|
229
229
|
[bold]Agent Version:[/bold] {agent_version}
|
|
230
230
|
[bold]Schema Version:[/bold] {schema_version}
|
|
231
|
-
[bold]Tags:[/bold] {
|
|
232
|
-
[bold]Tools:[/bold] {
|
|
231
|
+
[bold]Tags:[/bold] {", ".join(tags) if tags else "None"}
|
|
232
|
+
[bold]Tools:[/bold] {", ".join(tools[:5]) if tools else "None"}{"..." if len(tools) > 5 else ""}
|
|
233
233
|
"""
|
|
234
234
|
except Exception:
|
|
235
235
|
pass
|
|
@@ -237,9 +237,9 @@ class AgentDisplay:
|
|
|
237
237
|
# Create detail panel
|
|
238
238
|
detail_text = f"""
|
|
239
239
|
[bold]Name:[/bold] {agent.name}
|
|
240
|
-
[bold]Status:[/bold] {
|
|
240
|
+
[bold]Status:[/bold] {"[green]Enabled[/green]" if self.agent_manager.is_agent_enabled(agent.name) else "[red]Disabled[/red]"}
|
|
241
241
|
[bold]Template Path:[/bold] {template_path}
|
|
242
|
-
[bold]Is System Template:[/bold] {
|
|
242
|
+
[bold]Is System Template:[/bold] {"Yes" if str(template_path).startswith(str(self.agent_manager.templates_dir)) else "No (Custom)"}
|
|
243
243
|
{extra_info}
|
|
244
244
|
"""
|
|
245
245
|
|
|
@@ -14,12 +14,13 @@ DESIGN DECISIONS:
|
|
|
14
14
|
import os
|
|
15
15
|
from pathlib import Path
|
|
16
16
|
|
|
17
|
+
import questionary
|
|
18
|
+
from questionary import Style
|
|
17
19
|
from rich.box import ROUNDED
|
|
18
20
|
from rich.columns import Columns
|
|
19
21
|
from rich.console import Console
|
|
20
22
|
from rich.panel import Panel
|
|
21
23
|
from rich.prompt import Prompt
|
|
22
|
-
from rich.table import Table
|
|
23
24
|
from rich.text import Text
|
|
24
25
|
|
|
25
26
|
|
|
@@ -33,6 +34,16 @@ class ConfigNavigation:
|
|
|
33
34
|
- Claude MPM launch integration
|
|
34
35
|
"""
|
|
35
36
|
|
|
37
|
+
# Questionary style matching Rich cyan theme
|
|
38
|
+
QUESTIONARY_STYLE = Style(
|
|
39
|
+
[
|
|
40
|
+
("selected", "fg:cyan bold"),
|
|
41
|
+
("pointer", "fg:cyan bold"),
|
|
42
|
+
("highlighted", "fg:cyan"),
|
|
43
|
+
("question", "fg:cyan bold"),
|
|
44
|
+
]
|
|
45
|
+
)
|
|
46
|
+
|
|
36
47
|
def __init__(self, console: Console, project_dir: Path):
|
|
37
48
|
"""Initialize navigation handler.
|
|
38
49
|
|
|
@@ -81,56 +92,62 @@ class ConfigNavigation:
|
|
|
81
92
|
self.console.print()
|
|
82
93
|
|
|
83
94
|
def show_main_menu(self) -> str:
|
|
84
|
-
"""Show the main menu and get user choice.
|
|
95
|
+
"""Show the main menu and get user choice with arrow-key navigation.
|
|
85
96
|
|
|
86
97
|
Displays main configuration menu with options:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
- Agent Management
|
|
99
|
+
- Skills Management
|
|
100
|
+
- Template Editing
|
|
101
|
+
- Behavior Files
|
|
102
|
+
- Startup Configuration
|
|
103
|
+
- Switch Scope
|
|
104
|
+
- Version Info
|
|
105
|
+
- Save & Launch
|
|
106
|
+
- Quit
|
|
96
107
|
|
|
97
108
|
Returns:
|
|
98
|
-
User's menu choice (
|
|
109
|
+
User's menu choice mapped to original key (1-7, l, q) for
|
|
110
|
+
backward compatibility with existing code
|
|
99
111
|
"""
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
112
|
+
try:
|
|
113
|
+
choice = questionary.select(
|
|
114
|
+
"Main Menu:",
|
|
115
|
+
choices=[
|
|
116
|
+
"Agent Management",
|
|
117
|
+
"Skills Management",
|
|
118
|
+
"Template Editing",
|
|
119
|
+
"Behavior Files",
|
|
120
|
+
"Startup Configuration",
|
|
121
|
+
f"Switch Scope (Current: {self.current_scope})",
|
|
122
|
+
"Version Info",
|
|
123
|
+
questionary.Separator(),
|
|
124
|
+
"Save & Launch Claude MPM",
|
|
125
|
+
"Quit",
|
|
126
|
+
],
|
|
127
|
+
style=self.QUESTIONARY_STYLE,
|
|
128
|
+
).ask()
|
|
129
|
+
|
|
130
|
+
if choice is None:
|
|
131
|
+
return "q"
|
|
132
|
+
|
|
133
|
+
# Map natural language choices back to original key-based system
|
|
134
|
+
# for backward compatibility
|
|
135
|
+
choice_map = {
|
|
136
|
+
"Agent Management": "1",
|
|
137
|
+
"Skills Management": "2",
|
|
138
|
+
"Template Editing": "3",
|
|
139
|
+
"Behavior Files": "4",
|
|
140
|
+
"Startup Configuration": "5",
|
|
141
|
+
f"Switch Scope (Current: {self.current_scope})": "6",
|
|
142
|
+
"Version Info": "7",
|
|
143
|
+
"Save & Launch Claude MPM": "l",
|
|
144
|
+
"Quit": "q",
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return choice_map.get(choice, "q")
|
|
148
|
+
|
|
149
|
+
except KeyboardInterrupt:
|
|
150
|
+
return "q"
|
|
134
151
|
|
|
135
152
|
def switch_scope(self) -> None:
|
|
136
153
|
"""Switch between project and user scope.
|
claude_mpm/cli/commands/debug.py
CHANGED
|
@@ -693,9 +693,9 @@ def debug_hooks(args, logger):
|
|
|
693
693
|
max_time = max(times)
|
|
694
694
|
|
|
695
695
|
print(f"\n {hook.name}:")
|
|
696
|
-
print(f" Average: {avg_time*1000:.2f}ms")
|
|
697
|
-
print(f" Min: {min_time*1000:.2f}ms")
|
|
698
|
-
print(f" Max: {max_time*1000:.2f}ms")
|
|
696
|
+
print(f" Average: {avg_time * 1000:.2f}ms")
|
|
697
|
+
print(f" Min: {min_time * 1000:.2f}ms")
|
|
698
|
+
print(f" Max: {max_time * 1000:.2f}ms")
|
|
699
699
|
|
|
700
700
|
else:
|
|
701
701
|
# Default: show summary
|
|
@@ -767,7 +767,7 @@ def debug_cache(args, logger):
|
|
|
767
767
|
print(f" Location: {cache_dir}")
|
|
768
768
|
print(f" Total Files: {file_count}")
|
|
769
769
|
print(
|
|
770
|
-
f" Total Size: {total_size:,} bytes ({total_size/1024/1024:.2f} MB)"
|
|
770
|
+
f" Total Size: {total_size:,} bytes ({total_size / 1024 / 1024:.2f} MB)"
|
|
771
771
|
)
|
|
772
772
|
|
|
773
773
|
print("\n📁 Categories:")
|
|
@@ -871,7 +871,7 @@ def debug_cache(args, logger):
|
|
|
871
871
|
|
|
872
872
|
print(f"Location: {cache_dir}")
|
|
873
873
|
print(f"Files: {file_count}")
|
|
874
|
-
print(f"Size: {total_size:,} bytes ({total_size/1024/1024:.2f} MB)")
|
|
874
|
+
print(f"Size: {total_size:,} bytes ({total_size / 1024 / 1024:.2f} MB)")
|
|
875
875
|
else:
|
|
876
876
|
print("No cache found")
|
|
877
877
|
|
|
@@ -998,22 +998,22 @@ def debug_performance(args, logger):
|
|
|
998
998
|
# Memory info
|
|
999
999
|
mem = psutil.virtual_memory()
|
|
1000
1000
|
print("\n💾 Memory:")
|
|
1001
|
-
print(f" Total: {mem.total/1024/1024/1024:.2f} GB")
|
|
1002
|
-
print(f" Used: {mem.used/1024/1024/1024:.2f} GB ({mem.percent}%)")
|
|
1003
|
-
print(f" Available: {mem.available/1024/1024/1024:.2f} GB")
|
|
1001
|
+
print(f" Total: {mem.total / 1024 / 1024 / 1024:.2f} GB")
|
|
1002
|
+
print(f" Used: {mem.used / 1024 / 1024 / 1024:.2f} GB ({mem.percent}%)")
|
|
1003
|
+
print(f" Available: {mem.available / 1024 / 1024 / 1024:.2f} GB")
|
|
1004
1004
|
|
|
1005
1005
|
# Disk info
|
|
1006
1006
|
disk = psutil.disk_usage("/")
|
|
1007
1007
|
print("\n💿 Disk:")
|
|
1008
|
-
print(f" Total: {disk.total/1024/1024/1024:.2f} GB")
|
|
1009
|
-
print(f" Used: {disk.used/1024/1024/1024:.2f} GB ({disk.percent}%)")
|
|
1010
|
-
print(f" Free: {disk.free/1024/1024/1024:.2f} GB")
|
|
1008
|
+
print(f" Total: {disk.total / 1024 / 1024 / 1024:.2f} GB")
|
|
1009
|
+
print(f" Used: {disk.used / 1024 / 1024 / 1024:.2f} GB ({disk.percent}%)")
|
|
1010
|
+
print(f" Free: {disk.free / 1024 / 1024 / 1024:.2f} GB")
|
|
1011
1011
|
|
|
1012
1012
|
# Process info
|
|
1013
1013
|
process = psutil.Process()
|
|
1014
1014
|
print("\n📦 Current Process:")
|
|
1015
1015
|
print(f" PID: {process.pid}")
|
|
1016
|
-
print(f" Memory: {process.memory_info().rss/1024/1024:.2f} MB")
|
|
1016
|
+
print(f" Memory: {process.memory_info().rss / 1024 / 1024:.2f} MB")
|
|
1017
1017
|
print(f" CPU: {process.cpu_percent()}%")
|
|
1018
1018
|
print(f" Threads: {process.num_threads()}")
|
|
1019
1019
|
|
|
@@ -60,6 +60,7 @@ def add_doctor_parser(subparsers):
|
|
|
60
60
|
"filesystem",
|
|
61
61
|
"claude",
|
|
62
62
|
"agents",
|
|
63
|
+
"agent-sources",
|
|
63
64
|
"mcp",
|
|
64
65
|
"monitor",
|
|
65
66
|
"common",
|
|
@@ -116,6 +117,8 @@ def doctor_command(args):
|
|
|
116
117
|
Exit code (0 for success, 1 for warnings, 2 for errors)
|
|
117
118
|
"""
|
|
118
119
|
# Configure logging
|
|
120
|
+
from datetime import datetime, timezone
|
|
121
|
+
|
|
119
122
|
from claude_mpm.core.logging_utils import get_logger
|
|
120
123
|
|
|
121
124
|
logger = get_logger(__name__)
|
|
@@ -123,13 +126,18 @@ def doctor_command(args):
|
|
|
123
126
|
# Handle output file parameter - support both --output and --output-file
|
|
124
127
|
output_file = args.output or args.output_file
|
|
125
128
|
if output_file is not None:
|
|
126
|
-
# If output_file is specified without a path, use default
|
|
129
|
+
# If output_file is specified without a path, use default with timestamp
|
|
127
130
|
if str(output_file) == ".":
|
|
128
|
-
|
|
131
|
+
timestamp = datetime.now(timezone.utc).strftime("%Y%m%d-%H%M%S")
|
|
132
|
+
output_file = Path(f"mpm-doctor-report-{timestamp}.md")
|
|
129
133
|
elif not str(output_file).endswith((".md", ".json", ".txt")):
|
|
130
134
|
# Add .md extension if no extension provided
|
|
131
135
|
output_file = Path(str(output_file) + ".md")
|
|
132
136
|
|
|
137
|
+
# Create parent directories if needed
|
|
138
|
+
output_file = output_file.absolute()
|
|
139
|
+
output_file.parent.mkdir(parents=True, exist_ok=True)
|
|
140
|
+
|
|
133
141
|
# Determine output format
|
|
134
142
|
if args.json:
|
|
135
143
|
output_format = "json"
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"""CLI commands for managing hook error memory.
|
|
2
|
+
|
|
3
|
+
WHY this command is needed:
|
|
4
|
+
- Users need visibility into what hooks are failing
|
|
5
|
+
- Must be able to clear error memory to retry failed hooks
|
|
6
|
+
- Provides diagnostics for troubleshooting
|
|
7
|
+
- Makes error memory accessible without manual file editing
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
import click
|
|
14
|
+
|
|
15
|
+
from claude_mpm.core.hook_error_memory import get_hook_error_memory
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@click.group(name="hook-errors")
|
|
19
|
+
def hook_errors_group():
|
|
20
|
+
"""Manage hook error memory and diagnostics.
|
|
21
|
+
|
|
22
|
+
The hook error memory system tracks failing hooks to prevent
|
|
23
|
+
repeated execution of known-failing operations.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@hook_errors_group.command(name="list")
|
|
28
|
+
@click.option(
|
|
29
|
+
"--format",
|
|
30
|
+
type=click.Choice(["table", "json"], case_sensitive=False),
|
|
31
|
+
default="table",
|
|
32
|
+
help="Output format (table or json)",
|
|
33
|
+
)
|
|
34
|
+
@click.option(
|
|
35
|
+
"--hook-type",
|
|
36
|
+
help="Filter by hook type (e.g., PreToolUse, PostToolUse)",
|
|
37
|
+
)
|
|
38
|
+
def list_errors(format, hook_type):
|
|
39
|
+
"""List all recorded hook errors.
|
|
40
|
+
|
|
41
|
+
Shows errors that have been detected during hook execution,
|
|
42
|
+
including failure counts and last seen timestamps.
|
|
43
|
+
|
|
44
|
+
Examples:
|
|
45
|
+
claude-mpm hook-errors list
|
|
46
|
+
claude-mpm hook-errors list --format json
|
|
47
|
+
claude-mpm hook-errors list --hook-type PreToolUse
|
|
48
|
+
"""
|
|
49
|
+
error_memory = get_hook_error_memory()
|
|
50
|
+
|
|
51
|
+
# Filter errors if hook type specified
|
|
52
|
+
errors = error_memory.errors
|
|
53
|
+
if hook_type:
|
|
54
|
+
errors = {
|
|
55
|
+
key: data for key, data in errors.items() if data["hook_type"] == hook_type
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if not errors:
|
|
59
|
+
if hook_type:
|
|
60
|
+
click.echo(f"No errors recorded for hook type: {hook_type}")
|
|
61
|
+
else:
|
|
62
|
+
click.echo("No errors recorded. Hook system is healthy! ✅")
|
|
63
|
+
return
|
|
64
|
+
|
|
65
|
+
if format == "json":
|
|
66
|
+
# JSON output
|
|
67
|
+
click.echo(json.dumps(errors, indent=2))
|
|
68
|
+
else:
|
|
69
|
+
# Table output
|
|
70
|
+
click.echo("\n" + "=" * 80)
|
|
71
|
+
click.echo("Hook Error Memory Report")
|
|
72
|
+
click.echo("=" * 80)
|
|
73
|
+
|
|
74
|
+
for key, data in errors.items():
|
|
75
|
+
click.echo(f"\n🔴 Error: {data['type']}")
|
|
76
|
+
click.echo(f" Hook Type: {data['hook_type']}")
|
|
77
|
+
click.echo(f" Details: {data['details']}")
|
|
78
|
+
click.echo(f" Match: {data['match']}")
|
|
79
|
+
click.echo(f" Count: {data['count']} occurrences")
|
|
80
|
+
click.echo(f" First Seen: {data['first_seen']}")
|
|
81
|
+
click.echo(f" Last Seen: {data['last_seen']}")
|
|
82
|
+
|
|
83
|
+
click.echo("\n" + "=" * 80)
|
|
84
|
+
click.echo(f"Total unique errors: {len(errors)}")
|
|
85
|
+
click.echo(f"Memory file: {error_memory.memory_file}")
|
|
86
|
+
click.echo("\nTo clear errors: claude-mpm hook-errors clear")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@hook_errors_group.command(name="summary")
|
|
90
|
+
def show_summary():
|
|
91
|
+
"""Show summary statistics of hook errors.
|
|
92
|
+
|
|
93
|
+
Provides overview of error counts by type and hook type.
|
|
94
|
+
|
|
95
|
+
Example:
|
|
96
|
+
claude-mpm hook-errors summary
|
|
97
|
+
"""
|
|
98
|
+
error_memory = get_hook_error_memory()
|
|
99
|
+
summary = error_memory.get_error_summary()
|
|
100
|
+
|
|
101
|
+
if summary["total_errors"] == 0:
|
|
102
|
+
click.echo("No errors recorded. Hook system is healthy! ✅")
|
|
103
|
+
return
|
|
104
|
+
|
|
105
|
+
click.echo("\n" + "=" * 80)
|
|
106
|
+
click.echo("Hook Error Summary")
|
|
107
|
+
click.echo("=" * 80)
|
|
108
|
+
click.echo("\n📊 Statistics:")
|
|
109
|
+
click.echo(f" Total Errors: {summary['total_errors']}")
|
|
110
|
+
click.echo(f" Unique Errors: {summary['unique_errors']}")
|
|
111
|
+
|
|
112
|
+
if summary["errors_by_type"]:
|
|
113
|
+
click.echo("\n🔍 Errors by Type:")
|
|
114
|
+
for error_type, count in summary["errors_by_type"].items():
|
|
115
|
+
click.echo(f" {error_type}: {count}")
|
|
116
|
+
|
|
117
|
+
if summary["errors_by_hook"]:
|
|
118
|
+
click.echo("\n🎣 Errors by Hook Type:")
|
|
119
|
+
for hook_type, count in summary["errors_by_hook"].items():
|
|
120
|
+
click.echo(f" {hook_type}: {count}")
|
|
121
|
+
|
|
122
|
+
click.echo(f"\n📁 Memory File: {summary['memory_file']}")
|
|
123
|
+
click.echo("\nFor detailed list: claude-mpm hook-errors list")
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@hook_errors_group.command(name="clear")
|
|
127
|
+
@click.option(
|
|
128
|
+
"--hook-type",
|
|
129
|
+
help="Clear errors only for specific hook type",
|
|
130
|
+
)
|
|
131
|
+
@click.option(
|
|
132
|
+
"--yes",
|
|
133
|
+
"-y",
|
|
134
|
+
is_flag=True,
|
|
135
|
+
help="Skip confirmation prompt",
|
|
136
|
+
)
|
|
137
|
+
def clear_errors(hook_type, yes):
|
|
138
|
+
"""Clear hook error memory to allow retry.
|
|
139
|
+
|
|
140
|
+
This removes error records, allowing previously failing hooks
|
|
141
|
+
to be executed again. Use this after fixing the underlying issue.
|
|
142
|
+
|
|
143
|
+
Examples:
|
|
144
|
+
claude-mpm hook-errors clear
|
|
145
|
+
claude-mpm hook-errors clear --hook-type PreToolUse
|
|
146
|
+
claude-mpm hook-errors clear -y # Skip confirmation
|
|
147
|
+
"""
|
|
148
|
+
error_memory = get_hook_error_memory()
|
|
149
|
+
|
|
150
|
+
# Count errors to be cleared
|
|
151
|
+
if hook_type:
|
|
152
|
+
count = sum(
|
|
153
|
+
1 for data in error_memory.errors.values() if data["hook_type"] == hook_type
|
|
154
|
+
)
|
|
155
|
+
scope = f"for hook type '{hook_type}'"
|
|
156
|
+
else:
|
|
157
|
+
count = len(error_memory.errors)
|
|
158
|
+
scope = "all hook types"
|
|
159
|
+
|
|
160
|
+
if count == 0:
|
|
161
|
+
click.echo(f"No errors to clear {scope}.")
|
|
162
|
+
return
|
|
163
|
+
|
|
164
|
+
# Confirm if not using -y flag
|
|
165
|
+
if not yes:
|
|
166
|
+
message = f"Clear {count} error(s) {scope}?"
|
|
167
|
+
if not click.confirm(message):
|
|
168
|
+
click.echo("Cancelled.")
|
|
169
|
+
return
|
|
170
|
+
|
|
171
|
+
# Clear errors
|
|
172
|
+
error_memory.clear_errors(hook_type)
|
|
173
|
+
|
|
174
|
+
click.echo(f"✅ Cleared {count} error(s) {scope}.")
|
|
175
|
+
click.echo("\nHooks will be retried on next execution.")
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@hook_errors_group.command(name="diagnose")
|
|
179
|
+
@click.argument("hook_type", required=False)
|
|
180
|
+
def diagnose_errors(hook_type):
|
|
181
|
+
"""Diagnose hook errors and suggest fixes.
|
|
182
|
+
|
|
183
|
+
Provides detailed diagnostics and actionable suggestions for
|
|
184
|
+
resolving hook errors.
|
|
185
|
+
|
|
186
|
+
Arguments:
|
|
187
|
+
HOOK_TYPE: Optional hook type to diagnose (e.g., PreToolUse)
|
|
188
|
+
|
|
189
|
+
Examples:
|
|
190
|
+
claude-mpm hook-errors diagnose
|
|
191
|
+
claude-mpm hook-errors diagnose PreToolUse
|
|
192
|
+
"""
|
|
193
|
+
error_memory = get_hook_error_memory()
|
|
194
|
+
|
|
195
|
+
# Filter errors if hook type specified
|
|
196
|
+
errors = error_memory.errors
|
|
197
|
+
if hook_type:
|
|
198
|
+
errors = {
|
|
199
|
+
key: data for key, data in errors.items() if data["hook_type"] == hook_type
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if not errors:
|
|
203
|
+
if hook_type:
|
|
204
|
+
click.echo(f"No errors to diagnose for hook type: {hook_type}")
|
|
205
|
+
else:
|
|
206
|
+
click.echo("No errors to diagnose. Hook system is healthy! ✅")
|
|
207
|
+
return
|
|
208
|
+
|
|
209
|
+
click.echo("\n" + "=" * 80)
|
|
210
|
+
click.echo("Hook Error Diagnostics")
|
|
211
|
+
click.echo("=" * 80)
|
|
212
|
+
|
|
213
|
+
for key, data in errors.items():
|
|
214
|
+
click.echo(f"\n🔴 Error: {data['type']}")
|
|
215
|
+
click.echo(f" Hook: {data['hook_type']}")
|
|
216
|
+
click.echo(f" Count: {data['count']} failures")
|
|
217
|
+
|
|
218
|
+
# Generate and show fix suggestion
|
|
219
|
+
error_info = {
|
|
220
|
+
"type": data["type"],
|
|
221
|
+
"details": data["details"],
|
|
222
|
+
"match": data["match"],
|
|
223
|
+
}
|
|
224
|
+
suggestion = error_memory.suggest_fix(error_info)
|
|
225
|
+
|
|
226
|
+
click.echo("\n" + "-" * 80)
|
|
227
|
+
click.echo(suggestion)
|
|
228
|
+
click.echo("-" * 80)
|
|
229
|
+
|
|
230
|
+
click.echo("\n" + "=" * 80)
|
|
231
|
+
click.echo("After fixing issues, clear errors to retry:")
|
|
232
|
+
click.echo(" claude-mpm hook-errors clear")
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@hook_errors_group.command(name="status")
|
|
236
|
+
def show_status():
|
|
237
|
+
"""Show hook error memory status.
|
|
238
|
+
|
|
239
|
+
Quick overview of hook error system state.
|
|
240
|
+
|
|
241
|
+
Example:
|
|
242
|
+
claude-mpm hook-errors status
|
|
243
|
+
"""
|
|
244
|
+
error_memory = get_hook_error_memory()
|
|
245
|
+
summary = error_memory.get_error_summary()
|
|
246
|
+
|
|
247
|
+
click.echo("\n📊 Hook Error Memory Status")
|
|
248
|
+
click.echo("=" * 80)
|
|
249
|
+
|
|
250
|
+
if summary["total_errors"] == 0:
|
|
251
|
+
click.echo("✅ Status: Healthy (no errors recorded)")
|
|
252
|
+
else:
|
|
253
|
+
click.echo(f"⚠️ Status: {summary['total_errors']} error(s) recorded")
|
|
254
|
+
click.echo(f" Unique errors: {summary['unique_errors']}")
|
|
255
|
+
|
|
256
|
+
# Show which hooks are affected
|
|
257
|
+
if summary["errors_by_hook"]:
|
|
258
|
+
affected_hooks = list(summary["errors_by_hook"].keys())
|
|
259
|
+
click.echo(f" Affected hooks: {', '.join(affected_hooks)}")
|
|
260
|
+
|
|
261
|
+
click.echo(f"\n📁 Memory file: {summary['memory_file']}")
|
|
262
|
+
click.echo(f" Exists: {Path(summary['memory_file']).exists()}")
|
|
263
|
+
|
|
264
|
+
click.echo("\nCommands:")
|
|
265
|
+
click.echo(" claude-mpm hook-errors list # View detailed errors")
|
|
266
|
+
click.echo(" claude-mpm hook-errors diagnose # Get fix suggestions")
|
|
267
|
+
click.echo(" claude-mpm hook-errors clear # Clear and retry")
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
# Register the command group
|
|
271
|
+
def register_commands(cli):
|
|
272
|
+
"""Register hook error commands with CLI.
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
cli: Click CLI group to register commands with
|
|
276
|
+
"""
|
|
277
|
+
cli.add_command(hook_errors_group)
|
|
@@ -25,10 +25,7 @@ from rich.text import Text
|
|
|
25
25
|
|
|
26
26
|
from claude_mpm.core.enums import ServiceState
|
|
27
27
|
|
|
28
|
-
from ...services.local_ops import
|
|
29
|
-
StartConfig,
|
|
30
|
-
UnifiedLocalOpsManager,
|
|
31
|
-
)
|
|
28
|
+
from ...services.local_ops import StartConfig, UnifiedLocalOpsManager
|
|
32
29
|
from ..shared import BaseCommand, CommandResult
|
|
33
30
|
|
|
34
31
|
|
|
@@ -295,7 +295,7 @@ class MCPInstallCommands:
|
|
|
295
295
|
|
|
296
296
|
# Create backup
|
|
297
297
|
backup_path = config_path.with_suffix(
|
|
298
|
-
f
|
|
298
|
+
f".backup.{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}.json"
|
|
299
299
|
)
|
|
300
300
|
try:
|
|
301
301
|
config_path.rename(backup_path)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""MPM initialization command package.
|
|
2
|
+
|
|
3
|
+
This package provides comprehensive project initialization and update capabilities
|
|
4
|
+
for Claude Code and Claude MPM. It includes:
|
|
5
|
+
|
|
6
|
+
- Core command class (MPMInitCommand) for orchestrating initialization
|
|
7
|
+
- Click CLI commands for command-line interface
|
|
8
|
+
- Modular components for prompts, display, git analysis, and modes
|
|
9
|
+
- Support for multiple initialization modes (create, update, review, quick-update, catchup)
|
|
10
|
+
|
|
11
|
+
Main Components:
|
|
12
|
+
- core.py: MPMInitCommand class - main initialization orchestrator
|
|
13
|
+
- mpm_init_cli.py: Click command definitions and CLI entry points
|
|
14
|
+
- prompts.py: Prompt building functions for agent delegation
|
|
15
|
+
- display.py: Display and UI helper functions
|
|
16
|
+
- git_activity.py: Git history analysis and context building
|
|
17
|
+
- modes.py: Mode-specific handlers (review, dry-run, quick-update, etc.)
|
|
18
|
+
|
|
19
|
+
Public API:
|
|
20
|
+
- MPMInitCommand: Main command class (from core)
|
|
21
|
+
- mpm_init: Click command group (from mpm_init_cli)
|
|
22
|
+
|
|
23
|
+
Example Usage:
|
|
24
|
+
# Programmatic usage
|
|
25
|
+
from claude_mpm.cli.commands.mpm_init import MPMInitCommand
|
|
26
|
+
command = MPMInitCommand(project_path)
|
|
27
|
+
result = command.initialize_project()
|
|
28
|
+
|
|
29
|
+
# CLI usage (via Click)
|
|
30
|
+
from claude_mpm.cli.commands.mpm_init import mpm_init
|
|
31
|
+
# Command is registered with Click and invoked via CLI
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
# Import core components for re-export
|
|
35
|
+
from .core import MPMInitCommand
|
|
36
|
+
|
|
37
|
+
# Import the Click command group - this must be imported from parent level
|
|
38
|
+
# to avoid circular dependencies, as mpm_init_cli imports from core
|
|
39
|
+
# We'll handle this via late import in __all__
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
# Main command class
|
|
43
|
+
"MPMInitCommand",
|
|
44
|
+
"core",
|
|
45
|
+
# Internal modules (for internal package use)
|
|
46
|
+
"display",
|
|
47
|
+
"git_activity",
|
|
48
|
+
"modes",
|
|
49
|
+
# Click CLI command (imported via __getattr__ to avoid circular import)
|
|
50
|
+
"mpm_init",
|
|
51
|
+
"prompts",
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def __getattr__(name):
|
|
56
|
+
"""Lazy import to avoid circular dependencies.
|
|
57
|
+
|
|
58
|
+
This allows importing mpm_init Click command without importing
|
|
59
|
+
mpm_init_cli at module load time, which would cause circular imports.
|
|
60
|
+
"""
|
|
61
|
+
if name == "mpm_init":
|
|
62
|
+
# Lazy import the Click command group
|
|
63
|
+
from ..mpm_init_cli import mpm_init as _mpm_init
|
|
64
|
+
|
|
65
|
+
return _mpm_init
|
|
66
|
+
|
|
67
|
+
# For internal module imports, import them directly
|
|
68
|
+
if name in ("display", "git_activity", "prompts", "modes", "core"):
|
|
69
|
+
import importlib
|
|
70
|
+
|
|
71
|
+
return importlib.import_module(f".{name}", __package__)
|
|
72
|
+
|
|
73
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|