claude-mpm 4.1.26__py3-none-any.whl → 5.0.9__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.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/BUILD_NUMBER +1 -1
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +20 -5
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
- claude_mpm/agents/BASE_DOCUMENTATION.md +53 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/BASE_OPS.md +219 -0
- claude_mpm/agents/BASE_PM.md +432 -158
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +787 -0
- claude_mpm/agents/BASE_QA.md +167 -0
- claude_mpm/agents/BASE_RESEARCH.md +53 -0
- claude_mpm/agents/OUTPUT_STYLE.md +254 -29
- claude_mpm/agents/PM_INSTRUCTIONS.md +969 -0
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +355 -191
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +41 -14
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/async_agent_loader.py +3 -3
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +21 -44
- claude_mpm/agents/frontmatter_validator.py +292 -252
- claude_mpm/agents/system_agent_config.py +3 -2
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/circuit-breakers.md +1005 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/git-file-tracking.md +584 -0
- claude_mpm/agents/templates/pm-examples.md +474 -0
- claude_mpm/agents/templates/pm-red-flags.md +310 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/response-format.md +583 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/agents/templates/validation-templates.md +312 -0
- claude_mpm/cli/__init__.py +72 -376
- claude_mpm/cli/commands/__init__.py +4 -0
- claude_mpm/cli/commands/agent_manager.py +675 -20
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +344 -0
- claude_mpm/cli/commands/agents.py +1673 -178
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- claude_mpm/cli/commands/aggregate.py +11 -7
- claude_mpm/cli/commands/analyze.py +18 -13
- claude_mpm/cli/commands/analyze_code.py +8 -4
- claude_mpm/cli/commands/auto_configure.py +566 -0
- claude_mpm/cli/commands/cleanup.py +12 -12
- claude_mpm/cli/commands/config.py +54 -17
- claude_mpm/cli/commands/configure.py +1184 -1055
- claude_mpm/cli/commands/configure_agent_display.py +261 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +184 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/dashboard.py +50 -52
- claude_mpm/cli/commands/debug.py +19 -19
- claude_mpm/cli/commands/doctor.py +51 -7
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/info.py +3 -4
- claude_mpm/cli/commands/local_deploy.py +534 -0
- claude_mpm/cli/commands/mcp.py +17 -10
- claude_mpm/cli/commands/mcp_command_router.py +11 -0
- claude_mpm/cli/commands/mcp_config.py +154 -0
- claude_mpm/cli/commands/mcp_external_commands.py +249 -0
- claude_mpm/cli/commands/mcp_install_commands.py +101 -32
- claude_mpm/cli/commands/mcp_pipx_config.py +2 -2
- claude_mpm/cli/commands/mcp_setup_external.py +868 -0
- claude_mpm/cli/commands/memory.py +55 -21
- claude_mpm/cli/commands/monitor.py +160 -70
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +573 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +114 -4
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +252 -167
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +1225 -0
- claude_mpm/cli/commands/uninstall.py +176 -0
- claude_mpm/cli/commands/upgrade.py +152 -0
- claude_mpm/cli/commands/verify.py +119 -0
- claude_mpm/cli/executor.py +279 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +1872 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parser.py +79 -2
- claude_mpm/cli/parsers/__init__.py +7 -1
- claude_mpm/cli/parsers/agent_manager_parser.py +161 -1
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +369 -1
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +196 -3
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/configure_parser.py +11 -15
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mcp_parser.py +15 -0
- claude_mpm/cli/parsers/monitor_parser.py +12 -2
- claude_mpm/cli/parsers/mpm_init_parser.py +179 -9
- claude_mpm/cli/parsers/run_parser.py +5 -0
- claude_mpm/cli/parsers/search_parser.py +245 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +282 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/shared/argument_patterns.py +20 -13
- claude_mpm/cli/shared/base_command.py +2 -2
- claude_mpm/cli/shared/output_formatters.py +28 -19
- claude_mpm/cli/startup.py +994 -0
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/startup_logging.py +179 -13
- claude_mpm/cli/utils.py +54 -3
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/mpm-agents-auto-configure.md +278 -0
- claude_mpm/commands/mpm-agents-detect.md +177 -0
- claude_mpm/commands/mpm-agents-list.md +131 -0
- claude_mpm/commands/mpm-agents-recommend.md +223 -0
- claude_mpm/commands/mpm-config-view.md +150 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +297 -5
- claude_mpm/commands/mpm-init.md +401 -17
- claude_mpm/commands/mpm-monitor.md +418 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -0
- claude_mpm/commands/mpm-status.md +79 -8
- claude_mpm/commands/mpm-ticket-organize.md +304 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +122 -0
- claude_mpm/commands/mpm.md +12 -0
- claude_mpm/config/agent_config.py +4 -4
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/experimental_features.py +7 -7
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/config/paths.py +3 -2
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/config/socketio_config.py +3 -3
- claude_mpm/constants.py +28 -1
- claude_mpm/core/__init__.py +53 -17
- claude_mpm/core/agent_name_normalizer.py +3 -2
- claude_mpm/core/agent_registry.py +2 -2
- claude_mpm/core/agent_session_manager.py +10 -10
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/base_service.py +33 -23
- claude_mpm/core/cache.py +9 -9
- claude_mpm/core/claude_runner.py +24 -42
- claude_mpm/core/config.py +101 -8
- claude_mpm/core/config_aliases.py +7 -6
- claude_mpm/core/constants.py +66 -1
- claude_mpm/core/container.py +11 -5
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/error_handler.py +623 -0
- claude_mpm/core/factories.py +1 -1
- claude_mpm/core/file_utils.py +764 -0
- claude_mpm/core/framework/__init__.py +25 -0
- claude_mpm/core/framework/formatters/__init__.py +11 -0
- claude_mpm/core/framework/formatters/capability_generator.py +367 -0
- claude_mpm/core/framework/formatters/content_formatter.py +288 -0
- claude_mpm/core/framework/formatters/context_generator.py +185 -0
- claude_mpm/core/framework/loaders/__init__.py +13 -0
- claude_mpm/core/framework/loaders/agent_loader.py +210 -0
- claude_mpm/core/framework/loaders/file_loader.py +176 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +181 -0
- claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
- claude_mpm/core/framework/processors/__init__.py +11 -0
- claude_mpm/core/framework/processors/memory_processor.py +230 -0
- claude_mpm/core/framework/processors/metadata_processor.py +146 -0
- claude_mpm/core/framework/processors/template_processor.py +244 -0
- claude_mpm/core/framework_loader.py +321 -1631
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +49 -8
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +4 -3
- claude_mpm/core/interactive_session.py +146 -18
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/lazy.py +3 -3
- claude_mpm/core/log_manager.py +92 -23
- claude_mpm/core/logger.py +22 -15
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/oneshot_session.py +122 -15
- claude_mpm/core/optimized_agent_loader.py +9 -9
- claude_mpm/core/optimized_startup.py +1 -1
- claude_mpm/core/output_style_manager.py +12 -192
- claude_mpm/core/pm_hook_interceptor.py +18 -12
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/service_registry.py +7 -3
- claude_mpm/core/session_manager.py +14 -12
- claude_mpm/core/shared/config_loader.py +1 -1
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/socketio_pool.py +15 -15
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/tool_access_control.py +3 -2
- claude_mpm/core/types.py +4 -11
- claude_mpm/core/typing_utils.py +7 -6
- claude_mpm/core/unified_agent_registry.py +115 -11
- claude_mpm/core/unified_config.py +6 -6
- claude_mpm/core/unified_paths.py +23 -20
- claude_mpm/dashboard/analysis_runner.py +4 -4
- claude_mpm/dashboard/api/simple_directory.py +261 -0
- claude_mpm/dashboard/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +600 -18
- claude_mpm/dashboard/static/js/components/activity-tree.js +181 -195
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +105 -102
- claude_mpm/dashboard/static/js/components/agent-inference.js +34 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +67 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
- claude_mpm/dashboard/static/js/components/event-viewer.js +50 -13
- claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +36 -16
- claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +49 -23
- claude_mpm/dashboard/static/js/components/session-manager.js +19 -19
- claude_mpm/dashboard/static/js/components/socket-manager.js +5 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +520 -88
- claude_mpm/dashboard/static/js/components/working-directory.js +46 -11
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +309 -178
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +183 -139
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/socket.io.min.js +7 -0
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
- claude_mpm/dashboard/templates/code_simple.html +153 -0
- claude_mpm/dashboard/templates/index.html +125 -122
- claude_mpm/experimental/cli_enhancements.py +5 -7
- claude_mpm/generators/agent_profile_generator.py +5 -3
- claude_mpm/hooks/__init__.py +37 -1
- claude_mpm/hooks/base_hook.py +5 -4
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
- claude_mpm/hooks/claude_hooks/event_handlers.py +24 -19
- claude_mpm/hooks/claude_hooks/hook_handler.py +29 -22
- claude_mpm/hooks/claude_hooks/installer.py +67 -22
- claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
- claude_mpm/hooks/claude_hooks/response_tracking.py +57 -17
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +62 -64
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +140 -76
- claude_mpm/hooks/claude_hooks/services/state_manager.py +11 -9
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
- claude_mpm/hooks/failure_learning/__init__.py +54 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
- claude_mpm/hooks/instruction_reinforcement.py +301 -0
- claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
- claude_mpm/hooks/kuzu_memory_hook.py +386 -0
- claude_mpm/hooks/kuzu_response_hook.py +179 -0
- claude_mpm/hooks/memory_integration_hook.py +1 -1
- claude_mpm/hooks/session_resume_hook.py +121 -0
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/hooks/tool_call_interceptor.py +8 -5
- claude_mpm/hooks/validation_hooks.py +3 -3
- claude_mpm/init.py +23 -4
- claude_mpm/models/agent_session.py +8 -6
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/scripts/claude-hook-handler.sh +35 -9
- claude_mpm/scripts/launch_monitor.py +85 -0
- claude_mpm/scripts/mcp_server.py +3 -5
- claude_mpm/scripts/mpm_doctor.py +3 -2
- claude_mpm/scripts/socketio_daemon.py +159 -512
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/__init__.py +144 -160
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/agent_builder.py +56 -18
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_deployment.py +164 -17
- claude_mpm/services/agents/deployment/agent_discovery_service.py +191 -41
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +5 -5
- claude_mpm/services/agents/deployment/agent_format_converter.py +56 -12
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -7
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_record_service.py +4 -4
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +939 -50
- claude_mpm/services/agents/deployment/agent_validator.py +31 -7
- claude_mpm/services/agents/deployment/agent_version_manager.py +8 -5
- claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +3 -2
- claude_mpm/services/agents/deployment/deployment_config_loader.py +131 -7
- claude_mpm/services/agents/deployment/deployment_type_detector.py +10 -14
- claude_mpm/services/agents/deployment/deployment_wrapper.py +58 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
- claude_mpm/services/agents/deployment/local_template_deployment.py +360 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +249 -53
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +8 -7
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +7 -5
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +10 -10
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -43
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/deployment/validation/template_validator.py +64 -44
- claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/agent_profile_loader.py +10 -9
- claude_mpm/services/agents/loading/base_agent_manager.py +16 -6
- claude_mpm/services/agents/loading/framework_agent_loader.py +11 -14
- claude_mpm/services/agents/local_template_manager.py +784 -0
- claude_mpm/services/agents/management/agent_capabilities_generator.py +3 -2
- claude_mpm/services/agents/management/agent_management_service.py +5 -5
- claude_mpm/services/agents/memory/agent_memory_manager.py +32 -29
- claude_mpm/services/agents/memory/content_manager.py +17 -9
- claude_mpm/services/agents/memory/memory_categorization_service.py +4 -2
- claude_mpm/services/agents/memory/memory_file_service.py +32 -6
- claude_mpm/services/agents/memory/memory_format_service.py +6 -4
- claude_mpm/services/agents/memory/memory_limits_service.py +4 -2
- claude_mpm/services/agents/memory/template_generator.py +3 -3
- claude_mpm/services/agents/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +615 -0
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +3 -3
- claude_mpm/services/agents/registry/modification_tracker.py +30 -19
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/async_session_logger.py +141 -98
- claude_mpm/services/claude_session_logger.py +82 -74
- claude_mpm/services/cli/agent_cleanup_service.py +5 -0
- claude_mpm/services/cli/agent_listing_service.py +5 -5
- claude_mpm/services/cli/agent_validation_service.py +3 -1
- claude_mpm/services/cli/memory_crud_service.py +12 -7
- claude_mpm/services/cli/memory_output_formatter.py +2 -2
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +104 -13
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +372 -0
- claude_mpm/services/cli/startup_checker.py +13 -10
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +209 -13
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +88 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- claude_mpm/services/core/interfaces/health.py +169 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/project.py +121 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/memory_manager.py +92 -47
- claude_mpm/services/core/models/__init__.py +70 -0
- claude_mpm/services/core/models/agent_config.py +384 -0
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +239 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/models/toolchain.py +306 -0
- claude_mpm/services/core/path_resolver.py +36 -14
- claude_mpm/services/diagnostics/__init__.py +2 -2
- claude_mpm/services/diagnostics/checks/__init__.py +8 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +30 -34
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
- claude_mpm/services/diagnostics/checks/common_issues_check.py +28 -27
- claude_mpm/services/diagnostics/checks/configuration_check.py +26 -25
- claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
- claude_mpm/services/diagnostics/checks/installation_check.py +165 -60
- claude_mpm/services/diagnostics/checks/instructions_check.py +21 -21
- claude_mpm/services/diagnostics/checks/mcp_check.py +57 -44
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +24 -24
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
- claude_mpm/services/diagnostics/diagnostic_runner.py +31 -13
- claude_mpm/services/diagnostics/doctor_reporter.py +305 -47
- claude_mpm/services/diagnostics/models.py +37 -21
- claude_mpm/services/event_aggregator.py +5 -3
- claude_mpm/services/event_bus/direct_relay.py +11 -7
- claude_mpm/services/event_bus/event_bus.py +51 -9
- claude_mpm/services/event_bus/relay.py +33 -14
- claude_mpm/services/events/consumers/dead_letter.py +7 -5
- claude_mpm/services/events/consumers/logging.py +1 -2
- claude_mpm/services/events/core.py +5 -6
- claude_mpm/services/events/producers/hook.py +6 -6
- claude_mpm/services/events/producers/system.py +8 -8
- claude_mpm/services/exceptions.py +5 -5
- claude_mpm/services/framework_claude_md_generator/__init__.py +1 -1
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +5 -5
- claude_mpm/services/framework_claude_md_generator/content_validator.py +2 -2
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +3 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
- claude_mpm/services/framework_claude_md_generator/version_manager.py +1 -1
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/hook_installer_service.py +506 -0
- claude_mpm/services/hook_service.py +5 -6
- claude_mpm/services/infrastructure/context_preservation.py +13 -11
- claude_mpm/services/infrastructure/daemon_manager.py +9 -9
- claude_mpm/services/infrastructure/logging.py +2 -2
- claude_mpm/services/infrastructure/monitoring/__init__.py +2 -6
- claude_mpm/services/infrastructure/monitoring/aggregator.py +13 -18
- claude_mpm/services/infrastructure/monitoring/base.py +5 -13
- claude_mpm/services/infrastructure/monitoring/network.py +7 -6
- claude_mpm/services/infrastructure/monitoring/process.py +13 -12
- claude_mpm/services/infrastructure/monitoring/resources.py +8 -7
- claude_mpm/services/infrastructure/monitoring/service.py +16 -15
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +155 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +427 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +1542 -0
- claude_mpm/services/mcp_gateway/__init__.py +97 -93
- claude_mpm/services/mcp_gateway/auto_configure.py +43 -38
- claude_mpm/services/mcp_gateway/config/config_loader.py +3 -3
- claude_mpm/services/mcp_gateway/config/configuration.py +24 -5
- claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
- claude_mpm/services/mcp_gateway/core/base.py +20 -33
- claude_mpm/services/mcp_gateway/core/process_pool.py +591 -31
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +2 -2
- claude_mpm/services/mcp_gateway/core/startup_verification.py +3 -3
- claude_mpm/services/mcp_gateway/main.py +90 -15
- claude_mpm/services/mcp_gateway/registry/service_registry.py +4 -2
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +12 -9
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +5 -10
- claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -17
- claude_mpm/services/mcp_gateway/tools/__init__.py +14 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +10 -9
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +654 -0
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +36 -34
- claude_mpm/services/mcp_gateway/tools/hello_world.py +8 -8
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +555 -0
- claude_mpm/services/mcp_gateway/utils/__init__.py +14 -0
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +160 -0
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +170 -0
- claude_mpm/services/mcp_service_verifier.py +732 -0
- claude_mpm/services/memory/builder.py +9 -8
- claude_mpm/services/memory/cache/shared_prompt_cache.py +2 -1
- claude_mpm/services/memory/cache/simple_cache.py +2 -2
- claude_mpm/services/memory/failure_tracker.py +578 -0
- claude_mpm/services/memory/indexed_memory.py +8 -8
- claude_mpm/services/memory/optimizer.py +8 -9
- claude_mpm/services/memory/router.py +3 -3
- claude_mpm/services/memory_hook_service.py +165 -4
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +452 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +691 -0
- claude_mpm/services/monitor/daemon_manager.py +1040 -0
- claude_mpm/services/monitor/event_emitter.py +350 -0
- claude_mpm/services/monitor/handlers/__init__.py +21 -0
- claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
- claude_mpm/services/monitor/handlers/dashboard.py +299 -0
- claude_mpm/services/monitor/handlers/file.py +264 -0
- claude_mpm/services/monitor/handlers/hooks.py +512 -0
- claude_mpm/services/monitor/management/__init__.py +18 -0
- claude_mpm/services/monitor/management/health.py +124 -0
- claude_mpm/services/monitor/management/lifecycle.py +724 -0
- claude_mpm/services/monitor/server.py +817 -0
- claude_mpm/services/monitor_build_service.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/orphan_detection.py +786 -0
- claude_mpm/services/port_manager.py +3 -3
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/__init__.py +23 -0
- claude_mpm/services/project/analyzer.py +3 -3
- claude_mpm/services/project/architecture_analyzer.py +5 -5
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +4 -4
- claude_mpm/services/project/detection_strategies.py +719 -0
- claude_mpm/services/project/documentation_manager.py +554 -0
- claude_mpm/services/project/enhanced_analyzer.py +572 -0
- claude_mpm/services/project/metrics_collector.py +4 -4
- claude_mpm/services/project/project_organizer.py +1005 -0
- claude_mpm/services/project/registry.py +13 -7
- claude_mpm/services/project/toolchain_analyzer.py +583 -0
- claude_mpm/services/project_port_allocator.py +596 -0
- claude_mpm/services/response_tracker.py +21 -10
- claude_mpm/services/runner_configuration_service.py +17 -3
- claude_mpm/services/self_upgrade_service.py +500 -0
- claude_mpm/services/session_management_service.py +23 -9
- claude_mpm/services/session_manager.py +380 -0
- claude_mpm/services/shared/__init__.py +2 -1
- claude_mpm/services/shared/async_service_base.py +16 -27
- claude_mpm/services/shared/config_service_base.py +17 -14
- claude_mpm/services/shared/lifecycle_service_base.py +1 -14
- claude_mpm/services/shared/service_factory.py +8 -5
- claude_mpm/services/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- claude_mpm/services/socketio/client_proxy.py +60 -5
- claude_mpm/services/socketio/dashboard_server.py +361 -0
- claude_mpm/services/socketio/event_normalizer.py +10 -6
- claude_mpm/services/socketio/handlers/__init__.py +5 -2
- claude_mpm/services/socketio/handlers/base.py +2 -2
- claude_mpm/services/socketio/handlers/code_analysis.py +90 -27
- claude_mpm/services/socketio/handlers/connection.py +22 -41
- claude_mpm/services/socketio/handlers/connection_handler.py +13 -10
- claude_mpm/services/socketio/handlers/file.py +46 -10
- claude_mpm/services/socketio/handlers/git.py +9 -9
- claude_mpm/services/socketio/handlers/hook.py +29 -17
- claude_mpm/services/socketio/handlers/registry.py +4 -2
- claude_mpm/services/socketio/monitor_client.py +364 -0
- claude_mpm/services/socketio/server/broadcaster.py +9 -7
- claude_mpm/services/socketio/server/connection_manager.py +2 -2
- claude_mpm/services/socketio/server/core.py +142 -8
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +24 -24
- claude_mpm/services/socketio_client_manager.py +4 -4
- claude_mpm/services/subprocess_launcher_service.py +19 -15
- claude_mpm/services/system_instructions_service.py +3 -5
- claude_mpm/services/ticket_services/formatter_service.py +1 -1
- claude_mpm/services/ticket_services/validation_service.py +5 -5
- claude_mpm/services/unified/__init__.py +65 -0
- claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
- claude_mpm/services/unified/config_strategies/__init__.py +175 -0
- claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
- claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
- claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
- claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
- claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
- claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
- claude_mpm/services/unified/deployment_strategies/base.py +553 -0
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
- claude_mpm/services/unified/deployment_strategies/local.py +607 -0
- claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
- claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
- claude_mpm/services/unified/interfaces.py +475 -0
- claude_mpm/services/unified/migration.py +509 -0
- claude_mpm/services/unified/strategies.py +534 -0
- claude_mpm/services/unified/unified_analyzer.py +542 -0
- claude_mpm/services/unified/unified_config.py +691 -0
- claude_mpm/services/unified/unified_deployment.py +466 -0
- claude_mpm/services/utility_service.py +6 -3
- claude_mpm/services/version_control/branch_strategy.py +2 -2
- claude_mpm/services/version_control/conflict_resolution.py +14 -8
- claude_mpm/services/version_control/git_operations.py +26 -24
- claude_mpm/services/version_control/semantic_versioning.py +14 -14
- claude_mpm/services/version_control/version_parser.py +14 -11
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +42 -0
- claude_mpm/skills/agent_skills_injector.py +324 -0
- claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +573 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +310 -0
- claude_mpm/skills/skills_registry.py +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/state_storage.py +31 -31
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/tools/__main__.py +9 -9
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/tools/code_tree_builder.py +6 -6
- claude_mpm/tools/code_tree_events.py +14 -10
- claude_mpm/tools/socketio_debug.py +11 -11
- claude_mpm/utils/agent_dependency_loader.py +184 -36
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/common.py +544 -0
- claude_mpm/utils/config_manager.py +12 -6
- claude_mpm/utils/database_connector.py +298 -0
- claude_mpm/utils/dependency_cache.py +5 -3
- claude_mpm/utils/dependency_strategies.py +15 -10
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/environment_context.py +4 -3
- claude_mpm/utils/error_handler.py +5 -3
- claude_mpm/utils/file_utils.py +13 -14
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/path_operations.py +7 -4
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +131 -24
- claude_mpm/utils/session_logging.py +2 -2
- claude_mpm/utils/structured_questions.py +619 -0
- claude_mpm/utils/subprocess_utils.py +9 -8
- claude_mpm/validation/agent_validator.py +6 -6
- claude_mpm/validation/frontmatter_validator.py +6 -6
- claude_mpm-5.0.9.dist-info/METADATA +1028 -0
- claude_mpm-5.0.9.dist-info/RECORD +864 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -261
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/agent-manager.json +0 -270
- claude_mpm/agents/templates/agent-manager.md +0 -619
- claude_mpm/agents/templates/agentic_coder_optimizer.json +0 -222
- claude_mpm/agents/templates/api_qa.json +0 -171
- claude_mpm/agents/templates/code_analyzer.json +0 -95
- claude_mpm/agents/templates/data_engineer.json +0 -152
- claude_mpm/agents/templates/documentation.json +0 -175
- claude_mpm/agents/templates/engineer.json +0 -176
- claude_mpm/agents/templates/imagemagick.json +0 -261
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/memory_manager.json +0 -155
- claude_mpm/agents/templates/ops.json +0 -175
- claude_mpm/agents/templates/project_organizer.json +0 -130
- claude_mpm/agents/templates/qa.json +0 -223
- claude_mpm/agents/templates/refactoring_engineer.json +0 -266
- claude_mpm/agents/templates/research.json +0 -163
- claude_mpm/agents/templates/security.json +0 -153
- claude_mpm/agents/templates/ticketing.json +0 -169
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -281
- claude_mpm/agents/templates/version_control.json +0 -147
- claude_mpm/agents/templates/web_qa.json +0 -254
- claude_mpm/agents/templates/web_ui.json +0 -176
- claude_mpm/cli/commands/configure_tui.py +0 -1927
- claude_mpm/cli/commands/mpm_init.py +0 -594
- claude_mpm/cli/commands/socketio_monitor.py +0 -233
- claude_mpm/commands/mpm-agents.md +0 -12
- claude_mpm/commands/mpm-config.md +0 -18
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/css/code-tree.css +0 -1408
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/js/components/code-tree.js +0 -3220
- claude_mpm/dashboard/static/js/components/code-viewer.js +0 -480
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1040
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
- claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
- claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
- claude_mpm/scripts/socketio_server_manager.py +0 -349
- claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
- claude_mpm/services/cli/dashboard_launcher.py +0 -423
- claude_mpm/services/cli/socketio_manager.py +0 -537
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -286
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -645
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -602
- claude_mpm/services/project/analyzer_refactored.py +0 -450
- claude_mpm/tools/code_tree_analyzer.py +0 -1693
- claude_mpm-4.1.26.dist-info/METADATA +0 -332
- claude_mpm-4.1.26.dist-info/RECORD +0 -606
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"""PR Strategy question templates for PM workflow decisions.
|
|
2
|
+
|
|
3
|
+
This module provides templates for gathering user preferences about PR workflows,
|
|
4
|
+
including whether to use stacked PRs, draft PRs, and auto-merge settings.
|
|
5
|
+
|
|
6
|
+
Templates:
|
|
7
|
+
- PRWorkflowTemplate: Main PR workflow decisions (main-based vs stacked)
|
|
8
|
+
- DraftPRTemplate: Draft PR preferences
|
|
9
|
+
- AutoMergeTemplate: Auto-merge preferences
|
|
10
|
+
|
|
11
|
+
These templates are context-aware and only ask relevant questions based on the
|
|
12
|
+
number of tickets and project state.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import TYPE_CHECKING
|
|
18
|
+
|
|
19
|
+
from claude_mpm.templates.questions.base import ConditionalTemplate
|
|
20
|
+
from claude_mpm.utils.structured_questions import QuestionBuilder, QuestionSet
|
|
21
|
+
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from claude_mpm.utils.structured_questions import StructuredQuestion
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class PRWorkflowTemplate(ConditionalTemplate):
|
|
27
|
+
"""Template for PR workflow strategy questions.
|
|
28
|
+
|
|
29
|
+
Asks questions about:
|
|
30
|
+
- Main-based vs stacked PRs (only if multiple tickets)
|
|
31
|
+
- Draft PR preference
|
|
32
|
+
- Auto-merge preference
|
|
33
|
+
|
|
34
|
+
Context Parameters:
|
|
35
|
+
num_tickets (int): Number of tickets being worked on
|
|
36
|
+
has_ci (bool): Whether project has CI/CD setup (affects auto-merge question)
|
|
37
|
+
|
|
38
|
+
Example:
|
|
39
|
+
>>> template = PRWorkflowTemplate(num_tickets=3, has_ci=True)
|
|
40
|
+
>>> question_set = template.build()
|
|
41
|
+
>>> params = question_set.to_ask_user_question_params()
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
def __init__(self, num_tickets: int = 1, has_ci: bool = False, **context):
|
|
45
|
+
"""Initialize PR workflow template.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
num_tickets: Number of tickets in this sprint/batch
|
|
49
|
+
has_ci: Whether CI/CD is configured
|
|
50
|
+
**context: Additional context values
|
|
51
|
+
"""
|
|
52
|
+
super().__init__(num_tickets=num_tickets, has_ci=has_ci, **context)
|
|
53
|
+
|
|
54
|
+
def should_include_question(self, question_id: str) -> bool:
|
|
55
|
+
"""Determine which questions to ask based on context.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
question_id: Question identifier
|
|
59
|
+
- "workflow": Main vs stacked PRs
|
|
60
|
+
- "draft": Draft PR preference
|
|
61
|
+
- "auto_merge": Auto-merge preference
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
True if question should be included
|
|
65
|
+
"""
|
|
66
|
+
num_tickets = self.get_context("num_tickets", 1)
|
|
67
|
+
has_ci = self.get_context("has_ci", False)
|
|
68
|
+
|
|
69
|
+
if question_id == "workflow":
|
|
70
|
+
# Only ask about stacked vs main-based if multiple tickets
|
|
71
|
+
return num_tickets > 1
|
|
72
|
+
|
|
73
|
+
if question_id == "draft":
|
|
74
|
+
# Always relevant
|
|
75
|
+
return True
|
|
76
|
+
|
|
77
|
+
if question_id == "auto_merge":
|
|
78
|
+
# Only ask about auto-merge if CI is configured
|
|
79
|
+
return has_ci
|
|
80
|
+
|
|
81
|
+
return True
|
|
82
|
+
|
|
83
|
+
def build(self) -> QuestionSet:
|
|
84
|
+
"""Build PR workflow questions based on context.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
QuestionSet with relevant PR workflow questions
|
|
88
|
+
"""
|
|
89
|
+
questions: list[StructuredQuestion] = []
|
|
90
|
+
|
|
91
|
+
# Question 1: PR workflow strategy (only if multiple tickets)
|
|
92
|
+
if self.should_include_question("workflow"):
|
|
93
|
+
workflow_question = (
|
|
94
|
+
QuestionBuilder()
|
|
95
|
+
.ask("How should we organize the pull requests?")
|
|
96
|
+
.header("PR Strategy")
|
|
97
|
+
.add_option(
|
|
98
|
+
"Main-based PRs",
|
|
99
|
+
"Each ticket gets its own PR against main branch (parallel work)",
|
|
100
|
+
)
|
|
101
|
+
.add_option(
|
|
102
|
+
"Stacked PRs",
|
|
103
|
+
"PRs build on each other sequentially (ticket-1 → ticket-2 → ticket-3)",
|
|
104
|
+
)
|
|
105
|
+
.build()
|
|
106
|
+
)
|
|
107
|
+
questions.append(workflow_question)
|
|
108
|
+
|
|
109
|
+
# Question 2: Draft PR preference
|
|
110
|
+
if self.should_include_question("draft"):
|
|
111
|
+
draft_question = (
|
|
112
|
+
QuestionBuilder()
|
|
113
|
+
.ask("Should PRs be created as drafts initially?")
|
|
114
|
+
.header("Draft PRs")
|
|
115
|
+
.add_option(
|
|
116
|
+
"Yes, as drafts",
|
|
117
|
+
"Create as draft PRs, mark ready when implementation complete",
|
|
118
|
+
)
|
|
119
|
+
.add_option(
|
|
120
|
+
"No, ready for review",
|
|
121
|
+
"Create as regular PRs ready for immediate review",
|
|
122
|
+
)
|
|
123
|
+
.build()
|
|
124
|
+
)
|
|
125
|
+
questions.append(draft_question)
|
|
126
|
+
|
|
127
|
+
# Question 3: Auto-merge preference (only if CI configured)
|
|
128
|
+
if self.should_include_question("auto_merge"):
|
|
129
|
+
automerge_question = (
|
|
130
|
+
QuestionBuilder()
|
|
131
|
+
.ask("Should PRs auto-merge after CI passes and approval?")
|
|
132
|
+
.header("Auto-merge")
|
|
133
|
+
.add_option(
|
|
134
|
+
"Enable auto-merge",
|
|
135
|
+
"PRs merge automatically after CI passes and approval received",
|
|
136
|
+
)
|
|
137
|
+
.add_option(
|
|
138
|
+
"Manual merge only",
|
|
139
|
+
"PRs require manual merge even after approval",
|
|
140
|
+
)
|
|
141
|
+
.build()
|
|
142
|
+
)
|
|
143
|
+
questions.append(automerge_question)
|
|
144
|
+
|
|
145
|
+
if not questions:
|
|
146
|
+
# Fallback: at least ask about draft preference
|
|
147
|
+
questions.append(
|
|
148
|
+
QuestionBuilder()
|
|
149
|
+
.ask("Should PRs be created as drafts initially?")
|
|
150
|
+
.header("Draft PRs")
|
|
151
|
+
.add_option(
|
|
152
|
+
"Yes, as drafts",
|
|
153
|
+
"Create as draft PRs, mark ready when implementation complete",
|
|
154
|
+
)
|
|
155
|
+
.add_option(
|
|
156
|
+
"No, ready for review",
|
|
157
|
+
"Create as regular PRs ready for immediate review",
|
|
158
|
+
)
|
|
159
|
+
.build()
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
return QuestionSet(questions)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class PRSizeTemplate(ConditionalTemplate):
|
|
166
|
+
"""Template for PR size and scope preferences.
|
|
167
|
+
|
|
168
|
+
Asks about preferred PR size and whether to split large changes.
|
|
169
|
+
|
|
170
|
+
Context Parameters:
|
|
171
|
+
estimated_changes (int): Estimated lines of code changed
|
|
172
|
+
|
|
173
|
+
Example:
|
|
174
|
+
>>> template = PRSizeTemplate(estimated_changes=500)
|
|
175
|
+
>>> question_set = template.build()
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
def __init__(self, estimated_changes: int = 0, **context):
|
|
179
|
+
"""Initialize PR size template.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
estimated_changes: Estimated LOC changes
|
|
183
|
+
**context: Additional context values
|
|
184
|
+
"""
|
|
185
|
+
super().__init__(estimated_changes=estimated_changes, **context)
|
|
186
|
+
|
|
187
|
+
def build(self) -> QuestionSet:
|
|
188
|
+
"""Build PR size preference questions.
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
QuestionSet with PR size questions
|
|
192
|
+
"""
|
|
193
|
+
estimated_changes = self.get_context("estimated_changes", 0)
|
|
194
|
+
|
|
195
|
+
questions: list[StructuredQuestion] = []
|
|
196
|
+
|
|
197
|
+
# Only ask if changes are large
|
|
198
|
+
if estimated_changes > 300:
|
|
199
|
+
size_question = (
|
|
200
|
+
QuestionBuilder()
|
|
201
|
+
.ask(
|
|
202
|
+
"This feature involves significant changes. How should we split it?"
|
|
203
|
+
)
|
|
204
|
+
.header("PR Size")
|
|
205
|
+
.add_option(
|
|
206
|
+
"Single large PR",
|
|
207
|
+
"Keep all changes together in one comprehensive PR",
|
|
208
|
+
)
|
|
209
|
+
.add_option(
|
|
210
|
+
"Split by component",
|
|
211
|
+
"Create separate PRs for each major component",
|
|
212
|
+
)
|
|
213
|
+
.add_option(
|
|
214
|
+
"Split by feature",
|
|
215
|
+
"Create separate PRs for each sub-feature",
|
|
216
|
+
)
|
|
217
|
+
.build()
|
|
218
|
+
)
|
|
219
|
+
questions.append(size_question)
|
|
220
|
+
|
|
221
|
+
# Fallback if no size concerns
|
|
222
|
+
if not questions:
|
|
223
|
+
commit_question = (
|
|
224
|
+
QuestionBuilder()
|
|
225
|
+
.ask("How should commits be organized?")
|
|
226
|
+
.header("Commits")
|
|
227
|
+
.add_option(
|
|
228
|
+
"Atomic commits",
|
|
229
|
+
"Many small, focused commits (one per logical change)",
|
|
230
|
+
)
|
|
231
|
+
.add_option(
|
|
232
|
+
"Feature commits",
|
|
233
|
+
"Fewer, larger commits (one per feature/component)",
|
|
234
|
+
)
|
|
235
|
+
.build()
|
|
236
|
+
)
|
|
237
|
+
questions.append(commit_question)
|
|
238
|
+
|
|
239
|
+
return QuestionSet(questions)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
class PRReviewTemplate(ConditionalTemplate):
|
|
243
|
+
"""Template for PR review and approval preferences.
|
|
244
|
+
|
|
245
|
+
Asks about reviewer assignment, approval requirements, and review timing.
|
|
246
|
+
|
|
247
|
+
Context Parameters:
|
|
248
|
+
team_size (int): Number of team members
|
|
249
|
+
is_critical (bool): Whether this is a critical/sensitive change
|
|
250
|
+
|
|
251
|
+
Example:
|
|
252
|
+
>>> template = PRReviewTemplate(team_size=5, is_critical=True)
|
|
253
|
+
>>> question_set = template.build()
|
|
254
|
+
"""
|
|
255
|
+
|
|
256
|
+
def __init__(self, team_size: int = 1, is_critical: bool = False, **context):
|
|
257
|
+
"""Initialize PR review template.
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
team_size: Number of team members available for review
|
|
261
|
+
is_critical: Whether changes are critical/sensitive
|
|
262
|
+
**context: Additional context values
|
|
263
|
+
"""
|
|
264
|
+
super().__init__(team_size=team_size, is_critical=is_critical, **context)
|
|
265
|
+
|
|
266
|
+
def build(self) -> QuestionSet:
|
|
267
|
+
"""Build PR review preference questions.
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
QuestionSet with PR review questions
|
|
271
|
+
"""
|
|
272
|
+
team_size = self.get_context("team_size", 1)
|
|
273
|
+
|
|
274
|
+
questions: list[StructuredQuestion] = []
|
|
275
|
+
|
|
276
|
+
# Question about number of approvals required
|
|
277
|
+
if team_size > 1:
|
|
278
|
+
approval_question = (
|
|
279
|
+
QuestionBuilder()
|
|
280
|
+
.ask("How many approvals should be required before merging?")
|
|
281
|
+
.header("Approvals")
|
|
282
|
+
.add_option(
|
|
283
|
+
"1 approval",
|
|
284
|
+
"Single approval sufficient (faster iteration)",
|
|
285
|
+
)
|
|
286
|
+
.add_option(
|
|
287
|
+
"2 approvals",
|
|
288
|
+
"Two approvals required (more thorough review)",
|
|
289
|
+
)
|
|
290
|
+
.build()
|
|
291
|
+
)
|
|
292
|
+
questions.append(approval_question)
|
|
293
|
+
|
|
294
|
+
# Question about review timing
|
|
295
|
+
timing_question = (
|
|
296
|
+
QuestionBuilder()
|
|
297
|
+
.ask("When should review be requested?")
|
|
298
|
+
.header("Review When")
|
|
299
|
+
.add_option(
|
|
300
|
+
"After implementation",
|
|
301
|
+
"Request review only when all code is complete",
|
|
302
|
+
)
|
|
303
|
+
.add_option(
|
|
304
|
+
"Early feedback",
|
|
305
|
+
"Request early review for approach validation",
|
|
306
|
+
)
|
|
307
|
+
.build()
|
|
308
|
+
)
|
|
309
|
+
questions.append(timing_question)
|
|
310
|
+
|
|
311
|
+
return QuestionSet(questions)
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
"""Project initialization question templates.
|
|
2
|
+
|
|
3
|
+
This module provides templates for gathering information during project setup,
|
|
4
|
+
including project type, language, frameworks, and development workflow preferences.
|
|
5
|
+
|
|
6
|
+
Templates:
|
|
7
|
+
- ProjectTypeTemplate: Project type and primary language selection
|
|
8
|
+
- DevelopmentWorkflowTemplate: Testing, CI/CD, and development preferences
|
|
9
|
+
- FrameworkTemplate: Framework and library selection
|
|
10
|
+
|
|
11
|
+
These templates help PM gather necessary context during /mpm-init or new project setup.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from typing import TYPE_CHECKING
|
|
17
|
+
|
|
18
|
+
from claude_mpm.templates.questions.base import ConditionalTemplate
|
|
19
|
+
from claude_mpm.utils.structured_questions import QuestionBuilder, QuestionSet
|
|
20
|
+
|
|
21
|
+
if TYPE_CHECKING:
|
|
22
|
+
from claude_mpm.utils.structured_questions import StructuredQuestion
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ProjectTypeTemplate(ConditionalTemplate):
|
|
26
|
+
"""Template for project type and language selection.
|
|
27
|
+
|
|
28
|
+
Asks about:
|
|
29
|
+
- Project type (web app, API, library, etc.)
|
|
30
|
+
- Primary programming language
|
|
31
|
+
- Target deployment environment (optional, based on type)
|
|
32
|
+
|
|
33
|
+
Context Parameters:
|
|
34
|
+
existing_files (bool): Whether project has existing files
|
|
35
|
+
detected_language (str): Auto-detected language if any
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
>>> template = ProjectTypeTemplate(existing_files=False)
|
|
39
|
+
>>> question_set = template.build()
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def __init__(
|
|
43
|
+
self,
|
|
44
|
+
existing_files: bool = False,
|
|
45
|
+
detected_language: str | None = None,
|
|
46
|
+
**context,
|
|
47
|
+
):
|
|
48
|
+
"""Initialize project type template.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
existing_files: Whether project directory has existing files
|
|
52
|
+
detected_language: Language auto-detected from existing files
|
|
53
|
+
**context: Additional context values
|
|
54
|
+
"""
|
|
55
|
+
super().__init__(
|
|
56
|
+
existing_files=existing_files,
|
|
57
|
+
detected_language=detected_language,
|
|
58
|
+
**context,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
def build(self) -> QuestionSet:
|
|
62
|
+
"""Build project type questions.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
QuestionSet with project type questions
|
|
66
|
+
"""
|
|
67
|
+
detected_language = self.get_context("detected_language")
|
|
68
|
+
|
|
69
|
+
questions: list[StructuredQuestion] = []
|
|
70
|
+
|
|
71
|
+
# Question 1: Project type
|
|
72
|
+
type_question = (
|
|
73
|
+
QuestionBuilder()
|
|
74
|
+
.ask("What type of project is this?")
|
|
75
|
+
.header("Project Type")
|
|
76
|
+
.add_option(
|
|
77
|
+
"Web Application",
|
|
78
|
+
"Full-stack web app with frontend and backend",
|
|
79
|
+
)
|
|
80
|
+
.add_option(
|
|
81
|
+
"API Service",
|
|
82
|
+
"Backend API or microservice",
|
|
83
|
+
)
|
|
84
|
+
.add_option(
|
|
85
|
+
"Library/Package",
|
|
86
|
+
"Reusable library or package for distribution",
|
|
87
|
+
)
|
|
88
|
+
.add_option(
|
|
89
|
+
"CLI Tool",
|
|
90
|
+
"Command-line application or tool",
|
|
91
|
+
)
|
|
92
|
+
.build()
|
|
93
|
+
)
|
|
94
|
+
questions.append(type_question)
|
|
95
|
+
|
|
96
|
+
# Question 2: Primary language (only if not detected)
|
|
97
|
+
if not detected_language:
|
|
98
|
+
language_question = (
|
|
99
|
+
QuestionBuilder()
|
|
100
|
+
.ask("What is the primary programming language?")
|
|
101
|
+
.header("Language")
|
|
102
|
+
.add_option(
|
|
103
|
+
"Python",
|
|
104
|
+
"Python 3.8+ for backend, scripts, or data processing",
|
|
105
|
+
)
|
|
106
|
+
.add_option(
|
|
107
|
+
"JavaScript/TypeScript",
|
|
108
|
+
"JavaScript or TypeScript for Node.js or full-stack",
|
|
109
|
+
)
|
|
110
|
+
.add_option(
|
|
111
|
+
"Go",
|
|
112
|
+
"Go for high-performance services and tools",
|
|
113
|
+
)
|
|
114
|
+
.add_option(
|
|
115
|
+
"Rust",
|
|
116
|
+
"Rust for systems programming and performance-critical code",
|
|
117
|
+
)
|
|
118
|
+
.build()
|
|
119
|
+
)
|
|
120
|
+
questions.append(language_question)
|
|
121
|
+
|
|
122
|
+
return QuestionSet(questions)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class DevelopmentWorkflowTemplate(ConditionalTemplate):
|
|
126
|
+
"""Template for development workflow preferences.
|
|
127
|
+
|
|
128
|
+
Asks about:
|
|
129
|
+
- Testing framework and coverage requirements
|
|
130
|
+
- CI/CD setup preferences
|
|
131
|
+
- Code quality tools
|
|
132
|
+
- Documentation approach
|
|
133
|
+
|
|
134
|
+
Context Parameters:
|
|
135
|
+
project_type (str): Type of project (from ProjectTypeTemplate)
|
|
136
|
+
language (str): Primary language (affects tool choices)
|
|
137
|
+
|
|
138
|
+
Example:
|
|
139
|
+
>>> template = DevelopmentWorkflowTemplate(
|
|
140
|
+
... project_type="API Service",
|
|
141
|
+
... language="Python"
|
|
142
|
+
... )
|
|
143
|
+
>>> question_set = template.build()
|
|
144
|
+
"""
|
|
145
|
+
|
|
146
|
+
def __init__(
|
|
147
|
+
self,
|
|
148
|
+
project_type: str | None = None,
|
|
149
|
+
language: str | None = None,
|
|
150
|
+
**context,
|
|
151
|
+
):
|
|
152
|
+
"""Initialize development workflow template.
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
project_type: Type of project being set up
|
|
156
|
+
language: Primary programming language
|
|
157
|
+
**context: Additional context values
|
|
158
|
+
"""
|
|
159
|
+
super().__init__(project_type=project_type, language=language, **context)
|
|
160
|
+
|
|
161
|
+
def build(self) -> QuestionSet:
|
|
162
|
+
"""Build development workflow questions.
|
|
163
|
+
|
|
164
|
+
Returns:
|
|
165
|
+
QuestionSet with workflow questions
|
|
166
|
+
"""
|
|
167
|
+
language = self.get_context("language", "").lower()
|
|
168
|
+
|
|
169
|
+
questions: list[StructuredQuestion] = []
|
|
170
|
+
|
|
171
|
+
# Question 1: Testing approach
|
|
172
|
+
if "python" in language:
|
|
173
|
+
testing_question = (
|
|
174
|
+
QuestionBuilder()
|
|
175
|
+
.ask("What testing framework should we use?")
|
|
176
|
+
.header("Testing")
|
|
177
|
+
.add_option(
|
|
178
|
+
"pytest",
|
|
179
|
+
"Modern, feature-rich testing with fixtures and plugins",
|
|
180
|
+
)
|
|
181
|
+
.add_option(
|
|
182
|
+
"unittest",
|
|
183
|
+
"Python's built-in testing framework (standard library)",
|
|
184
|
+
)
|
|
185
|
+
.build()
|
|
186
|
+
)
|
|
187
|
+
elif "javascript" in language or "typescript" in language:
|
|
188
|
+
testing_question = (
|
|
189
|
+
QuestionBuilder()
|
|
190
|
+
.ask("What testing framework should we use?")
|
|
191
|
+
.header("Testing")
|
|
192
|
+
.add_option(
|
|
193
|
+
"Jest",
|
|
194
|
+
"Popular, batteries-included testing framework",
|
|
195
|
+
)
|
|
196
|
+
.add_option(
|
|
197
|
+
"Vitest",
|
|
198
|
+
"Fast, modern testing with native ESM support",
|
|
199
|
+
)
|
|
200
|
+
.build()
|
|
201
|
+
)
|
|
202
|
+
else:
|
|
203
|
+
# Generic testing question
|
|
204
|
+
testing_question = (
|
|
205
|
+
QuestionBuilder()
|
|
206
|
+
.ask("What level of test coverage should we target?")
|
|
207
|
+
.header("Testing")
|
|
208
|
+
.add_option(
|
|
209
|
+
"High coverage (80%+)",
|
|
210
|
+
"Comprehensive testing with strict coverage requirements",
|
|
211
|
+
)
|
|
212
|
+
.add_option(
|
|
213
|
+
"Moderate coverage (60%+)",
|
|
214
|
+
"Good testing balance between speed and thoroughness",
|
|
215
|
+
)
|
|
216
|
+
.build()
|
|
217
|
+
)
|
|
218
|
+
questions.append(testing_question)
|
|
219
|
+
|
|
220
|
+
# Question 2: CI/CD setup
|
|
221
|
+
cicd_question = (
|
|
222
|
+
QuestionBuilder()
|
|
223
|
+
.ask("Should we set up CI/CD from the start?")
|
|
224
|
+
.header("CI/CD")
|
|
225
|
+
.add_option(
|
|
226
|
+
"Yes, with GitHub Actions",
|
|
227
|
+
"Automated testing and deployment using GitHub Actions",
|
|
228
|
+
)
|
|
229
|
+
.add_option(
|
|
230
|
+
"Yes, with GitLab CI",
|
|
231
|
+
"Automated testing and deployment using GitLab CI",
|
|
232
|
+
)
|
|
233
|
+
.add_option(
|
|
234
|
+
"Not yet",
|
|
235
|
+
"Set up CI/CD later when project is more mature",
|
|
236
|
+
)
|
|
237
|
+
.build()
|
|
238
|
+
)
|
|
239
|
+
questions.append(cicd_question)
|
|
240
|
+
|
|
241
|
+
return QuestionSet(questions)
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
class FrameworkTemplate(ConditionalTemplate):
|
|
245
|
+
"""Template for framework and library selection.
|
|
246
|
+
|
|
247
|
+
Asks about specific frameworks based on project type and language.
|
|
248
|
+
|
|
249
|
+
Context Parameters:
|
|
250
|
+
project_type (str): Type of project
|
|
251
|
+
language (str): Primary language
|
|
252
|
+
|
|
253
|
+
Example:
|
|
254
|
+
>>> template = FrameworkTemplate(
|
|
255
|
+
... project_type="Web Application",
|
|
256
|
+
... language="Python"
|
|
257
|
+
... )
|
|
258
|
+
>>> question_set = template.build()
|
|
259
|
+
"""
|
|
260
|
+
|
|
261
|
+
def __init__(
|
|
262
|
+
self,
|
|
263
|
+
project_type: str | None = None,
|
|
264
|
+
language: str | None = None,
|
|
265
|
+
**context,
|
|
266
|
+
):
|
|
267
|
+
"""Initialize framework template.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
project_type: Type of project being set up
|
|
271
|
+
language: Primary programming language
|
|
272
|
+
**context: Additional context values
|
|
273
|
+
"""
|
|
274
|
+
super().__init__(project_type=project_type, language=language, **context)
|
|
275
|
+
|
|
276
|
+
def build(self) -> QuestionSet:
|
|
277
|
+
"""Build framework selection questions.
|
|
278
|
+
|
|
279
|
+
Returns:
|
|
280
|
+
QuestionSet with framework questions
|
|
281
|
+
"""
|
|
282
|
+
language = self.get_context("language", "").lower()
|
|
283
|
+
project_type = self.get_context("project_type", "").lower()
|
|
284
|
+
|
|
285
|
+
questions: list[StructuredQuestion] = []
|
|
286
|
+
|
|
287
|
+
# Python web frameworks
|
|
288
|
+
if "python" in language and ("web" in project_type or "api" in project_type):
|
|
289
|
+
framework_question = (
|
|
290
|
+
QuestionBuilder()
|
|
291
|
+
.ask("Which Python web framework should we use?")
|
|
292
|
+
.header("Framework")
|
|
293
|
+
.add_option(
|
|
294
|
+
"FastAPI",
|
|
295
|
+
"Modern, fast framework with automatic API documentation",
|
|
296
|
+
)
|
|
297
|
+
.add_option(
|
|
298
|
+
"Flask",
|
|
299
|
+
"Lightweight, flexible micro-framework",
|
|
300
|
+
)
|
|
301
|
+
.add_option(
|
|
302
|
+
"Django",
|
|
303
|
+
"Full-featured framework with batteries included",
|
|
304
|
+
)
|
|
305
|
+
.build()
|
|
306
|
+
)
|
|
307
|
+
questions.append(framework_question)
|
|
308
|
+
|
|
309
|
+
# JavaScript/TypeScript frameworks
|
|
310
|
+
elif (
|
|
311
|
+
"javascript" in language or "typescript" in language
|
|
312
|
+
) and "web" in project_type:
|
|
313
|
+
framework_question = (
|
|
314
|
+
QuestionBuilder()
|
|
315
|
+
.ask("Which frontend framework should we use?")
|
|
316
|
+
.header("Framework")
|
|
317
|
+
.add_option(
|
|
318
|
+
"React",
|
|
319
|
+
"Popular, component-based UI library with large ecosystem",
|
|
320
|
+
)
|
|
321
|
+
.add_option(
|
|
322
|
+
"Vue",
|
|
323
|
+
"Progressive framework with gentle learning curve",
|
|
324
|
+
)
|
|
325
|
+
.add_option(
|
|
326
|
+
"Next.js",
|
|
327
|
+
"React framework with SSR, routing, and optimization",
|
|
328
|
+
)
|
|
329
|
+
.add_option(
|
|
330
|
+
"Svelte",
|
|
331
|
+
"Compiled framework with minimal runtime overhead",
|
|
332
|
+
)
|
|
333
|
+
.build()
|
|
334
|
+
)
|
|
335
|
+
questions.append(framework_question)
|
|
336
|
+
|
|
337
|
+
# Database selection for API/web projects
|
|
338
|
+
if "api" in project_type or "web" in project_type:
|
|
339
|
+
database_question = (
|
|
340
|
+
QuestionBuilder()
|
|
341
|
+
.ask("What database should we use?")
|
|
342
|
+
.header("Database")
|
|
343
|
+
.add_option(
|
|
344
|
+
"PostgreSQL",
|
|
345
|
+
"Robust relational database with advanced features",
|
|
346
|
+
)
|
|
347
|
+
.add_option(
|
|
348
|
+
"MongoDB",
|
|
349
|
+
"Flexible NoSQL document database",
|
|
350
|
+
)
|
|
351
|
+
.add_option(
|
|
352
|
+
"SQLite",
|
|
353
|
+
"Lightweight embedded database (good for prototypes)",
|
|
354
|
+
)
|
|
355
|
+
.add_option(
|
|
356
|
+
"Redis",
|
|
357
|
+
"In-memory data store for caching and real-time features",
|
|
358
|
+
)
|
|
359
|
+
.build()
|
|
360
|
+
)
|
|
361
|
+
questions.append(database_question)
|
|
362
|
+
|
|
363
|
+
# Fallback if no specific framework questions
|
|
364
|
+
if not questions:
|
|
365
|
+
tooling_question = (
|
|
366
|
+
QuestionBuilder()
|
|
367
|
+
.ask("What development tools should we prioritize?")
|
|
368
|
+
.header("Tooling")
|
|
369
|
+
.add_option(
|
|
370
|
+
"Code quality",
|
|
371
|
+
"Linters, formatters, and static analysis tools",
|
|
372
|
+
)
|
|
373
|
+
.add_option(
|
|
374
|
+
"Testing",
|
|
375
|
+
"Comprehensive testing framework and coverage tools",
|
|
376
|
+
)
|
|
377
|
+
.add_option(
|
|
378
|
+
"Documentation",
|
|
379
|
+
"API docs, code docs, and documentation generators",
|
|
380
|
+
)
|
|
381
|
+
.build()
|
|
382
|
+
)
|
|
383
|
+
questions.append(tooling_question)
|
|
384
|
+
|
|
385
|
+
return QuestionSet(questions)
|