claude-mpm 3.9.9__py3-none-any.whl → 4.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) 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 +155 -0
  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 +1 -1
  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 +90 -49
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +21 -18
  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 +143 -762
  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 +203 -81
  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 +305 -197
  50. claude_mpm/cli/parser.py +24 -1150
  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 +104 -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 +217 -0
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +36 -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/css/dashboard.css +27 -8
  113. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  114. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  115. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  116. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  117. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  118. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  119. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  120. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  121. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  122. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  123. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  124. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  125. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  126. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  127. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  128. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  129. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  130. claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
  131. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  132. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
  133. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  134. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  135. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  136. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  137. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  138. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  139. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  140. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  141. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  142. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  143. claude_mpm/dashboard/static/js/socket-client.js +120 -54
  144. claude_mpm/dashboard/templates/index.html +40 -50
  145. claude_mpm/experimental/cli_enhancements.py +60 -58
  146. claude_mpm/generators/__init__.py +1 -1
  147. claude_mpm/generators/agent_profile_generator.py +75 -65
  148. claude_mpm/hooks/__init__.py +1 -1
  149. claude_mpm/hooks/base_hook.py +33 -28
  150. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  151. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  152. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  153. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  154. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  155. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  156. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  157. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  158. claude_mpm/hooks/memory_integration_hook.py +140 -100
  159. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  160. claude_mpm/hooks/validation_hooks.py +57 -49
  161. claude_mpm/init.py +145 -121
  162. claude_mpm/models/__init__.py +9 -9
  163. claude_mpm/models/agent_definition.py +33 -23
  164. claude_mpm/models/agent_session.py +228 -200
  165. claude_mpm/scripts/__init__.py +1 -1
  166. claude_mpm/scripts/socketio_daemon.py +192 -75
  167. claude_mpm/scripts/socketio_server_manager.py +328 -0
  168. claude_mpm/scripts/start_activity_logging.py +25 -22
  169. claude_mpm/services/__init__.py +68 -43
  170. claude_mpm/services/agent_capabilities_service.py +271 -0
  171. claude_mpm/services/agents/__init__.py +23 -32
  172. claude_mpm/services/agents/deployment/__init__.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  174. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  175. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  176. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  177. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  178. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  179. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  180. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  181. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  182. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  183. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  184. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  185. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  186. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  187. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  188. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  189. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  190. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  191. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  192. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  193. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  194. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  195. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  196. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  197. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  198. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  199. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  200. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  201. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  202. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  203. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  204. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  205. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  206. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  207. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  208. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  209. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  210. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  211. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  212. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  213. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  214. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  215. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  216. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  217. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  218. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  219. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  220. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  221. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  222. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  223. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  224. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  225. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  226. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  227. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  228. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  229. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  230. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  231. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  232. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  233. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  234. claude_mpm/services/agents/loading/__init__.py +2 -2
  235. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  236. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  237. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  238. claude_mpm/services/agents/management/__init__.py +2 -2
  239. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  240. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  241. claude_mpm/services/agents/memory/__init__.py +9 -6
  242. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  243. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  244. claude_mpm/services/agents/memory/analyzer.py +430 -0
  245. claude_mpm/services/agents/memory/content_manager.py +376 -0
  246. claude_mpm/services/agents/memory/template_generator.py +468 -0
  247. claude_mpm/services/agents/registry/__init__.py +7 -10
  248. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  249. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  250. claude_mpm/services/async_session_logger.py +187 -153
  251. claude_mpm/services/claude_session_logger.py +87 -72
  252. claude_mpm/services/command_handler_service.py +217 -0
  253. claude_mpm/services/communication/__init__.py +3 -2
  254. claude_mpm/services/core/__init__.py +50 -97
  255. claude_mpm/services/core/base.py +60 -53
  256. claude_mpm/services/core/interfaces/__init__.py +188 -0
  257. claude_mpm/services/core/interfaces/agent.py +351 -0
  258. claude_mpm/services/core/interfaces/communication.py +343 -0
  259. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  260. claude_mpm/services/core/interfaces/service.py +434 -0
  261. claude_mpm/services/core/interfaces.py +19 -944
  262. claude_mpm/services/event_aggregator.py +208 -170
  263. claude_mpm/services/exceptions.py +387 -308
  264. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  265. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  266. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  267. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  268. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  269. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  270. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  271. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  272. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  273. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  274. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  275. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  276. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  277. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  278. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  279. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  280. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  281. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  282. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  283. claude_mpm/services/hook_service.py +106 -114
  284. claude_mpm/services/infrastructure/__init__.py +7 -5
  285. claude_mpm/services/infrastructure/context_preservation.py +571 -0
  286. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  287. claude_mpm/services/infrastructure/logging.py +83 -76
  288. claude_mpm/services/infrastructure/monitoring.py +547 -404
  289. claude_mpm/services/mcp_gateway/__init__.py +40 -23
  290. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  291. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  292. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  293. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  294. claude_mpm/services/mcp_gateway/core/__init__.py +14 -21
  295. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  296. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  297. claude_mpm/services/mcp_gateway/core/interfaces.py +97 -93
  298. claude_mpm/services/mcp_gateway/main.py +307 -127
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
  303. claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
  304. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  305. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  306. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  307. claude_mpm/services/mcp_gateway/tools/base_adapter.py +110 -121
  308. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  309. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  310. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  311. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  312. claude_mpm/services/memory/__init__.py +2 -2
  313. claude_mpm/services/memory/builder.py +451 -362
  314. claude_mpm/services/memory/cache/__init__.py +2 -2
  315. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  316. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  317. claude_mpm/services/memory/indexed_memory.py +195 -193
  318. claude_mpm/services/memory/optimizer.py +267 -234
  319. claude_mpm/services/memory/router.py +571 -263
  320. claude_mpm/services/memory_hook_service.py +237 -0
  321. claude_mpm/services/port_manager.py +223 -0
  322. claude_mpm/services/project/__init__.py +3 -3
  323. claude_mpm/services/project/analyzer.py +451 -305
  324. claude_mpm/services/project/registry.py +262 -240
  325. claude_mpm/services/recovery_manager.py +287 -231
  326. claude_mpm/services/response_tracker.py +87 -67
  327. claude_mpm/services/runner_configuration_service.py +587 -0
  328. claude_mpm/services/session_management_service.py +304 -0
  329. claude_mpm/services/socketio/__init__.py +4 -4
  330. claude_mpm/services/socketio/client_proxy.py +174 -0
  331. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  332. claude_mpm/services/socketio/handlers/base.py +44 -30
  333. claude_mpm/services/socketio/handlers/connection.py +145 -65
  334. claude_mpm/services/socketio/handlers/file.py +123 -108
  335. claude_mpm/services/socketio/handlers/git.py +607 -373
  336. claude_mpm/services/socketio/handlers/hook.py +170 -0
  337. claude_mpm/services/socketio/handlers/memory.py +4 -4
  338. claude_mpm/services/socketio/handlers/project.py +4 -4
  339. claude_mpm/services/socketio/handlers/registry.py +53 -38
  340. claude_mpm/services/socketio/server/__init__.py +18 -0
  341. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  342. claude_mpm/services/socketio/server/core.py +399 -0
  343. claude_mpm/services/socketio/server/main.py +323 -0
  344. claude_mpm/services/socketio_client_manager.py +160 -133
  345. claude_mpm/services/socketio_server.py +36 -1885
  346. claude_mpm/services/subprocess_launcher_service.py +316 -0
  347. claude_mpm/services/system_instructions_service.py +258 -0
  348. claude_mpm/services/ticket_manager.py +20 -534
  349. claude_mpm/services/utility_service.py +285 -0
  350. claude_mpm/services/version_control/__init__.py +18 -21
  351. claude_mpm/services/version_control/branch_strategy.py +20 -10
  352. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  353. claude_mpm/services/version_control/git_operations.py +52 -21
  354. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  355. claude_mpm/services/version_control/version_parser.py +145 -125
  356. claude_mpm/services/version_service.py +270 -0
  357. claude_mpm/storage/__init__.py +9 -0
  358. claude_mpm/storage/state_storage.py +552 -0
  359. claude_mpm/ticket_wrapper.py +2 -2
  360. claude_mpm/utils/__init__.py +2 -2
  361. claude_mpm/utils/agent_dependency_loader.py +453 -243
  362. claude_mpm/utils/config_manager.py +157 -118
  363. claude_mpm/utils/console.py +1 -1
  364. claude_mpm/utils/dependency_cache.py +102 -107
  365. claude_mpm/utils/dependency_manager.py +52 -47
  366. claude_mpm/utils/dependency_strategies.py +131 -96
  367. claude_mpm/utils/environment_context.py +110 -102
  368. claude_mpm/utils/error_handler.py +75 -55
  369. claude_mpm/utils/file_utils.py +80 -67
  370. claude_mpm/utils/framework_detection.py +12 -11
  371. claude_mpm/utils/import_migration_example.py +12 -60
  372. claude_mpm/utils/imports.py +48 -45
  373. claude_mpm/utils/path_operations.py +100 -93
  374. claude_mpm/utils/robust_installer.py +172 -164
  375. claude_mpm/utils/session_logging.py +30 -23
  376. claude_mpm/utils/subprocess_utils.py +99 -61
  377. claude_mpm/validation/__init__.py +1 -1
  378. claude_mpm/validation/agent_validator.py +151 -111
  379. claude_mpm/validation/frontmatter_validator.py +92 -71
  380. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/config/memory_guardian_config.py +0 -325
  385. claude_mpm/core/config_paths.py +0 -150
  386. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  387. claude_mpm/deployment_paths.py +0 -261
  388. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  389. claude_mpm/models/state_models.py +0 -433
  390. claude_mpm/services/agent/__init__.py +0 -24
  391. claude_mpm/services/agent/deployment.py +0 -2548
  392. claude_mpm/services/agent/management.py +0 -598
  393. claude_mpm/services/agent/registry.py +0 -813
  394. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  395. claude_mpm/services/communication/socketio.py +0 -1935
  396. claude_mpm/services/communication/websocket.py +0 -479
  397. claude_mpm/services/framework_claude_md_generator.py +0 -624
  398. claude_mpm/services/health_monitor.py +0 -893
  399. claude_mpm/services/infrastructure/memory_guardian.py +0 -770
  400. claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
  401. claude_mpm/services/optimized_hook_service.py +0 -542
  402. claude_mpm/services/project_analyzer.py +0 -864
  403. claude_mpm/services/project_registry.py +0 -608
  404. claude_mpm/services/standalone_socketio_server.py +0 -1300
  405. claude_mpm/services/ticket_manager_di.py +0 -318
  406. claude_mpm/services/ticketing_service_original.py +0 -510
  407. claude_mpm/utils/paths.py +0 -395
  408. claude_mpm/utils/platform_memory.py +0 -524
  409. claude_mpm-3.9.9.dist-info/RECORD +0 -293
  410. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  411. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -1,624 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Framework INSTRUCTIONS.md Generator Service - Consolidated Module
4
- ===============================================================
5
-
6
- This service provides structured generation of the framework INSTRUCTIONS.md template
7
- (legacy: CLAUDE.md) with auto-versioning, section management, and deployment capabilities.
8
-
9
- This is a consolidated version combining all functionality from the previous
10
- multi-file implementation for better maintainability.
11
- """
12
-
13
- import os
14
- import shutil
15
- import logging
16
- from datetime import datetime
17
- from pathlib import Path
18
- from typing import Dict, Optional, Any, List, Tuple, Callable
19
- from dataclasses import dataclass, field
20
-
21
- from claude_mpm.core.config_paths import ConfigPaths
22
- from claude_mpm.core.constants import SystemLimits
23
-
24
- logger = logging.getLogger(__name__)
25
-
26
-
27
- # ============================================================================
28
- # Data Models
29
- # ============================================================================
30
-
31
- @dataclass
32
- class SectionContent:
33
- """Represents a section of the INSTRUCTIONS.md file."""
34
- id: str
35
- title: str
36
- content: str
37
- order: int
38
- required: bool = True
39
- metadata: Dict[str, Any] = field(default_factory=dict)
40
-
41
-
42
- @dataclass
43
- class ValidationResult:
44
- """Results from content validation."""
45
- is_valid: bool
46
- errors: List[str] = field(default_factory=list)
47
- warnings: List[str] = field(default_factory=list)
48
- suggestions: List[str] = field(default_factory=list)
49
-
50
-
51
- # ============================================================================
52
- # Section Generators
53
- # ============================================================================
54
-
55
- class SectionGenerators:
56
- """All section generators in a single class for maintainability."""
57
-
58
- @staticmethod
59
- def generate_header(version: str, **kwargs) -> str:
60
- """Generate the header section."""
61
- return f"""# Multi-Agent Project Management Framework v{version}
62
- ## INSTRUCTIONS.md - Claude PM Orchestrator Agent
63
- Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
64
- """
65
-
66
- @staticmethod
67
- def generate_claude_pm_init(**kwargs) -> str:
68
- """Generate Claude PM initialization section."""
69
- return """## Claude PM Initialization
70
-
71
- You are the Claude PM (Project Manager) orchestrator agent. Your primary role is to:
72
-
73
- 1. **Orchestrate Multi-Agent Workflows**: Delegate tasks to specialized agents based on their expertise
74
- 2. **Maintain Project Context**: Keep track of project state, goals, and progress
75
- 3. **Ensure Quality**: Monitor agent outputs and ensure they meet project standards
76
- 4. **Coordinate Communication**: Facilitate information flow between agents
77
-
78
- ### Key Responsibilities:
79
- - Analyze incoming requests and determine appropriate agent delegation
80
- - Monitor subprocess execution and handle results
81
- - Maintain project consistency across agent boundaries
82
- - Provide clear, actionable feedback to users
83
- """
84
-
85
- @staticmethod
86
- def generate_role_designation(**kwargs) -> str:
87
- """Generate role designation section."""
88
- return """## Role Designation
89
-
90
- As the PM orchestrator, you have access to the following specialized agents:
91
-
92
- ### Core Agents:
93
- - **Engineer**: Code implementation, debugging, refactoring
94
- - **Architect**: System design, technical architecture, scalability
95
- - **QA**: Testing, quality assurance, test automation
96
- - **Security**: Security analysis, vulnerability assessment
97
- - **Documentation**: Technical writing, API docs, user guides
98
- - **Ops**: DevOps, deployment, infrastructure
99
- - **Data**: Data engineering, analytics, database design
100
- - **Research**: Technical research, feasibility studies
101
- - **Version Control**: Git operations, branching strategies
102
-
103
- ### Specialized Agents:
104
- - Additional domain-specific agents available based on project needs
105
- """
106
-
107
- @staticmethod
108
- def generate_core_responsibilities(**kwargs) -> str:
109
- """Generate core responsibilities section."""
110
- return """## Core Responsibilities
111
-
112
- ### 1. Request Analysis
113
- - Parse and understand user requirements
114
- - Identify required expertise and resources
115
- - Determine optimal agent delegation strategy
116
-
117
- ### 2. Agent Delegation
118
- - Select appropriate agents based on task requirements
119
- - Prepare clear, specific instructions for each agent
120
- - Use subprocess execution for agent tasks
121
-
122
- ### 3. Result Synthesis
123
- - Collect and validate agent outputs
124
- - Ensure consistency across deliverables
125
- - Present cohesive results to users
126
-
127
- ### 4. Quality Assurance
128
- - Monitor agent performance
129
- - Validate outputs meet requirements
130
- - Request revisions when necessary
131
- """
132
-
133
- @staticmethod
134
- def generate_orchestration_principles(**kwargs) -> str:
135
- """Generate orchestration principles section."""
136
- return """## Orchestration Principles
137
-
138
- ### Delegation Guidelines:
139
- 1. **Single Responsibility**: Each agent handles their domain expertise
140
- 2. **Clear Instructions**: Provide specific, actionable tasks
141
- 3. **Context Preservation**: Pass necessary context between agents
142
- 4. **Result Validation**: Verify outputs before presenting to users
143
-
144
- ### Communication Protocol:
145
- - Use structured task definitions
146
- - Include success criteria in delegations
147
- - Request specific output formats
148
- - Handle errors gracefully
149
- """
150
-
151
- @staticmethod
152
- def generate_delegation_constraints(**kwargs) -> str:
153
- """Generate delegation constraints section."""
154
- return """## Delegation Constraints
155
-
156
- ### Never Delegate:
157
- - User authentication/authorization decisions
158
- - Sensitive data handling without oversight
159
- - Direct production deployments
160
- - Financial or legal decisions
161
-
162
- ### Always Delegate:
163
- - Domain-specific implementation tasks
164
- - Technical analysis requiring expertise
165
- - Large-scale code generation
166
- - Specialized testing scenarios
167
- """
168
-
169
- @staticmethod
170
- def generate_subprocess_validation(**kwargs) -> str:
171
- """Generate subprocess validation section."""
172
- return """## Subprocess Validation
173
-
174
- ### Pre-Delegation Checks:
175
- 1. Validate agent availability
176
- 2. Ensure task is within agent capabilities
177
- 3. Verify resource requirements
178
- 4. Check for circular dependencies
179
-
180
- ### Post-Execution Validation:
181
- 1. Verify subprocess completed successfully
182
- 2. Validate output format and content
183
- 3. Check for errors or warnings
184
- 4. Ensure deliverables meet requirements
185
-
186
- ### Error Handling:
187
- - Capture and log subprocess errors
188
- - Provide meaningful error messages
189
- - Suggest alternatives when agents fail
190
- - Maintain graceful degradation
191
- """
192
-
193
- @staticmethod
194
- def generate_agents(agent_profiles: Optional[List[Dict]] = None, **kwargs) -> str:
195
- """Generate comprehensive agents section."""
196
- if not agent_profiles:
197
- # Default agent profiles
198
- agent_profiles = [
199
- {
200
- "name": "Engineer",
201
- "role": "Software Engineering Expert",
202
- "capabilities": [
203
- "Code implementation in multiple languages",
204
- "Debugging and troubleshooting",
205
- "Performance optimization",
206
- "Code refactoring"
207
- ]
208
- },
209
- {
210
- "name": "Architect",
211
- "role": "System Architecture Expert",
212
- "capabilities": [
213
- "System design and architecture",
214
- "Technology selection",
215
- "Scalability planning",
216
- "Integration design"
217
- ]
218
- },
219
- # Add more default profiles as needed
220
- ]
221
-
222
- content = "## Available Agents\n\n"
223
-
224
- for profile in agent_profiles:
225
- content += f"### {profile['name']} Agent\n"
226
- content += f"**Role**: {profile['role']}\n\n"
227
- content += "**Capabilities**:\n"
228
- for capability in profile.get('capabilities', []):
229
- content += f"- {capability}\n"
230
- content += "\n"
231
-
232
- return content
233
-
234
- @staticmethod
235
- def generate_todo_task_tools(**kwargs) -> str:
236
- """Generate todo/task tools section."""
237
- return """## Task Management Tools
238
-
239
- ### TodoWrite Tool
240
- Use the TodoWrite tool to manage task lists and track progress:
241
- - Create structured task lists for complex workflows
242
- - Track task status (pending, in_progress, completed)
243
- - Organize multi-step operations
244
- - Demonstrate thoroughness to users
245
-
246
- **CRITICAL TodoWrite Requirement**:
247
- - **ALWAYS** prefix each todo item with [Agent] to indicate delegation target
248
- - Examples: [Research], [Engineer], [QA], [Security], [Documentation], [Ops], [Version Control]
249
- - This ensures proper task attribution and tracking across the multi-agent system
250
- - The system will automatically validate and enforce this requirement
251
-
252
- ### Task Tool (Subprocess Execution)
253
- The Task tool enables subprocess delegation:
254
- - Execute specialized agent tasks
255
- - Run isolated operations
256
- - Maintain clean execution contexts
257
- - Handle long-running operations
258
-
259
- ### Usage Guidelines:
260
- 1. Use TodoWrite for task planning and tracking with [Agent] prefixes
261
- 2. Use Task tool for actual agent delegation
262
- 3. Update todo items as tasks complete
263
- 4. Maintain clear task descriptions with proper agent attribution
264
- """
265
-
266
- @staticmethod
267
- def generate_environment_config(**kwargs) -> str:
268
- """Generate environment configuration section."""
269
- return """## Environment Configuration
270
-
271
- ### Working Directory Structure:
272
- - Maintain awareness of project structure
273
- - Respect existing file organization
274
- - Create new directories only when necessary
275
- - Follow project conventions
276
-
277
- ### Resource Management:
278
- - Monitor subprocess resource usage
279
- - Implement timeouts for long operations
280
- - Clean up temporary resources
281
- - Handle resource conflicts gracefully
282
- """
283
-
284
- @staticmethod
285
- def generate_troubleshooting(**kwargs) -> str:
286
- """Generate troubleshooting section."""
287
- return """## Troubleshooting Guide
288
-
289
- ### Common Issues:
290
-
291
- 1. **Agent Not Found**
292
- - Verify agent name spelling
293
- - Check agent availability
294
- - Use fallback strategies
295
-
296
- 2. **Subprocess Timeout**
297
- - Increase timeout for complex tasks
298
- - Break down large operations
299
- - Monitor resource usage
300
-
301
- 3. **Output Validation Failure**
302
- - Review agent instructions
303
- - Check output format requirements
304
- - Request clarification if needed
305
-
306
- 4. **Context Loss**
307
- - Maintain explicit context passing
308
- - Use structured data formats
309
- - Implement checkpoints
310
- """
311
-
312
- @staticmethod
313
- def generate_footer(version: str, **kwargs) -> str:
314
- """Generate footer section."""
315
- return f"""
316
- ---
317
- Framework Version: {version}
318
- Last Updated: {datetime.now().strftime('%Y-%m-%d')}
319
- """
320
-
321
-
322
- # ============================================================================
323
- # Main Generator Class
324
- # ============================================================================
325
-
326
- class FrameworkClaudeMdGenerator:
327
- """
328
- Generates and manages the framework INSTRUCTIONS.md template (legacy: CLAUDE.md)
329
- with structured sections, auto-versioning, and deployment capabilities.
330
-
331
- This consolidated version combines all functionality into a single module.
332
- """
333
-
334
- def __init__(self):
335
- """Initialize the generator with current framework version."""
336
- self.framework_version = self._detect_framework_version()
337
- self.sections: List[SectionContent] = []
338
- self.section_generators = SectionGenerators()
339
-
340
- # Deployment paths
341
- self.framework_root = self._find_framework_root()
342
- self.deployment_targets = {
343
- 'framework': self.framework_root / 'INSTRUCTIONS.md' if self.framework_root else None,
344
- 'user': ConfigPaths.get_user_config_dir() / 'INSTRUCTIONS.md',
345
- 'project': Path.cwd() / 'INSTRUCTIONS.md'
346
- }
347
-
348
- # Initialize default sections
349
- self._initialize_sections()
350
-
351
- logger.info(f"FrameworkClaudeMdGenerator initialized with version {self.framework_version}")
352
-
353
- def _detect_framework_version(self) -> str:
354
- """Detect the current framework version."""
355
- # Try multiple locations for VERSION file
356
- version_locations = [
357
- Path(__file__).parent.parent / 'framework' / 'VERSION',
358
- Path.cwd() / 'framework' / 'VERSION',
359
- ConfigPaths.get_user_config_dir() / 'VERSION'
360
- ]
361
-
362
- for version_file in version_locations:
363
- if version_file.exists():
364
- try:
365
- return version_file.read_text().strip()
366
- except Exception:
367
- pass
368
-
369
- # Default version
370
- return "1.0.0"
371
-
372
- def _find_framework_root(self) -> Optional[Path]:
373
- """Find the framework root directory."""
374
- possible_roots = [
375
- Path(__file__).parent.parent / 'framework',
376
- Path.cwd() / 'framework',
377
- Path.cwd() / 'src' / 'claude_mpm' / 'framework'
378
- ]
379
-
380
- for root in possible_roots:
381
- if root.exists():
382
- return root
383
-
384
- return None
385
-
386
- def _initialize_sections(self) -> None:
387
- """Initialize all sections in the required order."""
388
- section_configs = [
389
- ("header", "Header", self.section_generators.generate_header, True),
390
- ("claude_pm_init", "Claude PM Initialization", self.section_generators.generate_claude_pm_init, True),
391
- ("role_designation", "Role Designation", self.section_generators.generate_role_designation, True),
392
- ("core_responsibilities", "Core Responsibilities", self.section_generators.generate_core_responsibilities, True),
393
- ("orchestration_principles", "Orchestration Principles", self.section_generators.generate_orchestration_principles, True),
394
- ("delegation_constraints", "Delegation Constraints", self.section_generators.generate_delegation_constraints, True),
395
- ("subprocess_validation", "Subprocess Validation", self.section_generators.generate_subprocess_validation, True),
396
- ("agents", "Available Agents", self.section_generators.generate_agents, True),
397
- ("todo_task_tools", "Task Management Tools", self.section_generators.generate_todo_task_tools, True),
398
- ("environment_config", "Environment Configuration", self.section_generators.generate_environment_config, False),
399
- ("troubleshooting", "Troubleshooting Guide", self.section_generators.generate_troubleshooting, False),
400
- ("footer", "Footer", self.section_generators.generate_footer, True)
401
- ]
402
-
403
- for order, (section_id, title, generator, required) in enumerate(section_configs):
404
- self.add_section(section_id, title, generator, order, required)
405
-
406
- def add_section(self, section_id: str, title: str,
407
- generator: Callable, order: int, required: bool = True) -> None:
408
- """Add a section to the generator."""
409
- section = SectionContent(
410
- id=section_id,
411
- title=title,
412
- content="", # Will be generated
413
- order=order,
414
- required=required
415
- )
416
- self.sections.append(section)
417
-
418
- # Store generator reference
419
- section.metadata['generator'] = generator
420
-
421
- def generate_content(self, include_optional: bool = True,
422
- custom_data: Optional[Dict[str, Any]] = None) -> str:
423
- """Generate the complete INSTRUCTIONS.md content."""
424
- content_parts = []
425
- custom_data = custom_data or {}
426
-
427
- # Sort sections by order
428
- sorted_sections = sorted(self.sections, key=lambda s: s.order)
429
-
430
- for section in sorted_sections:
431
- # Skip optional sections if not included
432
- if not section.required and not include_optional:
433
- continue
434
-
435
- # Generate section content
436
- generator = section.metadata.get('generator')
437
- if generator:
438
- section_content = generator(
439
- version=self.framework_version,
440
- **custom_data
441
- )
442
- section.content = section_content
443
- content_parts.append(section_content)
444
-
445
- return "\n".join(content_parts)
446
-
447
- def validate_content(self, content: str) -> ValidationResult:
448
- """Validate generated content."""
449
- errors = []
450
- warnings = []
451
- suggestions = []
452
-
453
- # Check minimum length
454
- if len(content) < SystemLimits.MIN_CONTENT_LENGTH:
455
- errors.append(f"Content seems too short (minimum {SystemLimits.MIN_CONTENT_LENGTH} characters)")
456
-
457
- # Check for required sections
458
- required_sections = [
459
- "Claude PM Initialization",
460
- "Role Designation",
461
- "Core Responsibilities"
462
- ]
463
-
464
- for required in required_sections:
465
- if required not in content:
466
- errors.append(f"Missing required section: {required}")
467
-
468
- # Check for version
469
- if self.framework_version not in content:
470
- warnings.append("Framework version not found in content")
471
-
472
- # Structure validation
473
- if content.count('#') < 5:
474
- warnings.append("Content may lack proper structure (too few headers)")
475
-
476
- # Suggestions
477
- if "```" not in content:
478
- suggestions.append("Consider adding code examples")
479
-
480
- return ValidationResult(
481
- is_valid=len(errors) == 0,
482
- errors=errors,
483
- warnings=warnings,
484
- suggestions=suggestions
485
- )
486
-
487
- def deploy(self, target: str = 'framework',
488
- backup: bool = True,
489
- validate: bool = True) -> Tuple[bool, str]:
490
- """Deploy generated content to target location."""
491
- if target not in self.deployment_targets:
492
- return False, f"Unknown deployment target: {target}"
493
-
494
- target_path = self.deployment_targets[target]
495
- if not target_path:
496
- return False, f"Target path for '{target}' not configured"
497
-
498
- # Generate content
499
- content = self.generate_content()
500
-
501
- # Validate if requested
502
- if validate:
503
- validation_result = self.validate_content(content)
504
- if not validation_result.is_valid:
505
- return False, f"Validation failed: {', '.join(validation_result.errors)}"
506
-
507
- # Create target directory if needed
508
- target_path.parent.mkdir(parents=True, exist_ok=True)
509
-
510
- # Backup existing file if requested
511
- if backup and target_path.exists():
512
- backup_path = target_path.with_suffix(f'.backup.{datetime.now().strftime("%Y%m%d_%H%M%S")}')
513
- shutil.copy2(target_path, backup_path)
514
- logger.info(f"Created backup: {backup_path}")
515
-
516
- # Write new content
517
- try:
518
- target_path.write_text(content)
519
- logger.info(f"Deployed to: {target_path}")
520
- return True, f"Successfully deployed to {target_path}"
521
- except Exception as e:
522
- return False, f"Deployment failed: {e}"
523
-
524
- def update_version(self, new_version: str) -> None:
525
- """Update the framework version."""
526
- self.framework_version = new_version
527
- logger.info(f"Updated framework version to {new_version}")
528
-
529
- def get_deployment_status(self) -> Dict[str, Any]:
530
- """Get deployment status for all targets."""
531
- status = {}
532
-
533
- for target, path in self.deployment_targets.items():
534
- if not path:
535
- status[target] = {'exists': False, 'accessible': False}
536
- continue
537
-
538
- status[target] = {
539
- 'exists': path.exists(),
540
- 'accessible': path.parent.exists() and os.access(path.parent, os.W_OK),
541
- 'path': str(path)
542
- }
543
-
544
- if path.exists():
545
- stat = path.stat()
546
- status[target].update({
547
- 'size': stat.st_size,
548
- 'modified': datetime.fromtimestamp(stat.st_mtime).isoformat()
549
- })
550
-
551
- return status
552
-
553
- def export_template(self, output_path: Path,
554
- format: str = 'markdown') -> bool:
555
- """Export template to specified path and format."""
556
- content = self.generate_content()
557
-
558
- try:
559
- if format == 'markdown':
560
- output_path.write_text(content)
561
- elif format == 'html':
562
- # Simple markdown to HTML conversion
563
- import re
564
- html_content = content
565
- # Convert headers
566
- html_content = re.sub(r'^### (.+)$', r'<h3>\1</h3>', html_content, flags=re.MULTILINE)
567
- html_content = re.sub(r'^## (.+)$', r'<h2>\1</h2>', html_content, flags=re.MULTILINE)
568
- html_content = re.sub(r'^# (.+)$', r'<h1>\1</h1>', html_content, flags=re.MULTILINE)
569
- # Convert lists
570
- html_content = re.sub(r'^- (.+)$', r'<li>\1</li>', html_content, flags=re.MULTILINE)
571
- # Wrap in basic HTML
572
- html_content = f"""<!DOCTYPE html>
573
- <html>
574
- <head>
575
- <title>Framework INSTRUCTIONS.md</title>
576
- <style>
577
- body {{ font-family: Arial, sans-serif; margin: 40px; }}
578
- h1, h2, h3 {{ color: #333; }}
579
- code {{ background: #f4f4f4; padding: 2px 4px; }}
580
- </style>
581
- </head>
582
- <body>
583
- {html_content}
584
- </body>
585
- </html>"""
586
- output_path.write_text(html_content)
587
- else:
588
- return False
589
-
590
- logger.info(f"Exported template to {output_path} as {format}")
591
- return True
592
-
593
- except Exception as e:
594
- logger.error(f"Export failed: {e}")
595
- return False
596
-
597
- def get_section_by_id(self, section_id: str) -> Optional[SectionContent]:
598
- """Get a specific section by ID."""
599
- for section in self.sections:
600
- if section.id == section_id:
601
- return section
602
- return None
603
-
604
- def update_section_content(self, section_id: str, new_content: str) -> bool:
605
- """Update content for a specific section."""
606
- section = self.get_section_by_id(section_id)
607
- if section:
608
- section.content = new_content
609
- return True
610
- return False
611
-
612
- def get_statistics(self) -> Dict[str, Any]:
613
- """Get generator statistics."""
614
- content = self.generate_content()
615
-
616
- return {
617
- 'framework_version': self.framework_version,
618
- 'total_sections': len(self.sections),
619
- 'required_sections': len([s for s in self.sections if s.required]),
620
- 'optional_sections': len([s for s in self.sections if not s.required]),
621
- 'content_length': len(content),
622
- 'line_count': content.count('\n'),
623
- 'deployment_targets': list(self.deployment_targets.keys())
624
- }