claude-mpm 4.20.3__py3-none-any.whl → 4.25.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +23 -6
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +1783 -34
- claude_mpm/agents/WORKFLOW.md +75 -2
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/frontmatter_validator.py +1 -1
- claude_mpm/agents/templates/api_qa.json +5 -2
- claude_mpm/agents/templates/circuit_breakers.md +108 -2
- claude_mpm/agents/templates/documentation.json +33 -6
- claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
- claude_mpm/agents/templates/php-engineer.json +10 -4
- claude_mpm/agents/templates/pm_red_flags.md +89 -19
- claude_mpm/agents/templates/project_organizer.json +7 -3
- claude_mpm/agents/templates/qa.json +2 -1
- claude_mpm/agents/templates/react_engineer.json +1 -0
- claude_mpm/agents/templates/research.json +82 -12
- claude_mpm/agents/templates/security.json +4 -4
- claude_mpm/agents/templates/tauri_engineer.json +274 -0
- claude_mpm/agents/templates/ticketing.json +10 -6
- claude_mpm/agents/templates/version_control.json +4 -2
- claude_mpm/agents/templates/web_qa.json +2 -1
- claude_mpm/cli/README.md +253 -0
- claude_mpm/cli/__init__.py +11 -1
- claude_mpm/cli/commands/aggregate.py +1 -1
- claude_mpm/cli/commands/analyze.py +3 -3
- claude_mpm/cli/commands/cleanup.py +1 -1
- claude_mpm/cli/commands/configure_agent_display.py +4 -4
- claude_mpm/cli/commands/debug.py +12 -12
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/mcp_install_commands.py +1 -1
- claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
- claude_mpm/cli/commands/mpm_init/README.md +365 -0
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +573 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +67 -1
- claude_mpm/cli/commands/run.py +124 -128
- claude_mpm/cli/commands/skills.py +522 -34
- claude_mpm/cli/executor.py +56 -0
- claude_mpm/cli/interactive/agent_wizard.py +5 -5
- claude_mpm/cli/parsers/base_parser.py +28 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
- claude_mpm/cli/parsers/skills_parser.py +138 -0
- claude_mpm/cli/startup.py +111 -8
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/utils.py +1 -1
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/cli_module/refactoring_guide.md +253 -0
- claude_mpm/commands/mpm-help.md +3 -0
- claude_mpm/commands/mpm-init.md +19 -3
- claude_mpm/commands/mpm-resume.md +372 -0
- claude_mpm/commands/mpm-tickets.md +56 -7
- claude_mpm/commands/mpm.md +1 -0
- claude_mpm/config/agent_capabilities.yaml +658 -0
- claude_mpm/config/async_logging_config.yaml +145 -0
- claude_mpm/constants.py +12 -0
- claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +14 -1
- claude_mpm/core/config.py +8 -0
- claude_mpm/core/constants.py +1 -1
- claude_mpm/core/framework/processors/metadata_processor.py +1 -1
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +41 -2
- claude_mpm/core/interactive_session.py +48 -3
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +39 -0
- claude_mpm/d2/.gitignore +22 -0
- claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
- claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
- claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
- claude_mpm/d2/QUICKSTART.md +186 -0
- claude_mpm/d2/README.md +232 -0
- claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
- claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
- claude_mpm/d2/TESTING.md +288 -0
- claude_mpm/d2/index.html +118 -0
- claude_mpm/d2/package.json +19 -0
- claude_mpm/d2/src/App.svelte +110 -0
- claude_mpm/d2/src/components/Header.svelte +153 -0
- claude_mpm/d2/src/components/MainContent.svelte +74 -0
- claude_mpm/d2/src/components/Sidebar.svelte +85 -0
- claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
- claude_mpm/d2/src/lib/socketio.js +144 -0
- claude_mpm/d2/src/main.js +7 -0
- claude_mpm/d2/src/stores/events.js +114 -0
- claude_mpm/d2/src/stores/socket.js +108 -0
- claude_mpm/d2/src/stores/theme.js +65 -0
- claude_mpm/d2/svelte.config.js +12 -0
- claude_mpm/d2/vite.config.js +15 -0
- claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
- claude_mpm/dashboard/BUILD_NUMBER +1 -0
- claude_mpm/dashboard/README.md +121 -0
- claude_mpm/dashboard/VERSION +1 -0
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
- claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
- claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
- claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
- claude_mpm/dashboard/react/entries/events.tsx +165 -0
- claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
- claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
- claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
- claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
- claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
- claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
- claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
- claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
- claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
- claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
- claude_mpm/dashboard/static/built/connection-manager.js +76 -76
- claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
- claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/built/react/events.js.map +1 -0
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
- claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
- claude_mpm/dashboard/static/built/shared/logger.js +16 -16
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
- claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
- claude_mpm/dashboard/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +15 -15
- claude_mpm/dashboard/static/index.html +22 -22
- claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
- claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
- claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
- claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
- claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
- claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +76 -58
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
- claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
- claude_mpm/dashboard/static/js/shared/logger.js +16 -16
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
- claude_mpm/dashboard/static/js/socket-client.js +138 -121
- claude_mpm/dashboard/static/navigation-test-results.md +118 -0
- claude_mpm/dashboard/static/production/main.html +21 -21
- claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
- claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
- claude_mpm/dashboard/templates/code_simple.html +23 -23
- claude_mpm/dashboard/templates/index.html +18 -18
- claude_mpm/hooks/README.md +143 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
- claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
- claude_mpm/hooks/claude_hooks/installer.py +45 -0
- claude_mpm/hooks/templates/README.md +180 -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/templates/settings.json.example +147 -0
- claude_mpm/schemas/agent_schema.json +596 -0
- claude_mpm/schemas/frontmatter_schema.json +165 -0
- claude_mpm/scripts/claude-hook-handler.sh +3 -3
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
- claude_mpm/services/agents/local_template_manager.py +3 -1
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +36 -16
- claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
- claude_mpm/services/core/base.py +26 -11
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/models/agent_config.py +3 -0
- claude_mpm/services/core/models/process.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
- claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
- claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
- claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
- claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
- claude_mpm/services/diagnostics/models.py +21 -0
- claude_mpm/services/event_bus/README.md +244 -0
- claude_mpm/services/event_bus/direct_relay.py +3 -3
- claude_mpm/services/event_bus/event_bus.py +36 -3
- claude_mpm/services/event_bus/relay.py +23 -7
- claude_mpm/services/events/README.md +303 -0
- claude_mpm/services/events/consumers/logging.py +1 -2
- claude_mpm/services/framework_claude_md_generator/README.md +119 -0
- claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
- claude_mpm/services/local_ops/__init__.py +2 -0
- claude_mpm/services/local_ops/process_manager.py +1 -1
- claude_mpm/services/local_ops/resource_monitor.py +2 -2
- claude_mpm/services/mcp_gateway/README.md +185 -0
- claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
- claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
- claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
- claude_mpm/services/memory/failure_tracker.py +19 -4
- claude_mpm/services/memory/optimizer.py +1 -1
- claude_mpm/services/model/model_router.py +8 -9
- claude_mpm/services/monitor/daemon.py +1 -1
- claude_mpm/services/monitor/server.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/port_manager.py +1 -1
- claude_mpm/services/project/documentation_manager.py +2 -1
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +1 -0
- claude_mpm/services/self_upgrade_service.py +165 -7
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- claude_mpm/services/socketio/handlers/connection.py +1 -1
- claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
- claude_mpm/services/socketio/handlers/git.py +2 -2
- claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
- claude_mpm/services/static/.gitkeep +2 -0
- claude_mpm/services/system_instructions_service.py +1 -3
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
- claude_mpm/services/version_control/VERSION +1 -0
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +3 -3
- claude_mpm/skills/agent_skills_injector.py +42 -49
- claude_mpm/skills/bundled/.gitkeep +2 -0
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +4 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +108 -114
- 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/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +46 -41
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +36 -73
- 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/debugging/root-cause-tracing/SKILL.md +100 -125
- claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -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/verification-before-completion/SKILL.md +28 -72
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +11 -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 +272 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +13 -1
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +11 -0
- claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +109 -277
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
- claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
- claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +135 -155
- 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 +13 -12
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
- claude_mpm/skills/bundled/performance-profiling.md +6 -0
- claude_mpm/skills/bundled/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/react/flexlayout-react.md +742 -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/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +21 -25
- claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +86 -250
- 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/LICENSE.txt +202 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +145 -57
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
- claude_mpm/skills/bundled/testing/webapp-testing/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 +37 -15
- 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/skills_registry.py +44 -48
- claude_mpm/skills/skills_service.py +117 -108
- claude_mpm/templates/questions/EXAMPLES.md +501 -0
- claude_mpm/templates/questions/__init__.py +43 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +314 -0
- claude_mpm/templates/questions/project_init.py +388 -0
- claude_mpm/templates/questions/ticket_mgmt.py +397 -0
- claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
- claude_mpm/tools/__main__.py +8 -8
- claude_mpm/tools/code_tree_analyzer/README.md +64 -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/utils/agent_dependency_loader.py +3 -3
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- claude_mpm/utils/robust_installer.py +3 -5
- claude_mpm/utils/structured_questions.py +619 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/METADATA +218 -31
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +409 -246
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
- claude_mpm/cli/commands/mpm_init.py +0 -2093
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
- claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
- claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
- claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
- claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
- claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
- claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/react/events.js +0 -30
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
- claude_mpm/tools/code_tree_analyzer.py +0 -1825
- /claude_mpm/skills/bundled/collaboration/requesting-code-review/{code-reviewer.md → references/code-reviewer-template.md} +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
claude_mpm/cli/executor.py
CHANGED
|
@@ -146,6 +146,62 @@ def execute_command(command: str, args) -> int:
|
|
|
146
146
|
# Convert CommandResult to exit code
|
|
147
147
|
return result.exit_code if result else 0
|
|
148
148
|
|
|
149
|
+
# Handle hook-errors command with lazy import
|
|
150
|
+
if command == "hook-errors":
|
|
151
|
+
# Lazy import to avoid loading unless needed
|
|
152
|
+
from .commands.hook_errors import (
|
|
153
|
+
clear_errors,
|
|
154
|
+
diagnose_errors,
|
|
155
|
+
list_errors,
|
|
156
|
+
show_status,
|
|
157
|
+
show_summary,
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
# Get subcommand
|
|
161
|
+
subcommand = getattr(args, "hook_errors_command", "status")
|
|
162
|
+
if not subcommand:
|
|
163
|
+
subcommand = "status"
|
|
164
|
+
|
|
165
|
+
# Map subcommands to functions
|
|
166
|
+
handlers = {
|
|
167
|
+
"list": list_errors,
|
|
168
|
+
"summary": show_summary,
|
|
169
|
+
"clear": clear_errors,
|
|
170
|
+
"diagnose": diagnose_errors,
|
|
171
|
+
"status": show_status,
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
# Get handler and invoke
|
|
175
|
+
handler = handlers.get(subcommand)
|
|
176
|
+
if handler:
|
|
177
|
+
# Build Click context programmatically
|
|
178
|
+
import click
|
|
179
|
+
|
|
180
|
+
ctx = click.Context(command=handler)
|
|
181
|
+
|
|
182
|
+
# Prepare keyword arguments from args
|
|
183
|
+
kwargs = {}
|
|
184
|
+
if hasattr(args, "format"):
|
|
185
|
+
kwargs["format"] = args.format
|
|
186
|
+
if hasattr(args, "hook_type"):
|
|
187
|
+
kwargs["hook_type"] = args.hook_type
|
|
188
|
+
if hasattr(args, "yes"):
|
|
189
|
+
kwargs["yes"] = args.yes
|
|
190
|
+
|
|
191
|
+
try:
|
|
192
|
+
# Invoke handler with arguments
|
|
193
|
+
with ctx:
|
|
194
|
+
handler.invoke(ctx, **kwargs)
|
|
195
|
+
return 0
|
|
196
|
+
except SystemExit as e:
|
|
197
|
+
return e.code if e.code is not None else 0
|
|
198
|
+
except Exception as e:
|
|
199
|
+
print(f"Error: {e}")
|
|
200
|
+
return 1
|
|
201
|
+
else:
|
|
202
|
+
print(f"Unknown hook-errors subcommand: {subcommand}")
|
|
203
|
+
return 1
|
|
204
|
+
|
|
149
205
|
# Map stable commands to their implementations
|
|
150
206
|
command_map = {
|
|
151
207
|
CLICommands.RUN.value: run_session,
|
|
@@ -55,7 +55,7 @@ class AgentWizard:
|
|
|
55
55
|
model = self._get_model_choice()
|
|
56
56
|
|
|
57
57
|
# Step 5: Inheritance Option
|
|
58
|
-
parent_agent,
|
|
58
|
+
parent_agent, _base_template = self._get_inheritance_option()
|
|
59
59
|
|
|
60
60
|
# Step 6: Capabilities Configuration
|
|
61
61
|
capabilities = self._get_capabilities_configuration()
|
|
@@ -178,25 +178,25 @@ class AgentWizard:
|
|
|
178
178
|
if not result[0]:
|
|
179
179
|
print(f"❌ {result[1]}")
|
|
180
180
|
elif choice_num == len(templates) + 1:
|
|
181
|
-
|
|
181
|
+
_, message = self.run_interactive_create()
|
|
182
182
|
if message:
|
|
183
183
|
# Message already has emoji from the function
|
|
184
184
|
print(f"\n{message}")
|
|
185
185
|
continue # Return to main menu
|
|
186
186
|
elif choice_num == len(templates) + 2:
|
|
187
|
-
|
|
187
|
+
_, message = self._interactive_delete_menu(templates)
|
|
188
188
|
if message:
|
|
189
189
|
# Message already has emoji from the function
|
|
190
190
|
print(f"\n{message}")
|
|
191
191
|
continue # Return to main menu
|
|
192
192
|
elif choice_num == len(templates) + 3:
|
|
193
|
-
|
|
193
|
+
_, message = self._interactive_import()
|
|
194
194
|
if message:
|
|
195
195
|
# Message already has emoji from the function
|
|
196
196
|
print(f"\n{message}")
|
|
197
197
|
continue # Return to main menu
|
|
198
198
|
elif choice_num == len(templates) + 4:
|
|
199
|
-
|
|
199
|
+
_success, message = self._interactive_export()
|
|
200
200
|
if message:
|
|
201
201
|
# Message already has emoji from the function
|
|
202
202
|
print(f"\n{message}")
|
|
@@ -541,6 +541,34 @@ def create_parser(
|
|
|
541
541
|
from ..commands.verify import add_parser as add_verify_parser
|
|
542
542
|
|
|
543
543
|
add_verify_parser(subparsers)
|
|
544
|
+
|
|
545
|
+
# Add hook-errors command for managing hook error memory
|
|
546
|
+
hook_errors_parser = subparsers.add_parser(
|
|
547
|
+
"hook-errors",
|
|
548
|
+
help="Manage hook error memory and diagnostics",
|
|
549
|
+
)
|
|
550
|
+
hook_errors_parser.add_argument(
|
|
551
|
+
"hook_errors_command",
|
|
552
|
+
nargs="?",
|
|
553
|
+
choices=["list", "summary", "clear", "diagnose", "status"],
|
|
554
|
+
help="Hook errors subcommand",
|
|
555
|
+
)
|
|
556
|
+
hook_errors_parser.add_argument(
|
|
557
|
+
"--format",
|
|
558
|
+
choices=["table", "json"],
|
|
559
|
+
default="table",
|
|
560
|
+
help="Output format for list command",
|
|
561
|
+
)
|
|
562
|
+
hook_errors_parser.add_argument(
|
|
563
|
+
"--hook-type",
|
|
564
|
+
help="Filter by specific hook type",
|
|
565
|
+
)
|
|
566
|
+
hook_errors_parser.add_argument(
|
|
567
|
+
"-y",
|
|
568
|
+
"--yes",
|
|
569
|
+
action="store_true",
|
|
570
|
+
help="Skip confirmation prompts",
|
|
571
|
+
)
|
|
544
572
|
except ImportError:
|
|
545
573
|
# Commands module may not be available during testing or refactoring
|
|
546
574
|
pass
|
|
@@ -265,5 +265,47 @@ def add_mpm_init_subparser(subparsers: Any) -> None:
|
|
|
265
265
|
help="Path to project directory (default: current directory)",
|
|
266
266
|
)
|
|
267
267
|
|
|
268
|
+
# Pause subcommand - Create session pause documents
|
|
269
|
+
pause_parser = subcommands.add_parser(
|
|
270
|
+
"pause",
|
|
271
|
+
help="Pause current session and save state",
|
|
272
|
+
description="Create session pause documents for later resume. Captures git context, "
|
|
273
|
+
"conversation state, todos, and working directory state.\n\n"
|
|
274
|
+
"Creates three file formats:\n"
|
|
275
|
+
" - JSON: Machine-readable structured data\n"
|
|
276
|
+
" - YAML: Human-readable configuration style\n"
|
|
277
|
+
" - Markdown: Full documentation format",
|
|
278
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
279
|
+
epilog="Examples:\n"
|
|
280
|
+
" claude-mpm mpm-init pause # Basic pause\n"
|
|
281
|
+
" claude-mpm mpm-init pause -m 'End of day' # With message\n"
|
|
282
|
+
" claude-mpm mpm-init pause --no-commit # Skip git commit\n"
|
|
283
|
+
" claude-mpm mpm-init pause --export session.json # Export copy",
|
|
284
|
+
)
|
|
285
|
+
pause_parser.add_argument(
|
|
286
|
+
"--message",
|
|
287
|
+
"-m",
|
|
288
|
+
type=str,
|
|
289
|
+
default=None,
|
|
290
|
+
help="Optional message describing pause reason or context",
|
|
291
|
+
)
|
|
292
|
+
pause_parser.add_argument(
|
|
293
|
+
"--no-commit",
|
|
294
|
+
action="store_true",
|
|
295
|
+
help="Skip git commit of session state",
|
|
296
|
+
)
|
|
297
|
+
pause_parser.add_argument(
|
|
298
|
+
"--export",
|
|
299
|
+
type=str,
|
|
300
|
+
default=None,
|
|
301
|
+
help="Export session state to custom location",
|
|
302
|
+
)
|
|
303
|
+
pause_parser.add_argument(
|
|
304
|
+
"project_path",
|
|
305
|
+
nargs="?",
|
|
306
|
+
default=".",
|
|
307
|
+
help="Path to project directory (default: current directory)",
|
|
308
|
+
)
|
|
309
|
+
|
|
268
310
|
# Set the command handler
|
|
269
311
|
mpm_init_parser.set_defaults(command="mpm-init")
|
|
@@ -134,4 +134,142 @@ def add_skills_subparser(subparsers) -> argparse.ArgumentParser:
|
|
|
134
134
|
help="Show configuration file path",
|
|
135
135
|
)
|
|
136
136
|
|
|
137
|
+
# GitHub deployment commands
|
|
138
|
+
# Deploy from GitHub command
|
|
139
|
+
deploy_github_parser = skills_subparsers.add_parser(
|
|
140
|
+
SkillsCommands.DEPLOY_FROM_GITHUB.value,
|
|
141
|
+
help="Deploy skills from GitHub to ~/.claude/skills/ for Claude Code",
|
|
142
|
+
)
|
|
143
|
+
deploy_github_parser.add_argument(
|
|
144
|
+
"--collection",
|
|
145
|
+
"-c",
|
|
146
|
+
help="Collection to deploy from (default: uses default collection)",
|
|
147
|
+
)
|
|
148
|
+
deploy_github_parser.add_argument(
|
|
149
|
+
"--toolchain",
|
|
150
|
+
nargs="+",
|
|
151
|
+
help="Filter by toolchain/language (e.g., python javascript rust)",
|
|
152
|
+
)
|
|
153
|
+
deploy_github_parser.add_argument(
|
|
154
|
+
"--categories",
|
|
155
|
+
nargs="+",
|
|
156
|
+
help="Filter by categories (e.g., testing debugging web)",
|
|
157
|
+
)
|
|
158
|
+
deploy_github_parser.add_argument(
|
|
159
|
+
"--force",
|
|
160
|
+
action="store_true",
|
|
161
|
+
help="Force redeployment of already deployed skills",
|
|
162
|
+
)
|
|
163
|
+
deploy_github_parser.add_argument(
|
|
164
|
+
"--all",
|
|
165
|
+
action="store_true",
|
|
166
|
+
help="Deploy all available skills (no filtering)",
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
# List available GitHub skills
|
|
170
|
+
list_available_parser = skills_subparsers.add_parser(
|
|
171
|
+
SkillsCommands.LIST_AVAILABLE.value,
|
|
172
|
+
help="List all available skills from GitHub repository",
|
|
173
|
+
)
|
|
174
|
+
list_available_parser.add_argument(
|
|
175
|
+
"--collection",
|
|
176
|
+
"-c",
|
|
177
|
+
help="Collection to list from (default: uses default collection)",
|
|
178
|
+
)
|
|
179
|
+
list_available_parser.add_argument(
|
|
180
|
+
"--verbose",
|
|
181
|
+
"-v",
|
|
182
|
+
action="store_true",
|
|
183
|
+
help="Show detailed skill information including names",
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
# Check deployed skills
|
|
187
|
+
skills_subparsers.add_parser(
|
|
188
|
+
SkillsCommands.CHECK_DEPLOYED.value,
|
|
189
|
+
help="Check which skills are currently deployed in ~/.claude/skills/",
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
# Remove skills
|
|
193
|
+
remove_parser = skills_subparsers.add_parser(
|
|
194
|
+
SkillsCommands.REMOVE.value,
|
|
195
|
+
help="Remove deployed skills from ~/.claude/skills/",
|
|
196
|
+
)
|
|
197
|
+
remove_parser.add_argument(
|
|
198
|
+
"skill_names",
|
|
199
|
+
nargs="*",
|
|
200
|
+
help="Specific skills to remove",
|
|
201
|
+
)
|
|
202
|
+
remove_parser.add_argument(
|
|
203
|
+
"--all",
|
|
204
|
+
action="store_true",
|
|
205
|
+
help="Remove all deployed skills",
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
# Collection management commands
|
|
209
|
+
# List collections
|
|
210
|
+
skills_subparsers.add_parser(
|
|
211
|
+
SkillsCommands.COLLECTION_LIST.value,
|
|
212
|
+
help="List all configured skill collections",
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
# Add collection
|
|
216
|
+
collection_add_parser = skills_subparsers.add_parser(
|
|
217
|
+
SkillsCommands.COLLECTION_ADD.value,
|
|
218
|
+
help="Add a new skill collection from GitHub",
|
|
219
|
+
)
|
|
220
|
+
collection_add_parser.add_argument(
|
|
221
|
+
"collection_name",
|
|
222
|
+
help="Name for the collection (e.g., obra-superpowers)",
|
|
223
|
+
)
|
|
224
|
+
collection_add_parser.add_argument(
|
|
225
|
+
"collection_url",
|
|
226
|
+
help="GitHub repository URL (e.g., https://github.com/obra/superpowers)",
|
|
227
|
+
)
|
|
228
|
+
collection_add_parser.add_argument(
|
|
229
|
+
"--priority",
|
|
230
|
+
type=int,
|
|
231
|
+
default=99,
|
|
232
|
+
help="Collection priority (lower = higher priority, default: 99)",
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
# Remove collection
|
|
236
|
+
collection_remove_parser = skills_subparsers.add_parser(
|
|
237
|
+
SkillsCommands.COLLECTION_REMOVE.value,
|
|
238
|
+
help="Remove a skill collection",
|
|
239
|
+
)
|
|
240
|
+
collection_remove_parser.add_argument(
|
|
241
|
+
"collection_name",
|
|
242
|
+
help="Name of the collection to remove",
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
# Enable collection
|
|
246
|
+
collection_enable_parser = skills_subparsers.add_parser(
|
|
247
|
+
SkillsCommands.COLLECTION_ENABLE.value,
|
|
248
|
+
help="Enable a disabled collection",
|
|
249
|
+
)
|
|
250
|
+
collection_enable_parser.add_argument(
|
|
251
|
+
"collection_name",
|
|
252
|
+
help="Name of the collection to enable",
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
# Disable collection
|
|
256
|
+
collection_disable_parser = skills_subparsers.add_parser(
|
|
257
|
+
SkillsCommands.COLLECTION_DISABLE.value,
|
|
258
|
+
help="Disable a collection without removing it",
|
|
259
|
+
)
|
|
260
|
+
collection_disable_parser.add_argument(
|
|
261
|
+
"collection_name",
|
|
262
|
+
help="Name of the collection to disable",
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
# Set default collection
|
|
266
|
+
collection_set_default_parser = skills_subparsers.add_parser(
|
|
267
|
+
SkillsCommands.COLLECTION_SET_DEFAULT.value,
|
|
268
|
+
help="Set the default collection for deployments",
|
|
269
|
+
)
|
|
270
|
+
collection_set_default_parser.add_argument(
|
|
271
|
+
"collection_name",
|
|
272
|
+
help="Name of the collection to set as default",
|
|
273
|
+
)
|
|
274
|
+
|
|
137
275
|
return skills_parser
|
claude_mpm/cli/startup.py
CHANGED
|
@@ -19,23 +19,34 @@ def setup_early_environment(argv):
|
|
|
19
19
|
WHY: Some commands need special environment handling before any logging
|
|
20
20
|
or service initialization occurs.
|
|
21
21
|
|
|
22
|
+
CRITICAL: Suppress ALL logging by default until setup_mcp_server_logging()
|
|
23
|
+
configures the user's preference. This prevents early loggers (like
|
|
24
|
+
ProjectInitializer and service.* loggers) from logging at INFO level before
|
|
25
|
+
we know the user's logging preference.
|
|
26
|
+
|
|
22
27
|
Args:
|
|
23
28
|
argv: Command line arguments
|
|
24
29
|
|
|
25
30
|
Returns:
|
|
26
31
|
Processed argv list
|
|
27
32
|
"""
|
|
33
|
+
import logging
|
|
34
|
+
|
|
28
35
|
# Disable telemetry and set cleanup flags early
|
|
29
36
|
os.environ.setdefault("DISABLE_TELEMETRY", "1")
|
|
30
37
|
os.environ.setdefault("CLAUDE_MPM_SKIP_CLEANUP", "0")
|
|
31
38
|
|
|
32
|
-
#
|
|
39
|
+
# CRITICAL: Suppress ALL logging by default
|
|
40
|
+
# This catches all loggers (claude_mpm.*, service.*, framework_loader, etc.)
|
|
41
|
+
# This will be overridden by setup_mcp_server_logging() based on user preference
|
|
42
|
+
logging.getLogger().setLevel(logging.CRITICAL + 1) # Root logger catches everything
|
|
43
|
+
|
|
44
|
+
# Process argv
|
|
33
45
|
if argv is None:
|
|
34
46
|
argv = sys.argv[1:]
|
|
35
|
-
if "configure" in argv or (len(argv) > 0 and argv[0] == "configure"):
|
|
36
|
-
import logging
|
|
37
47
|
|
|
38
|
-
|
|
48
|
+
# EARLY CHECK: Additional suppression for configure command
|
|
49
|
+
if "configure" in argv or (len(argv) > 0 and argv[0] == "configure"):
|
|
39
50
|
os.environ["CLAUDE_MPM_SKIP_CLEANUP"] = "1"
|
|
40
51
|
|
|
41
52
|
return argv
|
|
@@ -160,6 +171,73 @@ def discover_and_link_runtime_skills():
|
|
|
160
171
|
# Continue execution - skills discovery failure shouldn't block startup
|
|
161
172
|
|
|
162
173
|
|
|
174
|
+
def deploy_output_style_on_startup():
|
|
175
|
+
"""
|
|
176
|
+
Deploy claude-mpm output style to Claude Code on CLI startup.
|
|
177
|
+
|
|
178
|
+
WHY: Automatically deploy and activate the output style to ensure consistent,
|
|
179
|
+
professional communication without emojis and exclamation points. This ensures
|
|
180
|
+
the style is available even when using Claude Code directly (not via chat command).
|
|
181
|
+
|
|
182
|
+
DESIGN DECISION: This is non-blocking and idempotent. It uses OutputStyleManager
|
|
183
|
+
which handles version detection, file deployment, and settings activation.
|
|
184
|
+
Only works for Claude Code >= 1.0.83.
|
|
185
|
+
"""
|
|
186
|
+
try:
|
|
187
|
+
from pathlib import Path
|
|
188
|
+
|
|
189
|
+
from ..core.output_style_manager import OutputStyleManager
|
|
190
|
+
|
|
191
|
+
# Create OutputStyleManager instance
|
|
192
|
+
output_style_manager = OutputStyleManager()
|
|
193
|
+
|
|
194
|
+
# Check if Claude Code supports output styles
|
|
195
|
+
if not output_style_manager.supports_output_styles():
|
|
196
|
+
# Silently skip - version too old or Claude not installed
|
|
197
|
+
return
|
|
198
|
+
|
|
199
|
+
# Check if already deployed and active
|
|
200
|
+
settings_file = Path.home() / ".claude" / "settings.json"
|
|
201
|
+
output_style_file = Path.home() / ".claude" / "output-styles" / "claude-mpm.md"
|
|
202
|
+
|
|
203
|
+
if settings_file.exists() and output_style_file.exists():
|
|
204
|
+
try:
|
|
205
|
+
import json
|
|
206
|
+
|
|
207
|
+
# Check if file has content (bug fix: was skipping empty files)
|
|
208
|
+
if output_style_file.stat().st_size == 0:
|
|
209
|
+
# File is empty, need to redeploy with content
|
|
210
|
+
pass # Fall through to deployment below
|
|
211
|
+
else:
|
|
212
|
+
# File has content, check if already active
|
|
213
|
+
settings = json.loads(settings_file.read_text())
|
|
214
|
+
if settings.get("activeOutputStyle") == "claude-mpm":
|
|
215
|
+
# Already deployed and active with content
|
|
216
|
+
return
|
|
217
|
+
except Exception:
|
|
218
|
+
pass # Continue with deployment if we can't read settings
|
|
219
|
+
|
|
220
|
+
# Read OUTPUT_STYLE.md content
|
|
221
|
+
output_style_path = Path(__file__).parent.parent / "agents" / "OUTPUT_STYLE.md"
|
|
222
|
+
|
|
223
|
+
if not output_style_path.exists():
|
|
224
|
+
# No output style file to deploy
|
|
225
|
+
return
|
|
226
|
+
|
|
227
|
+
output_style_content = output_style_path.read_text()
|
|
228
|
+
|
|
229
|
+
# Deploy the output style (deploys file and activates it)
|
|
230
|
+
output_style_manager.deploy_output_style(output_style_content)
|
|
231
|
+
|
|
232
|
+
except Exception as e:
|
|
233
|
+
# Non-critical - log but don't fail startup
|
|
234
|
+
from ..core.logger import get_logger
|
|
235
|
+
|
|
236
|
+
logger = get_logger("cli")
|
|
237
|
+
logger.debug(f"Failed to deploy output style: {e}")
|
|
238
|
+
# Continue execution - output style deployment shouldn't block startup
|
|
239
|
+
|
|
240
|
+
|
|
163
241
|
def run_background_services():
|
|
164
242
|
"""
|
|
165
243
|
Initialize all background services on startup.
|
|
@@ -172,6 +250,7 @@ def run_background_services():
|
|
|
172
250
|
check_for_updates_async()
|
|
173
251
|
deploy_bundled_skills()
|
|
174
252
|
discover_and_link_runtime_skills()
|
|
253
|
+
deploy_output_style_on_startup()
|
|
175
254
|
|
|
176
255
|
|
|
177
256
|
def setup_mcp_server_logging(args):
|
|
@@ -285,12 +364,12 @@ def check_mcp_auto_configuration():
|
|
|
285
364
|
mcp_manager = MCPConfigManager()
|
|
286
365
|
|
|
287
366
|
# Fix any corrupted installations first
|
|
288
|
-
|
|
367
|
+
_fix_success, fix_message = mcp_manager.fix_mcp_service_issues()
|
|
289
368
|
if fix_message and "Fixed:" in fix_message:
|
|
290
369
|
logger.info(f"MCP service fixes applied: {fix_message}")
|
|
291
370
|
|
|
292
371
|
# Ensure all services are configured correctly
|
|
293
|
-
|
|
372
|
+
_config_success, config_message = mcp_manager.ensure_mcp_services_configured()
|
|
294
373
|
if config_message and "Added MCP services" in config_message:
|
|
295
374
|
logger.info(f"MCP services configured: {config_message}")
|
|
296
375
|
|
|
@@ -471,7 +550,7 @@ def check_for_updates_async():
|
|
|
471
550
|
|
|
472
551
|
DESIGN DECISION: This is non-blocking and non-critical - failures are logged
|
|
473
552
|
but don't prevent startup. Only runs for pip/pipx/npm installations, skips
|
|
474
|
-
editable/development installations.
|
|
553
|
+
editable/development installations. Respects user configuration settings.
|
|
475
554
|
"""
|
|
476
555
|
|
|
477
556
|
def run_update_check():
|
|
@@ -480,11 +559,27 @@ def check_for_updates_async():
|
|
|
480
559
|
try:
|
|
481
560
|
import asyncio
|
|
482
561
|
|
|
562
|
+
from ..core.config import Config
|
|
483
563
|
from ..core.logger import get_logger
|
|
484
564
|
from ..services.self_upgrade_service import SelfUpgradeService
|
|
485
565
|
|
|
486
566
|
logger = get_logger("upgrade_check")
|
|
487
567
|
|
|
568
|
+
# Load configuration
|
|
569
|
+
config = Config()
|
|
570
|
+
updates_config = config.get("updates", {})
|
|
571
|
+
|
|
572
|
+
# Check if update checking is enabled
|
|
573
|
+
if not updates_config.get("check_enabled", True):
|
|
574
|
+
logger.debug("Update checking disabled in configuration")
|
|
575
|
+
return
|
|
576
|
+
|
|
577
|
+
# Check frequency setting
|
|
578
|
+
frequency = updates_config.get("check_frequency", "daily")
|
|
579
|
+
if frequency == "never":
|
|
580
|
+
logger.debug("Update checking frequency set to 'never'")
|
|
581
|
+
return
|
|
582
|
+
|
|
488
583
|
# Create new event loop for this thread
|
|
489
584
|
loop = asyncio.new_event_loop()
|
|
490
585
|
asyncio.set_event_loop(loop)
|
|
@@ -499,8 +594,16 @@ def check_for_updates_async():
|
|
|
499
594
|
logger.debug("Skipping version check for editable installation")
|
|
500
595
|
return
|
|
501
596
|
|
|
597
|
+
# Get configuration values
|
|
598
|
+
check_claude_code = updates_config.get("check_claude_code", True)
|
|
599
|
+
auto_upgrade = updates_config.get("auto_upgrade", False)
|
|
600
|
+
|
|
502
601
|
# Check and prompt for upgrade if available (non-blocking)
|
|
503
|
-
loop.run_until_complete(
|
|
602
|
+
loop.run_until_complete(
|
|
603
|
+
upgrade_service.check_and_prompt_on_startup(
|
|
604
|
+
auto_upgrade=auto_upgrade, check_claude_code=check_claude_code
|
|
605
|
+
)
|
|
606
|
+
)
|
|
504
607
|
|
|
505
608
|
except Exception as e:
|
|
506
609
|
# Non-critical - log but don't fail startup
|