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
|
@@ -9,8 +9,10 @@ import os
|
|
|
9
9
|
import subprocess
|
|
10
10
|
import time
|
|
11
11
|
import uuid
|
|
12
|
+
from pathlib import Path
|
|
12
13
|
from typing import Any, Dict, Optional, Tuple
|
|
13
14
|
|
|
15
|
+
from claude_mpm.core.enums import OperationResult, ServiceState
|
|
14
16
|
from claude_mpm.core.logger import get_logger
|
|
15
17
|
|
|
16
18
|
|
|
@@ -97,7 +99,7 @@ class OneshotSession:
|
|
|
97
99
|
infrastructure["env"]["CLAUDE_WORKSPACE"] = user_pwd
|
|
98
100
|
|
|
99
101
|
try:
|
|
100
|
-
self.original_cwd =
|
|
102
|
+
self.original_cwd = Path.cwd()
|
|
101
103
|
os.chdir(user_pwd)
|
|
102
104
|
infrastructure["working_dir_changed"] = True
|
|
103
105
|
self.logger.info(f"Changed working directory to: {user_pwd}")
|
|
@@ -161,7 +163,7 @@ class OneshotSession:
|
|
|
161
163
|
|
|
162
164
|
if self.runner.websocket_server:
|
|
163
165
|
self.runner.websocket_server.claude_status_changed(
|
|
164
|
-
status=
|
|
166
|
+
status=ServiceState.RUNNING, message="Executing Claude oneshot command"
|
|
165
167
|
)
|
|
166
168
|
|
|
167
169
|
def _run_subprocess(
|
|
@@ -221,7 +223,7 @@ class OneshotSession:
|
|
|
221
223
|
# End WebSocket session
|
|
222
224
|
if self.runner.websocket_server:
|
|
223
225
|
self.runner.websocket_server.claude_status_changed(
|
|
224
|
-
status=
|
|
226
|
+
status=ServiceState.STOPPED, message="Session completed"
|
|
225
227
|
)
|
|
226
228
|
self.runner.websocket_server.session_ended()
|
|
227
229
|
|
|
@@ -242,7 +244,7 @@ class OneshotSession:
|
|
|
242
244
|
self.runner.websocket_server.session_started(
|
|
243
245
|
session_id=self.session_id,
|
|
244
246
|
launch_method="oneshot",
|
|
245
|
-
working_dir=
|
|
247
|
+
working_dir=Path.cwd(),
|
|
246
248
|
)
|
|
247
249
|
except (ImportError, ConnectionError, Exception) as e:
|
|
248
250
|
self.logger.warning(f"Socket.IO connection failed: {e}")
|
|
@@ -260,14 +262,53 @@ class OneshotSession:
|
|
|
260
262
|
|
|
261
263
|
def _build_command(self) -> list:
|
|
262
264
|
"""Build the base Claude command."""
|
|
263
|
-
cmd = ["claude", "--
|
|
265
|
+
cmd = ["claude", "--dangerously-skip-permissions"]
|
|
264
266
|
|
|
265
267
|
# Add custom arguments
|
|
266
268
|
if self.runner.claude_args:
|
|
267
269
|
cmd.extend(self.runner.claude_args)
|
|
268
270
|
|
|
271
|
+
# Add --agents flag if native agents mode is enabled
|
|
272
|
+
if getattr(self.runner, "use_native_agents", False):
|
|
273
|
+
agents_flag = self._build_agents_flag()
|
|
274
|
+
if agents_flag:
|
|
275
|
+
cmd.extend(agents_flag)
|
|
276
|
+
self.logger.info("✓ Native agents mode: Using --agents CLI flag")
|
|
277
|
+
|
|
269
278
|
return cmd
|
|
270
279
|
|
|
280
|
+
def _build_agents_flag(self) -> Optional[list]:
|
|
281
|
+
"""Build --agents flag with all MPM agents.
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
List with ["--agents", "<json>"] or None if conversion fails
|
|
285
|
+
"""
|
|
286
|
+
try:
|
|
287
|
+
from claude_mpm.services.native_agent_converter import NativeAgentConverter
|
|
288
|
+
|
|
289
|
+
converter = NativeAgentConverter()
|
|
290
|
+
agents = converter.load_agents_from_templates()
|
|
291
|
+
|
|
292
|
+
if not agents:
|
|
293
|
+
self.logger.warning("No agents loaded for native mode")
|
|
294
|
+
return None
|
|
295
|
+
|
|
296
|
+
# Generate JSON for --agents flag
|
|
297
|
+
agents_json = converter.generate_agents_json(agents)
|
|
298
|
+
summary = converter.get_conversion_summary(agents)
|
|
299
|
+
|
|
300
|
+
self.logger.info(
|
|
301
|
+
f"Native agents: {summary['total_agents']} agents, "
|
|
302
|
+
f"{summary['json_size_kb']} KB JSON"
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
# Return as list: ["--agents", "<json>"]
|
|
306
|
+
return ["--agents", agents_json]
|
|
307
|
+
|
|
308
|
+
except Exception as e:
|
|
309
|
+
self.logger.error(f"Failed to build --agents flag: {e}", exc_info=True)
|
|
310
|
+
return None
|
|
311
|
+
|
|
271
312
|
def _handle_successful_response(self, response: str, prompt: str) -> None:
|
|
272
313
|
"""Process a successful Claude response."""
|
|
273
314
|
print(response)
|
|
@@ -298,7 +339,9 @@ class OneshotSession:
|
|
|
298
339
|
agent_name = self.runner._extract_agent_from_response(response)
|
|
299
340
|
if agent_name:
|
|
300
341
|
self.runner.websocket_server.agent_delegated(
|
|
301
|
-
agent=agent_name,
|
|
342
|
+
agent=agent_name,
|
|
343
|
+
task=prompt[:100],
|
|
344
|
+
status=OperationResult.PENDING,
|
|
302
345
|
)
|
|
303
346
|
|
|
304
347
|
# Log completion
|
|
@@ -334,7 +377,8 @@ class OneshotSession:
|
|
|
334
377
|
if self.runner.websocket_server:
|
|
335
378
|
self.runner.websocket_server.claude_output(error_msg, "stderr")
|
|
336
379
|
self.runner.websocket_server.claude_status_changed(
|
|
337
|
-
status=
|
|
380
|
+
status=ServiceState.ERROR,
|
|
381
|
+
message=f"Command failed with code {return_code}",
|
|
338
382
|
)
|
|
339
383
|
|
|
340
384
|
# Log error
|
|
@@ -22,7 +22,7 @@ import threading
|
|
|
22
22
|
import time
|
|
23
23
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
24
24
|
from dataclasses import dataclass
|
|
25
|
-
from datetime import datetime
|
|
25
|
+
from datetime import datetime, timezone
|
|
26
26
|
from typing import Any, Dict, List, Optional
|
|
27
27
|
|
|
28
28
|
try:
|
|
@@ -111,7 +111,7 @@ class OptimizedAgentLoader:
|
|
|
111
111
|
try:
|
|
112
112
|
mtime = file_path.stat().st_mtime
|
|
113
113
|
return f"agent:{file_path}:{mtime}"
|
|
114
|
-
except:
|
|
114
|
+
except Exception:
|
|
115
115
|
return f"agent:{file_path}"
|
|
116
116
|
|
|
117
117
|
def _load_agent_file(self, file_path: Path) -> Optional[Dict[str, Any]]:
|
|
@@ -154,7 +154,7 @@ class OptimizedAgentLoader:
|
|
|
154
154
|
|
|
155
155
|
# Add metadata
|
|
156
156
|
agent_data["_file_path"] = str(file_path)
|
|
157
|
-
agent_data["_loaded_at"] = datetime.now().isoformat()
|
|
157
|
+
agent_data["_loaded_at"] = datetime.now(timezone.utc).isoformat()
|
|
158
158
|
|
|
159
159
|
# Cache the result
|
|
160
160
|
self.cache.put(cache_key, agent_data, ttl=self.cache_ttl)
|
|
@@ -188,7 +188,7 @@ class OptimizedAgentLoader:
|
|
|
188
188
|
data = yaml.safe_load(frontmatter) or {}
|
|
189
189
|
data["instructions"] = body
|
|
190
190
|
return data
|
|
191
|
-
except:
|
|
191
|
+
except Exception:
|
|
192
192
|
pass
|
|
193
193
|
|
|
194
194
|
# No frontmatter, treat as pure instructions
|
|
@@ -236,7 +236,7 @@ class OptimizedAgentLoader:
|
|
|
236
236
|
|
|
237
237
|
self.metrics.total_time = time.time() - start_time
|
|
238
238
|
|
|
239
|
-
self.logger.
|
|
239
|
+
self.logger.debug(
|
|
240
240
|
f"Loaded {self.metrics.loaded_agents}/{self.metrics.total_agents} agents "
|
|
241
241
|
f"in {self.metrics.total_time:.2f}s "
|
|
242
242
|
f"(cache hits: {self.metrics.cache_hits}, misses: {self.metrics.cache_misses})"
|
|
@@ -286,7 +286,7 @@ class OptimizedAgentLoader:
|
|
|
286
286
|
|
|
287
287
|
self.metrics.total_time = time.time() - start_time
|
|
288
288
|
|
|
289
|
-
self.logger.
|
|
289
|
+
self.logger.debug(
|
|
290
290
|
f"Async loaded {self.metrics.loaded_agents}/{self.metrics.total_agents} agents "
|
|
291
291
|
f"in {self.metrics.total_time:.2f}s"
|
|
292
292
|
)
|
|
@@ -322,7 +322,7 @@ class OptimizedAgentLoader:
|
|
|
322
322
|
|
|
323
323
|
# Add metadata
|
|
324
324
|
agent_data["_file_path"] = str(file_path)
|
|
325
|
-
agent_data["_loaded_at"] = datetime.now().isoformat()
|
|
325
|
+
agent_data["_loaded_at"] = datetime.now(timezone.utc).isoformat()
|
|
326
326
|
|
|
327
327
|
# Cache the result
|
|
328
328
|
self.cache.put(cache_key, agent_data, ttl=self.cache_ttl)
|
|
@@ -366,7 +366,7 @@ class OptimizedAgentLoader:
|
|
|
366
366
|
"template": template,
|
|
367
367
|
"variables": self._extract_variables(template),
|
|
368
368
|
"sections": self._extract_sections(template),
|
|
369
|
-
"compiled_at": datetime.now().isoformat(),
|
|
369
|
+
"compiled_at": datetime.now(timezone.utc).isoformat(),
|
|
370
370
|
}
|
|
371
371
|
|
|
372
372
|
# Cache compiled template
|
|
@@ -418,7 +418,7 @@ class OptimizedAgentLoader:
|
|
|
418
418
|
Args:
|
|
419
419
|
agent_dirs: List of directories containing agents
|
|
420
420
|
"""
|
|
421
|
-
self.logger.
|
|
421
|
+
self.logger.debug(f"Preloading agents from {len(agent_dirs)} directories")
|
|
422
422
|
|
|
423
423
|
all_paths = []
|
|
424
424
|
for dir_path in agent_dirs:
|
|
@@ -160,203 +160,23 @@ class OutputStyleManager:
|
|
|
160
160
|
|
|
161
161
|
def extract_output_style_content(self, framework_loader=None) -> str:
|
|
162
162
|
"""
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
This extracts PM delegation behavior, tone, communication standards,
|
|
166
|
-
response formats, TodoWrite requirements, and workflow rules from:
|
|
167
|
-
- INSTRUCTIONS.md
|
|
168
|
-
- BASE_PM.md
|
|
163
|
+
Read output style content from OUTPUT_STYLE.md.
|
|
169
164
|
|
|
170
165
|
Args:
|
|
171
|
-
framework_loader: Optional
|
|
166
|
+
framework_loader: Optional framework loader (kept for compatibility, not used)
|
|
172
167
|
|
|
173
168
|
Returns:
|
|
174
|
-
|
|
169
|
+
Complete output style content from file
|
|
175
170
|
"""
|
|
176
|
-
#
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
)
|
|
185
|
-
sections.append("---")
|
|
186
|
-
sections.append("")
|
|
187
|
-
|
|
188
|
-
# Header
|
|
189
|
-
sections.append(
|
|
190
|
-
"You are Claude Multi-Agent PM, a PROJECT MANAGER whose SOLE PURPOSE is to delegate work to specialized agents."
|
|
191
|
-
)
|
|
192
|
-
sections.append("")
|
|
193
|
-
|
|
194
|
-
# Extract from INSTRUCTIONS.md
|
|
195
|
-
if framework_loader and framework_loader.framework_content.get(
|
|
196
|
-
"framework_instructions"
|
|
197
|
-
):
|
|
198
|
-
instructions = framework_loader.framework_content["framework_instructions"]
|
|
199
|
-
sections.extend(self._extract_instructions_sections(instructions))
|
|
200
|
-
else:
|
|
201
|
-
# Load from file if no framework_loader provided
|
|
202
|
-
instructions_path = (
|
|
203
|
-
Path(__file__).parent.parent / "agents" / "INSTRUCTIONS.md"
|
|
204
|
-
)
|
|
205
|
-
if instructions_path.exists():
|
|
206
|
-
instructions = instructions_path.read_text()
|
|
207
|
-
sections.extend(self._extract_instructions_sections(instructions))
|
|
208
|
-
|
|
209
|
-
# Extract from BASE_PM.md
|
|
210
|
-
if framework_loader and framework_loader.framework_content.get(
|
|
211
|
-
"base_pm_instructions"
|
|
212
|
-
):
|
|
213
|
-
base_pm = framework_loader.framework_content["base_pm_instructions"]
|
|
214
|
-
sections.extend(self._extract_base_pm_sections(base_pm))
|
|
215
|
-
else:
|
|
216
|
-
# Load from file if no framework_loader provided
|
|
217
|
-
base_pm_path = Path(__file__).parent.parent / "agents" / "BASE_PM.md"
|
|
218
|
-
if base_pm_path.exists():
|
|
219
|
-
base_pm = base_pm_path.read_text()
|
|
220
|
-
sections.extend(self._extract_base_pm_sections(base_pm))
|
|
221
|
-
|
|
222
|
-
return "\n".join(sections)
|
|
223
|
-
|
|
224
|
-
def _extract_instructions_sections(self, content: str) -> list:
|
|
225
|
-
"""Extract relevant sections from INSTRUCTIONS.md."""
|
|
226
|
-
sections = []
|
|
227
|
-
|
|
228
|
-
# Extract Primary Directive
|
|
229
|
-
if "## 🔴 PRIMARY DIRECTIVE" in content:
|
|
230
|
-
sections.append("## 🔴 PRIMARY DIRECTIVE - MANDATORY DELEGATION 🔴")
|
|
231
|
-
sections.append("")
|
|
232
|
-
sections.append(
|
|
233
|
-
"**YOU ARE STRICTLY FORBIDDEN FROM DOING ANY WORK DIRECTLY.**"
|
|
234
|
-
)
|
|
235
|
-
sections.append("")
|
|
236
|
-
sections.append(
|
|
237
|
-
"Direct implementation is ABSOLUTELY PROHIBITED unless the user EXPLICITLY overrides with phrases like:"
|
|
238
|
-
)
|
|
239
|
-
sections.append('- "do this yourself"')
|
|
240
|
-
sections.append('- "don\'t delegate"')
|
|
241
|
-
sections.append('- "implement directly"')
|
|
242
|
-
sections.append('- "you do it"')
|
|
243
|
-
sections.append('- "no delegation"')
|
|
244
|
-
sections.append("")
|
|
245
|
-
|
|
246
|
-
# Extract Core Identity and Rules
|
|
247
|
-
if "## Core Identity" in content:
|
|
248
|
-
sections.append("## Core Operating Rules")
|
|
249
|
-
sections.append("")
|
|
250
|
-
sections.append("**DEFAULT BEHAVIOR - ALWAYS DELEGATE**:")
|
|
251
|
-
sections.append(
|
|
252
|
-
"- 🔴 You MUST delegate 100% of ALL work to specialized agents by default"
|
|
253
|
-
)
|
|
254
|
-
sections.append(
|
|
255
|
-
"- 🔴 Direct action is STRICTLY FORBIDDEN without explicit user override"
|
|
256
|
-
)
|
|
257
|
-
sections.append(
|
|
258
|
-
"- 🔴 Even the simplest tasks MUST be delegated - NO EXCEPTIONS"
|
|
259
|
-
)
|
|
260
|
-
sections.append("- 🔴 When in doubt, ALWAYS DELEGATE - never act directly")
|
|
261
|
-
sections.append("")
|
|
262
|
-
sections.append("**Allowed Tools**:")
|
|
263
|
-
sections.append("- **Task** for delegation (YOUR PRIMARY FUNCTION)")
|
|
264
|
-
sections.append("- **TodoWrite** for tracking delegation progress ONLY")
|
|
265
|
-
sections.append(
|
|
266
|
-
"- **WebSearch/WebFetch** for gathering context BEFORE delegation"
|
|
267
|
-
)
|
|
268
|
-
sections.append(
|
|
269
|
-
"- **Direct answers** ONLY for questions about PM capabilities"
|
|
270
|
-
)
|
|
271
|
-
sections.append("")
|
|
272
|
-
|
|
273
|
-
# Extract Communication Standards
|
|
274
|
-
if "## Communication Standards" in content:
|
|
275
|
-
sections.append("## Communication Standards")
|
|
276
|
-
sections.append("")
|
|
277
|
-
sections.append("- **Tone**: Professional, neutral by default")
|
|
278
|
-
sections.append('- **Use**: "Understood", "Confirmed", "Noted"')
|
|
279
|
-
sections.append("- **No simplification** without explicit user request")
|
|
280
|
-
sections.append("- **No mocks** outside test environments")
|
|
281
|
-
sections.append("- **Complete implementations** only - no placeholders")
|
|
282
|
-
sections.append(
|
|
283
|
-
'- **FORBIDDEN**: Overeager enthusiasm ("Excellent!", "Perfect!", "Amazing!")'
|
|
284
|
-
)
|
|
285
|
-
sections.append("")
|
|
286
|
-
|
|
287
|
-
# Extract Error Handling
|
|
288
|
-
if "## Error Handling Protocol" in content:
|
|
289
|
-
sections.append("## Error Handling Protocol")
|
|
290
|
-
sections.append("")
|
|
291
|
-
sections.append("**3-Attempt Process**:")
|
|
292
|
-
sections.append("1. **First Failure**: Re-delegate with enhanced context")
|
|
293
|
-
sections.append(
|
|
294
|
-
'2. **Second Failure**: Mark "ERROR - Attempt 2/3", escalate if needed'
|
|
295
|
-
)
|
|
296
|
-
sections.append(
|
|
297
|
-
"3. **Third Failure**: TodoWrite escalation with user decision required"
|
|
298
|
-
)
|
|
299
|
-
sections.append("")
|
|
300
|
-
|
|
301
|
-
# Extract Standard Operating Procedure
|
|
302
|
-
if "## Standard Operating Procedure" in content:
|
|
303
|
-
sections.append("## Standard Operating Procedure")
|
|
304
|
-
sections.append("")
|
|
305
|
-
sections.append("1. **Analysis**: Parse request, assess context (NO TOOLS)")
|
|
306
|
-
sections.append(
|
|
307
|
-
"2. **Planning**: Agent selection, task breakdown, priority assignment"
|
|
308
|
-
)
|
|
309
|
-
sections.append("3. **Delegation**: Task Tool with enhanced format")
|
|
310
|
-
sections.append("4. **Monitoring**: Track progress via TodoWrite")
|
|
311
|
-
sections.append("5. **Integration**: Synthesize results, validate, report")
|
|
312
|
-
sections.append("")
|
|
313
|
-
|
|
314
|
-
return sections
|
|
315
|
-
|
|
316
|
-
def _extract_base_pm_sections(self, content: str) -> list:
|
|
317
|
-
"""Extract relevant sections from BASE_PM.md."""
|
|
318
|
-
sections = []
|
|
319
|
-
|
|
320
|
-
# Extract TodoWrite Requirements
|
|
321
|
-
if "## TodoWrite Framework Requirements" in content:
|
|
322
|
-
sections.append("## TodoWrite Requirements")
|
|
323
|
-
sections.append("")
|
|
324
|
-
sections.append("### Mandatory [Agent] Prefix Rules")
|
|
325
|
-
sections.append("")
|
|
326
|
-
sections.append("**ALWAYS use [Agent] prefix for delegated tasks**:")
|
|
327
|
-
sections.append("- ✅ `[Research] Analyze authentication patterns`")
|
|
328
|
-
sections.append("- ✅ `[Engineer] Implement user registration`")
|
|
329
|
-
sections.append("- ✅ `[QA] Test payment flow`")
|
|
330
|
-
sections.append("- ✅ `[Documentation] Update API docs`")
|
|
331
|
-
sections.append("")
|
|
332
|
-
sections.append("**NEVER use [PM] prefix for implementation tasks**")
|
|
333
|
-
sections.append("")
|
|
334
|
-
sections.append("### Task Status Management")
|
|
335
|
-
sections.append("")
|
|
336
|
-
sections.append("- `pending` - Task not yet started")
|
|
337
|
-
sections.append(
|
|
338
|
-
"- `in_progress` - Currently being worked on (ONE at a time)"
|
|
339
|
-
)
|
|
340
|
-
sections.append("- `completed` - Task finished successfully")
|
|
341
|
-
sections.append("")
|
|
342
|
-
|
|
343
|
-
# Extract PM Response Format
|
|
344
|
-
if "## PM Response Format" in content:
|
|
345
|
-
sections.append("## Response Format")
|
|
346
|
-
sections.append("")
|
|
347
|
-
sections.append(
|
|
348
|
-
"When completing delegations, provide structured summaries including:"
|
|
349
|
-
)
|
|
350
|
-
sections.append("- Request summary")
|
|
351
|
-
sections.append("- Agents used and task counts")
|
|
352
|
-
sections.append("- Tasks completed with [Agent] prefixes")
|
|
353
|
-
sections.append("- Files affected across all agents")
|
|
354
|
-
sections.append("- Blockers encountered and resolutions")
|
|
355
|
-
sections.append("- Next steps for user")
|
|
356
|
-
sections.append("- Key information to remember")
|
|
357
|
-
sections.append("")
|
|
358
|
-
|
|
359
|
-
return sections
|
|
171
|
+
# Always read from the complete OUTPUT_STYLE.md file
|
|
172
|
+
if self.mpm_output_style_path.exists():
|
|
173
|
+
content = self.mpm_output_style_path.read_text()
|
|
174
|
+
self.logger.info(f"Read OUTPUT_STYLE.md directly ({len(content)} chars)")
|
|
175
|
+
return content
|
|
176
|
+
# Fallback error
|
|
177
|
+
error_msg = f"OUTPUT_STYLE.md not found at {self.mpm_output_style_path}"
|
|
178
|
+
self.logger.error(error_msg)
|
|
179
|
+
raise FileNotFoundError(error_msg)
|
|
360
180
|
|
|
361
181
|
def save_output_style(self, content: str) -> Path:
|
|
362
182
|
"""
|
|
@@ -14,7 +14,7 @@ WHY this is needed:
|
|
|
14
14
|
import functools
|
|
15
15
|
import threading
|
|
16
16
|
import time
|
|
17
|
-
from datetime import datetime
|
|
17
|
+
from datetime import datetime, timezone
|
|
18
18
|
from typing import Any, Dict, List, Optional
|
|
19
19
|
|
|
20
20
|
from ..core.hook_manager import get_hook_manager
|
|
@@ -139,10 +139,13 @@ class PMHookInterceptor:
|
|
|
139
139
|
|
|
140
140
|
# Look for todos in positional args
|
|
141
141
|
for arg in args:
|
|
142
|
-
if
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
142
|
+
if (
|
|
143
|
+
isinstance(arg, list)
|
|
144
|
+
and arg
|
|
145
|
+
and isinstance(arg[0], dict)
|
|
146
|
+
and ("content" in arg[0] or "id" in arg[0])
|
|
147
|
+
):
|
|
148
|
+
return arg
|
|
146
149
|
|
|
147
150
|
return []
|
|
148
151
|
|
|
@@ -168,11 +171,14 @@ class PMHookInterceptor:
|
|
|
168
171
|
# Update positional args if todos was passed positionally
|
|
169
172
|
args_list = list(args)
|
|
170
173
|
for i, arg in enumerate(args_list):
|
|
171
|
-
if
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
174
|
+
if (
|
|
175
|
+
isinstance(arg, list)
|
|
176
|
+
and arg
|
|
177
|
+
and isinstance(arg[0], dict)
|
|
178
|
+
and ("content" in arg[0] or "id" in arg[0])
|
|
179
|
+
):
|
|
180
|
+
args_list[i] = modified_todos
|
|
181
|
+
return tuple(args_list), kwargs
|
|
176
182
|
|
|
177
183
|
# If we can't find where todos was passed, add as keyword argument
|
|
178
184
|
kwargs = kwargs.copy()
|
|
@@ -195,7 +201,7 @@ class PMHookInterceptor:
|
|
|
195
201
|
{
|
|
196
202
|
"todos": todos,
|
|
197
203
|
"source": "PM_Manual",
|
|
198
|
-
"timestamp": datetime.
|
|
204
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
199
205
|
},
|
|
200
206
|
)
|
|
201
207
|
|
|
@@ -210,7 +216,7 @@ class PMHookInterceptor:
|
|
|
210
216
|
"todos_count": len(todos),
|
|
211
217
|
"source": "PM_Manual",
|
|
212
218
|
"success": True,
|
|
213
|
-
"timestamp": datetime.
|
|
219
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
214
220
|
},
|
|
215
221
|
)
|
|
216
222
|
|
|
@@ -10,6 +10,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type, Union
|
|
|
10
10
|
from .base_service import BaseService
|
|
11
11
|
from .config import Config
|
|
12
12
|
from .container import DIContainer, ServiceLifetime, get_container
|
|
13
|
+
from .enums import OperationResult
|
|
13
14
|
from .logger import get_logger
|
|
14
15
|
from .shared.config_loader import ConfigLoader
|
|
15
16
|
|
|
@@ -160,10 +161,10 @@ class ServiceRegistry:
|
|
|
160
161
|
try:
|
|
161
162
|
# Use the enhanced container's named resolution
|
|
162
163
|
return self.container.get(BaseService, name=service_type)
|
|
163
|
-
except:
|
|
164
|
+
except Exception as e:
|
|
164
165
|
# Fall back to looking up class and resolving
|
|
165
166
|
if service_type not in self._services:
|
|
166
|
-
raise KeyError(f"Service '{service_type}' not registered")
|
|
167
|
+
raise KeyError(f"Service '{service_type}' not registered") from e
|
|
167
168
|
service_class = self._services[service_type]
|
|
168
169
|
return self.container.get(service_class)
|
|
169
170
|
else:
|
|
@@ -249,7 +250,10 @@ class ServiceRegistry:
|
|
|
249
250
|
"metrics": health.metrics,
|
|
250
251
|
}
|
|
251
252
|
except Exception as e:
|
|
252
|
-
health_status[name] = {
|
|
253
|
+
health_status[name] = {
|
|
254
|
+
"status": OperationResult.ERROR,
|
|
255
|
+
"message": str(e),
|
|
256
|
+
}
|
|
253
257
|
|
|
254
258
|
return health_status
|
|
255
259
|
|
|
@@ -4,7 +4,7 @@ import gzip
|
|
|
4
4
|
import json
|
|
5
5
|
import shutil
|
|
6
6
|
import uuid
|
|
7
|
-
from datetime import datetime, timedelta
|
|
7
|
+
from datetime import datetime, timedelta, timezone
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from typing import Any, Dict, List, Optional
|
|
10
10
|
|
|
@@ -41,8 +41,8 @@ class SessionManager:
|
|
|
41
41
|
self.active_sessions[session_id] = {
|
|
42
42
|
"id": session_id,
|
|
43
43
|
"context": context,
|
|
44
|
-
"created_at": datetime.now().isoformat(),
|
|
45
|
-
"last_used": datetime.now().isoformat(),
|
|
44
|
+
"created_at": datetime.now(timezone.utc).isoformat(),
|
|
45
|
+
"last_used": datetime.now(timezone.utc).isoformat(),
|
|
46
46
|
"use_count": 0,
|
|
47
47
|
"agents_run": [],
|
|
48
48
|
}
|
|
@@ -65,7 +65,7 @@ class SessionManager:
|
|
|
65
65
|
Session ID
|
|
66
66
|
"""
|
|
67
67
|
# Look for existing session in context
|
|
68
|
-
now = datetime.now()
|
|
68
|
+
now = datetime.now(timezone.utc)
|
|
69
69
|
max_age = timedelta(minutes=max_age_minutes)
|
|
70
70
|
|
|
71
71
|
for session_id, session_data in self.active_sessions.items():
|
|
@@ -95,10 +95,12 @@ class SessionManager:
|
|
|
95
95
|
{
|
|
96
96
|
"agent": agent,
|
|
97
97
|
"task": task[:100], # Truncate long tasks
|
|
98
|
-
"timestamp": datetime.now().isoformat(),
|
|
98
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
99
99
|
}
|
|
100
100
|
)
|
|
101
|
-
self.active_sessions[session_id]["last_used"] = datetime.now(
|
|
101
|
+
self.active_sessions[session_id]["last_used"] = datetime.now(
|
|
102
|
+
timezone.utc
|
|
103
|
+
).isoformat()
|
|
102
104
|
self._save_sessions()
|
|
103
105
|
|
|
104
106
|
def cleanup_old_sessions(self, max_age_hours: int = 24, archive: bool = True):
|
|
@@ -111,7 +113,7 @@ class SessionManager:
|
|
|
111
113
|
max_age_hours: Maximum age in hours
|
|
112
114
|
archive: Whether to archive sessions before removing
|
|
113
115
|
"""
|
|
114
|
-
now = datetime.now()
|
|
116
|
+
now = datetime.now(timezone.utc)
|
|
115
117
|
max_age = timedelta(hours=max_age_hours)
|
|
116
118
|
|
|
117
119
|
expired = []
|
|
@@ -185,7 +187,7 @@ class SessionManager:
|
|
|
185
187
|
"""Save sessions to disk."""
|
|
186
188
|
session_file = self.session_dir / "active_sessions.json"
|
|
187
189
|
try:
|
|
188
|
-
with open(
|
|
190
|
+
with session_file.open("w") as f:
|
|
189
191
|
json.dump(self.active_sessions, f, indent=2)
|
|
190
192
|
except Exception as e:
|
|
191
193
|
logger.error(f"Failed to save sessions: {e}")
|
|
@@ -195,7 +197,7 @@ class SessionManager:
|
|
|
195
197
|
session_file = self.session_dir / "active_sessions.json"
|
|
196
198
|
if session_file.exists():
|
|
197
199
|
try:
|
|
198
|
-
with open(
|
|
200
|
+
with session_file.open() as f:
|
|
199
201
|
self.active_sessions = json.load(f)
|
|
200
202
|
|
|
201
203
|
# Clean up old sessions on load (archive by default)
|
|
@@ -223,7 +225,7 @@ class SessionManager:
|
|
|
223
225
|
archive_dir.mkdir(parents=True, exist_ok=True)
|
|
224
226
|
|
|
225
227
|
# Create timestamped archive file
|
|
226
|
-
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
228
|
+
timestamp = datetime.now(timezone.utc).strftime("%Y%m%d_%H%M%S")
|
|
227
229
|
archive_name = f"sessions_archive_{timestamp}.json.gz"
|
|
228
230
|
archive_path = archive_dir / archive_name
|
|
229
231
|
|
|
@@ -279,12 +281,12 @@ class SessionManager:
|
|
|
279
281
|
archive_dir = Path.home() / ".claude-mpm" / "archives"
|
|
280
282
|
archive_dir.mkdir(parents=True, exist_ok=True)
|
|
281
283
|
|
|
282
|
-
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
284
|
+
timestamp = datetime.now(timezone.utc).strftime("%Y%m%d_%H%M%S")
|
|
283
285
|
backup_name = f"claude_json_backup_{timestamp}.json.gz"
|
|
284
286
|
backup_path = archive_dir / backup_name
|
|
285
287
|
|
|
286
288
|
# Compress and backup current file
|
|
287
|
-
with open(
|
|
289
|
+
with claude_json_path.open("rb") as f_in:
|
|
288
290
|
with gzip.open(backup_path, "wb") as f_out:
|
|
289
291
|
shutil.copyfileobj(f_in, f_out)
|
|
290
292
|
|