claude-mpm 4.20.3__py3-none-any.whl → 4.25.10__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 +23 -6
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +1783 -34
- claude_mpm/agents/WORKFLOW.md +75 -2
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/frontmatter_validator.py +1 -1
- claude_mpm/agents/templates/api_qa.json +5 -2
- claude_mpm/agents/templates/circuit_breakers.md +108 -2
- claude_mpm/agents/templates/documentation.json +33 -6
- claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
- claude_mpm/agents/templates/php-engineer.json +10 -4
- claude_mpm/agents/templates/pm_red_flags.md +89 -19
- claude_mpm/agents/templates/project_organizer.json +7 -3
- claude_mpm/agents/templates/qa.json +2 -1
- claude_mpm/agents/templates/react_engineer.json +1 -0
- claude_mpm/agents/templates/research.json +82 -12
- claude_mpm/agents/templates/security.json +4 -4
- claude_mpm/agents/templates/tauri_engineer.json +274 -0
- claude_mpm/agents/templates/ticketing.json +10 -6
- claude_mpm/agents/templates/version_control.json +4 -2
- claude_mpm/agents/templates/web_qa.json +2 -1
- claude_mpm/cli/README.md +253 -0
- claude_mpm/cli/__init__.py +11 -1
- claude_mpm/cli/commands/aggregate.py +1 -1
- claude_mpm/cli/commands/analyze.py +3 -3
- claude_mpm/cli/commands/cleanup.py +1 -1
- claude_mpm/cli/commands/configure_agent_display.py +4 -4
- claude_mpm/cli/commands/debug.py +12 -12
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/mcp_install_commands.py +1 -1
- claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
- claude_mpm/cli/commands/mpm_init/README.md +365 -0
- 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/run.py +124 -128
- claude_mpm/cli/commands/skills.py +522 -34
- claude_mpm/cli/executor.py +56 -0
- claude_mpm/cli/interactive/agent_wizard.py +5 -5
- claude_mpm/cli/parsers/base_parser.py +28 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
- claude_mpm/cli/parsers/skills_parser.py +138 -0
- claude_mpm/cli/startup.py +111 -8
- 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/cli_module/refactoring_guide.md +253 -0
- claude_mpm/commands/mpm-help.md +3 -0
- claude_mpm/commands/mpm-init.md +19 -3
- claude_mpm/commands/mpm-resume.md +372 -0
- claude_mpm/commands/mpm-tickets.md +56 -7
- claude_mpm/commands/mpm.md +1 -0
- claude_mpm/config/agent_capabilities.yaml +658 -0
- claude_mpm/config/async_logging_config.yaml +145 -0
- claude_mpm/constants.py +12 -0
- claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +14 -1
- claude_mpm/core/config.py +8 -0
- claude_mpm/core/constants.py +1 -1
- 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 +48 -3
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +39 -0
- claude_mpm/d2/.gitignore +22 -0
- claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
- claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
- claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
- claude_mpm/d2/QUICKSTART.md +186 -0
- claude_mpm/d2/README.md +232 -0
- claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
- claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
- claude_mpm/d2/TESTING.md +288 -0
- claude_mpm/d2/index.html +118 -0
- claude_mpm/d2/package.json +19 -0
- claude_mpm/d2/src/App.svelte +110 -0
- claude_mpm/d2/src/components/Header.svelte +153 -0
- claude_mpm/d2/src/components/MainContent.svelte +74 -0
- claude_mpm/d2/src/components/Sidebar.svelte +85 -0
- claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
- claude_mpm/d2/src/lib/socketio.js +144 -0
- claude_mpm/d2/src/main.js +7 -0
- claude_mpm/d2/src/stores/events.js +114 -0
- claude_mpm/d2/src/stores/socket.js +108 -0
- claude_mpm/d2/src/stores/theme.js +65 -0
- claude_mpm/d2/svelte.config.js +12 -0
- claude_mpm/d2/vite.config.js +15 -0
- claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
- claude_mpm/dashboard/BUILD_NUMBER +1 -0
- claude_mpm/dashboard/README.md +121 -0
- claude_mpm/dashboard/VERSION +1 -0
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
- claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
- claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
- claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
- claude_mpm/dashboard/react/entries/events.tsx +165 -0
- claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
- claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
- claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
- claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
- claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
- claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
- claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
- claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
- claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
- claude_mpm/dashboard/static/built/connection-manager.js +76 -76
- claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
- claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/built/react/events.js.map +1 -0
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
- claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
- claude_mpm/dashboard/static/built/shared/logger.js +16 -16
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
- claude_mpm/dashboard/static/built/socket-client.js.map +1 -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/index.html +22 -22
- claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
- 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/shared/dom-helpers.js +9 -9
- claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
- claude_mpm/dashboard/static/js/shared/logger.js +16 -16
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
- claude_mpm/dashboard/static/js/socket-client.js +138 -121
- claude_mpm/dashboard/static/navigation-test-results.md +118 -0
- claude_mpm/dashboard/static/production/main.html +21 -21
- claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
- claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
- claude_mpm/dashboard/templates/code_simple.html +23 -23
- claude_mpm/dashboard/templates/index.html +18 -18
- claude_mpm/hooks/README.md +143 -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/templates/README.md +180 -0
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/hooks/templates/settings.json.example +147 -0
- claude_mpm/schemas/agent_schema.json +596 -0
- claude_mpm/schemas/frontmatter_schema.json +165 -0
- claude_mpm/scripts/claude-hook-handler.sh +3 -3
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
- claude_mpm/services/agents/local_template_manager.py +3 -1
- 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/core/base.py +26 -11
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/models/agent_config.py +3 -0
- claude_mpm/services/core/models/process.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
- 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/monitor_check.py +0 -1
- claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
- claude_mpm/services/diagnostics/models.py +21 -0
- claude_mpm/services/event_bus/README.md +244 -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/README.md +303 -0
- claude_mpm/services/events/consumers/logging.py +1 -2
- claude_mpm/services/framework_claude_md_generator/README.md +119 -0
- claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
- claude_mpm/services/local_ops/__init__.py +2 -0
- claude_mpm/services/local_ops/process_manager.py +1 -1
- claude_mpm/services/local_ops/resource_monitor.py +2 -2
- claude_mpm/services/mcp_gateway/README.md +185 -0
- 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 +19 -10
- 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/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 +1 -1
- 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/project/documentation_manager.py +2 -1
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +1 -0
- claude_mpm/services/self_upgrade_service.py +165 -7
- 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/connection.py.backup +217 -0
- claude_mpm/services/socketio/handlers/git.py +2 -2
- claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
- claude_mpm/services/static/.gitkeep +2 -0
- 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/version_control/VERSION +1 -0
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- 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/.gitkeep +2 -0
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +4 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +108 -114
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +46 -41
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +36 -73
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +100 -125
- claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +28 -72
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +11 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +272 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +13 -1
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +11 -0
- claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +109 -277
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -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/mcp-builder/scripts/example_evaluation.xml +22 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
- claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +135 -155
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/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/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +21 -25
- claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +86 -250
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +145 -57
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -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/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/skills_registry.py +44 -48
- claude_mpm/skills/skills_service.py +117 -108
- claude_mpm/templates/questions/EXAMPLES.md +501 -0
- claude_mpm/templates/questions/__init__.py +43 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +314 -0
- claude_mpm/templates/questions/project_init.py +388 -0
- claude_mpm/templates/questions/ticket_mgmt.py +397 -0
- claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
- claude_mpm/tools/__main__.py +8 -8
- claude_mpm/tools/code_tree_analyzer/README.md +64 -0
- 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 +3 -3
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- 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-4.25.10.dist-info}/METADATA +218 -31
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +409 -246
- 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/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/cli/commands/mpm_init.py +0 -2093
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- 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/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/test-archive/test_debug.html +0 -25
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
- claude_mpm/tools/code_tree_analyzer.py +0 -1825
- /claude_mpm/skills/bundled/collaboration/requesting-code-review/{code-reviewer.md → references/code-reviewer-template.md} +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
|
@@ -295,7 +295,7 @@ class MCPInstallCommands:
|
|
|
295
295
|
|
|
296
296
|
# Create backup
|
|
297
297
|
backup_path = config_path.with_suffix(
|
|
298
|
-
f
|
|
298
|
+
f".backup.{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}.json"
|
|
299
299
|
)
|
|
300
300
|
try:
|
|
301
301
|
config_path.rename(backup_path)
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"""MCP install command implementations.
|
|
2
|
+
|
|
3
|
+
This module provides MCP installation and configuration commands.
|
|
4
|
+
Extracted from mcp.py to reduce complexity and improve maintainability.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import subprocess
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class MCPInstallCommands:
|
|
13
|
+
"""Handles MCP install commands."""
|
|
14
|
+
|
|
15
|
+
def __init__(self, logger):
|
|
16
|
+
"""Initialize the MCP install commands handler."""
|
|
17
|
+
self.logger = logger
|
|
18
|
+
|
|
19
|
+
def install_gateway(self, args):
|
|
20
|
+
"""Install and configure MCP gateway.
|
|
21
|
+
|
|
22
|
+
WHY: This command installs the MCP package dependencies and configures
|
|
23
|
+
Claude Code to use the MCP gateway server directly via the CLI command.
|
|
24
|
+
|
|
25
|
+
DESIGN DECISION: We handle both package installation and configuration
|
|
26
|
+
in one command for user convenience, using the new direct CLI approach.
|
|
27
|
+
"""
|
|
28
|
+
self.logger.info("MCP gateway installation command called")
|
|
29
|
+
print("📦 Installing and Configuring MCP Gateway")
|
|
30
|
+
print("=" * 50)
|
|
31
|
+
|
|
32
|
+
# Step 1: Install MCP package if needed
|
|
33
|
+
print("\n1️⃣ Checking MCP package installation...")
|
|
34
|
+
try:
|
|
35
|
+
import mcp
|
|
36
|
+
print("✅ MCP package already installed")
|
|
37
|
+
except ImportError:
|
|
38
|
+
print("📦 Installing MCP package...")
|
|
39
|
+
try:
|
|
40
|
+
subprocess.check_call([sys.executable, "-m", "pip", "install", "mcp"])
|
|
41
|
+
print("✅ MCP package installed successfully")
|
|
42
|
+
except subprocess.CalledProcessError as e:
|
|
43
|
+
print(f"❌ Error installing MCP package: {e}")
|
|
44
|
+
print("\nPlease install manually with: pip install mcp")
|
|
45
|
+
return 1
|
|
46
|
+
|
|
47
|
+
# Step 2: Configure Claude Code with the new CLI command
|
|
48
|
+
print("\n2️⃣ Configuring Claude Code...")
|
|
49
|
+
try:
|
|
50
|
+
success = self._configure_claude_desktop(args.force)
|
|
51
|
+
if success:
|
|
52
|
+
print("✅ Configuration completed successfully")
|
|
53
|
+
print("\n🎉 MCP Gateway is ready to use!")
|
|
54
|
+
print("\nNext steps:")
|
|
55
|
+
print("1. Restart Claude Code")
|
|
56
|
+
print("2. Test the server: claude-mpm mcp server --test")
|
|
57
|
+
print("3. Check status: claude-mpm mcp status")
|
|
58
|
+
return 0
|
|
59
|
+
else:
|
|
60
|
+
print("❌ Configuration failed")
|
|
61
|
+
return 1
|
|
62
|
+
|
|
63
|
+
except Exception as e:
|
|
64
|
+
print(f"❌ Error during configuration: {e}")
|
|
65
|
+
return 1
|
|
66
|
+
|
|
67
|
+
def _configure_claude_desktop(self, force=False):
|
|
68
|
+
"""Configure Claude Code to use the MCP gateway via CLI command.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
force: Whether to overwrite existing configuration
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
bool: True if configuration was successful
|
|
75
|
+
"""
|
|
76
|
+
import json
|
|
77
|
+
import platform
|
|
78
|
+
from pathlib import Path
|
|
79
|
+
from datetime import datetime
|
|
80
|
+
|
|
81
|
+
# Determine Claude Code config path
|
|
82
|
+
config_path = self._get_claude_config_path()
|
|
83
|
+
if not config_path:
|
|
84
|
+
print("❌ Could not determine Claude Code configuration path")
|
|
85
|
+
return False
|
|
86
|
+
|
|
87
|
+
print(f" Configuration path: {config_path}")
|
|
88
|
+
|
|
89
|
+
# Load existing configuration or create new one
|
|
90
|
+
config = self._load_or_create_config(config_path, force)
|
|
91
|
+
if config is None:
|
|
92
|
+
return False
|
|
93
|
+
|
|
94
|
+
# Configure the claude-mpm-gateway server using the CLI command
|
|
95
|
+
claude_mpm_path = self._find_claude_mpm_executable()
|
|
96
|
+
if not claude_mpm_path:
|
|
97
|
+
print("❌ Could not find claude-mpm executable")
|
|
98
|
+
return False
|
|
99
|
+
|
|
100
|
+
# Determine if we need to use -m claude_mpm or direct command
|
|
101
|
+
if claude_mpm_path.endswith(('python', 'python3', 'python.exe', 'python3.exe')):
|
|
102
|
+
# Using Python interpreter directly
|
|
103
|
+
mcp_config = {
|
|
104
|
+
"command": claude_mpm_path,
|
|
105
|
+
"args": ["-m", "claude_mpm", "mcp", "server"],
|
|
106
|
+
"env": {
|
|
107
|
+
"PYTHONPATH": str(Path(__file__).parent.parent.parent.parent),
|
|
108
|
+
"MCP_MODE": "production"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else:
|
|
112
|
+
# Using installed claude-mpm command
|
|
113
|
+
mcp_config = {
|
|
114
|
+
"command": claude_mpm_path,
|
|
115
|
+
"args": ["mcp", "server"],
|
|
116
|
+
"env": {
|
|
117
|
+
"PYTHONPATH": str(Path(__file__).parent.parent.parent.parent),
|
|
118
|
+
"MCP_MODE": "production"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
# Update configuration
|
|
123
|
+
if "mcpServers" not in config:
|
|
124
|
+
config["mcpServers"] = {}
|
|
125
|
+
|
|
126
|
+
config["mcpServers"]["claude-mpm-gateway"] = mcp_config
|
|
127
|
+
|
|
128
|
+
print("\n✅ Configured claude-mpm-gateway server:")
|
|
129
|
+
print(f" Command: {mcp_config['command']}")
|
|
130
|
+
print(f" Args: {mcp_config['args']}")
|
|
131
|
+
print(f" Environment variables: {list(mcp_config['env'].keys())}")
|
|
132
|
+
|
|
133
|
+
# Save configuration
|
|
134
|
+
return self._save_config(config, config_path)
|
|
135
|
+
|
|
136
|
+
def _get_claude_config_path(self):
|
|
137
|
+
"""Get the Claude Code configuration file path.
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Path or None: Path to Claude Code config file
|
|
141
|
+
"""
|
|
142
|
+
from pathlib import Path
|
|
143
|
+
|
|
144
|
+
# Claude Code uses ~/.claude/settings.local.json regardless of platform
|
|
145
|
+
return Path.home() / ".claude" / "settings.local.json"
|
|
146
|
+
|
|
147
|
+
def _find_claude_mpm_executable(self):
|
|
148
|
+
"""Find the claude-mpm executable path.
|
|
149
|
+
|
|
150
|
+
WHY: We need to find the installed claude-mpm command to use as the
|
|
151
|
+
MCP server command. This ensures we're using the properly installed
|
|
152
|
+
version with all dependencies, not a raw Python script.
|
|
153
|
+
|
|
154
|
+
DESIGN DECISION: We prioritize in this order:
|
|
155
|
+
1. System-installed claude-mpm (most reliable)
|
|
156
|
+
2. Virtual environment claude-mpm (development)
|
|
157
|
+
3. Python module invocation (fallback)
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
str or None: Path to claude-mpm executable
|
|
161
|
+
"""
|
|
162
|
+
import shutil
|
|
163
|
+
import sys
|
|
164
|
+
import os
|
|
165
|
+
|
|
166
|
+
# 1. Try to find claude-mpm in PATH (system-wide or venv)
|
|
167
|
+
claude_mpm_path = shutil.which("claude-mpm")
|
|
168
|
+
if claude_mpm_path:
|
|
169
|
+
print(f" Found claude-mpm: {claude_mpm_path}")
|
|
170
|
+
return claude_mpm_path
|
|
171
|
+
|
|
172
|
+
# 2. Check if we're in a virtual environment
|
|
173
|
+
if hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix):
|
|
174
|
+
# We're in a virtual environment
|
|
175
|
+
venv_bin = Path(sys.prefix) / ("Scripts" if sys.platform == "win32" else "bin")
|
|
176
|
+
venv_claude_mpm = venv_bin / "claude-mpm"
|
|
177
|
+
if venv_claude_mpm.exists():
|
|
178
|
+
print(f" Found claude-mpm in venv: {venv_claude_mpm}")
|
|
179
|
+
return str(venv_claude_mpm)
|
|
180
|
+
|
|
181
|
+
# 3. Check if claude_mpm module is installed and use Python to run it
|
|
182
|
+
try:
|
|
183
|
+
import claude_mpm
|
|
184
|
+
# Return the Python executable - we'll handle the -m args separately
|
|
185
|
+
print(f" Using Python module: {sys.executable} -m claude_mpm")
|
|
186
|
+
return sys.executable
|
|
187
|
+
except ImportError:
|
|
188
|
+
pass
|
|
189
|
+
|
|
190
|
+
# 4. Last resort: check project's local venv (development mode)
|
|
191
|
+
project_root = Path(__file__).parent.parent.parent.parent.parent
|
|
192
|
+
local_venv_bin = project_root / "venv" / ("Scripts" if sys.platform == "win32" else "bin")
|
|
193
|
+
local_claude_mpm = local_venv_bin / "claude-mpm"
|
|
194
|
+
if local_claude_mpm.exists():
|
|
195
|
+
print(f" Found claude-mpm in project venv: {local_claude_mpm}")
|
|
196
|
+
return str(local_claude_mpm)
|
|
197
|
+
|
|
198
|
+
return None
|
|
199
|
+
|
|
200
|
+
def _load_or_create_config(self, config_path, force=False):
|
|
201
|
+
"""Load existing configuration or create a new one.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
config_path: Path to configuration file
|
|
205
|
+
force: Whether to overwrite existing configuration
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
dict or None: Configuration dictionary
|
|
209
|
+
"""
|
|
210
|
+
import json
|
|
211
|
+
from datetime import datetime
|
|
212
|
+
|
|
213
|
+
config = {}
|
|
214
|
+
|
|
215
|
+
if config_path.exists():
|
|
216
|
+
if not force:
|
|
217
|
+
# Check if claude-mpm-gateway already exists
|
|
218
|
+
try:
|
|
219
|
+
with open(config_path, 'r') as f:
|
|
220
|
+
existing_config = json.load(f)
|
|
221
|
+
|
|
222
|
+
if (existing_config.get("mcpServers", {}).get("claude-mpm-gateway") and
|
|
223
|
+
not force):
|
|
224
|
+
print("⚠️ claude-mpm-gateway is already configured")
|
|
225
|
+
response = input("Do you want to overwrite it? (y/N): ").strip().lower()
|
|
226
|
+
if response not in ['y', 'yes']:
|
|
227
|
+
print("❌ Configuration cancelled")
|
|
228
|
+
return None
|
|
229
|
+
|
|
230
|
+
config = existing_config
|
|
231
|
+
|
|
232
|
+
except (json.JSONDecodeError, IOError) as e:
|
|
233
|
+
print(f"⚠️ Error reading existing config: {e}")
|
|
234
|
+
print("Creating backup and starting fresh...")
|
|
235
|
+
|
|
236
|
+
# Create backup
|
|
237
|
+
backup_path = config_path.with_suffix(f'.backup.{datetime.now().strftime("%Y%m%d_%H%M%S")}.json')
|
|
238
|
+
try:
|
|
239
|
+
config_path.rename(backup_path)
|
|
240
|
+
print(f" Backup created: {backup_path}")
|
|
241
|
+
except Exception as backup_error:
|
|
242
|
+
print(f" Warning: Could not create backup: {backup_error}")
|
|
243
|
+
else:
|
|
244
|
+
# Force mode - create backup but proceed
|
|
245
|
+
try:
|
|
246
|
+
with open(config_path, 'r') as f:
|
|
247
|
+
existing_config = json.load(f)
|
|
248
|
+
config = existing_config
|
|
249
|
+
print(" Force mode: Overwriting existing configuration")
|
|
250
|
+
except:
|
|
251
|
+
pass # File doesn't exist or is invalid, start fresh
|
|
252
|
+
|
|
253
|
+
# Ensure mcpServers section exists
|
|
254
|
+
if "mcpServers" not in config:
|
|
255
|
+
config["mcpServers"] = {}
|
|
256
|
+
|
|
257
|
+
return config
|
|
258
|
+
|
|
259
|
+
def _save_config(self, config, config_path):
|
|
260
|
+
"""Save configuration to file.
|
|
261
|
+
|
|
262
|
+
Args:
|
|
263
|
+
config: Configuration dictionary
|
|
264
|
+
config_path: Path to save configuration
|
|
265
|
+
|
|
266
|
+
Returns:
|
|
267
|
+
bool: True if successful
|
|
268
|
+
"""
|
|
269
|
+
import json
|
|
270
|
+
|
|
271
|
+
try:
|
|
272
|
+
# Ensure directory exists
|
|
273
|
+
config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
274
|
+
|
|
275
|
+
# Write configuration with nice formatting
|
|
276
|
+
with open(config_path, 'w') as f:
|
|
277
|
+
json.dump(config, f, indent=2)
|
|
278
|
+
|
|
279
|
+
print(f"\n✅ Configuration saved to {config_path}")
|
|
280
|
+
return True
|
|
281
|
+
|
|
282
|
+
except Exception as e:
|
|
283
|
+
print(f"❌ Error saving configuration: {e}")
|
|
284
|
+
return False
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
# MPM-Init Package
|
|
2
|
+
|
|
3
|
+
This package provides comprehensive project initialization and update capabilities for Claude Code and Claude MPM.
|
|
4
|
+
|
|
5
|
+
## Package Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
mpm_init/
|
|
9
|
+
├── __init__.py # Package initialization and exports
|
|
10
|
+
├── core.py # MPMInitCommand class - main orchestrator
|
|
11
|
+
├── prompts.py # Prompt building functions
|
|
12
|
+
├── display.py # Display and UI helper functions
|
|
13
|
+
├── git_activity.py # Git analysis and activity tracking
|
|
14
|
+
├── modes.py # Operation mode handlers
|
|
15
|
+
└── README.md # This file
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Module Responsibilities
|
|
19
|
+
|
|
20
|
+
### `__init__.py` - Package Initialization
|
|
21
|
+
**Purpose**: Public API exposure and lazy imports
|
|
22
|
+
|
|
23
|
+
**Exports**:
|
|
24
|
+
- `MPMInitCommand` - Main command class (from core.py)
|
|
25
|
+
- `mpm_init` - Click command group (lazy import from mpm_init_cli.py)
|
|
26
|
+
|
|
27
|
+
**Key Features**:
|
|
28
|
+
- Lazy import via `__getattr__` to avoid circular dependencies
|
|
29
|
+
- Clean public API surface
|
|
30
|
+
- Internal module re-exports for package-level imports
|
|
31
|
+
|
|
32
|
+
### `core.py` - MPMInitCommand Class
|
|
33
|
+
**Purpose**: Main orchestrator for project initialization
|
|
34
|
+
|
|
35
|
+
**Key Class**: `MPMInitCommand`
|
|
36
|
+
|
|
37
|
+
**Responsibilities**:
|
|
38
|
+
- Coordinate initialization workflow
|
|
39
|
+
- Manage service components (DocumentationManager, ProjectOrganizer, etc.)
|
|
40
|
+
- Build and execute delegation prompts
|
|
41
|
+
- Handle subprocess execution via claude-mpm CLI
|
|
42
|
+
- Coordinate pre/post initialization tasks
|
|
43
|
+
|
|
44
|
+
**Public Methods**:
|
|
45
|
+
```python
|
|
46
|
+
def initialize_project(
|
|
47
|
+
project_type: Optional[str] = None,
|
|
48
|
+
framework: Optional[str] = None,
|
|
49
|
+
force: bool = False,
|
|
50
|
+
verbose: bool = False,
|
|
51
|
+
ast_analysis: bool = True,
|
|
52
|
+
update_mode: bool = False,
|
|
53
|
+
review_only: bool = False,
|
|
54
|
+
organize_files: bool = False,
|
|
55
|
+
preserve_custom: bool = True,
|
|
56
|
+
skip_archive: bool = False,
|
|
57
|
+
dry_run: bool = False,
|
|
58
|
+
quick_update: bool = False,
|
|
59
|
+
catchup: bool = False,
|
|
60
|
+
non_interactive: bool = False,
|
|
61
|
+
days: int = 30,
|
|
62
|
+
export: Optional[str] = None,
|
|
63
|
+
) -> Dict
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
def handle_context(
|
|
68
|
+
session_id: Optional[str] = None,
|
|
69
|
+
list_sessions: bool = False,
|
|
70
|
+
days: int = 7,
|
|
71
|
+
) -> Dict[str, Any]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### `prompts.py` - Prompt Building
|
|
75
|
+
**Purpose**: Pure functions for generating agent delegation prompts
|
|
76
|
+
|
|
77
|
+
**Functions**:
|
|
78
|
+
- `build_initialization_prompt()` - Create new project initialization prompt
|
|
79
|
+
- `build_update_prompt()` - Update existing CLAUDE.md prompt
|
|
80
|
+
- `build_research_context_prompt()` - Research agent delegation for git analysis
|
|
81
|
+
|
|
82
|
+
**Design Pattern**: Pure functions with no side effects or external dependencies
|
|
83
|
+
|
|
84
|
+
**Example**:
|
|
85
|
+
```python
|
|
86
|
+
from claude_mpm.cli.commands.mpm_init import prompts
|
|
87
|
+
|
|
88
|
+
prompt = prompts.build_initialization_prompt(
|
|
89
|
+
project_path=Path("/path/to/project"),
|
|
90
|
+
project_type="web",
|
|
91
|
+
framework="FastAPI",
|
|
92
|
+
ast_analysis=True
|
|
93
|
+
)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### `display.py` - Display Functions
|
|
97
|
+
**Purpose**: Pure functions for console output and reporting
|
|
98
|
+
|
|
99
|
+
**Functions**:
|
|
100
|
+
- `display_documentation_status()` - Show doc analysis
|
|
101
|
+
- `display_review_report()` - Comprehensive project review
|
|
102
|
+
- `display_catchup()` - Recent commit history
|
|
103
|
+
- `display_activity_report()` - Git activity summary
|
|
104
|
+
- `display_results()` - Initialization results
|
|
105
|
+
- `show_update_plan()` - Update mode plan
|
|
106
|
+
- `show_initialization_plan()` - Init mode plan
|
|
107
|
+
|
|
108
|
+
**Design Pattern**: All functions accept DisplayHelper/Console as parameters (dependency injection)
|
|
109
|
+
|
|
110
|
+
**Example**:
|
|
111
|
+
```python
|
|
112
|
+
from claude_mpm.cli.commands.mpm_init import display
|
|
113
|
+
|
|
114
|
+
display.display_activity_report(display_helper, activity_report)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### `git_activity.py` - Git Analysis
|
|
118
|
+
**Purpose**: Git repository analysis and activity tracking
|
|
119
|
+
|
|
120
|
+
**Functions**:
|
|
121
|
+
- `catchup()` - Get recent commit history for PM context
|
|
122
|
+
- `generate_activity_report()` - Comprehensive activity report
|
|
123
|
+
- `export_activity_report()` - Export report to markdown
|
|
124
|
+
- `append_activity_notes()` - Append activity to CLAUDE.md
|
|
125
|
+
- `handle_context()` - Intelligent context for resuming work
|
|
126
|
+
|
|
127
|
+
**Use Cases**:
|
|
128
|
+
- Quick update mode (`--quick-update`)
|
|
129
|
+
- Catchup mode (`--catchup`)
|
|
130
|
+
- Context analysis (`/mpm-init --context`)
|
|
131
|
+
|
|
132
|
+
**Example**:
|
|
133
|
+
```python
|
|
134
|
+
from claude_mpm.cli.commands.mpm_init import git_activity
|
|
135
|
+
|
|
136
|
+
# Get recent commits
|
|
137
|
+
data = git_activity.catchup(project_path)
|
|
138
|
+
|
|
139
|
+
# Generate full activity report
|
|
140
|
+
report = git_activity.generate_activity_report(
|
|
141
|
+
git_analysis, doc_analysis, days=30
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### `modes.py` - Operation Mode Handlers
|
|
146
|
+
**Purpose**: Handle different execution modes
|
|
147
|
+
|
|
148
|
+
**Functions**:
|
|
149
|
+
- `prompt_update_action()` - Interactive prompt for update decisions
|
|
150
|
+
- `run_review_mode()` - Review project without changes
|
|
151
|
+
- `run_quick_update_mode()` - Lightweight git-based update
|
|
152
|
+
- `run_dry_run_mode()` - Show planned changes without execution
|
|
153
|
+
- `handle_update_post_processing()` - Post-update summary
|
|
154
|
+
|
|
155
|
+
**Modes Supported**:
|
|
156
|
+
- **Review Mode** (`--review-only`): Analyze project state
|
|
157
|
+
- **Dry-Run Mode** (`--dry-run`): Preview changes
|
|
158
|
+
- **Quick Update** (`--quick-update`): Fast incremental update
|
|
159
|
+
- **Update Mode** (`--update`): Smart merge with existing docs
|
|
160
|
+
|
|
161
|
+
**Example**:
|
|
162
|
+
```python
|
|
163
|
+
from claude_mpm.cli.commands.mpm_init import modes
|
|
164
|
+
|
|
165
|
+
result = modes.run_review_mode(
|
|
166
|
+
console, display, organizer, doc_manager, analyzer
|
|
167
|
+
)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Usage Examples
|
|
171
|
+
|
|
172
|
+
### Programmatic Usage
|
|
173
|
+
|
|
174
|
+
```python
|
|
175
|
+
from pathlib import Path
|
|
176
|
+
from claude_mpm.cli.commands.mpm_init import MPMInitCommand
|
|
177
|
+
|
|
178
|
+
# Initialize command
|
|
179
|
+
command = MPMInitCommand(project_path=Path("/path/to/project"))
|
|
180
|
+
|
|
181
|
+
# Create new project
|
|
182
|
+
result = command.initialize_project(
|
|
183
|
+
project_type="web",
|
|
184
|
+
framework="FastAPI",
|
|
185
|
+
ast_analysis=True
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
# Update existing project
|
|
189
|
+
result = command.initialize_project(
|
|
190
|
+
update_mode=True,
|
|
191
|
+
preserve_custom=True,
|
|
192
|
+
ast_analysis=True
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
# Quick update based on git activity
|
|
196
|
+
result = command.initialize_project(
|
|
197
|
+
quick_update=True,
|
|
198
|
+
days=30,
|
|
199
|
+
export="auto"
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
# Review only (no changes)
|
|
203
|
+
result = command.initialize_project(
|
|
204
|
+
review_only=True
|
|
205
|
+
)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### CLI Usage
|
|
209
|
+
|
|
210
|
+
Via the Click command group (defined in parent `mpm_init_cli.py`):
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Create new project
|
|
214
|
+
/mpm-init
|
|
215
|
+
|
|
216
|
+
# Update existing project
|
|
217
|
+
/mpm-init --update
|
|
218
|
+
|
|
219
|
+
# Review project state
|
|
220
|
+
/mpm-init --review-only
|
|
221
|
+
|
|
222
|
+
# Quick update with export
|
|
223
|
+
/mpm-init --quick-update --days 30 --export auto
|
|
224
|
+
|
|
225
|
+
# Dry-run (preview changes)
|
|
226
|
+
/mpm-init --dry-run
|
|
227
|
+
|
|
228
|
+
# Catchup (show recent commits)
|
|
229
|
+
/mpm-init --catchup
|
|
230
|
+
|
|
231
|
+
# Context analysis
|
|
232
|
+
/mpm-init --context --days 7
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Design Principles
|
|
236
|
+
|
|
237
|
+
### 1. **Separation of Concerns**
|
|
238
|
+
Each module has a single, clear responsibility:
|
|
239
|
+
- `core.py` - orchestration
|
|
240
|
+
- `prompts.py` - prompt building
|
|
241
|
+
- `display.py` - UI/output
|
|
242
|
+
- `git_activity.py` - git analysis
|
|
243
|
+
- `modes.py` - mode handling
|
|
244
|
+
|
|
245
|
+
### 2. **Pure Functions**
|
|
246
|
+
`prompts.py` and `display.py` contain pure functions with no side effects or global state.
|
|
247
|
+
|
|
248
|
+
### 3. **Dependency Injection**
|
|
249
|
+
Display functions accept `DisplayHelper` and `Console` as parameters rather than creating their own instances.
|
|
250
|
+
|
|
251
|
+
### 4. **Modular Architecture**
|
|
252
|
+
Easy to test, maintain, and extend individual components without touching others.
|
|
253
|
+
|
|
254
|
+
### 5. **Lazy Imports**
|
|
255
|
+
`__init__.py` uses `__getattr__` to avoid circular dependencies while maintaining clean API.
|
|
256
|
+
|
|
257
|
+
## Service Dependencies
|
|
258
|
+
|
|
259
|
+
The package relies on these service components:
|
|
260
|
+
|
|
261
|
+
- `DocumentationManager` - CLAUDE.md analysis and management
|
|
262
|
+
- `ProjectOrganizer` - Project structure validation
|
|
263
|
+
- `ArchiveManager` - Documentation versioning
|
|
264
|
+
- `EnhancedProjectAnalyzer` - Git and project state analysis
|
|
265
|
+
- `DisplayHelper` - Rich console output formatting
|
|
266
|
+
|
|
267
|
+
## Developer Notes
|
|
268
|
+
|
|
269
|
+
### Adding New Modes
|
|
270
|
+
|
|
271
|
+
To add a new operation mode:
|
|
272
|
+
|
|
273
|
+
1. Add mode handler function in `modes.py`:
|
|
274
|
+
```python
|
|
275
|
+
def run_new_mode(console, display, ...) -> Dict:
|
|
276
|
+
# Implementation
|
|
277
|
+
return {"status": OperationResult.SUCCESS, "mode": "new_mode"}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
2. Add mode detection in `core.py` `initialize_project()`:
|
|
281
|
+
```python
|
|
282
|
+
if new_mode_flag:
|
|
283
|
+
return self._run_new_mode()
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
3. Add CLI flag in parent `mpm_init_cli.py`
|
|
287
|
+
|
|
288
|
+
### Adding New Prompts
|
|
289
|
+
|
|
290
|
+
Add prompt builder in `prompts.py`:
|
|
291
|
+
|
|
292
|
+
```python
|
|
293
|
+
def build_new_prompt(project_path: Path, **kwargs) -> str:
|
|
294
|
+
"""Build prompt for new use case."""
|
|
295
|
+
return f"""Your prompt template..."""
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Then call from `core.py`:
|
|
299
|
+
```python
|
|
300
|
+
prompt = prompts.build_new_prompt(self.project_path, **kwargs)
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Adding Display Functions
|
|
304
|
+
|
|
305
|
+
Add display function in `display.py`:
|
|
306
|
+
|
|
307
|
+
```python
|
|
308
|
+
def display_new_report(display: DisplayHelper, data: Dict) -> None:
|
|
309
|
+
"""Display new report type."""
|
|
310
|
+
display.display_header("NEW REPORT")
|
|
311
|
+
# Rendering logic
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Testing Considerations
|
|
315
|
+
|
|
316
|
+
- **Unit Tests**: Test pure functions in `prompts.py` and `display.py`
|
|
317
|
+
- **Integration Tests**: Test `MPMInitCommand` with mocked services
|
|
318
|
+
- **E2E Tests**: Test via CLI commands in parent module
|
|
319
|
+
|
|
320
|
+
### File Size Tracking
|
|
321
|
+
|
|
322
|
+
Current module sizes:
|
|
323
|
+
- `core.py`: ~525 lines (Main orchestrator - expected to be largest)
|
|
324
|
+
- `prompts.py`: ~443 lines (Template generation)
|
|
325
|
+
- `git_activity.py`: ~427 lines (Git analysis utilities)
|
|
326
|
+
- `modes.py`: ~401 lines (Mode handlers)
|
|
327
|
+
- `display.py`: ~360 lines (Display functions)
|
|
328
|
+
|
|
329
|
+
All modules are well under the 600-line warning threshold.
|
|
330
|
+
|
|
331
|
+
## Version History
|
|
332
|
+
|
|
333
|
+
**Current Version**: Part of claude-mpm 4.20.7
|
|
334
|
+
|
|
335
|
+
**Changes from Monolithic `mpm_init.py`**:
|
|
336
|
+
- Split 800+ line file into 6 focused modules
|
|
337
|
+
- Improved testability through pure functions
|
|
338
|
+
- Better separation of concerns
|
|
339
|
+
- Easier maintenance and feature additions
|
|
340
|
+
- Clearer public API surface
|
|
341
|
+
|
|
342
|
+
## Related Files
|
|
343
|
+
|
|
344
|
+
- **Parent CLI**: `../mpm_init_cli.py` - Click command definitions
|
|
345
|
+
- **Handler**: `../mpm_init_handler.py` - Legacy compatibility handler
|
|
346
|
+
- **Parser**: `../../parsers/mpm_init_parser.py` - Command-line argument parsing
|
|
347
|
+
- **Tests**: `../../../../../tests/test_mpm_init_catchup.py` - Unit tests
|
|
348
|
+
|
|
349
|
+
## Contributing
|
|
350
|
+
|
|
351
|
+
When modifying this package:
|
|
352
|
+
|
|
353
|
+
1. Maintain pure function approach in `prompts.py` and `display.py`
|
|
354
|
+
2. Keep modules under 600 lines (split if approaching limit)
|
|
355
|
+
3. Add docstrings for all public functions
|
|
356
|
+
4. Update this README with new functionality
|
|
357
|
+
5. Add type hints to all function signatures
|
|
358
|
+
6. Follow existing patterns for consistency
|
|
359
|
+
|
|
360
|
+
## Support
|
|
361
|
+
|
|
362
|
+
For issues or questions:
|
|
363
|
+
- Check existing documentation in CLAUDE.md
|
|
364
|
+
- Review test files for usage examples
|
|
365
|
+
- Consult service component documentation
|