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
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
"""Core MPMInitCommand class for project initialization.
|
|
2
|
+
|
|
3
|
+
This module contains the main command class responsible for orchestrating
|
|
4
|
+
the MPM project initialization process, including configuration generation,
|
|
5
|
+
agent delegation, and workflow management.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import contextlib
|
|
9
|
+
import subprocess
|
|
10
|
+
import tempfile
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import Any, Dict, List, Optional
|
|
13
|
+
|
|
14
|
+
from rich.console import Console
|
|
15
|
+
from rich.progress import Progress, SpinnerColumn, TextColumn
|
|
16
|
+
|
|
17
|
+
from claude_mpm.core.enums import OperationResult
|
|
18
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
19
|
+
from claude_mpm.services.project.archive_manager import ArchiveManager
|
|
20
|
+
from claude_mpm.services.project.documentation_manager import DocumentationManager
|
|
21
|
+
from claude_mpm.services.project.enhanced_analyzer import EnhancedProjectAnalyzer
|
|
22
|
+
from claude_mpm.services.project.project_organizer import ProjectOrganizer
|
|
23
|
+
from claude_mpm.utils.display_helper import DisplayHelper
|
|
24
|
+
|
|
25
|
+
# Import from sibling modules in the mpm_init package
|
|
26
|
+
from . import display, git_activity, modes, prompts
|
|
27
|
+
|
|
28
|
+
logger = get_logger(__name__)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class MPMInitCommand:
|
|
32
|
+
"""Initialize projects for optimal Claude Code and Claude MPM usage."""
|
|
33
|
+
|
|
34
|
+
def __init__(self, project_path: Optional[Path] = None):
|
|
35
|
+
"""Initialize the MPM-Init command."""
|
|
36
|
+
self.project_path = project_path or Path.cwd()
|
|
37
|
+
self.claude_mpm_script = self._find_claude_mpm_script()
|
|
38
|
+
self.console = Console()
|
|
39
|
+
|
|
40
|
+
# Initialize service components
|
|
41
|
+
self.doc_manager = DocumentationManager(self.project_path)
|
|
42
|
+
self.organizer = ProjectOrganizer(self.project_path)
|
|
43
|
+
self.archive_manager = ArchiveManager(self.project_path)
|
|
44
|
+
self.analyzer = EnhancedProjectAnalyzer(self.project_path)
|
|
45
|
+
self.display = DisplayHelper(self.console)
|
|
46
|
+
|
|
47
|
+
def initialize_project(
|
|
48
|
+
self,
|
|
49
|
+
project_type: Optional[str] = None,
|
|
50
|
+
framework: Optional[str] = None,
|
|
51
|
+
force: bool = False,
|
|
52
|
+
verbose: bool = False,
|
|
53
|
+
ast_analysis: bool = True,
|
|
54
|
+
update_mode: bool = False,
|
|
55
|
+
review_only: bool = False,
|
|
56
|
+
organize_files: bool = False,
|
|
57
|
+
preserve_custom: bool = True,
|
|
58
|
+
skip_archive: bool = False,
|
|
59
|
+
dry_run: bool = False,
|
|
60
|
+
quick_update: bool = False,
|
|
61
|
+
catchup: bool = False,
|
|
62
|
+
non_interactive: bool = False,
|
|
63
|
+
days: int = 30,
|
|
64
|
+
export: Optional[str] = None,
|
|
65
|
+
) -> Dict:
|
|
66
|
+
"""
|
|
67
|
+
Initialize project with Agentic Coder Optimizer standards.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
project_type: Type of project (web, api, cli, library, etc.)
|
|
71
|
+
framework: Specific framework if applicable
|
|
72
|
+
force: Force initialization even if project already configured
|
|
73
|
+
verbose: Show detailed output
|
|
74
|
+
ast_analysis: Enable AST analysis for enhanced documentation
|
|
75
|
+
update_mode: Update existing CLAUDE.md instead of recreating
|
|
76
|
+
review_only: Review project state without making changes
|
|
77
|
+
organize_files: Organize misplaced files into proper directories
|
|
78
|
+
preserve_custom: Preserve custom sections when updating
|
|
79
|
+
skip_archive: Skip archiving existing files
|
|
80
|
+
dry_run: Show what would be done without making changes
|
|
81
|
+
quick_update: Perform lightweight update based on recent git activity
|
|
82
|
+
catchup: Show recent commit history from all branches for PM context
|
|
83
|
+
non_interactive: Non-interactive mode - display report only without prompting
|
|
84
|
+
days: Number of days for git history analysis (7, 14, 30, 60, or 90)
|
|
85
|
+
export: Export report to file (path or "auto" for default location)
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
Dict containing initialization results
|
|
89
|
+
"""
|
|
90
|
+
try:
|
|
91
|
+
# Determine initialization mode
|
|
92
|
+
claude_md = self.project_path / "CLAUDE.md"
|
|
93
|
+
has_existing = claude_md.exists()
|
|
94
|
+
|
|
95
|
+
if review_only:
|
|
96
|
+
return self._run_review_mode()
|
|
97
|
+
|
|
98
|
+
if catchup:
|
|
99
|
+
data = self._catchup()
|
|
100
|
+
self._display_catchup(data)
|
|
101
|
+
return {
|
|
102
|
+
"status": OperationResult.SUCCESS,
|
|
103
|
+
"mode": "catchup",
|
|
104
|
+
"catchup_data": data,
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if quick_update:
|
|
108
|
+
return self._run_quick_update_mode(
|
|
109
|
+
days=days,
|
|
110
|
+
non_interactive=non_interactive,
|
|
111
|
+
export=export,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if has_existing and not force and not update_mode:
|
|
115
|
+
# Auto-select update mode if organize_files or dry_run is specified
|
|
116
|
+
if organize_files or dry_run:
|
|
117
|
+
update_mode = True
|
|
118
|
+
self.console.print(
|
|
119
|
+
"[cyan]Auto-selecting update mode for organization tasks.[/cyan]\n"
|
|
120
|
+
)
|
|
121
|
+
else:
|
|
122
|
+
# Offer update mode
|
|
123
|
+
self.console.print(
|
|
124
|
+
"[yellow]⚠️ Project already has CLAUDE.md file.[/yellow]\n"
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
# Show current documentation analysis
|
|
128
|
+
doc_analysis = self.doc_manager.analyze_existing_content()
|
|
129
|
+
self._display_documentation_status(doc_analysis)
|
|
130
|
+
|
|
131
|
+
# Ask user what to do
|
|
132
|
+
action = self._prompt_update_action()
|
|
133
|
+
|
|
134
|
+
if action == "update":
|
|
135
|
+
update_mode = True
|
|
136
|
+
elif action == "recreate":
|
|
137
|
+
force = True
|
|
138
|
+
elif action == "review":
|
|
139
|
+
return self._run_review_mode()
|
|
140
|
+
else:
|
|
141
|
+
return {
|
|
142
|
+
"status": OperationResult.CANCELLED,
|
|
143
|
+
"message": "Initialization cancelled",
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
# Handle dry-run mode
|
|
147
|
+
if dry_run:
|
|
148
|
+
return self._run_dry_run_mode(organize_files, has_existing)
|
|
149
|
+
|
|
150
|
+
# Run pre-initialization checks
|
|
151
|
+
if not review_only:
|
|
152
|
+
pre_check_result = self._run_pre_initialization_checks(
|
|
153
|
+
organize_files, skip_archive, has_existing
|
|
154
|
+
)
|
|
155
|
+
if pre_check_result.get("status") == OperationResult.ERROR:
|
|
156
|
+
return pre_check_result
|
|
157
|
+
|
|
158
|
+
# Update .gitignore to exclude claude-mpm configuration directories
|
|
159
|
+
if not review_only and not dry_run:
|
|
160
|
+
self._update_gitignore()
|
|
161
|
+
|
|
162
|
+
# Build the delegation prompt
|
|
163
|
+
if update_mode:
|
|
164
|
+
prompt = self._build_update_prompt(
|
|
165
|
+
project_type, framework, ast_analysis, preserve_custom
|
|
166
|
+
)
|
|
167
|
+
else:
|
|
168
|
+
prompt = self._build_initialization_prompt(
|
|
169
|
+
project_type, framework, ast_analysis
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
# Show appropriate plan based on mode
|
|
173
|
+
if update_mode:
|
|
174
|
+
self._show_update_plan(ast_analysis, preserve_custom)
|
|
175
|
+
else:
|
|
176
|
+
self._show_initialization_plan(ast_analysis)
|
|
177
|
+
|
|
178
|
+
# Execute via claude-mpm run command
|
|
179
|
+
with Progress(
|
|
180
|
+
SpinnerColumn(),
|
|
181
|
+
TextColumn("[progress.description]{task.description}"),
|
|
182
|
+
console=self.console,
|
|
183
|
+
) as progress:
|
|
184
|
+
task_desc = (
|
|
185
|
+
"[cyan]Updating documentation..."
|
|
186
|
+
if update_mode
|
|
187
|
+
else "[cyan]Delegating to Agentic Coder Optimizer..."
|
|
188
|
+
)
|
|
189
|
+
task = progress.add_task(task_desc, total=None)
|
|
190
|
+
|
|
191
|
+
# Run the initialization through subprocess
|
|
192
|
+
result = self._run_initialization(prompt, verbose, update_mode)
|
|
193
|
+
|
|
194
|
+
complete_desc = (
|
|
195
|
+
"[green]✓ Update complete"
|
|
196
|
+
if update_mode
|
|
197
|
+
else "[green]✓ Initialization complete"
|
|
198
|
+
)
|
|
199
|
+
progress.update(task, description=complete_desc)
|
|
200
|
+
|
|
201
|
+
# Post-processing for update mode
|
|
202
|
+
if update_mode and result.get("status") == OperationResult.SUCCESS:
|
|
203
|
+
self._handle_update_post_processing()
|
|
204
|
+
|
|
205
|
+
return result
|
|
206
|
+
|
|
207
|
+
except Exception as e:
|
|
208
|
+
logger.error(f"Failed to initialize project: {e}")
|
|
209
|
+
self.console.print(f"[red]❌ Error: {e}[/red]")
|
|
210
|
+
return {"status": OperationResult.ERROR, "message": str(e)}
|
|
211
|
+
|
|
212
|
+
def _find_claude_mpm_script(self) -> Path:
|
|
213
|
+
"""Find the claude-mpm script location."""
|
|
214
|
+
# Try to find claude-mpm in the project scripts directory first
|
|
215
|
+
project_root = Path(__file__).parent.parent.parent.parent.parent
|
|
216
|
+
script_path = project_root / "scripts" / "claude-mpm"
|
|
217
|
+
if script_path.exists():
|
|
218
|
+
return script_path
|
|
219
|
+
# Otherwise assume it's in PATH
|
|
220
|
+
return Path("claude-mpm")
|
|
221
|
+
|
|
222
|
+
def _build_claude_mpm_command(self, verbose: bool) -> List[str]:
|
|
223
|
+
"""Build the claude-mpm run command with appropriate arguments."""
|
|
224
|
+
cmd = [str(self.claude_mpm_script)]
|
|
225
|
+
|
|
226
|
+
# Add top-level flags that go before 'run' subcommand
|
|
227
|
+
cmd.append("--no-check-dependencies")
|
|
228
|
+
|
|
229
|
+
# Now add the run subcommand
|
|
230
|
+
cmd.append("run")
|
|
231
|
+
|
|
232
|
+
# Add non-interactive mode
|
|
233
|
+
# We'll pass the prompt via stdin instead of -i flag
|
|
234
|
+
cmd.append("--non-interactive")
|
|
235
|
+
|
|
236
|
+
# Add verbose flag if requested (run subcommand argument)
|
|
237
|
+
if verbose:
|
|
238
|
+
cmd.append("--verbose")
|
|
239
|
+
|
|
240
|
+
return cmd
|
|
241
|
+
|
|
242
|
+
def _run_initialization(
|
|
243
|
+
self,
|
|
244
|
+
prompt: str,
|
|
245
|
+
verbose: bool,
|
|
246
|
+
update_mode: bool = False,
|
|
247
|
+
) -> Dict:
|
|
248
|
+
"""Run the initialization through subprocess calling claude-mpm."""
|
|
249
|
+
try:
|
|
250
|
+
# Write prompt to temporary file
|
|
251
|
+
with tempfile.NamedTemporaryFile(
|
|
252
|
+
mode="w", suffix=".txt", delete=False
|
|
253
|
+
) as tmp_file:
|
|
254
|
+
tmp_file.write(prompt)
|
|
255
|
+
prompt_file = tmp_file.name
|
|
256
|
+
|
|
257
|
+
try:
|
|
258
|
+
# Build the command
|
|
259
|
+
cmd = self._build_claude_mpm_command(verbose)
|
|
260
|
+
# Add the input file flag
|
|
261
|
+
cmd.extend(["-i", prompt_file])
|
|
262
|
+
|
|
263
|
+
# Log the command if verbose
|
|
264
|
+
if verbose:
|
|
265
|
+
self.console.print(f"[dim]Running: {' '.join(cmd)}[/dim]")
|
|
266
|
+
self.console.print(f"[dim]Prompt file: {prompt_file}[/dim]")
|
|
267
|
+
|
|
268
|
+
# Execute the command
|
|
269
|
+
result = subprocess.run(
|
|
270
|
+
cmd,
|
|
271
|
+
capture_output=True,
|
|
272
|
+
text=True,
|
|
273
|
+
cwd=str(self.project_path),
|
|
274
|
+
check=False,
|
|
275
|
+
)
|
|
276
|
+
finally:
|
|
277
|
+
# Clean up temporary file
|
|
278
|
+
with contextlib.suppress(Exception):
|
|
279
|
+
Path(prompt_file).unlink()
|
|
280
|
+
|
|
281
|
+
# Display output if verbose
|
|
282
|
+
if verbose and result.stdout:
|
|
283
|
+
self.console.print(result.stdout)
|
|
284
|
+
if verbose and result.stderr:
|
|
285
|
+
self.console.print(f"[yellow]{result.stderr}[/yellow]")
|
|
286
|
+
|
|
287
|
+
# Check result - be more lenient with return codes
|
|
288
|
+
if result.returncode == 0 or (self.project_path / "CLAUDE.md").exists():
|
|
289
|
+
response = {
|
|
290
|
+
"status": OperationResult.SUCCESS,
|
|
291
|
+
"message": "Project initialized successfully",
|
|
292
|
+
"files_created": [],
|
|
293
|
+
"files_updated": [],
|
|
294
|
+
"next_steps": [],
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
# Check if CLAUDE.md was created
|
|
298
|
+
claude_md = self.project_path / "CLAUDE.md"
|
|
299
|
+
if claude_md.exists():
|
|
300
|
+
response["files_created"].append("CLAUDE.md")
|
|
301
|
+
|
|
302
|
+
# Check for other common files
|
|
303
|
+
for file_name in ["CODE.md", "DEVELOPER.md", "STRUCTURE.md", "OPS.md"]:
|
|
304
|
+
file_path = self.project_path / file_name
|
|
305
|
+
if file_path.exists():
|
|
306
|
+
response["files_created"].append(file_name)
|
|
307
|
+
|
|
308
|
+
# Add next steps
|
|
309
|
+
response["next_steps"] = [
|
|
310
|
+
"Review the generated CLAUDE.md documentation",
|
|
311
|
+
"Verify the project structure meets your needs",
|
|
312
|
+
"Run 'claude-mpm run' to start using the optimized setup",
|
|
313
|
+
]
|
|
314
|
+
|
|
315
|
+
# Display results
|
|
316
|
+
self._display_results(response, verbose)
|
|
317
|
+
|
|
318
|
+
return response
|
|
319
|
+
|
|
320
|
+
# Extract meaningful error message
|
|
321
|
+
error_msg = (
|
|
322
|
+
result.stderr
|
|
323
|
+
if result.stderr
|
|
324
|
+
else result.stdout
|
|
325
|
+
if result.stdout
|
|
326
|
+
else "Unknown error occurred"
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
logger.error(f"claude-mpm run failed: {error_msg}")
|
|
330
|
+
return {
|
|
331
|
+
"status": OperationResult.ERROR,
|
|
332
|
+
"message": f"Initialization failed: {error_msg}",
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
except FileNotFoundError:
|
|
336
|
+
logger.error("claude-mpm command not found")
|
|
337
|
+
self.console.print(
|
|
338
|
+
"[red]Error: claude-mpm command not found. Ensure Claude MPM is properly installed.[/red]"
|
|
339
|
+
)
|
|
340
|
+
return {"status": OperationResult.ERROR, "message": "claude-mpm not found"}
|
|
341
|
+
except Exception as e:
|
|
342
|
+
logger.error(f"Initialization failed: {e}")
|
|
343
|
+
return {"status": OperationResult.ERROR, "message": str(e)}
|
|
344
|
+
|
|
345
|
+
def _run_pre_initialization_checks(
|
|
346
|
+
self, organize_files: bool, skip_archive: bool, has_existing: bool
|
|
347
|
+
) -> Dict:
|
|
348
|
+
"""Run pre-initialization checks and preparations."""
|
|
349
|
+
checks_passed = []
|
|
350
|
+
warnings = []
|
|
351
|
+
|
|
352
|
+
# Run comprehensive project readiness check
|
|
353
|
+
_ready, actions = self.organizer.ensure_project_ready(
|
|
354
|
+
auto_organize=organize_files,
|
|
355
|
+
safe_mode=True, # Only perform safe operations by default
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
if actions:
|
|
359
|
+
checks_passed.extend(actions)
|
|
360
|
+
|
|
361
|
+
# Get structure validation report
|
|
362
|
+
validation = self.organizer.validate_structure()
|
|
363
|
+
if validation["warnings"]:
|
|
364
|
+
warnings.extend(validation["warnings"])
|
|
365
|
+
if validation["errors"]:
|
|
366
|
+
warnings.extend(validation["errors"])
|
|
367
|
+
|
|
368
|
+
# Show structure grade
|
|
369
|
+
if validation.get("grade"):
|
|
370
|
+
checks_passed.append(f"Structure validation: {validation['grade']}")
|
|
371
|
+
|
|
372
|
+
# Archive existing documentation if needed
|
|
373
|
+
if has_existing and not skip_archive:
|
|
374
|
+
if self.archive_manager.auto_archive_before_update(
|
|
375
|
+
self.project_path / "CLAUDE.md", update_reason="Before mpm-init update"
|
|
376
|
+
):
|
|
377
|
+
checks_passed.append("Archived existing CLAUDE.md")
|
|
378
|
+
|
|
379
|
+
# Check for issues in validation report
|
|
380
|
+
if validation.get("issues"):
|
|
381
|
+
for issue in validation["issues"]:
|
|
382
|
+
warnings.append(issue["description"])
|
|
383
|
+
|
|
384
|
+
if warnings:
|
|
385
|
+
self.console.print("\n[yellow]⚠️ Project issues detected:[/yellow]")
|
|
386
|
+
for warning in warnings[:5]:
|
|
387
|
+
self.console.print(f" • {warning}")
|
|
388
|
+
self.console.print()
|
|
389
|
+
|
|
390
|
+
if checks_passed:
|
|
391
|
+
self.console.print("[green]✅ Pre-initialization checks:[/green]")
|
|
392
|
+
for check in checks_passed:
|
|
393
|
+
self.console.print(f" • {check}")
|
|
394
|
+
self.console.print()
|
|
395
|
+
|
|
396
|
+
return {
|
|
397
|
+
"status": OperationResult.SUCCESS,
|
|
398
|
+
"checks_passed": checks_passed,
|
|
399
|
+
"warnings": warnings,
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
def _update_gitignore(self) -> None:
|
|
403
|
+
"""Update .gitignore to exclude claude-mpm configuration directories.
|
|
404
|
+
|
|
405
|
+
Ensures that claude-mpm configuration directories are added to .gitignore
|
|
406
|
+
to prevent them from being committed to version control.
|
|
407
|
+
|
|
408
|
+
This is a non-destructive operation that:
|
|
409
|
+
- Creates .gitignore if it doesn't exist
|
|
410
|
+
- Appends missing entries only (never duplicates)
|
|
411
|
+
- Preserves all existing content
|
|
412
|
+
|
|
413
|
+
Standard entries added:
|
|
414
|
+
- .claude-mpm/: Main configuration directory
|
|
415
|
+
- .claude/agents/: Agent runtime files
|
|
416
|
+
"""
|
|
417
|
+
from claude_mpm.utils.gitignore import ensure_claude_mpm_gitignore
|
|
418
|
+
|
|
419
|
+
try:
|
|
420
|
+
result = ensure_claude_mpm_gitignore(str(self.project_path))
|
|
421
|
+
|
|
422
|
+
if result.get("status") == "success":
|
|
423
|
+
if result.get("added"):
|
|
424
|
+
self.console.print(
|
|
425
|
+
f"[green]✓[/green] Updated .gitignore: {', '.join(result['added'])}"
|
|
426
|
+
)
|
|
427
|
+
logger.info(f"Added to .gitignore: {result['added']}")
|
|
428
|
+
elif result.get("existing"):
|
|
429
|
+
logger.debug(f".gitignore already contains: {result['existing']}")
|
|
430
|
+
else:
|
|
431
|
+
# Non-critical error - log but don't fail initialization
|
|
432
|
+
logger.warning(
|
|
433
|
+
f"Could not update .gitignore: {result.get('error', 'Unknown error')}"
|
|
434
|
+
)
|
|
435
|
+
self.console.print(
|
|
436
|
+
f"[yellow]⚠️ Could not update .gitignore: {result.get('error')}[/yellow]"
|
|
437
|
+
)
|
|
438
|
+
|
|
439
|
+
except Exception as e:
|
|
440
|
+
# Non-critical error - log but don't fail initialization
|
|
441
|
+
logger.warning(f"Error updating .gitignore: {e}")
|
|
442
|
+
self.console.print(f"[yellow]⚠️ Could not update .gitignore: {e}[/yellow]")
|
|
443
|
+
|
|
444
|
+
def _build_initialization_prompt(
|
|
445
|
+
self,
|
|
446
|
+
project_type: Optional[str] = None,
|
|
447
|
+
framework: Optional[str] = None,
|
|
448
|
+
ast_analysis: bool = True,
|
|
449
|
+
) -> str:
|
|
450
|
+
"""Build the initialization prompt for the agent."""
|
|
451
|
+
return prompts.build_initialization_prompt(
|
|
452
|
+
self.project_path, project_type, framework, ast_analysis
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
def _build_update_prompt(
|
|
456
|
+
self,
|
|
457
|
+
project_type: Optional[str],
|
|
458
|
+
framework: Optional[str],
|
|
459
|
+
ast_analysis: bool,
|
|
460
|
+
preserve_custom: bool,
|
|
461
|
+
) -> str:
|
|
462
|
+
"""Build prompt for update mode."""
|
|
463
|
+
# Get existing content analysis
|
|
464
|
+
doc_analysis = self.doc_manager.analyze_existing_content()
|
|
465
|
+
|
|
466
|
+
return prompts.build_update_prompt(
|
|
467
|
+
self.project_path,
|
|
468
|
+
doc_analysis,
|
|
469
|
+
project_type,
|
|
470
|
+
framework,
|
|
471
|
+
ast_analysis,
|
|
472
|
+
preserve_custom,
|
|
473
|
+
)
|
|
474
|
+
|
|
475
|
+
def _display_documentation_status(self, analysis: Dict) -> None:
|
|
476
|
+
"""Display current documentation status."""
|
|
477
|
+
display.display_documentation_status(self.display, analysis)
|
|
478
|
+
|
|
479
|
+
def _prompt_update_action(self) -> str:
|
|
480
|
+
"""Prompt user for update action."""
|
|
481
|
+
return modes.prompt_update_action(self.console)
|
|
482
|
+
|
|
483
|
+
def _run_review_mode(self) -> Dict:
|
|
484
|
+
"""Run review mode to analyze project without changes."""
|
|
485
|
+
return modes.run_review_mode(
|
|
486
|
+
self.console,
|
|
487
|
+
self.display,
|
|
488
|
+
self.organizer,
|
|
489
|
+
self.doc_manager,
|
|
490
|
+
self.analyzer,
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
def _run_quick_update_mode(
|
|
494
|
+
self,
|
|
495
|
+
days: int = 30,
|
|
496
|
+
non_interactive: bool = False,
|
|
497
|
+
export: Optional[str] = None,
|
|
498
|
+
) -> Dict:
|
|
499
|
+
"""Run quick update mode - lightweight update based on recent git activity."""
|
|
500
|
+
return modes.run_quick_update_mode(
|
|
501
|
+
self.console,
|
|
502
|
+
self.display,
|
|
503
|
+
self.project_path,
|
|
504
|
+
self.analyzer,
|
|
505
|
+
self.doc_manager,
|
|
506
|
+
self.archive_manager,
|
|
507
|
+
days=days,
|
|
508
|
+
non_interactive=non_interactive,
|
|
509
|
+
export=export,
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
def _catchup(self) -> Dict[str, Any]:
|
|
513
|
+
"""Get recent commit history for PM context."""
|
|
514
|
+
return git_activity.catchup(self.project_path)
|
|
515
|
+
|
|
516
|
+
def _display_catchup(self, data: Dict[str, Any]) -> None:
|
|
517
|
+
"""Display catchup information to console.
|
|
518
|
+
|
|
519
|
+
Args:
|
|
520
|
+
data: Commit history data from _catchup()
|
|
521
|
+
"""
|
|
522
|
+
display.display_catchup(self.display, self.console, data)
|
|
523
|
+
|
|
524
|
+
def _run_dry_run_mode(self, organize_files: bool, has_existing: bool) -> Dict:
|
|
525
|
+
"""Run dry-run mode to show what would be done without making changes."""
|
|
526
|
+
return modes.run_dry_run_mode(
|
|
527
|
+
self.console,
|
|
528
|
+
self.organizer,
|
|
529
|
+
self.doc_manager,
|
|
530
|
+
organize_files,
|
|
531
|
+
has_existing,
|
|
532
|
+
)
|
|
533
|
+
|
|
534
|
+
def _show_update_plan(self, ast_analysis: bool, preserve_custom: bool) -> None:
|
|
535
|
+
"""Show update mode plan."""
|
|
536
|
+
display.show_update_plan(self.console, ast_analysis, preserve_custom)
|
|
537
|
+
|
|
538
|
+
def _show_initialization_plan(self, ast_analysis: bool) -> None:
|
|
539
|
+
"""Show standard initialization plan."""
|
|
540
|
+
display.show_initialization_plan(self.console, ast_analysis)
|
|
541
|
+
|
|
542
|
+
def _handle_update_post_processing(self) -> None:
|
|
543
|
+
"""Handle post-processing after successful update."""
|
|
544
|
+
modes.handle_update_post_processing(
|
|
545
|
+
self.console,
|
|
546
|
+
self.project_path,
|
|
547
|
+
self.doc_manager,
|
|
548
|
+
self.archive_manager,
|
|
549
|
+
)
|
|
550
|
+
|
|
551
|
+
def _display_results(self, result: Dict, verbose: bool):
|
|
552
|
+
"""Display initialization results."""
|
|
553
|
+
display.display_results(self.display, self.console, result, verbose)
|
|
554
|
+
|
|
555
|
+
def handle_context(
|
|
556
|
+
self,
|
|
557
|
+
session_id: Optional[str] = None,
|
|
558
|
+
list_sessions: bool = False,
|
|
559
|
+
days: int = 7,
|
|
560
|
+
) -> Dict[str, Any]:
|
|
561
|
+
"""Provide intelligent context for resuming work based on git history."""
|
|
562
|
+
return git_activity.handle_context(
|
|
563
|
+
self.project_path, session_id, list_sessions, days
|
|
564
|
+
)
|
|
565
|
+
|
|
566
|
+
def _build_research_context_prompt(
|
|
567
|
+
self, git_analysis: Dict[str, Any], days: int
|
|
568
|
+
) -> str:
|
|
569
|
+
"""Build structured Research agent delegation prompt from git analysis."""
|
|
570
|
+
return prompts.build_research_context_prompt(git_analysis, days)
|
|
571
|
+
|
|
572
|
+
|
|
573
|
+
__all__ = ["MPMInitCommand"]
|