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,29 @@ | |
| 1 | 
            +
            """
         | 
| 2 | 
            +
            CLI parsers package for claude-mpm.
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This package contains modular parser components that were extracted from the
         | 
| 5 | 
            +
            monolithic parser.py file to improve maintainability and organization.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            WHY: The original parser.py was 1,166 lines with a single 961-line function.
         | 
| 8 | 
            +
            Breaking it into focused modules makes it easier to maintain and test.
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            DESIGN DECISION: Each parser module handles a specific command domain:
         | 
| 11 | 
            +
            - base_parser.py: Common arguments and main parser setup
         | 
| 12 | 
            +
            - run_parser.py: Run command arguments
         | 
| 13 | 
            +
            - agent_parser.py: Agent management commands
         | 
| 14 | 
            +
            - memory_parser.py: Memory management commands
         | 
| 15 | 
            +
            - tickets_parser.py: Ticket management commands
         | 
| 16 | 
            +
            - config_parser.py: Configuration commands
         | 
| 17 | 
            +
            - monitor_parser.py: Monitoring commands
         | 
| 18 | 
            +
            - mcp_parser.py: MCP Gateway commands
         | 
| 19 | 
            +
            """
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            from .base_parser import add_common_arguments, create_parser, preprocess_args
         | 
| 22 | 
            +
            from .run_parser import add_run_arguments
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            __all__ = [
         | 
| 25 | 
            +
                "create_parser",
         | 
| 26 | 
            +
                "add_common_arguments",
         | 
| 27 | 
            +
                "add_run_arguments",
         | 
| 28 | 
            +
                "preprocess_args",
         | 
| 29 | 
            +
            ]
         | 
| @@ -0,0 +1,136 @@ | |
| 1 | 
            +
            from pathlib import Path
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            """
         | 
| 4 | 
            +
            Agents command parser for claude-mpm CLI.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            WHY: This module contains all arguments specific to agent management commands,
         | 
| 7 | 
            +
            extracted from the monolithic parser.py for better organization.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            DESIGN DECISION: Agent commands are complex with multiple subcommands for
         | 
| 10 | 
            +
            deployment, listing, validation, etc., warranting their own module.
         | 
| 11 | 
            +
            """
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            import argparse
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            from ...constants import AgentCommands, CLICommands
         | 
| 16 | 
            +
            from .base_parser import add_common_arguments
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            def add_agents_subparser(subparsers) -> argparse.ArgumentParser:
         | 
| 20 | 
            +
                """
         | 
| 21 | 
            +
                Add the agents subparser with all agent management commands.
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                WHY: Agent management has multiple complex subcommands (list, deploy, validate, etc.)
         | 
| 24 | 
            +
                that need their own argument structures.
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                Args:
         | 
| 27 | 
            +
                    subparsers: The subparsers object from the main parser
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                Returns:
         | 
| 30 | 
            +
                    The configured agents subparser
         | 
| 31 | 
            +
                """
         | 
| 32 | 
            +
                # Agents command with subcommands
         | 
| 33 | 
            +
                agents_parser = subparsers.add_parser(
         | 
| 34 | 
            +
                    CLICommands.AGENTS.value, help="Manage agents and deployment"
         | 
| 35 | 
            +
                )
         | 
| 36 | 
            +
                add_common_arguments(agents_parser)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                agents_subparsers = agents_parser.add_subparsers(
         | 
| 39 | 
            +
                    dest="agents_command", help="Agent commands", metavar="SUBCOMMAND"
         | 
| 40 | 
            +
                )
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                # List agents
         | 
| 43 | 
            +
                list_agents_parser = agents_subparsers.add_parser(
         | 
| 44 | 
            +
                    AgentCommands.LIST.value, help="List available agents"
         | 
| 45 | 
            +
                )
         | 
| 46 | 
            +
                list_agents_parser.add_argument(
         | 
| 47 | 
            +
                    "--system", action="store_true", help="List system agents"
         | 
| 48 | 
            +
                )
         | 
| 49 | 
            +
                list_agents_parser.add_argument(
         | 
| 50 | 
            +
                    "--deployed", action="store_true", help="List deployed agents"
         | 
| 51 | 
            +
                )
         | 
| 52 | 
            +
                list_agents_parser.add_argument(
         | 
| 53 | 
            +
                    "--by-tier",
         | 
| 54 | 
            +
                    action="store_true",
         | 
| 55 | 
            +
                    help="List agents grouped by precedence tier (PROJECT > USER > SYSTEM)",
         | 
| 56 | 
            +
                )
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                # View agent details
         | 
| 59 | 
            +
                view_agent_parser = agents_subparsers.add_parser(
         | 
| 60 | 
            +
                    AgentCommands.VIEW.value,
         | 
| 61 | 
            +
                    help="View detailed information about a specific agent",
         | 
| 62 | 
            +
                )
         | 
| 63 | 
            +
                view_agent_parser.add_argument("agent_name", help="Name of the agent to view")
         | 
| 64 | 
            +
                view_agent_parser.add_argument(
         | 
| 65 | 
            +
                    "--show-dependencies", action="store_true", help="Show agent dependencies"
         | 
| 66 | 
            +
                )
         | 
| 67 | 
            +
                view_agent_parser.add_argument(
         | 
| 68 | 
            +
                    "--show-config", action="store_true", help="Show agent configuration"
         | 
| 69 | 
            +
                )
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                # Deploy agents
         | 
| 72 | 
            +
                deploy_agents_parser = agents_subparsers.add_parser(
         | 
| 73 | 
            +
                    AgentCommands.DEPLOY.value, help="Deploy agents to target directory"
         | 
| 74 | 
            +
                )
         | 
| 75 | 
            +
                deploy_agents_parser.add_argument(
         | 
| 76 | 
            +
                    "--target", type=Path, help="Target directory (default: .claude/)"
         | 
| 77 | 
            +
                )
         | 
| 78 | 
            +
                deploy_agents_parser.add_argument(
         | 
| 79 | 
            +
                    "--agents", nargs="*", help="Specific agents to deploy (default: all)"
         | 
| 80 | 
            +
                )
         | 
| 81 | 
            +
                deploy_agents_parser.add_argument(
         | 
| 82 | 
            +
                    "--force", action="store_true", help="Force deployment even if target exists"
         | 
| 83 | 
            +
                )
         | 
| 84 | 
            +
                deploy_agents_parser.add_argument(
         | 
| 85 | 
            +
                    "--dry-run",
         | 
| 86 | 
            +
                    action="store_true",
         | 
| 87 | 
            +
                    help="Show what would be deployed without actually deploying",
         | 
| 88 | 
            +
                )
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                # Validate agents
         | 
| 91 | 
            +
                validate_agents_parser = agents_subparsers.add_parser(
         | 
| 92 | 
            +
                    AgentCommands.FIX.value, help="Validate agent configurations"
         | 
| 93 | 
            +
                )
         | 
| 94 | 
            +
                validate_agents_parser.add_argument(
         | 
| 95 | 
            +
                    "--agents", nargs="*", help="Specific agents to validate (default: all)"
         | 
| 96 | 
            +
                )
         | 
| 97 | 
            +
                validate_agents_parser.add_argument(
         | 
| 98 | 
            +
                    "--strict", action="store_true", help="Use strict validation rules"
         | 
| 99 | 
            +
                )
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                # Clean agents
         | 
| 102 | 
            +
                clean_agents_parser = agents_subparsers.add_parser(
         | 
| 103 | 
            +
                    AgentCommands.CLEAN.value, help="Remove deployed system agents"
         | 
| 104 | 
            +
                )
         | 
| 105 | 
            +
                clean_agents_parser.add_argument(
         | 
| 106 | 
            +
                    "--target", type=Path, help="Target directory (default: .claude/)"
         | 
| 107 | 
            +
                )
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                # Dependencies management
         | 
| 110 | 
            +
                deps_list_parser = agents_subparsers.add_parser(
         | 
| 111 | 
            +
                    "deps-list", help="List agent dependencies and their status"
         | 
| 112 | 
            +
                )
         | 
| 113 | 
            +
                deps_list_parser.add_argument(
         | 
| 114 | 
            +
                    "--agents", nargs="*", help="Specific agents to check (default: all)"
         | 
| 115 | 
            +
                )
         | 
| 116 | 
            +
                deps_list_parser.add_argument(
         | 
| 117 | 
            +
                    "--missing-only", action="store_true", help="Show only missing dependencies"
         | 
| 118 | 
            +
                )
         | 
| 119 | 
            +
                deps_list_parser.add_argument(
         | 
| 120 | 
            +
                    "--format",
         | 
| 121 | 
            +
                    choices=["text", "pip", "json"],
         | 
| 122 | 
            +
                    default="text",
         | 
| 123 | 
            +
                    help="Output format for dependency list",
         | 
| 124 | 
            +
                )
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                deps_fix_parser = agents_subparsers.add_parser(
         | 
| 127 | 
            +
                    "deps-fix", help="Fix missing agent dependencies with robust retry logic"
         | 
| 128 | 
            +
                )
         | 
| 129 | 
            +
                deps_fix_parser.add_argument(
         | 
| 130 | 
            +
                    "--max-retries",
         | 
| 131 | 
            +
                    type=int,
         | 
| 132 | 
            +
                    default=3,
         | 
| 133 | 
            +
                    help="Maximum retry attempts per package (default: 3)",
         | 
| 134 | 
            +
                )
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                return agents_parser
         | 
| @@ -0,0 +1,331 @@ | |
| 1 | 
            +
            from pathlib import Path
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            """
         | 
| 4 | 
            +
            Base parser module for claude-mpm CLI.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            WHY: This module contains the main parser factory and common argument definitions
         | 
| 7 | 
            +
            that are shared across all commands. Extracted from the monolithic parser.py.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            DESIGN DECISION: Common arguments are defined once and reused to ensure consistency
         | 
| 10 | 
            +
            and reduce duplication across command parsers.
         | 
| 11 | 
            +
            """
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            import argparse
         | 
| 14 | 
            +
            from typing import List, Optional
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            from ...constants import CLICommands, CLIPrefix, LogLevel
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            def add_common_arguments(parser: argparse.ArgumentParser, version: str = None) -> None:
         | 
| 20 | 
            +
                """
         | 
| 21 | 
            +
                Add common arguments that apply to all commands.
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                WHY: These arguments are needed across multiple commands, so we centralize them
         | 
| 24 | 
            +
                to ensure consistency and avoid duplication.
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                Args:
         | 
| 27 | 
            +
                    parser: The argument parser to add arguments to
         | 
| 28 | 
            +
                    version: Version string to display (only needed for main parser)
         | 
| 29 | 
            +
                """
         | 
| 30 | 
            +
                # Version - only add to main parser, not subparsers
         | 
| 31 | 
            +
                if version is not None:
         | 
| 32 | 
            +
                    parser.add_argument(
         | 
| 33 | 
            +
                        "--version", action="version", version=f"%(prog)s {version}"
         | 
| 34 | 
            +
                    )
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                # Logging arguments
         | 
| 37 | 
            +
                logging_group = parser.add_argument_group("logging options")
         | 
| 38 | 
            +
                logging_group.add_argument(
         | 
| 39 | 
            +
                    "-d",
         | 
| 40 | 
            +
                    "--debug",
         | 
| 41 | 
            +
                    action="store_true",
         | 
| 42 | 
            +
                    help="Enable debug logging (deprecated, use --logging DEBUG)",
         | 
| 43 | 
            +
                )
         | 
| 44 | 
            +
                logging_group.add_argument(
         | 
| 45 | 
            +
                    "-v",
         | 
| 46 | 
            +
                    "--verbose",
         | 
| 47 | 
            +
                    action="store_true",
         | 
| 48 | 
            +
                    help="Enable verbose logging (deprecated, use --logging INFO)",
         | 
| 49 | 
            +
                )
         | 
| 50 | 
            +
                logging_group.add_argument(
         | 
| 51 | 
            +
                    "-q",
         | 
| 52 | 
            +
                    "--quiet",
         | 
| 53 | 
            +
                    action="store_true",
         | 
| 54 | 
            +
                    help="Suppress all output except errors (deprecated, use --logging ERROR)",
         | 
| 55 | 
            +
                )
         | 
| 56 | 
            +
                logging_group.add_argument(
         | 
| 57 | 
            +
                    "--logging",
         | 
| 58 | 
            +
                    choices=[level.value for level in LogLevel],
         | 
| 59 | 
            +
                    help="Set logging level (overrides -d, -v, -q flags)",
         | 
| 60 | 
            +
                )
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                # Configuration arguments
         | 
| 63 | 
            +
                config_group = parser.add_argument_group("configuration options")
         | 
| 64 | 
            +
                config_group.add_argument("--config", type=Path, help="Path to configuration file")
         | 
| 65 | 
            +
                config_group.add_argument(
         | 
| 66 | 
            +
                    "--project-dir", type=Path, help="Project directory (overrides auto-detection)"
         | 
| 67 | 
            +
                )
         | 
| 68 | 
            +
             | 
| 69 | 
            +
             | 
| 70 | 
            +
            def create_main_parser(
         | 
| 71 | 
            +
                prog_name: str = "claude-mpm", version: str = "0.0.0"
         | 
| 72 | 
            +
            ) -> argparse.ArgumentParser:
         | 
| 73 | 
            +
                """
         | 
| 74 | 
            +
                Create the main argument parser with basic setup.
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                WHY: This creates the foundation parser that other modules will extend
         | 
| 77 | 
            +
                with their specific subcommands and arguments.
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                Args:
         | 
| 80 | 
            +
                    prog_name: The program name to use
         | 
| 81 | 
            +
                    version: The version string to display
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                Returns:
         | 
| 84 | 
            +
                    Configured ArgumentParser instance ready for subparser addition
         | 
| 85 | 
            +
                """
         | 
| 86 | 
            +
                # Main parser
         | 
| 87 | 
            +
                parser = argparse.ArgumentParser(
         | 
| 88 | 
            +
                    prog=prog_name,
         | 
| 89 | 
            +
                    description=f"Claude Multi-Agent Project Manager v{version} - Orchestrate Claude with agent delegation and ticket tracking",
         | 
| 90 | 
            +
                    epilog="By default, runs an orchestrated Claude session. Use 'claude-mpm' for interactive mode or 'claude-mpm -i \"prompt\"' for non-interactive mode.\n\nTo pass arguments to Claude CLI, use -- separator: claude-mpm run -- --model sonnet --temperature 0.1",
         | 
| 91 | 
            +
                    formatter_class=argparse.RawDescriptionHelpFormatter,
         | 
| 92 | 
            +
                )
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                # Add common arguments to main parser with version
         | 
| 95 | 
            +
                add_common_arguments(parser, version=version)
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                return parser
         | 
| 98 | 
            +
             | 
| 99 | 
            +
             | 
| 100 | 
            +
            def add_top_level_run_arguments(parser: argparse.ArgumentParser) -> None:
         | 
| 101 | 
            +
                """
         | 
| 102 | 
            +
                Add run-specific arguments at top level for backward compatibility.
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                WHY: This maintains backward compatibility - users can run `claude-mpm -i "prompt"`
         | 
| 105 | 
            +
                without specifying the 'run' command.
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                Args:
         | 
| 108 | 
            +
                    parser: The argument parser to add arguments to
         | 
| 109 | 
            +
                """
         | 
| 110 | 
            +
                # Add run-specific arguments at top level for default behavior
         | 
| 111 | 
            +
                # NOTE: We don't add claude_args here because REMAINDER interferes with subcommands
         | 
| 112 | 
            +
                run_group = parser.add_argument_group("run options (when no command specified)")
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                run_group.add_argument(
         | 
| 115 | 
            +
                    "--no-hooks",
         | 
| 116 | 
            +
                    action="store_true",
         | 
| 117 | 
            +
                    help="Disable hook service (runs without hooks)",
         | 
| 118 | 
            +
                )
         | 
| 119 | 
            +
                run_group.add_argument(
         | 
| 120 | 
            +
                    "--no-tickets", action="store_true", help="Disable automatic ticket creation"
         | 
| 121 | 
            +
                )
         | 
| 122 | 
            +
                run_group.add_argument(
         | 
| 123 | 
            +
                    "--intercept-commands",
         | 
| 124 | 
            +
                    action="store_true",
         | 
| 125 | 
            +
                    help="Enable command interception in interactive mode (intercepts /mpm: commands)",
         | 
| 126 | 
            +
                )
         | 
| 127 | 
            +
                run_group.add_argument(
         | 
| 128 | 
            +
                    "--no-native-agents",
         | 
| 129 | 
            +
                    action="store_true",
         | 
| 130 | 
            +
                    help="Disable deployment of Claude Code native agents",
         | 
| 131 | 
            +
                )
         | 
| 132 | 
            +
                run_group.add_argument(
         | 
| 133 | 
            +
                    "--launch-method",
         | 
| 134 | 
            +
                    choices=["exec", "subprocess"],
         | 
| 135 | 
            +
                    default="exec",
         | 
| 136 | 
            +
                    help="Method to launch Claude: exec (replace process) or subprocess (child process)",
         | 
| 137 | 
            +
                )
         | 
| 138 | 
            +
                # Monitor options - consolidated monitoring and management interface
         | 
| 139 | 
            +
                run_group.add_argument(
         | 
| 140 | 
            +
                    "--monitor",
         | 
| 141 | 
            +
                    action="store_true",
         | 
| 142 | 
            +
                    help="Enable monitoring and management interface with WebSocket server and dashboard (default port: 8765)",
         | 
| 143 | 
            +
                )
         | 
| 144 | 
            +
                run_group.add_argument(
         | 
| 145 | 
            +
                    "--websocket-port",
         | 
| 146 | 
            +
                    type=int,
         | 
| 147 | 
            +
                    default=8765,
         | 
| 148 | 
            +
                    help="WebSocket server port (default: 8765)",
         | 
| 149 | 
            +
                )
         | 
| 150 | 
            +
                run_group.add_argument(
         | 
| 151 | 
            +
                    "--resume",
         | 
| 152 | 
            +
                    type=str,
         | 
| 153 | 
            +
                    nargs="?",
         | 
| 154 | 
            +
                    const="last",
         | 
| 155 | 
            +
                    help="Resume a session (last session if no ID specified, or specific session ID)",
         | 
| 156 | 
            +
                )
         | 
| 157 | 
            +
                run_group.add_argument(
         | 
| 158 | 
            +
                    "--force",
         | 
| 159 | 
            +
                    action="store_true",
         | 
| 160 | 
            +
                    help="Force operations even with warnings (e.g., large .claude.json file)",
         | 
| 161 | 
            +
                )
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                # Dependency checking options (for backward compatibility at top level)
         | 
| 164 | 
            +
                dep_group_top = parser.add_argument_group(
         | 
| 165 | 
            +
                    "dependency options (when no command specified)"
         | 
| 166 | 
            +
                )
         | 
| 167 | 
            +
                dep_group_top.add_argument(
         | 
| 168 | 
            +
                    "--no-check-dependencies",
         | 
| 169 | 
            +
                    action="store_false",
         | 
| 170 | 
            +
                    dest="check_dependencies",
         | 
| 171 | 
            +
                    help="Skip agent dependency checking at startup",
         | 
| 172 | 
            +
                )
         | 
| 173 | 
            +
                dep_group_top.add_argument(
         | 
| 174 | 
            +
                    "--force-check-dependencies",
         | 
| 175 | 
            +
                    action="store_true",
         | 
| 176 | 
            +
                    help="Force dependency checking even if cached results exist",
         | 
| 177 | 
            +
                )
         | 
| 178 | 
            +
                dep_group_top.add_argument(
         | 
| 179 | 
            +
                    "--no-prompt",
         | 
| 180 | 
            +
                    action="store_true",
         | 
| 181 | 
            +
                    help="Never prompt for dependency installation (non-interactive mode)",
         | 
| 182 | 
            +
                )
         | 
| 183 | 
            +
                dep_group_top.add_argument(
         | 
| 184 | 
            +
                    "--force-prompt",
         | 
| 185 | 
            +
                    action="store_true",
         | 
| 186 | 
            +
                    help="Force interactive prompting even in non-TTY environments (use with caution)",
         | 
| 187 | 
            +
                )
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                # Input/output options
         | 
| 190 | 
            +
                io_group = parser.add_argument_group(
         | 
| 191 | 
            +
                    "input/output options (when no command specified)"
         | 
| 192 | 
            +
                )
         | 
| 193 | 
            +
                io_group.add_argument(
         | 
| 194 | 
            +
                    "-i",
         | 
| 195 | 
            +
                    "--input",
         | 
| 196 | 
            +
                    type=str,
         | 
| 197 | 
            +
                    help="Input text or file path (for non-interactive mode)",
         | 
| 198 | 
            +
                )
         | 
| 199 | 
            +
                io_group.add_argument(
         | 
| 200 | 
            +
                    "--non-interactive",
         | 
| 201 | 
            +
                    action="store_true",
         | 
| 202 | 
            +
                    help="Run in non-interactive mode (read from stdin or --input)",
         | 
| 203 | 
            +
                )
         | 
| 204 | 
            +
             | 
| 205 | 
            +
             | 
| 206 | 
            +
            def create_parser(
         | 
| 207 | 
            +
                prog_name: str = "claude-mpm", version: str = "0.0.0"
         | 
| 208 | 
            +
            ) -> argparse.ArgumentParser:
         | 
| 209 | 
            +
                """
         | 
| 210 | 
            +
                Create the main argument parser with all subcommands.
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                WHY: This factory function creates a complete parser with all commands and their
         | 
| 213 | 
            +
                arguments. It's the single entry point for creating the CLI parser, ensuring
         | 
| 214 | 
            +
                consistency across the application.
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                DESIGN DECISION: We use subparsers for commands to provide a clean, git-like
         | 
| 217 | 
            +
                interface while maintaining backward compatibility with the original CLI.
         | 
| 218 | 
            +
             | 
| 219 | 
            +
                Args:
         | 
| 220 | 
            +
                    prog_name: The program name to use
         | 
| 221 | 
            +
                    version: The version string to display
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                Returns:
         | 
| 224 | 
            +
                    Configured ArgumentParser instance
         | 
| 225 | 
            +
                """
         | 
| 226 | 
            +
                # Create main parser
         | 
| 227 | 
            +
                parser = create_main_parser(prog_name, version)
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                # Add top-level run arguments for backward compatibility
         | 
| 230 | 
            +
                add_top_level_run_arguments(parser)
         | 
| 231 | 
            +
             | 
| 232 | 
            +
                # Create subparsers for commands
         | 
| 233 | 
            +
                subparsers = parser.add_subparsers(
         | 
| 234 | 
            +
                    dest="command", help="Available commands", metavar="COMMAND"
         | 
| 235 | 
            +
                )
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                # Import and add core subparsers one by one to avoid issues
         | 
| 238 | 
            +
                try:
         | 
| 239 | 
            +
                    from .run_parser import add_run_subparser
         | 
| 240 | 
            +
             | 
| 241 | 
            +
                    add_run_subparser(subparsers)
         | 
| 242 | 
            +
                except ImportError:
         | 
| 243 | 
            +
                    pass
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                try:
         | 
| 246 | 
            +
                    from .tickets_parser import add_tickets_subparser
         | 
| 247 | 
            +
             | 
| 248 | 
            +
                    add_tickets_subparser(subparsers)
         | 
| 249 | 
            +
                except ImportError:
         | 
| 250 | 
            +
                    pass
         | 
| 251 | 
            +
             | 
| 252 | 
            +
                try:
         | 
| 253 | 
            +
                    from .agents_parser import add_agents_subparser
         | 
| 254 | 
            +
             | 
| 255 | 
            +
                    add_agents_subparser(subparsers)
         | 
| 256 | 
            +
                except ImportError:
         | 
| 257 | 
            +
                    pass
         | 
| 258 | 
            +
             | 
| 259 | 
            +
                try:
         | 
| 260 | 
            +
                    from .memory_parser import add_memory_subparser
         | 
| 261 | 
            +
             | 
| 262 | 
            +
                    add_memory_subparser(subparsers)
         | 
| 263 | 
            +
                except ImportError:
         | 
| 264 | 
            +
                    pass
         | 
| 265 | 
            +
             | 
| 266 | 
            +
                try:
         | 
| 267 | 
            +
                    from .config_parser import add_config_subparser
         | 
| 268 | 
            +
             | 
| 269 | 
            +
                    add_config_subparser(subparsers)
         | 
| 270 | 
            +
                except ImportError:
         | 
| 271 | 
            +
                    pass
         | 
| 272 | 
            +
             | 
| 273 | 
            +
                try:
         | 
| 274 | 
            +
                    from .monitor_parser import add_monitor_subparser
         | 
| 275 | 
            +
             | 
| 276 | 
            +
                    add_monitor_subparser(subparsers)
         | 
| 277 | 
            +
                except ImportError:
         | 
| 278 | 
            +
                    pass
         | 
| 279 | 
            +
             | 
| 280 | 
            +
                try:
         | 
| 281 | 
            +
                    from .mcp_parser import add_mcp_subparser
         | 
| 282 | 
            +
             | 
| 283 | 
            +
                    add_mcp_subparser(subparsers)
         | 
| 284 | 
            +
                except ImportError:
         | 
| 285 | 
            +
                    pass
         | 
| 286 | 
            +
             | 
| 287 | 
            +
                # Import and add additional command parsers from commands module
         | 
| 288 | 
            +
                try:
         | 
| 289 | 
            +
                    from ..commands.aggregate import add_aggregate_parser
         | 
| 290 | 
            +
             | 
| 291 | 
            +
                    add_aggregate_parser(subparsers)
         | 
| 292 | 
            +
             | 
| 293 | 
            +
                    from ..commands.cleanup import add_cleanup_parser
         | 
| 294 | 
            +
             | 
| 295 | 
            +
                    add_cleanup_parser(subparsers)
         | 
| 296 | 
            +
                except ImportError:
         | 
| 297 | 
            +
                    # Commands module may not be available during testing or refactoring
         | 
| 298 | 
            +
                    pass
         | 
| 299 | 
            +
             | 
| 300 | 
            +
                return parser
         | 
| 301 | 
            +
             | 
| 302 | 
            +
             | 
| 303 | 
            +
            def preprocess_args(argv: Optional[List[str]] = None) -> List[str]:
         | 
| 304 | 
            +
                """
         | 
| 305 | 
            +
                Preprocess arguments to handle --mpm: prefix commands.
         | 
| 306 | 
            +
             | 
| 307 | 
            +
                WHY: We support both --mpm:command and regular command syntax for flexibility
         | 
| 308 | 
            +
                and backward compatibility. This function normalizes the input.
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                Args:
         | 
| 311 | 
            +
                    argv: List of command line arguments, or None to use sys.argv[1:]
         | 
| 312 | 
            +
             | 
| 313 | 
            +
                Returns:
         | 
| 314 | 
            +
                    Processed list of arguments with prefixes removed
         | 
| 315 | 
            +
                """
         | 
| 316 | 
            +
                import sys
         | 
| 317 | 
            +
             | 
| 318 | 
            +
                if argv is None:
         | 
| 319 | 
            +
                    argv = sys.argv[1:]
         | 
| 320 | 
            +
             | 
| 321 | 
            +
                # Convert --mpm:command to command for argparse compatibility
         | 
| 322 | 
            +
                processed_args = []
         | 
| 323 | 
            +
                for arg in argv:
         | 
| 324 | 
            +
                    if arg.startswith(CLIPrefix.MPM.value):
         | 
| 325 | 
            +
                        # Extract command after prefix
         | 
| 326 | 
            +
                        command = arg[len(CLIPrefix.MPM.value) :]
         | 
| 327 | 
            +
                        processed_args.append(command)
         | 
| 328 | 
            +
                    else:
         | 
| 329 | 
            +
                        processed_args.append(arg)
         | 
| 330 | 
            +
             | 
| 331 | 
            +
                return processed_args
         | 
| @@ -0,0 +1,85 @@ | |
| 1 | 
            +
            from pathlib import Path
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            """
         | 
| 4 | 
            +
            Config command parser for claude-mpm CLI.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            WHY: This module contains all arguments specific to configuration management,
         | 
| 7 | 
            +
            extracted from the monolithic parser.py for better organization.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            DESIGN DECISION: Configuration commands handle validation and management
         | 
| 10 | 
            +
            of claude-mpm settings and warrant their own module.
         | 
| 11 | 
            +
            """
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            import argparse
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            from ...constants import CLICommands, ConfigCommands
         | 
| 16 | 
            +
            from .base_parser import add_common_arguments
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            def add_config_subparser(subparsers) -> argparse.ArgumentParser:
         | 
| 20 | 
            +
                """
         | 
| 21 | 
            +
                Add the config subparser with all configuration management commands.
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                WHY: Configuration management has multiple subcommands for validation,
         | 
| 24 | 
            +
                viewing, and editing that need their own argument structures.
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                Args:
         | 
| 27 | 
            +
                    subparsers: The subparsers object from the main parser
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                Returns:
         | 
| 30 | 
            +
                    The configured config subparser
         | 
| 31 | 
            +
                """
         | 
| 32 | 
            +
                # Config command with subcommands
         | 
| 33 | 
            +
                config_parser = subparsers.add_parser(
         | 
| 34 | 
            +
                    CLICommands.CONFIG.value, help="Validate and manage configuration"
         | 
| 35 | 
            +
                )
         | 
| 36 | 
            +
                add_common_arguments(config_parser)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                config_subparsers = config_parser.add_subparsers(
         | 
| 39 | 
            +
                    dest="config_command", help="Config commands", metavar="SUBCOMMAND"
         | 
| 40 | 
            +
                )
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                # Validate config
         | 
| 43 | 
            +
                validate_config_parser = config_subparsers.add_parser(
         | 
| 44 | 
            +
                    ConfigCommands.VALIDATE.value, help="Validate configuration files"
         | 
| 45 | 
            +
                )
         | 
| 46 | 
            +
                validate_config_parser.add_argument(
         | 
| 47 | 
            +
                    "--config-file",
         | 
| 48 | 
            +
                    type=Path,
         | 
| 49 | 
            +
                    help="Specific config file to validate (default: all)",
         | 
| 50 | 
            +
                )
         | 
| 51 | 
            +
                validate_config_parser.add_argument(
         | 
| 52 | 
            +
                    "--strict", action="store_true", help="Use strict validation rules"
         | 
| 53 | 
            +
                )
         | 
| 54 | 
            +
                validate_config_parser.add_argument(
         | 
| 55 | 
            +
                    "--fix",
         | 
| 56 | 
            +
                    action="store_true",
         | 
| 57 | 
            +
                    help="Attempt to fix validation errors automatically",
         | 
| 58 | 
            +
                )
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                # View config
         | 
| 61 | 
            +
                view_config_parser = config_subparsers.add_parser(
         | 
| 62 | 
            +
                    ConfigCommands.VIEW.value, help="View current configuration"
         | 
| 63 | 
            +
                )
         | 
| 64 | 
            +
                view_config_parser.add_argument(
         | 
| 65 | 
            +
                    "--section", help="Specific configuration section to view"
         | 
| 66 | 
            +
                )
         | 
| 67 | 
            +
                view_config_parser.add_argument(
         | 
| 68 | 
            +
                    "--format",
         | 
| 69 | 
            +
                    choices=["yaml", "json", "table"],
         | 
| 70 | 
            +
                    default="yaml",
         | 
| 71 | 
            +
                    help="Output format (default: yaml)",
         | 
| 72 | 
            +
                )
         | 
| 73 | 
            +
                view_config_parser.add_argument(
         | 
| 74 | 
            +
                    "--show-defaults", action="store_true", help="Include default values in output"
         | 
| 75 | 
            +
                )
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                # Status config
         | 
| 78 | 
            +
                status_config_parser = config_subparsers.add_parser(
         | 
| 79 | 
            +
                    ConfigCommands.STATUS.value, help="Show configuration status"
         | 
| 80 | 
            +
                )
         | 
| 81 | 
            +
                status_config_parser.add_argument(
         | 
| 82 | 
            +
                    "--verbose", action="store_true", help="Show detailed status information"
         | 
| 83 | 
            +
                )
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                return config_parser
         |