claude-mpm 4.25.10__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 +12 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1055 -2230
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +4 -4
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +576 -66
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- 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 +28 -3
- 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/auto_configure.py +537 -239
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +924 -45
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +1 -39
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +322 -19
- claude_mpm/cli/executor.py +22 -3
- claude_mpm/cli/interactive/agent_wizard.py +1028 -43
- 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 +25 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +7 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +456 -103
- claude_mpm/cli/startup_display.py +4 -4
- 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 +14 -2
- claude_mpm/commands/mpm-init.md +9 -0
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -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 +10 -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 +1 -0
- claude_mpm/core/claude_runner.py +5 -34
- claude_mpm/core/config.py +16 -0
- 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/interactive_session.py +83 -7
- claude_mpm/core/oneshot_session.py +71 -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/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/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/models/git_repository.py +198 -0
- 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_lifecycle_manager.py +1 -5
- 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/multi_source_deployment_service.py +115 -15
- 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 +1 -4
- claude_mpm/services/agents/local_template_manager.py +47 -9
- 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/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +7 -2
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- 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 +34 -6
- 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/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +3 -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/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/monitor/daemon.py +28 -8
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/runner_configuration_service.py +16 -3
- 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/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/templates/questions/__init__.py +2 -7
- claude_mpm/templates/questions/pr_strategy.py +1 -4
- claude_mpm/templates/questions/project_init.py +1 -4
- claude_mpm/templates/questions/ticket_mgmt.py +1 -4
- claude_mpm/utils/agent_dependency_loader.py +77 -10
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/gitignore.py +3 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +356 -112
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +188 -439
- 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 -183
- 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 -238
- 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/javascript_engineer_agent.json +0 -380
- claude_mpm/agents/templates/local_ops_agent.json +0 -1840
- 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 -287
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -144
- 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 -243
- claude_mpm/agents/templates/react_engineer.json +0 -239
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -258
- 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/tauri_engineer.json +0 -274
- claude_mpm/agents/templates/ticketing.json +0 -181
- 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 -159
- claude_mpm/agents/templates/web_qa.json +0 -400
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/cli/README.md +0 -253
- claude_mpm/cli/commands/mcp_install_commands.py.backup +0 -284
- claude_mpm/cli/commands/mpm_init/README.md +0 -365
- claude_mpm/cli_module/refactoring_guide.md +0 -253
- claude_mpm/commands/mpm-tickets.md +0 -151
- claude_mpm/config/agent_capabilities.yaml +0 -658
- claude_mpm/config/async_logging_config.yaml +0 -145
- claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +0 -34
- claude_mpm/d2/.gitignore +0 -22
- claude_mpm/d2/ARCHITECTURE_COMPARISON.md +0 -273
- claude_mpm/d2/FLASK_INTEGRATION.md +0 -156
- claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +0 -452
- claude_mpm/d2/QUICKSTART.md +0 -186
- claude_mpm/d2/README.md +0 -232
- claude_mpm/d2/STORE_FIX_SUMMARY.md +0 -167
- claude_mpm/d2/SVELTE5_STORES_GUIDE.md +0 -180
- claude_mpm/d2/TESTING.md +0 -288
- claude_mpm/d2/index.html +0 -118
- claude_mpm/d2/package.json +0 -19
- claude_mpm/d2/src/App.svelte +0 -110
- claude_mpm/d2/src/components/Header.svelte +0 -153
- claude_mpm/d2/src/components/MainContent.svelte +0 -74
- claude_mpm/d2/src/components/Sidebar.svelte +0 -85
- claude_mpm/d2/src/components/tabs/EventsTab.svelte +0 -326
- claude_mpm/d2/src/lib/socketio.js +0 -144
- claude_mpm/d2/src/main.js +0 -7
- claude_mpm/d2/src/stores/events.js +0 -114
- claude_mpm/d2/src/stores/socket.js +0 -108
- claude_mpm/d2/src/stores/theme.js +0 -65
- claude_mpm/d2/svelte.config.js +0 -12
- claude_mpm/d2/vite.config.js +0 -15
- claude_mpm/dashboard/.claude-mpm/memories/README.md +0 -36
- claude_mpm/dashboard/BUILD_NUMBER +0 -1
- claude_mpm/dashboard/README.md +0 -121
- claude_mpm/dashboard/VERSION +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +0 -273
- claude_mpm/dashboard/react/components/ErrorBoundary.tsx +0 -75
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +0 -141
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +0 -36
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/react/components/shared/FilterBar.tsx +0 -89
- claude_mpm/dashboard/react/contexts/DashboardContext.tsx +0 -215
- claude_mpm/dashboard/react/entries/events.tsx +0 -165
- claude_mpm/dashboard/react/hooks/useEvents.ts +0 -191
- claude_mpm/dashboard/react/hooks/useSocket.ts +0 -225
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +0 -170
- 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/activity-tree.js.map +0 -1
- 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/agent-inference.js.map +0 -1
- 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-tree.js.map +0 -1
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js.map +0 -1
- 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-processor.js.map +0 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js.map +0 -1
- 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-tool-tracker.js.map +0 -1
- claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/file-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js.map +0 -1
- 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/session-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js.map +0 -1
- claude_mpm/dashboard/static/built/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js.map +0 -1
- 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/react/events.js.map +0 -1
- 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/socket-client.js.map +0 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +0 -170
- 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/navigation-test-results.md +0 -118
- 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/templates/.claude-mpm/memories/README.md +0 -36
- claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +0 -39
- claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +0 -38
- claude_mpm/hooks/README.md +0 -143
- claude_mpm/hooks/templates/README.md +0 -180
- claude_mpm/hooks/templates/settings.json.example +0 -147
- claude_mpm/schemas/agent_schema.json +0 -596
- claude_mpm/schemas/frontmatter_schema.json +0 -165
- claude_mpm/services/event_bus/README.md +0 -244
- claude_mpm/services/events/README.md +0 -303
- claude_mpm/services/framework_claude_md_generator/README.md +0 -119
- claude_mpm/services/mcp_gateway/README.md +0 -185
- claude_mpm/services/socketio/handlers/connection.py.backup +0 -217
- claude_mpm/services/socketio/handlers/hook.py.backup +0 -154
- claude_mpm/services/static/.gitkeep +0 -2
- claude_mpm/services/version_control/VERSION +0 -1
- claude_mpm/skills/bundled/.gitkeep +0 -2
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +0 -317
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +0 -251
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
- claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +0 -63
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
- 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 -131
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +0 -611
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +0 -596
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +0 -260
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +0 -315
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +0 -436
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +0 -433
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +0 -452
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +0 -404
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +0 -420
- claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +0 -54
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +0 -322
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
- 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/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
- 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/mcp-builder/reference/workflow.md +0 -1237
- claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +0 -22
- claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +0 -2
- claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
- claude_mpm/skills/bundled/react/flexlayout-react.md +0 -742
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +0 -495
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +0 -599
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +0 -535
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +0 -613
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +0 -648
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +0 -673
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +0 -767
- claude_mpm/skills/bundled/tauri/tauri-performance.md +0 -669
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +0 -573
- claude_mpm/skills/bundled/tauri/tauri-testing.md +0 -384
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +0 -628
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
- claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +0 -158
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
- 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/test-quality-inspector/SKILL.md +0 -458
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +0 -411
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +0 -317
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +0 -270
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +0 -436
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
- claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
- claude_mpm/templates/questions/EXAMPLES.md +0 -501
- claude_mpm/tools/README_SOCKETIO_DEBUG.md +0 -224
- claude_mpm/tools/code_tree_analyzer/README.md +0 -64
- /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/{pm_red_flags.md → pm-red-flags.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.25.10.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
|
@@ -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.
|
|
@@ -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"
|
|
@@ -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
|
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Postmortem command implementation for claude-mpm.
|
|
3
|
+
|
|
4
|
+
WHY: Provide a comprehensive analysis tool to help users identify, categorize,
|
|
5
|
+
and fix errors encountered during their session, with automated improvements
|
|
6
|
+
for framework code and suggestions for user code.
|
|
7
|
+
|
|
8
|
+
DESIGN DECISIONS:
|
|
9
|
+
- Leverages existing FailureTracker for error data
|
|
10
|
+
- Categorizes errors by source (script/skill/agent/user)
|
|
11
|
+
- Provides action-specific handling (auto-fix/update/PR/suggest)
|
|
12
|
+
- Supports dry-run mode for safety
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import sys
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
19
|
+
from claude_mpm.services.analysis import get_postmortem_service
|
|
20
|
+
from claude_mpm.services.analysis.postmortem_reporter import PostmortemReporter
|
|
21
|
+
|
|
22
|
+
logger = get_logger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def add_postmortem_parser(subparsers):
|
|
26
|
+
"""Add postmortem command parser.
|
|
27
|
+
|
|
28
|
+
WHY: This command helps users analyze session errors and generate
|
|
29
|
+
actionable improvement suggestions based on error source.
|
|
30
|
+
"""
|
|
31
|
+
parser = subparsers.add_parser(
|
|
32
|
+
"postmortem",
|
|
33
|
+
aliases=["pm-analysis"],
|
|
34
|
+
help="Analyze session errors and suggest improvements",
|
|
35
|
+
description="Perform comprehensive analysis of errors encountered during the session",
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
parser.add_argument(
|
|
39
|
+
"--dry-run",
|
|
40
|
+
action="store_true",
|
|
41
|
+
help="Preview analysis without making changes (default for destructive operations)",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
parser.add_argument(
|
|
45
|
+
"--auto-fix",
|
|
46
|
+
action="store_true",
|
|
47
|
+
help="Automatically apply fixes to scripts and skills",
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
parser.add_argument(
|
|
51
|
+
"--create-prs",
|
|
52
|
+
action="store_true",
|
|
53
|
+
help="Create pull requests for agent improvements",
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
parser.add_argument(
|
|
57
|
+
"--session-id",
|
|
58
|
+
type=str,
|
|
59
|
+
help="Analyze specific session (default: current session)",
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
parser.add_argument(
|
|
63
|
+
"--format",
|
|
64
|
+
choices=["terminal", "json", "markdown"],
|
|
65
|
+
default="terminal",
|
|
66
|
+
help="Output format (default: terminal)",
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
parser.add_argument(
|
|
70
|
+
"--output",
|
|
71
|
+
"-o",
|
|
72
|
+
type=Path,
|
|
73
|
+
help="Save report to file",
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
parser.add_argument(
|
|
77
|
+
"--verbose",
|
|
78
|
+
"-v",
|
|
79
|
+
action="store_true",
|
|
80
|
+
help="Include detailed error traces and analysis",
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
parser.add_argument(
|
|
84
|
+
"--no-color",
|
|
85
|
+
action="store_true",
|
|
86
|
+
help="Disable colored output",
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
parser.set_defaults(func=postmortem_command)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def run_postmortem(args):
|
|
93
|
+
"""Main entry point for postmortem command (used by CLI).
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
args: Parsed command-line arguments
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
Exit code (0 for success, 1 for warnings, 2 for errors)
|
|
100
|
+
"""
|
|
101
|
+
return postmortem_command(args)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def postmortem_command(args):
|
|
105
|
+
"""Execute the postmortem command.
|
|
106
|
+
|
|
107
|
+
WHY: Provides comprehensive error analysis with categorization and
|
|
108
|
+
actionable improvements, helping users understand and fix issues
|
|
109
|
+
encountered during their session.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
args: Parsed command-line arguments
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
Exit code (0 for success, 1 for warnings, 2 for errors)
|
|
116
|
+
"""
|
|
117
|
+
logger.info("Starting postmortem analysis")
|
|
118
|
+
|
|
119
|
+
# Get postmortem service
|
|
120
|
+
service = get_postmortem_service()
|
|
121
|
+
|
|
122
|
+
try:
|
|
123
|
+
# Analyze session
|
|
124
|
+
report = service.analyze_session(session_id=args.session_id)
|
|
125
|
+
|
|
126
|
+
# Handle output file
|
|
127
|
+
output_file = args.output
|
|
128
|
+
if output_file:
|
|
129
|
+
# Ensure file extension matches format
|
|
130
|
+
if args.format == "json" and not str(output_file).endswith(".json"):
|
|
131
|
+
output_file = Path(str(output_file) + ".json")
|
|
132
|
+
elif args.format == "markdown" and not str(output_file).endswith(".md"):
|
|
133
|
+
output_file = Path(str(output_file) + ".md")
|
|
134
|
+
|
|
135
|
+
# Create parent directories
|
|
136
|
+
output_file = output_file.absolute()
|
|
137
|
+
output_file.parent.mkdir(parents=True, exist_ok=True)
|
|
138
|
+
|
|
139
|
+
# Determine output format
|
|
140
|
+
output_format = args.format
|
|
141
|
+
|
|
142
|
+
# Create reporter
|
|
143
|
+
reporter = PostmortemReporter(
|
|
144
|
+
use_color=not args.no_color,
|
|
145
|
+
verbose=args.verbose,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
# Output results
|
|
149
|
+
if output_file:
|
|
150
|
+
# Save to file
|
|
151
|
+
try:
|
|
152
|
+
with output_file.open("w") as f:
|
|
153
|
+
original_output = reporter.output
|
|
154
|
+
reporter.output = f
|
|
155
|
+
reporter.report(report, format=output_format)
|
|
156
|
+
reporter.output = original_output
|
|
157
|
+
|
|
158
|
+
print(f"✅ Report saved to: {output_file}")
|
|
159
|
+
|
|
160
|
+
# Print brief summary to terminal
|
|
161
|
+
if report.total_errors > 0:
|
|
162
|
+
print(f"\n{report.total_errors} error(s) analyzed")
|
|
163
|
+
print(
|
|
164
|
+
f"{report.stats['total_actions']} improvement action(s) generated"
|
|
165
|
+
)
|
|
166
|
+
else:
|
|
167
|
+
print("\n✅ No errors detected in session!")
|
|
168
|
+
|
|
169
|
+
except Exception as e:
|
|
170
|
+
logger.error(f"Failed to save report: {e}")
|
|
171
|
+
print(f"❌ Failed to save report: {e!s}")
|
|
172
|
+
# Still output to terminal
|
|
173
|
+
reporter.report(report, format="terminal")
|
|
174
|
+
else:
|
|
175
|
+
# Output to terminal
|
|
176
|
+
reporter.report(report, format=output_format)
|
|
177
|
+
|
|
178
|
+
# Apply fixes if requested
|
|
179
|
+
if args.auto_fix and not args.dry_run:
|
|
180
|
+
exit_code = _apply_auto_fixes(report, args.verbose)
|
|
181
|
+
if exit_code != 0:
|
|
182
|
+
return exit_code
|
|
183
|
+
|
|
184
|
+
# Create PRs if requested
|
|
185
|
+
if args.create_prs and not args.dry_run:
|
|
186
|
+
exit_code = _create_prs(report, args.verbose)
|
|
187
|
+
if exit_code != 0:
|
|
188
|
+
return exit_code
|
|
189
|
+
|
|
190
|
+
# Dry-run message
|
|
191
|
+
if args.dry_run and (args.auto_fix or args.create_prs):
|
|
192
|
+
print("\n🔍 Dry-run mode: No changes applied")
|
|
193
|
+
print(" Remove --dry-run to apply changes")
|
|
194
|
+
|
|
195
|
+
# Determine exit code
|
|
196
|
+
if report.total_errors == 0:
|
|
197
|
+
return 0 # No errors
|
|
198
|
+
|
|
199
|
+
if report.stats.get("critical_priority", 0) > 0:
|
|
200
|
+
return 2 # Critical errors found
|
|
201
|
+
|
|
202
|
+
return 1 # Non-critical errors found
|
|
203
|
+
|
|
204
|
+
except KeyboardInterrupt:
|
|
205
|
+
print("\nPostmortem analysis interrupted by user")
|
|
206
|
+
return 130
|
|
207
|
+
|
|
208
|
+
except Exception as e:
|
|
209
|
+
logger.error(f"Postmortem analysis failed: {e}", exc_info=True)
|
|
210
|
+
print(f"\n❌ Postmortem analysis failed: {e!s}")
|
|
211
|
+
if args.verbose:
|
|
212
|
+
import traceback
|
|
213
|
+
|
|
214
|
+
traceback.print_exc()
|
|
215
|
+
return 2
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def _apply_auto_fixes(report, verbose: bool) -> int:
|
|
219
|
+
"""Apply auto-fix actions from report.
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
report: Postmortem report
|
|
223
|
+
verbose: Show detailed output
|
|
224
|
+
|
|
225
|
+
Returns:
|
|
226
|
+
Exit code (0 for success, non-zero for errors)
|
|
227
|
+
"""
|
|
228
|
+
from claude_mpm.services.analysis import ActionType
|
|
229
|
+
|
|
230
|
+
auto_fix_actions = report.get_actions_by_type(ActionType.AUTO_FIX)
|
|
231
|
+
|
|
232
|
+
if not auto_fix_actions:
|
|
233
|
+
print("\n✅ No auto-fixable errors found")
|
|
234
|
+
return 0
|
|
235
|
+
|
|
236
|
+
print(f"\n🔧 Applying {len(auto_fix_actions)} auto-fix action(s)...")
|
|
237
|
+
|
|
238
|
+
import subprocess
|
|
239
|
+
|
|
240
|
+
success_count = 0
|
|
241
|
+
fail_count = 0
|
|
242
|
+
|
|
243
|
+
for i, action in enumerate(auto_fix_actions, 1):
|
|
244
|
+
print(f"\n[{i}/{len(auto_fix_actions)}] {action.description}")
|
|
245
|
+
|
|
246
|
+
# Run each command
|
|
247
|
+
for cmd in action.commands:
|
|
248
|
+
if verbose:
|
|
249
|
+
print(f" Running: {cmd}")
|
|
250
|
+
|
|
251
|
+
try:
|
|
252
|
+
result = subprocess.run(
|
|
253
|
+
cmd,
|
|
254
|
+
check=False,
|
|
255
|
+
shell=True,
|
|
256
|
+
capture_output=True,
|
|
257
|
+
text=True,
|
|
258
|
+
timeout=30,
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
if result.returncode == 0:
|
|
262
|
+
action.status = "completed"
|
|
263
|
+
if verbose:
|
|
264
|
+
print(f" ✅ Success: {cmd}")
|
|
265
|
+
else:
|
|
266
|
+
action.status = "failed"
|
|
267
|
+
action.error_message = result.stderr or result.stdout
|
|
268
|
+
print(f" ❌ Failed: {cmd}")
|
|
269
|
+
if verbose and result.stderr:
|
|
270
|
+
print(f" {result.stderr}")
|
|
271
|
+
fail_count += 1
|
|
272
|
+
break # Stop on first failure for this action
|
|
273
|
+
|
|
274
|
+
except subprocess.TimeoutExpired:
|
|
275
|
+
action.status = "failed"
|
|
276
|
+
action.error_message = "Command timed out"
|
|
277
|
+
print(f" ❌ Timeout: {cmd}")
|
|
278
|
+
fail_count += 1
|
|
279
|
+
break
|
|
280
|
+
|
|
281
|
+
except Exception as e:
|
|
282
|
+
action.status = "failed"
|
|
283
|
+
action.error_message = str(e)
|
|
284
|
+
print(f" ❌ Error: {e}")
|
|
285
|
+
fail_count += 1
|
|
286
|
+
break
|
|
287
|
+
|
|
288
|
+
if action.status == "completed":
|
|
289
|
+
success_count += 1
|
|
290
|
+
|
|
291
|
+
# Summary
|
|
292
|
+
print("\n📊 Auto-fix Results:")
|
|
293
|
+
print(f" ✅ Successful: {success_count}")
|
|
294
|
+
print(f" ❌ Failed: {fail_count}")
|
|
295
|
+
|
|
296
|
+
return 0 if fail_count == 0 else 1
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def _create_prs(report, verbose: bool) -> int:
|
|
300
|
+
"""Create PRs for agent improvements.
|
|
301
|
+
|
|
302
|
+
Args:
|
|
303
|
+
report: Postmortem report
|
|
304
|
+
verbose: Show detailed output
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
Exit code (0 for success, non-zero for errors)
|
|
308
|
+
"""
|
|
309
|
+
from claude_mpm.services.analysis import ActionType
|
|
310
|
+
|
|
311
|
+
pr_actions = report.get_actions_by_type(ActionType.CREATE_PR)
|
|
312
|
+
|
|
313
|
+
if not pr_actions:
|
|
314
|
+
print("\n✅ No PR actions needed")
|
|
315
|
+
return 0
|
|
316
|
+
|
|
317
|
+
print(f"\n🤖 Creating {len(pr_actions)} PR(s) for agent improvements...")
|
|
318
|
+
|
|
319
|
+
# Check if we're in the agent cache git repo
|
|
320
|
+
agent_cache_path = Path.home() / ".claude-mpm" / "cache" / "remote-agents"
|
|
321
|
+
|
|
322
|
+
if not agent_cache_path.exists():
|
|
323
|
+
print(f"❌ Agent cache not found at: {agent_cache_path}")
|
|
324
|
+
print(" Run 'claude-mpm agents sync' first")
|
|
325
|
+
return 2
|
|
326
|
+
|
|
327
|
+
success_count = 0
|
|
328
|
+
fail_count = 0
|
|
329
|
+
|
|
330
|
+
for i, action in enumerate(pr_actions, 1):
|
|
331
|
+
print(f"\n[{i}/{len(pr_actions)}] {action.description}")
|
|
332
|
+
|
|
333
|
+
try:
|
|
334
|
+
# Check if file is in agent cache
|
|
335
|
+
analysis = action.error_analysis
|
|
336
|
+
if not analysis.affected_file:
|
|
337
|
+
print(" ⚠️ Cannot determine affected file, skipping")
|
|
338
|
+
action.status = "failed"
|
|
339
|
+
action.error_message = "No affected file identified"
|
|
340
|
+
fail_count += 1
|
|
341
|
+
continue
|
|
342
|
+
|
|
343
|
+
# For MVP, print PR template instead of actually creating
|
|
344
|
+
# Full implementation would use GitHub CLI or API
|
|
345
|
+
print(" 📝 PR Template Generated:")
|
|
346
|
+
print(f" Branch: {action.pr_branch}")
|
|
347
|
+
print(f" Title: {action.pr_title}")
|
|
348
|
+
|
|
349
|
+
if verbose:
|
|
350
|
+
print("\n--- PR Body ---")
|
|
351
|
+
print(action.pr_body)
|
|
352
|
+
print("--- End PR Body ---\n")
|
|
353
|
+
|
|
354
|
+
print("\n ℹ️ To create PR manually:")
|
|
355
|
+
print(f" cd {agent_cache_path}")
|
|
356
|
+
print(f" git checkout -b {action.pr_branch}")
|
|
357
|
+
print(f" # Make your changes to {analysis.affected_file}")
|
|
358
|
+
print(f" git add {analysis.affected_file}")
|
|
359
|
+
print(f' git commit -m "{action.pr_title}"')
|
|
360
|
+
print(f" git push origin {action.pr_branch}")
|
|
361
|
+
print(
|
|
362
|
+
f' gh pr create --title "{action.pr_title}" --body-file pr_body.md'
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
action.status = "completed"
|
|
366
|
+
success_count += 1
|
|
367
|
+
|
|
368
|
+
except Exception as e:
|
|
369
|
+
logger.error(f"Failed to create PR: {e}")
|
|
370
|
+
print(f" ❌ Error: {e}")
|
|
371
|
+
action.status = "failed"
|
|
372
|
+
action.error_message = str(e)
|
|
373
|
+
fail_count += 1
|
|
374
|
+
|
|
375
|
+
# Summary
|
|
376
|
+
print("\n📊 PR Creation Results:")
|
|
377
|
+
print(f" ✅ Templates generated: {success_count}")
|
|
378
|
+
print(f" ❌ Failed: {fail_count}")
|
|
379
|
+
|
|
380
|
+
return 0 if fail_count == 0 else 1
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
# Optional: Standalone execution for testing
|
|
384
|
+
if __name__ == "__main__":
|
|
385
|
+
import argparse
|
|
386
|
+
|
|
387
|
+
parser = argparse.ArgumentParser(description="Claude MPM Postmortem Analysis")
|
|
388
|
+
parser.add_argument("--dry-run", action="store_true")
|
|
389
|
+
parser.add_argument("--auto-fix", action="store_true")
|
|
390
|
+
parser.add_argument("--create-prs", action="store_true")
|
|
391
|
+
parser.add_argument("--session-id", type=str)
|
|
392
|
+
parser.add_argument(
|
|
393
|
+
"--format", choices=["terminal", "json", "markdown"], default="terminal"
|
|
394
|
+
)
|
|
395
|
+
parser.add_argument("--output", "-o", type=Path)
|
|
396
|
+
parser.add_argument("--verbose", "-v", action="store_true")
|
|
397
|
+
parser.add_argument("--no-color", action="store_true")
|
|
398
|
+
|
|
399
|
+
args = parser.parse_args()
|
|
400
|
+
|
|
401
|
+
sys.exit(postmortem_command(args))
|
claude_mpm/cli/commands/run.py
CHANGED
|
@@ -569,41 +569,6 @@ class RunCommand(BaseCommand):
|
|
|
569
569
|
return False
|
|
570
570
|
|
|
571
571
|
|
|
572
|
-
def _ensure_mcp_services_configured(logger):
|
|
573
|
-
"""
|
|
574
|
-
Ensure MCP services are configured in .mcp.json on startup.
|
|
575
|
-
|
|
576
|
-
This function automatically configures the core MCP services
|
|
577
|
-
(mcp-vector-search, mcp-browser, mcp-ticketer) if they're not
|
|
578
|
-
already configured in the project's .mcp.json file.
|
|
579
|
-
|
|
580
|
-
Args:
|
|
581
|
-
logger: Logger instance for output
|
|
582
|
-
"""
|
|
583
|
-
try:
|
|
584
|
-
from ...services.mcp_config_manager import MCPConfigManager
|
|
585
|
-
|
|
586
|
-
logger.debug("Checking MCP service configuration...")
|
|
587
|
-
manager = MCPConfigManager()
|
|
588
|
-
|
|
589
|
-
# Check and auto-configure missing MCP services
|
|
590
|
-
success, message = manager.ensure_mcp_services_configured()
|
|
591
|
-
|
|
592
|
-
if success:
|
|
593
|
-
if "already configured" not in message.lower():
|
|
594
|
-
logger.info(message)
|
|
595
|
-
print(f"✅ {message}")
|
|
596
|
-
else:
|
|
597
|
-
logger.debug(message)
|
|
598
|
-
else:
|
|
599
|
-
logger.warning(f"MCP auto-configuration issue: {message}")
|
|
600
|
-
# Don't fail the session, just warn
|
|
601
|
-
|
|
602
|
-
except Exception as e:
|
|
603
|
-
logger.debug(f"MCP auto-configuration skipped: {e}")
|
|
604
|
-
# Don't fail the session if auto-configuration fails
|
|
605
|
-
|
|
606
|
-
|
|
607
572
|
def _handle_reload_agents(logger):
|
|
608
573
|
"""
|
|
609
574
|
Handle the --reload-agents flag by deleting all local claude-mpm system agents.
|
|
@@ -738,10 +703,7 @@ def run_session_legacy(args):
|
|
|
738
703
|
if getattr(args, "reload_agents", False):
|
|
739
704
|
_handle_reload_agents(logger)
|
|
740
705
|
|
|
741
|
-
#
|
|
742
|
-
_ensure_mcp_services_configured(logger)
|
|
743
|
-
|
|
744
|
-
# Trigger vector search indexing after MCP is configured
|
|
706
|
+
# Trigger vector search indexing
|
|
745
707
|
try:
|
|
746
708
|
from ...cli.startup_logging import start_vector_search_indexing
|
|
747
709
|
|