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
claude_mpm/init.py CHANGED
@@ -1,30 +1,32 @@
1
+ from pathlib import Path
2
+
1
3
  """Initialization module for claude-mpm.
2
4
 
3
5
  Handles creation of necessary directories and configuration files.
4
6
  """
5
7
 
8
+ import json
6
9
  import os
7
10
  import shutil
8
- from pathlib import Path
9
- from typing import Optional, Dict, Any
10
- import json
11
+ from typing import Any, Dict, Optional
12
+
11
13
  import yaml
12
14
 
13
- from claude_mpm.core.logger import get_logger
14
15
  from claude_mpm.core.constants import NetworkConfig
16
+ from claude_mpm.core.logger import get_logger
15
17
 
16
18
 
17
19
  class ProjectInitializer:
18
20
  """Handles initialization of claude-mpm directories and configuration."""
19
-
21
+
20
22
  def __init__(self):
21
23
  self.logger = get_logger("initializer")
22
24
  self.user_dir = Path.home() / ".claude-mpm"
23
25
  self.project_dir = None
24
-
26
+
25
27
  def initialize_user_directory(self) -> bool:
26
28
  """Initialize user-level .claude-mpm directory structure.
27
-
29
+
28
30
  Creates:
29
31
  - ~/.claude-mpm/
30
32
  - agents/
@@ -37,7 +39,7 @@ class ProjectInitializer:
37
39
  try:
38
40
  # Create main user directory
39
41
  self.user_dir.mkdir(exist_ok=True)
40
-
42
+
41
43
  # Create subdirectories
42
44
  directories = [
43
45
  self.user_dir / "agents" / "user-defined",
@@ -46,34 +48,34 @@ class ProjectInitializer:
46
48
  self.user_dir / "templates",
47
49
  self.user_dir / "registry",
48
50
  ]
49
-
51
+
50
52
  for directory in directories:
51
53
  directory.mkdir(parents=True, exist_ok=True)
52
-
54
+
53
55
  # Check for migration from old settings.json to new configuration.yaml
54
56
  old_config_file = self.user_dir / "config" / "settings.json"
55
57
  config_file = self.user_dir / "config" / "configuration.yaml"
56
-
58
+
57
59
  # Migrate if old file exists but new doesn't
58
60
  if old_config_file.exists() and not config_file.exists():
59
61
  self._migrate_json_to_yaml(old_config_file, config_file)
60
62
  elif not config_file.exists():
61
63
  # Create default configuration if it doesn't exist
62
64
  self._create_default_config(config_file)
63
-
65
+
64
66
  # Copy agent templates if they don't exist
65
67
  self._copy_agent_templates()
66
-
68
+
67
69
  self.logger.info(f"Initialized user directory at {self.user_dir}")
68
70
  return True
69
-
71
+
70
72
  except Exception as e:
71
73
  self.logger.error(f"Failed to initialize user directory: {e}")
72
74
  return False
73
-
75
+
74
76
  def initialize_project_directory(self, project_path: Optional[Path] = None) -> bool:
75
77
  """Initialize project-level .claude-mpm directory structure.
76
-
78
+
77
79
  Creates:
78
80
  - .claude-mpm/
79
81
  - agents/ (for project agent JSON files)
@@ -89,94 +91,109 @@ class ProjectInitializer:
89
91
  else:
90
92
  # Check for the user's original working directory from launch script
91
93
  # The launch script sets CLAUDE_MPM_USER_PWD before changing to framework directory
92
- user_pwd = os.environ.get('CLAUDE_MPM_USER_PWD')
93
-
94
+ user_pwd = os.environ.get("CLAUDE_MPM_USER_PWD")
95
+
94
96
  if user_pwd:
95
97
  # Use the original user working directory
96
98
  project_root = Path(user_pwd)
97
- self.logger.debug(f"Using user working directory from CLAUDE_MPM_USER_PWD: {project_root}")
99
+ self.logger.debug(
100
+ f"Using user working directory from CLAUDE_MPM_USER_PWD: {project_root}"
101
+ )
98
102
  else:
99
103
  # Fallback to current working directory (backward compatibility)
100
104
  project_root = Path.cwd()
101
- self.logger.debug(f"CLAUDE_MPM_USER_PWD not set, using cwd: {project_root}")
102
-
105
+ self.logger.debug(
106
+ f"CLAUDE_MPM_USER_PWD not set, using cwd: {project_root}"
107
+ )
108
+
103
109
  self.project_dir = project_root / ".claude-mpm"
104
-
110
+
105
111
  # Check if directory already exists
106
112
  directory_existed = self.project_dir.exists()
107
-
113
+
108
114
  # Migrate existing agents from project-specific subdirectory if needed
109
115
  self._migrate_project_agents()
110
-
116
+
111
117
  # Create project directory
112
118
  self.project_dir.mkdir(exist_ok=True)
113
-
119
+
114
120
  # Create subdirectories
115
121
  directories = [
116
- self.project_dir / "agents", # Direct agents directory for project agents
122
+ self.project_dir
123
+ / "agents", # Direct agents directory for project agents
117
124
  self.project_dir / "config",
118
125
  self.project_dir / "responses",
119
126
  self.project_dir / "logs",
120
127
  ]
121
-
128
+
122
129
  for directory in directories:
123
130
  directory.mkdir(parents=True, exist_ok=True)
124
-
131
+
125
132
  # Create project configuration
126
133
  config_file = self.project_dir / "config" / "project.json"
127
134
  if not config_file.exists():
128
135
  self._create_project_config(config_file)
129
-
136
+
130
137
  # Create .gitignore for project directory
131
138
  gitignore = self.project_dir / ".gitignore"
132
139
  if not gitignore.exists():
133
140
  gitignore.write_text("logs/\n*.log\n*.pyc\n__pycache__/\n")
134
-
141
+
135
142
  # Log successful creation with details
136
143
  self.logger.info(f"Initialized project directory at {self.project_dir}")
137
144
  self.logger.debug(f"Created directories: agents, config, responses, logs")
138
-
145
+
139
146
  # Print appropriate message to console for visibility during startup
140
- if directory_existed:
141
- print(f"✓ Found existing .claude-mpm/ directory in {project_root}")
142
- else:
143
- print(f" Initialized .claude-mpm/ in {project_root}")
144
-
145
- # Check if migration happened
146
- agents_dir = self.project_dir / "agents"
147
- if agents_dir.exists() and any(agents_dir.glob("*.json")):
148
- agent_count = len(list(agents_dir.glob("*.json")))
149
- print(f"✓ Found {agent_count} project agent(s) in .claude-mpm/agents/")
150
-
147
+ # BUT: Don't print to stdout when running MCP server (interferes with JSON-RPC)
148
+ import sys
149
+
150
+ is_mcp_mode = "mcp" in sys.argv and "start" in sys.argv
151
+
152
+ if not is_mcp_mode:
153
+ if directory_existed:
154
+ print(f"✓ Found existing .claude-mpm/ directory in {project_root}")
155
+ else:
156
+ print(f"✓ Initialized .claude-mpm/ in {project_root}")
157
+
158
+ # Check if migration happened
159
+ agents_dir = self.project_dir / "agents"
160
+ if agents_dir.exists() and any(agents_dir.glob("*.json")):
161
+ agent_count = len(list(agents_dir.glob("*.json")))
162
+ print(
163
+ f"✓ Found {agent_count} project agent(s) in .claude-mpm/agents/"
164
+ )
165
+
151
166
  return True
152
-
167
+
153
168
  except Exception as e:
154
169
  self.logger.error(f"Failed to initialize project directory: {e}")
155
170
  print(f"✗ Failed to create .claude-mpm/ directory: {e}")
156
171
  return False
157
-
172
+
158
173
  def _migrate_project_agents(self):
159
174
  """Migrate agents from old subdirectory structure to direct agents directory.
160
-
175
+
161
176
  WHY: We're simplifying the directory structure to match the deployment expectations.
162
- The old structure had a subdirectory but the deployment now looks for agents
177
+ The old structure had a subdirectory but the deployment now looks for agents
163
178
  directly in .claude-mpm/agents/.
164
179
  """
165
180
  if not self.project_dir:
166
181
  return
167
-
182
+
168
183
  old_agents_dir = self.project_dir / "agents" / "project-specific"
169
184
  new_agents_dir = self.project_dir / "agents"
170
-
185
+
171
186
  # Check if old directory exists with JSON files
172
187
  if old_agents_dir.exists() and old_agents_dir.is_dir():
173
188
  json_files = list(old_agents_dir.glob("*.json"))
174
189
  if json_files:
175
- self.logger.info(f"Migrating {len(json_files)} agents from old subdirectory")
176
-
190
+ self.logger.info(
191
+ f"Migrating {len(json_files)} agents from old subdirectory"
192
+ )
193
+
177
194
  # Ensure new agents directory exists
178
195
  new_agents_dir.mkdir(parents=True, exist_ok=True)
179
-
196
+
180
197
  # Move each JSON file
181
198
  migrated_count = 0
182
199
  for json_file in json_files:
@@ -186,15 +203,26 @@ class ProjectInitializer:
186
203
  # Move the file
187
204
  shutil.move(str(json_file), str(target_file))
188
205
  migrated_count += 1
189
- self.logger.debug(f"Migrated {json_file.name} to agents directory")
206
+ self.logger.debug(
207
+ f"Migrated {json_file.name} to agents directory"
208
+ )
190
209
  else:
191
- self.logger.debug(f"Skipping {json_file.name} - already exists in target")
210
+ self.logger.debug(
211
+ f"Skipping {json_file.name} - already exists in target"
212
+ )
192
213
  except Exception as e:
193
214
  self.logger.error(f"Failed to migrate {json_file.name}: {e}")
194
-
215
+
195
216
  if migrated_count > 0:
196
- print(f"✓ Migrated {migrated_count} agent(s) from old location to agents/")
197
-
217
+ # Don't print to stdout when running MCP server
218
+ import sys
219
+
220
+ is_mcp_mode = "mcp" in sys.argv and "start" in sys.argv
221
+ if not is_mcp_mode:
222
+ print(
223
+ f"✓ Migrated {migrated_count} agent(s) from old location to agents/"
224
+ )
225
+
198
226
  # Remove old directory if empty
199
227
  try:
200
228
  if not any(old_agents_dir.iterdir()):
@@ -202,7 +230,7 @@ class ProjectInitializer:
202
230
  self.logger.debug("Removed empty old subdirectory")
203
231
  except Exception as e:
204
232
  self.logger.debug(f"Could not remove old directory: {e}")
205
-
233
+
206
234
  def _find_project_root(self) -> Optional[Path]:
207
235
  """Find project root by looking for .git or other project markers."""
208
236
  current = Path.cwd()
@@ -215,149 +243,145 @@ class ProjectInitializer:
215
243
  return current
216
244
  current = current.parent
217
245
  return None
218
-
246
+
219
247
  def _migrate_json_to_yaml(self, old_file: Path, new_file: Path):
220
248
  """Migrate configuration from JSON to YAML format.
221
-
249
+
222
250
  Args:
223
251
  old_file: Path to existing settings.json
224
252
  new_file: Path to new configuration.yaml
225
253
  """
226
254
  try:
227
255
  # Read existing JSON configuration
228
- with open(old_file, 'r') as f:
256
+ with open(old_file, "r") as f:
229
257
  config = json.load(f)
230
-
258
+
231
259
  # Write as YAML
232
- with open(new_file, 'w') as f:
260
+ with open(new_file, "w") as f:
233
261
  yaml.dump(config, f, default_flow_style=False, sort_keys=False)
234
-
235
- self.logger.info(f"Migrated configuration from {old_file.name} to {new_file.name}")
236
-
262
+
263
+ self.logger.info(
264
+ f"Migrated configuration from {old_file.name} to {new_file.name}"
265
+ )
266
+
237
267
  # Optionally rename old file to .backup
238
- backup_file = old_file.with_suffix('.json.backup')
268
+ backup_file = old_file.with_suffix(".json.backup")
239
269
  old_file.rename(backup_file)
240
270
  self.logger.info(f"Renamed old configuration to {backup_file.name}")
241
-
271
+
242
272
  except Exception as e:
243
273
  self.logger.error(f"Failed to migrate configuration: {e}")
244
274
  # Fall back to creating default config
245
275
  self._create_default_config(new_file)
246
-
276
+
247
277
  def _create_default_config(self, config_file: Path):
248
278
  """Create default user configuration in YAML format."""
249
279
  default_config = {
250
280
  "version": "1.0",
251
281
  "hooks": {
252
282
  "enabled": True,
253
- "port_range": list(NetworkConfig.SOCKETIO_PORT_RANGE)
254
- },
255
- "logging": {
256
- "level": "INFO",
257
- "max_size_mb": 100,
258
- "retention_days": 30
283
+ "port_range": list(NetworkConfig.SOCKETIO_PORT_RANGE),
259
284
  },
285
+ "logging": {"level": "INFO", "max_size_mb": 100, "retention_days": 30},
260
286
  "agents": {
261
287
  "auto_discover": True,
262
- "precedence": ["project", "user", "system"]
288
+ "precedence": ["project", "user", "system"],
263
289
  },
264
290
  "orchestration": {
265
291
  "default_mode": "subprocess",
266
- "enable_todo_hijacking": False
267
- }
292
+ "enable_todo_hijacking": False,
293
+ },
268
294
  }
269
-
270
- with open(config_file, 'w') as f:
295
+
296
+ with open(config_file, "w") as f:
271
297
  yaml.dump(default_config, f, default_flow_style=False, sort_keys=False)
272
-
298
+
273
299
  def _create_project_config(self, config_file: Path):
274
300
  """Create default project configuration."""
275
301
  project_config = {
276
302
  "version": "1.0",
277
303
  "project_name": Path.cwd().name,
278
- "agents": {
279
- "enabled": True
280
- },
281
- "tickets": {
282
- "auto_create": True,
283
- "prefix": "TSK"
284
- }
304
+ "agents": {"enabled": True},
305
+ "tickets": {"auto_create": True, "prefix": "TSK"},
285
306
  }
286
-
287
- with open(config_file, 'w') as f:
307
+
308
+ with open(config_file, "w") as f:
288
309
  json.dump(project_config, f, indent=2)
289
-
310
+
290
311
  def _copy_agent_templates(self):
291
312
  """Copy agent templates to user directory."""
292
313
  # Get the package directory
293
314
  package_dir = Path(__file__).parent
294
315
  templates_src = package_dir / "agents" / "templates"
295
316
  templates_dst = self.user_dir / "templates"
296
-
317
+
297
318
  if templates_src.exists():
298
319
  for template_file in templates_src.glob("*.md"):
299
320
  dst_file = templates_dst / template_file.name
300
321
  if not dst_file.exists():
301
322
  shutil.copy2(template_file, dst_file)
302
-
323
+
303
324
  def validate_dependencies(self) -> Dict[str, bool]:
304
325
  """Validate that all required dependencies are available."""
305
326
  dependencies = {}
306
-
327
+
307
328
  # Check Python version
308
329
  import sys
309
- dependencies['python'] = sys.version_info >= (3, 8)
310
-
330
+
331
+ dependencies["python"] = sys.version_info >= (3, 8)
332
+
311
333
  # Check Claude CLI
312
- dependencies['claude_cli'] = shutil.which("claude") is not None
313
-
334
+ dependencies["claude_cli"] = shutil.which("claude") is not None
335
+
314
336
  # Check required Python packages
315
337
  required_packages = [
316
- 'ai_trackdown_pytools',
317
- 'yaml',
318
- 'dotenv',
319
- 'click',
320
- 'pexpect',
321
- 'psutil',
322
- 'requests',
323
- 'flask',
324
- 'watchdog',
325
- 'tree_sitter'
338
+ "ai_trackdown_pytools",
339
+ "yaml",
340
+ "dotenv",
341
+ "click",
342
+ "pexpect",
343
+ "psutil",
344
+ "requests",
345
+ "flask",
346
+ "watchdog",
347
+ "tree_sitter",
326
348
  ]
327
-
349
+
328
350
  for package in required_packages:
329
351
  try:
330
352
  __import__(package)
331
353
  dependencies[package] = True
332
354
  except ImportError:
333
355
  dependencies[package] = False
334
-
356
+
335
357
  return dependencies
336
-
358
+
337
359
  def ensure_initialized(self) -> bool:
338
360
  """Ensure both user and project directories are initialized.
339
-
361
+
340
362
  Shows clear information about where directories are being created.
341
363
  """
342
364
  # Determine actual working directory
343
- user_pwd = os.environ.get('CLAUDE_MPM_USER_PWD')
365
+ user_pwd = os.environ.get("CLAUDE_MPM_USER_PWD")
344
366
  if user_pwd:
345
367
  actual_wd = Path(user_pwd)
346
- self.logger.info(f"User working directory (from CLAUDE_MPM_USER_PWD): {actual_wd}")
368
+ self.logger.info(
369
+ f"User working directory (from CLAUDE_MPM_USER_PWD): {actual_wd}"
370
+ )
347
371
  else:
348
372
  actual_wd = Path.cwd()
349
373
  self.logger.info(f"Working directory: {actual_wd}")
350
-
374
+
351
375
  framework_path = Path(__file__).parent.parent.parent
352
376
  self.logger.info(f"Framework path: {framework_path}")
353
-
377
+
354
378
  # Initialize user directory (in home)
355
379
  user_ok = self.initialize_user_directory()
356
-
380
+
357
381
  # Initialize project directory (in user's actual working directory)
358
382
  self.logger.info(f"Checking for .claude-mpm/ in {actual_wd}")
359
383
  project_ok = self.initialize_project_directory()
360
-
384
+
361
385
  return user_ok and project_ok
362
386
 
363
387
 
@@ -371,9 +395,9 @@ def validate_installation():
371
395
  """Validate that claude-mpm is properly installed."""
372
396
  initializer = ProjectInitializer()
373
397
  deps = initializer.validate_dependencies()
374
-
398
+
375
399
  all_ok = all(deps.values())
376
-
400
+
377
401
  if not all_ok:
378
402
  print("❌ Missing dependencies:")
379
403
  for dep, status in deps.items():
@@ -381,5 +405,5 @@ def validate_installation():
381
405
  print(f" - {dep}")
382
406
  else:
383
407
  print("✅ All dependencies are installed")
384
-
385
- return all_ok
408
+
409
+ return all_ok
@@ -8,17 +8,17 @@ providing a single source of truth for data structures across the system.
8
8
  from .agent_definition import (
9
9
  AgentDefinition,
10
10
  AgentMetadata,
11
- AgentType,
11
+ AgentPermissions,
12
12
  AgentSection,
13
+ AgentType,
13
14
  AgentWorkflow,
14
- AgentPermissions
15
15
  )
16
16
 
17
17
  __all__ = [
18
- 'AgentDefinition',
19
- 'AgentMetadata',
20
- 'AgentType',
21
- 'AgentSection',
22
- 'AgentWorkflow',
23
- 'AgentPermissions'
24
- ]
18
+ "AgentDefinition",
19
+ "AgentMetadata",
20
+ "AgentType",
21
+ "AgentSection",
22
+ "AgentWorkflow",
23
+ "AgentPermissions",
24
+ ]