claude-mpm 3.9.11__py3-none-any.whl → 4.0.4__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 (434) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +1 -1
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +2 -2
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +79 -51
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +20 -20
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +140 -905
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +330 -86
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +363 -220
  50. claude_mpm/cli/parser.py +24 -1156
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +124 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +71 -73
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +35 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/built/components/agent-inference.js +2 -0
  113. claude_mpm/dashboard/static/built/components/event-processor.js +2 -0
  114. claude_mpm/dashboard/static/built/components/event-viewer.js +2 -0
  115. claude_mpm/dashboard/static/built/components/export-manager.js +2 -0
  116. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +2 -0
  117. claude_mpm/dashboard/static/built/components/hud-library-loader.js +2 -0
  118. claude_mpm/dashboard/static/built/components/hud-manager.js +2 -0
  119. claude_mpm/dashboard/static/built/components/hud-visualizer.js +2 -0
  120. claude_mpm/dashboard/static/built/components/module-viewer.js +2 -0
  121. claude_mpm/dashboard/static/built/components/session-manager.js +2 -0
  122. claude_mpm/dashboard/static/built/components/socket-manager.js +2 -0
  123. claude_mpm/dashboard/static/built/components/ui-state-manager.js +2 -0
  124. claude_mpm/dashboard/static/built/components/working-directory.js +2 -0
  125. claude_mpm/dashboard/static/built/dashboard.js +2 -0
  126. claude_mpm/dashboard/static/built/socket-client.js +2 -0
  127. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  128. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  129. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  130. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  131. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  132. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  133. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  134. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  135. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  136. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  137. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  138. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  139. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  140. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  141. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  142. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  143. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  144. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  145. claude_mpm/dashboard/static/js/components/event-viewer.js +93 -72
  146. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  147. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +110 -96
  148. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  149. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  150. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  151. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  152. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  153. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  154. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  155. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  156. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  157. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  158. claude_mpm/dashboard/static/js/socket-client.js +133 -53
  159. claude_mpm/dashboard/templates/index.html +40 -50
  160. claude_mpm/experimental/cli_enhancements.py +60 -58
  161. claude_mpm/generators/__init__.py +1 -1
  162. claude_mpm/generators/agent_profile_generator.py +75 -65
  163. claude_mpm/hooks/__init__.py +1 -1
  164. claude_mpm/hooks/base_hook.py +33 -28
  165. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  166. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  167. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  168. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  169. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  170. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  171. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  172. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  173. claude_mpm/hooks/memory_integration_hook.py +140 -100
  174. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  175. claude_mpm/hooks/validation_hooks.py +57 -49
  176. claude_mpm/init.py +145 -121
  177. claude_mpm/models/__init__.py +9 -9
  178. claude_mpm/models/agent_definition.py +33 -23
  179. claude_mpm/models/agent_session.py +228 -200
  180. claude_mpm/scripts/__init__.py +1 -1
  181. claude_mpm/scripts/socketio_daemon.py +192 -75
  182. claude_mpm/scripts/socketio_server_manager.py +328 -0
  183. claude_mpm/scripts/start_activity_logging.py +25 -22
  184. claude_mpm/services/__init__.py +68 -43
  185. claude_mpm/services/agent_capabilities_service.py +271 -0
  186. claude_mpm/services/agents/__init__.py +23 -32
  187. claude_mpm/services/agents/deployment/__init__.py +3 -3
  188. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  189. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  190. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  191. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  192. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  193. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  194. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  195. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  196. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  197. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  198. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  199. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  200. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  201. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  202. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  203. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  204. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  205. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  206. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  207. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  208. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  209. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  210. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  211. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  212. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  213. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  214. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  215. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  216. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  217. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  218. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  219. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  220. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  221. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  222. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  223. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  224. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  225. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  226. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  227. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  228. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  229. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  230. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  231. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  232. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  233. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  234. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  235. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  236. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  237. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  238. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  239. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  240. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  241. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  242. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  243. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  244. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  245. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  246. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  247. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  248. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  249. claude_mpm/services/agents/loading/__init__.py +2 -2
  250. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  251. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  252. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  253. claude_mpm/services/agents/management/__init__.py +2 -2
  254. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  255. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  256. claude_mpm/services/agents/memory/__init__.py +9 -6
  257. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  258. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  259. claude_mpm/services/agents/memory/analyzer.py +430 -0
  260. claude_mpm/services/agents/memory/content_manager.py +376 -0
  261. claude_mpm/services/agents/memory/template_generator.py +468 -0
  262. claude_mpm/services/agents/registry/__init__.py +7 -10
  263. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  264. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  265. claude_mpm/services/async_session_logger.py +187 -153
  266. claude_mpm/services/claude_session_logger.py +87 -72
  267. claude_mpm/services/command_handler_service.py +217 -0
  268. claude_mpm/services/communication/__init__.py +3 -2
  269. claude_mpm/services/core/__init__.py +50 -97
  270. claude_mpm/services/core/base.py +60 -53
  271. claude_mpm/services/core/interfaces/__init__.py +188 -0
  272. claude_mpm/services/core/interfaces/agent.py +351 -0
  273. claude_mpm/services/core/interfaces/communication.py +343 -0
  274. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  275. claude_mpm/services/core/interfaces/service.py +434 -0
  276. claude_mpm/services/core/interfaces.py +19 -944
  277. claude_mpm/services/event_aggregator.py +208 -170
  278. claude_mpm/services/exceptions.py +387 -308
  279. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  280. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  281. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  282. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  283. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  284. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  285. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  286. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  287. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  288. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  289. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  290. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  291. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  292. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  293. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  294. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  295. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  296. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  297. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  298. claude_mpm/services/hook_service.py +106 -114
  299. claude_mpm/services/infrastructure/__init__.py +7 -5
  300. claude_mpm/services/infrastructure/context_preservation.py +233 -199
  301. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  302. claude_mpm/services/infrastructure/logging.py +83 -76
  303. claude_mpm/services/infrastructure/monitoring.py +547 -404
  304. claude_mpm/services/mcp_gateway/__init__.py +30 -13
  305. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  306. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  307. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  308. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  309. claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
  310. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  311. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  312. claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
  313. claude_mpm/services/mcp_gateway/main.py +287 -137
  314. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  315. claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
  316. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  317. claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
  318. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
  319. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  320. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  321. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  322. claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
  323. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  324. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  325. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  326. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  327. claude_mpm/services/memory/__init__.py +2 -2
  328. claude_mpm/services/memory/builder.py +451 -362
  329. claude_mpm/services/memory/cache/__init__.py +2 -2
  330. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  331. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  332. claude_mpm/services/memory/indexed_memory.py +195 -193
  333. claude_mpm/services/memory/optimizer.py +267 -234
  334. claude_mpm/services/memory/router.py +571 -263
  335. claude_mpm/services/memory_hook_service.py +237 -0
  336. claude_mpm/services/port_manager.py +575 -0
  337. claude_mpm/services/project/__init__.py +3 -3
  338. claude_mpm/services/project/analyzer.py +451 -305
  339. claude_mpm/services/project/registry.py +262 -240
  340. claude_mpm/services/recovery_manager.py +287 -231
  341. claude_mpm/services/response_tracker.py +87 -67
  342. claude_mpm/services/runner_configuration_service.py +587 -0
  343. claude_mpm/services/session_management_service.py +304 -0
  344. claude_mpm/services/socketio/__init__.py +4 -4
  345. claude_mpm/services/socketio/client_proxy.py +174 -0
  346. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  347. claude_mpm/services/socketio/handlers/base.py +44 -30
  348. claude_mpm/services/socketio/handlers/connection.py +166 -64
  349. claude_mpm/services/socketio/handlers/file.py +123 -108
  350. claude_mpm/services/socketio/handlers/git.py +607 -373
  351. claude_mpm/services/socketio/handlers/hook.py +185 -0
  352. claude_mpm/services/socketio/handlers/memory.py +4 -4
  353. claude_mpm/services/socketio/handlers/project.py +4 -4
  354. claude_mpm/services/socketio/handlers/registry.py +53 -38
  355. claude_mpm/services/socketio/server/__init__.py +18 -0
  356. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  357. claude_mpm/services/socketio/server/core.py +399 -0
  358. claude_mpm/services/socketio/server/main.py +323 -0
  359. claude_mpm/services/socketio_client_manager.py +160 -133
  360. claude_mpm/services/socketio_server.py +36 -1885
  361. claude_mpm/services/subprocess_launcher_service.py +316 -0
  362. claude_mpm/services/system_instructions_service.py +258 -0
  363. claude_mpm/services/ticket_manager.py +19 -533
  364. claude_mpm/services/utility_service.py +285 -0
  365. claude_mpm/services/version_control/__init__.py +18 -21
  366. claude_mpm/services/version_control/branch_strategy.py +20 -10
  367. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  368. claude_mpm/services/version_control/git_operations.py +52 -21
  369. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  370. claude_mpm/services/version_control/version_parser.py +145 -125
  371. claude_mpm/services/version_service.py +270 -0
  372. claude_mpm/storage/__init__.py +2 -2
  373. claude_mpm/storage/state_storage.py +177 -181
  374. claude_mpm/ticket_wrapper.py +2 -2
  375. claude_mpm/utils/__init__.py +2 -2
  376. claude_mpm/utils/agent_dependency_loader.py +453 -243
  377. claude_mpm/utils/config_manager.py +157 -118
  378. claude_mpm/utils/console.py +1 -1
  379. claude_mpm/utils/dependency_cache.py +102 -107
  380. claude_mpm/utils/dependency_manager.py +52 -47
  381. claude_mpm/utils/dependency_strategies.py +131 -96
  382. claude_mpm/utils/environment_context.py +110 -102
  383. claude_mpm/utils/error_handler.py +75 -55
  384. claude_mpm/utils/file_utils.py +80 -67
  385. claude_mpm/utils/framework_detection.py +12 -11
  386. claude_mpm/utils/import_migration_example.py +12 -60
  387. claude_mpm/utils/imports.py +48 -45
  388. claude_mpm/utils/path_operations.py +100 -93
  389. claude_mpm/utils/robust_installer.py +172 -164
  390. claude_mpm/utils/session_logging.py +30 -23
  391. claude_mpm/utils/subprocess_utils.py +99 -61
  392. claude_mpm/validation/__init__.py +1 -1
  393. claude_mpm/validation/agent_validator.py +151 -111
  394. claude_mpm/validation/frontmatter_validator.py +92 -71
  395. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/METADATA +90 -22
  396. claude_mpm-4.0.4.dist-info/RECORD +417 -0
  397. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/entry_points.txt +1 -0
  398. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/licenses/LICENSE +1 -1
  399. claude_mpm/cli/commands/run_guarded.py +0 -511
  400. claude_mpm/config/memory_guardian_config.py +0 -325
  401. claude_mpm/config/memory_guardian_yaml.py +0 -335
  402. claude_mpm/core/config_paths.py +0 -150
  403. claude_mpm/core/memory_aware_runner.py +0 -353
  404. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  405. claude_mpm/deployment_paths.py +0 -261
  406. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  407. claude_mpm/models/state_models.py +0 -433
  408. claude_mpm/services/agent/__init__.py +0 -24
  409. claude_mpm/services/agent/deployment.py +0 -2548
  410. claude_mpm/services/agent/management.py +0 -598
  411. claude_mpm/services/agent/registry.py +0 -813
  412. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  413. claude_mpm/services/communication/socketio.py +0 -1935
  414. claude_mpm/services/communication/websocket.py +0 -479
  415. claude_mpm/services/framework_claude_md_generator.py +0 -624
  416. claude_mpm/services/health_monitor.py +0 -893
  417. claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
  418. claude_mpm/services/infrastructure/health_monitor.py +0 -775
  419. claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
  420. claude_mpm/services/infrastructure/memory_guardian.py +0 -944
  421. claude_mpm/services/infrastructure/restart_protection.py +0 -642
  422. claude_mpm/services/infrastructure/state_manager.py +0 -774
  423. claude_mpm/services/mcp_gateway/manager.py +0 -334
  424. claude_mpm/services/optimized_hook_service.py +0 -542
  425. claude_mpm/services/project_analyzer.py +0 -864
  426. claude_mpm/services/project_registry.py +0 -608
  427. claude_mpm/services/standalone_socketio_server.py +0 -1300
  428. claude_mpm/services/ticket_manager_di.py +0 -318
  429. claude_mpm/services/ticketing_service_original.py +0 -510
  430. claude_mpm/utils/paths.py +0 -395
  431. claude_mpm/utils/platform_memory.py +0 -524
  432. claude_mpm-3.9.11.dist-info/RECORD +0 -306
  433. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/WHEEL +0 -0
  434. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/top_level.txt +0 -0
@@ -5,20 +5,27 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Claude MPM Socket.IO Dashboard</title>
7
7
  <link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI2IiBmaWxsPSIjNDI5OWUxIi8+CiAgPHRleHQgeD0iMTYiIHk9IjIxIiBmb250LWZhbWlseT0iSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMCIgZm9udC13ZWlnaHQ9ImJvbGQiIGZpbGw9IndoaXRlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5NUE08L3RleHQ+Cjwvc3ZnPgo=">
8
-
8
+
9
+ <!-- Browser Extension Error Handler - Load First -->
10
+ <script type="module">
11
+ // Load extension error handler before anything else to catch early errors
12
+ import extensionErrorHandler from '/static/js/extension-error-handler.js';
13
+ // Handler is automatically initialized on import
14
+ </script>
15
+
9
16
  <!-- External Dependencies -->
10
17
  <script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
11
-
18
+
12
19
  <!-- Syntax Highlighting - Prism.js -->
13
20
  <link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
14
21
  <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js"></script>
15
22
  <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
16
23
  <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.js"></script>
17
24
  <link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.css" rel="stylesheet">
18
-
25
+
19
26
  <!-- Stylesheets -->
20
27
  <link rel="stylesheet" href="/static/css/dashboard.css">
21
-
28
+
22
29
  <!-- Additional styles for file operations -->
23
30
  <style>
24
31
  .file-item {
@@ -30,24 +37,24 @@
30
37
  cursor: pointer;
31
38
  transition: all 0.2s;
32
39
  }
33
-
40
+
34
41
  .file-item:hover {
35
42
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
36
43
  transform: translateX(2px);
37
44
  }
38
-
45
+
39
46
  .file-header {
40
47
  display: flex;
41
48
  align-items: center;
42
49
  gap: 8px;
43
50
  margin-bottom: 4px;
44
51
  }
45
-
52
+
46
53
  .file-icon {
47
54
  font-size: 16px;
48
55
  min-width: 20px;
49
56
  }
50
-
57
+
51
58
  .file-path {
52
59
  flex: 1;
53
60
  font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
@@ -55,18 +62,18 @@
55
62
  color: #2d3748;
56
63
  word-break: break-all;
57
64
  }
58
-
65
+
59
66
  .file-timestamp {
60
67
  font-size: 12px;
61
68
  color: #718096;
62
69
  }
63
-
70
+
64
71
  .file-summary {
65
72
  font-size: 12px;
66
73
  color: #4a5568;
67
74
  margin-left: 28px;
68
75
  }
69
-
76
+
70
77
  .operation-item {
71
78
  background: #f8fafc;
72
79
  border: 1px solid #e2e8f0;
@@ -74,49 +81,49 @@
74
81
  padding: 10px;
75
82
  margin-bottom: 8px;
76
83
  }
77
-
84
+
78
85
  .operation-header {
79
86
  display: flex;
80
87
  align-items: center;
81
88
  gap: 8px;
82
89
  margin-bottom: 6px;
83
90
  }
84
-
91
+
85
92
  .operation-icon {
86
93
  font-size: 14px;
87
94
  min-width: 16px;
88
95
  }
89
-
96
+
90
97
  .operation-type {
91
98
  font-weight: 600;
92
99
  color: #2d3748;
93
100
  }
94
-
101
+
95
102
  .operation-timestamp {
96
103
  margin-left: auto;
97
104
  font-size: 11px;
98
105
  color: #718096;
99
106
  }
100
-
107
+
101
108
  .operation-details {
102
109
  font-size: 12px;
103
110
  color: #4a5568;
104
111
  line-height: 1.4;
105
112
  }
106
-
113
+
107
114
  .file-details {
108
115
  background: white;
109
116
  border-radius: 6px;
110
117
  padding: 15px;
111
118
  }
112
-
119
+
113
120
  .file-path-display {
114
121
  font-size: 14px;
115
122
  margin-bottom: 15px;
116
123
  padding-bottom: 10px;
117
124
  border-bottom: 1px solid #e2e8f0;
118
125
  }
119
-
126
+
120
127
  .operations-list {
121
128
  max-height: 400px;
122
129
  overflow-y: auto;
@@ -154,7 +161,7 @@
154
161
  </div>
155
162
  </div>
156
163
  </div>
157
-
164
+
158
165
  <!-- Row 2: Main Controls (Always Visible) -->
159
166
  <div class="header-row main-controls">
160
167
  <div class="session-group">
@@ -177,7 +184,7 @@
177
184
  <button id="connection-toggle-btn" class="btn-secondary">Connection Settings</button>
178
185
  </div>
179
186
  </div>
180
-
187
+
181
188
  <!-- Row 3: Connection Controls (Hidden by Default) -->
182
189
  <div class="header-row connection-controls-row" id="connection-controls-row" style="display: none;">
183
190
  <div class="connection-controls">
@@ -188,7 +195,7 @@
188
195
  </div>
189
196
  </div>
190
197
  </div>
191
-
198
+
192
199
  <!-- Main Content Area -->
193
200
  <div class="events-wrapper">
194
201
  <!-- Split container for module viewer and tabbed content -->
@@ -209,10 +216,10 @@
209
216
  </div>
210
217
  </div>
211
218
  </div>
212
-
219
+
213
220
  </div>
214
221
  </div>
215
-
222
+
216
223
  <!-- Right: Tabbed Content -->
217
224
  <div class="events-container">
218
225
  <!-- Tab Navigation -->
@@ -222,7 +229,7 @@
222
229
  <button class="tab-button">šŸ”§ Tools</button>
223
230
  <button class="tab-button">šŸ“ Files</button>
224
231
  </div>
225
-
232
+
226
233
  <!-- Events Tab -->
227
234
  <div class="tab-content active" id="events-tab">
228
235
  <div class="tab-filters">
@@ -238,7 +245,7 @@
238
245
  </div>
239
246
  </div>
240
247
  </div>
241
-
248
+
242
249
  <!-- Agents Tab -->
243
250
  <div class="tab-content" id="agents-tab">
244
251
  <div class="tab-filters">
@@ -257,7 +264,7 @@
257
264
  </div>
258
265
  </div>
259
266
  </div>
260
-
267
+
261
268
  <!-- Tools Tab -->
262
269
  <div class="tab-content" id="tools-tab">
263
270
  <div class="tab-filters">
@@ -278,7 +285,7 @@
278
285
  </div>
279
286
  </div>
280
287
  </div>
281
-
288
+
282
289
  <!-- Files Tab -->
283
290
  <div class="tab-content" id="files-tab">
284
291
  <div class="tab-filters">
@@ -301,7 +308,7 @@
301
308
  </div>
302
309
  </div>
303
310
  </div>
304
-
311
+
305
312
  <!-- Footer -->
306
313
  <div class="footer">
307
314
  <div class="footer-content">
@@ -321,26 +328,9 @@
321
328
  </div>
322
329
  </div>
323
330
  </div>
324
-
331
+
325
332
  <!-- JavaScript Modules -->
326
- <!-- Core infrastructure -->
327
- <script src="/static/js/socket-client.js"></script>
328
-
329
- <!-- Existing components -->
330
- <script src="/static/js/components/event-viewer.js"></script>
331
- <script src="/static/js/components/module-viewer.js"></script>
332
- <script src="/static/js/components/session-manager.js"></script>
333
-
334
- <!-- New modular components -->
335
- <script src="/static/js/components/socket-manager.js"></script>
336
- <script src="/static/js/components/agent-inference.js"></script>
337
- <script src="/static/js/components/ui-state-manager.js?v=1.0"></script>
338
- <script src="/static/js/components/working-directory.js?v=1.0"></script>
339
- <script src="/static/js/components/file-tool-tracker.js?v=1.1"></script>
340
- <script src="/static/js/components/event-processor.js?v=1.0"></script>
341
- <script src="/static/js/components/export-manager.js?v=1.0"></script>
342
-
343
- <!-- Main dashboard coordinator -->
344
- <script src="/static/js/dashboard.js"></script>
333
+ <!-- Load bundled dashboard assets (built with Vite) -->
334
+ <script type="module" src="/static/dist/dashboard.js"></script>
345
335
  </body>
346
- </html>
336
+ </html>
@@ -1,3 +1,5 @@
1
+ from pathlib import Path
2
+
1
3
  """
2
4
  Enhanced CLI operations for claude-mpm.
3
5
 
@@ -23,62 +25,64 @@ integrate selected features into the main CLI.
23
25
  Implements error handling and user guidance patterns from awesome-claude-code.
24
26
  """
25
27
 
26
- import click
27
- import sys
28
28
  import logging
29
- from typing import Optional, Any, Dict, List
30
- from pathlib import Path
29
+ import sys
30
+ from typing import Any, Dict, List, Optional
31
+
32
+ import click
31
33
 
34
+ from claude_mpm.hooks.validation_hooks import ValidationError, ValidationHooks
32
35
  from claude_mpm.utils.error_handler import (
33
- MPMError, ErrorContext, handle_errors, suggest_setup_fix
36
+ ErrorContext,
37
+ MPMError,
38
+ handle_errors,
39
+ suggest_setup_fix,
34
40
  )
35
41
  from claude_mpm.validation import AgentValidator, ValidationResult
36
- from claude_mpm.hooks.validation_hooks import ValidationHooks, ValidationError
37
42
 
38
43
  logger = logging.getLogger(__name__)
39
44
 
40
-
41
45
  class CLIContext:
42
46
  """Enhanced CLI context with validation and error handling."""
43
-
47
+
44
48
  def __init__(self):
45
49
  """Initialize CLI context."""
46
50
  self.validator = AgentValidator()
47
51
  self.validation_hooks = ValidationHooks()
48
52
  self.debug = False
49
53
  self.dry_run = False
50
-
54
+
51
55
  def setup_logging(self, debug: bool = False) -> None:
52
56
  """Setup logging based on debug flag."""
53
57
  level = logging.DEBUG if debug else logging.INFO
54
58
  format_str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" if debug else "%(message)s"
55
-
59
+
56
60
  logging.basicConfig(
57
61
  level=level,
58
62
  format=format_str,
59
63
  handlers=[logging.StreamHandler(sys.stdout)]
60
64
  )
61
65
  self.debug = debug
62
-
66
+
63
67
  def validate_prerequisites(self) -> bool:
64
68
  """Validate system prerequisites."""
65
69
  print("Checking prerequisites...")
66
70
  all_passed = True
67
-
71
+
68
72
  # Check Python version
69
73
  if sys.version_info < (3, 11):
70
74
  print("āŒ Python 3.11 or higher is required")
71
75
  all_passed = False
72
76
  else:
73
77
  print("āœ“ Python version is compatible")
74
-
78
+
75
79
  # Check required directories
76
80
  required_dirs = [
77
81
  Path.home() / '.claude-mpm',
78
82
  Path.home() / '.claude-mpm' / 'profiles',
79
83
  Path.home() / '.claude-mpm' / 'logs',
80
84
  ]
81
-
85
+
82
86
  for dir_path in required_dirs:
83
87
  if not dir_path.exists():
84
88
  try:
@@ -87,10 +91,10 @@ class CLIContext:
87
91
  except Exception as e:
88
92
  print(f"āŒ Failed to create directory {dir_path}: {e}")
89
93
  all_passed = False
90
-
94
+
91
95
  return all_passed
92
-
93
- def handle_validation_result(self, result: ValidationResult,
96
+
97
+ def handle_validation_result(self, result: ValidationResult,
94
98
  operation: str = "operation") -> None:
95
99
  """Handle validation results with user-friendly output."""
96
100
  if result.is_valid:
@@ -104,19 +108,18 @@ class CLIContext:
104
108
  print(f"āŒ {operation} failed validation:")
105
109
  for error in result.errors:
106
110
  print(f" - {error}")
107
-
111
+
108
112
  if result.warnings:
109
113
  print("\nAdditional warnings:")
110
114
  for warning in result.warnings:
111
115
  print(f" - {warning}")
112
-
113
- sys.exit(1)
114
116
 
117
+ sys.exit(1)
115
118
 
116
119
  def create_enhanced_cli() -> click.Group:
117
120
  """Create enhanced CLI with better error handling."""
118
121
  cli_context = CLIContext()
119
-
122
+
120
123
  @click.group()
121
124
  @click.option('--debug', is_flag=True, help='Enable debug logging')
122
125
  @click.option('--dry-run', is_flag=True, help='Run without making changes')
@@ -126,18 +129,18 @@ def create_enhanced_cli() -> click.Group:
126
129
  ctx.obj = cli_context
127
130
  cli_context.setup_logging(debug)
128
131
  cli_context.dry_run = dry_run
129
-
132
+
130
133
  if debug:
131
- print("šŸ› Debug mode enabled")
134
+
132
135
  if dry_run:
133
136
  print("šŸƒ Dry-run mode enabled")
134
-
137
+
135
138
  @cli.command()
136
139
  @click.pass_context
137
140
  def validate_setup(ctx):
138
141
  """Validate system setup and prerequisites."""
139
142
  cli_ctx = ctx.obj
140
-
143
+
141
144
  with ErrorContext("setup validation"):
142
145
  if cli_ctx.validate_prerequisites():
143
146
  print("\nāœ… All prerequisites satisfied!")
@@ -147,9 +150,9 @@ def create_enhanced_cli() -> click.Group:
147
150
  print("\nšŸ’” Setup hints:")
148
151
  print(" - Ensure Python 3.11+ is installed")
149
152
  print(" - Check file permissions for ~/.claude-mpm")
150
- print(" - Run with --debug for more details")
153
+
151
154
  sys.exit(1)
152
-
155
+
153
156
  @cli.command()
154
157
  @click.argument('profile_path', type=click.Path(exists=True))
155
158
  @click.pass_context
@@ -158,17 +161,17 @@ def create_enhanced_cli() -> click.Group:
158
161
  """Validate an agent profile."""
159
162
  cli_ctx = ctx.obj
160
163
  profile = Path(profile_path)
161
-
164
+
162
165
  print(f"Validating profile: {profile.name}")
163
-
166
+
164
167
  # Run pre-load validation
165
168
  result = await cli_ctx.validation_hooks.run_pre_load_validation(profile)
166
-
169
+
167
170
  cli_ctx.handle_validation_result(result, f"Profile validation for {profile.name}")
168
-
171
+
169
172
  if result.is_valid and result.locked_fields:
170
173
  print(f"\nšŸ”’ Locked fields: {', '.join(result.locked_fields)}")
171
-
174
+
172
175
  @cli.command()
173
176
  @click.option('--profile', '-p', help='Agent profile to load')
174
177
  @click.option('--task', '-t', help='Task to execute')
@@ -177,10 +180,10 @@ def create_enhanced_cli() -> click.Group:
177
180
  async def run_agent(ctx, profile: str, task: str):
178
181
  """Run an agent with enhanced validation."""
179
182
  cli_ctx = ctx.obj
180
-
183
+
181
184
  if not profile or not task:
182
185
  raise click.UsageError("Both --profile and --task are required")
183
-
186
+
184
187
  # Validate profile exists
185
188
  profile_path = Path(profile)
186
189
  if not profile_path.exists():
@@ -189,7 +192,7 @@ def create_enhanced_cli() -> click.Group:
189
192
  Path.home() / '.claude-mpm' / 'profiles' / f"{profile}.yaml",
190
193
  Path.cwd() / 'agents' / f"{profile}.yaml",
191
194
  ]
192
-
195
+
193
196
  for location in default_locations:
194
197
  if location.exists():
195
198
  profile_path = location
@@ -204,25 +207,25 @@ def create_enhanced_cli() -> click.Group:
204
207
  "Create a new profile with 'mpm create-profile'"
205
208
  ]
206
209
  )
207
-
210
+
208
211
  # Run validation
209
212
  print(f"šŸ” Validating profile: {profile_path.name}")
210
213
  validation_result = await cli_ctx.validation_hooks.run_pre_load_validation(profile_path)
211
-
214
+
212
215
  if not validation_result.is_valid:
213
216
  cli_ctx.handle_validation_result(validation_result, "Profile validation")
214
217
  return
215
-
218
+
216
219
  # Validate task
217
220
  print(f"šŸ” Validating task...")
218
221
  task_result = await cli_ctx.validation_hooks.run_pre_execute_validation(
219
222
  profile_path.stem, task
220
223
  )
221
-
224
+
222
225
  if not task_result.is_valid:
223
226
  cli_ctx.handle_validation_result(task_result, "Task validation")
224
227
  return
225
-
228
+
226
229
  if cli_ctx.dry_run:
227
230
  print("\nšŸƒ Dry-run mode - would execute:")
228
231
  print(f" Profile: {profile_path}")
@@ -231,36 +234,36 @@ def create_enhanced_cli() -> click.Group:
231
234
  print(f"\nšŸš€ Executing agent from {profile_path.name}...")
232
235
  # Actual execution would go here
233
236
  print("āœ… Agent execution completed")
234
-
237
+
235
238
  @cli.command()
236
239
  @click.pass_context
237
240
  def list_profiles(ctx):
238
241
  """List available agent profiles."""
239
242
  cli_ctx = ctx.obj
240
-
243
+
241
244
  profile_locations = [
242
245
  Path.home() / '.claude-mpm' / 'profiles',
243
246
  Path.cwd() / 'agents',
244
247
  ]
245
-
248
+
246
249
  all_profiles = []
247
250
  for location in profile_locations:
248
251
  if location.exists():
249
252
  profiles = list(location.glob('*.yaml')) + list(location.glob('*.yml'))
250
253
  all_profiles.extend(profiles)
251
-
254
+
252
255
  if not all_profiles:
253
256
  print("No agent profiles found")
254
257
  print("\nšŸ’” Create a profile with: mpm create-profile")
255
258
  return
256
-
259
+
257
260
  print("Available agent profiles:")
258
261
  for profile in sorted(all_profiles):
259
262
  # Quick validation check
260
263
  result = cli_ctx.validator.validate_profile(profile)
261
264
  status = "āœ…" if result.is_valid else "āš ļø"
262
265
  print(f" {status} {profile.stem} ({profile})")
263
-
266
+
264
267
  @cli.command()
265
268
  @click.argument('name')
266
269
  @click.option('--role', '-r', required=True, help='Agent role')
@@ -269,28 +272,28 @@ def create_enhanced_cli() -> click.Group:
269
272
  def create_profile(ctx, name: str, role: str, category: str):
270
273
  """Create a new agent profile from template."""
271
274
  from claude_mpm.generators import AgentProfileGenerator
272
-
275
+
273
276
  cli_ctx = ctx.obj
274
277
  generator = AgentProfileGenerator()
275
-
278
+
276
279
  print(f"Creating agent profile: {name}")
277
-
280
+
278
281
  # Generate configuration
279
282
  config = generator.create_agent_from_template(name, role, category)
280
-
283
+
281
284
  # Generate profile
282
285
  profile_content = generator.generate_profile(config)
283
-
286
+
284
287
  # Save profile
285
288
  profile_dir = Path.home() / '.claude-mpm' / 'profiles'
286
289
  profile_dir.mkdir(parents=True, exist_ok=True)
287
-
290
+
288
291
  profile_path = profile_dir / f"{name.lower().replace(' ', '_')}.yaml"
289
-
292
+
290
293
  if profile_path.exists() and not click.confirm(f"Profile {profile_path} exists. Overwrite?"):
291
294
  print("Aborted")
292
295
  return
293
-
296
+
294
297
  if cli_ctx.dry_run:
295
298
  print(f"\nšŸƒ Dry-run mode - would create {profile_path}:")
296
299
  print("---")
@@ -299,18 +302,17 @@ def create_enhanced_cli() -> click.Group:
299
302
  else:
300
303
  profile_path.write_text(profile_content)
301
304
  print(f"āœ… Created profile: {profile_path}")
302
-
305
+
303
306
  # Generate documentation
304
307
  doc_path = profile_path.with_suffix('.md')
305
308
  doc_content = generator.generate_agent_documentation(config)
306
309
  doc_path.write_text(doc_content)
307
310
  print(f"šŸ“ Created documentation: {doc_path}")
308
-
309
- return cli
310
311
 
312
+ return cli
311
313
 
312
314
  # Export the enhanced CLI
313
315
  enhanced_cli = create_enhanced_cli()
314
316
 
315
317
  if __name__ == '__main__':
316
- enhanced_cli()
318
+ enhanced_cli()
@@ -2,4 +2,4 @@
2
2
 
3
3
  from .agent_profile_generator import AgentProfileGenerator
4
4
 
5
- __all__ = ['AgentProfileGenerator']
5
+ __all__ = ["AgentProfileGenerator"]