claude-mpm 4.1.26__py3-none-any.whl → 4.24.0__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 +420 -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 +299 -29
- claude_mpm/agents/PM_INSTRUCTIONS.md +1159 -0
- claude_mpm/agents/WORKFLOW.md +355 -191
- claude_mpm/agents/agent_loader.py +40 -10
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/async_agent_loader.py +3 -3
- claude_mpm/agents/base_agent_loader.py +11 -9
- claude_mpm/agents/frontmatter_validator.py +291 -251
- claude_mpm/agents/system_agent_config.py +3 -2
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/agent-manager.json +7 -4
- claude_mpm/agents/templates/{agentic_coder_optimizer.json → agentic-coder-optimizer.json} +33 -7
- claude_mpm/agents/templates/api_qa.json +16 -4
- claude_mpm/agents/templates/circuit_breakers.md +638 -0
- claude_mpm/agents/templates/clerk-ops.json +235 -0
- claude_mpm/agents/templates/code_analyzer.json +10 -4
- claude_mpm/agents/templates/content-agent.json +358 -0
- claude_mpm/agents/templates/dart_engineer.json +307 -0
- claude_mpm/agents/templates/data_engineer.json +87 -14
- claude_mpm/agents/templates/documentation.json +76 -13
- claude_mpm/agents/templates/engineer.json +43 -9
- claude_mpm/agents/templates/gcp_ops_agent.json +253 -0
- claude_mpm/agents/templates/git_file_tracking.md +584 -0
- claude_mpm/agents/templates/golang_engineer.json +270 -0
- claude_mpm/agents/templates/imagemagick.json +5 -2
- claude_mpm/agents/templates/java_engineer.json +346 -0
- claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
- claude_mpm/agents/templates/local_ops_agent.json +1840 -0
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +400 -0
- claude_mpm/agents/templates/memory_manager.json +6 -3
- claude_mpm/agents/templates/nextjs_engineer.json +285 -0
- claude_mpm/agents/templates/ops.json +14 -4
- claude_mpm/agents/templates/php-engineer.json +287 -0
- claude_mpm/agents/templates/pm_examples.md +474 -0
- claude_mpm/agents/templates/pm_red_flags.md +262 -0
- claude_mpm/agents/templates/product_owner.json +338 -0
- claude_mpm/agents/templates/project_organizer.json +19 -5
- claude_mpm/agents/templates/prompt-engineer.json +737 -0
- claude_mpm/agents/templates/python_engineer.json +387 -0
- claude_mpm/agents/templates/qa.json +25 -5
- claude_mpm/agents/templates/react_engineer.json +239 -0
- claude_mpm/agents/templates/refactoring_engineer.json +15 -5
- claude_mpm/agents/templates/research.json +46 -21
- claude_mpm/agents/templates/response_format.md +583 -0
- claude_mpm/agents/templates/ruby-engineer.json +280 -0
- claude_mpm/agents/templates/rust_engineer.json +275 -0
- claude_mpm/agents/templates/security.json +59 -10
- claude_mpm/agents/templates/svelte-engineer.json +225 -0
- claude_mpm/agents/templates/tauri_engineer.json +274 -0
- claude_mpm/agents/templates/ticketing.json +16 -7
- claude_mpm/agents/templates/typescript_engineer.json +285 -0
- claude_mpm/agents/templates/validation_templates.md +312 -0
- claude_mpm/agents/templates/vercel_ops_agent.json +164 -33
- claude_mpm/agents/templates/version_control.json +16 -4
- claude_mpm/agents/templates/web_qa.json +167 -21
- claude_mpm/agents/templates/web_ui.json +18 -5
- claude_mpm/cli/__init__.py +38 -378
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_manager.py +675 -20
- claude_mpm/cli/commands/agent_state_manager.py +186 -0
- claude_mpm/cli/commands/agents.py +722 -150
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- claude_mpm/cli/commands/aggregate.py +10 -6
- claude_mpm/cli/commands/analyze.py +15 -10
- claude_mpm/cli/commands/analyze_code.py +8 -4
- claude_mpm/cli/commands/auto_configure.py +570 -0
- claude_mpm/cli/commands/cleanup.py +12 -12
- claude_mpm/cli/commands/config.py +47 -13
- claude_mpm/cli/commands/configure.py +469 -1064
- 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 +167 -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 +7 -7
- claude_mpm/cli/commands/doctor.py +43 -7
- claude_mpm/cli/commands/info.py +3 -4
- claude_mpm/cli/commands/local_deploy.py +537 -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 +525 -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/run.py +169 -42
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skills.py +488 -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 +204 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +962 -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/agents_parser.py +116 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +143 -3
- 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/skills_parser.py +137 -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 +562 -0
- claude_mpm/cli/startup_logging.py +179 -13
- claude_mpm/cli/utils.py +53 -2
- claude_mpm/commands/mpm-agents-detect.md +168 -0
- claude_mpm/commands/mpm-agents-recommend.md +214 -0
- claude_mpm/commands/mpm-agents.md +118 -8
- claude_mpm/commands/mpm-auto-configure.md +269 -0
- claude_mpm/commands/mpm-config.md +137 -14
- claude_mpm/commands/mpm-help.md +285 -5
- claude_mpm/commands/mpm-init.md +374 -15
- claude_mpm/commands/mpm-monitor.md +409 -0
- claude_mpm/commands/mpm-organize.md +295 -0
- claude_mpm/commands/mpm-resume.md +372 -0
- claude_mpm/commands/mpm-status.md +71 -9
- claude_mpm/commands/mpm-tickets.md +56 -7
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +2 -0
- claude_mpm/config/agent_config.py +4 -4
- 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/socketio_config.py +3 -3
- claude_mpm/constants.py +15 -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 +19 -8
- claude_mpm/core/config.py +85 -8
- claude_mpm/core/config_aliases.py +7 -6
- claude_mpm/core/constants.py +65 -0
- 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 +38 -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 +223 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +161 -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_manager.py +8 -6
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +4 -3
- claude_mpm/core/interactive_session.py +55 -8
- 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 +19 -14
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/oneshot_session.py +51 -7
- 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/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/socketio_pool.py +15 -15
- 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/react/components/DataInspector/DataInspector.module.css +188 -0
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +156 -0
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +38 -0
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +92 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +248 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +61 -0
- claude_mpm/dashboard/static/archive/test_activity_connection.html +179 -0
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +68 -0
- claude_mpm/dashboard/static/archive/test_dashboard.html +409 -0
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +519 -0
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +181 -0
- claude_mpm/dashboard/static/archive/test_file_data.html +315 -0
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +243 -0
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +234 -0
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +117 -0
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +115 -0
- claude_mpm/dashboard/static/archive/test_file_viewer.html +224 -0
- claude_mpm/dashboard/static/archive/test_final_activity.html +220 -0
- claude_mpm/dashboard/static/archive/test_tab_fix.html +139 -0
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/built/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +777 -0
- claude_mpm/dashboard/static/built/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/built/components/build-tracker.js +333 -0
- claude_mpm/dashboard/static/built/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +353 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +235 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +409 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +435 -0
- claude_mpm/dashboard/static/built/components/code-tree.js +1 -1
- claude_mpm/dashboard/static/built/components/code-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/connection-debug.js +654 -0
- claude_mpm/dashboard/static/built/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/built/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/built/components/file-viewer.js +2 -0
- claude_mpm/dashboard/static/built/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/nav-bar.js +145 -0
- claude_mpm/dashboard/static/built/components/page-structure.js +429 -0
- claude_mpm/dashboard/static/built/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/built/connection-manager.js +536 -0
- claude_mpm/dashboard/static/built/dashboard.js +1 -1
- claude_mpm/dashboard/static/built/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/built/react/events.js +30 -0
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +396 -0
- claude_mpm/dashboard/static/built/shared/event-bus.js +330 -0
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +540 -0
- claude_mpm/dashboard/static/built/shared/logger.js +385 -0
- claude_mpm/dashboard/static/built/shared/page-structure.js +249 -0
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +253 -0
- claude_mpm/dashboard/static/built/socket-client.js +1 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/css/dashboard.css +588 -6
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/dist/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/dist/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/dist/dashboard.js +1 -1
- claude_mpm/dashboard/static/dist/react/events.js +30 -0
- claude_mpm/dashboard/static/dist/socket-client.js +1 -1
- claude_mpm/dashboard/static/events.html +607 -0
- claude_mpm/dashboard/static/index.html +635 -0
- claude_mpm/dashboard/static/js/components/activity-tree.js +3 -17
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +4 -1
- claude_mpm/dashboard/static/js/components/agent-inference.js +3 -0
- claude_mpm/dashboard/static/js/components/build-tracker.js +8 -0
- claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
- 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 +39 -2
- 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 +30 -10
- claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +26 -0
- claude_mpm/dashboard/static/js/components/session-manager.js +7 -7
- claude_mpm/dashboard/static/js/components/socket-manager.js +4 -0
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +455 -23
- claude_mpm/dashboard/static/js/components/working-directory.js +44 -9
- claude_mpm/dashboard/static/js/dashboard.js +245 -132
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +396 -0
- claude_mpm/dashboard/static/js/shared/event-bus.js +330 -0
- claude_mpm/dashboard/static/js/shared/logger.js +385 -0
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +253 -0
- claude_mpm/dashboard/static/js/socket-client.js +49 -22
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +562 -0
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/legacy/activity.html +736 -0
- claude_mpm/dashboard/static/legacy/agents.html +786 -0
- claude_mpm/dashboard/static/legacy/files.html +747 -0
- claude_mpm/dashboard/static/legacy/tools.html +831 -0
- claude_mpm/dashboard/static/monitors.html +431 -0
- claude_mpm/dashboard/static/production/events.html +659 -0
- claude_mpm/dashboard/static/production/main.html +698 -0
- claude_mpm/dashboard/static/production/monitors.html +483 -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/static/test-archive/dashboard.html +635 -0
- claude_mpm/dashboard/static/test-archive/debug-events.html +147 -0
- claude_mpm/dashboard/static/test-archive/test-navigation.html +256 -0
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +180 -0
- claude_mpm/dashboard/static/test-archive/test_debug.html +25 -0
- claude_mpm/dashboard/templates/code_simple.html +153 -0
- claude_mpm/dashboard/templates/index.html +112 -109
- claude_mpm/experimental/cli_enhancements.py +4 -2
- 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/connection_pool.py +4 -4
- claude_mpm/hooks/claude_hooks/event_handlers.py +21 -18
- 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/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 +60 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +235 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +217 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +286 -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 +183 -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/resume_log.py +340 -0
- claude_mpm/scripts/claude-hook-handler.sh +33 -7
- 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/services/__init__.py +144 -160
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/agent_builder.py +13 -11
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_deployment.py +38 -15
- claude_mpm/services/agents/deployment/agent_discovery_service.py +125 -7
- 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 +4 -2
- 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_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +715 -47
- 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/async_agent_deployment.py +1 -1
- 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/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 +134 -38
- 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 +9 -6
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +9 -6
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- 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/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 +2 -2
- claude_mpm/services/agents/local_template_manager.py +744 -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/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 +9 -7
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/base.py +26 -11
- claude_mpm/services/core/interfaces/__init__.py +90 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- claude_mpm/services/core/interfaces/health.py +172 -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 +79 -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 +4 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +30 -32
- 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 +20 -19
- claude_mpm/services/diagnostics/checks/mcp_check.py +57 -43
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1066 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +24 -23
- claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
- claude_mpm/services/diagnostics/diagnostic_runner.py +22 -13
- claude_mpm/services/diagnostics/doctor_reporter.py +275 -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 +8 -4
- 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/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/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 +1 -1
- claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
- 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/local_ops/__init__.py +165 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +28 -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 +430 -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 +1612 -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 +23 -4
- 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 +585 -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 +4 -4
- claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -15
- 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 +551 -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 +729 -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 +453 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +671 -0
- claude_mpm/services/monitor/daemon_manager.py +963 -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 +2 -2
- 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 +553 -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 +581 -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 +1 -0
- claude_mpm/services/self_upgrade_service.py +500 -0
- claude_mpm/services/session_management_service.py +7 -5
- 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/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 +21 -40
- 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 +8 -8
- 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 +141 -4
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +23 -21
- 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 +2 -2
- 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 +903 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +746 -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 +475 -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 +470 -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 +8 -4
- 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/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/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -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/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -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/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -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/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -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/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -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/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -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 +348 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/state_storage.py +31 -31
- claude_mpm/tools/__main__.py +1 -1
- 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 +108 -27
- 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 +2 -2
- 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/log_cleanup.py +627 -0
- claude_mpm/utils/path_operations.py +7 -4
- claude_mpm/utils/robust_installer.py +133 -24
- claude_mpm/utils/session_logging.py +2 -2
- 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-4.24.0.dist-info/METADATA +675 -0
- claude_mpm-4.24.0.dist-info/RECORD +1018 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -261
- claude_mpm/agents/templates/agent-manager.md +0 -619
- 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/dashboard/static/css/code-tree.css +0 -1408
- 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-4.24.0.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-4.24.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# Plan Structure Templates
|
|
2
|
+
|
|
3
|
+
## Standard Plan Document Header
|
|
4
|
+
|
|
5
|
+
**Every plan MUST start with this header:**
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# [Feature Name] Implementation Plan
|
|
9
|
+
|
|
10
|
+
> **For Claude:** Use `${SUPERPOWERS_SKILLS_ROOT}/skills/collaboration/executing-plans/SKILL.md` to implement this plan task-by-task.
|
|
11
|
+
|
|
12
|
+
**Goal:** [One sentence describing what this builds]
|
|
13
|
+
|
|
14
|
+
**Architecture:** [2-3 sentences about approach]
|
|
15
|
+
|
|
16
|
+
**Tech Stack:** [Key technologies/libraries]
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Task Template Structure
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
### Task N: [Component Name]
|
|
25
|
+
|
|
26
|
+
**Files:**
|
|
27
|
+
- Create: `exact/path/to/file.py`
|
|
28
|
+
- Modify: `exact/path/to/existing.py:123-145`
|
|
29
|
+
- Test: `tests/exact/path/to/test.py`
|
|
30
|
+
|
|
31
|
+
**Step 1: Write the failing test**
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
def test_specific_behavior():
|
|
35
|
+
result = function(input)
|
|
36
|
+
assert result == expected
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Step 2: Run test to verify it fails**
|
|
40
|
+
|
|
41
|
+
Run: `pytest tests/path/test.py::test_name -v`
|
|
42
|
+
Expected: FAIL with "function not defined"
|
|
43
|
+
|
|
44
|
+
**Step 3: Write minimal implementation**
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
def function(input):
|
|
48
|
+
return expected
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Step 4: Run test to verify it passes**
|
|
52
|
+
|
|
53
|
+
Run: `pytest tests/path/test.py::test_name -v`
|
|
54
|
+
Expected: PASS
|
|
55
|
+
|
|
56
|
+
**Step 5: Commit**
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git add tests/path/test.py src/path/file.py
|
|
60
|
+
git commit -m "feat: add specific feature"
|
|
61
|
+
```
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Bite-Sized Task Examples
|
|
65
|
+
|
|
66
|
+
### Example 1: Database Model
|
|
67
|
+
|
|
68
|
+
```markdown
|
|
69
|
+
### Task 1: User Model and Schema
|
|
70
|
+
|
|
71
|
+
**Files:**
|
|
72
|
+
- Create: `src/models/user.py`
|
|
73
|
+
- Create: `tests/models/test_user.py`
|
|
74
|
+
- Create: `migrations/001_create_users_table.sql`
|
|
75
|
+
|
|
76
|
+
**Step 1: Write the failing test**
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
def test_user_model_creation():
|
|
80
|
+
user = User(username="alice", email="alice@example.com")
|
|
81
|
+
assert user.username == "alice"
|
|
82
|
+
assert user.email == "alice@example.com"
|
|
83
|
+
assert user.created_at is not None
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Step 2: Run test to verify it fails**
|
|
87
|
+
|
|
88
|
+
Run: `pytest tests/models/test_user.py::test_user_model_creation -v`
|
|
89
|
+
Expected: FAIL with "ModuleNotFoundError: No module named 'models.user'"
|
|
90
|
+
|
|
91
|
+
**Step 3: Write minimal implementation**
|
|
92
|
+
|
|
93
|
+
In `src/models/user.py`:
|
|
94
|
+
```python
|
|
95
|
+
from datetime import datetime
|
|
96
|
+
from dataclasses import dataclass
|
|
97
|
+
|
|
98
|
+
@dataclass
|
|
99
|
+
class User:
|
|
100
|
+
username: str
|
|
101
|
+
email: str
|
|
102
|
+
created_at: datetime = None
|
|
103
|
+
|
|
104
|
+
def __post_init__(self):
|
|
105
|
+
if self.created_at is None:
|
|
106
|
+
self.created_at = datetime.utcnow()
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Step 4: Run test to verify it passes**
|
|
110
|
+
|
|
111
|
+
Run: `pytest tests/models/test_user.py::test_user_model_creation -v`
|
|
112
|
+
Expected: PASS
|
|
113
|
+
|
|
114
|
+
**Step 5: Commit**
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
git add src/models/user.py tests/models/test_user.py
|
|
118
|
+
git commit -m "feat: add User model with basic fields"
|
|
119
|
+
```
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Example 2: API Endpoint
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
### Task 3: GET /users/:id Endpoint
|
|
126
|
+
|
|
127
|
+
**Files:**
|
|
128
|
+
- Modify: `src/api/routes.py:15` (add route)
|
|
129
|
+
- Create: `src/api/handlers/users.py`
|
|
130
|
+
- Create: `tests/api/test_users_endpoint.py`
|
|
131
|
+
|
|
132
|
+
**Step 1: Write the failing test**
|
|
133
|
+
|
|
134
|
+
```python
|
|
135
|
+
def test_get_user_by_id(client, db_with_users):
|
|
136
|
+
response = client.get("/users/1")
|
|
137
|
+
assert response.status_code == 200
|
|
138
|
+
assert response.json["username"] == "alice"
|
|
139
|
+
assert response.json["email"] == "alice@example.com"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Step 2: Run test to verify it fails**
|
|
143
|
+
|
|
144
|
+
Run: `pytest tests/api/test_users_endpoint.py::test_get_user_by_id -v`
|
|
145
|
+
Expected: FAIL with "404 Not Found"
|
|
146
|
+
|
|
147
|
+
**Step 3: Write minimal implementation**
|
|
148
|
+
|
|
149
|
+
In `src/api/handlers/users.py`:
|
|
150
|
+
```python
|
|
151
|
+
from flask import jsonify
|
|
152
|
+
from src.models.user import User
|
|
153
|
+
from src.db import get_db
|
|
154
|
+
|
|
155
|
+
def get_user(user_id):
|
|
156
|
+
db = get_db()
|
|
157
|
+
user = db.query(User).filter(User.id == user_id).first()
|
|
158
|
+
if not user:
|
|
159
|
+
return jsonify({"error": "User not found"}), 404
|
|
160
|
+
return jsonify({
|
|
161
|
+
"id": user.id,
|
|
162
|
+
"username": user.username,
|
|
163
|
+
"email": user.email
|
|
164
|
+
})
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
In `src/api/routes.py` at line 15:
|
|
168
|
+
```python
|
|
169
|
+
from src.api.handlers.users import get_user
|
|
170
|
+
|
|
171
|
+
# Add this route
|
|
172
|
+
app.route("/users/<int:user_id>", methods=["GET"])(get_user)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Step 4: Run test to verify it passes**
|
|
176
|
+
|
|
177
|
+
Run: `pytest tests/api/test_users_endpoint.py::test_get_user_by_id -v`
|
|
178
|
+
Expected: PASS
|
|
179
|
+
|
|
180
|
+
**Step 5: Commit**
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
git add src/api/handlers/users.py src/api/routes.py tests/api/test_users_endpoint.py
|
|
184
|
+
git commit -m "feat: add GET /users/:id endpoint"
|
|
185
|
+
```
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Granularity Guidelines
|
|
189
|
+
|
|
190
|
+
**Each step should take 2-5 minutes:**
|
|
191
|
+
|
|
192
|
+
✅ **Good granularity:**
|
|
193
|
+
- "Write the failing test" - single test function
|
|
194
|
+
- "Run it to make sure it fails" - one command
|
|
195
|
+
- "Implement the minimal code to make the test pass" - focused function
|
|
196
|
+
- "Run the tests and make sure they pass" - verify
|
|
197
|
+
- "Commit" - checkpoint
|
|
198
|
+
|
|
199
|
+
❌ **Too large (split these up):**
|
|
200
|
+
- "Implement the user authentication system" - needs 10+ tasks
|
|
201
|
+
- "Add validation and error handling" - multiple tests/steps
|
|
202
|
+
- "Create all the models" - one task per model
|
|
203
|
+
|
|
204
|
+
❌ **Too small (combine these):**
|
|
205
|
+
- "Import the datetime module" - part of implementation step
|
|
206
|
+
- "Type the function signature" - part of implementation step
|
|
207
|
+
- "Add one line of code" - too granular
|
|
208
|
+
|
|
209
|
+
## Multi-File Task Structure
|
|
210
|
+
|
|
211
|
+
When a task involves multiple related files:
|
|
212
|
+
|
|
213
|
+
```markdown
|
|
214
|
+
### Task 4: Email Validation with Helper
|
|
215
|
+
|
|
216
|
+
**Files:**
|
|
217
|
+
- Create: `src/utils/validators.py`
|
|
218
|
+
- Create: `tests/utils/test_validators.py`
|
|
219
|
+
- Modify: `src/models/user.py:12` (use validator)
|
|
220
|
+
- Modify: `tests/models/test_user.py` (add validation tests)
|
|
221
|
+
|
|
222
|
+
**Step 1: Write failing test for validator**
|
|
223
|
+
|
|
224
|
+
In `tests/utils/test_validators.py`:
|
|
225
|
+
```python
|
|
226
|
+
def test_validate_email_valid():
|
|
227
|
+
assert validate_email("alice@example.com") == True
|
|
228
|
+
|
|
229
|
+
def test_validate_email_invalid():
|
|
230
|
+
assert validate_email("not-an-email") == False
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**Step 2: Run validator test to verify it fails**
|
|
234
|
+
|
|
235
|
+
Run: `pytest tests/utils/test_validators.py -v`
|
|
236
|
+
Expected: FAIL with "NameError: name 'validate_email' is not defined"
|
|
237
|
+
|
|
238
|
+
**Step 3: Implement email validator**
|
|
239
|
+
|
|
240
|
+
In `src/utils/validators.py`:
|
|
241
|
+
```python
|
|
242
|
+
import re
|
|
243
|
+
|
|
244
|
+
def validate_email(email: str) -> bool:
|
|
245
|
+
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
|
|
246
|
+
return bool(re.match(pattern, email))
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Step 4: Run validator test to verify it passes**
|
|
250
|
+
|
|
251
|
+
Run: `pytest tests/utils/test_validators.py -v`
|
|
252
|
+
Expected: PASS (both tests)
|
|
253
|
+
|
|
254
|
+
**Step 5: Write failing test for User model validation**
|
|
255
|
+
|
|
256
|
+
In `tests/models/test_user.py`:
|
|
257
|
+
```python
|
|
258
|
+
def test_user_model_rejects_invalid_email():
|
|
259
|
+
with pytest.raises(ValueError, match="Invalid email"):
|
|
260
|
+
User(username="alice", email="not-an-email")
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Step 6: Run User model test to verify it fails**
|
|
264
|
+
|
|
265
|
+
Run: `pytest tests/models/test_user.py::test_user_model_rejects_invalid_email -v`
|
|
266
|
+
Expected: FAIL (no validation yet)
|
|
267
|
+
|
|
268
|
+
**Step 7: Add validation to User model**
|
|
269
|
+
|
|
270
|
+
In `src/models/user.py` at line 12:
|
|
271
|
+
```python
|
|
272
|
+
from src.utils.validators import validate_email
|
|
273
|
+
|
|
274
|
+
@dataclass
|
|
275
|
+
class User:
|
|
276
|
+
username: str
|
|
277
|
+
email: str
|
|
278
|
+
created_at: datetime = None
|
|
279
|
+
|
|
280
|
+
def __post_init__(self):
|
|
281
|
+
if not validate_email(self.email):
|
|
282
|
+
raise ValueError(f"Invalid email: {self.email}")
|
|
283
|
+
if self.created_at is None:
|
|
284
|
+
self.created_at = datetime.utcnow()
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**Step 8: Run User model test to verify it passes**
|
|
288
|
+
|
|
289
|
+
Run: `pytest tests/models/test_user.py::test_user_model_rejects_invalid_email -v`
|
|
290
|
+
Expected: PASS
|
|
291
|
+
|
|
292
|
+
**Step 9: Run all tests to ensure nothing broke**
|
|
293
|
+
|
|
294
|
+
Run: `pytest tests/ -v`
|
|
295
|
+
Expected: All tests PASS
|
|
296
|
+
|
|
297
|
+
**Step 10: Commit**
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
git add src/utils/validators.py tests/utils/test_validators.py src/models/user.py tests/models/test_user.py
|
|
301
|
+
git commit -m "feat: add email validation to User model"
|
|
302
|
+
```
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Plan File Naming Convention
|
|
306
|
+
|
|
307
|
+
Save plans to: `docs/plans/YYYY-MM-DD-<feature-name>.md`
|
|
308
|
+
|
|
309
|
+
**Examples:**
|
|
310
|
+
- `docs/plans/2025-01-15-user-authentication.md`
|
|
311
|
+
- `docs/plans/2025-01-16-api-rate-limiting.md`
|
|
312
|
+
- `docs/plans/2025-01-17-database-migration-users.md`
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill_id: database-migration
|
|
3
|
+
skill_version: 0.1.0
|
|
4
|
+
description: Safe patterns for evolving database schemas in production.
|
|
5
|
+
updated_at: 2025-10-30T17:00:00Z
|
|
6
|
+
tags: [database, migration, schema, production]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Database Migration
|
|
10
|
+
|
|
11
|
+
Safe patterns for evolving database schemas in production.
|
|
12
|
+
|
|
13
|
+
## Migration Principles
|
|
14
|
+
|
|
15
|
+
1. **Backward compatible** - New code works with old schema
|
|
16
|
+
2. **Reversible** - Can rollback if needed
|
|
17
|
+
3. **Tested** - Verify on staging before production
|
|
18
|
+
4. **Incremental** - Small changes, not big-bang
|
|
19
|
+
5. **Zero downtime** - No service interruption
|
|
20
|
+
|
|
21
|
+
## Safe Migration Pattern
|
|
22
|
+
|
|
23
|
+
### Phase 1: Add New (Compatible)
|
|
24
|
+
```sql
|
|
25
|
+
-- Add new column (nullable initially)
|
|
26
|
+
ALTER TABLE users ADD COLUMN full_name VARCHAR(255) NULL;
|
|
27
|
+
|
|
28
|
+
-- Deploy new code that writes to both old and new
|
|
29
|
+
UPDATE users SET full_name = CONCAT(first_name, ' ', last_name);
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Phase 2: Migrate Data
|
|
33
|
+
```sql
|
|
34
|
+
-- Backfill existing data
|
|
35
|
+
UPDATE users
|
|
36
|
+
SET full_name = CONCAT(first_name, ' ', last_name)
|
|
37
|
+
WHERE full_name IS NULL;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Phase 3: Make Required
|
|
41
|
+
```sql
|
|
42
|
+
-- Make column required
|
|
43
|
+
ALTER TABLE users ALTER COLUMN full_name SET NOT NULL;
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Phase 4: Remove Old (After New Code Deployed)
|
|
47
|
+
```sql
|
|
48
|
+
-- Remove old columns
|
|
49
|
+
ALTER TABLE users DROP COLUMN first_name;
|
|
50
|
+
ALTER TABLE users DROP COLUMN last_name;
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Common Migrations
|
|
54
|
+
|
|
55
|
+
### Adding Index
|
|
56
|
+
```sql
|
|
57
|
+
-- Create index concurrently (PostgreSQL)
|
|
58
|
+
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Renaming Column
|
|
62
|
+
```sql
|
|
63
|
+
-- Phase 1: Add new column
|
|
64
|
+
ALTER TABLE users ADD COLUMN email_address VARCHAR(255);
|
|
65
|
+
|
|
66
|
+
-- Phase 2: Copy data
|
|
67
|
+
UPDATE users SET email_address = email;
|
|
68
|
+
|
|
69
|
+
-- Phase 3: Drop old column (after deploy)
|
|
70
|
+
ALTER TABLE users DROP COLUMN email;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Changing Column Type
|
|
74
|
+
```sql
|
|
75
|
+
-- Phase 1: Add new column with new type
|
|
76
|
+
ALTER TABLE products ADD COLUMN price_cents INTEGER;
|
|
77
|
+
|
|
78
|
+
-- Phase 2: Migrate data
|
|
79
|
+
UPDATE products SET price_cents = CAST(price * 100 AS INTEGER);
|
|
80
|
+
|
|
81
|
+
-- Phase 3: Drop old column
|
|
82
|
+
ALTER TABLE products DROP COLUMN price;
|
|
83
|
+
ALTER TABLE products RENAME COLUMN price_cents TO price;
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Adding Foreign Key
|
|
87
|
+
```sql
|
|
88
|
+
-- Add column first
|
|
89
|
+
ALTER TABLE orders ADD COLUMN user_id INTEGER NULL;
|
|
90
|
+
|
|
91
|
+
-- Populate data
|
|
92
|
+
UPDATE orders SET user_id = (
|
|
93
|
+
SELECT id FROM users WHERE users.email = orders.user_email
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
-- Add foreign key
|
|
97
|
+
ALTER TABLE orders
|
|
98
|
+
ADD CONSTRAINT fk_orders_users
|
|
99
|
+
FOREIGN KEY (user_id) REFERENCES users(id);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Migration Tools
|
|
103
|
+
|
|
104
|
+
### Python (Alembic)
|
|
105
|
+
```python
|
|
106
|
+
# Generate migration
|
|
107
|
+
alembic revision --autogenerate -m "add user full_name"
|
|
108
|
+
|
|
109
|
+
# Apply migration
|
|
110
|
+
alembic upgrade head
|
|
111
|
+
|
|
112
|
+
# Rollback
|
|
113
|
+
alembic downgrade -1
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### JavaScript (Knex)
|
|
117
|
+
```javascript
|
|
118
|
+
// Create migration
|
|
119
|
+
knex migrate:make add_full_name
|
|
120
|
+
|
|
121
|
+
// Apply migrations
|
|
122
|
+
knex migrate:latest
|
|
123
|
+
|
|
124
|
+
// Rollback
|
|
125
|
+
knex migrate:rollback
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Rails
|
|
129
|
+
```ruby
|
|
130
|
+
# Generate migration
|
|
131
|
+
rails generate migration AddFullNameToUsers full_name:string
|
|
132
|
+
|
|
133
|
+
# Run migrations
|
|
134
|
+
rails db:migrate
|
|
135
|
+
|
|
136
|
+
# Rollback
|
|
137
|
+
rails db:rollback
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Testing Migrations
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
def test_migration_forward_backward():
|
|
144
|
+
# Apply migration
|
|
145
|
+
apply_migration("add_full_name")
|
|
146
|
+
|
|
147
|
+
# Verify schema
|
|
148
|
+
assert column_exists("users", "full_name")
|
|
149
|
+
|
|
150
|
+
# Rollback
|
|
151
|
+
rollback_migration()
|
|
152
|
+
|
|
153
|
+
# Verify rollback
|
|
154
|
+
assert not column_exists("users", "full_name")
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Dangerous Operations
|
|
158
|
+
|
|
159
|
+
### ❌ Avoid in Production
|
|
160
|
+
```sql
|
|
161
|
+
-- Locks table for long time
|
|
162
|
+
ALTER TABLE users ADD COLUMN email VARCHAR(255) NOT NULL;
|
|
163
|
+
|
|
164
|
+
-- Can't rollback
|
|
165
|
+
DROP TABLE old_users;
|
|
166
|
+
|
|
167
|
+
-- Breaks existing code immediately
|
|
168
|
+
ALTER TABLE users DROP COLUMN email;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### ✅ Safe Alternatives
|
|
172
|
+
```sql
|
|
173
|
+
-- Add as nullable first
|
|
174
|
+
ALTER TABLE users ADD COLUMN email VARCHAR(255) NULL;
|
|
175
|
+
|
|
176
|
+
-- Rename instead of drop
|
|
177
|
+
ALTER TABLE old_users RENAME TO archived_users;
|
|
178
|
+
|
|
179
|
+
-- Keep old column until new code deployed
|
|
180
|
+
-- (multi-phase approach)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Rollback Strategy
|
|
184
|
+
|
|
185
|
+
```sql
|
|
186
|
+
-- Every migration needs DOWN
|
|
187
|
+
-- UP
|
|
188
|
+
ALTER TABLE users ADD COLUMN full_name VARCHAR(255);
|
|
189
|
+
|
|
190
|
+
-- DOWN
|
|
191
|
+
ALTER TABLE users DROP COLUMN full_name;
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Remember
|
|
195
|
+
- Test migrations on copy of production data
|
|
196
|
+
- Have rollback plan ready
|
|
197
|
+
- Monitor during deployment
|
|
198
|
+
- Communicate with team about schema changes
|
|
199
|
+
- Keep migrations small and focused
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Root Cause Tracing
|
|
3
|
+
description: Systematically trace bugs backward through call stack to find original trigger
|
|
4
|
+
when_to_use: when errors occur deep in execution and you need to trace back to find the original trigger
|
|
5
|
+
version: 2.0.0
|
|
6
|
+
languages: all
|
|
7
|
+
progressive_disclosure:
|
|
8
|
+
entry_point:
|
|
9
|
+
summary: "Trace bugs backward through call chains to find original triggers instead of fixing symptoms"
|
|
10
|
+
when_to_use: "When errors manifest deep in execution, unclear data origins, or long call chains. Use AFTER systematic-debugging Phase 1."
|
|
11
|
+
quick_start: "1. Observe symptom 2. Find immediate cause 3. Ask what called this 4. Keep tracing up 5. Fix at source + add defense"
|
|
12
|
+
references:
|
|
13
|
+
- tracing-techniques.md
|
|
14
|
+
- examples.md
|
|
15
|
+
- advanced-techniques.md
|
|
16
|
+
- integration.md
|
|
17
|
+
context_limit: 800
|
|
18
|
+
tags:
|
|
19
|
+
- debugging
|
|
20
|
+
- root-cause
|
|
21
|
+
- tracing
|
|
22
|
+
- call-stack
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Root Cause Tracing
|
|
26
|
+
|
|
27
|
+
## Overview
|
|
28
|
+
|
|
29
|
+
Bugs often manifest deep in the call stack (git init in wrong directory, file created in wrong location, database opened with wrong path). Your instinct is to fix where the error appears, but that's treating a symptom.
|
|
30
|
+
|
|
31
|
+
**Core principle:** Trace backward through the call chain until you find the original trigger, then fix at the source.
|
|
32
|
+
|
|
33
|
+
This skill is a specialized technique within the systematic-debugging workflow, typically applied during Phase 1 (Root Cause Investigation) when dealing with deep call stacks.
|
|
34
|
+
|
|
35
|
+
## When to Use This Skill
|
|
36
|
+
|
|
37
|
+
**Use root-cause-tracing when:**
|
|
38
|
+
- Error happens deep in execution (not at entry point)
|
|
39
|
+
- Stack trace shows long call chain
|
|
40
|
+
- Unclear where invalid data originated
|
|
41
|
+
- Need to find which test/code triggers the problem
|
|
42
|
+
- Symptom appears far from actual cause
|
|
43
|
+
|
|
44
|
+
**Relationship with systematic-debugging:**
|
|
45
|
+
- systematic-debugging: The overall framework (Phases 1-4)
|
|
46
|
+
- root-cause-tracing: A specific technique for Phase 1 investigation
|
|
47
|
+
- Use root-cause-tracing WITHIN systematic-debugging Phase 1
|
|
48
|
+
|
|
49
|
+
## The Iron Law
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
NEVER FIX JUST WHERE THE ERROR APPEARS
|
|
53
|
+
ALWAYS TRACE BACK TO FIND THE ORIGINAL TRIGGER
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Fixing symptoms creates bandaid solutions that mask root problems.
|
|
57
|
+
|
|
58
|
+
## Core Principles
|
|
59
|
+
|
|
60
|
+
1. **Trace Backward**: Follow call chain from symptom to source
|
|
61
|
+
2. **Find Original Trigger**: Identify where bad data/state originated
|
|
62
|
+
3. **Fix at Source**: Address root cause, not symptom
|
|
63
|
+
4. **Defense-in-Depth**: Add validation at each layer after fixing source
|
|
64
|
+
|
|
65
|
+
## Quick Start
|
|
66
|
+
|
|
67
|
+
### The 5-Step Trace Process
|
|
68
|
+
|
|
69
|
+
1. **Observe the Symptom**: What error message? What failed operation?
|
|
70
|
+
2. **Find Immediate Cause**: What code directly causes this error?
|
|
71
|
+
3. **Ask What Called This**: Trace one level up the call stack
|
|
72
|
+
4. **Keep Tracing Up**: Continue until you find the original trigger
|
|
73
|
+
5. **Fix at Source + Defense**: Fix root cause and add layer validation
|
|
74
|
+
|
|
75
|
+
### Decision Tree
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Error appears deep in stack?
|
|
79
|
+
→ Yes: Start tracing backward
|
|
80
|
+
→ Can identify caller? → Trace one level up → Repeat
|
|
81
|
+
→ Cannot identify caller? → Add instrumentation (see advanced-techniques.md)
|
|
82
|
+
→ No: May not need tracing (error at entry point)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## The Tracing Process
|
|
86
|
+
|
|
87
|
+
**Example: Git init in wrong directory**
|
|
88
|
+
```
|
|
89
|
+
Error symptom → execFileAsync('git', ['init'], { cwd: '' })
|
|
90
|
+
← WorktreeManager.createSessionWorktree(projectDir='')
|
|
91
|
+
← Session.create() → Project.create() → Test code
|
|
92
|
+
← ROOT CAUSE: setupCoreTest() returns { tempDir: '' } before beforeEach
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**At each level ask:** Where did this value come from? Is this the origin?
|
|
96
|
+
|
|
97
|
+
**For detailed tracing methodology, see [Tracing Techniques](references/tracing-techniques.md)**
|
|
98
|
+
**For complete real-world examples, see [Examples](references/examples.md)**
|
|
99
|
+
|
|
100
|
+
## After Finding Root Cause
|
|
101
|
+
|
|
102
|
+
**Fix at source** (throw if accessed before initialization) + **Add defense-in-depth** (validate at Project.create, WorkspaceManager, environment guards, instrumentation).
|
|
103
|
+
|
|
104
|
+
This prevents similar bugs and catches issues earlier.
|
|
105
|
+
|
|
106
|
+
## Navigation
|
|
107
|
+
|
|
108
|
+
For detailed information:
|
|
109
|
+
- **[Tracing Techniques](references/tracing-techniques.md)**: Complete tracing methodology, patterns, and decision trees
|
|
110
|
+
- **[Examples](references/examples.md)**: Real-world debugging scenarios with full trace chains
|
|
111
|
+
- **[Advanced Techniques](references/advanced-techniques.md)**: Stack traces, instrumentation, test pollution detection
|
|
112
|
+
- **[Integration](references/integration.md)**: How to use with systematic-debugging and other skills
|
|
113
|
+
|
|
114
|
+
## Key Reminders
|
|
115
|
+
|
|
116
|
+
- NEVER fix just where the error appears
|
|
117
|
+
- ALWAYS trace back to find the original trigger
|
|
118
|
+
- Use `console.error()` for debugging in tests (logger may be suppressed)
|
|
119
|
+
- Log BEFORE the dangerous operation, not after it fails
|
|
120
|
+
- Include context: directory, cwd, environment, timestamps
|
|
121
|
+
- Add defense-in-depth after fixing source
|
|
122
|
+
- Document your trace as you go (write down the call chain)
|
|
123
|
+
|
|
124
|
+
## Red Flags - STOP
|
|
125
|
+
|
|
126
|
+
If you catch yourself thinking:
|
|
127
|
+
- "I'll just add validation here" (without finding source)
|
|
128
|
+
- "This will prevent the error" (symptom fix)
|
|
129
|
+
- "Too hard to trace back" (add instrumentation instead)
|
|
130
|
+
- "Quick fix for now" (creates technical debt)
|
|
131
|
+
|
|
132
|
+
**ALL of these mean: Continue tracing to find root cause.**
|
|
133
|
+
|
|
134
|
+
## Integration with Other Skills
|
|
135
|
+
|
|
136
|
+
- **systematic-debugging**: Use root-cause-tracing during Phase 1
|
|
137
|
+
- **defense-in-depth**: Add after finding root cause
|
|
138
|
+
- **verification-before-completion**: Verify fix worked at source
|
|
139
|
+
- **test-driven-development**: Write test for root cause, not symptom
|
|
140
|
+
|
|
141
|
+
See [Integration](references/integration.md) for complete workflow examples.
|
|
142
|
+
|
|
143
|
+
## Real-World Impact
|
|
144
|
+
|
|
145
|
+
From debugging session (2025-10-03):
|
|
146
|
+
- Found root cause through 5-level trace
|
|
147
|
+
- Fixed at source (getter validation)
|
|
148
|
+
- Added 4 layers of defense
|
|
149
|
+
- 1847 tests passed, zero pollution
|
|
150
|
+
- Time saved: 3+ hours vs symptom-fix approach
|
|
151
|
+
|
|
152
|
+
**Bottom line:** Tracing takes 15-30 minutes. Symptom fixes take hours of whack-a-mole.
|