claude-mpm 4.1.0__py3-none-any.whl → 4.1.2__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.
Files changed (358) hide show
  1. claude_mpm/BUILD_NUMBER +1 -1
  2. claude_mpm/VERSION +1 -1
  3. claude_mpm/__main__.py +1 -1
  4. claude_mpm/agents/BASE_PM.md +74 -46
  5. claude_mpm/agents/INSTRUCTIONS.md +11 -153
  6. claude_mpm/agents/WORKFLOW.md +61 -321
  7. claude_mpm/agents/__init__.py +11 -11
  8. claude_mpm/agents/agent_loader.py +23 -20
  9. claude_mpm/agents/agent_loader_integration.py +1 -1
  10. claude_mpm/agents/agents_metadata.py +27 -0
  11. claude_mpm/agents/async_agent_loader.py +5 -8
  12. claude_mpm/agents/base_agent_loader.py +36 -25
  13. claude_mpm/agents/frontmatter_validator.py +6 -6
  14. claude_mpm/agents/schema/agent_schema.json +1 -1
  15. claude_mpm/agents/system_agent_config.py +9 -9
  16. claude_mpm/agents/templates/api_qa.json +47 -2
  17. claude_mpm/agents/templates/imagemagick.json +256 -0
  18. claude_mpm/agents/templates/qa.json +41 -2
  19. claude_mpm/agents/templates/ticketing.json +5 -5
  20. claude_mpm/agents/templates/web_qa.json +133 -58
  21. claude_mpm/agents/templates/web_ui.json +3 -3
  22. claude_mpm/cli/__init__.py +51 -46
  23. claude_mpm/cli/__main__.py +1 -1
  24. claude_mpm/cli/commands/__init__.py +10 -12
  25. claude_mpm/cli/commands/agent_manager.py +186 -181
  26. claude_mpm/cli/commands/agents.py +271 -268
  27. claude_mpm/cli/commands/aggregate.py +30 -29
  28. claude_mpm/cli/commands/cleanup.py +50 -44
  29. claude_mpm/cli/commands/cleanup_orphaned_agents.py +25 -25
  30. claude_mpm/cli/commands/config.py +162 -127
  31. claude_mpm/cli/commands/doctor.py +52 -62
  32. claude_mpm/cli/commands/info.py +37 -25
  33. claude_mpm/cli/commands/mcp.py +3 -7
  34. claude_mpm/cli/commands/mcp_command_router.py +14 -18
  35. claude_mpm/cli/commands/mcp_install_commands.py +28 -23
  36. claude_mpm/cli/commands/mcp_pipx_config.py +58 -49
  37. claude_mpm/cli/commands/mcp_server_commands.py +23 -17
  38. claude_mpm/cli/commands/memory.py +192 -141
  39. claude_mpm/cli/commands/monitor.py +117 -88
  40. claude_mpm/cli/commands/run.py +120 -84
  41. claude_mpm/cli/commands/run_config_checker.py +4 -5
  42. claude_mpm/cli/commands/socketio_monitor.py +17 -19
  43. claude_mpm/cli/commands/tickets.py +92 -92
  44. claude_mpm/cli/parser.py +1 -5
  45. claude_mpm/cli/parsers/__init__.py +1 -1
  46. claude_mpm/cli/parsers/agent_manager_parser.py +50 -98
  47. claude_mpm/cli/parsers/agents_parser.py +2 -3
  48. claude_mpm/cli/parsers/base_parser.py +7 -5
  49. claude_mpm/cli/parsers/mcp_parser.py +4 -2
  50. claude_mpm/cli/parsers/monitor_parser.py +26 -18
  51. claude_mpm/cli/shared/__init__.py +10 -10
  52. claude_mpm/cli/shared/argument_patterns.py +57 -71
  53. claude_mpm/cli/shared/base_command.py +61 -53
  54. claude_mpm/cli/shared/error_handling.py +62 -58
  55. claude_mpm/cli/shared/output_formatters.py +78 -77
  56. claude_mpm/cli/startup_logging.py +204 -172
  57. claude_mpm/cli/utils.py +10 -11
  58. claude_mpm/cli_module/__init__.py +1 -1
  59. claude_mpm/cli_module/args.py +1 -1
  60. claude_mpm/cli_module/migration_example.py +5 -5
  61. claude_mpm/config/__init__.py +9 -9
  62. claude_mpm/config/agent_config.py +15 -14
  63. claude_mpm/config/experimental_features.py +4 -4
  64. claude_mpm/config/paths.py +0 -1
  65. claude_mpm/config/socketio_config.py +5 -6
  66. claude_mpm/constants.py +1 -2
  67. claude_mpm/core/__init__.py +8 -8
  68. claude_mpm/core/agent_name_normalizer.py +1 -1
  69. claude_mpm/core/agent_registry.py +20 -23
  70. claude_mpm/core/agent_session_manager.py +3 -3
  71. claude_mpm/core/base_service.py +7 -15
  72. claude_mpm/core/cache.py +4 -6
  73. claude_mpm/core/claude_runner.py +85 -113
  74. claude_mpm/core/config.py +43 -28
  75. claude_mpm/core/config_aliases.py +0 -9
  76. claude_mpm/core/config_constants.py +52 -30
  77. claude_mpm/core/constants.py +0 -1
  78. claude_mpm/core/container.py +18 -27
  79. claude_mpm/core/exceptions.py +2 -2
  80. claude_mpm/core/factories.py +10 -12
  81. claude_mpm/core/framework_loader.py +581 -280
  82. claude_mpm/core/hook_manager.py +26 -22
  83. claude_mpm/core/hook_performance_config.py +58 -47
  84. claude_mpm/core/injectable_service.py +1 -1
  85. claude_mpm/core/interactive_session.py +61 -152
  86. claude_mpm/core/interfaces.py +1 -100
  87. claude_mpm/core/lazy.py +5 -5
  88. claude_mpm/core/log_manager.py +587 -0
  89. claude_mpm/core/logger.py +125 -8
  90. claude_mpm/core/logging_config.py +15 -15
  91. claude_mpm/core/minimal_framework_loader.py +5 -8
  92. claude_mpm/core/oneshot_session.py +15 -33
  93. claude_mpm/core/optimized_agent_loader.py +4 -6
  94. claude_mpm/core/optimized_startup.py +2 -1
  95. claude_mpm/core/output_style_manager.py +147 -106
  96. claude_mpm/core/pm_hook_interceptor.py +0 -1
  97. claude_mpm/core/service_registry.py +11 -8
  98. claude_mpm/core/session_manager.py +1 -2
  99. claude_mpm/core/shared/__init__.py +1 -1
  100. claude_mpm/core/shared/config_loader.py +101 -97
  101. claude_mpm/core/shared/path_resolver.py +72 -68
  102. claude_mpm/core/shared/singleton_manager.py +56 -50
  103. claude_mpm/core/socketio_pool.py +26 -6
  104. claude_mpm/core/tool_access_control.py +4 -5
  105. claude_mpm/core/typing_utils.py +50 -59
  106. claude_mpm/core/unified_agent_registry.py +14 -19
  107. claude_mpm/core/unified_config.py +4 -6
  108. claude_mpm/core/unified_paths.py +197 -109
  109. claude_mpm/dashboard/open_dashboard.py +2 -4
  110. claude_mpm/experimental/cli_enhancements.py +51 -36
  111. claude_mpm/generators/agent_profile_generator.py +2 -4
  112. claude_mpm/hooks/base_hook.py +1 -2
  113. claude_mpm/hooks/claude_hooks/connection_pool.py +72 -26
  114. claude_mpm/hooks/claude_hooks/event_handlers.py +93 -38
  115. claude_mpm/hooks/claude_hooks/hook_handler.py +130 -76
  116. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +104 -77
  117. claude_mpm/hooks/claude_hooks/memory_integration.py +2 -4
  118. claude_mpm/hooks/claude_hooks/response_tracking.py +15 -11
  119. claude_mpm/hooks/claude_hooks/tool_analysis.py +12 -18
  120. claude_mpm/hooks/memory_integration_hook.py +5 -5
  121. claude_mpm/hooks/tool_call_interceptor.py +1 -1
  122. claude_mpm/hooks/validation_hooks.py +4 -4
  123. claude_mpm/init.py +4 -9
  124. claude_mpm/models/__init__.py +2 -2
  125. claude_mpm/models/agent_session.py +11 -14
  126. claude_mpm/scripts/mcp_server.py +20 -11
  127. claude_mpm/scripts/mcp_wrapper.py +5 -5
  128. claude_mpm/scripts/mpm_doctor.py +321 -0
  129. claude_mpm/scripts/socketio_daemon.py +28 -25
  130. claude_mpm/scripts/socketio_daemon_hardened.py +298 -258
  131. claude_mpm/scripts/socketio_server_manager.py +116 -95
  132. claude_mpm/services/__init__.py +49 -49
  133. claude_mpm/services/agent_capabilities_service.py +12 -18
  134. claude_mpm/services/agents/__init__.py +22 -22
  135. claude_mpm/services/agents/agent_builder.py +140 -119
  136. claude_mpm/services/agents/deployment/__init__.py +3 -3
  137. claude_mpm/services/agents/deployment/agent_config_provider.py +9 -9
  138. claude_mpm/services/agents/deployment/agent_configuration_manager.py +19 -20
  139. claude_mpm/services/agents/deployment/agent_definition_factory.py +1 -5
  140. claude_mpm/services/agents/deployment/agent_deployment.py +136 -106
  141. claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -8
  142. claude_mpm/services/agents/deployment/agent_environment_manager.py +2 -7
  143. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +6 -10
  144. claude_mpm/services/agents/deployment/agent_format_converter.py +11 -15
  145. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +2 -3
  146. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -5
  147. claude_mpm/services/agents/deployment/agent_metrics_collector.py +13 -19
  148. claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -1
  149. claude_mpm/services/agents/deployment/agent_template_builder.py +26 -35
  150. claude_mpm/services/agents/deployment/agent_validator.py +0 -1
  151. claude_mpm/services/agents/deployment/agent_version_manager.py +7 -9
  152. claude_mpm/services/agents/deployment/agent_versioning.py +3 -3
  153. claude_mpm/services/agents/deployment/agents_directory_resolver.py +6 -7
  154. claude_mpm/services/agents/deployment/async_agent_deployment.py +51 -38
  155. claude_mpm/services/agents/deployment/config/__init__.py +1 -1
  156. claude_mpm/services/agents/deployment/config/deployment_config.py +7 -8
  157. claude_mpm/services/agents/deployment/deployment_type_detector.py +1 -1
  158. claude_mpm/services/agents/deployment/deployment_wrapper.py +18 -18
  159. claude_mpm/services/agents/deployment/facade/__init__.py +1 -1
  160. claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -3
  161. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -4
  162. claude_mpm/services/agents/deployment/interface_adapter.py +5 -7
  163. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +345 -276
  164. claude_mpm/services/agents/deployment/pipeline/__init__.py +2 -2
  165. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +1 -1
  166. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +6 -4
  167. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +3 -3
  168. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +2 -2
  169. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +14 -13
  170. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -1
  171. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +1 -1
  172. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +8 -9
  173. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +1 -1
  174. claude_mpm/services/agents/deployment/processors/__init__.py +1 -1
  175. claude_mpm/services/agents/deployment/processors/agent_processor.py +20 -16
  176. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +5 -12
  177. claude_mpm/services/agents/deployment/results/__init__.py +1 -1
  178. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +1 -1
  179. claude_mpm/services/agents/deployment/strategies/__init__.py +2 -2
  180. claude_mpm/services/agents/deployment/strategies/base_strategy.py +1 -7
  181. claude_mpm/services/agents/deployment/strategies/project_strategy.py +1 -4
  182. claude_mpm/services/agents/deployment/strategies/system_strategy.py +2 -3
  183. claude_mpm/services/agents/deployment/strategies/user_strategy.py +3 -7
  184. claude_mpm/services/agents/deployment/validation/__init__.py +1 -1
  185. claude_mpm/services/agents/deployment/validation/agent_validator.py +1 -1
  186. claude_mpm/services/agents/deployment/validation/template_validator.py +2 -2
  187. claude_mpm/services/agents/deployment/validation/validation_result.py +2 -6
  188. claude_mpm/services/agents/loading/__init__.py +1 -1
  189. claude_mpm/services/agents/loading/agent_profile_loader.py +6 -12
  190. claude_mpm/services/agents/loading/base_agent_manager.py +5 -5
  191. claude_mpm/services/agents/loading/framework_agent_loader.py +2 -4
  192. claude_mpm/services/agents/management/__init__.py +1 -1
  193. claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -3
  194. claude_mpm/services/agents/management/agent_management_service.py +5 -9
  195. claude_mpm/services/agents/memory/__init__.py +4 -4
  196. claude_mpm/services/agents/memory/agent_memory_manager.py +280 -160
  197. claude_mpm/services/agents/memory/agent_persistence_service.py +0 -2
  198. claude_mpm/services/agents/memory/content_manager.py +44 -38
  199. claude_mpm/services/agents/memory/template_generator.py +4 -6
  200. claude_mpm/services/agents/registry/__init__.py +10 -6
  201. claude_mpm/services/agents/registry/deployed_agent_discovery.py +30 -27
  202. claude_mpm/services/agents/registry/modification_tracker.py +3 -6
  203. claude_mpm/services/async_session_logger.py +1 -2
  204. claude_mpm/services/claude_session_logger.py +1 -2
  205. claude_mpm/services/command_deployment_service.py +173 -0
  206. claude_mpm/services/command_handler_service.py +20 -22
  207. claude_mpm/services/core/__init__.py +25 -25
  208. claude_mpm/services/core/base.py +0 -5
  209. claude_mpm/services/core/interfaces/__init__.py +32 -32
  210. claude_mpm/services/core/interfaces/agent.py +0 -21
  211. claude_mpm/services/core/interfaces/communication.py +0 -27
  212. claude_mpm/services/core/interfaces/infrastructure.py +0 -56
  213. claude_mpm/services/core/interfaces/service.py +0 -29
  214. claude_mpm/services/diagnostics/__init__.py +1 -1
  215. claude_mpm/services/diagnostics/checks/__init__.py +6 -6
  216. claude_mpm/services/diagnostics/checks/agent_check.py +89 -80
  217. claude_mpm/services/diagnostics/checks/base_check.py +12 -16
  218. claude_mpm/services/diagnostics/checks/claude_desktop_check.py +84 -81
  219. claude_mpm/services/diagnostics/checks/common_issues_check.py +99 -91
  220. claude_mpm/services/diagnostics/checks/configuration_check.py +82 -77
  221. claude_mpm/services/diagnostics/checks/filesystem_check.py +67 -68
  222. claude_mpm/services/diagnostics/checks/installation_check.py +254 -94
  223. claude_mpm/services/diagnostics/checks/mcp_check.py +90 -88
  224. claude_mpm/services/diagnostics/checks/monitor_check.py +75 -76
  225. claude_mpm/services/diagnostics/checks/startup_log_check.py +67 -73
  226. claude_mpm/services/diagnostics/diagnostic_runner.py +67 -59
  227. claude_mpm/services/diagnostics/doctor_reporter.py +107 -70
  228. claude_mpm/services/diagnostics/models.py +21 -19
  229. claude_mpm/services/event_aggregator.py +10 -17
  230. claude_mpm/services/event_bus/__init__.py +1 -1
  231. claude_mpm/services/event_bus/config.py +54 -35
  232. claude_mpm/services/event_bus/event_bus.py +76 -71
  233. claude_mpm/services/event_bus/relay.py +74 -64
  234. claude_mpm/services/events/__init__.py +11 -11
  235. claude_mpm/services/events/consumers/__init__.py +3 -3
  236. claude_mpm/services/events/consumers/dead_letter.py +71 -63
  237. claude_mpm/services/events/consumers/logging.py +39 -37
  238. claude_mpm/services/events/consumers/metrics.py +56 -57
  239. claude_mpm/services/events/consumers/socketio.py +82 -81
  240. claude_mpm/services/events/core.py +110 -99
  241. claude_mpm/services/events/interfaces.py +56 -72
  242. claude_mpm/services/events/producers/__init__.py +1 -1
  243. claude_mpm/services/events/producers/hook.py +38 -38
  244. claude_mpm/services/events/producers/system.py +46 -44
  245. claude_mpm/services/exceptions.py +81 -80
  246. claude_mpm/services/framework_claude_md_generator/__init__.py +2 -4
  247. claude_mpm/services/framework_claude_md_generator/content_assembler.py +3 -5
  248. claude_mpm/services/framework_claude_md_generator/content_validator.py +1 -1
  249. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +4 -4
  250. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -1
  251. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -2
  252. claude_mpm/services/framework_claude_md_generator/version_manager.py +4 -5
  253. claude_mpm/services/hook_service.py +6 -9
  254. claude_mpm/services/infrastructure/__init__.py +1 -1
  255. claude_mpm/services/infrastructure/context_preservation.py +8 -12
  256. claude_mpm/services/infrastructure/monitoring.py +21 -23
  257. claude_mpm/services/mcp_gateway/__init__.py +37 -37
  258. claude_mpm/services/mcp_gateway/auto_configure.py +95 -103
  259. claude_mpm/services/mcp_gateway/config/__init__.py +1 -1
  260. claude_mpm/services/mcp_gateway/config/config_loader.py +23 -25
  261. claude_mpm/services/mcp_gateway/config/config_schema.py +5 -5
  262. claude_mpm/services/mcp_gateway/config/configuration.py +9 -6
  263. claude_mpm/services/mcp_gateway/core/__init__.py +10 -10
  264. claude_mpm/services/mcp_gateway/core/base.py +0 -3
  265. claude_mpm/services/mcp_gateway/core/interfaces.py +1 -38
  266. claude_mpm/services/mcp_gateway/core/process_pool.py +99 -93
  267. claude_mpm/services/mcp_gateway/core/singleton_manager.py +65 -62
  268. claude_mpm/services/mcp_gateway/core/startup_verification.py +75 -74
  269. claude_mpm/services/mcp_gateway/main.py +2 -1
  270. claude_mpm/services/mcp_gateway/registry/service_registry.py +5 -8
  271. claude_mpm/services/mcp_gateway/registry/tool_registry.py +1 -1
  272. claude_mpm/services/mcp_gateway/server/__init__.py +1 -1
  273. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +12 -19
  274. claude_mpm/services/mcp_gateway/server/stdio_handler.py +4 -3
  275. claude_mpm/services/mcp_gateway/server/stdio_server.py +79 -71
  276. claude_mpm/services/mcp_gateway/tools/__init__.py +2 -2
  277. claude_mpm/services/mcp_gateway/tools/base_adapter.py +5 -6
  278. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +13 -22
  279. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +79 -78
  280. claude_mpm/services/mcp_gateway/tools/hello_world.py +12 -14
  281. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +42 -49
  282. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +51 -55
  283. claude_mpm/services/memory/__init__.py +3 -3
  284. claude_mpm/services/memory/builder.py +3 -6
  285. claude_mpm/services/memory/cache/__init__.py +1 -1
  286. claude_mpm/services/memory/cache/shared_prompt_cache.py +3 -5
  287. claude_mpm/services/memory/cache/simple_cache.py +1 -1
  288. claude_mpm/services/memory/indexed_memory.py +5 -7
  289. claude_mpm/services/memory/optimizer.py +7 -10
  290. claude_mpm/services/memory/router.py +8 -9
  291. claude_mpm/services/memory_hook_service.py +48 -34
  292. claude_mpm/services/monitor_build_service.py +77 -73
  293. claude_mpm/services/port_manager.py +130 -108
  294. claude_mpm/services/project/analyzer.py +12 -10
  295. claude_mpm/services/project/registry.py +11 -11
  296. claude_mpm/services/recovery_manager.py +10 -19
  297. claude_mpm/services/response_tracker.py +0 -1
  298. claude_mpm/services/runner_configuration_service.py +19 -20
  299. claude_mpm/services/session_management_service.py +7 -11
  300. claude_mpm/services/shared/__init__.py +1 -1
  301. claude_mpm/services/shared/async_service_base.py +58 -50
  302. claude_mpm/services/shared/config_service_base.py +73 -67
  303. claude_mpm/services/shared/lifecycle_service_base.py +82 -78
  304. claude_mpm/services/shared/manager_base.py +94 -82
  305. claude_mpm/services/shared/service_factory.py +96 -98
  306. claude_mpm/services/socketio/__init__.py +3 -3
  307. claude_mpm/services/socketio/client_proxy.py +5 -5
  308. claude_mpm/services/socketio/event_normalizer.py +199 -181
  309. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  310. claude_mpm/services/socketio/handlers/base.py +5 -4
  311. claude_mpm/services/socketio/handlers/connection.py +163 -136
  312. claude_mpm/services/socketio/handlers/file.py +13 -14
  313. claude_mpm/services/socketio/handlers/git.py +12 -7
  314. claude_mpm/services/socketio/handlers/hook.py +49 -44
  315. claude_mpm/services/socketio/handlers/memory.py +0 -1
  316. claude_mpm/services/socketio/handlers/project.py +0 -1
  317. claude_mpm/services/socketio/handlers/registry.py +37 -19
  318. claude_mpm/services/socketio/migration_utils.py +98 -84
  319. claude_mpm/services/socketio/server/__init__.py +1 -1
  320. claude_mpm/services/socketio/server/broadcaster.py +81 -87
  321. claude_mpm/services/socketio/server/core.py +65 -54
  322. claude_mpm/services/socketio/server/eventbus_integration.py +95 -56
  323. claude_mpm/services/socketio/server/main.py +64 -38
  324. claude_mpm/services/socketio_client_manager.py +10 -12
  325. claude_mpm/services/subprocess_launcher_service.py +4 -7
  326. claude_mpm/services/system_instructions_service.py +13 -14
  327. claude_mpm/services/ticket_manager.py +2 -2
  328. claude_mpm/services/utility_service.py +5 -13
  329. claude_mpm/services/version_control/__init__.py +16 -16
  330. claude_mpm/services/version_control/branch_strategy.py +5 -8
  331. claude_mpm/services/version_control/conflict_resolution.py +9 -23
  332. claude_mpm/services/version_control/git_operations.py +5 -7
  333. claude_mpm/services/version_control/semantic_versioning.py +16 -17
  334. claude_mpm/services/version_control/version_parser.py +13 -18
  335. claude_mpm/services/version_service.py +10 -11
  336. claude_mpm/storage/__init__.py +1 -1
  337. claude_mpm/storage/state_storage.py +22 -28
  338. claude_mpm/utils/__init__.py +6 -6
  339. claude_mpm/utils/agent_dependency_loader.py +47 -33
  340. claude_mpm/utils/config_manager.py +11 -14
  341. claude_mpm/utils/dependency_cache.py +1 -1
  342. claude_mpm/utils/dependency_manager.py +13 -17
  343. claude_mpm/utils/dependency_strategies.py +8 -10
  344. claude_mpm/utils/environment_context.py +3 -9
  345. claude_mpm/utils/error_handler.py +3 -13
  346. claude_mpm/utils/file_utils.py +1 -1
  347. claude_mpm/utils/path_operations.py +8 -12
  348. claude_mpm/utils/robust_installer.py +110 -33
  349. claude_mpm/utils/subprocess_utils.py +5 -6
  350. claude_mpm/validation/agent_validator.py +3 -6
  351. claude_mpm/validation/frontmatter_validator.py +1 -1
  352. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/METADATA +1 -1
  353. claude_mpm-4.1.2.dist-info/RECORD +498 -0
  354. claude_mpm-4.1.0.dist-info/RECORD +0 -494
  355. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/WHEEL +0 -0
  356. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/entry_points.txt +0 -0
  357. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/licenses/LICENSE +0 -0
  358. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,7 @@ import argparse
11
11
  def add_agent_manager_subparser(subparsers: argparse._SubParsersAction) -> None:
12
12
  """
13
13
  Add the agent-manager subcommand to the parser.
14
-
14
+
15
15
  Args:
16
16
  subparsers: The subparsers object to add to
17
17
  """
@@ -32,216 +32,168 @@ Examples:
32
32
  claude-mpm agent-manager show --id engineer # Show agent details
33
33
  claude-mpm agent-manager test --id my-agent # Test agent configuration
34
34
  claude-mpm agent-manager templates # List available templates
35
- """
35
+ """,
36
36
  )
37
-
37
+
38
38
  # Create subcommands for agent-manager
39
39
  agent_subparsers = agent_manager_parser.add_subparsers(
40
40
  dest="agent_manager_command",
41
41
  help="Agent management operations",
42
- metavar="OPERATION"
42
+ metavar="OPERATION",
43
43
  )
44
-
44
+
45
45
  # List command
46
46
  list_parser = agent_subparsers.add_parser(
47
- "list",
48
- help="List all agents across tiers with hierarchy"
47
+ "list", help="List all agents across tiers with hierarchy"
49
48
  )
50
49
  list_parser.add_argument(
51
50
  "--format",
52
51
  choices=["text", "json", "yaml"],
53
52
  default="text",
54
- help="Output format (default: text)"
53
+ help="Output format (default: text)",
55
54
  )
56
-
55
+
57
56
  # Create command
58
57
  create_parser = agent_subparsers.add_parser(
59
- "create",
60
- help="Create a new agent (interactive or with arguments)"
61
- )
62
- create_parser.add_argument(
63
- "--id",
64
- dest="agent_id",
65
- help="Agent ID (lowercase, hyphens only)"
58
+ "create", help="Create a new agent (interactive or with arguments)"
66
59
  )
67
60
  create_parser.add_argument(
68
- "--name",
69
- help="Display name for the agent"
70
- )
71
- create_parser.add_argument(
72
- "--description",
73
- help="Agent purpose and capabilities"
61
+ "--id", dest="agent_id", help="Agent ID (lowercase, hyphens only)"
74
62
  )
63
+ create_parser.add_argument("--name", help="Display name for the agent")
64
+ create_parser.add_argument("--description", help="Agent purpose and capabilities")
75
65
  create_parser.add_argument(
76
66
  "--model",
77
67
  choices=["sonnet", "opus", "haiku"],
78
68
  default="sonnet",
79
- help="LLM model to use (default: sonnet)"
69
+ help="LLM model to use (default: sonnet)",
80
70
  )
81
71
  create_parser.add_argument(
82
72
  "--tool-choice",
83
73
  choices=["auto", "required", "any", "none"],
84
74
  default="auto",
85
- help="Tool selection strategy (default: auto)"
86
- )
87
- create_parser.add_argument(
88
- "--template",
89
- help="Base template to extend from"
75
+ help="Tool selection strategy (default: auto)",
90
76
  )
77
+ create_parser.add_argument("--template", help="Base template to extend from")
91
78
  create_parser.add_argument(
92
79
  "--format",
93
80
  choices=["text", "json"],
94
81
  default="text",
95
- help="Output format (default: text)"
82
+ help="Output format (default: text)",
96
83
  )
97
-
84
+
98
85
  # Variant command
99
86
  variant_parser = agent_subparsers.add_parser(
100
- "variant",
101
- help="Create an agent variant based on existing agent"
87
+ "variant", help="Create an agent variant based on existing agent"
102
88
  )
103
89
  variant_parser.add_argument(
104
90
  "--base",
105
91
  dest="base_agent",
106
92
  required=True,
107
- help="Base agent ID to create variant from"
108
- )
109
- variant_parser.add_argument(
110
- "--id",
111
- dest="variant_id",
112
- required=True,
113
- help="Variant agent ID"
93
+ help="Base agent ID to create variant from",
114
94
  )
115
95
  variant_parser.add_argument(
116
- "--name",
117
- help="Display name for the variant"
96
+ "--id", dest="variant_id", required=True, help="Variant agent ID"
118
97
  )
98
+ variant_parser.add_argument("--name", help="Display name for the variant")
119
99
  variant_parser.add_argument(
120
100
  "--model",
121
101
  choices=["sonnet", "opus", "haiku"],
122
- help="Override model for variant"
102
+ help="Override model for variant",
123
103
  )
124
104
  variant_parser.add_argument(
125
105
  "--tool-choice",
126
106
  choices=["auto", "required", "any", "none"],
127
- help="Override tool choice for variant"
107
+ help="Override tool choice for variant",
128
108
  )
129
109
  variant_parser.add_argument(
130
- "--instructions",
131
- help="Additional instructions to append for variant"
110
+ "--instructions", help="Additional instructions to append for variant"
132
111
  )
133
112
  variant_parser.add_argument(
134
113
  "--format",
135
114
  choices=["text", "json"],
136
115
  default="text",
137
- help="Output format (default: text)"
116
+ help="Output format (default: text)",
138
117
  )
139
-
118
+
140
119
  # Deploy command
141
120
  deploy_parser = agent_subparsers.add_parser(
142
- "deploy",
143
- help="Deploy agent to specified tier"
121
+ "deploy", help="Deploy agent to specified tier"
144
122
  )
145
123
  deploy_parser.add_argument(
146
- "--id",
147
- dest="agent_id",
148
- required=True,
149
- help="Agent ID to deploy"
124
+ "--id", dest="agent_id", required=True, help="Agent ID to deploy"
150
125
  )
151
126
  deploy_parser.add_argument(
152
127
  "--tier",
153
128
  choices=["project", "user"],
154
129
  default="user",
155
- help="Deployment tier (default: user)"
130
+ help="Deployment tier (default: user)",
156
131
  )
157
132
  deploy_parser.add_argument(
158
- "--force",
159
- action="store_true",
160
- help="Force deployment even if agent exists"
133
+ "--force", action="store_true", help="Force deployment even if agent exists"
161
134
  )
162
135
  deploy_parser.add_argument(
163
136
  "--format",
164
137
  choices=["text", "json"],
165
138
  default="text",
166
- help="Output format (default: text)"
139
+ help="Output format (default: text)",
167
140
  )
168
-
141
+
169
142
  # Customize PM command
170
143
  pm_parser = agent_subparsers.add_parser(
171
- "customize-pm",
172
- help="Customize PM instructions via .claude-mpm/INSTRUCTIONS.md"
144
+ "customize-pm", help="Customize PM instructions via .claude-mpm/INSTRUCTIONS.md"
173
145
  )
174
146
  pm_parser.add_argument(
175
147
  "--level",
176
148
  choices=["user", "project"],
177
149
  default="user",
178
- help="PM instruction level - user (~/.claude-mpm) or project (./.claude-mpm) (default: user)"
179
- )
180
- pm_parser.add_argument(
181
- "--template",
182
- help="Use predefined PM template"
183
- )
184
- pm_parser.add_argument(
185
- "--patterns",
186
- nargs="+",
187
- help="Custom delegation patterns"
188
- )
189
- pm_parser.add_argument(
190
- "--rules",
191
- nargs="+",
192
- help="Additional PM rules"
150
+ help="PM instruction level - user (~/.claude-mpm) or project (./.claude-mpm) (default: user)",
193
151
  )
152
+ pm_parser.add_argument("--template", help="Use predefined PM template")
153
+ pm_parser.add_argument("--patterns", nargs="+", help="Custom delegation patterns")
154
+ pm_parser.add_argument("--rules", nargs="+", help="Additional PM rules")
194
155
  pm_parser.add_argument(
195
156
  "--format",
196
157
  choices=["text", "json"],
197
158
  default="text",
198
- help="Output format (default: text)"
159
+ help="Output format (default: text)",
199
160
  )
200
-
161
+
201
162
  # Show command
202
163
  show_parser = agent_subparsers.add_parser(
203
- "show",
204
- help="Display detailed agent information"
164
+ "show", help="Display detailed agent information"
205
165
  )
206
166
  show_parser.add_argument(
207
- "--id",
208
- dest="agent_id",
209
- required=True,
210
- help="Agent ID to show"
167
+ "--id", dest="agent_id", required=True, help="Agent ID to show"
211
168
  )
212
169
  show_parser.add_argument(
213
170
  "--format",
214
171
  choices=["text", "json", "yaml"],
215
172
  default="text",
216
- help="Output format (default: text)"
173
+ help="Output format (default: text)",
217
174
  )
218
-
175
+
219
176
  # Test command
220
177
  test_parser = agent_subparsers.add_parser(
221
- "test",
222
- help="Test and validate agent configuration"
178
+ "test", help="Test and validate agent configuration"
223
179
  )
224
180
  test_parser.add_argument(
225
- "--id",
226
- dest="agent_id",
227
- required=True,
228
- help="Agent ID to test"
181
+ "--id", dest="agent_id", required=True, help="Agent ID to test"
229
182
  )
230
183
  test_parser.add_argument(
231
184
  "--format",
232
185
  choices=["text", "json"],
233
186
  default="text",
234
- help="Output format (default: text)"
187
+ help="Output format (default: text)",
235
188
  )
236
-
189
+
237
190
  # Templates command
238
191
  templates_parser = agent_subparsers.add_parser(
239
- "templates",
240
- help="List available agent templates"
192
+ "templates", help="List available agent templates"
241
193
  )
242
194
  templates_parser.add_argument(
243
195
  "--format",
244
196
  choices=["text", "json", "yaml"],
245
197
  default="text",
246
- help="Output format (default: text)"
247
- )
198
+ help="Output format (default: text)",
199
+ )
@@ -132,11 +132,10 @@ def add_agents_subparser(subparsers) -> argparse.ArgumentParser:
132
132
  default=3,
133
133
  help="Maximum retry attempts per package (default: 3)",
134
134
  )
135
-
135
+
136
136
  # Cleanup orphaned agents
137
137
  cleanup_orphaned_parser = agents_subparsers.add_parser(
138
- "cleanup-orphaned",
139
- help="Clean up orphaned agents that don't have templates"
138
+ "cleanup-orphaned", help="Clean up orphaned agents that don't have templates"
140
139
  )
141
140
  cleanup_orphaned_parser.add_argument(
142
141
  "--agents-dir",
@@ -35,7 +35,7 @@ def _get_enhanced_version(base_version: str) -> str:
35
35
 
36
36
  # If we got an enhanced version (with build number), use it
37
37
  # Remove the 'v' prefix since argparse will add the program name
38
- if enhanced and enhanced.startswith('v'):
38
+ if enhanced and enhanced.startswith("v"):
39
39
  enhanced = enhanced[1:] # Remove 'v' prefix
40
40
 
41
41
  if enhanced and enhanced != base_version:
@@ -47,7 +47,9 @@ def _get_enhanced_version(base_version: str) -> str:
47
47
  return base_version
48
48
 
49
49
 
50
- def add_common_arguments(parser: argparse.ArgumentParser, version: str = None) -> None:
50
+ def add_common_arguments(
51
+ parser: argparse.ArgumentParser, version: Optional[str] = None
52
+ ) -> None:
51
53
  """
52
54
  Add common arguments that apply to all commands.
53
55
 
@@ -342,11 +344,11 @@ def create_parser(
342
344
  # MCP pipx configuration command
343
345
  if hasattr(CLICommands, "MCP_PIPX_CONFIG") or True: # Always add for now
344
346
  from ..commands.mcp_pipx_config import add_parser as add_mcp_pipx_parser
345
-
347
+
346
348
  add_mcp_pipx_parser(subparsers)
347
-
349
+
348
350
  from ..commands.doctor import add_doctor_parser
349
-
351
+
350
352
  add_doctor_parser(subparsers)
351
353
  except ImportError:
352
354
  # Commands module may not be available during testing or refactoring
@@ -79,7 +79,7 @@ def add_mcp_subparser(subparsers) -> argparse.ArgumentParser:
79
79
  )
80
80
 
81
81
  # Stop MCP server
82
- stop_mcp_parser = mcp_subparsers.add_parser(
82
+ mcp_subparsers.add_parser(
83
83
  MCPCommands.STOP.value, help="Stop the MCP Gateway server"
84
84
  )
85
85
 
@@ -172,7 +172,9 @@ def add_mcp_subparser(subparsers) -> argparse.ArgumentParser:
172
172
  "--test", action="store_true", help="Run in test mode with debug output"
173
173
  )
174
174
  server_mcp_parser.add_argument(
175
- "--instructions", action="store_true", help="Show setup instructions for Claude Code"
175
+ "--instructions",
176
+ action="store_true",
177
+ help="Show setup instructions for Claude Code",
176
178
  )
177
179
 
178
180
  return mcp_parser
@@ -42,7 +42,9 @@ def add_monitor_subparser(subparsers) -> argparse.ArgumentParser:
42
42
  MonitorCommands.START.value, help="Start Socket.IO monitoring server"
43
43
  )
44
44
  start_monitor_parser.add_argument(
45
- "--port", type=int, help="Port to start server on (auto-select if not specified)"
45
+ "--port",
46
+ type=int,
47
+ help="Port to start server on (auto-select if not specified)",
46
48
  )
47
49
  start_monitor_parser.add_argument(
48
50
  "--host", default="localhost", help="Host to bind to (default: localhost)"
@@ -60,12 +62,16 @@ def add_monitor_subparser(subparsers) -> argparse.ArgumentParser:
60
62
  "--background", action="store_true", help="Run server in background"
61
63
  )
62
64
  start_monitor_parser.add_argument(
63
- "--force", action="store_true",
64
- help="Force kill daemon processes to reclaim ports (use with caution)"
65
+ "--force",
66
+ action="store_true",
67
+ help="Force kill daemon processes to reclaim ports (use with caution)",
65
68
  )
66
69
  start_monitor_parser.add_argument(
67
- "--no-reclaim", dest="reclaim", action="store_false", default=True,
68
- help="Don't automatically reclaim ports from debug scripts"
70
+ "--no-reclaim",
71
+ dest="reclaim",
72
+ action="store_false",
73
+ default=True,
74
+ help="Don't automatically reclaim ports from debug scripts",
69
75
  )
70
76
 
71
77
  # Stop monitor
@@ -83,9 +89,7 @@ def add_monitor_subparser(subparsers) -> argparse.ArgumentParser:
83
89
  restart_monitor_parser = monitor_subparsers.add_parser(
84
90
  MonitorCommands.RESTART.value, help="Restart Socket.IO monitoring server"
85
91
  )
86
- restart_monitor_parser.add_argument(
87
- "--port", type=int, help="Port to restart on"
88
- )
92
+ restart_monitor_parser.add_argument("--port", type=int, help="Port to restart on")
89
93
  restart_monitor_parser.add_argument(
90
94
  "--host", default="localhost", help="Host to bind to (default: localhost)"
91
95
  )
@@ -98,27 +102,31 @@ def add_monitor_subparser(subparsers) -> argparse.ArgumentParser:
98
102
  "--verbose", action="store_true", help="Show detailed status information"
99
103
  )
100
104
  status_monitor_parser.add_argument(
101
- "--show-ports", action="store_true",
102
- help="Show status of all ports in the range (8765-8785)"
105
+ "--show-ports",
106
+ action="store_true",
107
+ help="Show status of all ports in the range (8765-8785)",
103
108
  )
104
109
 
105
110
  # Port monitor (start/restart on specific port)
106
111
  port_monitor_parser = monitor_subparsers.add_parser(
107
- MonitorCommands.PORT.value, help="Start/restart monitoring server on specific port"
108
- )
109
- port_monitor_parser.add_argument(
110
- "port", type=int, help="Port number to use"
112
+ MonitorCommands.PORT.value,
113
+ help="Start/restart monitoring server on specific port",
111
114
  )
115
+ port_monitor_parser.add_argument("port", type=int, help="Port number to use")
112
116
  port_monitor_parser.add_argument(
113
117
  "--host", default="localhost", help="Host to bind to (default: localhost)"
114
118
  )
115
119
  port_monitor_parser.add_argument(
116
- "--force", action="store_true",
117
- help="Force kill daemon processes to reclaim port (use with caution)"
120
+ "--force",
121
+ action="store_true",
122
+ help="Force kill daemon processes to reclaim port (use with caution)",
118
123
  )
119
124
  port_monitor_parser.add_argument(
120
- "--no-reclaim", dest="reclaim", action="store_false", default=True,
121
- help="Don't automatically reclaim port from debug scripts"
125
+ "--no-reclaim",
126
+ dest="reclaim",
127
+ action="store_false",
128
+ default=True,
129
+ help="Don't automatically reclaim port from debug scripts",
122
130
  )
123
131
 
124
132
  return monitor_parser
@@ -18,23 +18,23 @@ from .error_handling import CLIErrorHandler, handle_cli_errors
18
18
  from .output_formatters import OutputFormatter, format_output
19
19
 
20
20
  __all__ = [
21
+ # Command base
22
+ "AgentCommand",
23
+ "BaseCommand",
24
+ # Error handling
25
+ "CLIErrorHandler",
26
+ "CommandResult",
21
27
  # Argument patterns
22
28
  "CommonArguments",
29
+ "MemoryCommand",
30
+ # Output formatting
31
+ "OutputFormatter",
23
32
  "add_agent_arguments",
24
33
  "add_common_arguments",
25
34
  "add_config_arguments",
26
35
  "add_logging_arguments",
27
36
  "add_memory_arguments",
28
37
  "add_output_arguments",
29
- # Command base
30
- "AgentCommand",
31
- "BaseCommand",
32
- "CommandResult",
33
- "MemoryCommand",
34
- # Error handling
35
- "CLIErrorHandler",
36
- "handle_cli_errors",
37
- # Output formatting
38
- "OutputFormatter",
39
38
  "format_output",
39
+ "handle_cli_errors",
40
40
  ]