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/core/hook_manager.py
CHANGED
|
@@ -23,6 +23,7 @@ from datetime import datetime, timezone
|
|
|
23
23
|
from typing import Any, Dict, Optional
|
|
24
24
|
|
|
25
25
|
from ..core.logger import get_logger
|
|
26
|
+
from .hook_error_memory import get_hook_error_memory
|
|
26
27
|
from .hook_performance_config import get_hook_performance_config
|
|
27
28
|
from .unified_paths import get_package_root
|
|
28
29
|
|
|
@@ -42,6 +43,9 @@ class HookManager:
|
|
|
42
43
|
self.session_id = self._get_or_create_session_id()
|
|
43
44
|
self.hook_handler_path = self._find_hook_handler()
|
|
44
45
|
|
|
46
|
+
# Initialize error memory for tracking and preventing repeated errors
|
|
47
|
+
self.error_memory = get_hook_error_memory()
|
|
48
|
+
|
|
45
49
|
# Initialize background hook processing for async execution
|
|
46
50
|
self.performance_config = get_hook_performance_config()
|
|
47
51
|
queue_config = self.performance_config.get_queue_config()
|
|
@@ -97,11 +101,31 @@ class HookManager:
|
|
|
97
101
|
self.logger.debug("Started background hook processor thread")
|
|
98
102
|
|
|
99
103
|
def _execute_hook_sync(self, hook_data: Dict[str, Any]):
|
|
100
|
-
"""Execute a single hook synchronously in the background thread.
|
|
104
|
+
"""Execute a single hook synchronously in the background thread with error detection.
|
|
105
|
+
|
|
106
|
+
WHY error detection:
|
|
107
|
+
- Prevents repeated execution of failing hooks
|
|
108
|
+
- Provides actionable error messages to users
|
|
109
|
+
- Learns from failures to improve system reliability
|
|
110
|
+
- Reduces log noise from repeated errors
|
|
111
|
+
"""
|
|
101
112
|
try:
|
|
102
113
|
hook_type = hook_data["hook_type"]
|
|
103
114
|
event_data = hook_data["event_data"]
|
|
104
115
|
|
|
116
|
+
# Check if this hook is known to fail repeatedly
|
|
117
|
+
if self.error_memory.should_skip_hook(hook_type):
|
|
118
|
+
known_error = self.error_memory.is_known_failing_hook(hook_type)
|
|
119
|
+
if known_error:
|
|
120
|
+
# Log warning but don't spam - only on first skip
|
|
121
|
+
if known_error["count"] == 2: # First time we're skipping
|
|
122
|
+
self.logger.warning(
|
|
123
|
+
f"⚠️ Skipping {hook_type} hook - failed {known_error['count']} times previously\n"
|
|
124
|
+
f"Error: {known_error['match']}\n"
|
|
125
|
+
f"To retry: rm {self.error_memory.memory_file}"
|
|
126
|
+
)
|
|
127
|
+
return
|
|
128
|
+
|
|
105
129
|
# Create the hook event
|
|
106
130
|
hook_event = {
|
|
107
131
|
"hook_event_name": hook_type,
|
|
@@ -127,7 +151,22 @@ class HookManager:
|
|
|
127
151
|
check=False,
|
|
128
152
|
)
|
|
129
153
|
|
|
130
|
-
|
|
154
|
+
# Detect errors in the output
|
|
155
|
+
error_info = self.error_memory.detect_error(
|
|
156
|
+
result.stdout or "", result.stderr or "", result.returncode
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
if error_info:
|
|
160
|
+
# Record the error
|
|
161
|
+
self.error_memory.record_error(error_info, hook_type)
|
|
162
|
+
|
|
163
|
+
# Get fix suggestion
|
|
164
|
+
suggestion = self.error_memory.suggest_fix(error_info)
|
|
165
|
+
|
|
166
|
+
# Log error with suggestion
|
|
167
|
+
self.logger.warning(f"Hook {hook_type} error detected:\n{suggestion}")
|
|
168
|
+
elif result.returncode != 0:
|
|
169
|
+
# Non-zero return without detected pattern
|
|
131
170
|
self.logger.debug(f"Hook {hook_type} returned code {result.returncode}")
|
|
132
171
|
if result.stderr:
|
|
133
172
|
self.logger.debug(f"Hook stderr: {result.stderr}")
|
|
@@ -85,8 +85,8 @@ class InteractiveSession:
|
|
|
85
85
|
self.logger.warning(f"WebSocket initialization failed: {error}")
|
|
86
86
|
# Continue without WebSocket - not a fatal error
|
|
87
87
|
|
|
88
|
-
#
|
|
89
|
-
|
|
88
|
+
# Banner now displayed in CLI startup - see startup_display.py
|
|
89
|
+
# Removed duplicate _display_welcome_message() to consolidate with main banner
|
|
90
90
|
|
|
91
91
|
# Log session start
|
|
92
92
|
if self.runner.project_logger:
|
|
@@ -293,7 +293,12 @@ class InteractiveSession:
|
|
|
293
293
|
return False, f"Unexpected error with Socket.IO: {e}"
|
|
294
294
|
|
|
295
295
|
def _display_welcome_message(self) -> None:
|
|
296
|
-
"""Display the interactive session welcome message.
|
|
296
|
+
"""Display the interactive session welcome message.
|
|
297
|
+
|
|
298
|
+
DEPRECATED: This method is kept for backward compatibility with tests.
|
|
299
|
+
The main banner is now displayed in startup_display.py during CLI startup.
|
|
300
|
+
This consolidated approach prevents duplicate banners.
|
|
301
|
+
"""
|
|
297
302
|
version_str = self.runner._get_version()
|
|
298
303
|
|
|
299
304
|
# Get output style status
|
|
@@ -383,6 +388,14 @@ class InteractiveSession:
|
|
|
383
388
|
self.logger.debug(f"Raw claude_args received: {self.runner.claude_args}")
|
|
384
389
|
cmd.extend(self.runner.claude_args)
|
|
385
390
|
|
|
391
|
+
# Add --agents flag if native agents mode is enabled
|
|
392
|
+
if getattr(self.runner, "use_native_agents", False):
|
|
393
|
+
agents_flag = self._build_agents_flag()
|
|
394
|
+
if agents_flag:
|
|
395
|
+
# Add --agents JSON directly (already properly formatted)
|
|
396
|
+
cmd.extend(agents_flag)
|
|
397
|
+
self.logger.info("✓ Native agents mode: Using --agents CLI flag")
|
|
398
|
+
|
|
386
399
|
# Add system instructions
|
|
387
400
|
from claude_mpm.core.claude_runner import create_simple_context
|
|
388
401
|
|
|
@@ -402,6 +415,38 @@ class InteractiveSession:
|
|
|
402
415
|
|
|
403
416
|
return cmd
|
|
404
417
|
|
|
418
|
+
def _build_agents_flag(self) -> Optional[list]:
|
|
419
|
+
"""Build --agents flag with all MPM agents.
|
|
420
|
+
|
|
421
|
+
Returns:
|
|
422
|
+
List with ["--agents", "<json>"] or None if conversion fails
|
|
423
|
+
"""
|
|
424
|
+
try:
|
|
425
|
+
from claude_mpm.services.native_agent_converter import NativeAgentConverter
|
|
426
|
+
|
|
427
|
+
converter = NativeAgentConverter()
|
|
428
|
+
agents = converter.load_agents_from_templates()
|
|
429
|
+
|
|
430
|
+
if not agents:
|
|
431
|
+
self.logger.warning("No agents loaded for native mode")
|
|
432
|
+
return None
|
|
433
|
+
|
|
434
|
+
# Generate JSON for --agents flag
|
|
435
|
+
agents_json = converter.generate_agents_json(agents)
|
|
436
|
+
summary = converter.get_conversion_summary(agents)
|
|
437
|
+
|
|
438
|
+
self.logger.info(
|
|
439
|
+
f"Native agents: {summary['total_agents']} agents, "
|
|
440
|
+
f"{summary['json_size_kb']} KB JSON"
|
|
441
|
+
)
|
|
442
|
+
|
|
443
|
+
# Return as list: ["--agents", "<json>"]
|
|
444
|
+
return ["--agents", agents_json]
|
|
445
|
+
|
|
446
|
+
except Exception as e:
|
|
447
|
+
self.logger.error(f"Failed to build --agents flag: {e}", exc_info=True)
|
|
448
|
+
return None
|
|
449
|
+
|
|
405
450
|
def _prepare_environment(self) -> dict:
|
|
406
451
|
"""Prepare clean environment variables for Claude."""
|
|
407
452
|
clean_env = os.environ.copy()
|
claude_mpm/core/interfaces.py
CHANGED
|
@@ -33,7 +33,62 @@ from pathlib import Path
|
|
|
33
33
|
from typing import Any, Dict, Generic, List, Optional, Tuple, TypeVar
|
|
34
34
|
|
|
35
35
|
# Re-export everything from the new location for backward compatibility
|
|
36
|
-
from claude_mpm.services.core.interfaces import
|
|
36
|
+
from claude_mpm.services.core.interfaces import ( # noqa: F401
|
|
37
|
+
AgentCapabilitiesInterface,
|
|
38
|
+
AgentDeploymentInterface,
|
|
39
|
+
AgentMetadata,
|
|
40
|
+
CacheEntry,
|
|
41
|
+
CommandHandlerInterface,
|
|
42
|
+
HealthStatus,
|
|
43
|
+
HookServiceInterface,
|
|
44
|
+
IAgentRecommender,
|
|
45
|
+
IAgentRegistry,
|
|
46
|
+
IAutoConfigManager,
|
|
47
|
+
ICacheService,
|
|
48
|
+
IConfigurationManager,
|
|
49
|
+
IConfigurationService,
|
|
50
|
+
ICrashDetector,
|
|
51
|
+
IDeploymentStateManager,
|
|
52
|
+
IErrorHandler,
|
|
53
|
+
IEventBus,
|
|
54
|
+
IHealthCheck,
|
|
55
|
+
IHealthCheckManager,
|
|
56
|
+
IHealthMonitor,
|
|
57
|
+
ILocalProcessManager,
|
|
58
|
+
ILogMonitor,
|
|
59
|
+
IMemoryLeakDetector,
|
|
60
|
+
IModelProvider,
|
|
61
|
+
IModelRouter,
|
|
62
|
+
InterfaceRegistry,
|
|
63
|
+
IPerformanceMonitor,
|
|
64
|
+
IPromptCache,
|
|
65
|
+
IResourceMonitor,
|
|
66
|
+
IRestartManager,
|
|
67
|
+
IRestartPolicy,
|
|
68
|
+
IServiceContainer,
|
|
69
|
+
IServiceFactory,
|
|
70
|
+
IServiceLifecycle,
|
|
71
|
+
IStructuredLogger,
|
|
72
|
+
ITemplateManager,
|
|
73
|
+
IToolchainAnalyzer,
|
|
74
|
+
MemoryHookInterface,
|
|
75
|
+
MemoryServiceInterface,
|
|
76
|
+
ModelCapability,
|
|
77
|
+
ModelProvider,
|
|
78
|
+
ModelResponse,
|
|
79
|
+
ProjectAnalyzerInterface,
|
|
80
|
+
RunnerConfigurationInterface,
|
|
81
|
+
ServiceType,
|
|
82
|
+
SessionManagementInterface,
|
|
83
|
+
SocketIOServiceInterface,
|
|
84
|
+
SubprocessLauncherInterface,
|
|
85
|
+
SystemInstructionsInterface,
|
|
86
|
+
T,
|
|
87
|
+
TemplateRenderContext,
|
|
88
|
+
TicketManagerInterface,
|
|
89
|
+
UtilityServiceInterface,
|
|
90
|
+
VersionServiceInterface,
|
|
91
|
+
)
|
|
37
92
|
|
|
38
93
|
# Type variables for generic interfaces
|
|
39
94
|
T = TypeVar("T")
|
claude_mpm/core/logger.py
CHANGED
|
@@ -225,7 +225,9 @@ def setup_logging(
|
|
|
225
225
|
|
|
226
226
|
# Use rotating file handler
|
|
227
227
|
file_handler = logging.handlers.RotatingFileHandler(
|
|
228
|
-
log_file,
|
|
228
|
+
log_file,
|
|
229
|
+
maxBytes=10 * 1024 * 1024,
|
|
230
|
+
backupCount=5, # 10 MB
|
|
229
231
|
)
|
|
230
232
|
else:
|
|
231
233
|
# Use default log directory
|
|
@@ -268,8 +268,47 @@ class OneshotSession:
|
|
|
268
268
|
if self.runner.claude_args:
|
|
269
269
|
cmd.extend(self.runner.claude_args)
|
|
270
270
|
|
|
271
|
+
# Add --agents flag if native agents mode is enabled
|
|
272
|
+
if getattr(self.runner, "use_native_agents", False):
|
|
273
|
+
agents_flag = self._build_agents_flag()
|
|
274
|
+
if agents_flag:
|
|
275
|
+
cmd.extend(agents_flag)
|
|
276
|
+
self.logger.info("✓ Native agents mode: Using --agents CLI flag")
|
|
277
|
+
|
|
271
278
|
return cmd
|
|
272
279
|
|
|
280
|
+
def _build_agents_flag(self) -> Optional[list]:
|
|
281
|
+
"""Build --agents flag with all MPM agents.
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
List with ["--agents", "<json>"] or None if conversion fails
|
|
285
|
+
"""
|
|
286
|
+
try:
|
|
287
|
+
from claude_mpm.services.native_agent_converter import NativeAgentConverter
|
|
288
|
+
|
|
289
|
+
converter = NativeAgentConverter()
|
|
290
|
+
agents = converter.load_agents_from_templates()
|
|
291
|
+
|
|
292
|
+
if not agents:
|
|
293
|
+
self.logger.warning("No agents loaded for native mode")
|
|
294
|
+
return None
|
|
295
|
+
|
|
296
|
+
# Generate JSON for --agents flag
|
|
297
|
+
agents_json = converter.generate_agents_json(agents)
|
|
298
|
+
summary = converter.get_conversion_summary(agents)
|
|
299
|
+
|
|
300
|
+
self.logger.info(
|
|
301
|
+
f"Native agents: {summary['total_agents']} agents, "
|
|
302
|
+
f"{summary['json_size_kb']} KB JSON"
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
# Return as list: ["--agents", "<json>"]
|
|
306
|
+
return ["--agents", agents_json]
|
|
307
|
+
|
|
308
|
+
except Exception as e:
|
|
309
|
+
self.logger.error(f"Failed to build --agents flag: {e}", exc_info=True)
|
|
310
|
+
return None
|
|
311
|
+
|
|
273
312
|
def _handle_successful_response(self, response: str, prompt: str) -> None:
|
|
274
313
|
"""Process a successful Claude response."""
|
|
275
314
|
print(response)
|
claude_mpm/d2/.gitignore
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# Before vs After: Store Architecture
|
|
2
|
+
|
|
3
|
+
## The Problem (Before)
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
7
|
+
│ Module Load Time (Outside Component Context) │
|
|
8
|
+
├─────────────────────────────────────────────────────────────┤
|
|
9
|
+
│ │
|
|
10
|
+
│ stores/socket.svelte.js │
|
|
11
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
12
|
+
│ │ function createSocketStore() { │ │
|
|
13
|
+
│ │ let connected = $state(false) ❌ ERROR │ │
|
|
14
|
+
│ │ let statusText = $derived(...) ❌ ERROR │ │
|
|
15
|
+
│ │ │ │
|
|
16
|
+
│ │ // Runes created outside component! │ │
|
|
17
|
+
│ │ // → effect_orphan error │ │
|
|
18
|
+
│ │ // → App fails to mount │ │
|
|
19
|
+
│ │ // → Black screen │ │
|
|
20
|
+
│ │ } │ │
|
|
21
|
+
│ │ │ │
|
|
22
|
+
│ │ export const socketStore = createSocketStore() │ │
|
|
23
|
+
│ │ ▲ │ │
|
|
24
|
+
│ │ │ │ │
|
|
25
|
+
│ │ Called at import time! │ │
|
|
26
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
27
|
+
│ │
|
|
28
|
+
└─────────────────────────────────────────────────────────────┘
|
|
29
|
+
│
|
|
30
|
+
│
|
|
31
|
+
▼
|
|
32
|
+
❌ effect_orphan
|
|
33
|
+
❌ Black Screen
|
|
34
|
+
❌ No UI
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## The Solution (After)
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
41
|
+
│ Module Load Time (Outside Component Context) │
|
|
42
|
+
├─────────────────────────────────────────────────────────────┤
|
|
43
|
+
│ │
|
|
44
|
+
│ stores/socket.js │
|
|
45
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
46
|
+
│ │ import { writable, derived } from 'svelte/store' │ │
|
|
47
|
+
│ │ │ │
|
|
48
|
+
│ │ function createSocketStore() { │ │
|
|
49
|
+
│ │ const connected = writable(false) ✅ OK │ │
|
|
50
|
+
│ │ const statusText = derived(...) ✅ OK │ │
|
|
51
|
+
│ │ │ │
|
|
52
|
+
│ │ // Traditional stores work at module level! │ │
|
|
53
|
+
│ │ // → No effect_orphan error │ │
|
|
54
|
+
│ │ // → App mounts successfully │ │
|
|
55
|
+
│ │ // → UI renders │ │
|
|
56
|
+
│ │ │ │
|
|
57
|
+
│ │ return { │ │
|
|
58
|
+
│ │ connected: { subscribe: connected.subscribe }, │ │
|
|
59
|
+
│ │ statusText: { subscribe: statusText.subscribe }│ │
|
|
60
|
+
│ │ } │ │
|
|
61
|
+
│ │ } │ │
|
|
62
|
+
│ │ │ │
|
|
63
|
+
│ │ export const socketStore = createSocketStore() │ │
|
|
64
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
65
|
+
│ │
|
|
66
|
+
└─────────────────────────────────────────────────────────────┘
|
|
67
|
+
│
|
|
68
|
+
│
|
|
69
|
+
▼
|
|
70
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
71
|
+
│ Component Context │
|
|
72
|
+
├─────────────────────────────────────────────────────────────┤
|
|
73
|
+
│ │
|
|
74
|
+
│ App.svelte │
|
|
75
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
76
|
+
│ │ <script> │ │
|
|
77
|
+
│ │ import { socketStore } from './stores/socket.js' │ │
|
|
78
|
+
│ │ │ │
|
|
79
|
+
│ │ // Auto-subscription with $ prefix │ │
|
|
80
|
+
│ │ </script> │ │
|
|
81
|
+
│ │ │ │
|
|
82
|
+
│ │ <Header │ │
|
|
83
|
+
│ │ statusText={$socketStore.statusText} ✅ OK │ │
|
|
84
|
+
│ │ statusColor={$socketStore.statusColor} ✅ OK │ │
|
|
85
|
+
│ │ /> │ │
|
|
86
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
87
|
+
│ │
|
|
88
|
+
└─────────────────────────────────────────────────────────────┘
|
|
89
|
+
│
|
|
90
|
+
│
|
|
91
|
+
▼
|
|
92
|
+
✅ App renders
|
|
93
|
+
✅ Stores reactive
|
|
94
|
+
✅ UI updates
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Data Flow Comparison
|
|
98
|
+
|
|
99
|
+
### Before (Broken)
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
┌──────────────┐
|
|
103
|
+
│ Module Load │
|
|
104
|
+
└──────┬───────┘
|
|
105
|
+
│
|
|
106
|
+
▼
|
|
107
|
+
┌──────────────────────┐
|
|
108
|
+
│ createSocketStore() │
|
|
109
|
+
│ │
|
|
110
|
+
│ $state() → ❌ FAIL │ → effect_orphan error
|
|
111
|
+
│ $derived() → ❌ FAIL│ → Black screen
|
|
112
|
+
└──────────────────────┘
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### After (Fixed)
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
┌──────────────┐
|
|
119
|
+
│ Module Load │
|
|
120
|
+
└──────┬───────┘
|
|
121
|
+
│
|
|
122
|
+
▼
|
|
123
|
+
┌────────────────────────┐
|
|
124
|
+
│ createSocketStore() │
|
|
125
|
+
│ │
|
|
126
|
+
│ writable() → ✅ Store │
|
|
127
|
+
│ derived() → ✅ Store │
|
|
128
|
+
└────────┬───────────────┘
|
|
129
|
+
│
|
|
130
|
+
▼
|
|
131
|
+
┌─────────────────────┐
|
|
132
|
+
│ Component Mounts │
|
|
133
|
+
└─────────┬───────────┘
|
|
134
|
+
│
|
|
135
|
+
▼
|
|
136
|
+
┌──────────────────────┐
|
|
137
|
+
│ $ Auto-Subscription │
|
|
138
|
+
│ │
|
|
139
|
+
│ $store.value → ✅ │ → UI renders
|
|
140
|
+
│ │ → Reactive updates work
|
|
141
|
+
└──────────────────────┘
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Code Comparison
|
|
145
|
+
|
|
146
|
+
### Store Definition
|
|
147
|
+
|
|
148
|
+
#### Before (socket.svelte.js)
|
|
149
|
+
```javascript
|
|
150
|
+
function createSocketStore() {
|
|
151
|
+
let connected = $state(false); // ❌ Orphan effect
|
|
152
|
+
let statusText = $derived( // ❌ Orphan effect
|
|
153
|
+
connected ? 'Connected' : 'Disconnected'
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
get connected() { return connected; },
|
|
158
|
+
get statusText() { return statusText; }
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### After (socket.js)
|
|
164
|
+
```javascript
|
|
165
|
+
import { writable, derived } from 'svelte/store';
|
|
166
|
+
|
|
167
|
+
function createSocketStore() {
|
|
168
|
+
const connected = writable(false); // ✅ Valid store
|
|
169
|
+
const statusText = derived( // ✅ Valid store
|
|
170
|
+
connected,
|
|
171
|
+
($connected) => $connected ? 'Connected' : 'Disconnected'
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
return {
|
|
175
|
+
connected: { subscribe: connected.subscribe },
|
|
176
|
+
statusText: { subscribe: statusText.subscribe }
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Component Usage
|
|
182
|
+
|
|
183
|
+
#### Before (App.svelte)
|
|
184
|
+
```svelte
|
|
185
|
+
<script>
|
|
186
|
+
import { socketStore } from './stores/socket.svelte.js';
|
|
187
|
+
</script>
|
|
188
|
+
|
|
189
|
+
<Header
|
|
190
|
+
statusText={socketStore.statusText} <!-- ❌ Not reactive -->
|
|
191
|
+
statusColor={socketStore.statusColor} <!-- ❌ Not reactive -->
|
|
192
|
+
/>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
#### After (App.svelte)
|
|
196
|
+
```svelte
|
|
197
|
+
<script>
|
|
198
|
+
import { socketStore } from './stores/socket.js';
|
|
199
|
+
</script>
|
|
200
|
+
|
|
201
|
+
<Header
|
|
202
|
+
statusText={$socketStore.statusText} <!-- ✅ Reactive -->
|
|
203
|
+
statusColor={$socketStore.statusColor} <!-- ✅ Reactive -->
|
|
204
|
+
/>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Reactivity Flow
|
|
208
|
+
|
|
209
|
+
### Before (Broken)
|
|
210
|
+
```
|
|
211
|
+
User Action → Store Method → Rune Update → ❌ No Component Update
|
|
212
|
+
→ ❌ UI Frozen
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### After (Fixed)
|
|
216
|
+
```
|
|
217
|
+
User Action → Store Method → Store Update → Component Subscription
|
|
218
|
+
↓
|
|
219
|
+
✅ UI Updates Automatically
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Performance Impact
|
|
223
|
+
|
|
224
|
+
| Metric | Before | After | Change |
|
|
225
|
+
|--------|--------|-------|--------|
|
|
226
|
+
| Build Time | N/A (failed) | 322ms | ✅ Working |
|
|
227
|
+
| Bundle Size | N/A (failed) | 81KB | ✅ Optimal |
|
|
228
|
+
| Runtime | Black screen | Normal | ✅ Fixed |
|
|
229
|
+
| Memory | Orphaned effects | Clean | ✅ Improved |
|
|
230
|
+
|
|
231
|
+
## Architecture Decision Matrix
|
|
232
|
+
|
|
233
|
+
| Scenario | Use Runes | Use Stores | Why |
|
|
234
|
+
|----------|-----------|------------|-----|
|
|
235
|
+
| Component local state | ✅ | ❌ | Simpler syntax, fine-grained reactivity |
|
|
236
|
+
| Module-level state | ❌ | ✅ | Avoids effect_orphan, proper lifecycle |
|
|
237
|
+
| Shared between components | ❌ | ✅ | Subscribe pattern, broadcast updates |
|
|
238
|
+
| Derived from props | ✅ | ❌ | Component-scoped, auto-cleanup |
|
|
239
|
+
| Global app state | ❌ | ✅ | Module-level singleton required |
|
|
240
|
+
|
|
241
|
+
## Migration Summary
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
Files Renamed:
|
|
245
|
+
socket.svelte.js → socket.js
|
|
246
|
+
events.svelte.js → events.js
|
|
247
|
+
|
|
248
|
+
Imports Changed:
|
|
249
|
+
- import { writable, derived } from 'svelte/store'
|
|
250
|
+
+ Uses traditional Svelte store API
|
|
251
|
+
|
|
252
|
+
Store Creation:
|
|
253
|
+
- let x = $state(0)
|
|
254
|
+
+ const x = writable(0)
|
|
255
|
+
|
|
256
|
+
- let y = $derived(x * 2)
|
|
257
|
+
+ const y = derived(x, $x => $x * 2)
|
|
258
|
+
|
|
259
|
+
Store Updates:
|
|
260
|
+
- x = 5
|
|
261
|
+
+ x.set(5)
|
|
262
|
+
|
|
263
|
+
- x++
|
|
264
|
+
+ x.update(n => n + 1)
|
|
265
|
+
|
|
266
|
+
Component Usage:
|
|
267
|
+
- {store.value}
|
|
268
|
+
+ {$store.value}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
**Summary**: Moving from Svelte 5 runes (component-scoped) to traditional Svelte stores (module-scoped) resolved the `effect_orphan` error and enabled proper reactive state management at the application level.
|