claude-mpm 4.0.19__tar.gz → 4.0.20__tar.gz
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.
- claude_mpm-4.0.20/BUILD_NUMBER +1 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/PKG-INFO +1 -1
- claude_mpm-4.0.20/VERSION +1 -0
- claude_mpm-4.0.20/src/claude_mpm/VERSION +1 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/__main__.py +4 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/BASE_AGENT_TEMPLATE.md +38 -2
- claude_mpm-4.0.20/src/claude_mpm/agents/OUTPUT_STYLE.md +84 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/qa.json +1 -1
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/__init__.py +23 -1
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/__main__.py +4 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/memory.py +32 -5
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/run.py +33 -6
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/base_parser.py +5 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/run_parser.py +5 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/utils.py +17 -4
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/base_service.py +1 -1
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/config.py +70 -5
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/framework_loader.py +342 -31
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/interactive_session.py +55 -1
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/oneshot_session.py +7 -1
- claude_mpm-4.0.20/src/claude_mpm/core/output_style_manager.py +468 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/unified_paths.py +190 -21
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/claude_hooks/hook_handler.py +91 -16
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/claude_hooks/hook_wrapper.sh +3 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/init.py +1 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_deployment.py +151 -7
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_template_builder.py +37 -1
- claude_mpm-4.0.20/src/claude_mpm/services/agents/deployment/multi_source_deployment_service.py +441 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/memory/__init__.py +0 -2
- claude_mpm-4.0.20/src/claude_mpm/services/agents/memory/agent_memory_manager.py +1331 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/memory/content_manager.py +144 -14
- claude_mpm-4.0.20/src/claude_mpm/services/agents/memory/template_generator.py +121 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/server/stdio_server.py +61 -169
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/subprocess_launcher_service.py +5 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm.egg-info/PKG-INFO +1 -1
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm.egg-info/SOURCES.txt +3 -2
- claude_mpm-4.0.19/VERSION +0 -1
- claude_mpm-4.0.19/claude-mpm +0 -45
- claude_mpm-4.0.19/src/claude_mpm/BUILD_NUMBER +0 -1
- claude_mpm-4.0.19/src/claude_mpm/VERSION +0 -1
- claude_mpm-4.0.19/src/claude_mpm/services/agents/memory/agent_memory_manager.py +0 -637
- claude_mpm-4.0.19/src/claude_mpm/services/agents/memory/analyzer.py +0 -430
- claude_mpm-4.0.19/src/claude_mpm/services/agents/memory/template_generator.py +0 -468
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/CLAUDE.md +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/LICENSE +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/MANIFEST.in +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/README.md +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/pyproject.toml +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/requirements.txt +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/scripts/ticket +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/setup.cfg +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/setup.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20/src/claude_mpm}/BUILD_NUMBER +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/BASE_PM.md +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/INSTRUCTIONS.md +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/MEMORY.md +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/WORKFLOW.md +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/agent-template.yaml +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/agent_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/agent_loader_integration.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/agents_metadata.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/async_agent_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/backups/INSTRUCTIONS.md +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/base_agent.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/base_agent_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/frontmatter_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/schema/agent_schema.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/system_agent_config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/research_agent_2025011_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/research_memory_efficient.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/code_analyzer.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/data_engineer.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/documentation.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/engineer.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/memory_manager.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/ops.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/project_organizer.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/refactoring_engineer.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/research.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/security.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/ticketing.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/version_control.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/web_qa.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/agents/templates/web_ui.json +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/agents.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/aggregate.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/cleanup.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/info.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/mcp.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/mcp_command_router.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/mcp_config_commands.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/mcp_install_commands.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/mcp_server_commands.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/mcp_tool_commands.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/monitor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/run_config_checker.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/socketio_monitor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/commands/tickets.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parser.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/agents_parser.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/config_parser.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/mcp_parser.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/memory_parser.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/monitor_parser.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/parsers/tickets_parser.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli/ticket_cli.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli_module/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli_module/args.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli_module/commands.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/cli_module/migration_example.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/config/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/config/agent_config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/config/experimental_features.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/config/paths.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/config/socketio_config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/constants.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/agent_name_normalizer.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/agent_registry.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/agent_session_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/cache.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/claude_runner.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/config_aliases.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/config_constants.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/constants.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/container.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/exceptions.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/factories.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/hook_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/hook_performance_config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/injectable_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/interfaces.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/lazy.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/logger.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/logging_config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/minimal_framework_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/mixins.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/optimized_agent_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/optimized_startup.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/pm_hook_interceptor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/service_registry.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/session_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/socketio_pool.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/tool_access_control.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/types.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/typing_utils.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/unified_agent_registry.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/core/unified_config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/index.html +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/open_dashboard.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/agent-inference.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/event-processor.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/event-viewer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/export-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/hud-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/module-viewer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/session-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/socket-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/components/working-directory.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/dashboard.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/built/socket-client.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/css/dashboard.css +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/event-processor.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/export-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/session-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/components/working-directory.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/dashboard.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/dist/socket-client.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/agent-inference.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/event-processor.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/event-viewer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/export-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/hud-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/module-viewer.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/session-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/socket-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/components/working-directory.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/dashboard.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/extension-error-handler.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/static/js/socket-client.js +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/templates/index.html +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/dashboard/test_dashboard.html +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/experimental/cli_enhancements.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/generators/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/generators/agent_profile_generator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/base_hook.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/claude_hooks/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/claude_hooks/connection_pool.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/claude_hooks/event_handlers.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/claude_hooks/memory_integration.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/claude_hooks/response_tracking.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/claude_hooks/tool_analysis.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/memory_integration_hook.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/tool_call_interceptor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/hooks/validation_hooks.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/models/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/models/agent_definition.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/models/agent_session.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/scripts/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/scripts/mcp_server.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/scripts/mcp_wrapper.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/scripts/socketio_daemon.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/scripts/socketio_server_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/scripts/start_activity_logging.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agent_capabilities_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_config_provider.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_configuration_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_definition_factory.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_discovery_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_environment_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_filesystem_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_format_converter.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_metrics_collector.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_version_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agent_versioning.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/agents_directory_resolver.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/async_agent_deployment.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/config/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/config/deployment_config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/config/deployment_config_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/deployment_config_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/deployment_type_detector.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/facade/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/facade/deployment_facade.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/interface_adapter.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/lifecycle_health_checker.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/processors/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/processors/agent_processor.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/results/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/results/deployment_metrics.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/results/deployment_result_builder.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/strategies/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/strategies/base_strategy.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/strategies/project_strategy.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/strategies/strategy_selector.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/strategies/system_strategy.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/strategies/user_strategy.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/system_instructions_deployer.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/validation/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/validation/agent_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/validation/deployment_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/validation/template_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/deployment/validation/validation_result.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/loading/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/loading/agent_profile_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/loading/base_agent_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/loading/framework_agent_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/management/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/management/agent_capabilities_generator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/management/agent_management_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/memory/agent_persistence_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/registry/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/registry/deployed_agent_discovery.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/agents/registry/modification_tracker.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/async_session_logger.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/claude_session_logger.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/command_handler_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/communication/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/core/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/core/base.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/core/interfaces/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/core/interfaces/agent.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/core/interfaces/communication.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/core/interfaces/infrastructure.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/core/interfaces/service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/core/interfaces.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/event_aggregator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/exceptions.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/content_assembler.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/content_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/deployment_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/header.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/section_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/framework_claude_md_generator/version_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/hook_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/infrastructure/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/infrastructure/context_preservation.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/infrastructure/daemon_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/infrastructure/logging.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/infrastructure/monitoring.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/config/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/config/config_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/config/config_schema.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/config/configuration.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/core/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/core/base.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/core/exceptions.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/core/interfaces.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/main.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/registry/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/server/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/tools/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory/builder.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory/cache/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory/cache/shared_prompt_cache.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory/cache/simple_cache.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory/indexed_memory.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory/optimizer.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory/router.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/memory_hook_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/port_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/project/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/project/analyzer.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/project/registry.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/recovery_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/response_tracker.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/runner_configuration_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/session_management_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/client_proxy.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/base.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/connection.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/file.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/git.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/hook.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/memory.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/project.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/handlers/registry.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/server/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/server/broadcaster.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/server/core.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio/server/main.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio_client_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/socketio_server.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/system_instructions_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/ticket_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/utility_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/version_control/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/version_control/branch_strategy.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/version_control/conflict_resolution.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/version_control/git_operations.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/version_control/semantic_versioning.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/version_control/version_parser.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/services/version_service.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/storage/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/storage/state_storage.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/ticket_wrapper.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/agent_dependency_loader.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/config_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/console.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/dependency_cache.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/dependency_manager.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/dependency_strategies.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/environment_context.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/error_handler.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/file_utils.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/framework_detection.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/import_migration_example.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/imports.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/path_operations.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/robust_installer.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/session_logging.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/utils/subprocess_utils.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/validation/__init__.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/validation/agent_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm/validation/frontmatter_validator.py +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm.egg-info/dependency_links.txt +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm.egg-info/entry_points.txt +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm.egg-info/requires.txt +0 -0
- {claude_mpm-4.0.19 → claude_mpm-4.0.20}/src/claude_mpm.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
289
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4.0.20
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4.0.20
|
|
@@ -10,8 +10,12 @@ DESIGN DECISION: We only import and call the main function from the CLI module,
|
|
|
10
10
|
keeping this file minimal and focused on its single responsibility.
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import os
|
|
13
14
|
import sys
|
|
14
15
|
|
|
16
|
+
# Disable telemetry by default
|
|
17
|
+
os.environ['DISABLE_TELEMETRY'] = '1'
|
|
18
|
+
|
|
15
19
|
# Add parent directory to path to ensure proper imports
|
|
16
20
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
17
21
|
|
|
@@ -70,10 +70,30 @@ End every response with this structured data:
|
|
|
70
70
|
{"file": "path/file.py", "action": "created|modified|deleted", "description": "What changed"}
|
|
71
71
|
],
|
|
72
72
|
"tools_used": ["Read", "Edit", "etc"],
|
|
73
|
-
"remember": ["Key learnings"] or null
|
|
73
|
+
"remember": ["Key project-specific learnings"] or null
|
|
74
74
|
}
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
+
**Memory Guidelines:**
|
|
78
|
+
- The `remember` field should contain a list of strings or `null`
|
|
79
|
+
- Only include memories when you learn something NEW about THIS project
|
|
80
|
+
- Memories are automatically extracted and added to your agent memory file
|
|
81
|
+
- Each memory item should be a concise, specific fact (under 100 characters)
|
|
82
|
+
- Memories accumulate over time - you don't need to repeat previous learnings
|
|
83
|
+
|
|
84
|
+
**Good memory examples:**
|
|
85
|
+
- "Memory system uses .claude-mpm/memories/ for storage"
|
|
86
|
+
- "Service layer has 5 domains: core, agent, communication, project, infra"
|
|
87
|
+
- "All services implement explicit interfaces for DI"
|
|
88
|
+
- "Agent templates stored as JSON in src/claude_mpm/agents/templates/"
|
|
89
|
+
- "Project uses lazy loading for performance optimization"
|
|
90
|
+
|
|
91
|
+
**Bad memory examples (too generic or obvious):**
|
|
92
|
+
- "Python uses indentation" (generic programming knowledge)
|
|
93
|
+
- "Always test code" (general best practice)
|
|
94
|
+
- "Files should have docstrings" (not project-specific)
|
|
95
|
+
- "This is a Python project" (too obvious)
|
|
96
|
+
|
|
77
97
|
## Quick Reference
|
|
78
98
|
|
|
79
99
|
**When blocked:** Stop and ask for help
|
|
@@ -81,5 +101,21 @@ End every response with this structured data:
|
|
|
81
101
|
**When delegating:** Use `[Agent] Task` format
|
|
82
102
|
**Always include:** JSON response block at end
|
|
83
103
|
|
|
104
|
+
## Memory System Integration
|
|
105
|
+
|
|
106
|
+
**How Memory Works:**
|
|
107
|
+
1. Before each task, your accumulated project knowledge is loaded
|
|
108
|
+
2. During tasks, you discover new project-specific facts
|
|
109
|
+
3. Add these discoveries to the `remember` field in your JSON response
|
|
110
|
+
4. Your memories are automatically saved and will be available next time
|
|
111
|
+
|
|
112
|
+
**What to Remember:**
|
|
113
|
+
- Project architecture and structure patterns
|
|
114
|
+
- Coding conventions specific to this codebase
|
|
115
|
+
- Integration points and dependencies
|
|
116
|
+
- Performance considerations discovered
|
|
117
|
+
- Common mistakes to avoid in this project
|
|
118
|
+
- Domain-specific knowledge unique to this system
|
|
119
|
+
|
|
84
120
|
## Remember
|
|
85
|
-
You're a specialist in your domain. Focus on your expertise, communicate clearly with the PM who coordinates multi-agent workflows, and always think about what other agents need next.
|
|
121
|
+
You're a specialist in your domain. Focus on your expertise, communicate clearly with the PM who coordinates multi-agent workflows, and always think about what other agents need next. Your accumulated memories help you become more effective over time.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Claude MPM
|
|
3
|
+
description: Multi-Agent Project Manager orchestration mode for delegation and coordination
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You are Claude Multi-Agent PM, a PROJECT MANAGER whose SOLE PURPOSE is to delegate work to specialized agents.
|
|
7
|
+
|
|
8
|
+
## 🔴 PRIMARY DIRECTIVE - MANDATORY DELEGATION 🔴
|
|
9
|
+
|
|
10
|
+
**YOU ARE STRICTLY FORBIDDEN FROM DOING ANY WORK DIRECTLY.**
|
|
11
|
+
|
|
12
|
+
Direct implementation is ABSOLUTELY PROHIBITED unless the user EXPLICITLY overrides with phrases like:
|
|
13
|
+
- "do this yourself"
|
|
14
|
+
- "don't delegate"
|
|
15
|
+
- "implement directly"
|
|
16
|
+
- "you do it"
|
|
17
|
+
- "no delegation"
|
|
18
|
+
|
|
19
|
+
## Core Operating Rules
|
|
20
|
+
|
|
21
|
+
**DEFAULT BEHAVIOR - ALWAYS DELEGATE**:
|
|
22
|
+
- 🔴 You MUST delegate 100% of ALL work to specialized agents by default
|
|
23
|
+
- 🔴 Direct action is STRICTLY FORBIDDEN without explicit user override
|
|
24
|
+
- 🔴 Even the simplest tasks MUST be delegated - NO EXCEPTIONS
|
|
25
|
+
- 🔴 When in doubt, ALWAYS DELEGATE - never act directly
|
|
26
|
+
|
|
27
|
+
**Allowed Tools**:
|
|
28
|
+
- **Task** for delegation (YOUR PRIMARY FUNCTION)
|
|
29
|
+
- **TodoWrite** for tracking delegation progress ONLY
|
|
30
|
+
- **WebSearch/WebFetch** for gathering context BEFORE delegation
|
|
31
|
+
- **Direct answers** ONLY for questions about PM capabilities
|
|
32
|
+
|
|
33
|
+
## Communication Standards
|
|
34
|
+
|
|
35
|
+
- **Tone**: Professional, neutral by default
|
|
36
|
+
- **Use**: "Understood", "Confirmed", "Noted"
|
|
37
|
+
- **No simplification** without explicit user request
|
|
38
|
+
- **No mocks** outside test environments
|
|
39
|
+
- **Complete implementations** only - no placeholders
|
|
40
|
+
- **FORBIDDEN**: Overeager enthusiasm ("Excellent!", "Perfect!", "Amazing!")
|
|
41
|
+
|
|
42
|
+
## Error Handling Protocol
|
|
43
|
+
|
|
44
|
+
**3-Attempt Process**:
|
|
45
|
+
1. **First Failure**: Re-delegate with enhanced context
|
|
46
|
+
2. **Second Failure**: Mark "ERROR - Attempt 2/3", escalate if needed
|
|
47
|
+
3. **Third Failure**: TodoWrite escalation with user decision required
|
|
48
|
+
|
|
49
|
+
## Standard Operating Procedure
|
|
50
|
+
|
|
51
|
+
1. **Analysis**: Parse request, assess context (NO TOOLS)
|
|
52
|
+
2. **Planning**: Agent selection, task breakdown, priority assignment
|
|
53
|
+
3. **Delegation**: Task Tool with enhanced format
|
|
54
|
+
4. **Monitoring**: Track progress via TodoWrite
|
|
55
|
+
5. **Integration**: Synthesize results, validate, report
|
|
56
|
+
|
|
57
|
+
## TodoWrite Requirements
|
|
58
|
+
|
|
59
|
+
### Mandatory [Agent] Prefix Rules
|
|
60
|
+
|
|
61
|
+
**ALWAYS use [Agent] prefix for delegated tasks**:
|
|
62
|
+
- ✅ `[Research] Analyze authentication patterns`
|
|
63
|
+
- ✅ `[Engineer] Implement user registration`
|
|
64
|
+
- ✅ `[QA] Test payment flow`
|
|
65
|
+
- ✅ `[Documentation] Update API docs`
|
|
66
|
+
|
|
67
|
+
**NEVER use [PM] prefix for implementation tasks**
|
|
68
|
+
|
|
69
|
+
### Task Status Management
|
|
70
|
+
|
|
71
|
+
- `pending` - Task not yet started
|
|
72
|
+
- `in_progress` - Currently being worked on (ONE at a time)
|
|
73
|
+
- `completed` - Task finished successfully
|
|
74
|
+
|
|
75
|
+
## Response Format
|
|
76
|
+
|
|
77
|
+
When completing delegations, provide structured summaries including:
|
|
78
|
+
- Request summary
|
|
79
|
+
- Agents used and task counts
|
|
80
|
+
- Tasks completed with [Agent] prefixes
|
|
81
|
+
- Files affected across all agents
|
|
82
|
+
- Blockers encountered and resolutions
|
|
83
|
+
- Next steps for user
|
|
84
|
+
- Key information to remember
|
|
@@ -71,6 +71,10 @@ def main(argv: Optional[list] = None):
|
|
|
71
71
|
Returns:
|
|
72
72
|
Exit code (0 for success, non-zero for errors)
|
|
73
73
|
"""
|
|
74
|
+
# Disable telemetry by default (set early in case any imported modules check it)
|
|
75
|
+
import os
|
|
76
|
+
os.environ.setdefault('DISABLE_TELEMETRY', '1')
|
|
77
|
+
|
|
74
78
|
# Ensure directories are initialized on first run
|
|
75
79
|
ensure_directories()
|
|
76
80
|
|
|
@@ -247,10 +251,28 @@ def _ensure_run_attributes(args):
|
|
|
247
251
|
args.input = getattr(args, "input", None)
|
|
248
252
|
args.non_interactive = getattr(args, "non_interactive", False)
|
|
249
253
|
args.no_native_agents = getattr(args, "no_native_agents", False)
|
|
250
|
-
|
|
254
|
+
|
|
255
|
+
# Handle claude_args - if --resume flag is set, add it to claude_args
|
|
256
|
+
claude_args = getattr(args, "claude_args", [])
|
|
257
|
+
if getattr(args, "resume", False):
|
|
258
|
+
# Add --resume to claude_args if not already present
|
|
259
|
+
if "--resume" not in claude_args:
|
|
260
|
+
claude_args = ["--resume"] + claude_args
|
|
261
|
+
args.claude_args = claude_args
|
|
262
|
+
|
|
251
263
|
args.launch_method = getattr(args, "launch_method", "exec")
|
|
252
264
|
args.websocket = getattr(args, "websocket", False)
|
|
253
265
|
args.websocket_port = getattr(args, "websocket_port", 8765)
|
|
266
|
+
# CRITICAL: Include mpm_resume attribute for session resumption
|
|
267
|
+
args.mpm_resume = getattr(args, "mpm_resume", None)
|
|
268
|
+
# Also include monitor and force attributes
|
|
269
|
+
args.monitor = getattr(args, "monitor", False)
|
|
270
|
+
args.force = getattr(args, "force", False)
|
|
271
|
+
# Include dependency checking attributes
|
|
272
|
+
args.check_dependencies = getattr(args, "check_dependencies", True)
|
|
273
|
+
args.force_check_dependencies = getattr(args, "force_check_dependencies", False)
|
|
274
|
+
args.no_prompt = getattr(args, "no_prompt", False)
|
|
275
|
+
args.force_prompt = getattr(args, "force_prompt", False)
|
|
254
276
|
|
|
255
277
|
|
|
256
278
|
def _execute_command(command: str, args) -> int:
|
|
@@ -16,8 +16,12 @@ This is equivalent to calling the claude-mpm script directly but ensures
|
|
|
16
16
|
proper Python module context and import resolution.
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
|
+
import os
|
|
19
20
|
import sys
|
|
20
21
|
|
|
22
|
+
# Disable telemetry by default
|
|
23
|
+
os.environ['DISABLE_TELEMETRY'] = '1'
|
|
24
|
+
|
|
21
25
|
from . import main
|
|
22
26
|
|
|
23
27
|
if __name__ == "__main__":
|
|
@@ -280,7 +280,12 @@ def _show_basic_status(memory_manager):
|
|
|
280
280
|
print(f" Expected location: {memory_dir}")
|
|
281
281
|
return
|
|
282
282
|
|
|
283
|
-
|
|
283
|
+
# Support both old and new formats
|
|
284
|
+
memory_files = list(memory_dir.glob("*_memories.md"))
|
|
285
|
+
# Also check for old formats for backward compatibility
|
|
286
|
+
memory_files.extend(memory_dir.glob("*_agent.md"))
|
|
287
|
+
memory_files.extend([f for f in memory_dir.glob("*.md")
|
|
288
|
+
if f.name != "README.md" and not f.name.endswith("_memories.md") and not f.name.endswith("_agent.md")])
|
|
284
289
|
|
|
285
290
|
if not memory_files:
|
|
286
291
|
print("📭 No memory files found")
|
|
@@ -296,7 +301,13 @@ def _show_basic_status(memory_manager):
|
|
|
296
301
|
size_kb = stat.st_size / 1024
|
|
297
302
|
total_size += stat.st_size
|
|
298
303
|
|
|
299
|
-
|
|
304
|
+
# Extract agent name from various formats
|
|
305
|
+
if file_path.name.endswith("_memories.md"):
|
|
306
|
+
agent_id = file_path.stem[:-9] # Remove "_memories"
|
|
307
|
+
elif file_path.name.endswith("_agent.md"):
|
|
308
|
+
agent_id = file_path.stem[:-6] # Remove "_agent"
|
|
309
|
+
else:
|
|
310
|
+
agent_id = file_path.stem
|
|
300
311
|
print(f" {agent_id}: {size_kb:.1f} KB")
|
|
301
312
|
|
|
302
313
|
print(f"💾 Total size: {total_size / 1024:.1f} KB")
|
|
@@ -395,7 +406,12 @@ def _clean_memory(args, memory_manager):
|
|
|
395
406
|
print("📁 No memory directory found - nothing to clean")
|
|
396
407
|
return
|
|
397
408
|
|
|
398
|
-
|
|
409
|
+
# Support both old and new formats
|
|
410
|
+
memory_files = list(memory_dir.glob("*_memories.md"))
|
|
411
|
+
# Also check for old formats for backward compatibility
|
|
412
|
+
memory_files.extend(memory_dir.glob("*_agent.md"))
|
|
413
|
+
memory_files.extend([f for f in memory_dir.glob("*.md")
|
|
414
|
+
if f.name != "README.md" and not f.name.endswith("_memories.md") and not f.name.endswith("_agent.md")])
|
|
399
415
|
if not memory_files:
|
|
400
416
|
print("📭 No memory files found - nothing to clean")
|
|
401
417
|
return
|
|
@@ -651,7 +667,12 @@ def _show_all_agent_memories(format_type, memory_manager):
|
|
|
651
667
|
print("📁 No memory directory found")
|
|
652
668
|
return
|
|
653
669
|
|
|
654
|
-
|
|
670
|
+
# Support both old and new formats
|
|
671
|
+
memory_files = list(memory_dir.glob("*_memories.md"))
|
|
672
|
+
# Also check for old formats for backward compatibility
|
|
673
|
+
memory_files.extend(memory_dir.glob("*_agent.md"))
|
|
674
|
+
memory_files.extend([f for f in memory_dir.glob("*.md")
|
|
675
|
+
if f.name != "README.md" and not f.name.endswith("_memories.md") and not f.name.endswith("_agent.md")])
|
|
655
676
|
if not memory_files:
|
|
656
677
|
print("📭 No agent memories found")
|
|
657
678
|
return
|
|
@@ -664,7 +685,13 @@ def _show_all_agent_memories(format_type, memory_manager):
|
|
|
664
685
|
|
|
665
686
|
# Load all agent memories
|
|
666
687
|
for file_path in sorted(memory_files):
|
|
667
|
-
|
|
688
|
+
# Extract agent name from various formats
|
|
689
|
+
if file_path.name.endswith("_memories.md"):
|
|
690
|
+
agent_id = file_path.stem[:-9] # Remove "_memories"
|
|
691
|
+
elif file_path.name.endswith("_agent.md"):
|
|
692
|
+
agent_id = file_path.stem[:-6] # Remove "_agent"
|
|
693
|
+
else:
|
|
694
|
+
agent_id = file_path.stem
|
|
668
695
|
try:
|
|
669
696
|
memory_content = memory_manager.load_agent_memory(agent_id)
|
|
670
697
|
if memory_content:
|
|
@@ -33,7 +33,8 @@ def filter_claude_mpm_args(claude_args):
|
|
|
33
33
|
flags and will error if they're passed through.
|
|
34
34
|
|
|
35
35
|
DESIGN DECISION: We maintain a list of known claude-mpm flags to filter out,
|
|
36
|
-
ensuring only genuine Claude CLI arguments are passed through.
|
|
36
|
+
ensuring only genuine Claude CLI arguments are passed through. We also remove
|
|
37
|
+
the '--' separator that argparse uses, as it's not needed by Claude CLI.
|
|
37
38
|
|
|
38
39
|
Args:
|
|
39
40
|
claude_args: List of arguments captured by argparse.REMAINDER
|
|
@@ -83,6 +84,11 @@ def filter_claude_mpm_args(claude_args):
|
|
|
83
84
|
while i < len(claude_args):
|
|
84
85
|
arg = claude_args[i]
|
|
85
86
|
|
|
87
|
+
# Skip the '--' separator used by argparse - Claude doesn't need it
|
|
88
|
+
if arg == "--":
|
|
89
|
+
i += 1
|
|
90
|
+
continue
|
|
91
|
+
|
|
86
92
|
# Check if this is a claude-mpm flag
|
|
87
93
|
if arg in mpm_flags:
|
|
88
94
|
# Skip this flag
|
|
@@ -379,16 +385,37 @@ def run_session(args):
|
|
|
379
385
|
# Create simple runner
|
|
380
386
|
enable_tickets = not args.no_tickets
|
|
381
387
|
raw_claude_args = getattr(args, "claude_args", []) or []
|
|
388
|
+
|
|
389
|
+
# Add --resume to claude_args if the flag is set
|
|
390
|
+
resume_flag_present = getattr(args, "resume", False)
|
|
391
|
+
if resume_flag_present:
|
|
392
|
+
logger.info("📌 --resume flag detected in args")
|
|
393
|
+
if "--resume" not in raw_claude_args:
|
|
394
|
+
raw_claude_args = ["--resume"] + raw_claude_args
|
|
395
|
+
logger.info("✅ Added --resume to claude_args")
|
|
396
|
+
else:
|
|
397
|
+
logger.info("ℹ️ --resume already in claude_args")
|
|
398
|
+
|
|
382
399
|
# Filter out claude-mpm specific flags before passing to Claude CLI
|
|
400
|
+
logger.debug(f"Pre-filter claude_args: {raw_claude_args}")
|
|
383
401
|
claude_args = filter_claude_mpm_args(raw_claude_args)
|
|
384
402
|
monitor_mode = getattr(args, "monitor", False)
|
|
385
403
|
|
|
386
|
-
#
|
|
404
|
+
# Enhanced debug logging for argument filtering
|
|
387
405
|
if raw_claude_args != claude_args:
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
406
|
+
filtered_out = list(set(raw_claude_args) - set(claude_args))
|
|
407
|
+
logger.debug(f"Filtered out MPM-specific args: {filtered_out}")
|
|
408
|
+
|
|
409
|
+
logger.info(f"Final claude_args being passed: {claude_args}")
|
|
410
|
+
|
|
411
|
+
# Explicit verification of --resume flag
|
|
412
|
+
if resume_flag_present:
|
|
413
|
+
if "--resume" in claude_args:
|
|
414
|
+
logger.info("✅ CONFIRMED: --resume flag will be passed to Claude CLI")
|
|
415
|
+
else:
|
|
416
|
+
logger.error("❌ WARNING: --resume flag was filtered out! This is a bug!")
|
|
417
|
+
logger.error(f" Original args: {raw_claude_args}")
|
|
418
|
+
logger.error(f" Filtered args: {claude_args}")
|
|
392
419
|
|
|
393
420
|
# Use the specified launch method (default: exec)
|
|
394
421
|
launch_method = getattr(args, "launch_method", "exec")
|
|
@@ -187,6 +187,11 @@ def add_top_level_run_arguments(parser: argparse.ArgumentParser) -> None:
|
|
|
187
187
|
const="last",
|
|
188
188
|
help="Resume an MPM session (last session if no ID specified, or specific session ID)",
|
|
189
189
|
)
|
|
190
|
+
run_group.add_argument(
|
|
191
|
+
"--resume",
|
|
192
|
+
action="store_true",
|
|
193
|
+
help="Pass --resume flag to Claude Desktop to resume the last conversation",
|
|
194
|
+
)
|
|
190
195
|
run_group.add_argument(
|
|
191
196
|
"--force",
|
|
192
197
|
action="store_true",
|
|
@@ -75,6 +75,11 @@ def add_run_arguments(parser: argparse.ArgumentParser) -> None:
|
|
|
75
75
|
const="last",
|
|
76
76
|
help="Resume an MPM session (last session if no ID specified, or specific session ID)",
|
|
77
77
|
)
|
|
78
|
+
run_group.add_argument(
|
|
79
|
+
"--resume",
|
|
80
|
+
action="store_true",
|
|
81
|
+
help="Pass --resume flag to Claude Desktop to resume the last conversation",
|
|
82
|
+
)
|
|
78
83
|
|
|
79
84
|
# Dependency checking options
|
|
80
85
|
dep_group = parser.add_argument_group("dependency options")
|
|
@@ -132,11 +132,24 @@ def list_agent_versions_at_startup() -> None:
|
|
|
132
132
|
|
|
133
133
|
WHY: Users want to see what agents are available when they start a session.
|
|
134
134
|
This provides immediate feedback about the deployed agent environment.
|
|
135
|
+
|
|
136
|
+
DESIGN DECISION: We suppress INFO logging during this call to avoid duplicate
|
|
137
|
+
initialization messages since the deployment service will be initialized again
|
|
138
|
+
later in the ClaudeRunner.
|
|
135
139
|
"""
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
# Temporarily suppress INFO level logging to avoid duplicate initialization messages
|
|
141
|
+
import logging
|
|
142
|
+
original_level = logging.getLogger("claude_mpm").level
|
|
143
|
+
logging.getLogger("claude_mpm").setLevel(logging.WARNING)
|
|
144
|
+
|
|
145
|
+
try:
|
|
146
|
+
agent_versions = get_agent_versions_display()
|
|
147
|
+
if agent_versions:
|
|
148
|
+
print(agent_versions)
|
|
149
|
+
print() # Extra newline after the display
|
|
150
|
+
finally:
|
|
151
|
+
# Restore original logging level
|
|
152
|
+
logging.getLogger("claude_mpm").setLevel(original_level)
|
|
140
153
|
|
|
141
154
|
|
|
142
155
|
def setup_logging(args) -> object:
|
|
@@ -159,7 +159,7 @@ class BaseService(LoggerMixin, ABC):
|
|
|
159
159
|
|
|
160
160
|
# Only log if not in quiet mode
|
|
161
161
|
if not os.environ.get("CLAUDE_PM_QUIET_MODE", "").lower() == "true":
|
|
162
|
-
self.logger.
|
|
162
|
+
self.logger.debug(f"Initialized {self.name} service")
|
|
163
163
|
|
|
164
164
|
def _init_enhanced_features(self):
|
|
165
165
|
"""Initialize enhanced features when enabled."""
|
|
@@ -24,6 +24,9 @@ class Config:
|
|
|
24
24
|
"""
|
|
25
25
|
Configuration manager for Claude PM services.
|
|
26
26
|
|
|
27
|
+
Implements singleton pattern to ensure configuration is loaded only once
|
|
28
|
+
and shared across all services.
|
|
29
|
+
|
|
27
30
|
Supports loading from:
|
|
28
31
|
- Python dictionaries
|
|
29
32
|
- JSON files
|
|
@@ -31,6 +34,23 @@ class Config:
|
|
|
31
34
|
- Environment variables
|
|
32
35
|
"""
|
|
33
36
|
|
|
37
|
+
_instance = None
|
|
38
|
+
_initialized = False
|
|
39
|
+
_success_logged = False # Class-level flag to track if success message was already logged
|
|
40
|
+
|
|
41
|
+
def __new__(cls, *args, **kwargs):
|
|
42
|
+
"""Implement singleton pattern to ensure single configuration instance.
|
|
43
|
+
|
|
44
|
+
WHY: Configuration was being loaded 11 times during startup, once for each service.
|
|
45
|
+
This singleton pattern ensures configuration is loaded only once and reused.
|
|
46
|
+
"""
|
|
47
|
+
if cls._instance is None:
|
|
48
|
+
cls._instance = super().__new__(cls)
|
|
49
|
+
logger.info("Creating new Config singleton instance")
|
|
50
|
+
else:
|
|
51
|
+
logger.debug("Reusing existing Config singleton instance")
|
|
52
|
+
return cls._instance
|
|
53
|
+
|
|
34
54
|
def __init__(
|
|
35
55
|
self,
|
|
36
56
|
config: Optional[Dict[str, Any]] = None,
|
|
@@ -45,6 +65,21 @@ class Config:
|
|
|
45
65
|
config_file: Path to configuration file (JSON or YAML)
|
|
46
66
|
env_prefix: Prefix for environment variables
|
|
47
67
|
"""
|
|
68
|
+
# Skip initialization if already done (singleton pattern)
|
|
69
|
+
if Config._initialized:
|
|
70
|
+
logger.debug("Config already initialized, skipping re-initialization")
|
|
71
|
+
# If someone tries to load a different config file after initialization,
|
|
72
|
+
# log a debug message but don't reload
|
|
73
|
+
if config_file and str(config_file) != getattr(self, '_loaded_from', None):
|
|
74
|
+
logger.debug(
|
|
75
|
+
f"Ignoring config_file parameter '{config_file}' - "
|
|
76
|
+
f"configuration already loaded from '{getattr(self, '_loaded_from', 'defaults')}'"
|
|
77
|
+
)
|
|
78
|
+
return
|
|
79
|
+
|
|
80
|
+
Config._initialized = True
|
|
81
|
+
logger.info("Initializing Config singleton for the first time")
|
|
82
|
+
|
|
48
83
|
self._config: Dict[str, Any] = {}
|
|
49
84
|
self._env_prefix = env_prefix
|
|
50
85
|
self._config_mgr = ConfigurationManager(cache_enabled=True)
|
|
@@ -55,22 +90,24 @@ class Config:
|
|
|
55
90
|
|
|
56
91
|
# Track where configuration was loaded from
|
|
57
92
|
self._loaded_from = None
|
|
93
|
+
# Track the actual file we loaded from to prevent re-loading
|
|
94
|
+
self._actual_loaded_file = None
|
|
58
95
|
|
|
59
96
|
# Load from file if provided
|
|
60
97
|
if config_file:
|
|
61
|
-
self.load_file(config_file)
|
|
98
|
+
self.load_file(config_file, is_initial_load=True)
|
|
62
99
|
self._loaded_from = str(config_file)
|
|
63
100
|
else:
|
|
64
101
|
# Try to load from standard location: .claude-mpm/configuration.yaml
|
|
65
102
|
default_config = Path.cwd() / ".claude-mpm" / "configuration.yaml"
|
|
66
103
|
if default_config.exists():
|
|
67
|
-
self.load_file(default_config)
|
|
104
|
+
self.load_file(default_config, is_initial_load=True)
|
|
68
105
|
self._loaded_from = str(default_config)
|
|
69
106
|
else:
|
|
70
107
|
# Also try .yml extension
|
|
71
108
|
alt_config = Path.cwd() / ".claude-mpm" / "configuration.yml"
|
|
72
109
|
if alt_config.exists():
|
|
73
|
-
self.load_file(alt_config)
|
|
110
|
+
self.load_file(alt_config, is_initial_load=True)
|
|
74
111
|
self._loaded_from = str(alt_config)
|
|
75
112
|
|
|
76
113
|
# Load from environment variables (new and legacy prefixes)
|
|
@@ -80,13 +117,22 @@ class Config:
|
|
|
80
117
|
# Apply defaults
|
|
81
118
|
self._apply_defaults()
|
|
82
119
|
|
|
83
|
-
def load_file(self, file_path: Union[str, Path]) -> None:
|
|
120
|
+
def load_file(self, file_path: Union[str, Path], is_initial_load: bool = True) -> None:
|
|
84
121
|
"""Load configuration from file with enhanced error handling.
|
|
85
122
|
|
|
86
123
|
WHY: Configuration loading failures can cause silent issues. We need
|
|
87
124
|
to provide clear, actionable error messages to help users fix problems.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
file_path: Path to the configuration file
|
|
128
|
+
is_initial_load: Whether this is the initial configuration load (for logging control)
|
|
88
129
|
"""
|
|
89
130
|
file_path = Path(file_path)
|
|
131
|
+
|
|
132
|
+
# Check if we've already loaded from this exact file to prevent duplicate messages
|
|
133
|
+
if hasattr(self, '_actual_loaded_file') and self._actual_loaded_file == str(file_path):
|
|
134
|
+
logger.debug(f"Configuration already loaded from {file_path}, skipping reload")
|
|
135
|
+
return
|
|
90
136
|
|
|
91
137
|
if not file_path.exists():
|
|
92
138
|
logger.warning(f"Configuration file not found: {file_path}")
|
|
@@ -113,7 +159,14 @@ class Config:
|
|
|
113
159
|
file_config = self._config_mgr.load_auto(file_path)
|
|
114
160
|
if file_config:
|
|
115
161
|
self._config = self._config_mgr.merge_configs(self._config, file_config)
|
|
116
|
-
|
|
162
|
+
# Track that we've successfully loaded from this file
|
|
163
|
+
self._actual_loaded_file = str(file_path)
|
|
164
|
+
# Only log success message once using class-level flag to avoid duplicate messages
|
|
165
|
+
if is_initial_load and not Config._success_logged:
|
|
166
|
+
logger.info(f"✓ Successfully loaded configuration from {file_path}")
|
|
167
|
+
Config._success_logged = True
|
|
168
|
+
else:
|
|
169
|
+
logger.debug(f"Configuration reloaded from {file_path}")
|
|
117
170
|
|
|
118
171
|
# Log important configuration values for debugging
|
|
119
172
|
if logger.isEnabledFor(logging.DEBUG):
|
|
@@ -789,3 +842,15 @@ class Config:
|
|
|
789
842
|
def __repr__(self) -> str:
|
|
790
843
|
"""String representation of configuration."""
|
|
791
844
|
return f"<Config({len(self._config)} keys)>"
|
|
845
|
+
|
|
846
|
+
@classmethod
|
|
847
|
+
def reset_singleton(cls):
|
|
848
|
+
"""Reset the singleton instance (mainly for testing purposes).
|
|
849
|
+
|
|
850
|
+
WHY: During testing, we may need to reset the singleton to test different
|
|
851
|
+
configurations. This method allows controlled reset of the singleton state.
|
|
852
|
+
"""
|
|
853
|
+
cls._instance = None
|
|
854
|
+
cls._initialized = False
|
|
855
|
+
cls._success_logged = False
|
|
856
|
+
logger.debug("Config singleton reset")
|