claude-mpm 4.20.3__py3-none-any.whl → 5.1.8__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/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +35 -6
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +1241 -667
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +75 -2
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/frontmatter_validator.py +1 -1
- claude_mpm/agents/templates/circuit-breakers.md +1254 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -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/cli/__init__.py +37 -2
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +188 -30
- claude_mpm/cli/commands/agents.py +959 -36
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/aggregate.py +1 -1
- claude_mpm/cli/commands/analyze.py +3 -3
- claude_mpm/cli/commands/auto_configure.py +537 -239
- claude_mpm/cli/commands/cleanup.py +1 -1
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +924 -45
- claude_mpm/cli/commands/configure_agent_display.py +4 -4
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/debug.py +12 -12
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/mcp_install_commands.py +1 -1
- 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 +67 -1
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +125 -167
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +835 -44
- claude_mpm/cli/executor.py +78 -3
- claude_mpm/cli/interactive/agent_wizard.py +1032 -47
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +256 -4
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
- claude_mpm/cli/parsers/base_parser.py +53 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +145 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +564 -108
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/utils.py +1 -1
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
- claude_mpm/commands/mpm-agents-detect.md +9 -0
- claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
- claude_mpm/commands/mpm-agents-recommend.md +9 -0
- claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +17 -2
- claude_mpm/commands/mpm-init.md +28 -3
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -0
- claude_mpm/commands/mpm-status.md +9 -0
- claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +9 -0
- claude_mpm/commands/mpm.md +11 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/constants.py +13 -0
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +19 -35
- claude_mpm/core/config.py +24 -0
- claude_mpm/core/constants.py +1 -1
- claude_mpm/core/framework/__init__.py +3 -16
- claude_mpm/core/framework/loaders/file_loader.py +54 -101
- claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
- claude_mpm/core/framework/processors/metadata_processor.py +1 -1
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +41 -2
- claude_mpm/core/interactive_session.py +131 -10
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +110 -8
- 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/shared/singleton_manager.py +11 -4
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/unified_config.py +22 -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 +15 -15
- claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
- claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
- claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
- claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
- claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +76 -58
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +138 -121
- claude_mpm/dashboard/templates/code_simple.html +23 -23
- claude_mpm/dashboard/templates/index.html +18 -18
- claude_mpm/experimental/cli_enhancements.py +1 -5
- 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/event_handlers.py +3 -1
- claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
- claude_mpm/hooks/claude_hooks/installer.py +45 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
- 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/failure_learning/__init__.py +2 -8
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
- claude_mpm/hooks/kuzu_response_hook.py +1 -5
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/scripts/claude-hook-handler.sh +3 -3
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/agents/agent_builder.py +45 -9
- 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_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
- claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
- claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
- 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 -46
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
- claude_mpm/services/agents/local_template_manager.py +50 -10
- 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/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +36 -16
- claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
- claude_mpm/services/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/core/models/agent_config.py +3 -0
- claude_mpm/services/core/models/process.py +4 -0
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
- claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
- claude_mpm/services/diagnostics/models.py +21 -0
- claude_mpm/services/event_bus/direct_relay.py +3 -3
- claude_mpm/services/event_bus/event_bus.py +36 -3
- claude_mpm/services/event_bus/relay.py +23 -7
- claude_mpm/services/events/consumers/logging.py +1 -2
- 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/infrastructure/monitoring/__init__.py +1 -5
- claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
- claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
- 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 +5 -13
- claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
- claude_mpm/services/local_ops/health_manager.py +1 -4
- claude_mpm/services/local_ops/process_manager.py +1 -1
- claude_mpm/services/local_ops/resource_monitor.py +2 -2
- claude_mpm/services/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
- claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
- claude_mpm/services/mcp_gateway/core/process_pool.py +41 -26
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/memory/failure_tracker.py +19 -4
- claude_mpm/services/memory/optimizer.py +1 -1
- claude_mpm/services/model/model_router.py +8 -9
- claude_mpm/services/monitor/daemon.py +29 -9
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- claude_mpm/services/monitor/server.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/port_manager.py +1 -1
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/documentation_manager.py +2 -1
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +17 -3
- claude_mpm/services/self_upgrade_service.py +165 -7
- claude_mpm/services/session_management_service.py +16 -4
- 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/handlers/connection.py +1 -1
- claude_mpm/services/socketio/handlers/git.py +2 -2
- claude_mpm/services/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- claude_mpm/services/system_instructions_service.py +1 -3
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
- claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +3 -3
- claude_mpm/skills/agent_skills_injector.py +42 -49
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
- claude_mpm/skills/bundled/performance-profiling.md +6 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
- claude_mpm/skills/skills_registry.py +44 -48
- claude_mpm/skills/skills_service.py +117 -108
- 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 +8 -8
- 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/utils/agent_dependency_loader.py +80 -13
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +244 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +3 -5
- claude_mpm/utils/structured_questions.py +619 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +496 -65
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +328 -416
- 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 -273
- claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
- claude_mpm/agents/templates/api_qa.json +0 -180
- claude_mpm/agents/templates/circuit_breakers.md +0 -638
- claude_mpm/agents/templates/clerk-ops.json +0 -235
- claude_mpm/agents/templates/code_analyzer.json +0 -101
- claude_mpm/agents/templates/content-agent.json +0 -358
- claude_mpm/agents/templates/dart_engineer.json +0 -307
- claude_mpm/agents/templates/data_engineer.json +0 -225
- claude_mpm/agents/templates/documentation.json +0 -211
- claude_mpm/agents/templates/engineer.json +0 -210
- claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
- claude_mpm/agents/templates/golang_engineer.json +0 -270
- claude_mpm/agents/templates/imagemagick.json +0 -264
- claude_mpm/agents/templates/java_engineer.json +0 -346
- claude_mpm/agents/templates/local_ops_agent.json +0 -1840
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
- claude_mpm/agents/templates/memory_manager.json +0 -158
- claude_mpm/agents/templates/nextjs_engineer.json +0 -285
- claude_mpm/agents/templates/ops.json +0 -185
- claude_mpm/agents/templates/php-engineer.json +0 -281
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -140
- claude_mpm/agents/templates/prompt-engineer.json +0 -737
- claude_mpm/agents/templates/python_engineer.json +0 -387
- claude_mpm/agents/templates/qa.json +0 -242
- claude_mpm/agents/templates/react_engineer.json +0 -238
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -188
- claude_mpm/agents/templates/ruby-engineer.json +0 -280
- claude_mpm/agents/templates/rust_engineer.json +0 -275
- claude_mpm/agents/templates/security.json +0 -202
- claude_mpm/agents/templates/svelte-engineer.json +0 -225
- claude_mpm/agents/templates/ticketing.json +0 -177
- claude_mpm/agents/templates/typescript_engineer.json +0 -285
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
- claude_mpm/agents/templates/version_control.json +0 -157
- claude_mpm/agents/templates/web_qa.json +0 -399
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/cli/commands/mpm_init.py +0 -2093
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
- claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
- claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
- claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
- claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
- claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
- claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
- 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/connection-debug.js +0 -654
- claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
- 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-change-tracker.js +0 -443
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/file-viewer.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/nav-bar.js +0 -145
- claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
- 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/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/built/react/events.js +0 -30
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
- claude_mpm/dashboard/static/built/shared/logger.js +0 -385
- claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
- 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/file-viewer.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/react/events.js +0 -30
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/js/shared/logger.js +0 -385
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
- claude_mpm/dashboard/static/legacy/activity.html +0 -736
- claude_mpm/dashboard/static/legacy/agents.html +0 -786
- claude_mpm/dashboard/static/legacy/files.html +0 -747
- claude_mpm/dashboard/static/legacy/tools.html +0 -831
- claude_mpm/dashboard/static/monitors.html +0 -431
- claude_mpm/dashboard/static/production/events.html +0 -659
- claude_mpm/dashboard/static/production/main.html +0 -698
- claude_mpm/dashboard/static/production/monitors.html +0 -483
- claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
- claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
- claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
- claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -75
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -184
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -107
- claude_mpm/skills/bundled/collaboration/requesting-code-review/code-reviewer.md +0 -146
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -118
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -177
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -175
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -314
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -227
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -74
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -32
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -328
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -209
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -123
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -304
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -96
- claude_mpm/tools/code_tree_analyzer.py +0 -1825
- /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
- /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
- /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
- /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
"""Ticket management question templates.
|
|
2
|
+
|
|
3
|
+
This module provides templates for gathering user preferences about ticket
|
|
4
|
+
prioritization, scope, and management during sprint planning and execution.
|
|
5
|
+
|
|
6
|
+
Templates:
|
|
7
|
+
- TicketPrioritizationTemplate: How to order/prioritize tickets
|
|
8
|
+
- TicketScopeTemplate: Testing and documentation requirements per ticket
|
|
9
|
+
- TicketDependencyTemplate: How to handle ticket dependencies
|
|
10
|
+
|
|
11
|
+
These templates help PM make informed decisions about ticket execution order
|
|
12
|
+
and completeness criteria.
|
|
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 TicketPrioritizationTemplate(ConditionalTemplate):
|
|
27
|
+
"""Template for ticket prioritization decisions.
|
|
28
|
+
|
|
29
|
+
Asks about:
|
|
30
|
+
- How to order tickets (priority-based, dependency-based, etc.)
|
|
31
|
+
- Whether to work serially or in parallel
|
|
32
|
+
- How to handle blockers
|
|
33
|
+
|
|
34
|
+
Context Parameters:
|
|
35
|
+
num_tickets (int): Number of tickets to prioritize
|
|
36
|
+
has_dependencies (bool): Whether tickets have interdependencies
|
|
37
|
+
team_size (int): Number of engineers available
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
>>> template = TicketPrioritizationTemplate(
|
|
41
|
+
... num_tickets=5,
|
|
42
|
+
... has_dependencies=True,
|
|
43
|
+
... team_size=1
|
|
44
|
+
... )
|
|
45
|
+
>>> question_set = template.build()
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def __init__(
|
|
49
|
+
self,
|
|
50
|
+
num_tickets: int = 1,
|
|
51
|
+
has_dependencies: bool = False,
|
|
52
|
+
team_size: int = 1,
|
|
53
|
+
**context,
|
|
54
|
+
):
|
|
55
|
+
"""Initialize ticket prioritization template.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
num_tickets: Number of tickets to manage
|
|
59
|
+
has_dependencies: Whether tickets depend on each other
|
|
60
|
+
team_size: Number of engineers available
|
|
61
|
+
**context: Additional context values
|
|
62
|
+
"""
|
|
63
|
+
super().__init__(
|
|
64
|
+
num_tickets=num_tickets,
|
|
65
|
+
has_dependencies=has_dependencies,
|
|
66
|
+
team_size=team_size,
|
|
67
|
+
**context,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
def build(self) -> QuestionSet:
|
|
71
|
+
"""Build ticket prioritization questions.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
QuestionSet with prioritization questions
|
|
75
|
+
"""
|
|
76
|
+
num_tickets = self.get_context("num_tickets", 1)
|
|
77
|
+
has_dependencies = self.get_context("has_dependencies", False)
|
|
78
|
+
team_size = self.get_context("team_size", 1)
|
|
79
|
+
|
|
80
|
+
questions: list[StructuredQuestion] = []
|
|
81
|
+
|
|
82
|
+
# Question 1: Prioritization strategy (only if multiple tickets)
|
|
83
|
+
if num_tickets > 1:
|
|
84
|
+
if has_dependencies:
|
|
85
|
+
priority_question = (
|
|
86
|
+
QuestionBuilder()
|
|
87
|
+
.ask("How should we handle ticket dependencies?")
|
|
88
|
+
.header("Dependencies")
|
|
89
|
+
.add_option(
|
|
90
|
+
"Sequential execution",
|
|
91
|
+
"Complete tickets in dependency order (foundational work first)",
|
|
92
|
+
)
|
|
93
|
+
.add_option(
|
|
94
|
+
"Parallel where possible",
|
|
95
|
+
"Work on independent tickets in parallel, sequential for dependent ones",
|
|
96
|
+
)
|
|
97
|
+
.build()
|
|
98
|
+
)
|
|
99
|
+
else:
|
|
100
|
+
priority_question = (
|
|
101
|
+
QuestionBuilder()
|
|
102
|
+
.ask("How should we prioritize the tickets?")
|
|
103
|
+
.header("Priority")
|
|
104
|
+
.add_option(
|
|
105
|
+
"User-visible first",
|
|
106
|
+
"Prioritize features that directly impact users",
|
|
107
|
+
)
|
|
108
|
+
.add_option(
|
|
109
|
+
"Infrastructure first",
|
|
110
|
+
"Build foundational components before user-facing features",
|
|
111
|
+
)
|
|
112
|
+
.add_option(
|
|
113
|
+
"Quick wins first",
|
|
114
|
+
"Start with easiest tickets to build momentum",
|
|
115
|
+
)
|
|
116
|
+
.add_option(
|
|
117
|
+
"High risk first",
|
|
118
|
+
"Tackle uncertain/risky tickets early to derisk project",
|
|
119
|
+
)
|
|
120
|
+
.build()
|
|
121
|
+
)
|
|
122
|
+
questions.append(priority_question)
|
|
123
|
+
|
|
124
|
+
# Question 2: Execution strategy (only if multiple tickets and team)
|
|
125
|
+
if num_tickets > 1 and team_size >= 1:
|
|
126
|
+
execution_question = (
|
|
127
|
+
QuestionBuilder()
|
|
128
|
+
.ask("How should tickets be executed?")
|
|
129
|
+
.header("Execution")
|
|
130
|
+
.add_option(
|
|
131
|
+
"One at a time",
|
|
132
|
+
"Complete each ticket fully before starting the next",
|
|
133
|
+
)
|
|
134
|
+
.add_option(
|
|
135
|
+
"Parallel execution",
|
|
136
|
+
"Work on multiple tickets simultaneously when possible",
|
|
137
|
+
)
|
|
138
|
+
.build()
|
|
139
|
+
)
|
|
140
|
+
questions.append(execution_question)
|
|
141
|
+
|
|
142
|
+
# Fallback for single ticket or default case
|
|
143
|
+
if not questions:
|
|
144
|
+
scope_question = (
|
|
145
|
+
QuestionBuilder()
|
|
146
|
+
.ask("What should be the ticket completion criteria?")
|
|
147
|
+
.header("Criteria")
|
|
148
|
+
.add_option(
|
|
149
|
+
"Implementation only",
|
|
150
|
+
"Code implementation complete, basic functionality working",
|
|
151
|
+
)
|
|
152
|
+
.add_option(
|
|
153
|
+
"Implementation + tests",
|
|
154
|
+
"Code complete with passing unit tests",
|
|
155
|
+
)
|
|
156
|
+
.build()
|
|
157
|
+
)
|
|
158
|
+
questions.append(scope_question)
|
|
159
|
+
|
|
160
|
+
return QuestionSet(questions)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class TicketScopeTemplate(ConditionalTemplate):
|
|
164
|
+
"""Template for ticket scope and completeness requirements.
|
|
165
|
+
|
|
166
|
+
Asks about:
|
|
167
|
+
- Testing requirements (unit, integration, e2e)
|
|
168
|
+
- Documentation requirements
|
|
169
|
+
- Code review requirements
|
|
170
|
+
- Definition of done
|
|
171
|
+
|
|
172
|
+
Context Parameters:
|
|
173
|
+
ticket_type (str): Type of ticket (feature, bug, refactor)
|
|
174
|
+
is_user_facing (bool): Whether ticket affects end users
|
|
175
|
+
project_maturity (str): Project stage (prototype, beta, production)
|
|
176
|
+
|
|
177
|
+
Example:
|
|
178
|
+
>>> template = TicketScopeTemplate(
|
|
179
|
+
... ticket_type="feature",
|
|
180
|
+
... is_user_facing=True,
|
|
181
|
+
... project_maturity="production"
|
|
182
|
+
... )
|
|
183
|
+
>>> question_set = template.build()
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
def __init__(
|
|
187
|
+
self,
|
|
188
|
+
ticket_type: str | None = "feature",
|
|
189
|
+
is_user_facing: bool = False,
|
|
190
|
+
project_maturity: str = "development",
|
|
191
|
+
**context,
|
|
192
|
+
):
|
|
193
|
+
"""Initialize ticket scope template.
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
ticket_type: Type of ticket (feature, bug, refactor, etc.)
|
|
197
|
+
is_user_facing: Whether changes affect end users
|
|
198
|
+
project_maturity: Stage of project (prototype, development, production)
|
|
199
|
+
**context: Additional context values
|
|
200
|
+
"""
|
|
201
|
+
super().__init__(
|
|
202
|
+
ticket_type=ticket_type,
|
|
203
|
+
is_user_facing=is_user_facing,
|
|
204
|
+
project_maturity=project_maturity,
|
|
205
|
+
**context,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
def build(self) -> QuestionSet:
|
|
209
|
+
"""Build ticket scope questions.
|
|
210
|
+
|
|
211
|
+
Returns:
|
|
212
|
+
QuestionSet with scope questions
|
|
213
|
+
"""
|
|
214
|
+
ticket_type = self.get_context("ticket_type", "feature")
|
|
215
|
+
is_user_facing = self.get_context("is_user_facing", False)
|
|
216
|
+
project_maturity = self.get_context("project_maturity", "development")
|
|
217
|
+
|
|
218
|
+
questions: list[StructuredQuestion] = []
|
|
219
|
+
|
|
220
|
+
# Question 1: Testing requirements
|
|
221
|
+
if project_maturity == "production" or is_user_facing:
|
|
222
|
+
testing_question = (
|
|
223
|
+
QuestionBuilder()
|
|
224
|
+
.ask("What testing is required for this ticket?")
|
|
225
|
+
.header("Testing")
|
|
226
|
+
.add_option(
|
|
227
|
+
"Comprehensive",
|
|
228
|
+
"Unit tests, integration tests, and e2e tests required",
|
|
229
|
+
)
|
|
230
|
+
.add_option(
|
|
231
|
+
"Standard",
|
|
232
|
+
"Unit tests and integration tests for critical paths",
|
|
233
|
+
)
|
|
234
|
+
.add_option(
|
|
235
|
+
"Basic",
|
|
236
|
+
"Unit tests for core functionality only",
|
|
237
|
+
)
|
|
238
|
+
.build()
|
|
239
|
+
)
|
|
240
|
+
else:
|
|
241
|
+
testing_question = (
|
|
242
|
+
QuestionBuilder()
|
|
243
|
+
.ask("What testing is required for this ticket?")
|
|
244
|
+
.header("Testing")
|
|
245
|
+
.add_option(
|
|
246
|
+
"Unit tests",
|
|
247
|
+
"Unit tests covering core functionality",
|
|
248
|
+
)
|
|
249
|
+
.add_option(
|
|
250
|
+
"Integration tests",
|
|
251
|
+
"Integration tests for component interactions",
|
|
252
|
+
)
|
|
253
|
+
.add_option(
|
|
254
|
+
"Manual testing",
|
|
255
|
+
"Manual verification sufficient for now",
|
|
256
|
+
)
|
|
257
|
+
.build()
|
|
258
|
+
)
|
|
259
|
+
questions.append(testing_question)
|
|
260
|
+
|
|
261
|
+
# Question 2: Documentation requirements
|
|
262
|
+
if is_user_facing or ticket_type == "feature":
|
|
263
|
+
docs_question = (
|
|
264
|
+
QuestionBuilder()
|
|
265
|
+
.ask("What documentation is needed?")
|
|
266
|
+
.header("Docs")
|
|
267
|
+
.add_option(
|
|
268
|
+
"Full documentation",
|
|
269
|
+
"API docs, user guide, and code comments",
|
|
270
|
+
)
|
|
271
|
+
.add_option(
|
|
272
|
+
"API docs only",
|
|
273
|
+
"Document public interfaces and usage examples",
|
|
274
|
+
)
|
|
275
|
+
.add_option(
|
|
276
|
+
"Code comments",
|
|
277
|
+
"Inline comments for complex logic only",
|
|
278
|
+
)
|
|
279
|
+
.add_option(
|
|
280
|
+
"None",
|
|
281
|
+
"Code is self-documenting, no additional docs needed",
|
|
282
|
+
)
|
|
283
|
+
.build()
|
|
284
|
+
)
|
|
285
|
+
questions.append(docs_question)
|
|
286
|
+
|
|
287
|
+
return QuestionSet(questions)
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
class TicketDependencyTemplate(ConditionalTemplate):
|
|
291
|
+
"""Template for handling ticket dependencies and blocking issues.
|
|
292
|
+
|
|
293
|
+
Asks about:
|
|
294
|
+
- How to handle blocked tickets
|
|
295
|
+
- Whether to wait or work around dependencies
|
|
296
|
+
- Parallel work strategies
|
|
297
|
+
|
|
298
|
+
Context Parameters:
|
|
299
|
+
blocked_tickets (int): Number of tickets currently blocked
|
|
300
|
+
blocking_type (str): Type of blocker (technical, external, approval)
|
|
301
|
+
|
|
302
|
+
Example:
|
|
303
|
+
>>> template = TicketDependencyTemplate(
|
|
304
|
+
... blocked_tickets=2,
|
|
305
|
+
... blocking_type="external"
|
|
306
|
+
... )
|
|
307
|
+
>>> question_set = template.build()
|
|
308
|
+
"""
|
|
309
|
+
|
|
310
|
+
def __init__(
|
|
311
|
+
self,
|
|
312
|
+
blocked_tickets: int = 0,
|
|
313
|
+
blocking_type: str | None = None,
|
|
314
|
+
**context,
|
|
315
|
+
):
|
|
316
|
+
"""Initialize ticket dependency template.
|
|
317
|
+
|
|
318
|
+
Args:
|
|
319
|
+
blocked_tickets: Number of blocked tickets
|
|
320
|
+
blocking_type: Type of blocker (technical, external, approval, etc.)
|
|
321
|
+
**context: Additional context values
|
|
322
|
+
"""
|
|
323
|
+
super().__init__(
|
|
324
|
+
blocked_tickets=blocked_tickets, blocking_type=blocking_type, **context
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
def build(self) -> QuestionSet:
|
|
328
|
+
"""Build dependency handling questions.
|
|
329
|
+
|
|
330
|
+
Returns:
|
|
331
|
+
QuestionSet with dependency questions
|
|
332
|
+
"""
|
|
333
|
+
blocked_tickets = self.get_context("blocked_tickets", 0)
|
|
334
|
+
blocking_type = self.get_context("blocking_type")
|
|
335
|
+
|
|
336
|
+
questions: list[StructuredQuestion] = []
|
|
337
|
+
|
|
338
|
+
# Question about handling blockers
|
|
339
|
+
if blocked_tickets > 0:
|
|
340
|
+
if blocking_type == "external":
|
|
341
|
+
blocker_question = (
|
|
342
|
+
QuestionBuilder()
|
|
343
|
+
.ask("How should we handle external dependencies?")
|
|
344
|
+
.header("Blockers")
|
|
345
|
+
.add_option(
|
|
346
|
+
"Wait for unblock",
|
|
347
|
+
"Pause blocked tickets until external dependency resolves",
|
|
348
|
+
)
|
|
349
|
+
.add_option(
|
|
350
|
+
"Mock and continue",
|
|
351
|
+
"Create mocks/stubs to continue development",
|
|
352
|
+
)
|
|
353
|
+
.add_option(
|
|
354
|
+
"Work around",
|
|
355
|
+
"Find alternative implementation to avoid dependency",
|
|
356
|
+
)
|
|
357
|
+
.build()
|
|
358
|
+
)
|
|
359
|
+
else:
|
|
360
|
+
blocker_question = (
|
|
361
|
+
QuestionBuilder()
|
|
362
|
+
.ask("How should we handle blocked tickets?")
|
|
363
|
+
.header("Blockers")
|
|
364
|
+
.add_option(
|
|
365
|
+
"Resolve blockers first",
|
|
366
|
+
"Prioritize unblocking tickets before continuing",
|
|
367
|
+
)
|
|
368
|
+
.add_option(
|
|
369
|
+
"Parallel work",
|
|
370
|
+
"Work on unblocked tickets while resolving blockers",
|
|
371
|
+
)
|
|
372
|
+
.build()
|
|
373
|
+
)
|
|
374
|
+
questions.append(blocker_question)
|
|
375
|
+
|
|
376
|
+
# Default question if no specific blockers
|
|
377
|
+
if not questions:
|
|
378
|
+
dependency_question = (
|
|
379
|
+
QuestionBuilder()
|
|
380
|
+
.ask("How should we manage ticket dependencies?")
|
|
381
|
+
.header("Dependencies")
|
|
382
|
+
.add_option(
|
|
383
|
+
"Strict ordering",
|
|
384
|
+
"Maintain strict dependency order, wait for prerequisites",
|
|
385
|
+
)
|
|
386
|
+
.add_option(
|
|
387
|
+
"Flexible approach",
|
|
388
|
+
"Start dependent work in parallel with preparation work",
|
|
389
|
+
)
|
|
390
|
+
.build()
|
|
391
|
+
)
|
|
392
|
+
questions.append(dependency_question)
|
|
393
|
+
|
|
394
|
+
return QuestionSet(questions)
|
claude_mpm/tools/__main__.py
CHANGED
|
@@ -173,14 +173,14 @@ def main():
|
|
|
173
173
|
Code Analysis Summary
|
|
174
174
|
=====================
|
|
175
175
|
Path: {path}
|
|
176
|
-
Files processed: {stats.get(
|
|
177
|
-
Total nodes: {stats.get(
|
|
178
|
-
Classes: {stats.get(
|
|
179
|
-
Functions: {stats.get(
|
|
180
|
-
Imports: {stats.get(
|
|
181
|
-
Languages: {
|
|
182
|
-
Average complexity: {stats.get(
|
|
183
|
-
Duration: {stats.get(
|
|
176
|
+
Files processed: {stats.get("files_processed", 0)}
|
|
177
|
+
Total nodes: {stats.get("total_nodes", 0)}
|
|
178
|
+
Classes: {stats.get("classes", 0)}
|
|
179
|
+
Functions: {stats.get("functions", 0)}
|
|
180
|
+
Imports: {stats.get("imports", 0)}
|
|
181
|
+
Languages: {", ".join(stats.get("languages", []))}
|
|
182
|
+
Average complexity: {stats.get("avg_complexity", 0):.2f}
|
|
183
|
+
Duration: {stats.get("duration", 0):.2f}s
|
|
184
184
|
"""
|
|
185
185
|
if output_file:
|
|
186
186
|
output_file.write(summary)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Code Tree Analyzer
|
|
4
|
+
==================
|
|
5
|
+
|
|
6
|
+
Analyzes source code using AST to extract structure and metrics,
|
|
7
|
+
supporting multiple languages and emitting incremental events for visualization.
|
|
8
|
+
|
|
9
|
+
This module has been refactored from a single 1,825-line file into focused,
|
|
10
|
+
maintainable components while preserving complete backward compatibility.
|
|
11
|
+
|
|
12
|
+
Public API:
|
|
13
|
+
-----------
|
|
14
|
+
- CodeTreeAnalyzer: Main analyzer class
|
|
15
|
+
- CodeNode: Data structure for code nodes
|
|
16
|
+
- GitignoreManager: Gitignore pattern matching
|
|
17
|
+
- PythonAnalyzer: Python AST analysis
|
|
18
|
+
- MultiLanguageAnalyzer: Multi-language support
|
|
19
|
+
|
|
20
|
+
Example Usage:
|
|
21
|
+
--------------
|
|
22
|
+
from claude_mpm.tools.code_tree_analyzer import CodeTreeAnalyzer
|
|
23
|
+
|
|
24
|
+
analyzer = CodeTreeAnalyzer(emit_events=True)
|
|
25
|
+
result = analyzer.analyze_directory(Path("/path/to/code"))
|
|
26
|
+
print(result['stats'])
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
# Public API - Backward compatible imports
|
|
30
|
+
from .core import CodeTreeAnalyzer
|
|
31
|
+
from .gitignore import GitignoreManager
|
|
32
|
+
from .models import CodeNode
|
|
33
|
+
from .multilang_analyzer import MultiLanguageAnalyzer
|
|
34
|
+
from .python_analyzer import PythonAnalyzer
|
|
35
|
+
|
|
36
|
+
__all__ = [
|
|
37
|
+
"CodeNode",
|
|
38
|
+
"CodeTreeAnalyzer",
|
|
39
|
+
"GitignoreManager",
|
|
40
|
+
"MultiLanguageAnalyzer",
|
|
41
|
+
"PythonAnalyzer",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
# Version info
|
|
45
|
+
__version__ = "2.0.0" # Major refactoring while maintaining API compatibility
|