claude-mpm 4.1.26__py3-none-any.whl → 4.24.0__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/BUILD_NUMBER +1 -1
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +20 -5
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
- claude_mpm/agents/BASE_DOCUMENTATION.md +53 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/BASE_OPS.md +219 -0
- claude_mpm/agents/BASE_PM.md +420 -158
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +787 -0
- claude_mpm/agents/BASE_QA.md +167 -0
- claude_mpm/agents/BASE_RESEARCH.md +53 -0
- claude_mpm/agents/OUTPUT_STYLE.md +299 -29
- claude_mpm/agents/PM_INSTRUCTIONS.md +1159 -0
- claude_mpm/agents/WORKFLOW.md +355 -191
- claude_mpm/agents/agent_loader.py +40 -10
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/async_agent_loader.py +3 -3
- claude_mpm/agents/base_agent_loader.py +11 -9
- claude_mpm/agents/frontmatter_validator.py +291 -251
- claude_mpm/agents/system_agent_config.py +3 -2
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/agent-manager.json +7 -4
- claude_mpm/agents/templates/{agentic_coder_optimizer.json → agentic-coder-optimizer.json} +33 -7
- claude_mpm/agents/templates/api_qa.json +16 -4
- claude_mpm/agents/templates/circuit_breakers.md +638 -0
- claude_mpm/agents/templates/clerk-ops.json +235 -0
- claude_mpm/agents/templates/code_analyzer.json +10 -4
- claude_mpm/agents/templates/content-agent.json +358 -0
- claude_mpm/agents/templates/dart_engineer.json +307 -0
- claude_mpm/agents/templates/data_engineer.json +87 -14
- claude_mpm/agents/templates/documentation.json +76 -13
- claude_mpm/agents/templates/engineer.json +43 -9
- claude_mpm/agents/templates/gcp_ops_agent.json +253 -0
- claude_mpm/agents/templates/git_file_tracking.md +584 -0
- claude_mpm/agents/templates/golang_engineer.json +270 -0
- claude_mpm/agents/templates/imagemagick.json +5 -2
- claude_mpm/agents/templates/java_engineer.json +346 -0
- claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
- claude_mpm/agents/templates/local_ops_agent.json +1840 -0
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +400 -0
- claude_mpm/agents/templates/memory_manager.json +6 -3
- claude_mpm/agents/templates/nextjs_engineer.json +285 -0
- claude_mpm/agents/templates/ops.json +14 -4
- claude_mpm/agents/templates/php-engineer.json +287 -0
- claude_mpm/agents/templates/pm_examples.md +474 -0
- claude_mpm/agents/templates/pm_red_flags.md +262 -0
- claude_mpm/agents/templates/product_owner.json +338 -0
- claude_mpm/agents/templates/project_organizer.json +19 -5
- claude_mpm/agents/templates/prompt-engineer.json +737 -0
- claude_mpm/agents/templates/python_engineer.json +387 -0
- claude_mpm/agents/templates/qa.json +25 -5
- claude_mpm/agents/templates/react_engineer.json +239 -0
- claude_mpm/agents/templates/refactoring_engineer.json +15 -5
- claude_mpm/agents/templates/research.json +46 -21
- claude_mpm/agents/templates/response_format.md +583 -0
- claude_mpm/agents/templates/ruby-engineer.json +280 -0
- claude_mpm/agents/templates/rust_engineer.json +275 -0
- claude_mpm/agents/templates/security.json +59 -10
- claude_mpm/agents/templates/svelte-engineer.json +225 -0
- claude_mpm/agents/templates/tauri_engineer.json +274 -0
- claude_mpm/agents/templates/ticketing.json +16 -7
- claude_mpm/agents/templates/typescript_engineer.json +285 -0
- claude_mpm/agents/templates/validation_templates.md +312 -0
- claude_mpm/agents/templates/vercel_ops_agent.json +164 -33
- claude_mpm/agents/templates/version_control.json +16 -4
- claude_mpm/agents/templates/web_qa.json +167 -21
- claude_mpm/agents/templates/web_ui.json +18 -5
- claude_mpm/cli/__init__.py +38 -378
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_manager.py +675 -20
- claude_mpm/cli/commands/agent_state_manager.py +186 -0
- claude_mpm/cli/commands/agents.py +722 -150
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- claude_mpm/cli/commands/aggregate.py +10 -6
- claude_mpm/cli/commands/analyze.py +15 -10
- claude_mpm/cli/commands/analyze_code.py +8 -4
- claude_mpm/cli/commands/auto_configure.py +570 -0
- claude_mpm/cli/commands/cleanup.py +12 -12
- claude_mpm/cli/commands/config.py +47 -13
- claude_mpm/cli/commands/configure.py +469 -1064
- claude_mpm/cli/commands/configure_agent_display.py +261 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +167 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/dashboard.py +50 -52
- claude_mpm/cli/commands/debug.py +7 -7
- claude_mpm/cli/commands/doctor.py +43 -7
- claude_mpm/cli/commands/info.py +3 -4
- claude_mpm/cli/commands/local_deploy.py +537 -0
- claude_mpm/cli/commands/mcp.py +17 -10
- claude_mpm/cli/commands/mcp_command_router.py +11 -0
- claude_mpm/cli/commands/mcp_config.py +154 -0
- claude_mpm/cli/commands/mcp_external_commands.py +249 -0
- claude_mpm/cli/commands/mcp_install_commands.py +101 -32
- claude_mpm/cli/commands/mcp_pipx_config.py +2 -2
- claude_mpm/cli/commands/mcp_setup_external.py +868 -0
- claude_mpm/cli/commands/memory.py +55 -21
- claude_mpm/cli/commands/monitor.py +160 -70
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +525 -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 +114 -4
- claude_mpm/cli/commands/run.py +169 -42
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skills.py +488 -0
- claude_mpm/cli/commands/uninstall.py +176 -0
- claude_mpm/cli/commands/upgrade.py +152 -0
- claude_mpm/cli/commands/verify.py +119 -0
- claude_mpm/cli/executor.py +204 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +962 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parser.py +79 -2
- claude_mpm/cli/parsers/__init__.py +7 -1
- claude_mpm/cli/parsers/agent_manager_parser.py +161 -1
- claude_mpm/cli/parsers/agents_parser.py +116 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +143 -3
- claude_mpm/cli/parsers/configure_parser.py +11 -15
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mcp_parser.py +15 -0
- claude_mpm/cli/parsers/monitor_parser.py +12 -2
- claude_mpm/cli/parsers/mpm_init_parser.py +179 -9
- claude_mpm/cli/parsers/run_parser.py +5 -0
- claude_mpm/cli/parsers/search_parser.py +245 -0
- claude_mpm/cli/parsers/skills_parser.py +137 -0
- claude_mpm/cli/shared/argument_patterns.py +20 -13
- claude_mpm/cli/shared/base_command.py +2 -2
- claude_mpm/cli/shared/output_formatters.py +28 -19
- claude_mpm/cli/startup.py +562 -0
- claude_mpm/cli/startup_logging.py +179 -13
- claude_mpm/cli/utils.py +53 -2
- claude_mpm/commands/mpm-agents-detect.md +168 -0
- claude_mpm/commands/mpm-agents-recommend.md +214 -0
- claude_mpm/commands/mpm-agents.md +118 -8
- claude_mpm/commands/mpm-auto-configure.md +269 -0
- claude_mpm/commands/mpm-config.md +137 -14
- claude_mpm/commands/mpm-help.md +285 -5
- claude_mpm/commands/mpm-init.md +374 -15
- claude_mpm/commands/mpm-monitor.md +409 -0
- claude_mpm/commands/mpm-organize.md +295 -0
- claude_mpm/commands/mpm-resume.md +372 -0
- claude_mpm/commands/mpm-status.md +71 -9
- claude_mpm/commands/mpm-tickets.md +56 -7
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +2 -0
- claude_mpm/config/agent_config.py +4 -4
- claude_mpm/config/experimental_features.py +7 -7
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/config/paths.py +3 -2
- claude_mpm/config/socketio_config.py +3 -3
- claude_mpm/constants.py +15 -1
- claude_mpm/core/__init__.py +53 -17
- claude_mpm/core/agent_name_normalizer.py +3 -2
- claude_mpm/core/agent_registry.py +2 -2
- claude_mpm/core/agent_session_manager.py +10 -10
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/base_service.py +33 -23
- claude_mpm/core/cache.py +9 -9
- claude_mpm/core/claude_runner.py +19 -8
- claude_mpm/core/config.py +85 -8
- claude_mpm/core/config_aliases.py +7 -6
- claude_mpm/core/constants.py +65 -0
- claude_mpm/core/container.py +11 -5
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/error_handler.py +623 -0
- claude_mpm/core/factories.py +1 -1
- claude_mpm/core/file_utils.py +764 -0
- claude_mpm/core/framework/__init__.py +38 -0
- claude_mpm/core/framework/formatters/__init__.py +11 -0
- claude_mpm/core/framework/formatters/capability_generator.py +367 -0
- claude_mpm/core/framework/formatters/content_formatter.py +288 -0
- claude_mpm/core/framework/formatters/context_generator.py +185 -0
- claude_mpm/core/framework/loaders/__init__.py +13 -0
- claude_mpm/core/framework/loaders/agent_loader.py +210 -0
- claude_mpm/core/framework/loaders/file_loader.py +223 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +161 -0
- claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
- claude_mpm/core/framework/processors/__init__.py +11 -0
- claude_mpm/core/framework/processors/memory_processor.py +230 -0
- claude_mpm/core/framework/processors/metadata_processor.py +146 -0
- claude_mpm/core/framework/processors/template_processor.py +244 -0
- claude_mpm/core/framework_loader.py +321 -1631
- claude_mpm/core/hook_manager.py +8 -6
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +4 -3
- claude_mpm/core/interactive_session.py +55 -8
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/lazy.py +3 -3
- claude_mpm/core/log_manager.py +92 -23
- claude_mpm/core/logger.py +19 -14
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/oneshot_session.py +51 -7
- claude_mpm/core/optimized_agent_loader.py +9 -9
- claude_mpm/core/optimized_startup.py +1 -1
- claude_mpm/core/output_style_manager.py +12 -192
- claude_mpm/core/pm_hook_interceptor.py +18 -12
- claude_mpm/core/service_registry.py +7 -3
- claude_mpm/core/session_manager.py +14 -12
- claude_mpm/core/shared/config_loader.py +1 -1
- claude_mpm/core/socketio_pool.py +15 -15
- claude_mpm/core/tool_access_control.py +3 -2
- claude_mpm/core/types.py +4 -11
- claude_mpm/core/typing_utils.py +7 -6
- claude_mpm/core/unified_agent_registry.py +115 -11
- claude_mpm/core/unified_config.py +6 -6
- claude_mpm/core/unified_paths.py +23 -20
- claude_mpm/dashboard/analysis_runner.py +4 -4
- claude_mpm/dashboard/api/simple_directory.py +261 -0
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +188 -0
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +156 -0
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +38 -0
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +92 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +248 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +61 -0
- claude_mpm/dashboard/static/archive/test_activity_connection.html +179 -0
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +68 -0
- claude_mpm/dashboard/static/archive/test_dashboard.html +409 -0
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +519 -0
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +181 -0
- claude_mpm/dashboard/static/archive/test_file_data.html +315 -0
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +243 -0
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +234 -0
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +117 -0
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +115 -0
- claude_mpm/dashboard/static/archive/test_file_viewer.html +224 -0
- claude_mpm/dashboard/static/archive/test_final_activity.html +220 -0
- claude_mpm/dashboard/static/archive/test_tab_fix.html +139 -0
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/built/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +777 -0
- claude_mpm/dashboard/static/built/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/built/components/build-tracker.js +333 -0
- claude_mpm/dashboard/static/built/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +353 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +235 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +409 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +435 -0
- claude_mpm/dashboard/static/built/components/code-tree.js +1 -1
- claude_mpm/dashboard/static/built/components/code-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/connection-debug.js +654 -0
- claude_mpm/dashboard/static/built/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/built/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/built/components/file-viewer.js +2 -0
- claude_mpm/dashboard/static/built/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/nav-bar.js +145 -0
- claude_mpm/dashboard/static/built/components/page-structure.js +429 -0
- claude_mpm/dashboard/static/built/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/built/connection-manager.js +536 -0
- claude_mpm/dashboard/static/built/dashboard.js +1 -1
- claude_mpm/dashboard/static/built/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/built/react/events.js +30 -0
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +396 -0
- claude_mpm/dashboard/static/built/shared/event-bus.js +330 -0
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +540 -0
- claude_mpm/dashboard/static/built/shared/logger.js +385 -0
- claude_mpm/dashboard/static/built/shared/page-structure.js +249 -0
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +253 -0
- claude_mpm/dashboard/static/built/socket-client.js +1 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/css/dashboard.css +588 -6
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/dist/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/dist/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/dist/dashboard.js +1 -1
- claude_mpm/dashboard/static/dist/react/events.js +30 -0
- claude_mpm/dashboard/static/dist/socket-client.js +1 -1
- claude_mpm/dashboard/static/events.html +607 -0
- claude_mpm/dashboard/static/index.html +635 -0
- claude_mpm/dashboard/static/js/components/activity-tree.js +3 -17
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +4 -1
- claude_mpm/dashboard/static/js/components/agent-inference.js +3 -0
- claude_mpm/dashboard/static/js/components/build-tracker.js +8 -0
- claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/js/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
- claude_mpm/dashboard/static/js/components/event-viewer.js +39 -2
- claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +30 -10
- claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +26 -0
- claude_mpm/dashboard/static/js/components/session-manager.js +7 -7
- claude_mpm/dashboard/static/js/components/socket-manager.js +4 -0
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +455 -23
- claude_mpm/dashboard/static/js/components/working-directory.js +44 -9
- claude_mpm/dashboard/static/js/dashboard.js +245 -132
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +396 -0
- claude_mpm/dashboard/static/js/shared/event-bus.js +330 -0
- claude_mpm/dashboard/static/js/shared/logger.js +385 -0
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +253 -0
- claude_mpm/dashboard/static/js/socket-client.js +49 -22
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +562 -0
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/legacy/activity.html +736 -0
- claude_mpm/dashboard/static/legacy/agents.html +786 -0
- claude_mpm/dashboard/static/legacy/files.html +747 -0
- claude_mpm/dashboard/static/legacy/tools.html +831 -0
- claude_mpm/dashboard/static/monitors.html +431 -0
- claude_mpm/dashboard/static/production/events.html +659 -0
- claude_mpm/dashboard/static/production/main.html +698 -0
- claude_mpm/dashboard/static/production/monitors.html +483 -0
- claude_mpm/dashboard/static/socket.io.min.js +7 -0
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
- claude_mpm/dashboard/static/test-archive/dashboard.html +635 -0
- claude_mpm/dashboard/static/test-archive/debug-events.html +147 -0
- claude_mpm/dashboard/static/test-archive/test-navigation.html +256 -0
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +180 -0
- claude_mpm/dashboard/static/test-archive/test_debug.html +25 -0
- claude_mpm/dashboard/templates/code_simple.html +153 -0
- claude_mpm/dashboard/templates/index.html +112 -109
- claude_mpm/experimental/cli_enhancements.py +4 -2
- claude_mpm/generators/agent_profile_generator.py +5 -3
- claude_mpm/hooks/__init__.py +37 -1
- claude_mpm/hooks/base_hook.py +5 -4
- claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
- claude_mpm/hooks/claude_hooks/event_handlers.py +21 -18
- claude_mpm/hooks/claude_hooks/hook_handler.py +29 -22
- claude_mpm/hooks/claude_hooks/installer.py +67 -22
- claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
- claude_mpm/hooks/claude_hooks/response_tracking.py +57 -17
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +62 -64
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +140 -76
- claude_mpm/hooks/claude_hooks/services/state_manager.py +11 -9
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
- claude_mpm/hooks/failure_learning/__init__.py +60 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +235 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +217 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +286 -0
- claude_mpm/hooks/instruction_reinforcement.py +301 -0
- claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
- claude_mpm/hooks/kuzu_memory_hook.py +386 -0
- claude_mpm/hooks/kuzu_response_hook.py +183 -0
- claude_mpm/hooks/memory_integration_hook.py +1 -1
- claude_mpm/hooks/session_resume_hook.py +121 -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/tool_call_interceptor.py +8 -5
- claude_mpm/hooks/validation_hooks.py +3 -3
- claude_mpm/init.py +23 -4
- claude_mpm/models/agent_session.py +8 -6
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/scripts/claude-hook-handler.sh +33 -7
- claude_mpm/scripts/launch_monitor.py +85 -0
- claude_mpm/scripts/mcp_server.py +3 -5
- claude_mpm/scripts/mpm_doctor.py +3 -2
- claude_mpm/scripts/socketio_daemon.py +159 -512
- claude_mpm/services/__init__.py +144 -160
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/agent_builder.py +13 -11
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_deployment.py +38 -15
- claude_mpm/services/agents/deployment/agent_discovery_service.py +125 -7
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +5 -5
- claude_mpm/services/agents/deployment/agent_format_converter.py +56 -12
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +4 -2
- claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_record_service.py +4 -4
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +715 -47
- claude_mpm/services/agents/deployment/agent_validator.py +31 -7
- claude_mpm/services/agents/deployment/agent_version_manager.py +8 -5
- claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
- claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
- claude_mpm/services/agents/deployment/deployment_config_loader.py +131 -7
- claude_mpm/services/agents/deployment/deployment_type_detector.py +10 -14
- claude_mpm/services/agents/deployment/deployment_wrapper.py +58 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
- claude_mpm/services/agents/deployment/local_template_deployment.py +360 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +134 -38
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +8 -7
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +7 -5
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +9 -6
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/template_validator.py +64 -44
- claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
- claude_mpm/services/agents/loading/agent_profile_loader.py +10 -9
- claude_mpm/services/agents/loading/base_agent_manager.py +16 -6
- claude_mpm/services/agents/loading/framework_agent_loader.py +2 -2
- claude_mpm/services/agents/local_template_manager.py +744 -0
- claude_mpm/services/agents/management/agent_capabilities_generator.py +3 -2
- claude_mpm/services/agents/management/agent_management_service.py +5 -5
- claude_mpm/services/agents/memory/agent_memory_manager.py +32 -29
- claude_mpm/services/agents/memory/content_manager.py +17 -9
- claude_mpm/services/agents/memory/memory_categorization_service.py +4 -2
- claude_mpm/services/agents/memory/memory_file_service.py +32 -6
- claude_mpm/services/agents/memory/memory_format_service.py +6 -4
- claude_mpm/services/agents/memory/memory_limits_service.py +4 -2
- claude_mpm/services/agents/memory/template_generator.py +3 -3
- claude_mpm/services/agents/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +615 -0
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +3 -3
- claude_mpm/services/agents/registry/modification_tracker.py +30 -19
- claude_mpm/services/async_session_logger.py +141 -98
- claude_mpm/services/claude_session_logger.py +82 -74
- claude_mpm/services/cli/agent_cleanup_service.py +5 -0
- claude_mpm/services/cli/agent_listing_service.py +5 -5
- claude_mpm/services/cli/agent_validation_service.py +3 -1
- claude_mpm/services/cli/memory_crud_service.py +12 -7
- claude_mpm/services/cli/memory_output_formatter.py +2 -2
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +104 -13
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +372 -0
- claude_mpm/services/cli/startup_checker.py +13 -10
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +9 -7
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/base.py +26 -11
- claude_mpm/services/core/interfaces/__init__.py +90 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- claude_mpm/services/core/interfaces/health.py +172 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/project.py +121 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/memory_manager.py +92 -47
- claude_mpm/services/core/models/__init__.py +79 -0
- claude_mpm/services/core/models/agent_config.py +384 -0
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +239 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/models/toolchain.py +306 -0
- claude_mpm/services/core/path_resolver.py +36 -14
- claude_mpm/services/diagnostics/__init__.py +2 -2
- claude_mpm/services/diagnostics/checks/__init__.py +4 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +30 -32
- claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
- claude_mpm/services/diagnostics/checks/common_issues_check.py +28 -27
- claude_mpm/services/diagnostics/checks/configuration_check.py +26 -25
- claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
- claude_mpm/services/diagnostics/checks/installation_check.py +165 -60
- claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
- claude_mpm/services/diagnostics/checks/mcp_check.py +57 -43
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1066 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +24 -23
- claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
- claude_mpm/services/diagnostics/diagnostic_runner.py +22 -13
- claude_mpm/services/diagnostics/doctor_reporter.py +275 -47
- claude_mpm/services/diagnostics/models.py +37 -21
- claude_mpm/services/event_aggregator.py +5 -3
- claude_mpm/services/event_bus/direct_relay.py +8 -4
- claude_mpm/services/event_bus/event_bus.py +51 -9
- claude_mpm/services/event_bus/relay.py +33 -14
- claude_mpm/services/events/consumers/dead_letter.py +7 -5
- claude_mpm/services/events/core.py +5 -6
- claude_mpm/services/events/producers/hook.py +6 -6
- claude_mpm/services/events/producers/system.py +8 -8
- claude_mpm/services/exceptions.py +5 -5
- claude_mpm/services/framework_claude_md_generator/__init__.py +1 -1
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +5 -5
- claude_mpm/services/framework_claude_md_generator/content_validator.py +2 -2
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +3 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
- claude_mpm/services/framework_claude_md_generator/version_manager.py +1 -1
- claude_mpm/services/hook_installer_service.py +506 -0
- claude_mpm/services/hook_service.py +5 -6
- claude_mpm/services/infrastructure/context_preservation.py +13 -11
- claude_mpm/services/infrastructure/daemon_manager.py +9 -9
- claude_mpm/services/infrastructure/logging.py +2 -2
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -1
- claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
- claude_mpm/services/infrastructure/monitoring/base.py +5 -13
- claude_mpm/services/infrastructure/monitoring/network.py +7 -6
- claude_mpm/services/infrastructure/monitoring/process.py +13 -12
- claude_mpm/services/infrastructure/monitoring/resources.py +8 -7
- claude_mpm/services/infrastructure/monitoring/service.py +16 -15
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/local_ops/__init__.py +165 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +28 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +430 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +1612 -0
- claude_mpm/services/mcp_gateway/__init__.py +97 -93
- claude_mpm/services/mcp_gateway/auto_configure.py +43 -38
- claude_mpm/services/mcp_gateway/config/config_loader.py +3 -3
- claude_mpm/services/mcp_gateway/config/configuration.py +23 -4
- claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
- claude_mpm/services/mcp_gateway/core/base.py +20 -33
- claude_mpm/services/mcp_gateway/core/process_pool.py +585 -31
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +2 -2
- claude_mpm/services/mcp_gateway/core/startup_verification.py +3 -3
- claude_mpm/services/mcp_gateway/main.py +90 -15
- claude_mpm/services/mcp_gateway/registry/service_registry.py +4 -2
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +12 -9
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +4 -4
- claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -15
- claude_mpm/services/mcp_gateway/tools/__init__.py +14 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +10 -9
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +654 -0
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +36 -34
- claude_mpm/services/mcp_gateway/tools/hello_world.py +8 -8
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +551 -0
- claude_mpm/services/mcp_gateway/utils/__init__.py +14 -0
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +160 -0
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +170 -0
- claude_mpm/services/mcp_service_verifier.py +729 -0
- claude_mpm/services/memory/builder.py +9 -8
- claude_mpm/services/memory/cache/shared_prompt_cache.py +2 -1
- claude_mpm/services/memory/cache/simple_cache.py +2 -2
- claude_mpm/services/memory/failure_tracker.py +578 -0
- claude_mpm/services/memory/indexed_memory.py +8 -8
- claude_mpm/services/memory/optimizer.py +8 -9
- claude_mpm/services/memory/router.py +3 -3
- claude_mpm/services/memory_hook_service.py +165 -4
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +453 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +671 -0
- claude_mpm/services/monitor/daemon_manager.py +963 -0
- claude_mpm/services/monitor/event_emitter.py +350 -0
- claude_mpm/services/monitor/handlers/__init__.py +21 -0
- claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
- claude_mpm/services/monitor/handlers/dashboard.py +299 -0
- claude_mpm/services/monitor/handlers/file.py +264 -0
- claude_mpm/services/monitor/handlers/hooks.py +512 -0
- claude_mpm/services/monitor/management/__init__.py +18 -0
- claude_mpm/services/monitor/management/health.py +124 -0
- claude_mpm/services/monitor/management/lifecycle.py +724 -0
- claude_mpm/services/monitor/server.py +817 -0
- claude_mpm/services/monitor_build_service.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/orphan_detection.py +786 -0
- claude_mpm/services/port_manager.py +2 -2
- claude_mpm/services/project/__init__.py +23 -0
- claude_mpm/services/project/analyzer.py +3 -3
- claude_mpm/services/project/architecture_analyzer.py +5 -5
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +4 -4
- claude_mpm/services/project/detection_strategies.py +719 -0
- claude_mpm/services/project/documentation_manager.py +553 -0
- claude_mpm/services/project/enhanced_analyzer.py +572 -0
- claude_mpm/services/project/metrics_collector.py +4 -4
- claude_mpm/services/project/project_organizer.py +1005 -0
- claude_mpm/services/project/registry.py +13 -7
- claude_mpm/services/project/toolchain_analyzer.py +581 -0
- claude_mpm/services/project_port_allocator.py +596 -0
- claude_mpm/services/response_tracker.py +21 -10
- claude_mpm/services/runner_configuration_service.py +1 -0
- claude_mpm/services/self_upgrade_service.py +500 -0
- claude_mpm/services/session_management_service.py +7 -5
- claude_mpm/services/session_manager.py +380 -0
- claude_mpm/services/shared/__init__.py +2 -1
- claude_mpm/services/shared/async_service_base.py +16 -27
- claude_mpm/services/shared/config_service_base.py +17 -14
- claude_mpm/services/shared/lifecycle_service_base.py +1 -14
- claude_mpm/services/shared/service_factory.py +8 -5
- claude_mpm/services/socketio/client_proxy.py +60 -5
- claude_mpm/services/socketio/dashboard_server.py +361 -0
- claude_mpm/services/socketio/event_normalizer.py +10 -6
- claude_mpm/services/socketio/handlers/__init__.py +5 -2
- claude_mpm/services/socketio/handlers/base.py +2 -2
- claude_mpm/services/socketio/handlers/code_analysis.py +90 -27
- claude_mpm/services/socketio/handlers/connection.py +21 -40
- claude_mpm/services/socketio/handlers/connection_handler.py +13 -10
- claude_mpm/services/socketio/handlers/file.py +46 -10
- claude_mpm/services/socketio/handlers/git.py +8 -8
- claude_mpm/services/socketio/handlers/hook.py +29 -17
- claude_mpm/services/socketio/handlers/registry.py +4 -2
- claude_mpm/services/socketio/monitor_client.py +364 -0
- claude_mpm/services/socketio/server/broadcaster.py +9 -7
- claude_mpm/services/socketio/server/connection_manager.py +2 -2
- claude_mpm/services/socketio/server/core.py +141 -4
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +23 -21
- claude_mpm/services/socketio_client_manager.py +4 -4
- claude_mpm/services/subprocess_launcher_service.py +19 -15
- claude_mpm/services/system_instructions_service.py +2 -2
- claude_mpm/services/ticket_services/formatter_service.py +1 -1
- claude_mpm/services/ticket_services/validation_service.py +5 -5
- claude_mpm/services/unified/__init__.py +65 -0
- claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +903 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +746 -0
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
- claude_mpm/services/unified/config_strategies/__init__.py +175 -0
- claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
- claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
- claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
- claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
- claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
- claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
- claude_mpm/services/unified/deployment_strategies/base.py +553 -0
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
- claude_mpm/services/unified/deployment_strategies/local.py +607 -0
- claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
- claude_mpm/services/unified/deployment_strategies/vercel.py +475 -0
- claude_mpm/services/unified/interfaces.py +475 -0
- claude_mpm/services/unified/migration.py +509 -0
- claude_mpm/services/unified/strategies.py +534 -0
- claude_mpm/services/unified/unified_analyzer.py +542 -0
- claude_mpm/services/unified/unified_config.py +691 -0
- claude_mpm/services/unified/unified_deployment.py +470 -0
- claude_mpm/services/utility_service.py +6 -3
- claude_mpm/services/version_control/branch_strategy.py +2 -2
- claude_mpm/services/version_control/conflict_resolution.py +8 -4
- claude_mpm/services/version_control/git_operations.py +26 -24
- claude_mpm/services/version_control/semantic_versioning.py +14 -14
- claude_mpm/services/version_control/version_parser.py +14 -11
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/skills/__init__.py +42 -0
- claude_mpm/skills/agent_skills_injector.py +324 -0
- claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- 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/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- 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/database-migration.md +199 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -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/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -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 +499 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- 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 +303 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +573 -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/refactoring-patterns.md +180 -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/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- 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/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
- 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 +129 -0
- 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/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +310 -0
- claude_mpm/skills/skills_registry.py +348 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/state_storage.py +31 -31
- claude_mpm/tools/__main__.py +1 -1
- 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/tools/code_tree_builder.py +6 -6
- claude_mpm/tools/code_tree_events.py +14 -10
- claude_mpm/tools/socketio_debug.py +11 -11
- claude_mpm/utils/agent_dependency_loader.py +108 -27
- claude_mpm/utils/common.py +544 -0
- claude_mpm/utils/config_manager.py +12 -6
- claude_mpm/utils/database_connector.py +298 -0
- claude_mpm/utils/dependency_cache.py +2 -2
- claude_mpm/utils/dependency_strategies.py +15 -10
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/environment_context.py +4 -3
- claude_mpm/utils/error_handler.py +5 -3
- claude_mpm/utils/file_utils.py +13 -14
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/path_operations.py +7 -4
- claude_mpm/utils/robust_installer.py +133 -24
- claude_mpm/utils/session_logging.py +2 -2
- claude_mpm/utils/subprocess_utils.py +9 -8
- claude_mpm/validation/agent_validator.py +6 -6
- claude_mpm/validation/frontmatter_validator.py +6 -6
- claude_mpm-4.24.0.dist-info/METADATA +675 -0
- claude_mpm-4.24.0.dist-info/RECORD +1018 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -261
- claude_mpm/agents/templates/agent-manager.md +0 -619
- claude_mpm/cli/commands/configure_tui.py +0 -1927
- claude_mpm/cli/commands/mpm_init.py +0 -594
- claude_mpm/cli/commands/socketio_monitor.py +0 -233
- claude_mpm/dashboard/static/css/code-tree.css +0 -1408
- claude_mpm/dashboard/static/js/components/code-tree.js +0 -3220
- claude_mpm/dashboard/static/js/components/code-viewer.js +0 -480
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1040
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
- claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
- claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
- claude_mpm/scripts/socketio_server_manager.py +0 -349
- claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
- claude_mpm/services/cli/dashboard_launcher.py +0 -423
- claude_mpm/services/cli/socketio_manager.py +0 -537
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -286
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -645
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -602
- claude_mpm/services/project/analyzer_refactored.py +0 -450
- claude_mpm/tools/code_tree_analyzer.py +0 -1693
- claude_mpm-4.1.26.dist-info/METADATA +0 -332
- claude_mpm-4.1.26.dist-info/RECORD +0 -606
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/top_level.txt +0 -0
|
@@ -11,13 +11,15 @@ WHY pyee over alternatives:
|
|
|
11
11
|
import asyncio
|
|
12
12
|
import logging
|
|
13
13
|
import threading
|
|
14
|
-
from datetime import datetime
|
|
14
|
+
from datetime import datetime, timezone
|
|
15
15
|
from typing import Any, Callable, Dict, List, Optional, Set
|
|
16
16
|
|
|
17
17
|
from pyee.asyncio import AsyncIOEventEmitter
|
|
18
18
|
|
|
19
19
|
# Configure logger
|
|
20
|
-
|
|
20
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
21
|
+
|
|
22
|
+
logger = get_logger(__name__)
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
class EventBus:
|
|
@@ -63,6 +65,12 @@ class EventBus:
|
|
|
63
65
|
self._event_history: List[Dict[str, Any]] = []
|
|
64
66
|
self._max_history_size = 100
|
|
65
67
|
|
|
68
|
+
# Track async handler tasks to prevent garbage collection
|
|
69
|
+
self._handler_tasks: Set[asyncio.Task] = set()
|
|
70
|
+
|
|
71
|
+
# Track handler wrappers for removal
|
|
72
|
+
self._handler_wrappers: Dict[tuple, Callable] = {}
|
|
73
|
+
|
|
66
74
|
logger.info("EventBus initialized")
|
|
67
75
|
|
|
68
76
|
@classmethod
|
|
@@ -188,13 +196,17 @@ class EventBus:
|
|
|
188
196
|
try:
|
|
189
197
|
# Call with event_type and data for wildcard handlers
|
|
190
198
|
if asyncio.iscoroutinefunction(handler):
|
|
191
|
-
# Schedule async handlers
|
|
199
|
+
# Schedule async handlers with tracking
|
|
192
200
|
try:
|
|
193
201
|
loop = asyncio.get_event_loop()
|
|
194
202
|
if loop.is_running():
|
|
195
|
-
asyncio.create_task(
|
|
203
|
+
task = asyncio.create_task(
|
|
196
204
|
handler(event_type, data)
|
|
197
205
|
)
|
|
206
|
+
self._handler_tasks.add(task)
|
|
207
|
+
task.add_done_callback(
|
|
208
|
+
self._handler_tasks.discard
|
|
209
|
+
)
|
|
198
210
|
else:
|
|
199
211
|
loop.run_until_complete(
|
|
200
212
|
handler(event_type, data)
|
|
@@ -210,7 +222,7 @@ class EventBus:
|
|
|
210
222
|
|
|
211
223
|
# Update stats
|
|
212
224
|
self._stats["events_published"] += 1
|
|
213
|
-
self._stats["last_event_time"] = datetime.now().isoformat()
|
|
225
|
+
self._stats["last_event_time"] = datetime.now(timezone.utc).isoformat()
|
|
214
226
|
|
|
215
227
|
if self._debug:
|
|
216
228
|
logger.debug(f"Published event: {event_type}")
|
|
@@ -257,8 +269,20 @@ class EventBus:
|
|
|
257
269
|
|
|
258
270
|
logger.debug(f"Registered wildcard handler for: {event_type}")
|
|
259
271
|
else:
|
|
260
|
-
#
|
|
261
|
-
|
|
272
|
+
# Wrap handler to catch exceptions and prevent them from stopping other handlers
|
|
273
|
+
def safe_handler(data):
|
|
274
|
+
try:
|
|
275
|
+
handler(data)
|
|
276
|
+
except Exception as e:
|
|
277
|
+
if self._debug:
|
|
278
|
+
logger.debug(f"Handler error for {event_type}: {e}")
|
|
279
|
+
|
|
280
|
+
# Store mapping for later removal
|
|
281
|
+
wrapper_key = (event_type, handler)
|
|
282
|
+
self._handler_wrappers[wrapper_key] = safe_handler
|
|
283
|
+
|
|
284
|
+
# Regular event registration with wrapped handler
|
|
285
|
+
self._emitter.on(event_type, safe_handler)
|
|
262
286
|
logger.debug(f"Registered handler for: {event_type}")
|
|
263
287
|
|
|
264
288
|
def once(self, event_type: str, handler: Callable) -> None:
|
|
@@ -278,7 +302,17 @@ class EventBus:
|
|
|
278
302
|
event_type: The event type
|
|
279
303
|
handler: The handler to remove
|
|
280
304
|
"""
|
|
281
|
-
|
|
305
|
+
# Check if we have a wrapped version of this handler
|
|
306
|
+
wrapper_key = (event_type, handler)
|
|
307
|
+
if wrapper_key in self._handler_wrappers:
|
|
308
|
+
# Remove the wrapped handler from pyee
|
|
309
|
+
wrapped_handler = self._handler_wrappers[wrapper_key]
|
|
310
|
+
self._emitter.remove_listener(event_type, wrapped_handler)
|
|
311
|
+
# Remove from our tracking dict
|
|
312
|
+
del self._handler_wrappers[wrapper_key]
|
|
313
|
+
else:
|
|
314
|
+
# No wrapper, remove directly (e.g., for wildcard handlers or direct registrations)
|
|
315
|
+
self._emitter.remove_listener(event_type, handler)
|
|
282
316
|
logger.debug(f"Removed handler for: {event_type}")
|
|
283
317
|
|
|
284
318
|
def remove_all_listeners(self, event_type: Optional[str] = None) -> None:
|
|
@@ -289,9 +323,17 @@ class EventBus:
|
|
|
289
323
|
"""
|
|
290
324
|
if event_type:
|
|
291
325
|
self._emitter.remove_all_listeners(event_type)
|
|
326
|
+
# Clean up wrappers for this event type
|
|
327
|
+
wrappers_to_remove = [
|
|
328
|
+
key for key in self._handler_wrappers if key[0] == event_type
|
|
329
|
+
]
|
|
330
|
+
for key in wrappers_to_remove:
|
|
331
|
+
del self._handler_wrappers[key]
|
|
292
332
|
logger.debug(f"Removed all handlers for: {event_type}")
|
|
293
333
|
else:
|
|
294
334
|
self._emitter.remove_all_listeners()
|
|
335
|
+
# Clean up all wrappers
|
|
336
|
+
self._handler_wrappers.clear()
|
|
295
337
|
logger.debug("Removed all event handlers")
|
|
296
338
|
|
|
297
339
|
def _record_event(self, event_type: str, data: Any) -> None:
|
|
@@ -302,7 +344,7 @@ class EventBus:
|
|
|
302
344
|
data: The event data
|
|
303
345
|
"""
|
|
304
346
|
event_record = {
|
|
305
|
-
"timestamp": datetime.now().isoformat(),
|
|
347
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
306
348
|
"type": event_type,
|
|
307
349
|
"data": data,
|
|
308
350
|
}
|
|
@@ -8,10 +8,10 @@ WHY separate relay component:
|
|
|
8
8
|
- Supports batching and retry logic in one place
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
-
import logging
|
|
12
11
|
import os
|
|
12
|
+
import threading
|
|
13
13
|
import time
|
|
14
|
-
from datetime import datetime
|
|
14
|
+
from datetime import datetime, timezone
|
|
15
15
|
from typing import Any, Dict, Optional
|
|
16
16
|
|
|
17
17
|
# Socket.IO imports
|
|
@@ -25,10 +25,12 @@ except ImportError:
|
|
|
25
25
|
|
|
26
26
|
import contextlib
|
|
27
27
|
|
|
28
|
+
# Configure logger
|
|
29
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
30
|
+
|
|
28
31
|
from .event_bus import EventBus
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
logger = logging.getLogger(__name__)
|
|
33
|
+
logger = get_logger(__name__)
|
|
32
34
|
|
|
33
35
|
|
|
34
36
|
class SocketIORelay:
|
|
@@ -151,7 +153,7 @@ class SocketIORelay:
|
|
|
151
153
|
# Verify connection is still alive
|
|
152
154
|
if self.client.connected:
|
|
153
155
|
return True
|
|
154
|
-
except:
|
|
156
|
+
except Exception:
|
|
155
157
|
pass
|
|
156
158
|
|
|
157
159
|
# Need to create or reconnect
|
|
@@ -187,7 +189,9 @@ class SocketIORelay:
|
|
|
187
189
|
"subtype": (
|
|
188
190
|
event_type.split(".", 1)[1] if "." in event_type else "generic"
|
|
189
191
|
),
|
|
190
|
-
"timestamp": data.get(
|
|
192
|
+
"timestamp": data.get(
|
|
193
|
+
"timestamp", datetime.now(timezone.utc).isoformat()
|
|
194
|
+
),
|
|
191
195
|
"data": data,
|
|
192
196
|
"source": "event_bus",
|
|
193
197
|
},
|
|
@@ -195,7 +199,7 @@ class SocketIORelay:
|
|
|
195
199
|
|
|
196
200
|
# Update statistics
|
|
197
201
|
self.stats["events_relayed"] += 1
|
|
198
|
-
self.stats["last_relay_time"] = datetime.now().isoformat()
|
|
202
|
+
self.stats["last_relay_time"] = datetime.now(timezone.utc).isoformat()
|
|
199
203
|
|
|
200
204
|
if self.debug:
|
|
201
205
|
logger.debug(f"Relayed event to Socket.IO: {event_type}")
|
|
@@ -268,11 +272,15 @@ class SocketIORelay:
|
|
|
268
272
|
|
|
269
273
|
# Global relay instance
|
|
270
274
|
_relay_instance: Optional[SocketIORelay] = None
|
|
275
|
+
_relay_lock = threading.Lock()
|
|
271
276
|
|
|
272
277
|
|
|
273
278
|
def get_relay(port: Optional[int] = None) -> SocketIORelay:
|
|
274
279
|
"""Get or create the global SocketIO relay instance.
|
|
275
280
|
|
|
281
|
+
Thread-safe implementation using double-checked locking pattern to
|
|
282
|
+
prevent race conditions during concurrent initialization.
|
|
283
|
+
|
|
276
284
|
Args:
|
|
277
285
|
port: Optional port number
|
|
278
286
|
|
|
@@ -280,9 +288,16 @@ def get_relay(port: Optional[int] = None) -> SocketIORelay:
|
|
|
280
288
|
SocketIORelay: The relay instance
|
|
281
289
|
"""
|
|
282
290
|
global _relay_instance
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
291
|
+
|
|
292
|
+
# Fast path - check without lock
|
|
293
|
+
if _relay_instance is not None:
|
|
294
|
+
return _relay_instance
|
|
295
|
+
|
|
296
|
+
# Slow path - acquire lock and double-check
|
|
297
|
+
with _relay_lock:
|
|
298
|
+
if _relay_instance is None:
|
|
299
|
+
_relay_instance = SocketIORelay(port)
|
|
300
|
+
return _relay_instance
|
|
286
301
|
|
|
287
302
|
|
|
288
303
|
def start_relay(port: Optional[int] = None) -> SocketIORelay:
|
|
@@ -300,8 +315,12 @@ def start_relay(port: Optional[int] = None) -> SocketIORelay:
|
|
|
300
315
|
|
|
301
316
|
|
|
302
317
|
def stop_relay() -> None:
|
|
303
|
-
"""Stop the global SocketIO relay.
|
|
318
|
+
"""Stop the global SocketIO relay.
|
|
319
|
+
|
|
320
|
+
Thread-safe implementation ensures proper cleanup.
|
|
321
|
+
"""
|
|
304
322
|
global _relay_instance
|
|
305
|
-
|
|
306
|
-
_relay_instance
|
|
307
|
-
|
|
323
|
+
with _relay_lock:
|
|
324
|
+
if _relay_instance:
|
|
325
|
+
_relay_instance.stop()
|
|
326
|
+
_relay_instance = None
|
|
@@ -6,7 +6,7 @@ Handles events that failed processing in other consumers.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import json
|
|
9
|
-
from datetime import datetime
|
|
9
|
+
from datetime import datetime, timezone
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from typing import Any, Dict, List, Optional
|
|
12
12
|
|
|
@@ -109,7 +109,7 @@ class DeadLetterConsumer(IEventConsumer):
|
|
|
109
109
|
self._rotate_file()
|
|
110
110
|
|
|
111
111
|
# Write to file
|
|
112
|
-
with
|
|
112
|
+
with self._current_file.open("a") as f:
|
|
113
113
|
f.write(event_json)
|
|
114
114
|
|
|
115
115
|
# Update metrics
|
|
@@ -165,7 +165,7 @@ class DeadLetterConsumer(IEventConsumer):
|
|
|
165
165
|
# Find files in time range
|
|
166
166
|
for file_path in sorted(self.output_dir.glob("dead-letter-*.jsonl")):
|
|
167
167
|
try:
|
|
168
|
-
with open(
|
|
168
|
+
with file_path.open() as f:
|
|
169
169
|
for line in f:
|
|
170
170
|
event_data = json.loads(line)
|
|
171
171
|
|
|
@@ -284,7 +284,7 @@ class DeadLetterConsumer(IEventConsumer):
|
|
|
284
284
|
|
|
285
285
|
def _rotate_file(self) -> None:
|
|
286
286
|
"""Rotate to a new output file."""
|
|
287
|
-
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
|
|
287
|
+
timestamp = datetime.now(timezone.utc).strftime("%Y%m%d-%H%M%S")
|
|
288
288
|
self._current_file = self.output_dir / f"dead-letter-{timestamp}.jsonl"
|
|
289
289
|
self._current_file_size = 0
|
|
290
290
|
self._metrics["files_created"] += 1
|
|
@@ -293,7 +293,9 @@ class DeadLetterConsumer(IEventConsumer):
|
|
|
293
293
|
|
|
294
294
|
async def _cleanup_old_files(self) -> None:
|
|
295
295
|
"""Remove files older than retention period."""
|
|
296
|
-
cutoff_time = datetime.now().timestamp() - (
|
|
296
|
+
cutoff_time = datetime.now(timezone.utc).timestamp() - (
|
|
297
|
+
self.retention_days * 86400
|
|
298
|
+
)
|
|
297
299
|
|
|
298
300
|
for file_path in self.output_dir.glob("dead-letter-*.jsonl"):
|
|
299
301
|
try:
|
|
@@ -12,7 +12,7 @@ import time
|
|
|
12
12
|
import uuid
|
|
13
13
|
from collections import defaultdict, deque
|
|
14
14
|
from dataclasses import dataclass, field
|
|
15
|
-
from datetime import datetime
|
|
15
|
+
from datetime import datetime, timezone
|
|
16
16
|
from enum import Enum
|
|
17
17
|
from typing import Any, Deque, Dict, List, Optional, Set
|
|
18
18
|
|
|
@@ -225,7 +225,7 @@ class EventBus(IEventBus):
|
|
|
225
225
|
|
|
226
226
|
# Add metadata
|
|
227
227
|
if event.metadata:
|
|
228
|
-
event.metadata.published_at = datetime.now()
|
|
228
|
+
event.metadata.published_at = datetime.now(timezone.utc)
|
|
229
229
|
|
|
230
230
|
# Queue event
|
|
231
231
|
self._event_queues[event.priority].append(event)
|
|
@@ -353,7 +353,7 @@ class EventBus(IEventBus):
|
|
|
353
353
|
# Update metrics
|
|
354
354
|
if events_processed > 0:
|
|
355
355
|
self._metrics["events_processed"] += events_processed
|
|
356
|
-
self._metrics["last_event_time"] = datetime.now()
|
|
356
|
+
self._metrics["last_event_time"] = datetime.now(timezone.utc)
|
|
357
357
|
self._metrics["queue_size"] = sum(
|
|
358
358
|
len(q) for q in self._event_queues.values()
|
|
359
359
|
)
|
|
@@ -412,9 +412,8 @@ class EventBus(IEventBus):
|
|
|
412
412
|
"""
|
|
413
413
|
try:
|
|
414
414
|
# Apply filter if configured
|
|
415
|
-
if consumer.config.filter_func:
|
|
416
|
-
|
|
417
|
-
return
|
|
415
|
+
if consumer.config.filter_func and not consumer.config.filter_func(event):
|
|
416
|
+
return
|
|
418
417
|
|
|
419
418
|
# Apply transformation if configured
|
|
420
419
|
if consumer.config.transform_func:
|
|
@@ -7,7 +7,7 @@ This replaces direct Socket.IO emission in the hook handler.
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import uuid
|
|
10
|
-
from datetime import datetime
|
|
10
|
+
from datetime import datetime, timezone
|
|
11
11
|
from typing import Any, Dict, List, Optional
|
|
12
12
|
|
|
13
13
|
from claude_mpm.core.logging_config import get_logger
|
|
@@ -96,7 +96,7 @@ class HookEventProducer(IEventProducer):
|
|
|
96
96
|
id=str(uuid.uuid4()),
|
|
97
97
|
topic="hook.response",
|
|
98
98
|
type="AssistantResponse",
|
|
99
|
-
timestamp=datetime.now(),
|
|
99
|
+
timestamp=datetime.now(timezone.utc),
|
|
100
100
|
source=self.source_name,
|
|
101
101
|
data=response_data,
|
|
102
102
|
correlation_id=correlation_id,
|
|
@@ -128,7 +128,7 @@ class HookEventProducer(IEventProducer):
|
|
|
128
128
|
id=str(uuid.uuid4()),
|
|
129
129
|
topic="hook.tool",
|
|
130
130
|
type="ToolUse",
|
|
131
|
-
timestamp=datetime.now(),
|
|
131
|
+
timestamp=datetime.now(timezone.utc),
|
|
132
132
|
source=self.source_name,
|
|
133
133
|
data={
|
|
134
134
|
"tool": tool_name,
|
|
@@ -164,7 +164,7 @@ class HookEventProducer(IEventProducer):
|
|
|
164
164
|
id=str(uuid.uuid4()),
|
|
165
165
|
topic="hook.error",
|
|
166
166
|
type="Error",
|
|
167
|
-
timestamp=datetime.now(),
|
|
167
|
+
timestamp=datetime.now(timezone.utc),
|
|
168
168
|
source=self.source_name,
|
|
169
169
|
data={
|
|
170
170
|
"error_type": error_type,
|
|
@@ -200,7 +200,7 @@ class HookEventProducer(IEventProducer):
|
|
|
200
200
|
id=str(uuid.uuid4()),
|
|
201
201
|
topic=f"hook.subagent.{event_type.lower()}",
|
|
202
202
|
type=f"Subagent{event_type}",
|
|
203
|
-
timestamp=datetime.now(),
|
|
203
|
+
timestamp=datetime.now(timezone.utc),
|
|
204
204
|
source=self.source_name,
|
|
205
205
|
data={
|
|
206
206
|
"subagent": subagent_name,
|
|
@@ -255,7 +255,7 @@ class HookEventProducer(IEventProducer):
|
|
|
255
255
|
id=str(uuid.uuid4()),
|
|
256
256
|
topic=topic,
|
|
257
257
|
type=hook_type,
|
|
258
|
-
timestamp=datetime.now(),
|
|
258
|
+
timestamp=datetime.now(timezone.utc),
|
|
259
259
|
source=self.source_name,
|
|
260
260
|
data=hook_data,
|
|
261
261
|
correlation_id=correlation_id,
|
|
@@ -6,7 +6,7 @@ Publishes system-level events to the event bus.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import uuid
|
|
9
|
-
from datetime import datetime
|
|
9
|
+
from datetime import datetime, timezone
|
|
10
10
|
from typing import Any, Dict, List, Optional
|
|
11
11
|
|
|
12
12
|
from claude_mpm.core.logging_config import get_logger
|
|
@@ -100,7 +100,7 @@ class SystemEventProducer(IEventProducer):
|
|
|
100
100
|
id=str(uuid.uuid4()),
|
|
101
101
|
topic="system.lifecycle.startup",
|
|
102
102
|
type="ServiceStartup",
|
|
103
|
-
timestamp=datetime.now(),
|
|
103
|
+
timestamp=datetime.now(timezone.utc),
|
|
104
104
|
source=self.source_name,
|
|
105
105
|
data={
|
|
106
106
|
"service": service_name,
|
|
@@ -133,7 +133,7 @@ class SystemEventProducer(IEventProducer):
|
|
|
133
133
|
id=str(uuid.uuid4()),
|
|
134
134
|
topic="system.lifecycle.shutdown",
|
|
135
135
|
type="ServiceShutdown",
|
|
136
|
-
timestamp=datetime.now(),
|
|
136
|
+
timestamp=datetime.now(timezone.utc),
|
|
137
137
|
source=self.source_name,
|
|
138
138
|
data={
|
|
139
139
|
"service": service_name,
|
|
@@ -168,7 +168,7 @@ class SystemEventProducer(IEventProducer):
|
|
|
168
168
|
id=str(uuid.uuid4()),
|
|
169
169
|
topic="system.health",
|
|
170
170
|
type="HealthStatus",
|
|
171
|
-
timestamp=datetime.now(),
|
|
171
|
+
timestamp=datetime.now(timezone.utc),
|
|
172
172
|
source=self.source_name,
|
|
173
173
|
data={
|
|
174
174
|
"service": service_name,
|
|
@@ -206,7 +206,7 @@ class SystemEventProducer(IEventProducer):
|
|
|
206
206
|
id=str(uuid.uuid4()),
|
|
207
207
|
topic="system.config",
|
|
208
208
|
type="ConfigChange",
|
|
209
|
-
timestamp=datetime.now(),
|
|
209
|
+
timestamp=datetime.now(timezone.utc),
|
|
210
210
|
source=self.source_name,
|
|
211
211
|
data={
|
|
212
212
|
"service": service_name,
|
|
@@ -238,7 +238,7 @@ class SystemEventProducer(IEventProducer):
|
|
|
238
238
|
id=str(uuid.uuid4()),
|
|
239
239
|
topic="system.performance",
|
|
240
240
|
type="PerformanceMetrics",
|
|
241
|
-
timestamp=datetime.now(),
|
|
241
|
+
timestamp=datetime.now(timezone.utc),
|
|
242
242
|
source=self.source_name,
|
|
243
243
|
data={
|
|
244
244
|
"service": service_name,
|
|
@@ -274,7 +274,7 @@ class SystemEventProducer(IEventProducer):
|
|
|
274
274
|
id=str(uuid.uuid4()),
|
|
275
275
|
topic="system.error",
|
|
276
276
|
type="SystemError",
|
|
277
|
-
timestamp=datetime.now(),
|
|
277
|
+
timestamp=datetime.now(timezone.utc),
|
|
278
278
|
source=self.source_name,
|
|
279
279
|
data={
|
|
280
280
|
"service": service_name,
|
|
@@ -311,7 +311,7 @@ class SystemEventProducer(IEventProducer):
|
|
|
311
311
|
id=str(uuid.uuid4()),
|
|
312
312
|
topic="system.warning",
|
|
313
313
|
type="SystemWarning",
|
|
314
|
-
timestamp=datetime.now(),
|
|
314
|
+
timestamp=datetime.now(timezone.utc),
|
|
315
315
|
source=self.source_name,
|
|
316
316
|
data={
|
|
317
317
|
"service": service_name,
|
|
@@ -15,7 +15,7 @@ Design Principles:
|
|
|
15
15
|
|
|
16
16
|
import platform
|
|
17
17
|
import time
|
|
18
|
-
from datetime import datetime
|
|
18
|
+
from datetime import datetime, timezone
|
|
19
19
|
from typing import Any, Dict, List, Optional
|
|
20
20
|
|
|
21
21
|
|
|
@@ -43,7 +43,7 @@ class SocketIOServerError(Exception):
|
|
|
43
43
|
self.message = message
|
|
44
44
|
self.error_code = error_code or self.__class__.__name__.lower()
|
|
45
45
|
self.context = context or {}
|
|
46
|
-
self.timestamp = datetime.
|
|
46
|
+
self.timestamp = datetime.now(timezone.utc).isoformat() + "Z"
|
|
47
47
|
|
|
48
48
|
def to_dict(self) -> Dict[str, Any]:
|
|
49
49
|
"""Convert error to dictionary format for structured logging/handling."""
|
|
@@ -125,9 +125,9 @@ class DaemonConflictError(SocketIOServerError):
|
|
|
125
125
|
)
|
|
126
126
|
|
|
127
127
|
if create_time:
|
|
128
|
-
start_time = datetime.fromtimestamp(
|
|
129
|
-
|
|
130
|
-
)
|
|
128
|
+
start_time = datetime.fromtimestamp(
|
|
129
|
+
create_time, tz=timezone.utc
|
|
130
|
+
).strftime("%Y-%m-%d %H:%M:%S")
|
|
131
131
|
uptime = time.time() - create_time
|
|
132
132
|
lines.append(f" • Started: {start_time} (uptime: {uptime:.0f}s)")
|
|
133
133
|
|
|
@@ -5,15 +5,15 @@ Assembles sections and applies template variable substitution.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import hashlib
|
|
8
|
-
import logging
|
|
9
8
|
from collections import OrderedDict
|
|
10
|
-
from datetime import datetime
|
|
9
|
+
from datetime import datetime, timezone
|
|
11
10
|
from typing import Any, Dict, Optional
|
|
12
11
|
|
|
12
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
13
13
|
from claude_mpm.services.agents.management import AgentCapabilitiesGenerator
|
|
14
14
|
from claude_mpm.services.agents.registry import DeployedAgentDiscovery
|
|
15
15
|
|
|
16
|
-
logger =
|
|
16
|
+
logger = get_logger(__name__)
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class ContentAssembler:
|
|
@@ -35,7 +35,7 @@ class ContentAssembler:
|
|
|
35
35
|
Returns:
|
|
36
36
|
str: 16-character hash of content
|
|
37
37
|
"""
|
|
38
|
-
timestamp = datetime.
|
|
38
|
+
timestamp = datetime.now(timezone.utc).isoformat()
|
|
39
39
|
hash_obj = hashlib.sha256(timestamp.encode())
|
|
40
40
|
return hash_obj.hexdigest()[:16]
|
|
41
41
|
|
|
@@ -176,7 +176,7 @@ class ContentAssembler:
|
|
|
176
176
|
Returns:
|
|
177
177
|
Dict: Metadata for header
|
|
178
178
|
"""
|
|
179
|
-
timestamp = datetime.
|
|
179
|
+
timestamp = datetime.now(timezone.utc).isoformat()
|
|
180
180
|
|
|
181
181
|
return {
|
|
182
182
|
"version": version,
|
|
@@ -5,14 +5,14 @@ Validates generated content structure and completeness.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import re
|
|
8
|
-
from typing import List, Tuple
|
|
8
|
+
from typing import ClassVar, List, Tuple
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class ContentValidator:
|
|
12
12
|
"""Validates framework CLAUDE.md content for completeness and correctness."""
|
|
13
13
|
|
|
14
14
|
# Required sections that must be present
|
|
15
|
-
REQUIRED_SECTIONS = [
|
|
15
|
+
REQUIRED_SECTIONS: ClassVar[list[str]] = [
|
|
16
16
|
(r"CLAUDE_MD_VERSION:", "Version metadata"),
|
|
17
17
|
(r"## 🤖 AI ASSISTANT ROLE DESIGNATION", "Role designation section"),
|
|
18
18
|
(r"## A\) AGENTS", "Agents section"),
|
|
@@ -95,7 +95,7 @@ class DeploymentManager:
|
|
|
95
95
|
|
|
96
96
|
# Check if file exists and compare versions
|
|
97
97
|
if target_file.exists() and not force:
|
|
98
|
-
with open(
|
|
98
|
+
with target_file.open() as f:
|
|
99
99
|
existing_content = f.read()
|
|
100
100
|
existing_fw_ver = self.version_manager.parse_current_version(
|
|
101
101
|
existing_content
|
|
@@ -110,7 +110,7 @@ class DeploymentManager:
|
|
|
110
110
|
parent_path.mkdir(parents=True, exist_ok=True)
|
|
111
111
|
|
|
112
112
|
# Write content
|
|
113
|
-
with open(
|
|
113
|
+
with target_file.open("w") as f:
|
|
114
114
|
f.write(content)
|
|
115
115
|
|
|
116
116
|
# Get version info for success message
|
|
@@ -137,7 +137,7 @@ class DeploymentManager:
|
|
|
137
137
|
return True, f"{self.target_filename} does not exist"
|
|
138
138
|
|
|
139
139
|
try:
|
|
140
|
-
with open(
|
|
140
|
+
with target_file.open() as f:
|
|
141
141
|
existing_content = f.read()
|
|
142
142
|
existing_fw_ver = self.version_manager.parse_current_version(
|
|
143
143
|
existing_content
|
|
@@ -5,7 +5,7 @@ This module provides base classes and registry for section generators.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from abc import ABC, abstractmethod
|
|
8
|
-
from datetime import datetime
|
|
8
|
+
from datetime import datetime, timezone
|
|
9
9
|
from typing import Any, Dict, Optional
|
|
10
10
|
|
|
11
11
|
|
|
@@ -35,7 +35,7 @@ class BaseSectionGenerator(ABC):
|
|
|
35
35
|
|
|
36
36
|
def get_timestamp(self) -> str:
|
|
37
37
|
"""Get current UTC timestamp."""
|
|
38
|
-
return datetime.
|
|
38
|
+
return datetime.now(timezone.utc).isoformat()
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class SectionGeneratorRegistry:
|
|
@@ -38,7 +38,7 @@ class VersionManager:
|
|
|
38
38
|
version_path = package_path.parent / "framework" / "VERSION"
|
|
39
39
|
|
|
40
40
|
if version_path.exists():
|
|
41
|
-
with open(
|
|
41
|
+
with version_path.open() as f:
|
|
42
42
|
version_content = f.read().strip()
|
|
43
43
|
# Framework VERSION file contains just the framework version number
|
|
44
44
|
try:
|