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
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# Event Bus System
|
|
2
|
+
|
|
3
|
+
A decoupled, reliable event system for Claude MPM that separates event producers from consumers, enabling better testing, maintenance, and extensibility.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Event Bus system provides a central hub for all events in the Claude MPM framework. Instead of components directly calling Socket.IO or other services, they publish events to the bus, which routes them to interested consumers.
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Producers → Event Bus → Consumers
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Key Components
|
|
16
|
+
|
|
17
|
+
- **EventBus**: Central routing and queuing system
|
|
18
|
+
- **Event**: Standard event format with metadata
|
|
19
|
+
- **Producers**: Publish events without knowing consumers
|
|
20
|
+
- **Consumers**: Subscribe to topics and process events
|
|
21
|
+
- **Topics**: Hierarchical event categorization
|
|
22
|
+
|
|
23
|
+
## Benefits
|
|
24
|
+
|
|
25
|
+
### 1. Decoupling
|
|
26
|
+
- Producers don't know about consumers
|
|
27
|
+
- Socket.IO is just another consumer
|
|
28
|
+
- Easy to add/remove consumers without affecting producers
|
|
29
|
+
|
|
30
|
+
### 2. Reliability
|
|
31
|
+
- Events queued when consumers unavailable
|
|
32
|
+
- Retry logic with exponential backoff
|
|
33
|
+
- Dead letter queue for failed events
|
|
34
|
+
- Graceful degradation
|
|
35
|
+
|
|
36
|
+
### 3. Testability
|
|
37
|
+
- Test producers without Socket.IO
|
|
38
|
+
- Mock event bus for unit tests
|
|
39
|
+
- Test consumers in isolation
|
|
40
|
+
- Deterministic event flow
|
|
41
|
+
|
|
42
|
+
### 4. Observability
|
|
43
|
+
- Central metrics collection
|
|
44
|
+
- Event flow monitoring
|
|
45
|
+
- Performance tracking
|
|
46
|
+
- Debug logging
|
|
47
|
+
|
|
48
|
+
### 5. Flexibility
|
|
49
|
+
- Topic-based filtering
|
|
50
|
+
- Event transformation
|
|
51
|
+
- Batch processing
|
|
52
|
+
- Priority queuing
|
|
53
|
+
|
|
54
|
+
## Usage
|
|
55
|
+
|
|
56
|
+
### Basic Setup
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
from claude_mpm.services.events import EventBus, SocketIOConsumer, LoggingConsumer
|
|
60
|
+
|
|
61
|
+
# Create and start event bus
|
|
62
|
+
bus = EventBus()
|
|
63
|
+
await bus.start()
|
|
64
|
+
|
|
65
|
+
# Add consumers
|
|
66
|
+
socketio_consumer = SocketIOConsumer()
|
|
67
|
+
await bus.subscribe(socketio_consumer)
|
|
68
|
+
|
|
69
|
+
logging_consumer = LoggingConsumer(topics=["hook.**"])
|
|
70
|
+
await bus.subscribe(logging_consumer)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Publishing Events
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
from claude_mpm.services.events import HookEventProducer
|
|
77
|
+
|
|
78
|
+
# Create producer
|
|
79
|
+
producer = HookEventProducer(bus)
|
|
80
|
+
|
|
81
|
+
# Publish events
|
|
82
|
+
await producer.publish_response({
|
|
83
|
+
"content": "Assistant response text",
|
|
84
|
+
"model": "claude-3",
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
await producer.publish_tool_use(
|
|
88
|
+
tool_name="Read",
|
|
89
|
+
tool_params={"file_path": "/path/to/file"},
|
|
90
|
+
tool_result="File contents",
|
|
91
|
+
)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Creating Custom Consumers
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
from claude_mpm.services.events import IEventConsumer, ConsumerConfig
|
|
98
|
+
|
|
99
|
+
class CustomConsumer(IEventConsumer):
|
|
100
|
+
def __init__(self):
|
|
101
|
+
self._config = ConsumerConfig(
|
|
102
|
+
name="CustomConsumer",
|
|
103
|
+
topics=["system.**"], # Subscribe to system events
|
|
104
|
+
priority=ConsumerPriority.NORMAL,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
async def consume(self, event: Event) -> bool:
|
|
108
|
+
# Process event
|
|
109
|
+
print(f"Processing: {event.topic} - {event.type}")
|
|
110
|
+
return True
|
|
111
|
+
|
|
112
|
+
# Implement other required methods...
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Topic Hierarchy
|
|
116
|
+
|
|
117
|
+
Events are organized in a hierarchical topic structure:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
hook.* # Hook system events
|
|
121
|
+
.response # Assistant responses
|
|
122
|
+
.tool # Tool usage
|
|
123
|
+
.subagent.* # Subagent events
|
|
124
|
+
.error # Hook errors
|
|
125
|
+
|
|
126
|
+
system.* # System events
|
|
127
|
+
.lifecycle.* # Service startup/shutdown
|
|
128
|
+
.health # Health status
|
|
129
|
+
.config # Configuration changes
|
|
130
|
+
.performance # Performance metrics
|
|
131
|
+
.error # System errors
|
|
132
|
+
.warning # System warnings
|
|
133
|
+
|
|
134
|
+
cli.* # CLI command events
|
|
135
|
+
agent.* # Agent events
|
|
136
|
+
build.* # Build monitoring events
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Topic Patterns
|
|
140
|
+
|
|
141
|
+
- `hook.*` - Matches `hook.response` but not `hook.tool.usage`
|
|
142
|
+
- `hook.**` - Matches all hook events including nested
|
|
143
|
+
- `**` - Matches all events
|
|
144
|
+
|
|
145
|
+
## Event Format
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
@dataclass
|
|
149
|
+
class Event:
|
|
150
|
+
id: str # Unique event ID
|
|
151
|
+
topic: str # Event topic
|
|
152
|
+
type: str # Event type
|
|
153
|
+
timestamp: datetime # Creation time
|
|
154
|
+
source: str # Event source
|
|
155
|
+
data: Dict[str, Any] # Event payload
|
|
156
|
+
metadata: EventMetadata # Processing metadata
|
|
157
|
+
correlation_id: str # Track related events
|
|
158
|
+
priority: EventPriority # Processing priority
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Consumers
|
|
162
|
+
|
|
163
|
+
### Built-in Consumers
|
|
164
|
+
|
|
165
|
+
#### SocketIOConsumer
|
|
166
|
+
- Emits events via Socket.IO
|
|
167
|
+
- Batching for efficiency
|
|
168
|
+
- Automatic reconnection
|
|
169
|
+
- Connection pooling
|
|
170
|
+
|
|
171
|
+
#### LoggingConsumer
|
|
172
|
+
- Logs events for debugging
|
|
173
|
+
- Configurable log levels
|
|
174
|
+
- JSON formatting
|
|
175
|
+
- Topic filtering
|
|
176
|
+
|
|
177
|
+
#### MetricsConsumer
|
|
178
|
+
- Collects event statistics
|
|
179
|
+
- Rate calculation
|
|
180
|
+
- Latency tracking
|
|
181
|
+
- Top event analysis
|
|
182
|
+
|
|
183
|
+
#### DeadLetterConsumer
|
|
184
|
+
- Stores failed events
|
|
185
|
+
- Event replay capability
|
|
186
|
+
- Retention policies
|
|
187
|
+
- Failure analysis
|
|
188
|
+
|
|
189
|
+
## Producers
|
|
190
|
+
|
|
191
|
+
### Built-in Producers
|
|
192
|
+
|
|
193
|
+
#### HookEventProducer
|
|
194
|
+
- Publishes hook system events
|
|
195
|
+
- Helper methods for common events
|
|
196
|
+
- Correlation tracking
|
|
197
|
+
|
|
198
|
+
#### SystemEventProducer
|
|
199
|
+
- Publishes system-level events
|
|
200
|
+
- Service lifecycle events
|
|
201
|
+
- Health and metrics
|
|
202
|
+
- Configuration changes
|
|
203
|
+
|
|
204
|
+
## Configuration
|
|
205
|
+
|
|
206
|
+
### EventBus Options
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
EventBus(
|
|
210
|
+
max_queue_size=10000, # Maximum queued events
|
|
211
|
+
process_interval=0.01, # Processing frequency
|
|
212
|
+
batch_timeout=0.1, # Batch wait time
|
|
213
|
+
enable_metrics=True, # Track metrics
|
|
214
|
+
enable_persistence=False, # Persist to disk
|
|
215
|
+
)
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Consumer Configuration
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
ConsumerConfig(
|
|
222
|
+
name="MyConsumer",
|
|
223
|
+
topics=["hook.**"], # Topics to subscribe
|
|
224
|
+
priority=ConsumerPriority.HIGH,
|
|
225
|
+
batch_size=10, # Process in batches
|
|
226
|
+
batch_timeout=0.5, # Batch wait time
|
|
227
|
+
max_retries=3, # Retry failed events
|
|
228
|
+
retry_backoff=2.0, # Backoff multiplier
|
|
229
|
+
filter_func=my_filter, # Event filter
|
|
230
|
+
transform_func=my_transform, # Event transformer
|
|
231
|
+
)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Migration Guide
|
|
235
|
+
|
|
236
|
+
### Updating Hook Handler
|
|
237
|
+
|
|
238
|
+
Before (Direct Socket.IO):
|
|
239
|
+
```python
|
|
240
|
+
# Old: Direct Socket.IO dependency
|
|
241
|
+
socketio_client = socketio.Client()
|
|
242
|
+
socketio_client.emit("hook_event", event_data)
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
After (Event Bus):
|
|
246
|
+
```python
|
|
247
|
+
# New: Publish to event bus
|
|
248
|
+
producer = HookEventProducer(event_bus)
|
|
249
|
+
await producer.publish_response(response_data)
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Testing
|
|
253
|
+
|
|
254
|
+
Before:
|
|
255
|
+
```python
|
|
256
|
+
# Hard to test - needs Socket.IO server
|
|
257
|
+
def test_hook_handler():
|
|
258
|
+
# Complex setup with Socket.IO
|
|
259
|
+
pass
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
After:
|
|
263
|
+
```python
|
|
264
|
+
# Easy to test - mock event bus
|
|
265
|
+
def test_hook_handler():
|
|
266
|
+
mock_bus = Mock()
|
|
267
|
+
producer = HookEventProducer(mock_bus)
|
|
268
|
+
await producer.publish_response(data)
|
|
269
|
+
mock_bus.publish.assert_called_once()
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## Performance
|
|
273
|
+
|
|
274
|
+
- **Publish Latency**: <1ms average
|
|
275
|
+
- **Processing Throughput**: 10,000+ events/sec
|
|
276
|
+
- **Memory Usage**: ~100 bytes per queued event
|
|
277
|
+
- **CPU Overhead**: <5% for typical load
|
|
278
|
+
|
|
279
|
+
## Best Practices
|
|
280
|
+
|
|
281
|
+
1. **Use Topics Wisely**: Create logical topic hierarchies
|
|
282
|
+
2. **Set Priorities**: Critical events should have higher priority
|
|
283
|
+
3. **Handle Errors**: Consumers should handle their own errors
|
|
284
|
+
4. **Monitor Metrics**: Track queue size and processing rates
|
|
285
|
+
5. **Test in Isolation**: Test producers and consumers separately
|
|
286
|
+
6. **Batch When Possible**: Improve efficiency with batching
|
|
287
|
+
7. **Clean Shutdown**: Always call `bus.stop()` for graceful shutdown
|
|
288
|
+
|
|
289
|
+
## Examples
|
|
290
|
+
|
|
291
|
+
See the `scripts/` directory for complete examples:
|
|
292
|
+
- `test_event_bus.py` - Basic event bus demonstration
|
|
293
|
+
- `hook_handler_with_event_bus.py` - Hook handler integration
|
|
294
|
+
|
|
295
|
+
## Future Enhancements
|
|
296
|
+
|
|
297
|
+
- [ ] Persistent event storage
|
|
298
|
+
- [ ] Event replay from timestamp
|
|
299
|
+
- [ ] Distributed event bus (Redis/RabbitMQ backend)
|
|
300
|
+
- [ ] Event schema validation
|
|
301
|
+
- [ ] Advanced routing rules
|
|
302
|
+
- [ ] Event compression
|
|
303
|
+
- [ ] WebSocket consumer for real-time streaming
|
|
@@ -133,8 +133,7 @@ class LoggingConsumer(IEventConsumer):
|
|
|
133
133
|
"""Format an event for logging."""
|
|
134
134
|
# Build base message
|
|
135
135
|
message = (
|
|
136
|
-
f"[{event.topic}] {event.type} "
|
|
137
|
-
f"(id={event.id[:8]}, source={event.source})"
|
|
136
|
+
f"[{event.topic}] {event.type} (id={event.id[:8]}, source={event.source})"
|
|
138
137
|
)
|
|
139
138
|
|
|
140
139
|
# Add data if configured
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Framework CLAUDE.md Generator
|
|
2
|
+
|
|
3
|
+
This directory contains the refactored framework CLAUDE.md generator service, originally a single 1,267-line file.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
### Core Modules
|
|
8
|
+
|
|
9
|
+
- **`__init__.py`** (~250 lines) - Main facade class that coordinates all functionality
|
|
10
|
+
- **`version_manager.py`** (~100 lines) - Handles version parsing, incrementing, and comparison
|
|
11
|
+
- **`content_assembler.py`** (~120 lines) - Assembles sections and applies template variables
|
|
12
|
+
- **`content_validator.py`** (~80 lines) - Validates generated content structure and completeness
|
|
13
|
+
- **`deployment_manager.py`** (~80 lines) - Handles deployment to parent directories
|
|
14
|
+
- **`section_manager.py`** (~60 lines) - Manages section registration, ordering, and updates
|
|
15
|
+
|
|
16
|
+
### Section Generators
|
|
17
|
+
|
|
18
|
+
The `section_generators/` subdirectory contains individual generators for each section:
|
|
19
|
+
|
|
20
|
+
- **`__init__.py`** - Base classes and registry
|
|
21
|
+
- **`header.py`** - Header with version metadata
|
|
22
|
+
- **`role_designation.py`** - AI Assistant role designation
|
|
23
|
+
- **`agents.py`** (~570 lines) - Comprehensive agents documentation (largest section)
|
|
24
|
+
- **`todo_task_tools.py`** - Todo and Task Tools integration
|
|
25
|
+
- **`claude_pm_init.py`** - Claude-PM initialization procedures
|
|
26
|
+
- **`orchestration_principles.py`** - Core orchestration principles
|
|
27
|
+
- **`subprocess_validation.py`** - Subprocess validation protocol
|
|
28
|
+
- **`delegation_constraints.py`** - Critical delegation constraints
|
|
29
|
+
- **`environment_config.py`** - Environment configuration
|
|
30
|
+
- **`troubleshooting.py`** - Troubleshooting guide
|
|
31
|
+
- **`core_responsibilities.py`** - Core responsibilities list
|
|
32
|
+
- **`footer.py`** - Footer with metadata
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
The API remains unchanged from the original implementation:
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from claude_pm.services.framework_claude_md_generator import FrameworkClaudeMdGenerator
|
|
40
|
+
|
|
41
|
+
# Create generator instance (default: INSTRUCTIONS.md)
|
|
42
|
+
generator = FrameworkClaudeMdGenerator()
|
|
43
|
+
|
|
44
|
+
# Or specify a custom target filename (e.g., for legacy compatibility)
|
|
45
|
+
generator = FrameworkClaudeMdGenerator(target_filename="CLAUDE.md")
|
|
46
|
+
|
|
47
|
+
# Generate content
|
|
48
|
+
content = generator.generate(
|
|
49
|
+
current_content=existing_content, # Optional: for version auto-increment
|
|
50
|
+
template_variables={'PLATFORM': 'darwin', 'PYTHON_CMD': 'python3'}
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Deploy to parent directory
|
|
54
|
+
success, message = generator.deploy_to_parent(Path('/parent/dir'))
|
|
55
|
+
|
|
56
|
+
# Update a section
|
|
57
|
+
generator.update_section('agents', 'Custom agents content')
|
|
58
|
+
|
|
59
|
+
# Add custom section
|
|
60
|
+
generator.add_custom_section('custom', 'Custom content', after='agents')
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Configuration Options
|
|
64
|
+
|
|
65
|
+
### Target Filename
|
|
66
|
+
|
|
67
|
+
The generator supports configurable target filenames for deployment:
|
|
68
|
+
|
|
69
|
+
- **Default**: `"INSTRUCTIONS.md"` - The standard filename for framework instructions
|
|
70
|
+
- **Legacy**: `"CLAUDE.md"` - For backward compatibility with older projects
|
|
71
|
+
- **Custom**: Any filename can be specified for special use cases
|
|
72
|
+
|
|
73
|
+
This configuration affects:
|
|
74
|
+
- Deployment target filename
|
|
75
|
+
- Backup file naming
|
|
76
|
+
- Deployment check logic
|
|
77
|
+
|
|
78
|
+
Example:
|
|
79
|
+
```python
|
|
80
|
+
# Use legacy filename for older projects
|
|
81
|
+
generator = FrameworkClaudeMdGenerator(target_filename="CLAUDE.md")
|
|
82
|
+
|
|
83
|
+
# Use custom filename for special environments
|
|
84
|
+
generator = FrameworkClaudeMdGenerator(target_filename="PROJECT_INSTRUCTIONS.md")
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Design Benefits
|
|
88
|
+
|
|
89
|
+
1. **Modularity**: Each concern is separated into its own module
|
|
90
|
+
2. **Maintainability**: Smaller, focused modules are easier to understand and modify
|
|
91
|
+
3. **Testability**: Individual components can be tested in isolation
|
|
92
|
+
4. **Extensibility**: New section generators can be added easily
|
|
93
|
+
5. **Performance**: Section generators are loaded on demand
|
|
94
|
+
6. **Backward Compatibility**: Original API preserved through facade pattern
|
|
95
|
+
|
|
96
|
+
## Section Generator Pattern
|
|
97
|
+
|
|
98
|
+
To add a new section generator:
|
|
99
|
+
|
|
100
|
+
1. Create a new file in `section_generators/`
|
|
101
|
+
2. Inherit from `BaseSectionGenerator`
|
|
102
|
+
3. Implement the `generate()` method
|
|
103
|
+
4. Register in `section_generators/__init__.py`
|
|
104
|
+
|
|
105
|
+
Example:
|
|
106
|
+
```python
|
|
107
|
+
from . import BaseSectionGenerator
|
|
108
|
+
|
|
109
|
+
class CustomSectionGenerator(BaseSectionGenerator):
|
|
110
|
+
def generate(self, data: Dict[str, Any]) -> str:
|
|
111
|
+
return "## Custom Section\n\nContent here..."
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Refactoring Summary
|
|
115
|
+
|
|
116
|
+
- **Original**: 1,267 lines in a single file
|
|
117
|
+
- **Refactored**: ~250 lines in main module + well-organized submodules
|
|
118
|
+
- **Total line reduction**: Main module reduced by 80%
|
|
119
|
+
- **Improved organization**: 13 focused modules instead of 1 large file
|
|
@@ -177,7 +177,7 @@ class ResourceMonitorService(BaseMonitoringService):
|
|
|
177
177
|
# Load average (Unix only)
|
|
178
178
|
try:
|
|
179
179
|
if hasattr(psutil, "getloadavg"):
|
|
180
|
-
load1, load5,
|
|
180
|
+
load1, load5, _load15 = psutil.getloadavg()
|
|
181
181
|
cpu_count = psutil.cpu_count()
|
|
182
182
|
|
|
183
183
|
# Load is concerning if > cpu_count
|
|
@@ -86,6 +86,7 @@ from claude_mpm.services.core.models.process import (
|
|
|
86
86
|
PROTECTED_PORT_RANGES,
|
|
87
87
|
DeploymentState,
|
|
88
88
|
ProcessInfo,
|
|
89
|
+
ProcessStatus,
|
|
89
90
|
StartConfig,
|
|
90
91
|
is_port_protected,
|
|
91
92
|
)
|
|
@@ -147,6 +148,7 @@ __all__ = [
|
|
|
147
148
|
"PortConflictError",
|
|
148
149
|
"ProcessInfo",
|
|
149
150
|
"ProcessSpawnError",
|
|
151
|
+
"ProcessStatus",
|
|
150
152
|
# Data models - Process
|
|
151
153
|
"ResourceMonitor",
|
|
152
154
|
"ResourceUsage",
|
|
@@ -187,7 +187,7 @@ class LocalProcessManager(SyncBaseService, ILocalProcessManager):
|
|
|
187
187
|
# Check if process is still running
|
|
188
188
|
if process.poll() is not None:
|
|
189
189
|
# Process died immediately
|
|
190
|
-
|
|
190
|
+
_stdout, stderr = process.communicate()
|
|
191
191
|
error_msg = stderr.decode("utf-8", errors="replace") if stderr else ""
|
|
192
192
|
raise ProcessSpawnError(
|
|
193
193
|
f"Process died immediately. Exit code: {process.returncode}. "
|
|
@@ -102,7 +102,7 @@ class ResourceMonitor(SyncBaseService, IResourceMonitor):
|
|
|
102
102
|
self._initialized = True
|
|
103
103
|
self.log_info(
|
|
104
104
|
f"Resource monitor initialized "
|
|
105
|
-
f"(fd_threshold={self.fd_threshold_percent*100:.0f}%, "
|
|
105
|
+
f"(fd_threshold={self.fd_threshold_percent * 100:.0f}%, "
|
|
106
106
|
f"thread_threshold={self.thread_threshold}, "
|
|
107
107
|
f"connection_threshold={self.connection_threshold}, "
|
|
108
108
|
f"disk_threshold={self.disk_threshold_mb}MB)"
|
|
@@ -304,7 +304,7 @@ class ResourceMonitor(SyncBaseService, IResourceMonitor):
|
|
|
304
304
|
return 0
|
|
305
305
|
|
|
306
306
|
try:
|
|
307
|
-
soft_limit,
|
|
307
|
+
soft_limit, _hard_limit = resource_module.getrlimit(
|
|
308
308
|
resource_module.RLIMIT_NOFILE
|
|
309
309
|
)
|
|
310
310
|
return soft_limit
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# MCP Gateway Service
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The MCP Gateway is a standards-compliant implementation of the Model Context Protocol (MCP) for Claude MPM. It provides a simple, stdio-based server that enables seamless integration with Claude Code.
|
|
6
|
+
|
|
7
|
+
**NOTE: MCP is ONLY for Claude Code - NOT for Claude Code.**
|
|
8
|
+
Claude Code uses a different system for agent deployment via the `.claude/agents/` directory.
|
|
9
|
+
|
|
10
|
+
## Architecture
|
|
11
|
+
|
|
12
|
+
The MCP Gateway uses the official Anthropic MCP Python SDK with:
|
|
13
|
+
|
|
14
|
+
- **Standards compliance** with the official MCP specification
|
|
15
|
+
- **Stdio-based communication** for Claude Code integration
|
|
16
|
+
- **Simple JSON-RPC protocol** over stdin/stdout
|
|
17
|
+
- **Tool registry system** for extensible functionality
|
|
18
|
+
- **Comprehensive error handling** and logging
|
|
19
|
+
|
|
20
|
+
## Structure
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
mcp_gateway/
|
|
24
|
+
├── core/ # Core interfaces and base classes
|
|
25
|
+
│ ├── interfaces.py # MCP service interfaces
|
|
26
|
+
│ ├── base.py # Base MCP service class
|
|
27
|
+
│ └── exceptions.py # MCP-specific exceptions
|
|
28
|
+
├── config/ # Configuration management
|
|
29
|
+
│ ├── configuration.py # Main configuration service
|
|
30
|
+
│ ├── config_loader.py # Configuration discovery and loading
|
|
31
|
+
│ └── config_schema.py # Configuration validation
|
|
32
|
+
├── server/ # MCP server implementation (ISS-0035)
|
|
33
|
+
├── tools/ # Tool registry and adapters (ISS-0036)
|
|
34
|
+
└── registry/ # Service discovery and registration
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Features
|
|
38
|
+
|
|
39
|
+
### Implemented
|
|
40
|
+
- ✅ **Official MCP Server** - Standards-compliant implementation using Anthropic's MCP SDK
|
|
41
|
+
- ✅ **Tool Registry System** - Extensible tool management and discovery
|
|
42
|
+
- ✅ **Stdio Communication** - Standard MCP protocol over stdin/stdout
|
|
43
|
+
- ✅ **Configuration Management** - YAML-based configuration with validation
|
|
44
|
+
- ✅ **Built-in Tools** - Echo, calculator, and system info tools
|
|
45
|
+
- ✅ **CLI Integration** - Complete command-line interface for management
|
|
46
|
+
- ✅ **Error Handling** - Comprehensive error handling and logging
|
|
47
|
+
|
|
48
|
+
### Key Features
|
|
49
|
+
- **Protocol Handler** - Stdio-based MCP protocol handler, not a background service
|
|
50
|
+
- **Claude Code Ready** - Direct integration with Claude Code MCP client
|
|
51
|
+
- **Extensible** - Easy to add new tools and capabilities
|
|
52
|
+
- **Standards Compliant** - Follows official MCP specification exactly
|
|
53
|
+
|
|
54
|
+
## Quick Start
|
|
55
|
+
|
|
56
|
+
### 1. Check Status
|
|
57
|
+
```bash
|
|
58
|
+
claude-mpm mcp status
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 2. Test Tools
|
|
62
|
+
```bash
|
|
63
|
+
# Test echo tool
|
|
64
|
+
claude-mpm mcp test echo --args '{"message": "Hello MCP!"}'
|
|
65
|
+
|
|
66
|
+
# Test calculator
|
|
67
|
+
claude-mpm mcp test calculator --args '{"operation": "add", "a": 5, "b": 3}'
|
|
68
|
+
|
|
69
|
+
# Test system info
|
|
70
|
+
claude-mpm mcp test system_info
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 3. Start MCP Gateway Handler
|
|
74
|
+
```bash
|
|
75
|
+
# Start gateway handler for Claude Code integration
|
|
76
|
+
claude-mpm mcp start
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The gateway handler will listen for MCP protocol messages via stdin/stdout. This is typically invoked by Claude Code, not run directly by users.
|
|
80
|
+
|
|
81
|
+
### 4. Claude Code Integration
|
|
82
|
+
Add to your Claude Code configuration (~/.claude.json):
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"mcpServers": {
|
|
86
|
+
"claude-mpm": {
|
|
87
|
+
"command": "python",
|
|
88
|
+
"args": ["-m", "claude_mpm.cli", "mcp", "start"],
|
|
89
|
+
"cwd": "/path/to/claude-mpm"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Configuration
|
|
96
|
+
|
|
97
|
+
The MCP Gateway uses a hierarchical configuration system with the following priority:
|
|
98
|
+
|
|
99
|
+
1. Default configuration (built-in)
|
|
100
|
+
2. Configuration file (YAML)
|
|
101
|
+
3. Environment variables (highest priority)
|
|
102
|
+
|
|
103
|
+
### Configuration File Locations
|
|
104
|
+
|
|
105
|
+
The system searches for configuration in these locations (in order):
|
|
106
|
+
- `~/.claude/mcp/config.yaml` (user-specific)
|
|
107
|
+
- `~/.claude/mcp_gateway.yaml`
|
|
108
|
+
- `~/.config/claude-mpm/mcp_gateway.yaml`
|
|
109
|
+
- `./mcp_gateway.yaml` (project-specific)
|
|
110
|
+
- `./config/mcp_gateway.yaml`
|
|
111
|
+
- `./.claude/mcp_gateway.yaml`
|
|
112
|
+
- `/etc/claude-mpm/mcp_gateway.yaml` (system-wide)
|
|
113
|
+
|
|
114
|
+
### Environment Variables
|
|
115
|
+
|
|
116
|
+
Override configuration using environment variables:
|
|
117
|
+
```bash
|
|
118
|
+
export MCP_GATEWAY_SERVER_NAME=my-gateway
|
|
119
|
+
export MCP_GATEWAY_TOOLS_TIMEOUT_DEFAULT=60
|
|
120
|
+
export MCP_GATEWAY_LOGGING_LEVEL=DEBUG
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Usage
|
|
124
|
+
|
|
125
|
+
### Basic Setup
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
from claude_mpm.services.mcp_gateway import MCPConfiguration, MCPConfigLoader
|
|
129
|
+
|
|
130
|
+
# Load configuration
|
|
131
|
+
config_loader = MCPConfigLoader()
|
|
132
|
+
config = MCPConfiguration()
|
|
133
|
+
await config.initialize()
|
|
134
|
+
|
|
135
|
+
# Access configuration
|
|
136
|
+
server_name = config.get("mcp.server.name")
|
|
137
|
+
tools_enabled = config.get("mcp.tools.enabled")
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Service Registration
|
|
141
|
+
|
|
142
|
+
The MCP Gateway services are automatically registered with the claude-mpm service container:
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
from claude_mpm.services import MCPConfiguration, BaseMCPService
|
|
146
|
+
|
|
147
|
+
# Services are available through lazy loading
|
|
148
|
+
config = MCPConfiguration()
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Development
|
|
152
|
+
|
|
153
|
+
### Adding New MCP Services
|
|
154
|
+
|
|
155
|
+
1. Define the interface in `core/interfaces.py`
|
|
156
|
+
2. Create base implementation in appropriate module
|
|
157
|
+
3. Register in service container if needed
|
|
158
|
+
4. Add lazy import to `__init__.py`
|
|
159
|
+
5. Update documentation
|
|
160
|
+
|
|
161
|
+
### Testing
|
|
162
|
+
|
|
163
|
+
Run tests with:
|
|
164
|
+
```bash
|
|
165
|
+
pytest tests/services/mcp_gateway/
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Dependencies
|
|
169
|
+
|
|
170
|
+
- Python 3.8+
|
|
171
|
+
- mcp>=0.1.0 (Anthropic's MCP package)
|
|
172
|
+
- PyYAML for configuration
|
|
173
|
+
- asyncio for async operations
|
|
174
|
+
|
|
175
|
+
## Related Issues
|
|
176
|
+
|
|
177
|
+
- ISS-0034: Infrastructure Setup (this implementation)
|
|
178
|
+
- ISS-0035: MCP Server Core Implementation
|
|
179
|
+
- ISS-0036: Tool Registry & Discovery System
|
|
180
|
+
- ISS-0037: stdio Communication Handler
|
|
181
|
+
- ISS-0038: Tool Adapter Framework
|
|
182
|
+
|
|
183
|
+
## Notes
|
|
184
|
+
|
|
185
|
+
This is the foundation implementation for the MCP Gateway. The actual server functionality, tool registry, and communication handlers will be implemented in subsequent tickets as part of the EP-0007 epic.
|