claude-mpm 3.9.11__py3-none-any.whl → 4.0.3__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.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +2 -2
- claude_mpm/__main__.py +3 -2
- claude_mpm/agents/__init__.py +85 -79
- claude_mpm/agents/agent_loader.py +464 -1003
- claude_mpm/agents/agent_loader_integration.py +45 -45
- claude_mpm/agents/agents_metadata.py +29 -30
- claude_mpm/agents/async_agent_loader.py +156 -138
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/base_agent_loader.py +179 -151
- claude_mpm/agents/frontmatter_validator.py +229 -130
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +213 -147
- claude_mpm/agents/templates/__init__.py +13 -13
- claude_mpm/agents/templates/code_analyzer.json +2 -2
- claude_mpm/agents/templates/data_engineer.json +1 -1
- claude_mpm/agents/templates/documentation.json +23 -11
- claude_mpm/agents/templates/engineer.json +22 -6
- claude_mpm/agents/templates/memory_manager.json +1 -1
- claude_mpm/agents/templates/ops.json +2 -2
- claude_mpm/agents/templates/project_organizer.json +1 -1
- claude_mpm/agents/templates/qa.json +1 -1
- claude_mpm/agents/templates/refactoring_engineer.json +222 -0
- claude_mpm/agents/templates/research.json +20 -14
- claude_mpm/agents/templates/security.json +1 -1
- claude_mpm/agents/templates/ticketing.json +1 -1
- claude_mpm/agents/templates/version_control.json +1 -1
- claude_mpm/agents/templates/web_qa.json +3 -1
- claude_mpm/agents/templates/web_ui.json +2 -2
- claude_mpm/cli/__init__.py +79 -51
- claude_mpm/cli/__main__.py +3 -2
- claude_mpm/cli/commands/__init__.py +20 -20
- claude_mpm/cli/commands/agents.py +279 -247
- claude_mpm/cli/commands/aggregate.py +138 -157
- claude_mpm/cli/commands/cleanup.py +147 -147
- claude_mpm/cli/commands/config.py +93 -76
- claude_mpm/cli/commands/info.py +17 -16
- claude_mpm/cli/commands/mcp.py +140 -905
- claude_mpm/cli/commands/mcp_command_router.py +139 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_install_commands.py +20 -0
- claude_mpm/cli/commands/mcp_server_commands.py +175 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +239 -203
- claude_mpm/cli/commands/monitor.py +203 -81
- claude_mpm/cli/commands/run.py +380 -429
- claude_mpm/cli/commands/run_config_checker.py +160 -0
- claude_mpm/cli/commands/socketio_monitor.py +235 -0
- claude_mpm/cli/commands/tickets.py +305 -197
- claude_mpm/cli/parser.py +24 -1156
- claude_mpm/cli/parsers/__init__.py +29 -0
- claude_mpm/cli/parsers/agents_parser.py +136 -0
- claude_mpm/cli/parsers/base_parser.py +331 -0
- claude_mpm/cli/parsers/config_parser.py +85 -0
- claude_mpm/cli/parsers/mcp_parser.py +152 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +104 -0
- claude_mpm/cli/parsers/run_parser.py +147 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/ticket_cli.py +7 -3
- claude_mpm/cli/utils.py +55 -37
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +38 -60
- claude_mpm/config/__init__.py +32 -25
- claude_mpm/config/agent_config.py +151 -119
- claude_mpm/config/experimental_features.py +71 -73
- claude_mpm/config/paths.py +94 -208
- claude_mpm/config/socketio_config.py +84 -73
- claude_mpm/constants.py +35 -18
- claude_mpm/core/__init__.py +9 -6
- claude_mpm/core/agent_name_normalizer.py +68 -71
- claude_mpm/core/agent_registry.py +372 -521
- claude_mpm/core/agent_session_manager.py +74 -63
- claude_mpm/core/base_service.py +116 -87
- claude_mpm/core/cache.py +119 -153
- claude_mpm/core/claude_runner.py +425 -1120
- claude_mpm/core/config.py +263 -168
- claude_mpm/core/config_aliases.py +69 -61
- claude_mpm/core/config_constants.py +292 -0
- claude_mpm/core/constants.py +57 -99
- claude_mpm/core/container.py +211 -178
- claude_mpm/core/exceptions.py +233 -89
- claude_mpm/core/factories.py +92 -54
- claude_mpm/core/framework_loader.py +378 -220
- claude_mpm/core/hook_manager.py +198 -83
- claude_mpm/core/hook_performance_config.py +136 -0
- claude_mpm/core/injectable_service.py +61 -55
- claude_mpm/core/interactive_session.py +165 -155
- claude_mpm/core/interfaces.py +221 -195
- claude_mpm/core/lazy.py +96 -96
- claude_mpm/core/logger.py +133 -107
- claude_mpm/core/logging_config.py +185 -157
- claude_mpm/core/minimal_framework_loader.py +20 -15
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +215 -181
- claude_mpm/core/optimized_agent_loader.py +134 -138
- claude_mpm/core/optimized_startup.py +159 -157
- claude_mpm/core/pm_hook_interceptor.py +85 -72
- claude_mpm/core/service_registry.py +103 -101
- claude_mpm/core/session_manager.py +97 -87
- claude_mpm/core/socketio_pool.py +212 -158
- claude_mpm/core/tool_access_control.py +58 -51
- claude_mpm/core/types.py +46 -24
- claude_mpm/core/typing_utils.py +166 -82
- claude_mpm/core/unified_agent_registry.py +721 -0
- claude_mpm/core/unified_config.py +550 -0
- claude_mpm/core/unified_paths.py +549 -0
- claude_mpm/dashboard/index.html +1 -1
- claude_mpm/dashboard/open_dashboard.py +51 -17
- claude_mpm/dashboard/static/css/dashboard.css +27 -8
- claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
- claude_mpm/dashboard/static/dist/dashboard.js +2 -0
- claude_mpm/dashboard/static/dist/socket-client.js +2 -0
- claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
- claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
- claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
- claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
- claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
- claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
- claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
- claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
- claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
- claude_mpm/dashboard/static/js/dashboard.js +178 -453
- claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/js/socket-client.js +120 -54
- claude_mpm/dashboard/templates/index.html +40 -50
- claude_mpm/experimental/cli_enhancements.py +60 -58
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +75 -65
- claude_mpm/hooks/__init__.py +1 -1
- claude_mpm/hooks/base_hook.py +33 -28
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
- claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
- claude_mpm/hooks/memory_integration_hook.py +140 -100
- claude_mpm/hooks/tool_call_interceptor.py +89 -76
- claude_mpm/hooks/validation_hooks.py +57 -49
- claude_mpm/init.py +145 -121
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +33 -23
- claude_mpm/models/agent_session.py +228 -200
- claude_mpm/scripts/__init__.py +1 -1
- claude_mpm/scripts/socketio_daemon.py +192 -75
- claude_mpm/scripts/socketio_server_manager.py +328 -0
- claude_mpm/scripts/start_activity_logging.py +25 -22
- claude_mpm/services/__init__.py +68 -43
- claude_mpm/services/agent_capabilities_service.py +271 -0
- claude_mpm/services/agents/__init__.py +23 -32
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
- claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
- claude_mpm/services/agents/deployment/agent_validator.py +352 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
- claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
- claude_mpm/services/agents/loading/__init__.py +2 -2
- claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
- claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
- claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
- claude_mpm/services/agents/management/__init__.py +2 -2
- claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
- claude_mpm/services/agents/management/agent_management_service.py +209 -156
- claude_mpm/services/agents/memory/__init__.py +9 -6
- claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
- claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
- claude_mpm/services/agents/memory/analyzer.py +430 -0
- claude_mpm/services/agents/memory/content_manager.py +376 -0
- claude_mpm/services/agents/memory/template_generator.py +468 -0
- claude_mpm/services/agents/registry/__init__.py +7 -10
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
- claude_mpm/services/agents/registry/modification_tracker.py +351 -285
- claude_mpm/services/async_session_logger.py +187 -153
- claude_mpm/services/claude_session_logger.py +87 -72
- claude_mpm/services/command_handler_service.py +217 -0
- claude_mpm/services/communication/__init__.py +3 -2
- claude_mpm/services/core/__init__.py +50 -97
- claude_mpm/services/core/base.py +60 -53
- claude_mpm/services/core/interfaces/__init__.py +188 -0
- claude_mpm/services/core/interfaces/agent.py +351 -0
- claude_mpm/services/core/interfaces/communication.py +343 -0
- claude_mpm/services/core/interfaces/infrastructure.py +413 -0
- claude_mpm/services/core/interfaces/service.py +434 -0
- claude_mpm/services/core/interfaces.py +19 -944
- claude_mpm/services/event_aggregator.py +208 -170
- claude_mpm/services/exceptions.py +387 -308
- claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
- claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
- claude_mpm/services/hook_service.py +106 -114
- claude_mpm/services/infrastructure/__init__.py +7 -5
- claude_mpm/services/infrastructure/context_preservation.py +233 -199
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +83 -76
- claude_mpm/services/infrastructure/monitoring.py +547 -404
- claude_mpm/services/mcp_gateway/__init__.py +30 -13
- claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
- claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
- claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
- claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
- claude_mpm/services/mcp_gateway/core/base.py +80 -67
- claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
- claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
- claude_mpm/services/mcp_gateway/main.py +287 -137
- claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
- claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
- claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
- claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
- claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
- claude_mpm/services/memory/__init__.py +2 -2
- claude_mpm/services/memory/builder.py +451 -362
- claude_mpm/services/memory/cache/__init__.py +2 -2
- claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
- claude_mpm/services/memory/cache/simple_cache.py +107 -93
- claude_mpm/services/memory/indexed_memory.py +195 -193
- claude_mpm/services/memory/optimizer.py +267 -234
- claude_mpm/services/memory/router.py +571 -263
- claude_mpm/services/memory_hook_service.py +237 -0
- claude_mpm/services/port_manager.py +223 -0
- claude_mpm/services/project/__init__.py +3 -3
- claude_mpm/services/project/analyzer.py +451 -305
- claude_mpm/services/project/registry.py +262 -240
- claude_mpm/services/recovery_manager.py +287 -231
- claude_mpm/services/response_tracker.py +87 -67
- claude_mpm/services/runner_configuration_service.py +587 -0
- claude_mpm/services/session_management_service.py +304 -0
- claude_mpm/services/socketio/__init__.py +4 -4
- claude_mpm/services/socketio/client_proxy.py +174 -0
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +44 -30
- claude_mpm/services/socketio/handlers/connection.py +145 -65
- claude_mpm/services/socketio/handlers/file.py +123 -108
- claude_mpm/services/socketio/handlers/git.py +607 -373
- claude_mpm/services/socketio/handlers/hook.py +170 -0
- claude_mpm/services/socketio/handlers/memory.py +4 -4
- claude_mpm/services/socketio/handlers/project.py +4 -4
- claude_mpm/services/socketio/handlers/registry.py +53 -38
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +252 -0
- claude_mpm/services/socketio/server/core.py +399 -0
- claude_mpm/services/socketio/server/main.py +323 -0
- claude_mpm/services/socketio_client_manager.py +160 -133
- claude_mpm/services/socketio_server.py +36 -1885
- claude_mpm/services/subprocess_launcher_service.py +316 -0
- claude_mpm/services/system_instructions_service.py +258 -0
- claude_mpm/services/ticket_manager.py +19 -533
- claude_mpm/services/utility_service.py +285 -0
- claude_mpm/services/version_control/__init__.py +18 -21
- claude_mpm/services/version_control/branch_strategy.py +20 -10
- claude_mpm/services/version_control/conflict_resolution.py +37 -13
- claude_mpm/services/version_control/git_operations.py +52 -21
- claude_mpm/services/version_control/semantic_versioning.py +92 -53
- claude_mpm/services/version_control/version_parser.py +145 -125
- claude_mpm/services/version_service.py +270 -0
- claude_mpm/storage/__init__.py +2 -2
- claude_mpm/storage/state_storage.py +177 -181
- claude_mpm/ticket_wrapper.py +2 -2
- claude_mpm/utils/__init__.py +2 -2
- claude_mpm/utils/agent_dependency_loader.py +453 -243
- claude_mpm/utils/config_manager.py +157 -118
- claude_mpm/utils/console.py +1 -1
- claude_mpm/utils/dependency_cache.py +102 -107
- claude_mpm/utils/dependency_manager.py +52 -47
- claude_mpm/utils/dependency_strategies.py +131 -96
- claude_mpm/utils/environment_context.py +110 -102
- claude_mpm/utils/error_handler.py +75 -55
- claude_mpm/utils/file_utils.py +80 -67
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/path_operations.py +100 -93
- claude_mpm/utils/robust_installer.py +172 -164
- claude_mpm/utils/session_logging.py +30 -23
- claude_mpm/utils/subprocess_utils.py +99 -61
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +151 -111
- claude_mpm/validation/frontmatter_validator.py +92 -71
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +27 -1
- claude_mpm-4.0.3.dist-info/RECORD +402 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
- claude_mpm/cli/commands/run_guarded.py +0 -511
- claude_mpm/config/memory_guardian_config.py +0 -325
- claude_mpm/config/memory_guardian_yaml.py +0 -335
- claude_mpm/core/config_paths.py +0 -150
- claude_mpm/core/memory_aware_runner.py +0 -353
- claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
- claude_mpm/models/state_models.py +0 -433
- claude_mpm/services/agent/__init__.py +0 -24
- claude_mpm/services/agent/deployment.py +0 -2548
- claude_mpm/services/agent/management.py +0 -598
- claude_mpm/services/agent/registry.py +0 -813
- claude_mpm/services/agents/registry/agent_registry.py +0 -813
- claude_mpm/services/communication/socketio.py +0 -1935
- claude_mpm/services/communication/websocket.py +0 -479
- claude_mpm/services/framework_claude_md_generator.py +0 -624
- claude_mpm/services/health_monitor.py +0 -893
- claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
- claude_mpm/services/infrastructure/health_monitor.py +0 -775
- claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
- claude_mpm/services/infrastructure/memory_guardian.py +0 -944
- claude_mpm/services/infrastructure/restart_protection.py +0 -642
- claude_mpm/services/infrastructure/state_manager.py +0 -774
- claude_mpm/services/mcp_gateway/manager.py +0 -334
- claude_mpm/services/optimized_hook_service.py +0 -542
- claude_mpm/services/project_analyzer.py +0 -864
- claude_mpm/services/project_registry.py +0 -608
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -510
- claude_mpm/utils/paths.py +0 -395
- claude_mpm/utils/platform_memory.py +0 -524
- claude_mpm-3.9.11.dist-info/RECORD +0 -306
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
| @@ -0,0 +1,152 @@ | |
| 1 | 
            +
            from pathlib import Path
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            """
         | 
| 4 | 
            +
            MCP command parser for claude-mpm CLI.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            WHY: This module contains all arguments specific to MCP Gateway management,
         | 
| 7 | 
            +
            extracted from the monolithic parser.py for better organization.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            DESIGN DECISION: MCP commands handle Model Context Protocol Gateway server
         | 
| 10 | 
            +
            and tool management with complex subcommand structures.
         | 
| 11 | 
            +
            """
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            import argparse
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            from ...constants import CLICommands, MCPCommands
         | 
| 16 | 
            +
            from .base_parser import add_common_arguments
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            def add_mcp_subparser(subparsers) -> argparse.ArgumentParser:
         | 
| 20 | 
            +
                """
         | 
| 21 | 
            +
                Add the MCP subparser with all MCP Gateway management commands.
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                WHY: MCP management has multiple complex subcommands for server management,
         | 
| 24 | 
            +
                tool registration, and configuration that need their own structures.
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                Args:
         | 
| 27 | 
            +
                    subparsers: The subparsers object from the main parser
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                Returns:
         | 
| 30 | 
            +
                    The configured MCP subparser
         | 
| 31 | 
            +
                """
         | 
| 32 | 
            +
                # MCP command with subcommands
         | 
| 33 | 
            +
                mcp_parser = subparsers.add_parser(
         | 
| 34 | 
            +
                    CLICommands.MCP.value, help="Manage MCP Gateway server and tools"
         | 
| 35 | 
            +
                )
         | 
| 36 | 
            +
                add_common_arguments(mcp_parser)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                mcp_subparsers = mcp_parser.add_subparsers(
         | 
| 39 | 
            +
                    dest="mcp_command", help="MCP commands", metavar="SUBCOMMAND"
         | 
| 40 | 
            +
                )
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                # Install MCP Gateway
         | 
| 43 | 
            +
                install_mcp_parser = mcp_subparsers.add_parser(
         | 
| 44 | 
            +
                    MCPCommands.INSTALL.value, help="Install and configure MCP Gateway"
         | 
| 45 | 
            +
                )
         | 
| 46 | 
            +
                install_mcp_parser.add_argument(
         | 
| 47 | 
            +
                    "--force", action="store_true", help="Force overwrite existing configuration"
         | 
| 48 | 
            +
                )
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                # Start MCP server
         | 
| 51 | 
            +
                start_mcp_parser = mcp_subparsers.add_parser(
         | 
| 52 | 
            +
                    MCPCommands.START.value, help="Start the MCP Gateway server"
         | 
| 53 | 
            +
                )
         | 
| 54 | 
            +
                start_mcp_parser.add_argument(
         | 
| 55 | 
            +
                    "--mode",
         | 
| 56 | 
            +
                    choices=["stdio", "standalone"],
         | 
| 57 | 
            +
                    default="stdio",
         | 
| 58 | 
            +
                    help="Server mode: stdio for Claude integration, standalone for testing (default: stdio)",
         | 
| 59 | 
            +
                )
         | 
| 60 | 
            +
                start_mcp_parser.add_argument(
         | 
| 61 | 
            +
                    "--port",
         | 
| 62 | 
            +
                    type=int,
         | 
| 63 | 
            +
                    default=8766,
         | 
| 64 | 
            +
                    help="Port for standalone mode (default: 8766)",
         | 
| 65 | 
            +
                )
         | 
| 66 | 
            +
                start_mcp_parser.add_argument(
         | 
| 67 | 
            +
                    "--config-file", type=Path, help="Path to MCP configuration file"
         | 
| 68 | 
            +
                )
         | 
| 69 | 
            +
                start_mcp_parser.add_argument(
         | 
| 70 | 
            +
                    "--test", action="store_true", help="Run in test mode with debug output"
         | 
| 71 | 
            +
                )
         | 
| 72 | 
            +
                start_mcp_parser.add_argument(
         | 
| 73 | 
            +
                    "--instructions",
         | 
| 74 | 
            +
                    action="store_true",
         | 
| 75 | 
            +
                    help="Show setup instructions instead of running server",
         | 
| 76 | 
            +
                )
         | 
| 77 | 
            +
                start_mcp_parser.add_argument(
         | 
| 78 | 
            +
                    "--daemon", action="store_true", help="Run as daemon (not recommended for MCP)"
         | 
| 79 | 
            +
                )
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                # Stop MCP server
         | 
| 82 | 
            +
                stop_mcp_parser = mcp_subparsers.add_parser(
         | 
| 83 | 
            +
                    MCPCommands.STOP.value, help="Stop the MCP Gateway server"
         | 
| 84 | 
            +
                )
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                # MCP status
         | 
| 87 | 
            +
                status_mcp_parser = mcp_subparsers.add_parser(
         | 
| 88 | 
            +
                    MCPCommands.STATUS.value, help="Check server and tool status"
         | 
| 89 | 
            +
                )
         | 
| 90 | 
            +
                status_mcp_parser.add_argument(
         | 
| 91 | 
            +
                    "--verbose", action="store_true", help="Show detailed status information"
         | 
| 92 | 
            +
                )
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                # List/manage tools
         | 
| 95 | 
            +
                tools_mcp_parser = mcp_subparsers.add_parser(
         | 
| 96 | 
            +
                    MCPCommands.TOOLS.value, help="List and manage registered tools"
         | 
| 97 | 
            +
                )
         | 
| 98 | 
            +
                tools_mcp_parser.add_argument(
         | 
| 99 | 
            +
                    "tool_action",
         | 
| 100 | 
            +
                    nargs="?",
         | 
| 101 | 
            +
                    choices=["list", "enable", "disable"],
         | 
| 102 | 
            +
                    default="list",
         | 
| 103 | 
            +
                    help="Tool action (default: list)",
         | 
| 104 | 
            +
                )
         | 
| 105 | 
            +
                tools_mcp_parser.add_argument(
         | 
| 106 | 
            +
                    "tool_name", nargs="?", help="Tool name for enable/disable actions"
         | 
| 107 | 
            +
                )
         | 
| 108 | 
            +
                tools_mcp_parser.add_argument(
         | 
| 109 | 
            +
                    "--verbose",
         | 
| 110 | 
            +
                    action="store_true",
         | 
| 111 | 
            +
                    help="Show detailed tool information including schemas",
         | 
| 112 | 
            +
                )
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                # Register new tool
         | 
| 115 | 
            +
                register_mcp_parser = mcp_subparsers.add_parser(
         | 
| 116 | 
            +
                    MCPCommands.REGISTER.value, help="Register a new MCP tool"
         | 
| 117 | 
            +
                )
         | 
| 118 | 
            +
                register_mcp_parser.add_argument("name", help="Tool name")
         | 
| 119 | 
            +
                register_mcp_parser.add_argument("description", help="Tool description")
         | 
| 120 | 
            +
                register_mcp_parser.add_argument(
         | 
| 121 | 
            +
                    "--schema-file", type=Path, help="Path to JSON schema file for tool input"
         | 
| 122 | 
            +
                )
         | 
| 123 | 
            +
                register_mcp_parser.add_argument(
         | 
| 124 | 
            +
                    "--adapter", help="Path to custom tool adapter module"
         | 
| 125 | 
            +
                )
         | 
| 126 | 
            +
                register_mcp_parser.add_argument(
         | 
| 127 | 
            +
                    "--save", action="store_true", help="Save tool to configuration"
         | 
| 128 | 
            +
                )
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                # Test tool invocation
         | 
| 131 | 
            +
                test_mcp_parser = mcp_subparsers.add_parser(
         | 
| 132 | 
            +
                    MCPCommands.TEST.value, help="Test MCP tool invocation"
         | 
| 133 | 
            +
                )
         | 
| 134 | 
            +
                test_mcp_parser.add_argument("tool_name", help="Name of tool to test")
         | 
| 135 | 
            +
                test_mcp_parser.add_argument("--args", help="Tool arguments as JSON string")
         | 
| 136 | 
            +
                test_mcp_parser.add_argument(
         | 
| 137 | 
            +
                    "--args-file", type=Path, help="Path to JSON file containing tool arguments"
         | 
| 138 | 
            +
                )
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                # Manage configuration
         | 
| 141 | 
            +
                config_mcp_parser = mcp_subparsers.add_parser(
         | 
| 142 | 
            +
                    MCPCommands.CONFIG.value, help="View and manage MCP configuration"
         | 
| 143 | 
            +
                )
         | 
| 144 | 
            +
                config_mcp_parser.add_argument(
         | 
| 145 | 
            +
                    "config_action",
         | 
| 146 | 
            +
                    nargs="?",
         | 
| 147 | 
            +
                    choices=["view", "edit", "reset"],
         | 
| 148 | 
            +
                    default="view",
         | 
| 149 | 
            +
                    help="Configuration action (default: view)",
         | 
| 150 | 
            +
                )
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                return mcp_parser
         | 
| @@ -0,0 +1,138 @@ | |
| 1 | 
            +
            """
         | 
| 2 | 
            +
            Memory command parser for claude-mpm CLI.
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            WHY: This module contains all arguments specific to memory management commands,
         | 
| 5 | 
            +
            extracted from the monolithic parser.py for better organization.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            DESIGN DECISION: Memory commands handle agent memory files and have their own
         | 
| 8 | 
            +
            subcommand structure that benefits from separation.
         | 
| 9 | 
            +
            """
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            import argparse
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            from ...constants import CLICommands, MemoryCommands
         | 
| 14 | 
            +
            from .base_parser import add_common_arguments
         | 
| 15 | 
            +
             | 
| 16 | 
            +
             | 
| 17 | 
            +
            def add_memory_subparser(subparsers) -> argparse.ArgumentParser:
         | 
| 18 | 
            +
                """
         | 
| 19 | 
            +
                Add the memory subparser with all memory management commands.
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                WHY: Memory management has multiple subcommands for initialization,
         | 
| 22 | 
            +
                listing, and management that need their own argument structures.
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                Args:
         | 
| 25 | 
            +
                    subparsers: The subparsers object from the main parser
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                Returns:
         | 
| 28 | 
            +
                    The configured memory subparser
         | 
| 29 | 
            +
                """
         | 
| 30 | 
            +
                # Memory command with subcommands
         | 
| 31 | 
            +
                memory_parser = subparsers.add_parser(
         | 
| 32 | 
            +
                    CLICommands.MEMORY.value, help="Manage agent memory files"
         | 
| 33 | 
            +
                )
         | 
| 34 | 
            +
                add_common_arguments(memory_parser)
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                memory_subparsers = memory_parser.add_subparsers(
         | 
| 37 | 
            +
                    dest="memory_command", help="Memory commands", metavar="SUBCOMMAND"
         | 
| 38 | 
            +
                )
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                # Init command
         | 
| 41 | 
            +
                init_parser = memory_subparsers.add_parser(
         | 
| 42 | 
            +
                    MemoryCommands.INIT.value,
         | 
| 43 | 
            +
                    help="Initialize project-specific memories via PM agent",
         | 
| 44 | 
            +
                )
         | 
| 45 | 
            +
                init_parser.add_argument(
         | 
| 46 | 
            +
                    "--force",
         | 
| 47 | 
            +
                    action="store_true",
         | 
| 48 | 
            +
                    help="Force initialization even if memories already exist",
         | 
| 49 | 
            +
                )
         | 
| 50 | 
            +
                init_parser.add_argument(
         | 
| 51 | 
            +
                    "--template", help="Memory template to use for initialization"
         | 
| 52 | 
            +
                )
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                # List command
         | 
| 55 | 
            +
                list_parser = memory_subparsers.add_parser(
         | 
| 56 | 
            +
                    MemoryCommands.SHOW.value, help="List available memory files"
         | 
| 57 | 
            +
                )
         | 
| 58 | 
            +
                list_parser.add_argument(
         | 
| 59 | 
            +
                    "--type", choices=["project", "user", "system"], help="Filter by memory type"
         | 
| 60 | 
            +
                )
         | 
| 61 | 
            +
                list_parser.add_argument(
         | 
| 62 | 
            +
                    "--verbose", action="store_true", help="Show detailed memory information"
         | 
| 63 | 
            +
                )
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                # View command
         | 
| 66 | 
            +
                view_parser = memory_subparsers.add_parser(
         | 
| 67 | 
            +
                    MemoryCommands.VIEW.value, help="View memory file contents"
         | 
| 68 | 
            +
                )
         | 
| 69 | 
            +
                view_parser.add_argument("memory_name", help="Name of the memory file to view")
         | 
| 70 | 
            +
                view_parser.add_argument(
         | 
| 71 | 
            +
                    "--raw", action="store_true", help="Show raw memory content without formatting"
         | 
| 72 | 
            +
                )
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                # Edit command
         | 
| 75 | 
            +
                edit_parser = memory_subparsers.add_parser(
         | 
| 76 | 
            +
                    MemoryCommands.ADD.value, help="Edit memory file"
         | 
| 77 | 
            +
                )
         | 
| 78 | 
            +
                edit_parser.add_argument("memory_name", help="Name of the memory file to edit")
         | 
| 79 | 
            +
                edit_parser.add_argument("--editor", help="Editor to use (overrides default)")
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                # Create command
         | 
| 82 | 
            +
                create_parser = memory_subparsers.add_parser(
         | 
| 83 | 
            +
                    MemoryCommands.BUILD.value, help="Create new memory file"
         | 
| 84 | 
            +
                )
         | 
| 85 | 
            +
                create_parser.add_argument("memory_name", help="Name of the memory file to create")
         | 
| 86 | 
            +
                create_parser.add_argument(
         | 
| 87 | 
            +
                    "--type",
         | 
| 88 | 
            +
                    choices=["project", "user"],
         | 
| 89 | 
            +
                    default="project",
         | 
| 90 | 
            +
                    help="Type of memory to create (default: project)",
         | 
| 91 | 
            +
                )
         | 
| 92 | 
            +
                create_parser.add_argument("--template", help="Template to use for the new memory")
         | 
| 93 | 
            +
                create_parser.add_argument("--content", help="Initial content for the memory file")
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                # Delete command
         | 
| 96 | 
            +
                delete_parser = memory_subparsers.add_parser(
         | 
| 97 | 
            +
                    MemoryCommands.CLEAN.value, help="Delete memory file"
         | 
| 98 | 
            +
                )
         | 
| 99 | 
            +
                delete_parser.add_argument("memory_name", help="Name of the memory file to delete")
         | 
| 100 | 
            +
                delete_parser.add_argument(
         | 
| 101 | 
            +
                    "--force", action="store_true", help="Force deletion without confirmation"
         | 
| 102 | 
            +
                )
         | 
| 103 | 
            +
                delete_parser.add_argument(
         | 
| 104 | 
            +
                    "--backup", action="store_true", help="Create backup before deletion"
         | 
| 105 | 
            +
                )
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                # Sync command
         | 
| 108 | 
            +
                sync_parser = memory_subparsers.add_parser(
         | 
| 109 | 
            +
                    MemoryCommands.OPTIMIZE.value, help="Sync memory files across environments"
         | 
| 110 | 
            +
                )
         | 
| 111 | 
            +
                sync_parser.add_argument(
         | 
| 112 | 
            +
                    "--source",
         | 
| 113 | 
            +
                    choices=["project", "user", "system"],
         | 
| 114 | 
            +
                    help="Source memory type to sync from",
         | 
| 115 | 
            +
                )
         | 
| 116 | 
            +
                sync_parser.add_argument(
         | 
| 117 | 
            +
                    "--target", choices=["project", "user"], help="Target memory type to sync to"
         | 
| 118 | 
            +
                )
         | 
| 119 | 
            +
                sync_parser.add_argument(
         | 
| 120 | 
            +
                    "--dry-run",
         | 
| 121 | 
            +
                    action="store_true",
         | 
| 122 | 
            +
                    help="Show what would be synced without actually syncing",
         | 
| 123 | 
            +
                )
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                # Validate command
         | 
| 126 | 
            +
                validate_parser = memory_subparsers.add_parser(
         | 
| 127 | 
            +
                    MemoryCommands.STATUS.value, help="Validate memory file format and content"
         | 
| 128 | 
            +
                )
         | 
| 129 | 
            +
                validate_parser.add_argument(
         | 
| 130 | 
            +
                    "memory_name",
         | 
| 131 | 
            +
                    nargs="?",
         | 
| 132 | 
            +
                    help="Name of specific memory file to validate (default: all)",
         | 
| 133 | 
            +
                )
         | 
| 134 | 
            +
                validate_parser.add_argument(
         | 
| 135 | 
            +
                    "--strict", action="store_true", help="Use strict validation rules"
         | 
| 136 | 
            +
                )
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                return memory_parser
         | 
| @@ -0,0 +1,104 @@ | |
| 1 | 
            +
            """
         | 
| 2 | 
            +
            Monitor command parser for claude-mpm CLI.
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            WHY: This module contains all arguments specific to monitoring server management,
         | 
| 5 | 
            +
            extracted from the monolithic parser.py for better organization.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            DESIGN DECISION: Monitor commands handle Socket.IO server management and
         | 
| 8 | 
            +
            have their own subcommand structure.
         | 
| 9 | 
            +
            """
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            import argparse
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            from ...constants import CLICommands, MonitorCommands
         | 
| 14 | 
            +
            from .base_parser import add_common_arguments
         | 
| 15 | 
            +
             | 
| 16 | 
            +
             | 
| 17 | 
            +
            def add_monitor_subparser(subparsers) -> argparse.ArgumentParser:
         | 
| 18 | 
            +
                """
         | 
| 19 | 
            +
                Add the monitor subparser with all monitoring server commands.
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                WHY: Monitor management has multiple subcommands for starting, stopping,
         | 
| 22 | 
            +
                and managing the Socket.IO monitoring server.
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                Args:
         | 
| 25 | 
            +
                    subparsers: The subparsers object from the main parser
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                Returns:
         | 
| 28 | 
            +
                    The configured monitor subparser
         | 
| 29 | 
            +
                """
         | 
| 30 | 
            +
                # Monitor command with subcommands
         | 
| 31 | 
            +
                monitor_parser = subparsers.add_parser(
         | 
| 32 | 
            +
                    CLICommands.MONITOR.value, help="Manage Socket.IO monitoring server"
         | 
| 33 | 
            +
                )
         | 
| 34 | 
            +
                add_common_arguments(monitor_parser)
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                monitor_subparsers = monitor_parser.add_subparsers(
         | 
| 37 | 
            +
                    dest="monitor_command", help="Monitor commands", metavar="SUBCOMMAND"
         | 
| 38 | 
            +
                )
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                # Start monitor
         | 
| 41 | 
            +
                start_monitor_parser = monitor_subparsers.add_parser(
         | 
| 42 | 
            +
                    MonitorCommands.START.value, help="Start Socket.IO monitoring server"
         | 
| 43 | 
            +
                )
         | 
| 44 | 
            +
                start_monitor_parser.add_argument(
         | 
| 45 | 
            +
                    "--port", type=int, default=8765, help="Port to start server on (default: 8765)"
         | 
| 46 | 
            +
                )
         | 
| 47 | 
            +
                start_monitor_parser.add_argument(
         | 
| 48 | 
            +
                    "--host", default="localhost", help="Host to bind to (default: localhost)"
         | 
| 49 | 
            +
                )
         | 
| 50 | 
            +
                start_monitor_parser.add_argument(
         | 
| 51 | 
            +
                    "--dashboard", action="store_true", help="Enable web dashboard interface"
         | 
| 52 | 
            +
                )
         | 
| 53 | 
            +
                start_monitor_parser.add_argument(
         | 
| 54 | 
            +
                    "--dashboard-port",
         | 
| 55 | 
            +
                    type=int,
         | 
| 56 | 
            +
                    default=8766,
         | 
| 57 | 
            +
                    help="Dashboard port (default: 8766)",
         | 
| 58 | 
            +
                )
         | 
| 59 | 
            +
                start_monitor_parser.add_argument(
         | 
| 60 | 
            +
                    "--background", action="store_true", help="Run server in background"
         | 
| 61 | 
            +
                )
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                # Stop monitor
         | 
| 64 | 
            +
                stop_monitor_parser = monitor_subparsers.add_parser(
         | 
| 65 | 
            +
                    MonitorCommands.STOP.value, help="Stop Socket.IO monitoring server"
         | 
| 66 | 
            +
                )
         | 
| 67 | 
            +
                stop_monitor_parser.add_argument(
         | 
| 68 | 
            +
                    "--port", type=int, default=8765, help="Port of server to stop (default: 8765)"
         | 
| 69 | 
            +
                )
         | 
| 70 | 
            +
                stop_monitor_parser.add_argument(
         | 
| 71 | 
            +
                    "--force", action="store_true", help="Force stop even if clients are connected"
         | 
| 72 | 
            +
                )
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                # Restart monitor
         | 
| 75 | 
            +
                restart_monitor_parser = monitor_subparsers.add_parser(
         | 
| 76 | 
            +
                    MonitorCommands.RESTART.value, help="Restart Socket.IO monitoring server"
         | 
| 77 | 
            +
                )
         | 
| 78 | 
            +
                restart_monitor_parser.add_argument(
         | 
| 79 | 
            +
                    "--port", type=int, help="Port to restart on"
         | 
| 80 | 
            +
                )
         | 
| 81 | 
            +
                restart_monitor_parser.add_argument(
         | 
| 82 | 
            +
                    "--host", default="localhost", help="Host to bind to (default: localhost)"
         | 
| 83 | 
            +
                )
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                # Status monitor
         | 
| 86 | 
            +
                status_monitor_parser = monitor_subparsers.add_parser(
         | 
| 87 | 
            +
                    MonitorCommands.STATUS.value, help="Check monitoring server status"
         | 
| 88 | 
            +
                )
         | 
| 89 | 
            +
                status_monitor_parser.add_argument(
         | 
| 90 | 
            +
                    "--verbose", action="store_true", help="Show detailed status information"
         | 
| 91 | 
            +
                )
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                # Port monitor (start/restart on specific port)
         | 
| 94 | 
            +
                port_monitor_parser = monitor_subparsers.add_parser(
         | 
| 95 | 
            +
                    MonitorCommands.PORT.value, help="Start/restart monitoring server on specific port"
         | 
| 96 | 
            +
                )
         | 
| 97 | 
            +
                port_monitor_parser.add_argument(
         | 
| 98 | 
            +
                    "port", type=int, help="Port number to use"
         | 
| 99 | 
            +
                )
         | 
| 100 | 
            +
                port_monitor_parser.add_argument(
         | 
| 101 | 
            +
                    "--host", default="localhost", help="Host to bind to (default: localhost)"
         | 
| 102 | 
            +
                )
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                return monitor_parser
         | 
| @@ -0,0 +1,147 @@ | |
| 1 | 
            +
            """
         | 
| 2 | 
            +
            Run command parser for claude-mpm CLI.
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            WHY: This module contains all arguments specific to the run command,
         | 
| 5 | 
            +
            extracted from the monolithic parser.py for better organization.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            DESIGN DECISION: Run command arguments are complex enough to warrant
         | 
| 8 | 
            +
            their own module, including hook management, ticket creation, and
         | 
| 9 | 
            +
            interaction modes.
         | 
| 10 | 
            +
            """
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            import argparse
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            from ...constants import CLICommands
         | 
| 15 | 
            +
            from .base_parser import add_common_arguments
         | 
| 16 | 
            +
             | 
| 17 | 
            +
             | 
| 18 | 
            +
            def add_run_arguments(parser: argparse.ArgumentParser) -> None:
         | 
| 19 | 
            +
                """
         | 
| 20 | 
            +
                Add arguments specific to the run command.
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                WHY: The run command has specific arguments for controlling how Claude sessions
         | 
| 23 | 
            +
                are executed, including hook management, ticket creation, and interaction modes.
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                Args:
         | 
| 26 | 
            +
                    parser: The argument parser to add arguments to
         | 
| 27 | 
            +
                """
         | 
| 28 | 
            +
                run_group = parser.add_argument_group("run options")
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                run_group.add_argument(
         | 
| 31 | 
            +
                    "--no-hooks",
         | 
| 32 | 
            +
                    action="store_true",
         | 
| 33 | 
            +
                    help="Disable hook service (runs without hooks)",
         | 
| 34 | 
            +
                )
         | 
| 35 | 
            +
                run_group.add_argument(
         | 
| 36 | 
            +
                    "--no-tickets", action="store_true", help="Disable automatic ticket creation"
         | 
| 37 | 
            +
                )
         | 
| 38 | 
            +
                run_group.add_argument(
         | 
| 39 | 
            +
                    "--intercept-commands",
         | 
| 40 | 
            +
                    action="store_true",
         | 
| 41 | 
            +
                    help="Enable command interception in interactive mode (intercepts /mpm: commands)",
         | 
| 42 | 
            +
                )
         | 
| 43 | 
            +
                run_group.add_argument(
         | 
| 44 | 
            +
                    "--no-native-agents",
         | 
| 45 | 
            +
                    action="store_true",
         | 
| 46 | 
            +
                    help="Disable deployment of Claude Code native agents",
         | 
| 47 | 
            +
                )
         | 
| 48 | 
            +
                run_group.add_argument(
         | 
| 49 | 
            +
                    "--launch-method",
         | 
| 50 | 
            +
                    choices=["exec", "subprocess"],
         | 
| 51 | 
            +
                    default="exec",
         | 
| 52 | 
            +
                    help="Method to launch Claude: exec (replace process) or subprocess (child process)",
         | 
| 53 | 
            +
                )
         | 
| 54 | 
            +
                # Monitor options - consolidated monitoring and management interface
         | 
| 55 | 
            +
                run_group.add_argument(
         | 
| 56 | 
            +
                    "--monitor",
         | 
| 57 | 
            +
                    action="store_true",
         | 
| 58 | 
            +
                    help="Enable monitoring and management interface with WebSocket server and dashboard (default port: 8765)",
         | 
| 59 | 
            +
                )
         | 
| 60 | 
            +
                run_group.add_argument(
         | 
| 61 | 
            +
                    "--websocket-port",
         | 
| 62 | 
            +
                    type=int,
         | 
| 63 | 
            +
                    default=8765,
         | 
| 64 | 
            +
                    help="WebSocket server port (default: 8765)",
         | 
| 65 | 
            +
                )
         | 
| 66 | 
            +
                run_group.add_argument(
         | 
| 67 | 
            +
                    "--force",
         | 
| 68 | 
            +
                    action="store_true",
         | 
| 69 | 
            +
                    help="Force operations even with warnings (e.g., large .claude.json file)",
         | 
| 70 | 
            +
                )
         | 
| 71 | 
            +
                run_group.add_argument(
         | 
| 72 | 
            +
                    "--resume",
         | 
| 73 | 
            +
                    type=str,
         | 
| 74 | 
            +
                    nargs="?",
         | 
| 75 | 
            +
                    const="last",
         | 
| 76 | 
            +
                    help="Resume a session (last session if no ID specified, or specific session ID)",
         | 
| 77 | 
            +
                )
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                # Dependency checking options
         | 
| 80 | 
            +
                dep_group = parser.add_argument_group("dependency options")
         | 
| 81 | 
            +
                dep_group.add_argument(
         | 
| 82 | 
            +
                    "--no-check-dependencies",
         | 
| 83 | 
            +
                    action="store_false",
         | 
| 84 | 
            +
                    dest="check_dependencies",
         | 
| 85 | 
            +
                    help="Skip agent dependency checking at startup",
         | 
| 86 | 
            +
                )
         | 
| 87 | 
            +
                dep_group.add_argument(
         | 
| 88 | 
            +
                    "--force-check-dependencies",
         | 
| 89 | 
            +
                    action="store_true",
         | 
| 90 | 
            +
                    help="Force dependency checking even if cached results exist",
         | 
| 91 | 
            +
                )
         | 
| 92 | 
            +
                dep_group.add_argument(
         | 
| 93 | 
            +
                    "--no-prompt",
         | 
| 94 | 
            +
                    action="store_true",
         | 
| 95 | 
            +
                    help="Never prompt for dependency installation (non-interactive mode)",
         | 
| 96 | 
            +
                )
         | 
| 97 | 
            +
                dep_group.add_argument(
         | 
| 98 | 
            +
                    "--force-prompt",
         | 
| 99 | 
            +
                    action="store_true",
         | 
| 100 | 
            +
                    help="Force interactive prompting even in non-TTY environments (use with caution)",
         | 
| 101 | 
            +
                )
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                # Input/output options
         | 
| 104 | 
            +
                io_group = parser.add_argument_group("input/output options")
         | 
| 105 | 
            +
                io_group.add_argument(
         | 
| 106 | 
            +
                    "-i",
         | 
| 107 | 
            +
                    "--input",
         | 
| 108 | 
            +
                    type=str,
         | 
| 109 | 
            +
                    help="Input text or file path (for non-interactive mode)",
         | 
| 110 | 
            +
                )
         | 
| 111 | 
            +
                io_group.add_argument(
         | 
| 112 | 
            +
                    "--non-interactive",
         | 
| 113 | 
            +
                    action="store_true",
         | 
| 114 | 
            +
                    help="Run in non-interactive mode (read from stdin or --input)",
         | 
| 115 | 
            +
                )
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                # Claude CLI arguments
         | 
| 118 | 
            +
                parser.add_argument(
         | 
| 119 | 
            +
                    "claude_args",
         | 
| 120 | 
            +
                    nargs=argparse.REMAINDER,
         | 
| 121 | 
            +
                    help="Additional arguments to pass to Claude CLI (use -- before Claude args)",
         | 
| 122 | 
            +
                )
         | 
| 123 | 
            +
             | 
| 124 | 
            +
             | 
| 125 | 
            +
            def add_run_subparser(subparsers) -> argparse.ArgumentParser:
         | 
| 126 | 
            +
                """
         | 
| 127 | 
            +
                Add the run subparser to the main parser.
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                WHY: This creates the explicit 'run' command subparser with all
         | 
| 130 | 
            +
                run-specific arguments.
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                Args:
         | 
| 133 | 
            +
                    subparsers: The subparsers object from the main parser
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                Returns:
         | 
| 136 | 
            +
                    The configured run subparser
         | 
| 137 | 
            +
                """
         | 
| 138 | 
            +
                # Run command (explicit)
         | 
| 139 | 
            +
                run_parser = subparsers.add_parser(
         | 
| 140 | 
            +
                    CLICommands.RUN.value,
         | 
| 141 | 
            +
                    help="Run orchestrated Claude session (default)",
         | 
| 142 | 
            +
                    formatter_class=argparse.RawDescriptionHelpFormatter,
         | 
| 143 | 
            +
                )
         | 
| 144 | 
            +
                add_common_arguments(run_parser)
         | 
| 145 | 
            +
                add_run_arguments(run_parser)
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                return run_parser
         |