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
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Svelte 5 Store Architecture Guide
|
|
2
|
+
|
|
3
|
+
## Quick Decision Tree
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
Do you need reactive state?
|
|
7
|
+
│
|
|
8
|
+
├─ YES → Is it used inside a component <script> block?
|
|
9
|
+
│ │
|
|
10
|
+
│ ├─ YES → Use Svelte 5 Runes ✅
|
|
11
|
+
│ │ let count = $state(0)
|
|
12
|
+
│ │ let doubled = $derived(count * 2)
|
|
13
|
+
│ │
|
|
14
|
+
│ └─ NO → Is it at module level / shared between components?
|
|
15
|
+
│ │
|
|
16
|
+
│ └─ YES → Use Traditional Stores ✅
|
|
17
|
+
│ const count = writable(0)
|
|
18
|
+
│ const doubled = derived(count, $count => $count * 2)
|
|
19
|
+
│
|
|
20
|
+
└─ NO → Use regular JavaScript variables
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Pattern 1: Component-Local State (Use Runes)
|
|
24
|
+
|
|
25
|
+
```svelte
|
|
26
|
+
<!-- Component.svelte -->
|
|
27
|
+
<script>
|
|
28
|
+
// ✅ CORRECT - Runes in component context
|
|
29
|
+
let count = $state(0);
|
|
30
|
+
let doubled = $derived(count * 2);
|
|
31
|
+
|
|
32
|
+
$effect(() => {
|
|
33
|
+
console.log(`Count is now ${count}`);
|
|
34
|
+
});
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<button onclick={() => count++}>
|
|
38
|
+
{count} / {doubled}
|
|
39
|
+
</button>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Pattern 2: Module-Level Stores (Use Traditional Stores)
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
// stores/counter.js
|
|
46
|
+
import { writable, derived } from 'svelte/store';
|
|
47
|
+
|
|
48
|
+
// ✅ CORRECT - Traditional stores for module-level state
|
|
49
|
+
function createCounterStore() {
|
|
50
|
+
const count = writable(0);
|
|
51
|
+
const doubled = derived(count, $count => $count * 2);
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
count: { subscribe: count.subscribe },
|
|
55
|
+
doubled: { subscribe: doubled.subscribe },
|
|
56
|
+
increment: () => count.update(n => n + 1),
|
|
57
|
+
reset: () => count.set(0)
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export const counterStore = createCounterStore();
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```svelte
|
|
65
|
+
<!-- Component.svelte -->
|
|
66
|
+
<script>
|
|
67
|
+
import { counterStore } from './stores/counter.js';
|
|
68
|
+
|
|
69
|
+
// Use $ auto-subscription
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<button onclick={() => counterStore.increment()}>
|
|
73
|
+
{$counterStore.count} / {$counterStore.doubled}
|
|
74
|
+
</button>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Pattern 3: Props (Use $props)
|
|
78
|
+
|
|
79
|
+
```svelte
|
|
80
|
+
<!-- Child.svelte -->
|
|
81
|
+
<script>
|
|
82
|
+
// ✅ CORRECT - $props for component props
|
|
83
|
+
let { value, onUpdate } = $props();
|
|
84
|
+
</script>
|
|
85
|
+
|
|
86
|
+
<input bind:value oninput={() => onUpdate(value)} />
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Common Mistakes
|
|
90
|
+
|
|
91
|
+
### ❌ WRONG: Runes at Module Level
|
|
92
|
+
|
|
93
|
+
```javascript
|
|
94
|
+
// stores/counter.svelte.js
|
|
95
|
+
// ❌ This will cause effect_orphan error!
|
|
96
|
+
function createCounterStore() {
|
|
97
|
+
let count = $state(0); // ❌ Rune outside component
|
|
98
|
+
// ...
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export const counterStore = createCounterStore(); // ❌ Called at module load
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### ❌ WRONG: Traditional Stores in Components
|
|
105
|
+
|
|
106
|
+
```svelte
|
|
107
|
+
<script>
|
|
108
|
+
import { writable } from 'svelte/store';
|
|
109
|
+
|
|
110
|
+
// ❌ Unnecessary complexity for component-local state
|
|
111
|
+
const count = writable(0);
|
|
112
|
+
</script>
|
|
113
|
+
|
|
114
|
+
<button onclick={() => count.update(n => n + 1)}>
|
|
115
|
+
{$count}
|
|
116
|
+
</button>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### ✅ CORRECT: Runes in Components
|
|
120
|
+
|
|
121
|
+
```svelte
|
|
122
|
+
<script>
|
|
123
|
+
// ✅ Simple and idiomatic
|
|
124
|
+
let count = $state(0);
|
|
125
|
+
</script>
|
|
126
|
+
|
|
127
|
+
<button onclick={() => count++}>
|
|
128
|
+
{count}
|
|
129
|
+
</button>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Migration Checklist
|
|
133
|
+
|
|
134
|
+
When converting Svelte 4 → Svelte 5:
|
|
135
|
+
|
|
136
|
+
### Component-Local State
|
|
137
|
+
- [ ] `export let prop` → `let { prop } = $props()`
|
|
138
|
+
- [ ] `$: derived = compute(x)` → `let derived = $derived(compute(x))`
|
|
139
|
+
- [ ] `$: { effect() }` → `$effect(() => { effect() })`
|
|
140
|
+
|
|
141
|
+
### Module-Level Stores
|
|
142
|
+
- [ ] Keep using `writable`, `derived`, `readable`
|
|
143
|
+
- [ ] Update components to use `$` auto-subscription
|
|
144
|
+
- [ ] Add `.subscribe` exposure in store API
|
|
145
|
+
|
|
146
|
+
### File Naming
|
|
147
|
+
- [ ] Component stores using runes: `Component.svelte` (not `.svelte.js`)
|
|
148
|
+
- [ ] Module stores: `store.js` (not `.svelte.js`)
|
|
149
|
+
|
|
150
|
+
## Debugging Tips
|
|
151
|
+
|
|
152
|
+
### Error: `effect_orphan`
|
|
153
|
+
**Cause**: Runes used outside component context
|
|
154
|
+
**Fix**: Use traditional stores for module-level state
|
|
155
|
+
|
|
156
|
+
### Error: Cannot access `$store` before initialization
|
|
157
|
+
**Cause**: Missing `$` prefix on store subscription
|
|
158
|
+
**Fix**: Use `$storeName.property` in templates
|
|
159
|
+
|
|
160
|
+
### Store not updating UI
|
|
161
|
+
**Cause**: Forgetting to use `.set()` or `.update()`
|
|
162
|
+
**Fix**: Always mutate stores with `.set()` / `.update()`, never directly
|
|
163
|
+
|
|
164
|
+
## Performance Comparison
|
|
165
|
+
|
|
166
|
+
| Pattern | Bundle Impact | Reactivity | Use Case |
|
|
167
|
+
|---------|---------------|------------|----------|
|
|
168
|
+
| Runes | Minimal | Fine-grained | Component-local |
|
|
169
|
+
| Traditional Stores | Small | Observable | Shared state |
|
|
170
|
+
| Context API | None | Manual | Dependency injection |
|
|
171
|
+
|
|
172
|
+
## Further Reading
|
|
173
|
+
|
|
174
|
+
- Svelte 5 Runes: https://svelte.dev/docs/svelte/$state
|
|
175
|
+
- Svelte Stores: https://svelte.dev/docs/svelte-store
|
|
176
|
+
- Migration Guide: https://svelte-5-preview.vercel.app/docs/v5-migration-guide
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
**Remember**: Runes are for components, stores are for modules.
|
claude_mpm/d2/TESTING.md
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Testing Checklist for Dashboard2
|
|
2
|
+
|
|
3
|
+
## Build Verification
|
|
4
|
+
|
|
5
|
+
- [x] `npm install` completes without errors
|
|
6
|
+
- [x] `npm run build` completes successfully
|
|
7
|
+
- [x] No Svelte compiler warnings
|
|
8
|
+
- [x] No accessibility warnings
|
|
9
|
+
- [x] `dist/index.html` exists
|
|
10
|
+
- [x] `dist/assets/*.js` exists
|
|
11
|
+
- [x] `dist/assets/*.css` exists
|
|
12
|
+
|
|
13
|
+
## Development Server Testing
|
|
14
|
+
|
|
15
|
+
Run `npm run dev` and verify:
|
|
16
|
+
|
|
17
|
+
- [ ] Dev server starts on port 5173
|
|
18
|
+
- [ ] Dashboard loads at `http://localhost:5173`
|
|
19
|
+
- [ ] No console errors on page load
|
|
20
|
+
- [ ] Hot Module Replacement (HMR) works on file changes
|
|
21
|
+
|
|
22
|
+
## UI Components
|
|
23
|
+
|
|
24
|
+
### Header
|
|
25
|
+
- [ ] Title displays: "Claude MPM Dashboard"
|
|
26
|
+
- [ ] Version displays: "v2.0"
|
|
27
|
+
- [ ] Connection status indicator is visible
|
|
28
|
+
- [ ] Status text shows "Disconnected" initially
|
|
29
|
+
- [ ] Port number displays correctly
|
|
30
|
+
- [ ] Indicator color is red when disconnected
|
|
31
|
+
|
|
32
|
+
### Sidebar
|
|
33
|
+
- [ ] All 5 tabs are visible: Events, Agents, Files, Tools, Activity
|
|
34
|
+
- [ ] Each tab has an icon
|
|
35
|
+
- [ ] Events tab is active by default
|
|
36
|
+
- [ ] Clicking tabs switches active state
|
|
37
|
+
- [ ] Active tab has blue highlight
|
|
38
|
+
- [ ] Hover effects work correctly
|
|
39
|
+
|
|
40
|
+
### Main Content
|
|
41
|
+
- [ ] Events tab content loads
|
|
42
|
+
- [ ] Other tabs show placeholder content
|
|
43
|
+
- [ ] Placeholder icons display correctly
|
|
44
|
+
- [ ] Content area fills remaining space
|
|
45
|
+
|
|
46
|
+
## Socket.IO Connection
|
|
47
|
+
|
|
48
|
+
### Local Connection (port 8765)
|
|
49
|
+
- [ ] Connection status changes to "Connecting..." on startup
|
|
50
|
+
- [ ] Status changes to "Connected" when server is available
|
|
51
|
+
- [ ] Indicator turns green on connection
|
|
52
|
+
- [ ] Port number matches server (8765)
|
|
53
|
+
- [ ] Status shows "Disconnected" when server unavailable
|
|
54
|
+
- [ ] Status shows "Reconnecting..." when connection lost
|
|
55
|
+
- [ ] Indicator turns yellow during reconnection
|
|
56
|
+
- [ ] Auto-reconnect works after temporary disconnection
|
|
57
|
+
|
|
58
|
+
### Console Logging
|
|
59
|
+
Check browser console for:
|
|
60
|
+
- [ ] Socket.IO connection events logged
|
|
61
|
+
- [ ] No connection errors (if server running)
|
|
62
|
+
- [ ] Event reception logged
|
|
63
|
+
- [ ] No JavaScript errors
|
|
64
|
+
|
|
65
|
+
## Events Tab Functionality
|
|
66
|
+
|
|
67
|
+
### Empty State
|
|
68
|
+
- [ ] Empty state displays when no events
|
|
69
|
+
- [ ] "Waiting for events..." message shown
|
|
70
|
+
- [ ] Hint text displays
|
|
71
|
+
- [ ] Icon (📡) is visible
|
|
72
|
+
|
|
73
|
+
### Event Display
|
|
74
|
+
- [ ] Events appear when received
|
|
75
|
+
- [ ] Events display in reverse chronological order (newest first)
|
|
76
|
+
- [ ] Event time is formatted correctly (HH:MM:SS.mmm)
|
|
77
|
+
- [ ] Event source badge displays with correct color:
|
|
78
|
+
- Hook: Blue (#3b82f6)
|
|
79
|
+
- System: Green (#10b981)
|
|
80
|
+
- API: Orange (#f59e0b)
|
|
81
|
+
- [ ] Event summary shows type and subtype
|
|
82
|
+
- [ ] Event item is clickable
|
|
83
|
+
|
|
84
|
+
### Event Expansion
|
|
85
|
+
- [ ] Clicking event expands JSON details
|
|
86
|
+
- [ ] Expand icon changes from ▶ to ▼
|
|
87
|
+
- [ ] JSON is formatted with syntax highlighting
|
|
88
|
+
- [ ] JSON is scrollable horizontally if needed
|
|
89
|
+
- [ ] Clicking again collapses the event
|
|
90
|
+
- [ ] Only one event expanded at a time (optional behavior)
|
|
91
|
+
|
|
92
|
+
### Event Statistics
|
|
93
|
+
- [ ] "Total" counter increments with each event
|
|
94
|
+
- [ ] "Displayed" counter shows current count
|
|
95
|
+
- [ ] Numbers update in real-time
|
|
96
|
+
- [ ] Clear button appears when events exist
|
|
97
|
+
- [ ] Clear button removes all events
|
|
98
|
+
- [ ] Counters reset after clearing
|
|
99
|
+
|
|
100
|
+
### Auto-scroll
|
|
101
|
+
- [ ] New events auto-scroll to top
|
|
102
|
+
- [ ] User can scroll manually
|
|
103
|
+
- [ ] Auto-scroll doesn't interfere with manual scrolling
|
|
104
|
+
|
|
105
|
+
## Event Reception Testing
|
|
106
|
+
|
|
107
|
+
### Test with Mock Events
|
|
108
|
+
|
|
109
|
+
You can test event reception by running this in the browser console:
|
|
110
|
+
|
|
111
|
+
```javascript
|
|
112
|
+
// Simulate a claude_event
|
|
113
|
+
window.dispatchEvent(new CustomEvent('test-socket-event', {
|
|
114
|
+
detail: {
|
|
115
|
+
source: 'hook',
|
|
116
|
+
type: 'tool',
|
|
117
|
+
subtype: 'pre_tool',
|
|
118
|
+
timestamp: new Date().toISOString(),
|
|
119
|
+
data: {
|
|
120
|
+
tool_name: 'test_tool',
|
|
121
|
+
params: { test: true }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}));
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Or emit directly via Socket.IO if connected:
|
|
128
|
+
```javascript
|
|
129
|
+
// Get socket from console
|
|
130
|
+
const socket = io('http://localhost:8765');
|
|
131
|
+
socket.emit('claude_event', {
|
|
132
|
+
source: 'hook',
|
|
133
|
+
type: 'test',
|
|
134
|
+
subtype: 'console_test',
|
|
135
|
+
timestamp: new Date().toISOString(),
|
|
136
|
+
data: { message: 'Test from console' }
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Real Event Testing
|
|
141
|
+
- [ ] Trigger a Claude Code hook event
|
|
142
|
+
- [ ] Event appears in dashboard immediately
|
|
143
|
+
- [ ] Event data is complete and accurate
|
|
144
|
+
- [ ] Timestamp is correct
|
|
145
|
+
- [ ] Event can be expanded to view full JSON
|
|
146
|
+
- [ ] Multiple events display correctly
|
|
147
|
+
- [ ] High-frequency events don't cause UI lag
|
|
148
|
+
|
|
149
|
+
### Heartbeat Events
|
|
150
|
+
- [ ] Server heartbeat events appear (every 3 minutes)
|
|
151
|
+
- [ ] Heartbeat has "system" source
|
|
152
|
+
- [ ] Heartbeat data includes uptime
|
|
153
|
+
- [ ] Heartbeat data includes connected clients
|
|
154
|
+
|
|
155
|
+
## Performance Testing
|
|
156
|
+
|
|
157
|
+
### Large Event Loads
|
|
158
|
+
- [ ] Dashboard handles 100 events smoothly
|
|
159
|
+
- [ ] Dashboard handles 1000 events (max buffer)
|
|
160
|
+
- [ ] Events beyond 1000 are trimmed correctly
|
|
161
|
+
- [ ] No memory leaks with continuous events
|
|
162
|
+
- [ ] Scrolling remains smooth with full buffer
|
|
163
|
+
|
|
164
|
+
### Network
|
|
165
|
+
- [ ] Dashboard works on slow connections
|
|
166
|
+
- [ ] Reconnection works after network interruption
|
|
167
|
+
- [ ] Events buffer during disconnection (if implemented)
|
|
168
|
+
- [ ] No duplicate events after reconnection
|
|
169
|
+
|
|
170
|
+
## Cross-Browser Testing
|
|
171
|
+
|
|
172
|
+
- [ ] Chrome/Chromium (latest)
|
|
173
|
+
- [ ] Firefox (latest)
|
|
174
|
+
- [ ] Safari (latest)
|
|
175
|
+
- [ ] Edge (latest)
|
|
176
|
+
|
|
177
|
+
Check for:
|
|
178
|
+
- [ ] Layout renders correctly
|
|
179
|
+
- [ ] WebSocket/Socket.IO works
|
|
180
|
+
- [ ] No console errors
|
|
181
|
+
- [ ] Animations work smoothly
|
|
182
|
+
|
|
183
|
+
## Accessibility Testing
|
|
184
|
+
|
|
185
|
+
- [ ] Keyboard navigation works
|
|
186
|
+
- [ ] Tab key moves through interactive elements
|
|
187
|
+
- [ ] Enter/Space activates buttons
|
|
188
|
+
- [ ] Screen reader can read content
|
|
189
|
+
- [ ] Color contrast meets WCAG standards
|
|
190
|
+
- [ ] Focus indicators are visible
|
|
191
|
+
|
|
192
|
+
## Responsive Design
|
|
193
|
+
|
|
194
|
+
Test at different viewport sizes:
|
|
195
|
+
- [ ] 1920x1080 (Full HD)
|
|
196
|
+
- [ ] 1366x768 (Laptop)
|
|
197
|
+
- [ ] 1024x768 (Tablet landscape)
|
|
198
|
+
|
|
199
|
+
Verify:
|
|
200
|
+
- [ ] Layout doesn't break
|
|
201
|
+
- [ ] All content is accessible
|
|
202
|
+
- [ ] No horizontal scrolling
|
|
203
|
+
- [ ] Sidebar width is appropriate
|
|
204
|
+
|
|
205
|
+
## Production Build Testing
|
|
206
|
+
|
|
207
|
+
After running `npm run build`:
|
|
208
|
+
|
|
209
|
+
1. **Static File Serving**:
|
|
210
|
+
- [ ] Serve dist/ with a simple HTTP server
|
|
211
|
+
- [ ] Dashboard loads correctly
|
|
212
|
+
- [ ] Assets load from correct paths
|
|
213
|
+
- [ ] No 404 errors for assets
|
|
214
|
+
|
|
215
|
+
2. **Integration Testing**:
|
|
216
|
+
- [ ] Flask serves dashboard correctly
|
|
217
|
+
- [ ] Base path `/dashboard2/` works
|
|
218
|
+
- [ ] Assets load with correct paths
|
|
219
|
+
- [ ] Socket.IO connects to correct port
|
|
220
|
+
|
|
221
|
+
3. **Size Optimization**:
|
|
222
|
+
- [ ] Total bundle size < 100KB (gzipped)
|
|
223
|
+
- [ ] Initial load time < 2 seconds
|
|
224
|
+
- [ ] No unnecessary dependencies bundled
|
|
225
|
+
|
|
226
|
+
## Error Handling
|
|
227
|
+
|
|
228
|
+
Test error scenarios:
|
|
229
|
+
- [ ] Server not available: Shows "Disconnected" status
|
|
230
|
+
- [ ] Server crashes: Shows reconnection status
|
|
231
|
+
- [ ] Invalid event data: Handles gracefully (no crashes)
|
|
232
|
+
- [ ] Malformed JSON: Displays error or skips event
|
|
233
|
+
- [ ] Network timeout: Retries connection
|
|
234
|
+
|
|
235
|
+
## Console Checks
|
|
236
|
+
|
|
237
|
+
Verify no errors for:
|
|
238
|
+
- [ ] Component initialization
|
|
239
|
+
- [ ] Socket.IO connection
|
|
240
|
+
- [ ] Event handling
|
|
241
|
+
- [ ] State updates
|
|
242
|
+
- [ ] DOM updates
|
|
243
|
+
|
|
244
|
+
## Final Production Checklist
|
|
245
|
+
|
|
246
|
+
Before deploying:
|
|
247
|
+
- [ ] Run `npm run build` with no warnings
|
|
248
|
+
- [ ] Test built files locally
|
|
249
|
+
- [ ] Verify all features work in production build
|
|
250
|
+
- [ ] Check browser console for errors
|
|
251
|
+
- [ ] Test Socket.IO connection
|
|
252
|
+
- [ ] Verify events display correctly
|
|
253
|
+
- [ ] Test on target deployment environment
|
|
254
|
+
- [ ] Document any known issues
|
|
255
|
+
- [ ] Update version number if needed
|
|
256
|
+
|
|
257
|
+
## Known Issues
|
|
258
|
+
|
|
259
|
+
Document any issues found during testing:
|
|
260
|
+
|
|
261
|
+
1. **Issue**: [Description]
|
|
262
|
+
- **Severity**: Low/Medium/High
|
|
263
|
+
- **Workaround**: [If available]
|
|
264
|
+
- **Fix plan**: [If scheduled]
|
|
265
|
+
|
|
266
|
+
## Performance Benchmarks
|
|
267
|
+
|
|
268
|
+
Record baseline performance:
|
|
269
|
+
- Initial load time: ___ms
|
|
270
|
+
- Time to Socket.IO connection: ___ms
|
|
271
|
+
- Average event processing time: ___ms
|
|
272
|
+
- Memory usage with 1000 events: ___MB
|
|
273
|
+
- FPS during scrolling: ___
|
|
274
|
+
|
|
275
|
+
## Test Results Summary
|
|
276
|
+
|
|
277
|
+
Date: ___________
|
|
278
|
+
Tester: ___________
|
|
279
|
+
Environment: ___________
|
|
280
|
+
|
|
281
|
+
- Total tests: ___
|
|
282
|
+
- Passed: ___
|
|
283
|
+
- Failed: ___
|
|
284
|
+
- Skipped: ___
|
|
285
|
+
|
|
286
|
+
**Overall Status**: ⬜ Pass | ⬜ Fail | ⬜ Partial
|
|
287
|
+
|
|
288
|
+
**Notes**:
|
claude_mpm/d2/index.html
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Claude MPM Dashboard</title>
|
|
7
|
+
<style>
|
|
8
|
+
* {
|
|
9
|
+
margin: 0;
|
|
10
|
+
padding: 0;
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* CSS Custom Properties for Theming */
|
|
15
|
+
:root {
|
|
16
|
+
/* Light mode (default) */
|
|
17
|
+
--bg-primary: #ffffff;
|
|
18
|
+
--bg-secondary: #f5f5f5;
|
|
19
|
+
--bg-tertiary: #e8e8e8;
|
|
20
|
+
--bg-elevated: #ffffff;
|
|
21
|
+
--text-primary: #1a1a1a;
|
|
22
|
+
--text-secondary: #666666;
|
|
23
|
+
--text-tertiary: #888888;
|
|
24
|
+
--border-color: #e0e0e0;
|
|
25
|
+
--border-color-light: #f0f0f0;
|
|
26
|
+
--accent-color: #3b82f6;
|
|
27
|
+
--accent-hover: #2563eb;
|
|
28
|
+
--success-color: #10b981;
|
|
29
|
+
--error-color: #ef4444;
|
|
30
|
+
--warning-color: #f59e0b;
|
|
31
|
+
--header-bg-start: #f8f9fa;
|
|
32
|
+
--header-bg-end: #e9ecef;
|
|
33
|
+
--sidebar-bg: #fafafa;
|
|
34
|
+
--card-bg: #ffffff;
|
|
35
|
+
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
36
|
+
--shadow-md: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
37
|
+
--shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.1);
|
|
38
|
+
--overlay-bg: rgba(0, 0, 0, 0.05);
|
|
39
|
+
--overlay-border: rgba(0, 0, 0, 0.1);
|
|
40
|
+
--input-bg: #ffffff;
|
|
41
|
+
--input-border: #d1d5db;
|
|
42
|
+
--tab-hover-bg: rgba(0, 0, 0, 0.05);
|
|
43
|
+
--scrollbar-track: #f1f1f1;
|
|
44
|
+
--scrollbar-thumb: #c1c1c1;
|
|
45
|
+
--scrollbar-thumb-hover: #a8a8a8;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
[data-theme="dark"] {
|
|
49
|
+
/* Dark mode */
|
|
50
|
+
--bg-primary: #0f0f0f;
|
|
51
|
+
--bg-secondary: #1a1a1a;
|
|
52
|
+
--bg-tertiary: #2d2d2d;
|
|
53
|
+
--bg-elevated: #1a1a1a;
|
|
54
|
+
--text-primary: #ffffff;
|
|
55
|
+
--text-secondary: #a0a0a0;
|
|
56
|
+
--text-tertiary: #888888;
|
|
57
|
+
--border-color: #333333;
|
|
58
|
+
--border-color-light: #404040;
|
|
59
|
+
--accent-color: #60a5fa;
|
|
60
|
+
--accent-hover: #3b82f6;
|
|
61
|
+
--success-color: #34d399;
|
|
62
|
+
--error-color: #f87171;
|
|
63
|
+
--warning-color: #fbbf24;
|
|
64
|
+
--header-bg-start: #1a1a1a;
|
|
65
|
+
--header-bg-end: #2d2d2d;
|
|
66
|
+
--sidebar-bg: #141414;
|
|
67
|
+
--card-bg: #1a1a1a;
|
|
68
|
+
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
|
|
69
|
+
--shadow-md: 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
70
|
+
--shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.5);
|
|
71
|
+
--overlay-bg: rgba(255, 255, 255, 0.05);
|
|
72
|
+
--overlay-border: rgba(255, 255, 255, 0.1);
|
|
73
|
+
--input-bg: #2d2d2d;
|
|
74
|
+
--input-border: #404040;
|
|
75
|
+
--tab-hover-bg: rgba(255, 255, 255, 0.05);
|
|
76
|
+
--scrollbar-track: #1a1a1a;
|
|
77
|
+
--scrollbar-thumb: #404040;
|
|
78
|
+
--scrollbar-thumb-hover: #505050;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
body {
|
|
82
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
83
|
+
background: var(--bg-primary);
|
|
84
|
+
color: var(--text-primary);
|
|
85
|
+
overflow: hidden;
|
|
86
|
+
transition: background-color 0.3s ease, color 0.3s ease;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Smooth transitions for theme changes */
|
|
90
|
+
* {
|
|
91
|
+
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Custom scrollbar theming */
|
|
95
|
+
::-webkit-scrollbar {
|
|
96
|
+
width: 8px;
|
|
97
|
+
height: 8px;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
::-webkit-scrollbar-track {
|
|
101
|
+
background: var(--scrollbar-track);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
::-webkit-scrollbar-thumb {
|
|
105
|
+
background: var(--scrollbar-thumb);
|
|
106
|
+
border-radius: 4px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
::-webkit-scrollbar-thumb:hover {
|
|
110
|
+
background: var(--scrollbar-thumb-hover);
|
|
111
|
+
}
|
|
112
|
+
</style>
|
|
113
|
+
</head>
|
|
114
|
+
<body>
|
|
115
|
+
<div id="app"></div>
|
|
116
|
+
<script type="module" src="/src/main.js"></script>
|
|
117
|
+
</body>
|
|
118
|
+
</html>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-mpm-d2",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Svelte 5-based dashboard for Claude MPM",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"build": "vite build",
|
|
9
|
+
"preview": "vite preview"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
13
|
+
"svelte": "^5.0.0",
|
|
14
|
+
"vite": "^5.0.0"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"socket.io-client": "^4.7.5"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { onMount, onDestroy } from 'svelte';
|
|
3
|
+
import Header from './components/Header.svelte';
|
|
4
|
+
import Sidebar from './components/Sidebar.svelte';
|
|
5
|
+
import MainContent from './components/MainContent.svelte';
|
|
6
|
+
import { socketStore } from './stores/socket.js';
|
|
7
|
+
import { eventsStore } from './stores/events.js';
|
|
8
|
+
import { themeStore } from './stores/theme.js';
|
|
9
|
+
|
|
10
|
+
// Destructure individual stores from socketStore
|
|
11
|
+
const { statusText, statusColor, port } = socketStore;
|
|
12
|
+
|
|
13
|
+
let activeTab = $state('events');
|
|
14
|
+
|
|
15
|
+
// Socket.IO client instance (set during onMount)
|
|
16
|
+
let client = null;
|
|
17
|
+
|
|
18
|
+
// Event handler functions (defined outside lifecycle for proper cleanup)
|
|
19
|
+
function handleClaudeEvent(data) {
|
|
20
|
+
console.log('Received claude_event:', data);
|
|
21
|
+
eventsStore.addEvent(data);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function handleHeartbeat(data) {
|
|
25
|
+
console.log('Received heartbeat:', data);
|
|
26
|
+
eventsStore.addEvent({
|
|
27
|
+
source: 'system',
|
|
28
|
+
type: 'heartbeat',
|
|
29
|
+
timestamp: data.timestamp,
|
|
30
|
+
data: data
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function handleAnyEvent(eventName, ...args) {
|
|
35
|
+
if (eventName !== 'claude_event' && eventName !== 'heartbeat' && eventName !== 'connection_status') {
|
|
36
|
+
console.log('Received event:', eventName, args);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
onMount(() => {
|
|
41
|
+
// Initialize theme on mount
|
|
42
|
+
themeStore.initialize();
|
|
43
|
+
|
|
44
|
+
// Connect to Socket.IO server
|
|
45
|
+
socketStore.connect();
|
|
46
|
+
|
|
47
|
+
// Get the client and listen for events
|
|
48
|
+
client = socketStore.getClient();
|
|
49
|
+
if (client) {
|
|
50
|
+
// Listen for Claude Code events
|
|
51
|
+
client.on('claude_event', handleClaudeEvent);
|
|
52
|
+
|
|
53
|
+
// Listen for heartbeat events
|
|
54
|
+
client.on('heartbeat', handleHeartbeat);
|
|
55
|
+
|
|
56
|
+
// Listen for any other events (for debugging)
|
|
57
|
+
client.socket.onAny(handleAnyEvent);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
onDestroy(() => {
|
|
62
|
+
// Cleanup event listeners before disconnect
|
|
63
|
+
if (client) {
|
|
64
|
+
client.off('claude_event', handleClaudeEvent);
|
|
65
|
+
client.off('heartbeat', handleHeartbeat);
|
|
66
|
+
if (client.socket) {
|
|
67
|
+
client.socket.offAny(handleAnyEvent);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Disconnect Socket.IO
|
|
72
|
+
socketStore.disconnect();
|
|
73
|
+
});
|
|
74
|
+
</script>
|
|
75
|
+
|
|
76
|
+
<div class="app">
|
|
77
|
+
<Header
|
|
78
|
+
statusText={$statusText}
|
|
79
|
+
statusColor={$statusColor}
|
|
80
|
+
port={$port}
|
|
81
|
+
/>
|
|
82
|
+
|
|
83
|
+
<div class="app-body">
|
|
84
|
+
<Sidebar bind:activeTab={activeTab} />
|
|
85
|
+
<MainContent activeTab={activeTab} />
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<style>
|
|
90
|
+
:global(body) {
|
|
91
|
+
margin: 0;
|
|
92
|
+
padding: 0;
|
|
93
|
+
overflow: hidden;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.app {
|
|
97
|
+
width: 100vw;
|
|
98
|
+
height: 100vh;
|
|
99
|
+
display: flex;
|
|
100
|
+
flex-direction: column;
|
|
101
|
+
background: var(--bg-primary);
|
|
102
|
+
color: var(--text-primary);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.app-body {
|
|
106
|
+
flex: 1;
|
|
107
|
+
display: flex;
|
|
108
|
+
overflow: hidden;
|
|
109
|
+
}
|
|
110
|
+
</style>
|