claude-mpm 4.1.6__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 +431 -214
- 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/MEMORY.md +3 -0
- claude_mpm/agents/OUTPUT_STYLE.md +335 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1159 -0
- claude_mpm/agents/WORKFLOW.md +355 -187
- claude_mpm/agents/agent_loader.py +40 -10
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/agents_metadata.py +57 -0
- 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/.claude-mpm/memories/README.md +17 -0
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +3 -0
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/agent-manager.json +267 -18
- claude_mpm/agents/templates/agentic-coder-optimizer.json +248 -0
- 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 +25 -9
- 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 +44 -10
- 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_20250826_014258_728.md +39 -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 +27 -8
- 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 +26 -6
- claude_mpm/agents/templates/react_engineer.json +239 -0
- claude_mpm/agents/templates/refactoring_engineer.json +15 -5
- claude_mpm/agents/templates/research.json +47 -22
- 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 +243 -21
- claude_mpm/agents/templates/web_ui.json +18 -5
- claude_mpm/cli/__init__.py +38 -363
- claude_mpm/cli/commands/__init__.py +8 -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 +553 -0
- claude_mpm/cli/commands/analyze_code.py +528 -0
- 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 +488 -884
- 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 +286 -0
- claude_mpm/cli/commands/debug.py +1386 -0
- 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 +168 -617
- 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 +195 -0
- 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/analyze_code_parser.py +170 -0
- claude_mpm/cli/parsers/analyze_parser.py +135 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +187 -3
- claude_mpm/cli/parsers/configure_parser.py +34 -15
- claude_mpm/cli/parsers/dashboard_parser.py +113 -0
- claude_mpm/cli/parsers/debug_parser.py +319 -0
- 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 +311 -0
- 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/__init__.py +14 -0
- claude_mpm/commands/mpm-agents-detect.md +168 -0
- claude_mpm/commands/mpm-agents-recommend.md +214 -0
- claude_mpm/commands/mpm-agents.md +122 -0
- claude_mpm/commands/mpm-auto-configure.md +269 -0
- claude_mpm/commands/mpm-config.md +141 -0
- claude_mpm/commands/mpm-doctor.md +24 -0
- claude_mpm/commands/mpm-help.md +290 -0
- claude_mpm/commands/mpm-init.md +521 -0
- 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 +75 -0
- claude_mpm/commands/mpm-tickets.md +151 -0
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +21 -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 +36 -7
- claude_mpm/constants.py +27 -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 +103 -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 +323 -1491
- claude_mpm/core/hook_manager.py +8 -6
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +267 -0
- 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 +100 -28
- 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 +118 -15
- 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 +116 -12
- claude_mpm/core/unified_config.py +6 -6
- claude_mpm/core/unified_paths.py +23 -20
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +1 -0
- claude_mpm/dashboard/__init__.py +12 -0
- claude_mpm/dashboard/analysis_runner.py +455 -0
- 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 +2 -0
- 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 +2 -0
- claude_mpm/dashboard/static/built/components/code-viewer.js +2 -0
- 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 +2 -0
- 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/activity.css +1958 -0
- claude_mpm/dashboard/static/css/dashboard.css +1413 -72
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/dist/components/activity-tree.js +2 -0
- claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-tree.js +2 -0
- claude_mpm/dashboard/static/dist/components/code-viewer.js +2 -0
- 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 +2 -0
- 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 +1871 -0
- 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 +23 -13
- 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 -107
- claude_mpm/dashboard/static/js/components/event-viewer.js +98 -11
- 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 +68 -205
- claude_mpm/dashboard/static/js/components/session-manager.js +46 -10
- claude_mpm/dashboard/static/js/components/socket-manager.js +16 -0
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +359 -40
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +1824 -0
- claude_mpm/dashboard/static/js/components/working-directory.js +61 -10
- claude_mpm/dashboard/static/js/connection-manager.js +1 -1
- claude_mpm/dashboard/static/js/dashboard.js +523 -622
- 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 +549 -62
- 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 +267 -9
- claude_mpm/experimental/__init__.py +10 -0
- 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 +209 -25
- claude_mpm/hooks/claude_hooks/installer.py +783 -0
- 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 +64 -49
- 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/schemas/__init__.py +12 -0
- claude_mpm/scripts/claude-hook-handler.sh +187 -0
- 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 +156 -396
- 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_config_provider.py +127 -27
- 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 +5 -6
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +722 -37
- claude_mpm/services/agents/deployment/agent_validator.py +31 -7
- claude_mpm/services/agents/deployment/agent_version_manager.py +9 -1
- 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 +7 -7
- 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 +6 -5
- claude_mpm/services/cli/agent_dependency_service.py +1 -1
- claude_mpm/services/cli/agent_listing_service.py +5 -5
- claude_mpm/services/cli/agent_validation_service.py +6 -5
- 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 -21
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +17 -9
- 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/cache_manager.py +1 -3
- 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 +37 -18
- claude_mpm/services/core/service_container.py +2 -2
- 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 +22 -24
- 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 +152 -13
- 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 +12 -12
- 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/monitoring.py +12 -12
- 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 +6 -6
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +8 -8
- 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/language_analyzer.py +3 -3
- claude_mpm/services/project/metrics_collector.py +7 -10
- 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 +74 -6
- claude_mpm/services/socketio/handlers/__init__.py +5 -0
- claude_mpm/services/socketio/handlers/base.py +2 -2
- claude_mpm/services/socketio/handlers/code_analysis.py +682 -0
- claude_mpm/services/socketio/handlers/connection.py +21 -40
- claude_mpm/services/socketio/handlers/connection_handler.py +16 -28
- 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 -0
- 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 +131 -68
- claude_mpm/services/socketio/server/core.py +275 -22
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +99 -29
- 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/services/visualization/__init__.py +19 -0
- claude_mpm/services/visualization/mermaid_generator.py +938 -0
- 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/__init__.py +10 -0
- claude_mpm/tools/__main__.py +208 -0
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/tools/code_tree_builder.py +631 -0
- claude_mpm/tools/code_tree_events.py +420 -0
- claude_mpm/tools/socketio_debug.py +671 -0
- 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.6.dist-info → claude_mpm-4.24.0.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -237
- claude_mpm/agents/schema/agent_schema.json +0 -314
- claude_mpm/agents/templates/agent-manager.md +0 -304
- claude_mpm/cli/commands/configure_tui.py +0 -1921
- claude_mpm/cli/commands/socketio_monitor.py +0 -233
- 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_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 -424
- claude_mpm/services/cli/socketio_manager.py +0 -498
- 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-4.1.6.dist-info/METADATA +0 -325
- claude_mpm-4.1.6.dist-info/RECORD +0 -550
- {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/top_level.txt +0 -0
claude_mpm/core/socketio_pool.py
CHANGED
|
@@ -17,7 +17,7 @@ import threading
|
|
|
17
17
|
import time
|
|
18
18
|
from collections import defaultdict, deque
|
|
19
19
|
from dataclasses import dataclass, field
|
|
20
|
-
from datetime import datetime, timedelta
|
|
20
|
+
from datetime import datetime, timedelta, timezone
|
|
21
21
|
from enum import Enum
|
|
22
22
|
from typing import Any, Deque, Dict, List, Optional
|
|
23
23
|
|
|
@@ -97,11 +97,9 @@ class CircuitBreaker:
|
|
|
97
97
|
return True
|
|
98
98
|
if self.state == CircuitState.OPEN:
|
|
99
99
|
# Check if recovery timeout has passed
|
|
100
|
-
if (
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
> timedelta(seconds=self.recovery_timeout)
|
|
104
|
-
):
|
|
100
|
+
if self.last_failure_time and datetime.now(
|
|
101
|
+
timezone.utc
|
|
102
|
+
) - self.last_failure_time > timedelta(seconds=self.recovery_timeout):
|
|
105
103
|
self.state = CircuitState.HALF_OPEN
|
|
106
104
|
self.logger.info(
|
|
107
105
|
"Circuit breaker transitioning to HALF_OPEN for testing"
|
|
@@ -127,7 +125,7 @@ class CircuitBreaker:
|
|
|
127
125
|
def record_failure(self):
|
|
128
126
|
"""Record failed execution."""
|
|
129
127
|
self.failure_count += 1
|
|
130
|
-
self.last_failure_time = datetime.now()
|
|
128
|
+
self.last_failure_time = datetime.now(timezone.utc)
|
|
131
129
|
|
|
132
130
|
if self.state == CircuitState.HALF_OPEN:
|
|
133
131
|
# Test failed, go back to OPEN
|
|
@@ -184,7 +182,7 @@ class SocketIOConnectionPool:
|
|
|
184
182
|
# Health monitoring
|
|
185
183
|
self.health_thread = None
|
|
186
184
|
self.health_running = False
|
|
187
|
-
self.last_health_check = datetime.now()
|
|
185
|
+
self.last_health_check = datetime.now(timezone.utc)
|
|
188
186
|
|
|
189
187
|
# Server configuration
|
|
190
188
|
self.server_url = None
|
|
@@ -311,7 +309,7 @@ class SocketIOConnectionPool:
|
|
|
311
309
|
self.server_url = f"http://localhost:{port}"
|
|
312
310
|
self.logger.debug(f"Detected Socket.IO server on port {port}")
|
|
313
311
|
return
|
|
314
|
-
except:
|
|
312
|
+
except Exception:
|
|
315
313
|
continue
|
|
316
314
|
|
|
317
315
|
# Fall back to default
|
|
@@ -375,7 +373,7 @@ class SocketIOConnectionPool:
|
|
|
375
373
|
# Check if connection is still valid
|
|
376
374
|
for conn_id, stats in self.connection_stats.items():
|
|
377
375
|
if stats.is_connected:
|
|
378
|
-
stats.last_used = datetime.now()
|
|
376
|
+
stats.last_used = datetime.now(timezone.utc)
|
|
379
377
|
return client
|
|
380
378
|
|
|
381
379
|
# Create new connection if under limit
|
|
@@ -581,7 +579,7 @@ class SocketIOConnectionPool:
|
|
|
581
579
|
loop.stop()
|
|
582
580
|
loop.run_until_complete(loop.shutdown_asyncgens())
|
|
583
581
|
loop.close()
|
|
584
|
-
except:
|
|
582
|
+
except Exception:
|
|
585
583
|
pass
|
|
586
584
|
|
|
587
585
|
async def _connect_client(self, client: socketio.AsyncClient):
|
|
@@ -596,9 +594,9 @@ class SocketIOConnectionPool:
|
|
|
596
594
|
timeout=2.0,
|
|
597
595
|
)
|
|
598
596
|
|
|
599
|
-
except asyncio.TimeoutError:
|
|
597
|
+
except asyncio.TimeoutError as e:
|
|
600
598
|
self.logger.debug("Socket.IO connection timeout")
|
|
601
|
-
raise TimeoutError("Socket.IO connection timeout")
|
|
599
|
+
raise TimeoutError("Socket.IO connection timeout") from e
|
|
602
600
|
except Exception as e:
|
|
603
601
|
self.logger.debug(f"Client connection failed: {e}")
|
|
604
602
|
raise
|
|
@@ -623,7 +621,7 @@ class SocketIOConnectionPool:
|
|
|
623
621
|
self._check_connections_health()
|
|
624
622
|
|
|
625
623
|
# Update last health check time
|
|
626
|
-
self.last_health_check = datetime.now()
|
|
624
|
+
self.last_health_check = datetime.now(timezone.utc)
|
|
627
625
|
|
|
628
626
|
except Exception as e:
|
|
629
627
|
self.logger.error(f"Health monitor error: {e}")
|
|
@@ -655,7 +653,9 @@ class SocketIOConnectionPool:
|
|
|
655
653
|
continue
|
|
656
654
|
|
|
657
655
|
# 3. Connection idle for too long (>5 minutes)
|
|
658
|
-
idle_time = (
|
|
656
|
+
idle_time = (
|
|
657
|
+
datetime.now(timezone.utc) - stats.last_used
|
|
658
|
+
).total_seconds()
|
|
659
659
|
if idle_time > 300 and conn_id not in [
|
|
660
660
|
id for id, _ in enumerate(self.available_connections)
|
|
661
661
|
]:
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Tool access control system for managing which tools agents can use."""
|
|
2
2
|
|
|
3
|
-
import logging
|
|
4
3
|
from typing import Dict, List, Set
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
6
|
+
|
|
7
|
+
logger = get_logger(__name__)
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
class ToolAccessControl:
|
claude_mpm/core/types.py
CHANGED
|
@@ -16,10 +16,12 @@ Module-specific types should remain in their respective modules.
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
from dataclasses import dataclass
|
|
19
|
-
from datetime import datetime
|
|
19
|
+
from datetime import datetime, timezone
|
|
20
20
|
from enum import Enum
|
|
21
21
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
22
22
|
|
|
23
|
+
from .enums import HealthStatus
|
|
24
|
+
|
|
23
25
|
|
|
24
26
|
# Service operation results
|
|
25
27
|
@dataclass
|
|
@@ -206,7 +208,7 @@ class TaskInfo:
|
|
|
206
208
|
if self.metadata is None:
|
|
207
209
|
self.metadata = {}
|
|
208
210
|
if self.created_at is None:
|
|
209
|
-
self.created_at = datetime.now()
|
|
211
|
+
self.created_at = datetime.now(timezone.utc)
|
|
210
212
|
if self.updated_at is None:
|
|
211
213
|
self.updated_at = self.created_at
|
|
212
214
|
|
|
@@ -230,15 +232,6 @@ class SocketMessage:
|
|
|
230
232
|
|
|
231
233
|
|
|
232
234
|
# Health monitoring types
|
|
233
|
-
class HealthStatus(Enum):
|
|
234
|
-
"""Service health status levels."""
|
|
235
|
-
|
|
236
|
-
HEALTHY = "healthy"
|
|
237
|
-
DEGRADED = "degraded"
|
|
238
|
-
UNHEALTHY = "unhealthy"
|
|
239
|
-
UNKNOWN = "unknown"
|
|
240
|
-
|
|
241
|
-
|
|
242
235
|
@dataclass
|
|
243
236
|
class HealthCheck:
|
|
244
237
|
"""Health check result."""
|
claude_mpm/core/typing_utils.py
CHANGED
|
@@ -32,6 +32,8 @@ from typing import (
|
|
|
32
32
|
|
|
33
33
|
from typing_extensions import NotRequired, TypeAlias, TypedDict
|
|
34
34
|
|
|
35
|
+
from claude_mpm.core.enums import OperationResult, ServiceState
|
|
36
|
+
|
|
35
37
|
# Generic type variables
|
|
36
38
|
T = TypeVar("T")
|
|
37
39
|
TSession = TypeVar("TSession") # Generic session type
|
|
@@ -42,15 +44,14 @@ TService = TypeVar("TService") # Generic service type
|
|
|
42
44
|
PathLike: TypeAlias = Union[str, Path]
|
|
43
45
|
JSONValue: TypeAlias = Union[str, int, float, bool, None, Dict[str, Any], List[Any]]
|
|
44
46
|
JSONDict: TypeAlias = Dict[str, JSONValue]
|
|
47
|
+
|
|
45
48
|
Headers: TypeAlias = Dict[str, str]
|
|
46
49
|
ErrorCode: TypeAlias = Union[int, str]
|
|
47
50
|
LogLevel: TypeAlias = Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
|
|
48
51
|
|
|
49
52
|
# Session types
|
|
50
53
|
SessionId: TypeAlias = str
|
|
51
|
-
SessionStatus: TypeAlias = Literal
|
|
52
|
-
"initializing", "running", "stopped", "error", "completed"
|
|
53
|
-
]
|
|
54
|
+
SessionStatus: TypeAlias = ServiceState # Replaced Literal with ServiceState enum
|
|
54
55
|
LaunchMethod: TypeAlias = Literal["exec", "subprocess", "oneshot"]
|
|
55
56
|
|
|
56
57
|
|
|
@@ -152,7 +153,7 @@ class WebSocketMessage(TypedDict):
|
|
|
152
153
|
class ClaudeStatus(TypedDict):
|
|
153
154
|
"""Claude process status."""
|
|
154
155
|
|
|
155
|
-
status: Literal
|
|
156
|
+
status: ServiceState # Replaced Literal with ServiceState enum
|
|
156
157
|
message: str
|
|
157
158
|
timestamp: NotRequired[datetime]
|
|
158
159
|
pid: NotRequired[int]
|
|
@@ -163,7 +164,7 @@ class DelegationInfo(TypedDict):
|
|
|
163
164
|
|
|
164
165
|
agent: AgentId
|
|
165
166
|
task: str
|
|
166
|
-
status: Literal
|
|
167
|
+
status: OperationResult # Replaced Literal with OperationResult enum
|
|
167
168
|
timestamp: NotRequired[datetime]
|
|
168
169
|
result: NotRequired[str]
|
|
169
170
|
|
|
@@ -194,7 +195,7 @@ class HookContext(TypedDict):
|
|
|
194
195
|
|
|
195
196
|
# Service types
|
|
196
197
|
ServiceName: TypeAlias = str
|
|
197
|
-
ServiceStatus: TypeAlias = Literal
|
|
198
|
+
ServiceStatus: TypeAlias = ServiceState # Replaced Literal with ServiceState enum
|
|
198
199
|
|
|
199
200
|
|
|
200
201
|
class ServiceConfig(TypedDict):
|
|
@@ -27,17 +27,18 @@ Architecture:
|
|
|
27
27
|
|
|
28
28
|
import contextlib
|
|
29
29
|
import json
|
|
30
|
-
import logging
|
|
31
30
|
import time
|
|
32
31
|
from dataclasses import asdict, dataclass
|
|
33
|
-
from datetime import datetime
|
|
32
|
+
from datetime import datetime, timezone
|
|
34
33
|
from enum import Enum
|
|
35
34
|
from pathlib import Path
|
|
36
35
|
from typing import Any, Dict, List, Optional, Set, Union
|
|
37
36
|
|
|
37
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
38
|
+
|
|
38
39
|
from .unified_paths import get_path_manager
|
|
39
40
|
|
|
40
|
-
logger =
|
|
41
|
+
logger = get_logger(__name__)
|
|
41
42
|
|
|
42
43
|
|
|
43
44
|
class AgentTier(Enum):
|
|
@@ -167,11 +168,26 @@ class UnifiedAgentRegistry:
|
|
|
167
168
|
if project_path.exists():
|
|
168
169
|
self.discovery_paths.append(project_path)
|
|
169
170
|
|
|
171
|
+
# Also check for local JSON templates in .claude-mpm/agents/
|
|
172
|
+
local_project_path = self.path_manager.project_root / ".claude-mpm" / "agents"
|
|
173
|
+
if (
|
|
174
|
+
local_project_path.exists()
|
|
175
|
+
and local_project_path not in self.discovery_paths
|
|
176
|
+
):
|
|
177
|
+
self.discovery_paths.append(local_project_path)
|
|
178
|
+
logger.debug(f"Added local project templates path: {local_project_path}")
|
|
179
|
+
|
|
170
180
|
# User-level agents
|
|
171
181
|
user_path = self.path_manager.get_user_agents_dir()
|
|
172
182
|
if user_path.exists():
|
|
173
183
|
self.discovery_paths.append(user_path)
|
|
174
184
|
|
|
185
|
+
# Also check for user JSON templates in ~/.claude-mpm/agents/
|
|
186
|
+
local_user_path = Path.home() / ".claude-mpm" / "agents"
|
|
187
|
+
if local_user_path.exists() and local_user_path not in self.discovery_paths:
|
|
188
|
+
self.discovery_paths.append(local_user_path)
|
|
189
|
+
logger.debug(f"Added local user templates path: {local_user_path}")
|
|
190
|
+
|
|
175
191
|
# System-level agents (includes templates as a subdirectory)
|
|
176
192
|
system_path = self.path_manager.get_system_agents_dir()
|
|
177
193
|
if system_path.exists():
|
|
@@ -328,7 +344,48 @@ class UnifiedAgentRegistry:
|
|
|
328
344
|
file_path, agent_format
|
|
329
345
|
)
|
|
330
346
|
|
|
331
|
-
|
|
347
|
+
# For JSON files, extract additional metadata
|
|
348
|
+
version = "1.0.0"
|
|
349
|
+
author = ""
|
|
350
|
+
tags = []
|
|
351
|
+
|
|
352
|
+
if agent_format == AgentFormat.JSON:
|
|
353
|
+
try:
|
|
354
|
+
content = file_path.read_text(encoding="utf-8")
|
|
355
|
+
data = json.loads(content)
|
|
356
|
+
|
|
357
|
+
# Extract version
|
|
358
|
+
version = data.get("agent_version", data.get("version", "1.0.0"))
|
|
359
|
+
|
|
360
|
+
# Extract author (use project name for local agents)
|
|
361
|
+
author = data.get("author", "")
|
|
362
|
+
if not author and ".claude-mpm" in str(file_path):
|
|
363
|
+
# For local agents, use project directory name as author
|
|
364
|
+
project_root = file_path
|
|
365
|
+
while project_root.parent != project_root:
|
|
366
|
+
if (project_root / ".claude-mpm").exists():
|
|
367
|
+
author = project_root.name
|
|
368
|
+
break
|
|
369
|
+
project_root = project_root.parent
|
|
370
|
+
|
|
371
|
+
# Extract tags (handle both list and comma-separated string formats)
|
|
372
|
+
if "metadata" in data:
|
|
373
|
+
tags_raw = data["metadata"].get("tags", [])
|
|
374
|
+
if isinstance(tags_raw, str):
|
|
375
|
+
tags = [
|
|
376
|
+
tag.strip()
|
|
377
|
+
for tag in tags_raw.split(",")
|
|
378
|
+
if tag.strip()
|
|
379
|
+
]
|
|
380
|
+
else:
|
|
381
|
+
tags = tags_raw if isinstance(tags_raw, list) else []
|
|
382
|
+
|
|
383
|
+
except Exception as e:
|
|
384
|
+
logger.debug(
|
|
385
|
+
f"Could not extract extra JSON metadata from {file_path}: {e}"
|
|
386
|
+
)
|
|
387
|
+
|
|
388
|
+
metadata = AgentMetadata(
|
|
332
389
|
name=agent_name,
|
|
333
390
|
agent_type=agent_type,
|
|
334
391
|
tier=tier,
|
|
@@ -337,8 +394,24 @@ class UnifiedAgentRegistry:
|
|
|
337
394
|
last_modified=file_path.stat().st_mtime,
|
|
338
395
|
description=description,
|
|
339
396
|
specializations=specializations,
|
|
397
|
+
version=version,
|
|
398
|
+
author=author,
|
|
399
|
+
tags=tags,
|
|
340
400
|
)
|
|
341
401
|
|
|
402
|
+
# Set higher priority for local agents
|
|
403
|
+
if ".claude-mpm" in str(file_path):
|
|
404
|
+
if tier == AgentTier.PROJECT:
|
|
405
|
+
# Highest priority for project-local agents
|
|
406
|
+
metadata.tags.append("local")
|
|
407
|
+
metadata.tags.append("project")
|
|
408
|
+
elif tier == AgentTier.USER:
|
|
409
|
+
# High priority for user-local agents
|
|
410
|
+
metadata.tags.append("local")
|
|
411
|
+
metadata.tags.append("user")
|
|
412
|
+
|
|
413
|
+
return metadata
|
|
414
|
+
|
|
342
415
|
except Exception as e:
|
|
343
416
|
logger.error(f"Failed to create metadata for {file_path}: {e}")
|
|
344
417
|
return None
|
|
@@ -387,8 +460,39 @@ class UnifiedAgentRegistry:
|
|
|
387
460
|
|
|
388
461
|
if agent_format == AgentFormat.JSON:
|
|
389
462
|
data = json.loads(content)
|
|
390
|
-
|
|
391
|
-
|
|
463
|
+
|
|
464
|
+
# Ensure data is a dictionary, not a list
|
|
465
|
+
if not isinstance(data, dict):
|
|
466
|
+
logger.warning(
|
|
467
|
+
f"Invalid JSON structure in {file_path}: expected object, got {type(data).__name__}"
|
|
468
|
+
)
|
|
469
|
+
return "", []
|
|
470
|
+
|
|
471
|
+
# Handle local agent JSON templates with metadata structure
|
|
472
|
+
if "metadata" in data:
|
|
473
|
+
metadata = data["metadata"]
|
|
474
|
+
description = metadata.get(
|
|
475
|
+
"description", data.get("description", "")
|
|
476
|
+
)
|
|
477
|
+
specializations = metadata.get(
|
|
478
|
+
"specializations", data.get("specializations", [])
|
|
479
|
+
)
|
|
480
|
+
|
|
481
|
+
# Extract tags as specializations if present (handle both formats)
|
|
482
|
+
tags_raw = metadata.get("tags", [])
|
|
483
|
+
if isinstance(tags_raw, str):
|
|
484
|
+
tags = [
|
|
485
|
+
tag.strip() for tag in tags_raw.split(",") if tag.strip()
|
|
486
|
+
]
|
|
487
|
+
else:
|
|
488
|
+
tags = tags_raw if isinstance(tags_raw, list) else []
|
|
489
|
+
if tags and not specializations:
|
|
490
|
+
specializations = tags
|
|
491
|
+
else:
|
|
492
|
+
# Fallback to direct fields
|
|
493
|
+
description = data.get("description", "")
|
|
494
|
+
specializations = data.get("specializations", [])
|
|
495
|
+
|
|
392
496
|
elif agent_format in [AgentFormat.YAML, AgentFormat.YAML]:
|
|
393
497
|
try:
|
|
394
498
|
import yaml
|
|
@@ -420,8 +524,8 @@ class UnifiedAgentRegistry:
|
|
|
420
524
|
for _i, line in enumerate(lines[1:], 1):
|
|
421
525
|
if line.strip() == "---":
|
|
422
526
|
break
|
|
423
|
-
if line.startswith("description:"):
|
|
424
|
-
return line.split(":", 1)[1].strip().strip("\"'")
|
|
527
|
+
if line.strip().startswith("description:"):
|
|
528
|
+
return line.strip().split(":", 1)[1].strip().strip("\"'")
|
|
425
529
|
|
|
426
530
|
# Look for first paragraph
|
|
427
531
|
for line in lines:
|
|
@@ -455,7 +559,7 @@ class UnifiedAgentRegistry:
|
|
|
455
559
|
"""Apply tier precedence rules to resolve conflicts."""
|
|
456
560
|
# Group agents by their actual name (without tier suffix)
|
|
457
561
|
agent_groups = {}
|
|
458
|
-
for
|
|
562
|
+
for _registry_key, metadata in self.registry.items():
|
|
459
563
|
# Extract the actual agent name (registry_key is "name_tier")
|
|
460
564
|
agent_name = metadata.name # Use the actual name from metadata
|
|
461
565
|
if agent_name not in agent_groups:
|
|
@@ -615,7 +719,7 @@ class UnifiedAgentRegistry:
|
|
|
615
719
|
|
|
616
720
|
export_data = {
|
|
617
721
|
"metadata": {
|
|
618
|
-
"export_time": datetime.now().isoformat(),
|
|
722
|
+
"export_time": datetime.now(timezone.utc).isoformat(),
|
|
619
723
|
"total_agents": len(self.registry),
|
|
620
724
|
"discovery_paths": [str(p) for p in self.discovery_paths],
|
|
621
725
|
},
|
|
@@ -624,7 +728,7 @@ class UnifiedAgentRegistry:
|
|
|
624
728
|
},
|
|
625
729
|
}
|
|
626
730
|
|
|
627
|
-
with open(
|
|
731
|
+
with output_path.open("w") as f:
|
|
628
732
|
json.dump(export_data, f, indent=2)
|
|
629
733
|
|
|
630
734
|
logger.info(f"Exported {len(self.registry)} agents to {output_path}")
|
|
@@ -633,7 +737,7 @@ class UnifiedAgentRegistry:
|
|
|
633
737
|
"""Import registry from JSON file."""
|
|
634
738
|
input_path = Path(input_path)
|
|
635
739
|
|
|
636
|
-
with open(
|
|
740
|
+
with input_path.open() as f:
|
|
637
741
|
data = json.load(f)
|
|
638
742
|
|
|
639
743
|
# Clear current registry
|
|
@@ -436,7 +436,7 @@ class ConfigurationService:
|
|
|
436
436
|
if config_path.exists():
|
|
437
437
|
import yaml
|
|
438
438
|
|
|
439
|
-
with open(
|
|
439
|
+
with config_path.open() as f:
|
|
440
440
|
file_config = yaml.safe_load(f) or {}
|
|
441
441
|
config_data.update(file_config)
|
|
442
442
|
break
|
|
@@ -448,7 +448,7 @@ class ConfigurationService:
|
|
|
448
448
|
raise ConfigurationError(
|
|
449
449
|
f"Failed to load configuration: {e}",
|
|
450
450
|
context={"error_type": type(e).__name__},
|
|
451
|
-
)
|
|
451
|
+
) from e
|
|
452
452
|
|
|
453
453
|
@property
|
|
454
454
|
def config(self) -> UnifiedConfig:
|
|
@@ -515,7 +515,7 @@ class ConfigurationService:
|
|
|
515
515
|
return True
|
|
516
516
|
raise ConfigurationError("Invalid SocketIO port range")
|
|
517
517
|
except Exception as e:
|
|
518
|
-
raise ConfigurationError(f"Configuration validation failed: {e}")
|
|
518
|
+
raise ConfigurationError(f"Configuration validation failed: {e}") from e
|
|
519
519
|
|
|
520
520
|
def export_to_file(self, file_path: Union[str, Path], format: str = "yaml") -> None:
|
|
521
521
|
"""
|
|
@@ -531,12 +531,12 @@ class ConfigurationService:
|
|
|
531
531
|
if format.lower() == "yaml":
|
|
532
532
|
import yaml
|
|
533
533
|
|
|
534
|
-
with open(
|
|
534
|
+
with file_path.open("w") as f:
|
|
535
535
|
yaml.dump(self._config.dict(), f, default_flow_style=False)
|
|
536
536
|
elif format.lower() == "json":
|
|
537
537
|
import json
|
|
538
538
|
|
|
539
|
-
with open(
|
|
539
|
+
with file_path.open("w") as f:
|
|
540
540
|
json.dump(self._config.dict(), f, indent=2)
|
|
541
541
|
else:
|
|
542
542
|
raise ConfigurationError(f"Unsupported export format: {format}")
|
|
@@ -545,4 +545,4 @@ class ConfigurationService:
|
|
|
545
545
|
raise ConfigurationError(
|
|
546
546
|
f"Failed to export configuration: {e}",
|
|
547
547
|
context={"file_path": str(file_path), "format": format},
|
|
548
|
-
)
|
|
548
|
+
) from e
|
claude_mpm/core/unified_paths.py
CHANGED
|
@@ -24,7 +24,6 @@ Architecture:
|
|
|
24
24
|
- Cached properties with smart invalidation
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
|
-
import logging
|
|
28
27
|
import os
|
|
29
28
|
import sys
|
|
30
29
|
from enum import Enum
|
|
@@ -32,7 +31,9 @@ from functools import lru_cache
|
|
|
32
31
|
from pathlib import Path
|
|
33
32
|
from typing import Optional, Union
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
35
|
+
|
|
36
|
+
logger = get_logger(__name__)
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
class PathType(Enum):
|
|
@@ -82,11 +83,12 @@ class PathContext:
|
|
|
82
83
|
# Check if we're in a src/ directory structure with pyproject.toml
|
|
83
84
|
current = module_path
|
|
84
85
|
for _ in range(5): # Check up to 5 levels up
|
|
85
|
-
if (current / "pyproject.toml").exists()
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
if (current / "pyproject.toml").exists() and (
|
|
87
|
+
current / "src" / "claude_mpm"
|
|
88
|
+
).exists():
|
|
89
|
+
# Found pyproject.toml with development setup
|
|
90
|
+
logger.debug(f"Found development installation at {current}")
|
|
91
|
+
return True
|
|
90
92
|
if current == current.parent:
|
|
91
93
|
break
|
|
92
94
|
current = current.parent
|
|
@@ -177,7 +179,7 @@ class PathContext:
|
|
|
177
179
|
"""
|
|
178
180
|
# Check for environment variable override
|
|
179
181
|
if os.environ.get("CLAUDE_MPM_DEV_MODE", "").lower() in ("1", "true", "yes"):
|
|
180
|
-
logger.
|
|
182
|
+
logger.debug(
|
|
181
183
|
"Development mode forced via CLAUDE_MPM_DEV_MODE environment variable"
|
|
182
184
|
)
|
|
183
185
|
return DeploymentContext.DEVELOPMENT
|
|
@@ -197,10 +199,10 @@ class PathContext:
|
|
|
197
199
|
'name = "claude-mpm"' in pyproject_content
|
|
198
200
|
or '"claude-mpm"' in pyproject_content
|
|
199
201
|
):
|
|
200
|
-
logger.
|
|
202
|
+
logger.debug(
|
|
201
203
|
f"Detected claude-mpm development directory at {current}"
|
|
202
204
|
)
|
|
203
|
-
logger.
|
|
205
|
+
logger.debug(
|
|
204
206
|
"Using development mode for local source preference"
|
|
205
207
|
)
|
|
206
208
|
return DeploymentContext.DEVELOPMENT
|
|
@@ -218,7 +220,7 @@ class PathContext:
|
|
|
218
220
|
# First check if this is an editable install, regardless of path
|
|
219
221
|
# This is important for cases where pipx points to a development installation
|
|
220
222
|
if PathContext._is_editable_install():
|
|
221
|
-
logger.
|
|
223
|
+
logger.debug("Detected editable/development installation")
|
|
222
224
|
# Check if we should use development paths
|
|
223
225
|
# This could be because we're in a src/ directory or running from dev directory
|
|
224
226
|
if module_path.parent.name == "src":
|
|
@@ -232,7 +234,7 @@ class PathContext:
|
|
|
232
234
|
if (current / "src" / "claude_mpm").exists() and (
|
|
233
235
|
current / "pyproject.toml"
|
|
234
236
|
).exists():
|
|
235
|
-
logger.
|
|
237
|
+
logger.debug(
|
|
236
238
|
"Running pipx from development directory, using development mode"
|
|
237
239
|
)
|
|
238
240
|
return DeploymentContext.DEVELOPMENT
|
|
@@ -248,33 +250,33 @@ class PathContext:
|
|
|
248
250
|
module_path.parent.name == "src"
|
|
249
251
|
and (module_path.parent.parent / "src" / "claude_mpm").exists()
|
|
250
252
|
):
|
|
251
|
-
logger.
|
|
253
|
+
logger.debug(
|
|
252
254
|
f"Detected development mode via directory structure at {module_path}"
|
|
253
255
|
)
|
|
254
256
|
return DeploymentContext.DEVELOPMENT
|
|
255
257
|
|
|
256
258
|
# Check for pipx install
|
|
257
259
|
if "pipx" in str(module_path):
|
|
258
|
-
logger.
|
|
260
|
+
logger.debug(f"Detected pipx installation at {module_path}")
|
|
259
261
|
return DeploymentContext.PIPX_INSTALL
|
|
260
262
|
|
|
261
263
|
# Check for system package
|
|
262
264
|
if "dist-packages" in str(module_path):
|
|
263
|
-
logger.
|
|
265
|
+
logger.debug(f"Detected system package installation at {module_path}")
|
|
264
266
|
return DeploymentContext.SYSTEM_PACKAGE
|
|
265
267
|
|
|
266
268
|
# Check for site-packages (could be pip or editable)
|
|
267
269
|
if "site-packages" in str(module_path):
|
|
268
270
|
# Already checked for editable above, so this is a regular pip install
|
|
269
|
-
logger.
|
|
271
|
+
logger.debug(f"Detected pip installation at {module_path}")
|
|
270
272
|
return DeploymentContext.PIP_INSTALL
|
|
271
273
|
|
|
272
274
|
# Default to pip install
|
|
273
|
-
logger.
|
|
275
|
+
logger.debug(f"Defaulting to pip installation for {module_path}")
|
|
274
276
|
return DeploymentContext.PIP_INSTALL
|
|
275
277
|
|
|
276
278
|
except ImportError:
|
|
277
|
-
logger.
|
|
279
|
+
logger.debug(
|
|
278
280
|
"ImportError during context detection, defaulting to development"
|
|
279
281
|
)
|
|
280
282
|
return DeploymentContext.DEVELOPMENT
|
|
@@ -320,7 +322,8 @@ class UnifiedPathManager:
|
|
|
320
322
|
]
|
|
321
323
|
self._initialized = True
|
|
322
324
|
|
|
323
|
-
|
|
325
|
+
# Use debug level for initialization details
|
|
326
|
+
logger.debug(
|
|
324
327
|
f"UnifiedPathManager initialized with context: {self._deployment_context.value}"
|
|
325
328
|
)
|
|
326
329
|
|
|
@@ -394,7 +397,7 @@ class UnifiedPathManager:
|
|
|
394
397
|
return current
|
|
395
398
|
current = current.parent
|
|
396
399
|
|
|
397
|
-
raise FileNotFoundError("Could not determine framework root")
|
|
400
|
+
raise FileNotFoundError("Could not determine framework root") from None
|
|
398
401
|
|
|
399
402
|
@property
|
|
400
403
|
@lru_cache(maxsize=1)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Dashboard package for Claude MPM.
|
|
3
|
+
|
|
4
|
+
This package contains the web-based dashboard components for Claude MPM,
|
|
5
|
+
including the analysis runner, dashboard opener, and static web assets.
|
|
6
|
+
|
|
7
|
+
The dashboard provides real-time monitoring, analysis visualization, and
|
|
8
|
+
interactive debugging capabilities for Claude MPM operations.
|
|
9
|
+
|
|
10
|
+
This __init__.py file is required to make this directory recognizable as a
|
|
11
|
+
Python package by setuptools for proper distribution and imports.
|
|
12
|
+
"""
|