claude-mpm 4.1.26__py3-none-any.whl → 5.0.9__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 +432 -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 +254 -29
- claude_mpm/agents/PM_INSTRUCTIONS.md +969 -0
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +355 -191
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +41 -14
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/async_agent_loader.py +3 -3
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +21 -44
- claude_mpm/agents/frontmatter_validator.py +292 -252
- claude_mpm/agents/system_agent_config.py +3 -2
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/circuit-breakers.md +1005 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/git-file-tracking.md +584 -0
- claude_mpm/agents/templates/pm-examples.md +474 -0
- claude_mpm/agents/templates/pm-red-flags.md +310 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/response-format.md +583 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/agents/templates/validation-templates.md +312 -0
- claude_mpm/cli/__init__.py +72 -376
- claude_mpm/cli/commands/__init__.py +4 -0
- claude_mpm/cli/commands/agent_manager.py +675 -20
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +344 -0
- claude_mpm/cli/commands/agents.py +1673 -178
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- claude_mpm/cli/commands/aggregate.py +11 -7
- claude_mpm/cli/commands/analyze.py +18 -13
- claude_mpm/cli/commands/analyze_code.py +8 -4
- claude_mpm/cli/commands/auto_configure.py +566 -0
- claude_mpm/cli/commands/cleanup.py +12 -12
- claude_mpm/cli/commands/config.py +54 -17
- claude_mpm/cli/commands/configure.py +1184 -1055
- 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 +184 -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 +19 -19
- claude_mpm/cli/commands/doctor.py +51 -7
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/info.py +3 -4
- claude_mpm/cli/commands/local_deploy.py +534 -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 +573 -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/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +252 -167
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +1225 -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 +279 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +1872 -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/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +369 -1
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +196 -3
- claude_mpm/cli/parsers/config_parser.py +96 -43
- 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/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +282 -0
- claude_mpm/cli/parsers/source_parser.py +138 -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 +994 -0
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/startup_logging.py +179 -13
- claude_mpm/cli/utils.py +54 -3
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/mpm-agents-auto-configure.md +278 -0
- claude_mpm/commands/mpm-agents-detect.md +177 -0
- claude_mpm/commands/mpm-agents-list.md +131 -0
- claude_mpm/commands/mpm-agents-recommend.md +223 -0
- claude_mpm/commands/mpm-config-view.md +150 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +297 -5
- claude_mpm/commands/mpm-init.md +401 -17
- claude_mpm/commands/mpm-monitor.md +418 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -0
- claude_mpm/commands/mpm-status.md +79 -8
- claude_mpm/commands/mpm-ticket-organize.md +304 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +122 -0
- claude_mpm/commands/mpm.md +12 -0
- claude_mpm/config/agent_config.py +4 -4
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- 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/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/config/socketio_config.py +3 -3
- claude_mpm/constants.py +28 -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 +24 -42
- claude_mpm/core/config.py +101 -8
- claude_mpm/core/config_aliases.py +7 -6
- claude_mpm/core/constants.py +66 -1
- 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 +25 -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 +176 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +181 -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_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +49 -8
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +4 -3
- claude_mpm/core/interactive_session.py +146 -18
- 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 +22 -15
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/oneshot_session.py +122 -15
- 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/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- 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/shared/singleton_manager.py +11 -4
- claude_mpm/core/socketio_pool.py +15 -15
- claude_mpm/core/system_context.py +38 -0
- 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/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +600 -18
- claude_mpm/dashboard/static/js/components/activity-tree.js +181 -195
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +105 -102
- claude_mpm/dashboard/static/js/components/agent-inference.js +34 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +67 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- 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 +50 -13
- 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 +36 -16
- claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +49 -23
- claude_mpm/dashboard/static/js/components/session-manager.js +19 -19
- claude_mpm/dashboard/static/js/components/socket-manager.js +5 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +520 -88
- claude_mpm/dashboard/static/js/components/working-directory.js +46 -11
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +309 -178
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +183 -139
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -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/templates/code_simple.html +153 -0
- claude_mpm/dashboard/templates/index.html +125 -122
- claude_mpm/experimental/cli_enhancements.py +5 -7
- 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/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
- claude_mpm/hooks/claude_hooks/event_handlers.py +24 -19
- 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/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- 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 +54 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -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 +179 -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/git_repository.py +198 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/scripts/claude-hook-handler.sh +35 -9
- 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/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/__init__.py +144 -160
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/agent_builder.py +56 -18
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_deployment.py +164 -17
- claude_mpm/services/agents/deployment/agent_discovery_service.py +191 -41
- 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 +5 -7
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- 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_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +939 -50
- 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/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +3 -2
- 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/facade/deployment_facade.py +3 -3
- 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 +249 -53
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- 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 +10 -10
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -43
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- 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/git_source_manager.py +629 -0
- 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 +11 -14
- claude_mpm/services/agents/local_template_manager.py +784 -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/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- 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 +209 -13
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +88 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- claude_mpm/services/core/interfaces/health.py +169 -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 +70 -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 +8 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +30 -34
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- 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 +21 -21
- claude_mpm/services/diagnostics/checks/mcp_check.py +57 -44
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +24 -24
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
- claude_mpm/services/diagnostics/diagnostic_runner.py +31 -13
- claude_mpm/services/diagnostics/doctor_reporter.py +305 -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 +11 -7
- 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/consumers/logging.py +1 -2
- 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/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- 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 +2 -6
- claude_mpm/services/infrastructure/monitoring/aggregator.py +13 -18
- 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/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +155 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +26 -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 +427 -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 +1542 -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 +24 -5
- 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 +591 -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 +5 -10
- claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -17
- 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 +555 -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 +732 -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 +452 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +691 -0
- claude_mpm/services/monitor/daemon_manager.py +1040 -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 +3 -3
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- 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 +554 -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 +583 -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 +17 -3
- claude_mpm/services/self_upgrade_service.py +500 -0
- claude_mpm/services/session_management_service.py +23 -9
- 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/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- 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 +22 -41
- 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 +9 -9
- 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 +142 -8
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +24 -24
- 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 +3 -5
- 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 +900 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -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 +471 -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 +466 -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 +14 -8
- claude_mpm/services/version_control/git_operations.py +26 -24
- claude_mpm/services/version_control/semantic_versioning.py +14 -14
- claude_mpm/services/version_control/version_parser.py +14 -11
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- 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/database-migration.md +199 -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/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/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/refactoring-patterns.md +180 -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/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/scripts/with_server.py +129 -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 +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/state_storage.py +31 -31
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/tools/__main__.py +9 -9
- 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 +184 -36
- claude_mpm/utils/agent_filters.py +288 -0
- 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 +5 -3
- 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/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/path_operations.py +7 -4
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +131 -24
- claude_mpm/utils/session_logging.py +2 -2
- claude_mpm/utils/structured_questions.py +619 -0
- 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-5.0.9.dist-info/METADATA +1028 -0
- claude_mpm-5.0.9.dist-info/RECORD +864 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -261
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/agent-manager.json +0 -270
- claude_mpm/agents/templates/agent-manager.md +0 -619
- claude_mpm/agents/templates/agentic_coder_optimizer.json +0 -222
- claude_mpm/agents/templates/api_qa.json +0 -171
- claude_mpm/agents/templates/code_analyzer.json +0 -95
- claude_mpm/agents/templates/data_engineer.json +0 -152
- claude_mpm/agents/templates/documentation.json +0 -175
- claude_mpm/agents/templates/engineer.json +0 -176
- claude_mpm/agents/templates/imagemagick.json +0 -261
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/memory_manager.json +0 -155
- claude_mpm/agents/templates/ops.json +0 -175
- claude_mpm/agents/templates/project_organizer.json +0 -130
- claude_mpm/agents/templates/qa.json +0 -223
- claude_mpm/agents/templates/refactoring_engineer.json +0 -266
- claude_mpm/agents/templates/research.json +0 -163
- claude_mpm/agents/templates/security.json +0 -153
- claude_mpm/agents/templates/ticketing.json +0 -169
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -281
- claude_mpm/agents/templates/version_control.json +0 -147
- claude_mpm/agents/templates/web_qa.json +0 -254
- claude_mpm/agents/templates/web_ui.json +0 -176
- 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/commands/mpm-agents.md +0 -12
- claude_mpm/commands/mpm-config.md +0 -18
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/css/code-tree.css +0 -1408
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- 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-5.0.9.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
|
@@ -2,17 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
This module encapsulates the logic for running one-time Claude commands,
|
|
4
4
|
breaking down the monolithic run_oneshot method into focused, testable components.
|
|
5
|
+
|
|
6
|
+
DEPENDENCY INJECTION:
|
|
7
|
+
This module uses protocol-based dependency injection to break circular imports.
|
|
8
|
+
Instead of importing ClaudeRunner directly, it uses ClaudeRunnerProtocol which
|
|
9
|
+
defines the interface it needs.
|
|
5
10
|
"""
|
|
6
11
|
|
|
7
12
|
import contextlib
|
|
8
13
|
import os
|
|
9
14
|
import subprocess
|
|
15
|
+
import tempfile
|
|
10
16
|
import time
|
|
11
17
|
import uuid
|
|
12
|
-
from
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple
|
|
13
20
|
|
|
21
|
+
from claude_mpm.core.enums import OperationResult, ServiceState
|
|
14
22
|
from claude_mpm.core.logger import get_logger
|
|
15
23
|
|
|
24
|
+
# Protocol imports for type checking without circular dependencies
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from claude_mpm.core.protocols import ClaudeRunnerProtocol
|
|
27
|
+
else:
|
|
28
|
+
# At runtime, accept any object with matching interface
|
|
29
|
+
ClaudeRunnerProtocol = Any
|
|
30
|
+
|
|
16
31
|
|
|
17
32
|
class OneshotSession:
|
|
18
33
|
"""Manages a single oneshot Claude execution session.
|
|
@@ -24,17 +39,18 @@ class OneshotSession:
|
|
|
24
39
|
complexity < 10 and lines < 80, making the code easier to test and modify.
|
|
25
40
|
"""
|
|
26
41
|
|
|
27
|
-
def __init__(self, runner):
|
|
42
|
+
def __init__(self, runner: "ClaudeRunnerProtocol"):
|
|
28
43
|
"""Initialize the oneshot session with a reference to the runner.
|
|
29
44
|
|
|
30
45
|
Args:
|
|
31
|
-
runner: The ClaudeRunner instance
|
|
46
|
+
runner: The ClaudeRunner instance (or any object matching ClaudeRunnerProtocol)
|
|
32
47
|
"""
|
|
33
|
-
self.runner = runner
|
|
48
|
+
self.runner: ClaudeRunnerProtocol = runner
|
|
34
49
|
self.logger = get_logger("oneshot_session")
|
|
35
50
|
self.start_time = None
|
|
36
51
|
self.session_id = None
|
|
37
52
|
self.original_cwd = None
|
|
53
|
+
self.temp_system_prompt_file = None
|
|
38
54
|
|
|
39
55
|
def initialize_session(self, prompt: str) -> Tuple[bool, Optional[str]]:
|
|
40
56
|
"""Initialize the oneshot session.
|
|
@@ -97,7 +113,7 @@ class OneshotSession:
|
|
|
97
113
|
infrastructure["env"]["CLAUDE_WORKSPACE"] = user_pwd
|
|
98
114
|
|
|
99
115
|
try:
|
|
100
|
-
self.original_cwd =
|
|
116
|
+
self.original_cwd = Path.cwd()
|
|
101
117
|
os.chdir(user_pwd)
|
|
102
118
|
infrastructure["working_dir_changed"] = True
|
|
103
119
|
self.logger.info(f"Changed working directory to: {user_pwd}")
|
|
@@ -132,7 +148,13 @@ class OneshotSession:
|
|
|
132
148
|
def _build_final_command(
|
|
133
149
|
self, prompt: str, context: Optional[str], infrastructure: Dict[str, Any]
|
|
134
150
|
) -> list:
|
|
135
|
-
"""Build the final command with prompt and system instructions.
|
|
151
|
+
"""Build the final command with prompt and system instructions.
|
|
152
|
+
|
|
153
|
+
Uses file-based caching to avoid Linux ARG_MAX limits:
|
|
154
|
+
- Linux MAX_ARG_STRLEN: 128 KB per argument
|
|
155
|
+
- System prompt size: ~138.7 KB (exceeds limit by 7.7 KB)
|
|
156
|
+
- Solution: Write to temp file, pass file path (~60 bytes)
|
|
157
|
+
"""
|
|
136
158
|
full_prompt = f"{context}\n\n{prompt}" if context else prompt
|
|
137
159
|
cmd = infrastructure["cmd"] + ["--print", full_prompt]
|
|
138
160
|
|
|
@@ -146,9 +168,38 @@ class OneshotSession:
|
|
|
146
168
|
self.logger.warning("System prompt contains Python code references!")
|
|
147
169
|
|
|
148
170
|
if system_prompt and system_prompt != self._get_simple_context():
|
|
149
|
-
#
|
|
150
|
-
#
|
|
151
|
-
|
|
171
|
+
# Use file-based loading to avoid ARG_MAX limits (1M-485)
|
|
172
|
+
# Create temp file for system prompt
|
|
173
|
+
try:
|
|
174
|
+
# Create temp file in system temp directory
|
|
175
|
+
temp_fd, temp_path = tempfile.mkstemp(
|
|
176
|
+
suffix=".md", prefix="claude_mpm_system_prompt_"
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
# Write system prompt to temp file
|
|
180
|
+
with os.fdopen(temp_fd, "w", encoding="utf-8") as f:
|
|
181
|
+
f.write(system_prompt)
|
|
182
|
+
|
|
183
|
+
# Store temp file path for cleanup
|
|
184
|
+
self.temp_system_prompt_file = temp_path
|
|
185
|
+
|
|
186
|
+
# Use --system-prompt-file flag (matches interactive mode pattern)
|
|
187
|
+
cmd.extend(["--system-prompt-file", temp_path])
|
|
188
|
+
|
|
189
|
+
# User-visible notification
|
|
190
|
+
print(f"📄 Reading system prompt from: {temp_path}")
|
|
191
|
+
|
|
192
|
+
self.logger.info(
|
|
193
|
+
f"Using file-based system prompt loading: {temp_path} "
|
|
194
|
+
f"({len(system_prompt) / 1024:.1f} KB)"
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
except Exception as e:
|
|
198
|
+
# Fallback to inline if file creation fails
|
|
199
|
+
self.logger.warning(
|
|
200
|
+
f"Failed to create temp file for system prompt, using inline: {e}"
|
|
201
|
+
)
|
|
202
|
+
cmd.extend(["--append-system-prompt", system_prompt])
|
|
152
203
|
|
|
153
204
|
return cmd
|
|
154
205
|
|
|
@@ -161,7 +212,7 @@ class OneshotSession:
|
|
|
161
212
|
|
|
162
213
|
if self.runner.websocket_server:
|
|
163
214
|
self.runner.websocket_server.claude_status_changed(
|
|
164
|
-
status=
|
|
215
|
+
status=ServiceState.RUNNING, message="Executing Claude oneshot command"
|
|
165
216
|
)
|
|
166
217
|
|
|
167
218
|
def _run_subprocess(
|
|
@@ -201,6 +252,20 @@ class OneshotSession:
|
|
|
201
252
|
|
|
202
253
|
def cleanup_session(self) -> None:
|
|
203
254
|
"""Clean up the session and restore state."""
|
|
255
|
+
# Clean up temp system prompt file
|
|
256
|
+
if self.temp_system_prompt_file:
|
|
257
|
+
try:
|
|
258
|
+
temp_file_path = Path(self.temp_system_prompt_file)
|
|
259
|
+
if temp_file_path.exists():
|
|
260
|
+
temp_file_path.unlink()
|
|
261
|
+
self.logger.debug(
|
|
262
|
+
f"Cleaned up temp system prompt file: {self.temp_system_prompt_file}"
|
|
263
|
+
)
|
|
264
|
+
except Exception as e:
|
|
265
|
+
self.logger.warning(f"Failed to clean up temp system prompt file: {e}")
|
|
266
|
+
finally:
|
|
267
|
+
self.temp_system_prompt_file = None
|
|
268
|
+
|
|
204
269
|
# Restore original working directory
|
|
205
270
|
if self.original_cwd:
|
|
206
271
|
with contextlib.suppress(Exception):
|
|
@@ -221,7 +286,7 @@ class OneshotSession:
|
|
|
221
286
|
# End WebSocket session
|
|
222
287
|
if self.runner.websocket_server:
|
|
223
288
|
self.runner.websocket_server.claude_status_changed(
|
|
224
|
-
status=
|
|
289
|
+
status=ServiceState.STOPPED, message="Session completed"
|
|
225
290
|
)
|
|
226
291
|
self.runner.websocket_server.session_ended()
|
|
227
292
|
|
|
@@ -242,7 +307,7 @@ class OneshotSession:
|
|
|
242
307
|
self.runner.websocket_server.session_started(
|
|
243
308
|
session_id=self.session_id,
|
|
244
309
|
launch_method="oneshot",
|
|
245
|
-
working_dir=
|
|
310
|
+
working_dir=Path.cwd(),
|
|
246
311
|
)
|
|
247
312
|
except (ImportError, ConnectionError, Exception) as e:
|
|
248
313
|
self.logger.warning(f"Socket.IO connection failed: {e}")
|
|
@@ -260,14 +325,53 @@ class OneshotSession:
|
|
|
260
325
|
|
|
261
326
|
def _build_command(self) -> list:
|
|
262
327
|
"""Build the base Claude command."""
|
|
263
|
-
cmd = ["claude", "--
|
|
328
|
+
cmd = ["claude", "--dangerously-skip-permissions"]
|
|
264
329
|
|
|
265
330
|
# Add custom arguments
|
|
266
331
|
if self.runner.claude_args:
|
|
267
332
|
cmd.extend(self.runner.claude_args)
|
|
268
333
|
|
|
334
|
+
# Add --agents flag if native agents mode is enabled
|
|
335
|
+
if getattr(self.runner, "use_native_agents", False):
|
|
336
|
+
agents_flag = self._build_agents_flag()
|
|
337
|
+
if agents_flag:
|
|
338
|
+
cmd.extend(agents_flag)
|
|
339
|
+
self.logger.info("✓ Native agents mode: Using --agents CLI flag")
|
|
340
|
+
|
|
269
341
|
return cmd
|
|
270
342
|
|
|
343
|
+
def _build_agents_flag(self) -> Optional[list]:
|
|
344
|
+
"""Build --agents flag with all MPM agents.
|
|
345
|
+
|
|
346
|
+
Returns:
|
|
347
|
+
List with ["--agents", "<json>"] or None if conversion fails
|
|
348
|
+
"""
|
|
349
|
+
try:
|
|
350
|
+
from claude_mpm.services.native_agent_converter import NativeAgentConverter
|
|
351
|
+
|
|
352
|
+
converter = NativeAgentConverter()
|
|
353
|
+
agents = converter.load_agents_from_templates()
|
|
354
|
+
|
|
355
|
+
if not agents:
|
|
356
|
+
self.logger.warning("No agents loaded for native mode")
|
|
357
|
+
return None
|
|
358
|
+
|
|
359
|
+
# Generate JSON for --agents flag
|
|
360
|
+
agents_json = converter.generate_agents_json(agents)
|
|
361
|
+
summary = converter.get_conversion_summary(agents)
|
|
362
|
+
|
|
363
|
+
self.logger.info(
|
|
364
|
+
f"Native agents: {summary['total_agents']} agents, "
|
|
365
|
+
f"{summary['json_size_kb']} KB JSON"
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
# Return as list: ["--agents", "<json>"]
|
|
369
|
+
return ["--agents", agents_json]
|
|
370
|
+
|
|
371
|
+
except Exception as e:
|
|
372
|
+
self.logger.error(f"Failed to build --agents flag: {e}", exc_info=True)
|
|
373
|
+
return None
|
|
374
|
+
|
|
271
375
|
def _handle_successful_response(self, response: str, prompt: str) -> None:
|
|
272
376
|
"""Process a successful Claude response."""
|
|
273
377
|
print(response)
|
|
@@ -298,7 +402,9 @@ class OneshotSession:
|
|
|
298
402
|
agent_name = self.runner._extract_agent_from_response(response)
|
|
299
403
|
if agent_name:
|
|
300
404
|
self.runner.websocket_server.agent_delegated(
|
|
301
|
-
agent=agent_name,
|
|
405
|
+
agent=agent_name,
|
|
406
|
+
task=prompt[:100],
|
|
407
|
+
status=OperationResult.PENDING,
|
|
302
408
|
)
|
|
303
409
|
|
|
304
410
|
# Log completion
|
|
@@ -334,7 +440,8 @@ class OneshotSession:
|
|
|
334
440
|
if self.runner.websocket_server:
|
|
335
441
|
self.runner.websocket_server.claude_output(error_msg, "stderr")
|
|
336
442
|
self.runner.websocket_server.claude_status_changed(
|
|
337
|
-
status=
|
|
443
|
+
status=ServiceState.ERROR,
|
|
444
|
+
message=f"Command failed with code {return_code}",
|
|
338
445
|
)
|
|
339
446
|
|
|
340
447
|
# 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
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Protocol interfaces for dependency injection.
|
|
2
|
+
|
|
3
|
+
This module defines Protocol interfaces to break circular dependencies
|
|
4
|
+
using Python's typing.Protocol feature for structural subtyping.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from claude_mpm.core.protocols.runner_protocol import (
|
|
8
|
+
ClaudeRunnerProtocol,
|
|
9
|
+
SystemPromptProvider,
|
|
10
|
+
)
|
|
11
|
+
from claude_mpm.core.protocols.session_protocol import (
|
|
12
|
+
InteractiveSessionProtocol,
|
|
13
|
+
OneshotSessionProtocol,
|
|
14
|
+
SessionManagementProtocol,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"ClaudeRunnerProtocol",
|
|
19
|
+
"InteractiveSessionProtocol",
|
|
20
|
+
"OneshotSessionProtocol",
|
|
21
|
+
"SessionManagementProtocol",
|
|
22
|
+
"SystemPromptProvider",
|
|
23
|
+
]
|