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
|
@@ -23,7 +23,7 @@ import re
|
|
|
23
23
|
import time
|
|
24
24
|
from collections import Counter, defaultdict
|
|
25
25
|
from dataclasses import dataclass, field
|
|
26
|
-
from datetime import datetime, timedelta
|
|
26
|
+
from datetime import datetime, timedelta, timezone
|
|
27
27
|
from typing import Any, Dict, List, Optional, Set, Tuple
|
|
28
28
|
|
|
29
29
|
from ...core.cache import get_file_cache
|
|
@@ -213,7 +213,7 @@ class InvertedIndex:
|
|
|
213
213
|
"doc_freqs": dict(self.doc_freqs),
|
|
214
214
|
"doc_count": self.doc_count,
|
|
215
215
|
}
|
|
216
|
-
with open(
|
|
216
|
+
with path.open("wb") as f:
|
|
217
217
|
pickle.dump(data, f)
|
|
218
218
|
|
|
219
219
|
def load(self, path: Path):
|
|
@@ -221,7 +221,7 @@ class InvertedIndex:
|
|
|
221
221
|
if not path.exists():
|
|
222
222
|
return
|
|
223
223
|
|
|
224
|
-
with open(
|
|
224
|
+
with path.open("rb") as f:
|
|
225
225
|
data = pickle.load(f)
|
|
226
226
|
|
|
227
227
|
self.index = defaultdict(set, {k: set(v) for k, v in data["index"].items()})
|
|
@@ -388,7 +388,7 @@ class IndexedMemoryService:
|
|
|
388
388
|
agent_id=agent_id,
|
|
389
389
|
content=content,
|
|
390
390
|
category=category,
|
|
391
|
-
timestamp=datetime.now(),
|
|
391
|
+
timestamp=datetime.now(timezone.utc),
|
|
392
392
|
tags=tags or [],
|
|
393
393
|
metadata=metadata or {},
|
|
394
394
|
)
|
|
@@ -510,7 +510,7 @@ class IndexedMemoryService:
|
|
|
510
510
|
start_time = time.time()
|
|
511
511
|
|
|
512
512
|
# Calculate time range
|
|
513
|
-
now = datetime.now()
|
|
513
|
+
now = datetime.now(timezone.utc)
|
|
514
514
|
if hours:
|
|
515
515
|
min_time = now - timedelta(hours=hours)
|
|
516
516
|
elif days:
|
|
@@ -563,7 +563,7 @@ class IndexedMemoryService:
|
|
|
563
563
|
|
|
564
564
|
def _generate_id(self, agent_id: str, content: str) -> str:
|
|
565
565
|
"""Generate unique ID for memory entry."""
|
|
566
|
-
timestamp = datetime.now().isoformat()
|
|
566
|
+
timestamp = datetime.now(timezone.utc).isoformat()
|
|
567
567
|
hash_input = f"{agent_id}:{content[:100]}:{timestamp}"
|
|
568
568
|
return hashlib.md5(hash_input.encode()).hexdigest()[:12]
|
|
569
569
|
|
|
@@ -573,7 +573,7 @@ class IndexedMemoryService:
|
|
|
573
573
|
self.text_index.save(self.data_dir / "text_index.pkl")
|
|
574
574
|
|
|
575
575
|
# Save other indexes
|
|
576
|
-
with
|
|
576
|
+
with Path(self.data_dir / "indexes.pkl").open("wb") as f:
|
|
577
577
|
pickle.dump(
|
|
578
578
|
{
|
|
579
579
|
"memories": self.memories,
|
|
@@ -597,7 +597,7 @@ class IndexedMemoryService:
|
|
|
597
597
|
# Load other indexes
|
|
598
598
|
indexes_path = self.data_dir / "indexes.pkl"
|
|
599
599
|
if indexes_path.exists():
|
|
600
|
-
with open(
|
|
600
|
+
with indexes_path.open("rb") as f:
|
|
601
601
|
data = pickle.load(f)
|
|
602
602
|
|
|
603
603
|
self.memories = data.get("memories", {})
|
|
@@ -22,9 +22,8 @@ rather than aggressively removing content. Better to keep potentially useful
|
|
|
22
22
|
information than lose important insights.
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
|
-
import os
|
|
26
25
|
import re
|
|
27
|
-
from datetime import datetime
|
|
26
|
+
from datetime import datetime, timezone
|
|
28
27
|
from difflib import SequenceMatcher
|
|
29
28
|
from pathlib import Path
|
|
30
29
|
from typing import Any, Dict, List, Optional, Tuple
|
|
@@ -79,7 +78,7 @@ class MemoryOptimizer(LoggerMixin):
|
|
|
79
78
|
self.config = config or Config()
|
|
80
79
|
self.project_root = get_path_manager().get_project_root()
|
|
81
80
|
# Use current working directory by default, not project root
|
|
82
|
-
self.working_directory = working_directory or Path(
|
|
81
|
+
self.working_directory = working_directory or Path(Path.cwd())
|
|
83
82
|
self.memories_dir = self.working_directory / ".claude-mpm" / "memories"
|
|
84
83
|
|
|
85
84
|
def optimize_agent_memory(self, agent_id: str) -> Dict[str, Any]:
|
|
@@ -164,7 +163,7 @@ class MemoryOptimizer(LoggerMixin):
|
|
|
164
163
|
else 0
|
|
165
164
|
),
|
|
166
165
|
"backup_created": str(backup_path),
|
|
167
|
-
"timestamp": datetime.now().isoformat(),
|
|
166
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
168
167
|
**optimization_stats,
|
|
169
168
|
}
|
|
170
169
|
|
|
@@ -230,7 +229,7 @@ class MemoryOptimizer(LoggerMixin):
|
|
|
230
229
|
|
|
231
230
|
return {
|
|
232
231
|
"success": True,
|
|
233
|
-
"timestamp": datetime.now().isoformat(),
|
|
232
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
234
233
|
"agents": results,
|
|
235
234
|
"summary": {
|
|
236
235
|
**total_stats,
|
|
@@ -545,7 +544,7 @@ class MemoryOptimizer(LoggerMixin):
|
|
|
545
544
|
|
|
546
545
|
# Update timestamp
|
|
547
546
|
content = "\n".join(content_lines)
|
|
548
|
-
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
547
|
+
timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
|
|
549
548
|
return re.sub(
|
|
550
549
|
r"<!-- Last Updated: .+ \| Auto-updated by: .+ -->",
|
|
551
550
|
f"<!-- Last Updated: {timestamp} | Auto-updated by: optimizer -->",
|
|
@@ -561,7 +560,7 @@ class MemoryOptimizer(LoggerMixin):
|
|
|
561
560
|
Returns:
|
|
562
561
|
Path to backup file
|
|
563
562
|
"""
|
|
564
|
-
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
563
|
+
timestamp = datetime.now(timezone.utc).strftime("%Y%m%d_%H%M%S")
|
|
565
564
|
backup_name = f"{memory_file.stem}_backup_{timestamp}{memory_file.suffix}"
|
|
566
565
|
backup_path = memory_file.parent / backup_name
|
|
567
566
|
|
|
@@ -619,7 +618,7 @@ class MemoryOptimizer(LoggerMixin):
|
|
|
619
618
|
)
|
|
620
619
|
|
|
621
620
|
# Check for similar items
|
|
622
|
-
|
|
621
|
+
_consolidated, consolidated_count = self._consolidate_similar_items(
|
|
623
622
|
unique_points
|
|
624
623
|
)
|
|
625
624
|
if consolidated_count > 0:
|
|
@@ -647,7 +646,7 @@ class MemoryOptimizer(LoggerMixin):
|
|
|
647
646
|
|
|
648
647
|
return {
|
|
649
648
|
"success": True,
|
|
650
|
-
"timestamp": datetime.now().isoformat(),
|
|
649
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
651
650
|
"agents_analyzed": len(agents_analysis),
|
|
652
651
|
"agents": agents_analysis,
|
|
653
652
|
}
|
|
@@ -21,7 +21,7 @@ users understand why content was assigned to specific agents.
|
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
23
|
import re
|
|
24
|
-
from datetime import datetime
|
|
24
|
+
from datetime import datetime, timezone
|
|
25
25
|
from typing import Any, Dict, List, Optional, Tuple
|
|
26
26
|
|
|
27
27
|
from claude_mpm.core.config import Config
|
|
@@ -622,7 +622,7 @@ class MemoryRouter(LoggerMixin):
|
|
|
622
622
|
"confidence": confidence,
|
|
623
623
|
"reasoning": reasoning,
|
|
624
624
|
"agent_scores": agent_scores,
|
|
625
|
-
"timestamp": datetime.now().isoformat(),
|
|
625
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
626
626
|
"content_length": len(content),
|
|
627
627
|
}
|
|
628
628
|
|
|
@@ -639,7 +639,7 @@ class MemoryRouter(LoggerMixin):
|
|
|
639
639
|
"confidence": 0.1,
|
|
640
640
|
"reasoning": f"Error during analysis, defaulting to {self.DEFAULT_AGENT}",
|
|
641
641
|
"error": str(e),
|
|
642
|
-
"timestamp": datetime.now().isoformat(),
|
|
642
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
643
643
|
"content_length": len(content) if content else 0,
|
|
644
644
|
}
|
|
645
645
|
|
|
@@ -11,6 +11,7 @@ Extracted from ClaudeRunner to follow Single Responsibility Principle.
|
|
|
11
11
|
from typing import Any, Dict
|
|
12
12
|
|
|
13
13
|
from claude_mpm.core.base_service import BaseService
|
|
14
|
+
from claude_mpm.core.enums import ServiceState
|
|
14
15
|
from claude_mpm.services.core.interfaces import MemoryHookInterface
|
|
15
16
|
|
|
16
17
|
|
|
@@ -41,8 +42,8 @@ class MemoryHookService(BaseService, MemoryHookInterface):
|
|
|
41
42
|
These hooks ensure memory is properly managed and persisted.
|
|
42
43
|
|
|
43
44
|
DESIGN DECISION: We register hooks for key lifecycle events:
|
|
44
|
-
- Before Claude interaction: Load relevant memories
|
|
45
|
-
- After Claude interaction: Save new memories
|
|
45
|
+
- Before Claude interaction: Load relevant memories (kuzu-memory + legacy)
|
|
46
|
+
- After Claude interaction: Save new memories (kuzu-memory + legacy)
|
|
46
47
|
- On error: Ensure memory state is preserved
|
|
47
48
|
"""
|
|
48
49
|
if not self.hook_service:
|
|
@@ -90,11 +91,169 @@ class MemoryHookService(BaseService, MemoryHookInterface):
|
|
|
90
91
|
if success2:
|
|
91
92
|
self.registered_hooks.append("memory_save")
|
|
92
93
|
|
|
93
|
-
self.logger.debug("
|
|
94
|
+
self.logger.debug("Legacy memory hooks registered successfully")
|
|
95
|
+
|
|
96
|
+
# Register kuzu-memory hooks if available
|
|
97
|
+
self._register_kuzu_memory_hooks()
|
|
98
|
+
|
|
99
|
+
# Register failure-learning hooks
|
|
100
|
+
self._register_failure_learning_hooks()
|
|
94
101
|
|
|
95
102
|
except Exception as e:
|
|
96
103
|
self.logger.warning(f"Failed to register memory hooks: {e}")
|
|
97
104
|
|
|
105
|
+
def _register_kuzu_memory_hooks(self):
|
|
106
|
+
"""Register kuzu-memory bidirectional enrichment hooks.
|
|
107
|
+
|
|
108
|
+
WHY: Kuzu-memory provides persistent knowledge graph storage that works
|
|
109
|
+
across conversations. This enables:
|
|
110
|
+
1. Delegation context enrichment with relevant memories (READ)
|
|
111
|
+
2. Automatic learning extraction from responses (WRITE)
|
|
112
|
+
|
|
113
|
+
DESIGN DECISION: These hooks are separate from legacy memory hooks to
|
|
114
|
+
allow independent evolution and configuration. Both systems can coexist.
|
|
115
|
+
"""
|
|
116
|
+
try:
|
|
117
|
+
# Check if kuzu-memory is enabled in config
|
|
118
|
+
from claude_mpm.core.config import Config
|
|
119
|
+
|
|
120
|
+
config = Config()
|
|
121
|
+
kuzu_config = config.get("memory.kuzu", {})
|
|
122
|
+
if isinstance(kuzu_config, dict):
|
|
123
|
+
kuzu_enabled = kuzu_config.get("enabled", True)
|
|
124
|
+
enrichment_enabled = kuzu_config.get("enrichment", True)
|
|
125
|
+
learning_enabled = kuzu_config.get("learning", True)
|
|
126
|
+
else:
|
|
127
|
+
# Default to enabled if config section doesn't exist
|
|
128
|
+
kuzu_enabled = True
|
|
129
|
+
enrichment_enabled = True
|
|
130
|
+
learning_enabled = True
|
|
131
|
+
|
|
132
|
+
if not kuzu_enabled:
|
|
133
|
+
self.logger.debug("Kuzu-memory disabled in configuration")
|
|
134
|
+
return
|
|
135
|
+
|
|
136
|
+
from claude_mpm.hooks import (
|
|
137
|
+
get_kuzu_enrichment_hook,
|
|
138
|
+
get_kuzu_response_hook,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
# Get kuzu-memory hooks
|
|
142
|
+
enrichment_hook = get_kuzu_enrichment_hook()
|
|
143
|
+
learning_hook = get_kuzu_response_hook()
|
|
144
|
+
|
|
145
|
+
# Register enrichment hook (PreDelegationHook) if enabled
|
|
146
|
+
if enrichment_hook.enabled and enrichment_enabled:
|
|
147
|
+
success = self.hook_service.register_hook(enrichment_hook)
|
|
148
|
+
if success:
|
|
149
|
+
self.registered_hooks.append("kuzu_memory_enrichment")
|
|
150
|
+
self.logger.info(
|
|
151
|
+
"✅ Kuzu-memory enrichment enabled (prompts → memories)"
|
|
152
|
+
)
|
|
153
|
+
else:
|
|
154
|
+
self.logger.warning(
|
|
155
|
+
"Failed to register kuzu-memory enrichment hook"
|
|
156
|
+
)
|
|
157
|
+
elif not enrichment_enabled:
|
|
158
|
+
self.logger.debug("Kuzu-memory enrichment disabled in configuration")
|
|
159
|
+
|
|
160
|
+
# Register learning hook (PostDelegationHook) if enabled
|
|
161
|
+
if learning_hook.enabled and learning_enabled:
|
|
162
|
+
success = self.hook_service.register_hook(learning_hook)
|
|
163
|
+
if success:
|
|
164
|
+
self.registered_hooks.append("kuzu_response_learner")
|
|
165
|
+
self.logger.info(
|
|
166
|
+
"✅ Kuzu-memory learning enabled (responses → memories)"
|
|
167
|
+
)
|
|
168
|
+
else:
|
|
169
|
+
self.logger.warning("Failed to register kuzu-memory learning hook")
|
|
170
|
+
elif not learning_enabled:
|
|
171
|
+
self.logger.debug("Kuzu-memory learning disabled in configuration")
|
|
172
|
+
|
|
173
|
+
# If neither hook is enabled, kuzu-memory is not available
|
|
174
|
+
if not enrichment_hook.enabled and not learning_hook.enabled:
|
|
175
|
+
self.logger.debug(
|
|
176
|
+
"Kuzu-memory not available. Install with: pipx install kuzu-memory"
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
except ImportError as e:
|
|
180
|
+
self.logger.debug(f"Kuzu-memory hooks not available: {e}")
|
|
181
|
+
except Exception as e:
|
|
182
|
+
self.logger.warning(f"Failed to register kuzu-memory hooks: {e}")
|
|
183
|
+
|
|
184
|
+
def _register_failure_learning_hooks(self):
|
|
185
|
+
"""Register failure-learning hooks for automatic learning extraction.
|
|
186
|
+
|
|
187
|
+
WHY: When tasks fail and agents fix them, we want to automatically capture
|
|
188
|
+
this as a learning. The failure-learning system provides:
|
|
189
|
+
1. Failure detection from tool outputs (errors, exceptions, test failures)
|
|
190
|
+
2. Fix detection when same task type succeeds after failure
|
|
191
|
+
3. Learning extraction and persistence to agent memory files
|
|
192
|
+
|
|
193
|
+
DESIGN DECISION: These hooks work as a chain with specific priorities:
|
|
194
|
+
- FailureDetectionHook (priority=85): Detects failures after tool execution
|
|
195
|
+
- FixDetectionHook (priority=87): Matches fixes with failures
|
|
196
|
+
- LearningExtractionHook (priority=89): Extracts and persists learnings
|
|
197
|
+
|
|
198
|
+
The system is enabled by default but can be disabled via configuration.
|
|
199
|
+
"""
|
|
200
|
+
try:
|
|
201
|
+
# Check if failure-learning is enabled in config
|
|
202
|
+
from claude_mpm.core.config import Config
|
|
203
|
+
|
|
204
|
+
config = Config()
|
|
205
|
+
failure_learning_config = config.get("memory.failure_learning", {})
|
|
206
|
+
|
|
207
|
+
if isinstance(failure_learning_config, dict):
|
|
208
|
+
enabled = failure_learning_config.get("enabled", True)
|
|
209
|
+
else:
|
|
210
|
+
# Default to enabled if config section doesn't exist
|
|
211
|
+
enabled = True
|
|
212
|
+
|
|
213
|
+
if not enabled:
|
|
214
|
+
self.logger.debug("Failure-learning disabled in configuration")
|
|
215
|
+
return
|
|
216
|
+
|
|
217
|
+
# Import failure-learning hooks
|
|
218
|
+
from claude_mpm.hooks.failure_learning import (
|
|
219
|
+
get_failure_detection_hook,
|
|
220
|
+
get_fix_detection_hook,
|
|
221
|
+
get_learning_extraction_hook,
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
# Get hook instances
|
|
225
|
+
failure_hook = get_failure_detection_hook()
|
|
226
|
+
fix_hook = get_fix_detection_hook()
|
|
227
|
+
learning_hook = get_learning_extraction_hook()
|
|
228
|
+
|
|
229
|
+
# Register hooks in priority order
|
|
230
|
+
success1 = self.hook_service.register_hook(failure_hook)
|
|
231
|
+
success2 = self.hook_service.register_hook(fix_hook)
|
|
232
|
+
success3 = self.hook_service.register_hook(learning_hook)
|
|
233
|
+
|
|
234
|
+
if success1:
|
|
235
|
+
self.registered_hooks.append("failure_detection")
|
|
236
|
+
self.logger.debug("✅ Failure detection enabled")
|
|
237
|
+
|
|
238
|
+
if success2:
|
|
239
|
+
self.registered_hooks.append("fix_detection")
|
|
240
|
+
self.logger.debug("✅ Fix detection enabled")
|
|
241
|
+
|
|
242
|
+
if success3:
|
|
243
|
+
self.registered_hooks.append("learning_extraction")
|
|
244
|
+
self.logger.debug("✅ Learning extraction enabled")
|
|
245
|
+
|
|
246
|
+
if success1 and success2 and success3:
|
|
247
|
+
self.logger.info(
|
|
248
|
+
"✅ Failure-learning system enabled "
|
|
249
|
+
"(failures → fixes → learnings → memory)"
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
except ImportError as e:
|
|
253
|
+
self.logger.debug(f"Failure-learning hooks not available: {e}")
|
|
254
|
+
except Exception as e:
|
|
255
|
+
self.logger.warning(f"Failed to register failure-learning hooks: {e}")
|
|
256
|
+
|
|
98
257
|
def _load_relevant_memories_hook(self, context):
|
|
99
258
|
"""Hook function to load relevant memories before Claude interaction.
|
|
100
259
|
|
|
@@ -305,5 +464,7 @@ class MemoryHookService(BaseService, MemoryHookInterface):
|
|
|
305
464
|
"hook_service_available": self.hook_service is not None,
|
|
306
465
|
"memory_enabled": self.is_memory_enabled(),
|
|
307
466
|
"total_hooks": len(self.registered_hooks),
|
|
308
|
-
"status":
|
|
467
|
+
"status": (
|
|
468
|
+
ServiceState.RUNNING if self.registered_hooks else ServiceState.IDLE
|
|
469
|
+
),
|
|
309
470
|
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Model Services Package for Claude MPM Framework
|
|
3
|
+
================================================
|
|
4
|
+
|
|
5
|
+
WHY: Provides hybrid local/cloud content processing with intelligent routing
|
|
6
|
+
and automatic fallback. Enables privacy-preserving local model execution via
|
|
7
|
+
Ollama with cloud fallback to Claude for reliability.
|
|
8
|
+
|
|
9
|
+
ARCHITECTURE:
|
|
10
|
+
- Interfaces: Core contracts for model providers and routing (IModelProvider, IModelRouter)
|
|
11
|
+
- Base Provider: Common functionality for all providers (BaseModelProvider)
|
|
12
|
+
- Providers: Ollama (local) and Claude (cloud) implementations
|
|
13
|
+
- Router: Intelligent routing with fallback logic (ModelRouter)
|
|
14
|
+
- Configuration: Centralized config management (model_config.py)
|
|
15
|
+
|
|
16
|
+
USAGE:
|
|
17
|
+
|
|
18
|
+
Basic Usage with Auto-Routing:
|
|
19
|
+
```python
|
|
20
|
+
from claude_mpm.services.model import ModelRouter
|
|
21
|
+
from claude_mpm.services.core.interfaces.model import ModelCapability
|
|
22
|
+
|
|
23
|
+
# Create router with default config (auto mode)
|
|
24
|
+
router = ModelRouter()
|
|
25
|
+
await router.initialize()
|
|
26
|
+
|
|
27
|
+
# Analyze content (tries Ollama first, falls back to Claude)
|
|
28
|
+
response = await router.analyze_content(
|
|
29
|
+
content="Your article text here...",
|
|
30
|
+
task=ModelCapability.SEO_ANALYSIS
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
if response.success:
|
|
34
|
+
print(f"Analysis by {response.provider}:")
|
|
35
|
+
print(response.result)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Direct Provider Usage:
|
|
39
|
+
```python
|
|
40
|
+
from claude_mpm.services.model import OllamaProvider
|
|
41
|
+
|
|
42
|
+
# Use Ollama directly
|
|
43
|
+
provider = OllamaProvider(config={
|
|
44
|
+
"host": "http://localhost:11434"
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
if await provider.is_available():
|
|
48
|
+
response = await provider.analyze_content(
|
|
49
|
+
content="Text to analyze",
|
|
50
|
+
task=ModelCapability.READABILITY
|
|
51
|
+
)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Configuration-Based Setup:
|
|
55
|
+
```python
|
|
56
|
+
from claude_mpm.config.model_config import ModelConfigManager
|
|
57
|
+
from claude_mpm.services.model import ModelRouter
|
|
58
|
+
|
|
59
|
+
# Load config from file
|
|
60
|
+
config = ModelConfigManager.load_config(".claude/configuration.yaml")
|
|
61
|
+
router_config = ModelConfigManager.get_router_config(config)
|
|
62
|
+
|
|
63
|
+
# Create router with loaded config
|
|
64
|
+
router = ModelRouter(config=router_config)
|
|
65
|
+
await router.initialize()
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
PROVIDER STRATEGIES:
|
|
69
|
+
- AUTO: Try Ollama first, fallback to Claude (default)
|
|
70
|
+
- OLLAMA: Local-only, fail if unavailable (privacy mode)
|
|
71
|
+
- CLAUDE: Cloud-only, always use Claude
|
|
72
|
+
- PRIVACY: Like OLLAMA with privacy-focused messages
|
|
73
|
+
|
|
74
|
+
RECOMMENDED MODELS (Ollama):
|
|
75
|
+
- SEO Analysis: llama3.3:70b - Comprehensive SEO insights
|
|
76
|
+
- Readability: gemma2:9b - Fast, accurate readability scoring
|
|
77
|
+
- Grammar: qwen3:14b - Specialized grammar checking
|
|
78
|
+
- Summarization: mistral:7b - Concise, effective summaries
|
|
79
|
+
- Keyword Extraction: seoassistant - SEO-specialized model
|
|
80
|
+
|
|
81
|
+
CONFIGURATION:
|
|
82
|
+
See claude_mpm.config.model_config for detailed configuration options.
|
|
83
|
+
|
|
84
|
+
Example configuration.yaml:
|
|
85
|
+
```yaml
|
|
86
|
+
content_agent:
|
|
87
|
+
model_provider: auto
|
|
88
|
+
|
|
89
|
+
ollama:
|
|
90
|
+
enabled: true
|
|
91
|
+
host: http://localhost:11434
|
|
92
|
+
fallback_to_cloud: true
|
|
93
|
+
models:
|
|
94
|
+
seo_analysis: llama3.3:70b
|
|
95
|
+
readability: gemma2:9b
|
|
96
|
+
|
|
97
|
+
claude:
|
|
98
|
+
enabled: true
|
|
99
|
+
model: claude-3-5-sonnet-20241022
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
PHASE 1 STATUS (Current):
|
|
103
|
+
✅ Core interfaces and contracts defined
|
|
104
|
+
✅ Base provider with common functionality
|
|
105
|
+
✅ Ollama provider with direct API integration
|
|
106
|
+
✅ Claude provider (Phase 1: mock responses)
|
|
107
|
+
✅ Router with intelligent fallback logic
|
|
108
|
+
✅ Configuration management with validation
|
|
109
|
+
⏳ Claude API integration (Phase 2)
|
|
110
|
+
⏳ Content agent integration (Phase 2)
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
# Re-export interfaces for convenience
|
|
114
|
+
from claude_mpm.services.core.interfaces.model import (
|
|
115
|
+
IModelProvider,
|
|
116
|
+
IModelRouter,
|
|
117
|
+
ModelCapability,
|
|
118
|
+
ModelProvider,
|
|
119
|
+
ModelResponse,
|
|
120
|
+
)
|
|
121
|
+
from claude_mpm.services.model.base_provider import BaseModelProvider
|
|
122
|
+
from claude_mpm.services.model.claude_provider import ClaudeProvider
|
|
123
|
+
from claude_mpm.services.model.model_router import ModelRouter, RoutingStrategy
|
|
124
|
+
from claude_mpm.services.model.ollama_provider import OllamaProvider
|
|
125
|
+
|
|
126
|
+
__all__ = [ # noqa: RUF022 - Semantic grouping preferred over alphabetical
|
|
127
|
+
# Base classes
|
|
128
|
+
"BaseModelProvider",
|
|
129
|
+
# Providers
|
|
130
|
+
"ClaudeProvider",
|
|
131
|
+
"OllamaProvider",
|
|
132
|
+
# Router
|
|
133
|
+
"ModelRouter",
|
|
134
|
+
"RoutingStrategy",
|
|
135
|
+
# Interfaces
|
|
136
|
+
"IModelProvider",
|
|
137
|
+
"IModelRouter",
|
|
138
|
+
# Data types
|
|
139
|
+
"ModelCapability",
|
|
140
|
+
"ModelProvider",
|
|
141
|
+
"ModelResponse",
|
|
142
|
+
]
|
|
143
|
+
|
|
144
|
+
# Version and metadata
|
|
145
|
+
__version__ = "1.0.0"
|
|
146
|
+
__phase__ = "1"
|
|
147
|
+
__status__ = "Core Infrastructure Complete"
|