claude-mpm 4.1.6__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 +431 -214
- 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/MEMORY.md +3 -0
- claude_mpm/agents/OUTPUT_STYLE.md +335 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1159 -0
- claude_mpm/agents/WORKFLOW.md +355 -187
- claude_mpm/agents/agent_loader.py +40 -10
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/agents_metadata.py +57 -0
- 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/.claude-mpm/memories/README.md +17 -0
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +3 -0
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/agent-manager.json +267 -18
- claude_mpm/agents/templates/agentic-coder-optimizer.json +248 -0
- 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 +25 -9
- 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 +44 -10
- 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_20250826_014258_728.md +39 -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 +27 -8
- 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 +26 -6
- claude_mpm/agents/templates/react_engineer.json +239 -0
- claude_mpm/agents/templates/refactoring_engineer.json +15 -5
- claude_mpm/agents/templates/research.json +47 -22
- 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 +243 -21
- claude_mpm/agents/templates/web_ui.json +18 -5
- claude_mpm/cli/__init__.py +38 -363
- claude_mpm/cli/commands/__init__.py +8 -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 +553 -0
- claude_mpm/cli/commands/analyze_code.py +528 -0
- 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 +488 -884
- 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 +286 -0
- claude_mpm/cli/commands/debug.py +1386 -0
- 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 +168 -617
- 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 +195 -0
- 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/analyze_code_parser.py +170 -0
- claude_mpm/cli/parsers/analyze_parser.py +135 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +187 -3
- claude_mpm/cli/parsers/configure_parser.py +34 -15
- claude_mpm/cli/parsers/dashboard_parser.py +113 -0
- claude_mpm/cli/parsers/debug_parser.py +319 -0
- 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 +311 -0
- 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/__init__.py +14 -0
- claude_mpm/commands/mpm-agents-detect.md +168 -0
- claude_mpm/commands/mpm-agents-recommend.md +214 -0
- claude_mpm/commands/mpm-agents.md +122 -0
- claude_mpm/commands/mpm-auto-configure.md +269 -0
- claude_mpm/commands/mpm-config.md +141 -0
- claude_mpm/commands/mpm-doctor.md +24 -0
- claude_mpm/commands/mpm-help.md +290 -0
- claude_mpm/commands/mpm-init.md +521 -0
- 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 +75 -0
- claude_mpm/commands/mpm-tickets.md +151 -0
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +21 -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 +36 -7
- claude_mpm/constants.py +27 -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 +103 -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 +323 -1491
- claude_mpm/core/hook_manager.py +8 -6
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +267 -0
- 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 +100 -28
- 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 +118 -15
- 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 +116 -12
- claude_mpm/core/unified_config.py +6 -6
- claude_mpm/core/unified_paths.py +23 -20
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +1 -0
- claude_mpm/dashboard/__init__.py +12 -0
- claude_mpm/dashboard/analysis_runner.py +455 -0
- 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 +2 -0
- 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 +2 -0
- claude_mpm/dashboard/static/built/components/code-viewer.js +2 -0
- 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 +2 -0
- 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/activity.css +1958 -0
- claude_mpm/dashboard/static/css/dashboard.css +1413 -72
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/dist/components/activity-tree.js +2 -0
- claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-tree.js +2 -0
- claude_mpm/dashboard/static/dist/components/code-viewer.js +2 -0
- 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 +2 -0
- 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 +1871 -0
- 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 +23 -13
- 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 -107
- claude_mpm/dashboard/static/js/components/event-viewer.js +98 -11
- 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 +68 -205
- claude_mpm/dashboard/static/js/components/session-manager.js +46 -10
- claude_mpm/dashboard/static/js/components/socket-manager.js +16 -0
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +359 -40
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +1824 -0
- claude_mpm/dashboard/static/js/components/working-directory.js +61 -10
- claude_mpm/dashboard/static/js/connection-manager.js +1 -1
- claude_mpm/dashboard/static/js/dashboard.js +523 -622
- 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 +549 -62
- 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 +267 -9
- claude_mpm/experimental/__init__.py +10 -0
- 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 +209 -25
- claude_mpm/hooks/claude_hooks/installer.py +783 -0
- 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 +64 -49
- 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/schemas/__init__.py +12 -0
- claude_mpm/scripts/claude-hook-handler.sh +187 -0
- 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 +156 -396
- 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_config_provider.py +127 -27
- 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 +5 -6
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +722 -37
- claude_mpm/services/agents/deployment/agent_validator.py +31 -7
- claude_mpm/services/agents/deployment/agent_version_manager.py +9 -1
- 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 +7 -7
- 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 +6 -5
- claude_mpm/services/cli/agent_dependency_service.py +1 -1
- claude_mpm/services/cli/agent_listing_service.py +5 -5
- claude_mpm/services/cli/agent_validation_service.py +6 -5
- 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 -21
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +17 -9
- 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/cache_manager.py +1 -3
- 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 +37 -18
- claude_mpm/services/core/service_container.py +2 -2
- 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 +22 -24
- 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 +152 -13
- 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 +12 -12
- 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/monitoring.py +12 -12
- 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 +6 -6
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +8 -8
- 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/language_analyzer.py +3 -3
- claude_mpm/services/project/metrics_collector.py +7 -10
- 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 +74 -6
- claude_mpm/services/socketio/handlers/__init__.py +5 -0
- claude_mpm/services/socketio/handlers/base.py +2 -2
- claude_mpm/services/socketio/handlers/code_analysis.py +682 -0
- claude_mpm/services/socketio/handlers/connection.py +21 -40
- claude_mpm/services/socketio/handlers/connection_handler.py +16 -28
- 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 -0
- 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 +131 -68
- claude_mpm/services/socketio/server/core.py +275 -22
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +99 -29
- 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/services/visualization/__init__.py +19 -0
- claude_mpm/services/visualization/mermaid_generator.py +938 -0
- 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/__init__.py +10 -0
- claude_mpm/tools/__main__.py +208 -0
- 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 +631 -0
- claude_mpm/tools/code_tree_events.py +420 -0
- claude_mpm/tools/socketio_debug.py +671 -0
- 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.6.dist-info → claude_mpm-4.24.0.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -237
- claude_mpm/agents/schema/agent_schema.json +0 -314
- claude_mpm/agents/templates/agent-manager.md +0 -304
- claude_mpm/cli/commands/configure_tui.py +0 -1921
- claude_mpm/cli/commands/socketio_monitor.py +0 -233
- 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_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 -424
- claude_mpm/services/cli/socketio_manager.py +0 -498
- 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-4.1.6.dist-info/METADATA +0 -325
- claude_mpm-4.1.6.dist-info/RECORD +0 -550
- {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/top_level.txt +0 -0
|
@@ -14,6 +14,7 @@ import sys
|
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
from typing import Any, Dict, List, Optional
|
|
16
16
|
|
|
17
|
+
from ...core.enums import OutputFormat
|
|
17
18
|
from ...core.logging_config import get_logger
|
|
18
19
|
from ...services.agents.agent_builder import AgentBuilderService
|
|
19
20
|
from ...services.agents.deployment.agent_deployment import AgentDeploymentService
|
|
@@ -36,6 +37,18 @@ class AgentManagerCommand(AgentCommand):
|
|
|
36
37
|
self.deployment_service = AgentDeploymentService()
|
|
37
38
|
return self.deployment_service
|
|
38
39
|
|
|
40
|
+
def _get_output_format(self, args) -> str:
|
|
41
|
+
"""
|
|
42
|
+
Get output format from args with enum default.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
args: Command arguments
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
Output format string (compatible with both enum and string usage)
|
|
49
|
+
"""
|
|
50
|
+
return getattr(args, "format", OutputFormat.TEXT)
|
|
51
|
+
|
|
39
52
|
def run(self, args) -> CommandResult:
|
|
40
53
|
"""Execute agent manager command.
|
|
41
54
|
|
|
@@ -58,6 +71,19 @@ class AgentManagerCommand(AgentCommand):
|
|
|
58
71
|
"test": self._test_agent,
|
|
59
72
|
"templates": self._list_templates,
|
|
60
73
|
"reset": self._reset_agents,
|
|
74
|
+
# Interactive commands
|
|
75
|
+
"create-interactive": self._create_interactive,
|
|
76
|
+
"manage-local": self._manage_local_interactive,
|
|
77
|
+
"edit-interactive": self._edit_interactive,
|
|
78
|
+
"test-local": self._test_local_agent,
|
|
79
|
+
# Local agent commands
|
|
80
|
+
"create-local": self._create_local_agent,
|
|
81
|
+
"deploy-local": self._deploy_local_agents,
|
|
82
|
+
"list-local": self._list_local_agents,
|
|
83
|
+
"sync-local": self._sync_local_agents,
|
|
84
|
+
"export-local": self._export_local_agents,
|
|
85
|
+
"import-local": self._import_local_agents,
|
|
86
|
+
"delete-local": self._delete_local_agents,
|
|
61
87
|
}
|
|
62
88
|
|
|
63
89
|
command = args.agent_manager_command
|
|
@@ -78,7 +104,7 @@ class AgentManagerCommand(AgentCommand):
|
|
|
78
104
|
# Check project level
|
|
79
105
|
project_dir = Path.cwd() / ".claude" / "agents"
|
|
80
106
|
if project_dir.exists():
|
|
81
|
-
for agent_file in project_dir.glob("*.
|
|
107
|
+
for agent_file in project_dir.glob("*.md"):
|
|
82
108
|
agents["project"].append(
|
|
83
109
|
self._read_agent_summary(agent_file, "project")
|
|
84
110
|
)
|
|
@@ -86,7 +112,7 @@ class AgentManagerCommand(AgentCommand):
|
|
|
86
112
|
# Check user level
|
|
87
113
|
user_dir = Path.home() / ".claude" / "agents"
|
|
88
114
|
if user_dir.exists():
|
|
89
|
-
for agent_file in user_dir.glob("*.
|
|
115
|
+
for agent_file in user_dir.glob("*.md"):
|
|
90
116
|
agent_id = agent_file.stem
|
|
91
117
|
# Skip if overridden by project
|
|
92
118
|
if not any(a["id"] == agent_id for a in agents["project"]):
|
|
@@ -109,8 +135,8 @@ class AgentManagerCommand(AgentCommand):
|
|
|
109
135
|
)
|
|
110
136
|
|
|
111
137
|
# Format output
|
|
112
|
-
output_format =
|
|
113
|
-
if output_format ==
|
|
138
|
+
output_format = self._get_output_format(args)
|
|
139
|
+
if str(output_format).lower() == OutputFormat.JSON:
|
|
114
140
|
return CommandResult.success_result("Agents listed", data=agents)
|
|
115
141
|
output = self._format_agent_list(agents)
|
|
116
142
|
return CommandResult.success_result(output)
|
|
@@ -275,8 +301,8 @@ class AgentManagerCommand(AgentCommand):
|
|
|
275
301
|
if not agent_info:
|
|
276
302
|
return CommandResult.error_result(f"Agent '{agent_id}' not found")
|
|
277
303
|
|
|
278
|
-
output_format =
|
|
279
|
-
if output_format ==
|
|
304
|
+
output_format = self._get_output_format(args)
|
|
305
|
+
if str(output_format).lower() == OutputFormat.JSON:
|
|
280
306
|
return CommandResult.success_result("Agent details", data=agent_info)
|
|
281
307
|
output = self._format_agent_details(agent_info)
|
|
282
308
|
return CommandResult.success_result(output)
|
|
@@ -319,8 +345,8 @@ class AgentManagerCommand(AgentCommand):
|
|
|
319
345
|
"""List available agent templates."""
|
|
320
346
|
templates = self.builder_service.list_available_templates()
|
|
321
347
|
|
|
322
|
-
output_format =
|
|
323
|
-
if output_format ==
|
|
348
|
+
output_format = self._get_output_format(args)
|
|
349
|
+
if str(output_format).lower() == OutputFormat.JSON:
|
|
324
350
|
return CommandResult.success_result("Templates listed", data=templates)
|
|
325
351
|
output = "Available Agent Templates:\n\n"
|
|
326
352
|
for template in templates:
|
|
@@ -344,7 +370,7 @@ class AgentManagerCommand(AgentCommand):
|
|
|
344
370
|
clean_user = not getattr(args, "project_only", False)
|
|
345
371
|
dry_run = getattr(args, "dry_run", False)
|
|
346
372
|
force = getattr(args, "force", False)
|
|
347
|
-
output_format =
|
|
373
|
+
output_format = self._get_output_format(args)
|
|
348
374
|
|
|
349
375
|
# Track results
|
|
350
376
|
results = {
|
|
@@ -384,7 +410,7 @@ class AgentManagerCommand(AgentCommand):
|
|
|
384
410
|
)
|
|
385
411
|
|
|
386
412
|
# Handle output based on format
|
|
387
|
-
if output_format ==
|
|
413
|
+
if str(output_format).lower() == OutputFormat.JSON:
|
|
388
414
|
return CommandResult.success_result("Reset completed", data=results)
|
|
389
415
|
|
|
390
416
|
# Generate text output
|
|
@@ -607,7 +633,7 @@ class AgentManagerCommand(AgentCommand):
|
|
|
607
633
|
|
|
608
634
|
# Save JSON configuration
|
|
609
635
|
json_file = template_dir / f"{agent_id}.json"
|
|
610
|
-
with open(
|
|
636
|
+
with json_file.open("w") as f:
|
|
611
637
|
json.dump(config, f, indent=2)
|
|
612
638
|
|
|
613
639
|
# Save instructions
|
|
@@ -624,8 +650,34 @@ class AgentManagerCommand(AgentCommand):
|
|
|
624
650
|
def _read_agent_summary(self, agent_file: Path, tier: str) -> Dict[str, Any]:
|
|
625
651
|
"""Read agent summary from file."""
|
|
626
652
|
try:
|
|
627
|
-
# For YAML files, extract basic info
|
|
628
653
|
agent_id = agent_file.stem
|
|
654
|
+
content = agent_file.read_text()
|
|
655
|
+
|
|
656
|
+
# Parse frontmatter for .md files
|
|
657
|
+
if agent_file.suffix == ".md" and content.startswith("---"):
|
|
658
|
+
import yaml
|
|
659
|
+
|
|
660
|
+
try:
|
|
661
|
+
# Extract YAML frontmatter
|
|
662
|
+
parts = content.split("---", 2)
|
|
663
|
+
if len(parts) >= 2:
|
|
664
|
+
frontmatter = yaml.safe_load(parts[1])
|
|
665
|
+
if isinstance(frontmatter, dict):
|
|
666
|
+
return {
|
|
667
|
+
"id": agent_id,
|
|
668
|
+
"name": frontmatter.get(
|
|
669
|
+
"name", agent_id.replace("-", " ").title()
|
|
670
|
+
),
|
|
671
|
+
"tier": tier,
|
|
672
|
+
"file": str(agent_file),
|
|
673
|
+
"description": frontmatter.get("description", ""),
|
|
674
|
+
"is_local": frontmatter.get("is_local", False),
|
|
675
|
+
"priority": frontmatter.get("priority", 1000),
|
|
676
|
+
}
|
|
677
|
+
except Exception:
|
|
678
|
+
pass
|
|
679
|
+
|
|
680
|
+
# Fallback for files without proper frontmatter
|
|
629
681
|
return {
|
|
630
682
|
"id": agent_id,
|
|
631
683
|
"name": agent_id.replace("-", " ").title(),
|
|
@@ -643,14 +695,16 @@ class AgentManagerCommand(AgentCommand):
|
|
|
643
695
|
if agents["project"]:
|
|
644
696
|
output += "[P] PROJECT LEVEL (Highest Priority)\n"
|
|
645
697
|
for agent in agents["project"]:
|
|
646
|
-
|
|
698
|
+
local_indicator = " [LOCAL-PROJECT]" if agent.get("is_local") else ""
|
|
699
|
+
output += f" {agent['id']:<20} - {agent.get('name', agent['id'])}{local_indicator}\n"
|
|
647
700
|
output += "\n"
|
|
648
701
|
|
|
649
702
|
# User agents
|
|
650
703
|
if agents["user"]:
|
|
651
704
|
output += "[U] USER LEVEL\n"
|
|
652
705
|
for agent in agents["user"]:
|
|
653
|
-
|
|
706
|
+
local_indicator = " [LOCAL-USER]" if agent.get("is_local") else ""
|
|
707
|
+
output += f" {agent['id']:<20} - {agent.get('name', agent['id'])}{local_indicator}\n"
|
|
654
708
|
output += "\n"
|
|
655
709
|
|
|
656
710
|
# System agents
|
|
@@ -671,7 +725,7 @@ class AgentManagerCommand(AgentCommand):
|
|
|
671
725
|
"""Load agent configuration."""
|
|
672
726
|
try:
|
|
673
727
|
return self.builder_service._load_template(agent_id)
|
|
674
|
-
except:
|
|
728
|
+
except Exception:
|
|
675
729
|
return None
|
|
676
730
|
|
|
677
731
|
def _check_conflicts(self, agent_id: str) -> Optional[str]:
|
|
@@ -692,12 +746,573 @@ class AgentManagerCommand(AgentCommand):
|
|
|
692
746
|
# Load predefined PM templates
|
|
693
747
|
return "# PM Instructions Template\n"
|
|
694
748
|
|
|
749
|
+
def _create_local_agent(self, args) -> CommandResult:
|
|
750
|
+
"""Create a new local agent template.
|
|
751
|
+
|
|
752
|
+
Creates a JSON template in .claude-mpm/agents/ directory.
|
|
753
|
+
"""
|
|
754
|
+
try:
|
|
755
|
+
from ...services.agents.local_template_manager import (
|
|
756
|
+
LocalAgentTemplateManager,
|
|
757
|
+
)
|
|
758
|
+
|
|
759
|
+
manager = LocalAgentTemplateManager()
|
|
760
|
+
|
|
761
|
+
# Get arguments
|
|
762
|
+
agent_id = getattr(args, "agent_id", None)
|
|
763
|
+
if not agent_id:
|
|
764
|
+
return CommandResult.error_result(
|
|
765
|
+
"--agent-id is required for create-local"
|
|
766
|
+
)
|
|
767
|
+
|
|
768
|
+
name = getattr(args, "name", agent_id.replace("_", " ").title())
|
|
769
|
+
description = getattr(args, "description", f"Local {agent_id} agent")
|
|
770
|
+
instructions = getattr(
|
|
771
|
+
args, "instructions", f"Custom instructions for {agent_id}"
|
|
772
|
+
)
|
|
773
|
+
model = getattr(args, "model", "sonnet")
|
|
774
|
+
tools = getattr(args, "tools", "*")
|
|
775
|
+
parent_agent = getattr(args, "parent", None)
|
|
776
|
+
tier = getattr(args, "tier", "project")
|
|
777
|
+
|
|
778
|
+
# Create template
|
|
779
|
+
template = manager.create_local_template(
|
|
780
|
+
agent_id=agent_id,
|
|
781
|
+
name=name,
|
|
782
|
+
description=description,
|
|
783
|
+
instructions=instructions,
|
|
784
|
+
model=model,
|
|
785
|
+
tools=tools,
|
|
786
|
+
parent_agent=parent_agent,
|
|
787
|
+
tier=tier,
|
|
788
|
+
)
|
|
789
|
+
|
|
790
|
+
# Validate template
|
|
791
|
+
is_valid, errors = manager.validate_local_template(template)
|
|
792
|
+
if not is_valid:
|
|
793
|
+
return CommandResult.error_result(
|
|
794
|
+
f"Invalid template: {', '.join(errors)}"
|
|
795
|
+
)
|
|
796
|
+
|
|
797
|
+
# Save template
|
|
798
|
+
template_file = manager.save_local_template(template, tier)
|
|
799
|
+
|
|
800
|
+
return CommandResult.success_result(
|
|
801
|
+
f"Created local agent template: {template_file}\n"
|
|
802
|
+
f"Deploy with: claude-mpm agent-manager deploy-local --agent-id {agent_id}"
|
|
803
|
+
)
|
|
804
|
+
|
|
805
|
+
except Exception as e:
|
|
806
|
+
return CommandResult.error_result(f"Failed to create local agent: {e}")
|
|
807
|
+
|
|
808
|
+
def _deploy_local_agents(self, args) -> CommandResult:
|
|
809
|
+
"""Deploy local JSON templates to Claude Code."""
|
|
810
|
+
try:
|
|
811
|
+
from ...services.agents.deployment.local_template_deployment import (
|
|
812
|
+
LocalTemplateDeploymentService,
|
|
813
|
+
)
|
|
814
|
+
|
|
815
|
+
service = LocalTemplateDeploymentService()
|
|
816
|
+
|
|
817
|
+
# Check for specific agent
|
|
818
|
+
agent_id = getattr(args, "agent_id", None)
|
|
819
|
+
force = getattr(args, "force", False)
|
|
820
|
+
|
|
821
|
+
if agent_id:
|
|
822
|
+
# Deploy single agent
|
|
823
|
+
success = service.deploy_single_local_template(agent_id, force)
|
|
824
|
+
if success:
|
|
825
|
+
return CommandResult.success_result(
|
|
826
|
+
f"Deployed local agent: {agent_id}"
|
|
827
|
+
)
|
|
828
|
+
return CommandResult.error_result(
|
|
829
|
+
f"Failed to deploy local agent: {agent_id}"
|
|
830
|
+
)
|
|
831
|
+
|
|
832
|
+
# Deploy all local agents
|
|
833
|
+
tier_filter = getattr(args, "tier", None)
|
|
834
|
+
results = service.deploy_local_templates(force, tier_filter)
|
|
835
|
+
|
|
836
|
+
# Format output
|
|
837
|
+
output = "Local Agent Deployment Results:\n"
|
|
838
|
+
output += f" Deployed: {len(results['deployed'])}\n"
|
|
839
|
+
output += f" Updated: {len(results['updated'])}\n"
|
|
840
|
+
output += f" Skipped: {len(results['skipped'])}\n"
|
|
841
|
+
output += f" Errors: {len(results['errors'])}\n"
|
|
842
|
+
|
|
843
|
+
if results["deployed"]:
|
|
844
|
+
output += f"\nDeployed agents: {', '.join(results['deployed'])}"
|
|
845
|
+
if results["updated"]:
|
|
846
|
+
output += f"\nUpdated agents: {', '.join(results['updated'])}"
|
|
847
|
+
if results["errors"]:
|
|
848
|
+
output += "\nErrors:\n"
|
|
849
|
+
for error in results["errors"]:
|
|
850
|
+
output += f" - {error}\n"
|
|
851
|
+
|
|
852
|
+
return CommandResult.success_result(output, data=results)
|
|
853
|
+
|
|
854
|
+
except Exception as e:
|
|
855
|
+
return CommandResult.error_result(f"Failed to deploy local agents: {e}")
|
|
856
|
+
|
|
857
|
+
def _list_local_agents(self, args) -> CommandResult:
|
|
858
|
+
"""List all local agent templates."""
|
|
859
|
+
try:
|
|
860
|
+
from ...services.agents.local_template_manager import (
|
|
861
|
+
LocalAgentTemplateManager,
|
|
862
|
+
)
|
|
863
|
+
|
|
864
|
+
manager = LocalAgentTemplateManager()
|
|
865
|
+
|
|
866
|
+
# Get tier filter
|
|
867
|
+
tier = getattr(args, "tier", None)
|
|
868
|
+
templates = manager.list_local_templates(tier)
|
|
869
|
+
|
|
870
|
+
if not templates:
|
|
871
|
+
return CommandResult.success_result("No local agent templates found")
|
|
872
|
+
|
|
873
|
+
# Format output
|
|
874
|
+
output_format = self._get_output_format(args)
|
|
875
|
+
|
|
876
|
+
if str(output_format).lower() == OutputFormat.JSON:
|
|
877
|
+
data = [
|
|
878
|
+
{
|
|
879
|
+
"id": t.agent_id,
|
|
880
|
+
"name": t.metadata.get("name", t.agent_id),
|
|
881
|
+
"version": t.agent_version,
|
|
882
|
+
"author": t.author,
|
|
883
|
+
"tier": t.tier,
|
|
884
|
+
"tags": t.metadata.get("tags", []),
|
|
885
|
+
}
|
|
886
|
+
for t in templates
|
|
887
|
+
]
|
|
888
|
+
return CommandResult.success_result("Local agents", data=data)
|
|
889
|
+
|
|
890
|
+
# Text format
|
|
891
|
+
output = "Local Agent Templates:\n\n"
|
|
892
|
+
|
|
893
|
+
# Group by tier
|
|
894
|
+
project_agents = [t for t in templates if t.tier == "project"]
|
|
895
|
+
user_agents = [t for t in templates if t.tier == "user"]
|
|
896
|
+
|
|
897
|
+
if project_agents:
|
|
898
|
+
output += "PROJECT AGENTS:\n"
|
|
899
|
+
for template in project_agents:
|
|
900
|
+
output += f" • {template.agent_id} (v{template.agent_version})"
|
|
901
|
+
output += f" - {template.metadata.get('name', template.agent_id)}\n"
|
|
902
|
+
if template.metadata.get("description"):
|
|
903
|
+
output += f" {template.metadata['description']}\n"
|
|
904
|
+
output += "\n"
|
|
905
|
+
|
|
906
|
+
if user_agents:
|
|
907
|
+
output += "USER AGENTS:\n"
|
|
908
|
+
for template in user_agents:
|
|
909
|
+
output += f" • {template.agent_id} (v{template.agent_version})"
|
|
910
|
+
output += f" - {template.metadata.get('name', template.agent_id)}\n"
|
|
911
|
+
if template.metadata.get("description"):
|
|
912
|
+
output += f" {template.metadata['description']}\n"
|
|
913
|
+
|
|
914
|
+
return CommandResult.success_result(output)
|
|
915
|
+
|
|
916
|
+
except Exception as e:
|
|
917
|
+
return CommandResult.error_result(f"Failed to list local agents: {e}")
|
|
918
|
+
|
|
919
|
+
def _sync_local_agents(self, args) -> CommandResult:
|
|
920
|
+
"""Synchronize local templates with deployed agents."""
|
|
921
|
+
try:
|
|
922
|
+
from ...services.agents.deployment.local_template_deployment import (
|
|
923
|
+
LocalTemplateDeploymentService,
|
|
924
|
+
)
|
|
925
|
+
|
|
926
|
+
service = LocalTemplateDeploymentService()
|
|
927
|
+
results = service.sync_local_templates()
|
|
928
|
+
|
|
929
|
+
# Format output
|
|
930
|
+
output = "Local Agent Synchronization:\n"
|
|
931
|
+
output += f" Added: {len(results['added'])}\n"
|
|
932
|
+
output += f" Updated: {len(results['updated'])}\n"
|
|
933
|
+
output += f" Removed: {len(results['removed'])}\n"
|
|
934
|
+
|
|
935
|
+
if results["added"]:
|
|
936
|
+
output += f"\nAdded agents: {', '.join(results['added'])}"
|
|
937
|
+
if results["updated"]:
|
|
938
|
+
output += f"\nUpdated agents: {', '.join(results['updated'])}"
|
|
939
|
+
if results["removed"]:
|
|
940
|
+
output += f"\nRemoved agents: {', '.join(results['removed'])}"
|
|
941
|
+
if results["errors"]:
|
|
942
|
+
output += "\nErrors:\n"
|
|
943
|
+
for error in results["errors"]:
|
|
944
|
+
output += f" - {error}\n"
|
|
945
|
+
|
|
946
|
+
return CommandResult.success_result(output, data=results)
|
|
947
|
+
|
|
948
|
+
except Exception as e:
|
|
949
|
+
return CommandResult.error_result(f"Failed to sync local agents: {e}")
|
|
950
|
+
|
|
951
|
+
def _export_local_agents(self, args) -> CommandResult:
|
|
952
|
+
"""Export local agent templates to a directory."""
|
|
953
|
+
try:
|
|
954
|
+
from ...services.agents.local_template_manager import (
|
|
955
|
+
LocalAgentTemplateManager,
|
|
956
|
+
)
|
|
957
|
+
|
|
958
|
+
manager = LocalAgentTemplateManager()
|
|
959
|
+
|
|
960
|
+
# Get output directory
|
|
961
|
+
output_dir = getattr(args, "output", "./exported-agents")
|
|
962
|
+
output_path = Path(output_dir)
|
|
963
|
+
|
|
964
|
+
count = manager.export_local_templates(output_path)
|
|
965
|
+
|
|
966
|
+
return CommandResult.success_result(
|
|
967
|
+
f"Exported {count} local agent templates to {output_path}"
|
|
968
|
+
)
|
|
969
|
+
|
|
970
|
+
except Exception as e:
|
|
971
|
+
return CommandResult.error_result(f"Failed to export local agents: {e}")
|
|
972
|
+
|
|
973
|
+
def _import_local_agents(self, args) -> CommandResult:
|
|
974
|
+
"""Import agent templates from a directory."""
|
|
975
|
+
try:
|
|
976
|
+
from ...services.agents.local_template_manager import (
|
|
977
|
+
LocalAgentTemplateManager,
|
|
978
|
+
)
|
|
979
|
+
|
|
980
|
+
manager = LocalAgentTemplateManager()
|
|
981
|
+
|
|
982
|
+
# Get input directory
|
|
983
|
+
input_dir = getattr(args, "input", None)
|
|
984
|
+
if not input_dir:
|
|
985
|
+
return CommandResult.error_result("--input directory is required")
|
|
986
|
+
|
|
987
|
+
input_path = Path(input_dir)
|
|
988
|
+
if not input_path.exists():
|
|
989
|
+
return CommandResult.error_result(
|
|
990
|
+
f"Input directory does not exist: {input_path}"
|
|
991
|
+
)
|
|
992
|
+
|
|
993
|
+
# Get tier
|
|
994
|
+
tier = getattr(args, "tier", "project")
|
|
995
|
+
|
|
996
|
+
count = manager.import_local_templates(input_path, tier)
|
|
997
|
+
|
|
998
|
+
return CommandResult.success_result(
|
|
999
|
+
f"Imported {count} local agent templates from {input_path}"
|
|
1000
|
+
)
|
|
1001
|
+
|
|
1002
|
+
except Exception as e:
|
|
1003
|
+
return CommandResult.error_result(f"Failed to import local agents: {e}")
|
|
1004
|
+
|
|
1005
|
+
def _create_interactive(self, args) -> CommandResult:
|
|
1006
|
+
"""Launch interactive agent creation wizard."""
|
|
1007
|
+
try:
|
|
1008
|
+
from ...cli.interactive.agent_wizard import run_interactive_agent_wizard
|
|
1009
|
+
|
|
1010
|
+
# Run the interactive wizard
|
|
1011
|
+
exit_code = run_interactive_agent_wizard()
|
|
1012
|
+
|
|
1013
|
+
if exit_code == 0:
|
|
1014
|
+
return CommandResult.success_result(
|
|
1015
|
+
"Interactive agent creation completed"
|
|
1016
|
+
)
|
|
1017
|
+
return CommandResult.error_result(
|
|
1018
|
+
"Interactive agent creation failed or cancelled"
|
|
1019
|
+
)
|
|
1020
|
+
|
|
1021
|
+
except Exception as e:
|
|
1022
|
+
return CommandResult.error_result(f"Interactive creation failed: {e}")
|
|
1023
|
+
|
|
1024
|
+
def _manage_local_interactive(self, args) -> CommandResult:
|
|
1025
|
+
"""Launch interactive agent management menu."""
|
|
1026
|
+
try:
|
|
1027
|
+
from ...cli.interactive.agent_wizard import run_interactive_agent_manager
|
|
1028
|
+
|
|
1029
|
+
# Run the interactive management menu
|
|
1030
|
+
exit_code = run_interactive_agent_manager()
|
|
1031
|
+
|
|
1032
|
+
if exit_code == 0:
|
|
1033
|
+
return CommandResult.success_result(
|
|
1034
|
+
"Interactive agent management completed"
|
|
1035
|
+
)
|
|
1036
|
+
return CommandResult.error_result(
|
|
1037
|
+
"Interactive agent management failed or cancelled"
|
|
1038
|
+
)
|
|
1039
|
+
|
|
1040
|
+
except Exception as e:
|
|
1041
|
+
return CommandResult.error_result(f"Interactive management failed: {e}")
|
|
1042
|
+
|
|
1043
|
+
def _edit_interactive(self, args) -> CommandResult:
|
|
1044
|
+
"""Edit agent configuration interactively."""
|
|
1045
|
+
try:
|
|
1046
|
+
from ...services.agents.local_template_manager import (
|
|
1047
|
+
LocalAgentTemplateManager,
|
|
1048
|
+
)
|
|
1049
|
+
|
|
1050
|
+
agent_id = getattr(args, "agent_id", None)
|
|
1051
|
+
if not agent_id:
|
|
1052
|
+
return CommandResult.error_result(
|
|
1053
|
+
"--agent-id is required for edit-interactive"
|
|
1054
|
+
)
|
|
1055
|
+
|
|
1056
|
+
manager = LocalAgentTemplateManager()
|
|
1057
|
+
template = manager.get_local_template(agent_id)
|
|
1058
|
+
|
|
1059
|
+
if not template:
|
|
1060
|
+
return CommandResult.error_result(f"Local agent '{agent_id}' not found")
|
|
1061
|
+
|
|
1062
|
+
# Get template file path
|
|
1063
|
+
if template.tier == "project":
|
|
1064
|
+
template_file = manager.project_agents_dir / f"{agent_id}.json"
|
|
1065
|
+
else:
|
|
1066
|
+
template_file = manager.user_agents_dir / f"{agent_id}.json"
|
|
1067
|
+
|
|
1068
|
+
# Open in editor
|
|
1069
|
+
import os
|
|
1070
|
+
import subprocess
|
|
1071
|
+
|
|
1072
|
+
editor = os.environ.get("EDITOR", "nano")
|
|
1073
|
+
print(f"Opening {template_file} in {editor}...")
|
|
1074
|
+
|
|
1075
|
+
try:
|
|
1076
|
+
subprocess.run([editor, str(template_file)], check=True)
|
|
1077
|
+
return CommandResult.success_result(
|
|
1078
|
+
f"Agent '{agent_id}' edited successfully"
|
|
1079
|
+
)
|
|
1080
|
+
except subprocess.CalledProcessError:
|
|
1081
|
+
return CommandResult.error_result("Editor exited with error")
|
|
1082
|
+
except FileNotFoundError:
|
|
1083
|
+
return CommandResult.error_result(
|
|
1084
|
+
f"Editor '{editor}' not found. Set EDITOR environment variable."
|
|
1085
|
+
)
|
|
1086
|
+
|
|
1087
|
+
except Exception as e:
|
|
1088
|
+
return CommandResult.error_result(f"Interactive edit failed: {e}")
|
|
1089
|
+
|
|
1090
|
+
def _test_local_agent(self, args) -> CommandResult:
|
|
1091
|
+
"""Test a local agent with sample task."""
|
|
1092
|
+
try:
|
|
1093
|
+
from ...services.agents.local_template_manager import (
|
|
1094
|
+
LocalAgentTemplateManager,
|
|
1095
|
+
)
|
|
1096
|
+
|
|
1097
|
+
agent_id = getattr(args, "agent_id", None)
|
|
1098
|
+
if not agent_id:
|
|
1099
|
+
return CommandResult.error_result(
|
|
1100
|
+
"--agent-id is required for test-local"
|
|
1101
|
+
)
|
|
1102
|
+
|
|
1103
|
+
manager = LocalAgentTemplateManager()
|
|
1104
|
+
template = manager.get_local_template(agent_id)
|
|
1105
|
+
|
|
1106
|
+
if not template:
|
|
1107
|
+
return CommandResult.error_result(f"Local agent '{agent_id}' not found")
|
|
1108
|
+
|
|
1109
|
+
# Validate template
|
|
1110
|
+
is_valid, errors = manager.validate_local_template(template)
|
|
1111
|
+
|
|
1112
|
+
if not is_valid:
|
|
1113
|
+
error_msg = f"Agent '{agent_id}' validation failed:\n"
|
|
1114
|
+
error_msg += "\n".join(f" • {error}" for error in errors)
|
|
1115
|
+
return CommandResult.error_result(error_msg)
|
|
1116
|
+
|
|
1117
|
+
# Check if agent is deployed
|
|
1118
|
+
from ...services.agents.deployment.local_template_deployment import (
|
|
1119
|
+
LocalTemplateDeploymentService,
|
|
1120
|
+
)
|
|
1121
|
+
|
|
1122
|
+
deployment_service = LocalTemplateDeploymentService()
|
|
1123
|
+
|
|
1124
|
+
# Test deployment
|
|
1125
|
+
try:
|
|
1126
|
+
success = deployment_service.deploy_single_local_template(
|
|
1127
|
+
agent_id, force=True
|
|
1128
|
+
)
|
|
1129
|
+
if not success:
|
|
1130
|
+
return CommandResult.error_result(
|
|
1131
|
+
f"Failed to deploy agent '{agent_id}' for testing"
|
|
1132
|
+
)
|
|
1133
|
+
except Exception as deploy_error:
|
|
1134
|
+
return CommandResult.error_result(f"Deployment failed: {deploy_error}")
|
|
1135
|
+
|
|
1136
|
+
# Success message with usage instructions
|
|
1137
|
+
success_msg = (
|
|
1138
|
+
f"✅ Agent '{agent_id}' is valid and deployed successfully!\n\n"
|
|
1139
|
+
)
|
|
1140
|
+
success_msg += "🧪 Test your agent:\n"
|
|
1141
|
+
success_msg += (
|
|
1142
|
+
f' claude-mpm run --agent {agent_id} "Test task for this agent"\n\n'
|
|
1143
|
+
)
|
|
1144
|
+
success_msg += "📊 Agent Details:\n"
|
|
1145
|
+
success_msg += f" Name: {template.metadata.get('name', agent_id)}\n"
|
|
1146
|
+
success_msg += (
|
|
1147
|
+
f" Model: {template.capabilities.get('model', 'unknown')}\n"
|
|
1148
|
+
)
|
|
1149
|
+
success_msg += f" Version: {template.agent_version}\n"
|
|
1150
|
+
success_msg += f" Tier: {template.tier}\n"
|
|
1151
|
+
|
|
1152
|
+
if template.parent_agent:
|
|
1153
|
+
success_msg += f" Inherits: {template.parent_agent}\n"
|
|
1154
|
+
|
|
1155
|
+
return CommandResult.success_result(success_msg)
|
|
1156
|
+
|
|
1157
|
+
except Exception as e:
|
|
1158
|
+
return CommandResult.error_result(f"Local agent test failed: {e}")
|
|
1159
|
+
|
|
1160
|
+
def _delete_local_agents(self, args) -> CommandResult:
|
|
1161
|
+
"""Delete local agent templates with comprehensive options."""
|
|
1162
|
+
try:
|
|
1163
|
+
from ...services.agents.local_template_manager import (
|
|
1164
|
+
LocalAgentTemplateManager,
|
|
1165
|
+
)
|
|
1166
|
+
|
|
1167
|
+
manager = LocalAgentTemplateManager()
|
|
1168
|
+
|
|
1169
|
+
# Get command arguments
|
|
1170
|
+
agent_ids = getattr(args, "agent_id", [])
|
|
1171
|
+
delete_all = getattr(args, "all", False)
|
|
1172
|
+
tier = getattr(args, "tier", "project")
|
|
1173
|
+
force = getattr(args, "force", False)
|
|
1174
|
+
keep_deployment = getattr(args, "keep_deployment", False)
|
|
1175
|
+
backup = getattr(args, "backup", False)
|
|
1176
|
+
|
|
1177
|
+
# Validate arguments
|
|
1178
|
+
if not agent_ids and not delete_all:
|
|
1179
|
+
return CommandResult.error_result(
|
|
1180
|
+
"Either --agent-id or --all must be specified"
|
|
1181
|
+
)
|
|
1182
|
+
|
|
1183
|
+
if delete_all and agent_ids:
|
|
1184
|
+
return CommandResult.error_result(
|
|
1185
|
+
"Cannot use both --agent-id and --all together"
|
|
1186
|
+
)
|
|
1187
|
+
|
|
1188
|
+
# Get agents to delete
|
|
1189
|
+
if delete_all:
|
|
1190
|
+
# Get all local agents for the specified tier
|
|
1191
|
+
templates = manager.list_local_templates(
|
|
1192
|
+
tier=None if tier == "all" else tier
|
|
1193
|
+
)
|
|
1194
|
+
if not templates:
|
|
1195
|
+
return CommandResult.success_result(
|
|
1196
|
+
f"No local agents found in {tier} tier(s)"
|
|
1197
|
+
)
|
|
1198
|
+
agent_ids = [t.agent_id for t in templates]
|
|
1199
|
+
|
|
1200
|
+
# Strong confirmation for --all
|
|
1201
|
+
if not force:
|
|
1202
|
+
print(
|
|
1203
|
+
f"\n⚠️ WARNING: This will delete ALL {len(agent_ids)} local agents in {tier} tier(s)!"
|
|
1204
|
+
)
|
|
1205
|
+
print("\nAgents to be deleted:")
|
|
1206
|
+
for agent_id in agent_ids:
|
|
1207
|
+
print(f" - {agent_id}")
|
|
1208
|
+
|
|
1209
|
+
confirm = input("\nType 'DELETE ALL' to confirm: ").strip()
|
|
1210
|
+
if confirm != "DELETE ALL":
|
|
1211
|
+
return CommandResult.error_result("Deletion cancelled")
|
|
1212
|
+
else:
|
|
1213
|
+
# Validate that agents exist
|
|
1214
|
+
missing_agents = []
|
|
1215
|
+
for agent_id in agent_ids:
|
|
1216
|
+
template = manager.get_local_template(agent_id)
|
|
1217
|
+
if not template:
|
|
1218
|
+
missing_agents.append(agent_id)
|
|
1219
|
+
|
|
1220
|
+
if missing_agents:
|
|
1221
|
+
return CommandResult.error_result(
|
|
1222
|
+
f"Agent(s) not found: {', '.join(missing_agents)}"
|
|
1223
|
+
)
|
|
1224
|
+
|
|
1225
|
+
# Confirmation for multiple agents
|
|
1226
|
+
if len(agent_ids) > 1 and not force:
|
|
1227
|
+
print(f"\n⚠️ This will delete {len(agent_ids)} agents:")
|
|
1228
|
+
for agent_id in agent_ids:
|
|
1229
|
+
print(f" - {agent_id}")
|
|
1230
|
+
|
|
1231
|
+
confirm = input("\nAre you sure? [y/N]: ").strip().lower()
|
|
1232
|
+
if confirm not in ["y", "yes"]:
|
|
1233
|
+
return CommandResult.error_result("Deletion cancelled")
|
|
1234
|
+
|
|
1235
|
+
# Confirmation for single agent
|
|
1236
|
+
elif len(agent_ids) == 1 and not force:
|
|
1237
|
+
template = manager.get_local_template(agent_ids[0])
|
|
1238
|
+
print("\n📋 Agent to delete:")
|
|
1239
|
+
print(f" ID: {template.agent_id}")
|
|
1240
|
+
print(f" Name: {template.metadata.get('name', template.agent_id)}")
|
|
1241
|
+
print(f" Tier: {template.tier}")
|
|
1242
|
+
|
|
1243
|
+
confirm = input("\nAre you sure? [y/N]: ").strip().lower()
|
|
1244
|
+
if confirm not in ["y", "yes"]:
|
|
1245
|
+
return CommandResult.error_result("Deletion cancelled")
|
|
1246
|
+
|
|
1247
|
+
# Perform deletion
|
|
1248
|
+
if len(agent_ids) == 1:
|
|
1249
|
+
# Single deletion
|
|
1250
|
+
result = manager.delete_local_template(
|
|
1251
|
+
agent_id=agent_ids[0],
|
|
1252
|
+
tier=tier,
|
|
1253
|
+
delete_deployment=not keep_deployment,
|
|
1254
|
+
backup_first=backup,
|
|
1255
|
+
)
|
|
1256
|
+
|
|
1257
|
+
if result["success"]:
|
|
1258
|
+
message = f"✅ Successfully deleted agent '{agent_ids[0]}'"
|
|
1259
|
+
if result["backup_location"]:
|
|
1260
|
+
message += f"\n Backup saved to: {result['backup_location']}"
|
|
1261
|
+
message += f"\n Removed {len(result['deleted_files'])} file(s)"
|
|
1262
|
+
return CommandResult.success_result(message)
|
|
1263
|
+
errors = "\n".join(result["errors"])
|
|
1264
|
+
return CommandResult.error_result(
|
|
1265
|
+
f"Failed to delete agent '{agent_ids[0]}':\n{errors}"
|
|
1266
|
+
)
|
|
1267
|
+
# Multiple deletion
|
|
1268
|
+
results = manager.delete_multiple_templates(
|
|
1269
|
+
agent_ids=agent_ids,
|
|
1270
|
+
tier=tier,
|
|
1271
|
+
delete_deployment=not keep_deployment,
|
|
1272
|
+
backup_first=backup,
|
|
1273
|
+
)
|
|
1274
|
+
|
|
1275
|
+
# Format results
|
|
1276
|
+
message = ""
|
|
1277
|
+
if results["successful"]:
|
|
1278
|
+
message = (
|
|
1279
|
+
f"✅ Successfully deleted {len(results['successful'])} agent(s):\n"
|
|
1280
|
+
)
|
|
1281
|
+
for agent_id in results["successful"]:
|
|
1282
|
+
message += f" - {agent_id}\n"
|
|
1283
|
+
|
|
1284
|
+
if results["failed"]:
|
|
1285
|
+
if message:
|
|
1286
|
+
message += "\n"
|
|
1287
|
+
message += f"❌ Failed to delete {len(results['failed'])} agent(s):\n"
|
|
1288
|
+
for agent_id in results["failed"]:
|
|
1289
|
+
errors = results["details"][agent_id]["errors"]
|
|
1290
|
+
message += f" - {agent_id}: {', '.join(errors)}\n"
|
|
1291
|
+
|
|
1292
|
+
if not message:
|
|
1293
|
+
message = "No agents were deleted"
|
|
1294
|
+
|
|
1295
|
+
return (
|
|
1296
|
+
CommandResult.success_result(message.strip())
|
|
1297
|
+
if results["successful"]
|
|
1298
|
+
else CommandResult.error_result(message.strip())
|
|
1299
|
+
)
|
|
1300
|
+
|
|
1301
|
+
except Exception as e:
|
|
1302
|
+
return CommandResult.error_result(f"Failed to delete local agents: {e}")
|
|
1303
|
+
|
|
695
1304
|
def _show_help(self) -> CommandResult:
|
|
696
1305
|
"""Show help for agent manager."""
|
|
697
1306
|
help_text = """
|
|
698
1307
|
Agent Manager - Comprehensive Agent Lifecycle Management
|
|
699
1308
|
|
|
700
|
-
Commands:
|
|
1309
|
+
Interactive Commands (Recommended):
|
|
1310
|
+
create-interactive 🧙♂️ Launch step-by-step agent creation wizard
|
|
1311
|
+
manage-local 🔧 Interactive menu for managing local agents
|
|
1312
|
+
edit-interactive ✏️ Edit agent configuration interactively
|
|
1313
|
+
test-local 🧪 Test local agent with validation and deployment
|
|
1314
|
+
|
|
1315
|
+
Standard Commands:
|
|
701
1316
|
list List all agents across tiers with hierarchy
|
|
702
1317
|
create Create a new agent (interactive or with arguments)
|
|
703
1318
|
variant Create an agent variant based on existing agent
|
|
@@ -708,7 +1323,22 @@ Commands:
|
|
|
708
1323
|
templates List available agent templates
|
|
709
1324
|
reset Remove claude-mpm authored agents for clean install
|
|
710
1325
|
|
|
711
|
-
|
|
1326
|
+
Local Agent Commands:
|
|
1327
|
+
create-local Create a local JSON agent template in .claude-mpm/agents/
|
|
1328
|
+
deploy-local Deploy local JSON templates to Claude Code
|
|
1329
|
+
list-local List all local agent templates
|
|
1330
|
+
sync-local Synchronize local templates with deployed agents
|
|
1331
|
+
export-local Export local templates to a directory
|
|
1332
|
+
import-local Import templates from a directory
|
|
1333
|
+
delete-local Delete local agent templates with safety checks
|
|
1334
|
+
|
|
1335
|
+
Interactive Examples:
|
|
1336
|
+
claude-mpm agent-manager create-interactive
|
|
1337
|
+
claude-mpm agent-manager manage-local
|
|
1338
|
+
claude-mpm agent-manager edit-interactive --agent-id my-agent
|
|
1339
|
+
claude-mpm agent-manager test-local --agent-id my-agent
|
|
1340
|
+
|
|
1341
|
+
Standard Examples:
|
|
712
1342
|
claude-mpm agent-manager list
|
|
713
1343
|
claude-mpm agent-manager create --id my-agent --name "My Agent"
|
|
714
1344
|
claude-mpm agent-manager variant --base research --id research-v2
|
|
@@ -717,7 +1347,32 @@ Examples:
|
|
|
717
1347
|
claude-mpm agent-manager reset --dry-run
|
|
718
1348
|
claude-mpm agent-manager reset --force --project-only
|
|
719
1349
|
|
|
720
|
-
|
|
1350
|
+
Local Agent Examples:
|
|
1351
|
+
claude-mpm agent-manager create-local --agent-id custom-research --name "Custom Research"
|
|
1352
|
+
claude-mpm agent-manager deploy-local --agent-id custom-research
|
|
1353
|
+
claude-mpm agent-manager list-local --tier project
|
|
1354
|
+
claude-mpm agent-manager sync-local
|
|
1355
|
+
claude-mpm agent-manager export-local --output ./my-agents
|
|
1356
|
+
claude-mpm agent-manager import-local --input ./shared-agents --tier user
|
|
1357
|
+
claude-mpm agent-manager delete-local --agent-id custom-qa
|
|
1358
|
+
claude-mpm agent-manager delete-local --agent-id qa research --force
|
|
1359
|
+
claude-mpm agent-manager delete-local --all --tier project --backup
|
|
1360
|
+
|
|
1361
|
+
Interactive Features:
|
|
1362
|
+
✨ Step-by-step guided agent creation
|
|
1363
|
+
🎯 Intelligent defaults and suggestions
|
|
1364
|
+
🔍 Real-time validation with helpful errors
|
|
1365
|
+
👁️ Preview configurations before creation
|
|
1366
|
+
🏗️ Inherit from existing system agents
|
|
1367
|
+
📝 Management menu for all local agents
|
|
1368
|
+
🚀 One-click deployment and testing
|
|
1369
|
+
|
|
1370
|
+
Notes:
|
|
1371
|
+
• Interactive mode provides the best user experience
|
|
1372
|
+
• PM customization writes to .claude-mpm/INSTRUCTIONS.md, not CLAUDE.md
|
|
1373
|
+
• Local agents are stored as JSON templates in .claude-mpm/agents/
|
|
1374
|
+
• Local project agents override system agents with the same name
|
|
1375
|
+
• Project name is used as the "author" field for local agents
|
|
721
1376
|
"""
|
|
722
1377
|
return CommandResult.success_result(help_text)
|
|
723
1378
|
|
|
@@ -737,8 +1392,8 @@ def manage_agent_manager(args) -> int:
|
|
|
737
1392
|
|
|
738
1393
|
if result.success:
|
|
739
1394
|
# Handle JSON output format
|
|
740
|
-
output_format = getattr(args, "format",
|
|
741
|
-
if output_format ==
|
|
1395
|
+
output_format = getattr(args, "format", OutputFormat.TEXT)
|
|
1396
|
+
if str(output_format).lower() == OutputFormat.JSON and result.data is not None:
|
|
742
1397
|
print(json.dumps(result.data, indent=2))
|
|
743
1398
|
elif result.message:
|
|
744
1399
|
print(result.message)
|