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
|
@@ -13,20 +13,24 @@
|
|
|
13
13
|
* compatibility for existing code that depends on the dashboard interface.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
// ES6
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
16
|
+
// NOTE: Components are loaded as ES6 modules via index.html
|
|
17
|
+
// They expose their classes globally for backward compatibility
|
|
18
|
+
// Commenting out ES6 imports to avoid module resolution errors
|
|
19
|
+
|
|
20
|
+
// import { SocketManager } from './components/socket-manager.js';
|
|
21
|
+
// import { EventViewer } from './components/event-viewer.js';
|
|
22
|
+
// import { ModuleViewer } from './components/module-viewer.js';
|
|
23
|
+
// import { SessionManager } from './components/session-manager.js';
|
|
24
|
+
// import { AgentInference } from './components/agent-inference.js';
|
|
25
|
+
// import { AgentHierarchy } from './components/agent-hierarchy.js';
|
|
26
|
+
// import { UIStateManager } from './components/ui-state-manager.js';
|
|
27
|
+
// import { EventProcessor } from './components/event-processor.js';
|
|
28
|
+
// import { ExportManager } from './components/export-manager.js';
|
|
29
|
+
// import { WorkingDirectoryManager } from './components/working-directory.js';
|
|
30
|
+
// import { FileToolTracker } from './components/file-tool-tracker.js';
|
|
31
|
+
// import { BuildTracker } from './components/build-tracker.js';
|
|
32
|
+
// import { UnifiedDataViewer } from './components/unified-data-viewer.js';
|
|
33
|
+
|
|
30
34
|
class Dashboard {
|
|
31
35
|
constructor() {
|
|
32
36
|
// Core components (existing)
|
|
@@ -60,6 +64,9 @@ class Dashboard {
|
|
|
60
64
|
console.log('Initializing refactored Claude MPM Dashboard...');
|
|
61
65
|
|
|
62
66
|
try {
|
|
67
|
+
// Fetch server configuration first
|
|
68
|
+
this.fetchServerConfig();
|
|
69
|
+
|
|
63
70
|
// Initialize modules in dependency order
|
|
64
71
|
this.initializeSocketManager();
|
|
65
72
|
this.initializeCoreComponents();
|
|
@@ -86,6 +93,39 @@ class Dashboard {
|
|
|
86
93
|
}
|
|
87
94
|
}
|
|
88
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Fetch server configuration for dashboard initialization
|
|
98
|
+
*/
|
|
99
|
+
fetchServerConfig() {
|
|
100
|
+
fetch('/api/config')
|
|
101
|
+
.then(response => response.json())
|
|
102
|
+
.then(config => {
|
|
103
|
+
// Store config globally for other components
|
|
104
|
+
window.dashboardConfig = config;
|
|
105
|
+
|
|
106
|
+
// Update initial UI elements if they exist
|
|
107
|
+
const workingDirEl = document.getElementById('working-dir-path');
|
|
108
|
+
if (workingDirEl && config.workingDirectory) {
|
|
109
|
+
workingDirEl.textContent = config.workingDirectory;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const gitBranchEl = document.getElementById('footer-git-branch');
|
|
113
|
+
if (gitBranchEl && config.gitBranch) {
|
|
114
|
+
gitBranchEl.textContent = config.gitBranch;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
console.log('Dashboard configuration loaded:', config);
|
|
118
|
+
})
|
|
119
|
+
.catch(error => {
|
|
120
|
+
console.warn('Failed to fetch server config:', error);
|
|
121
|
+
// Set default config as fallback
|
|
122
|
+
window.dashboardConfig = {
|
|
123
|
+
workingDirectory: '.',
|
|
124
|
+
gitBranch: 'Unknown'
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
89
129
|
/**
|
|
90
130
|
* Validate that all critical components are initialized
|
|
91
131
|
* WHY: Ensures dashboard is in a valid state after initialization
|
|
@@ -100,8 +140,6 @@ class Dashboard {
|
|
|
100
140
|
const missing = criticalComponents.filter(c => !c.component);
|
|
101
141
|
if (missing.length > 0) {
|
|
102
142
|
console.warn('Missing critical components:', missing.map(c => c.name));
|
|
103
|
-
} else {
|
|
104
|
-
console.log('All critical components initialized');
|
|
105
143
|
}
|
|
106
144
|
}
|
|
107
145
|
|
|
@@ -119,7 +157,6 @@ class Dashboard {
|
|
|
119
157
|
// Set global reference for agent hierarchy after dashboard is available
|
|
120
158
|
if (this.agentHierarchy) {
|
|
121
159
|
window.dashboard.agentHierarchy = this.agentHierarchy;
|
|
122
|
-
console.log('Agent hierarchy global reference set');
|
|
123
160
|
}
|
|
124
161
|
|
|
125
162
|
// Initialize any other components that need window.dashboard
|
|
@@ -206,7 +243,6 @@ class Dashboard {
|
|
|
206
243
|
try {
|
|
207
244
|
this.agentHierarchy = new AgentHierarchy(this.agentInference, this.eventViewer);
|
|
208
245
|
// Global reference will be set in postInit() after window.dashboard exists
|
|
209
|
-
console.log('Agent hierarchy component created');
|
|
210
246
|
} catch (error) {
|
|
211
247
|
console.error('Failed to initialize agent hierarchy:', error);
|
|
212
248
|
// Create a stub to prevent further errors
|
|
@@ -262,12 +298,29 @@ class Dashboard {
|
|
|
262
298
|
setupModuleInteractions() {
|
|
263
299
|
// Socket events to update file operations and tool calls
|
|
264
300
|
this.socketManager.onEventUpdate((events) => {
|
|
301
|
+
console.log('[Dashboard] Processing event update with', events.length, 'events');
|
|
302
|
+
|
|
303
|
+
// Debug: Log some sample events to see their structure
|
|
304
|
+
if (events.length > 0) {
|
|
305
|
+
console.log('[Dashboard] Sample event structure:', {
|
|
306
|
+
first_event: events[0],
|
|
307
|
+
has_tool_events: events.some(e => e.tool_name || (e.data && e.data.tool_name)),
|
|
308
|
+
hook_events: events.filter(e => e.type === 'hook').length,
|
|
309
|
+
tool_subtypes: events.filter(e => e.subtype === 'pre_tool' || e.subtype === 'post_tool').length
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
|
|
265
313
|
this.fileToolTracker.updateFileOperations(events);
|
|
266
314
|
this.fileToolTracker.updateToolCalls(events);
|
|
267
315
|
|
|
316
|
+
// Debug: Check what was tracked
|
|
317
|
+
const fileOps = this.fileToolTracker.getFileOperations();
|
|
318
|
+
const toolCalls = this.fileToolTracker.getToolCalls();
|
|
319
|
+
console.log('[Dashboard] After update - File operations:', fileOps.size, 'Tool calls:', toolCalls.size);
|
|
320
|
+
|
|
268
321
|
// Process agent inference for new events
|
|
269
322
|
this.agentInference.processAgentInference();
|
|
270
|
-
|
|
323
|
+
|
|
271
324
|
// Update agent hierarchy with new events
|
|
272
325
|
this.agentHierarchy.updateWithNewEvents(events);
|
|
273
326
|
|
|
@@ -309,7 +362,6 @@ class Dashboard {
|
|
|
309
362
|
|
|
310
363
|
// Session changes
|
|
311
364
|
document.addEventListener('sessionFilterChanged', (e) => {
|
|
312
|
-
console.log('Session filter changed, re-rendering current tab:', this.uiStateManager.getCurrentTab());
|
|
313
365
|
this.renderCurrentTab();
|
|
314
366
|
});
|
|
315
367
|
}
|
|
@@ -394,25 +446,21 @@ class Dashboard {
|
|
|
394
446
|
|
|
395
447
|
// Create or get instance
|
|
396
448
|
if (!window.activityTreeInstance) {
|
|
397
|
-
console.log('Creating new ActivityTree instance...');
|
|
398
449
|
window.activityTreeInstance = new window.ActivityTree();
|
|
399
450
|
}
|
|
400
451
|
|
|
401
452
|
// Initialize if needed and render
|
|
402
453
|
if (window.activityTreeInstance) {
|
|
403
454
|
if (!window.activityTreeInstance.initialized) {
|
|
404
|
-
console.log('Initializing ActivityTree...');
|
|
405
455
|
window.activityTreeInstance.initialize();
|
|
406
456
|
}
|
|
407
457
|
|
|
408
458
|
if (typeof window.activityTreeInstance.renderWhenVisible === 'function') {
|
|
409
|
-
console.log('Dashboard triggering activity tree render...');
|
|
410
459
|
window.activityTreeInstance.renderWhenVisible();
|
|
411
460
|
}
|
|
412
461
|
|
|
413
462
|
// Force show to ensure the tree is visible
|
|
414
463
|
if (typeof window.activityTreeInstance.forceShow === 'function') {
|
|
415
|
-
console.log('Dashboard forcing activity tree to show...');
|
|
416
464
|
window.activityTreeInstance.forceShow();
|
|
417
465
|
}
|
|
418
466
|
}
|
|
@@ -421,11 +469,9 @@ class Dashboard {
|
|
|
421
469
|
const activityTreeInstance = window.activityTree();
|
|
422
470
|
if (activityTreeInstance) {
|
|
423
471
|
if (typeof activityTreeInstance.renderWhenVisible === 'function') {
|
|
424
|
-
console.log('Dashboard triggering activity tree render (legacy)...');
|
|
425
472
|
activityTreeInstance.renderWhenVisible();
|
|
426
473
|
}
|
|
427
474
|
if (typeof activityTreeInstance.forceShow === 'function') {
|
|
428
|
-
console.log('Dashboard forcing activity tree to show (legacy)...');
|
|
429
475
|
activityTreeInstance.forceShow();
|
|
430
476
|
}
|
|
431
477
|
}
|
|
@@ -719,10 +765,19 @@ class Dashboard {
|
|
|
719
765
|
|
|
720
766
|
const fileOperations = this.fileToolTracker.getFileOperations();
|
|
721
767
|
const filesArray = Array.from(fileOperations.entries());
|
|
768
|
+
|
|
769
|
+
console.log('[renderFiles] File operations map size:', fileOperations.size);
|
|
770
|
+
console.log('[renderFiles] Files array:', filesArray);
|
|
771
|
+
|
|
722
772
|
const uniqueFileInstances = this.eventProcessor.getUniqueFileInstances(filesArray);
|
|
723
773
|
const fileHTML = this.eventProcessor.generateFileHTML(uniqueFileInstances);
|
|
724
774
|
|
|
725
|
-
|
|
775
|
+
if (filesArray.length === 0) {
|
|
776
|
+
filesList.innerHTML = '<div class="empty-state">No file operations tracked yet. File operations will appear here when tools like Read, Write, Edit, or Grep are used.</div>';
|
|
777
|
+
} else {
|
|
778
|
+
filesList.innerHTML = fileHTML;
|
|
779
|
+
}
|
|
780
|
+
|
|
726
781
|
this.exportManager.scrollListToBottom('files-list');
|
|
727
782
|
|
|
728
783
|
// Update filter dropdowns
|
|
@@ -745,12 +800,7 @@ class Dashboard {
|
|
|
745
800
|
const sortedTypes = Array.from(agentTypes).filter(type => type && type.trim() !== '');
|
|
746
801
|
this.populateFilterDropdown('agents-type-filter', sortedTypes, 'All Agent Types');
|
|
747
802
|
|
|
748
|
-
//
|
|
749
|
-
if (sortedTypes.length > 0) {
|
|
750
|
-
console.log('Agent types found for filter:', sortedTypes);
|
|
751
|
-
} else {
|
|
752
|
-
console.log('No agent types found for filter. Instances:', uniqueInstances.length);
|
|
753
|
-
}
|
|
803
|
+
// Agent filter types populated
|
|
754
804
|
}
|
|
755
805
|
|
|
756
806
|
/**
|
|
@@ -1073,35 +1123,7 @@ window.switchTab = function(tabName) {
|
|
|
1073
1123
|
}
|
|
1074
1124
|
};
|
|
1075
1125
|
|
|
1076
|
-
// File Viewer Modal Functions -
|
|
1077
|
-
window.showFileViewerModal = function(filePath, workingDir) {
|
|
1078
|
-
// Use the dashboard's current working directory if not provided
|
|
1079
|
-
if (!workingDir && window.dashboard && window.dashboard.currentWorkingDir) {
|
|
1080
|
-
workingDir = window.dashboard.currentWorkingDir;
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
|
-
// Create modal if it doesn't exist
|
|
1084
|
-
let modal = document.getElementById('file-viewer-modal');
|
|
1085
|
-
if (!modal) {
|
|
1086
|
-
modal = createFileViewerModal();
|
|
1087
|
-
document.body.appendChild(modal);
|
|
1088
|
-
}
|
|
1089
|
-
|
|
1090
|
-
// Update modal content
|
|
1091
|
-
updateFileViewerModal(modal, filePath, workingDir);
|
|
1092
|
-
|
|
1093
|
-
// Show the modal as flex container
|
|
1094
|
-
modal.style.display = 'flex';
|
|
1095
|
-
document.body.style.overflow = 'hidden'; // Prevent background scrolling
|
|
1096
|
-
};
|
|
1097
|
-
|
|
1098
|
-
window.hideFileViewerModal = function() {
|
|
1099
|
-
const modal = document.getElementById('file-viewer-modal');
|
|
1100
|
-
if (modal) {
|
|
1101
|
-
modal.style.display = 'none';
|
|
1102
|
-
document.body.style.overflow = ''; // Restore background scrolling
|
|
1103
|
-
}
|
|
1104
|
-
};
|
|
1126
|
+
// File Viewer Modal Functions - Removed broken duplicate (using the one at line 1505)
|
|
1105
1127
|
|
|
1106
1128
|
window.copyFileContent = function() {
|
|
1107
1129
|
const modal = document.getElementById('file-viewer-modal');
|
|
@@ -1116,11 +1138,13 @@ window.copyFileContent = function() {
|
|
|
1116
1138
|
navigator.clipboard.writeText(text).then(() => {
|
|
1117
1139
|
// Show brief feedback
|
|
1118
1140
|
const button = modal.querySelector('.file-content-copy');
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1141
|
+
if (button) {
|
|
1142
|
+
const originalText = button.textContent;
|
|
1143
|
+
button.textContent = '✅ Copied!';
|
|
1144
|
+
setTimeout(() => {
|
|
1145
|
+
button.textContent = originalText;
|
|
1146
|
+
}, 2000);
|
|
1147
|
+
}
|
|
1124
1148
|
}).catch(err => {
|
|
1125
1149
|
console.error('Failed to copy text:', err);
|
|
1126
1150
|
});
|
|
@@ -1134,11 +1158,13 @@ window.copyFileContent = function() {
|
|
|
1134
1158
|
document.body.removeChild(textarea);
|
|
1135
1159
|
|
|
1136
1160
|
const button = modal.querySelector('.file-content-copy');
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1161
|
+
if (button) {
|
|
1162
|
+
const originalText = button.textContent;
|
|
1163
|
+
button.textContent = '✅ Copied!';
|
|
1164
|
+
setTimeout(() => {
|
|
1165
|
+
button.textContent = originalText;
|
|
1166
|
+
}, 2000);
|
|
1167
|
+
}
|
|
1142
1168
|
}
|
|
1143
1169
|
};
|
|
1144
1170
|
|
|
@@ -1214,48 +1240,85 @@ async function updateFileViewerModal(modal, filePath, workingDir) {
|
|
|
1214
1240
|
const filePathElement = modal.querySelector('.file-viewer-file-path');
|
|
1215
1241
|
const fileSizeElement = modal.querySelector('.file-viewer-file-size');
|
|
1216
1242
|
|
|
1217
|
-
filePathElement
|
|
1218
|
-
|
|
1243
|
+
if (filePathElement) {
|
|
1244
|
+
filePathElement.textContent = filePath;
|
|
1245
|
+
}
|
|
1246
|
+
if (fileSizeElement) {
|
|
1247
|
+
fileSizeElement.textContent = '';
|
|
1248
|
+
}
|
|
1219
1249
|
|
|
1220
1250
|
// Show loading state
|
|
1221
|
-
modal.querySelector('.file-viewer-loading')
|
|
1222
|
-
modal.querySelector('.file-viewer-error')
|
|
1223
|
-
modal.querySelector('.file-viewer-content-area')
|
|
1251
|
+
const loadingElement = modal.querySelector('.file-viewer-loading');
|
|
1252
|
+
const errorElement = modal.querySelector('.file-viewer-error');
|
|
1253
|
+
const contentArea = modal.querySelector('.file-viewer-content-area');
|
|
1254
|
+
|
|
1255
|
+
if (loadingElement) {
|
|
1256
|
+
loadingElement.style.display = 'flex';
|
|
1257
|
+
}
|
|
1258
|
+
if (errorElement) {
|
|
1259
|
+
errorElement.style.display = 'none';
|
|
1260
|
+
}
|
|
1261
|
+
if (contentArea) {
|
|
1262
|
+
contentArea.style.display = 'none';
|
|
1263
|
+
}
|
|
1224
1264
|
|
|
1225
1265
|
try {
|
|
1226
1266
|
// Get the Socket.IO client
|
|
1227
|
-
const socket = window.socket || window.dashboard?.socketClient?.socket;
|
|
1267
|
+
const socket = window.socket || window.dashboard?.socketClient?.socket || window.socketClient?.socket;
|
|
1268
|
+
|
|
1269
|
+
console.log('[FileViewer] Socket search results:', {
|
|
1270
|
+
'window.socket': !!window.socket,
|
|
1271
|
+
'window.socket.connected': window.socket?.connected,
|
|
1272
|
+
'dashboard.socketClient.socket': !!window.dashboard?.socketClient?.socket,
|
|
1273
|
+
'dashboard.socketClient.socket.connected': window.dashboard?.socketClient?.socket?.connected,
|
|
1274
|
+
'window.socketClient.socket': !!window.socketClient?.socket,
|
|
1275
|
+
'window.socketClient.socket.connected': window.socketClient?.socket?.connected
|
|
1276
|
+
});
|
|
1277
|
+
|
|
1228
1278
|
if (!socket) {
|
|
1229
|
-
throw new Error('No socket connection available');
|
|
1279
|
+
throw new Error('No socket connection available. Please ensure the dashboard is connected.');
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
if (!socket.connected) {
|
|
1283
|
+
console.warn('[FileViewer] Socket found but not connected, attempting to use anyway...');
|
|
1230
1284
|
}
|
|
1285
|
+
|
|
1286
|
+
console.log('[FileViewer] Socket found, setting up listener for file_content_response');
|
|
1231
1287
|
|
|
1232
1288
|
// Set up one-time listener for file content response
|
|
1233
1289
|
const responsePromise = new Promise((resolve, reject) => {
|
|
1234
1290
|
const responseHandler = (data) => {
|
|
1291
|
+
console.log('[FileViewer] Received file_content_response:', data);
|
|
1235
1292
|
if (data.file_path === filePath) {
|
|
1236
1293
|
socket.off('file_content_response', responseHandler);
|
|
1237
1294
|
if (data.success) {
|
|
1295
|
+
console.log('[FileViewer] File content loaded successfully');
|
|
1238
1296
|
resolve(data);
|
|
1239
1297
|
} else {
|
|
1298
|
+
console.error('[FileViewer] File read failed:', data.error);
|
|
1240
1299
|
reject(new Error(data.error || 'Failed to read file'));
|
|
1241
1300
|
}
|
|
1242
1301
|
}
|
|
1243
1302
|
};
|
|
1244
1303
|
|
|
1245
1304
|
socket.on('file_content_response', responseHandler);
|
|
1305
|
+
console.log('[FileViewer] Listener registered for file_content_response');
|
|
1246
1306
|
|
|
1247
1307
|
// Timeout after 10 seconds
|
|
1248
1308
|
setTimeout(() => {
|
|
1249
1309
|
socket.off('file_content_response', responseHandler);
|
|
1250
|
-
|
|
1310
|
+
console.error('[FileViewer] Request timeout after 10 seconds');
|
|
1311
|
+
reject(new Error('Request timeout - server did not respond'));
|
|
1251
1312
|
}, 10000);
|
|
1252
1313
|
});
|
|
1253
1314
|
|
|
1254
1315
|
// Send file read request
|
|
1255
|
-
|
|
1316
|
+
const requestData = {
|
|
1256
1317
|
file_path: filePath,
|
|
1257
1318
|
working_dir: workingDir
|
|
1258
|
-
}
|
|
1319
|
+
};
|
|
1320
|
+
console.log('[FileViewer] Emitting read_file event with data:', requestData);
|
|
1321
|
+
socket.emit('read_file', requestData);
|
|
1259
1322
|
|
|
1260
1323
|
// File viewer request sent
|
|
1261
1324
|
|
|
@@ -1264,7 +1327,10 @@ async function updateFileViewerModal(modal, filePath, workingDir) {
|
|
|
1264
1327
|
// File content received successfully
|
|
1265
1328
|
|
|
1266
1329
|
// Hide loading
|
|
1267
|
-
modal.querySelector('.file-viewer-loading')
|
|
1330
|
+
const loadingEl = modal.querySelector('.file-viewer-loading');
|
|
1331
|
+
if (loadingEl) {
|
|
1332
|
+
loadingEl.style.display = 'none';
|
|
1333
|
+
}
|
|
1268
1334
|
|
|
1269
1335
|
// Show successful content
|
|
1270
1336
|
displayFileContent(modal, result);
|
|
@@ -1272,7 +1338,10 @@ async function updateFileViewerModal(modal, filePath, workingDir) {
|
|
|
1272
1338
|
} catch (error) {
|
|
1273
1339
|
console.error('❌ Failed to fetch file content:', error);
|
|
1274
1340
|
|
|
1275
|
-
modal.querySelector('.file-viewer-loading')
|
|
1341
|
+
const loadingEl2 = modal.querySelector('.file-viewer-loading');
|
|
1342
|
+
if (loadingEl2) {
|
|
1343
|
+
loadingEl2.style.display = 'none';
|
|
1344
|
+
}
|
|
1276
1345
|
|
|
1277
1346
|
// Create detailed error message
|
|
1278
1347
|
let errorMessage = error.message || 'Unknown error occurred';
|
|
@@ -1373,21 +1442,25 @@ function displayFileError(modal, result) {
|
|
|
1373
1442
|
|
|
1374
1443
|
let errorMessage = result.error || 'Unknown error occurred';
|
|
1375
1444
|
|
|
1376
|
-
messageElement
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
if (result.suggestions && result.suggestions.length > 0) {
|
|
1383
|
-
suggestionsElement.innerHTML = `
|
|
1384
|
-
<h4>Suggestions:</h4>
|
|
1385
|
-
<ul>
|
|
1386
|
-
${result.suggestions.map(s => `<li>${s}</li>`).join('')}
|
|
1387
|
-
</ul>
|
|
1445
|
+
if (messageElement) {
|
|
1446
|
+
messageElement.innerHTML = `
|
|
1447
|
+
<div class="error-main">${errorMessage}</div>
|
|
1448
|
+
${result.file_path ? `<div class="error-file">File: ${result.file_path}</div>` : ''}
|
|
1449
|
+
${result.working_dir ? `<div class="error-dir">Working directory: ${result.working_dir}</div>` : ''}
|
|
1388
1450
|
`;
|
|
1389
|
-
}
|
|
1390
|
-
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
if (suggestionsElement) {
|
|
1454
|
+
if (result.suggestions && result.suggestions.length > 0) {
|
|
1455
|
+
suggestionsElement.innerHTML = `
|
|
1456
|
+
<h4>Suggestions:</h4>
|
|
1457
|
+
<ul>
|
|
1458
|
+
${result.suggestions.map(s => `<li>${s}</li>`).join('')}
|
|
1459
|
+
</ul>
|
|
1460
|
+
`;
|
|
1461
|
+
} else {
|
|
1462
|
+
suggestionsElement.innerHTML = '';
|
|
1463
|
+
}
|
|
1391
1464
|
}
|
|
1392
1465
|
|
|
1393
1466
|
console.log('📋 Displaying file viewer error:', {
|
|
@@ -1396,7 +1469,9 @@ function displayFileError(modal, result) {
|
|
|
1396
1469
|
suggestions: result.suggestions
|
|
1397
1470
|
});
|
|
1398
1471
|
|
|
1399
|
-
errorArea
|
|
1472
|
+
if (errorArea) {
|
|
1473
|
+
errorArea.style.display = 'block';
|
|
1474
|
+
}
|
|
1400
1475
|
}
|
|
1401
1476
|
|
|
1402
1477
|
function highlightCode(code, extension) {
|
|
@@ -1502,26 +1577,37 @@ function formatFileSize(bytes) {
|
|
|
1502
1577
|
}
|
|
1503
1578
|
|
|
1504
1579
|
// File Viewer Modal Functions
|
|
1505
|
-
window.showFileViewerModal = function(filePath) {
|
|
1580
|
+
window.showFileViewerModal = async function(filePath) {
|
|
1581
|
+
console.log('[FileViewer] Opening file:', filePath);
|
|
1582
|
+
|
|
1506
1583
|
// Use the dashboard's current working directory
|
|
1507
1584
|
let workingDir = '';
|
|
1508
1585
|
if (window.dashboard && window.dashboard.currentWorkingDir) {
|
|
1509
1586
|
workingDir = window.dashboard.currentWorkingDir;
|
|
1587
|
+
console.log('[FileViewer] Using working directory:', workingDir);
|
|
1510
1588
|
}
|
|
1511
1589
|
|
|
1512
1590
|
// Create modal if it doesn't exist
|
|
1513
1591
|
let modal = document.getElementById('file-viewer-modal');
|
|
1514
1592
|
if (!modal) {
|
|
1593
|
+
console.log('[FileViewer] Creating new modal');
|
|
1515
1594
|
modal = createFileViewerModal();
|
|
1516
1595
|
document.body.appendChild(modal);
|
|
1517
|
-
}
|
|
1518
1596
|
|
|
1519
|
-
|
|
1520
|
-
|
|
1597
|
+
// Small delay to ensure DOM is fully updated
|
|
1598
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
1599
|
+
}
|
|
1521
1600
|
|
|
1522
|
-
// Show the modal as flex container
|
|
1601
|
+
// Show the modal as flex container first (ensures proper rendering)
|
|
1523
1602
|
modal.style.display = 'flex';
|
|
1524
1603
|
document.body.style.overflow = 'hidden'; // Prevent background scrolling
|
|
1604
|
+
|
|
1605
|
+
// Update modal content
|
|
1606
|
+
updateFileViewerModal(modal, filePath, workingDir).catch(error => {
|
|
1607
|
+
console.error('Error updating file viewer modal:', error);
|
|
1608
|
+
// Show error in the modal
|
|
1609
|
+
displayFileContentError(modal, { error: error.message });
|
|
1610
|
+
});
|
|
1525
1611
|
};
|
|
1526
1612
|
|
|
1527
1613
|
window.hideFileViewerModal = function() {
|
|
@@ -1545,11 +1631,13 @@ window.copyFileContent = function() {
|
|
|
1545
1631
|
navigator.clipboard.writeText(text).then(() => {
|
|
1546
1632
|
// Show brief feedback
|
|
1547
1633
|
const button = modal.querySelector('.file-content-copy');
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1634
|
+
if (button) {
|
|
1635
|
+
const originalText = button.textContent;
|
|
1636
|
+
button.textContent = '✅ Copied!';
|
|
1637
|
+
setTimeout(() => {
|
|
1638
|
+
button.textContent = originalText;
|
|
1639
|
+
}, 2000);
|
|
1640
|
+
}
|
|
1553
1641
|
}).catch(err => {
|
|
1554
1642
|
console.error('Failed to copy text:', err);
|
|
1555
1643
|
});
|
|
@@ -1563,11 +1651,13 @@ window.copyFileContent = function() {
|
|
|
1563
1651
|
document.body.removeChild(textarea);
|
|
1564
1652
|
|
|
1565
1653
|
const button = modal.querySelector('.file-content-copy');
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1654
|
+
if (button) {
|
|
1655
|
+
const originalText = button.textContent;
|
|
1656
|
+
button.textContent = '✅ Copied!';
|
|
1657
|
+
setTimeout(() => {
|
|
1658
|
+
button.textContent = originalText;
|
|
1659
|
+
}, 2000);
|
|
1660
|
+
}
|
|
1571
1661
|
}
|
|
1572
1662
|
};
|
|
1573
1663
|
|
|
@@ -1578,6 +1668,19 @@ function displayFileContentError(modal, result) {
|
|
|
1578
1668
|
const errorArea = modal.querySelector('.file-viewer-error');
|
|
1579
1669
|
const messageElement = modal.querySelector('.error-message');
|
|
1580
1670
|
const suggestionsElement = modal.querySelector('.error-suggestions');
|
|
1671
|
+
const loadingElement = modal.querySelector('.file-viewer-loading');
|
|
1672
|
+
const contentArea = modal.querySelector('.file-viewer-content-area');
|
|
1673
|
+
|
|
1674
|
+
// Hide loading and content areas, show error
|
|
1675
|
+
if (loadingElement) {
|
|
1676
|
+
loadingElement.style.display = 'none';
|
|
1677
|
+
}
|
|
1678
|
+
if (contentArea) {
|
|
1679
|
+
contentArea.style.display = 'none';
|
|
1680
|
+
}
|
|
1681
|
+
if (errorArea) {
|
|
1682
|
+
errorArea.style.display = 'flex';
|
|
1683
|
+
}
|
|
1581
1684
|
|
|
1582
1685
|
// Create user-friendly error messages
|
|
1583
1686
|
let errorMessage = result.error || 'Unknown error occurred';
|
|
@@ -1588,29 +1691,37 @@ function displayFileContentError(modal, result) {
|
|
|
1588
1691
|
errorMessage = '🔒 Permission denied accessing this file';
|
|
1589
1692
|
} else if (errorMessage.includes('too large')) {
|
|
1590
1693
|
errorMessage = '📏 File is too large to display';
|
|
1694
|
+
} else if (errorMessage.includes('socket connection')) {
|
|
1695
|
+
errorMessage = '🔌 Not connected to the server. Please check your connection.';
|
|
1696
|
+
} else if (errorMessage.includes('timeout')) {
|
|
1697
|
+
errorMessage = '⏱️ Request timed out. The server may be busy or unresponsive.';
|
|
1591
1698
|
} else if (!errorMessage.includes('📁') && !errorMessage.includes('🔒') && !errorMessage.includes('📏')) {
|
|
1592
1699
|
errorMessage = `⚠️ ${errorMessage}`;
|
|
1593
1700
|
}
|
|
1594
1701
|
|
|
1595
|
-
messageElement
|
|
1702
|
+
if (messageElement) {
|
|
1703
|
+
messageElement.textContent = errorMessage;
|
|
1704
|
+
}
|
|
1596
1705
|
|
|
1597
1706
|
// Add suggestions if available
|
|
1598
|
-
if (
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
<
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1707
|
+
if (suggestionsElement) {
|
|
1708
|
+
if (result.suggestions && result.suggestions.length > 0) {
|
|
1709
|
+
suggestionsElement.innerHTML = `
|
|
1710
|
+
<h4>Suggestions:</h4>
|
|
1711
|
+
<ul>
|
|
1712
|
+
${result.suggestions.map(suggestion => `<li>${suggestion}</li>`).join('')}
|
|
1713
|
+
</ul>
|
|
1714
|
+
`;
|
|
1715
|
+
} else {
|
|
1716
|
+
suggestionsElement.innerHTML = `
|
|
1717
|
+
<h4>Try:</h4>
|
|
1718
|
+
<ul>
|
|
1719
|
+
<li>Check if the file exists and is readable</li>
|
|
1720
|
+
<li>Verify file permissions</li>
|
|
1721
|
+
<li>Ensure the monitoring server has access to this file</li>
|
|
1722
|
+
</ul>
|
|
1723
|
+
`;
|
|
1724
|
+
}
|
|
1614
1725
|
}
|
|
1615
1726
|
|
|
1616
1727
|
console.log('📋 Displaying file content error:', {
|
|
@@ -1619,7 +1730,9 @@ function displayFileContentError(modal, result) {
|
|
|
1619
1730
|
suggestions: result.suggestions
|
|
1620
1731
|
});
|
|
1621
1732
|
|
|
1622
|
-
errorArea
|
|
1733
|
+
if (errorArea) {
|
|
1734
|
+
errorArea.style.display = 'block';
|
|
1735
|
+
}
|
|
1623
1736
|
}
|
|
1624
1737
|
|
|
1625
1738
|
// Search Viewer Modal Functions
|