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.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +2 -2
- claude_mpm/__main__.py +3 -2
- claude_mpm/agents/__init__.py +85 -79
- claude_mpm/agents/agent_loader.py +464 -1003
- claude_mpm/agents/agent_loader_integration.py +45 -45
- claude_mpm/agents/agents_metadata.py +29 -30
- claude_mpm/agents/async_agent_loader.py +156 -138
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/base_agent_loader.py +179 -151
- claude_mpm/agents/frontmatter_validator.py +229 -130
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +213 -147
- claude_mpm/agents/templates/__init__.py +13 -13
- claude_mpm/agents/templates/code_analyzer.json +2 -2
- claude_mpm/agents/templates/data_engineer.json +1 -1
- claude_mpm/agents/templates/documentation.json +23 -11
- claude_mpm/agents/templates/engineer.json +22 -6
- claude_mpm/agents/templates/memory_manager.json +155 -0
- claude_mpm/agents/templates/ops.json +2 -2
- claude_mpm/agents/templates/project_organizer.json +1 -1
- claude_mpm/agents/templates/qa.json +1 -1
- claude_mpm/agents/templates/refactoring_engineer.json +222 -0
- claude_mpm/agents/templates/research.json +20 -14
- claude_mpm/agents/templates/security.json +1 -1
- claude_mpm/agents/templates/ticketing.json +1 -1
- claude_mpm/agents/templates/version_control.json +1 -1
- claude_mpm/agents/templates/web_qa.json +3 -1
- claude_mpm/agents/templates/web_ui.json +2 -2
- claude_mpm/cli/__init__.py +90 -49
- claude_mpm/cli/__main__.py +3 -2
- claude_mpm/cli/commands/__init__.py +21 -18
- claude_mpm/cli/commands/agents.py +279 -247
- claude_mpm/cli/commands/aggregate.py +138 -157
- claude_mpm/cli/commands/cleanup.py +147 -147
- claude_mpm/cli/commands/config.py +93 -76
- claude_mpm/cli/commands/info.py +17 -16
- claude_mpm/cli/commands/mcp.py +143 -762
- claude_mpm/cli/commands/mcp_command_router.py +139 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_install_commands.py +20 -0
- claude_mpm/cli/commands/mcp_server_commands.py +175 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +239 -203
- claude_mpm/cli/commands/monitor.py +203 -81
- claude_mpm/cli/commands/run.py +380 -429
- claude_mpm/cli/commands/run_config_checker.py +160 -0
- claude_mpm/cli/commands/socketio_monitor.py +235 -0
- claude_mpm/cli/commands/tickets.py +305 -197
- claude_mpm/cli/parser.py +24 -1150
- claude_mpm/cli/parsers/__init__.py +29 -0
- claude_mpm/cli/parsers/agents_parser.py +136 -0
- claude_mpm/cli/parsers/base_parser.py +331 -0
- claude_mpm/cli/parsers/config_parser.py +85 -0
- claude_mpm/cli/parsers/mcp_parser.py +152 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +104 -0
- claude_mpm/cli/parsers/run_parser.py +147 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/ticket_cli.py +7 -3
- claude_mpm/cli/utils.py +55 -37
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +38 -60
- claude_mpm/config/__init__.py +32 -25
- claude_mpm/config/agent_config.py +151 -119
- claude_mpm/config/experimental_features.py +217 -0
- claude_mpm/config/paths.py +94 -208
- claude_mpm/config/socketio_config.py +84 -73
- claude_mpm/constants.py +36 -18
- claude_mpm/core/__init__.py +9 -6
- claude_mpm/core/agent_name_normalizer.py +68 -71
- claude_mpm/core/agent_registry.py +372 -521
- claude_mpm/core/agent_session_manager.py +74 -63
- claude_mpm/core/base_service.py +116 -87
- claude_mpm/core/cache.py +119 -153
- claude_mpm/core/claude_runner.py +425 -1120
- claude_mpm/core/config.py +263 -168
- claude_mpm/core/config_aliases.py +69 -61
- claude_mpm/core/config_constants.py +292 -0
- claude_mpm/core/constants.py +57 -99
- claude_mpm/core/container.py +211 -178
- claude_mpm/core/exceptions.py +233 -89
- claude_mpm/core/factories.py +92 -54
- claude_mpm/core/framework_loader.py +378 -220
- claude_mpm/core/hook_manager.py +198 -83
- claude_mpm/core/hook_performance_config.py +136 -0
- claude_mpm/core/injectable_service.py +61 -55
- claude_mpm/core/interactive_session.py +165 -155
- claude_mpm/core/interfaces.py +221 -195
- claude_mpm/core/lazy.py +96 -96
- claude_mpm/core/logger.py +133 -107
- claude_mpm/core/logging_config.py +185 -157
- claude_mpm/core/minimal_framework_loader.py +20 -15
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +215 -181
- claude_mpm/core/optimized_agent_loader.py +134 -138
- claude_mpm/core/optimized_startup.py +159 -157
- claude_mpm/core/pm_hook_interceptor.py +85 -72
- claude_mpm/core/service_registry.py +103 -101
- claude_mpm/core/session_manager.py +97 -87
- claude_mpm/core/socketio_pool.py +212 -158
- claude_mpm/core/tool_access_control.py +58 -51
- claude_mpm/core/types.py +46 -24
- claude_mpm/core/typing_utils.py +166 -82
- claude_mpm/core/unified_agent_registry.py +721 -0
- claude_mpm/core/unified_config.py +550 -0
- claude_mpm/core/unified_paths.py +549 -0
- claude_mpm/dashboard/index.html +1 -1
- claude_mpm/dashboard/open_dashboard.py +51 -17
- claude_mpm/dashboard/static/css/dashboard.css +27 -8
- claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
- claude_mpm/dashboard/static/dist/dashboard.js +2 -0
- claude_mpm/dashboard/static/dist/socket-client.js +2 -0
- claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
- claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
- claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
- claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
- claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
- claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
- claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
- claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
- claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
- claude_mpm/dashboard/static/js/dashboard.js +178 -453
- claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/js/socket-client.js +120 -54
- claude_mpm/dashboard/templates/index.html +40 -50
- claude_mpm/experimental/cli_enhancements.py +60 -58
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +75 -65
- claude_mpm/hooks/__init__.py +1 -1
- claude_mpm/hooks/base_hook.py +33 -28
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
- claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
- claude_mpm/hooks/memory_integration_hook.py +140 -100
- claude_mpm/hooks/tool_call_interceptor.py +89 -76
- claude_mpm/hooks/validation_hooks.py +57 -49
- claude_mpm/init.py +145 -121
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +33 -23
- claude_mpm/models/agent_session.py +228 -200
- claude_mpm/scripts/__init__.py +1 -1
- claude_mpm/scripts/socketio_daemon.py +192 -75
- claude_mpm/scripts/socketio_server_manager.py +328 -0
- claude_mpm/scripts/start_activity_logging.py +25 -22
- claude_mpm/services/__init__.py +68 -43
- claude_mpm/services/agent_capabilities_service.py +271 -0
- claude_mpm/services/agents/__init__.py +23 -32
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
- claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
- claude_mpm/services/agents/deployment/agent_validator.py +352 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
- claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
- claude_mpm/services/agents/loading/__init__.py +2 -2
- claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
- claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
- claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
- claude_mpm/services/agents/management/__init__.py +2 -2
- claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
- claude_mpm/services/agents/management/agent_management_service.py +209 -156
- claude_mpm/services/agents/memory/__init__.py +9 -6
- claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
- claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
- claude_mpm/services/agents/memory/analyzer.py +430 -0
- claude_mpm/services/agents/memory/content_manager.py +376 -0
- claude_mpm/services/agents/memory/template_generator.py +468 -0
- claude_mpm/services/agents/registry/__init__.py +7 -10
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
- claude_mpm/services/agents/registry/modification_tracker.py +351 -285
- claude_mpm/services/async_session_logger.py +187 -153
- claude_mpm/services/claude_session_logger.py +87 -72
- claude_mpm/services/command_handler_service.py +217 -0
- claude_mpm/services/communication/__init__.py +3 -2
- claude_mpm/services/core/__init__.py +50 -97
- claude_mpm/services/core/base.py +60 -53
- claude_mpm/services/core/interfaces/__init__.py +188 -0
- claude_mpm/services/core/interfaces/agent.py +351 -0
- claude_mpm/services/core/interfaces/communication.py +343 -0
- claude_mpm/services/core/interfaces/infrastructure.py +413 -0
- claude_mpm/services/core/interfaces/service.py +434 -0
- claude_mpm/services/core/interfaces.py +19 -944
- claude_mpm/services/event_aggregator.py +208 -170
- claude_mpm/services/exceptions.py +387 -308
- claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
- claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
- claude_mpm/services/hook_service.py +106 -114
- claude_mpm/services/infrastructure/__init__.py +7 -5
- claude_mpm/services/infrastructure/context_preservation.py +571 -0
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +83 -76
- claude_mpm/services/infrastructure/monitoring.py +547 -404
- claude_mpm/services/mcp_gateway/__init__.py +40 -23
- claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
- claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
- claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
- claude_mpm/services/mcp_gateway/core/__init__.py +14 -21
- claude_mpm/services/mcp_gateway/core/base.py +80 -67
- claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
- claude_mpm/services/mcp_gateway/core/interfaces.py +97 -93
- claude_mpm/services/mcp_gateway/main.py +307 -127
- claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
- claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
- claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
- claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
- claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +110 -121
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
- claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
- claude_mpm/services/memory/__init__.py +2 -2
- claude_mpm/services/memory/builder.py +451 -362
- claude_mpm/services/memory/cache/__init__.py +2 -2
- claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
- claude_mpm/services/memory/cache/simple_cache.py +107 -93
- claude_mpm/services/memory/indexed_memory.py +195 -193
- claude_mpm/services/memory/optimizer.py +267 -234
- claude_mpm/services/memory/router.py +571 -263
- claude_mpm/services/memory_hook_service.py +237 -0
- claude_mpm/services/port_manager.py +223 -0
- claude_mpm/services/project/__init__.py +3 -3
- claude_mpm/services/project/analyzer.py +451 -305
- claude_mpm/services/project/registry.py +262 -240
- claude_mpm/services/recovery_manager.py +287 -231
- claude_mpm/services/response_tracker.py +87 -67
- claude_mpm/services/runner_configuration_service.py +587 -0
- claude_mpm/services/session_management_service.py +304 -0
- claude_mpm/services/socketio/__init__.py +4 -4
- claude_mpm/services/socketio/client_proxy.py +174 -0
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +44 -30
- claude_mpm/services/socketio/handlers/connection.py +145 -65
- claude_mpm/services/socketio/handlers/file.py +123 -108
- claude_mpm/services/socketio/handlers/git.py +607 -373
- claude_mpm/services/socketio/handlers/hook.py +170 -0
- claude_mpm/services/socketio/handlers/memory.py +4 -4
- claude_mpm/services/socketio/handlers/project.py +4 -4
- claude_mpm/services/socketio/handlers/registry.py +53 -38
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +252 -0
- claude_mpm/services/socketio/server/core.py +399 -0
- claude_mpm/services/socketio/server/main.py +323 -0
- claude_mpm/services/socketio_client_manager.py +160 -133
- claude_mpm/services/socketio_server.py +36 -1885
- claude_mpm/services/subprocess_launcher_service.py +316 -0
- claude_mpm/services/system_instructions_service.py +258 -0
- claude_mpm/services/ticket_manager.py +20 -534
- claude_mpm/services/utility_service.py +285 -0
- claude_mpm/services/version_control/__init__.py +18 -21
- claude_mpm/services/version_control/branch_strategy.py +20 -10
- claude_mpm/services/version_control/conflict_resolution.py +37 -13
- claude_mpm/services/version_control/git_operations.py +52 -21
- claude_mpm/services/version_control/semantic_versioning.py +92 -53
- claude_mpm/services/version_control/version_parser.py +145 -125
- claude_mpm/services/version_service.py +270 -0
- claude_mpm/storage/__init__.py +9 -0
- claude_mpm/storage/state_storage.py +552 -0
- claude_mpm/ticket_wrapper.py +2 -2
- claude_mpm/utils/__init__.py +2 -2
- claude_mpm/utils/agent_dependency_loader.py +453 -243
- claude_mpm/utils/config_manager.py +157 -118
- claude_mpm/utils/console.py +1 -1
- claude_mpm/utils/dependency_cache.py +102 -107
- claude_mpm/utils/dependency_manager.py +52 -47
- claude_mpm/utils/dependency_strategies.py +131 -96
- claude_mpm/utils/environment_context.py +110 -102
- claude_mpm/utils/error_handler.py +75 -55
- claude_mpm/utils/file_utils.py +80 -67
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/path_operations.py +100 -93
- claude_mpm/utils/robust_installer.py +172 -164
- claude_mpm/utils/session_logging.py +30 -23
- claude_mpm/utils/subprocess_utils.py +99 -61
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +151 -111
- claude_mpm/validation/frontmatter_validator.py +92 -71
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
- claude_mpm-4.0.3.dist-info/RECORD +402 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
- claude_mpm/config/memory_guardian_config.py +0 -325
- claude_mpm/core/config_paths.py +0 -150
- claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
- claude_mpm/models/state_models.py +0 -433
- claude_mpm/services/agent/__init__.py +0 -24
- claude_mpm/services/agent/deployment.py +0 -2548
- claude_mpm/services/agent/management.py +0 -598
- claude_mpm/services/agent/registry.py +0 -813
- claude_mpm/services/agents/registry/agent_registry.py +0 -813
- claude_mpm/services/communication/socketio.py +0 -1935
- claude_mpm/services/communication/websocket.py +0 -479
- claude_mpm/services/framework_claude_md_generator.py +0 -624
- claude_mpm/services/health_monitor.py +0 -893
- claude_mpm/services/infrastructure/memory_guardian.py +0 -770
- claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
- claude_mpm/services/optimized_hook_service.py +0 -542
- claude_mpm/services/project_analyzer.py +0 -864
- claude_mpm/services/project_registry.py +0 -608
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -510
- claude_mpm/utils/paths.py +0 -395
- claude_mpm/utils/platform_memory.py +0 -524
- claude_mpm-3.9.9.dist-info/RECORD +0 -293
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
- {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 | 
            -
                    }
         |