claude-mpm 4.25.10__py3-none-any.whl → 5.1.8__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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +12 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1055 -2230
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +4 -4
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +576 -66
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/cli/__init__.py +28 -3
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +188 -30
- claude_mpm/cli/commands/agents.py +959 -36
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/auto_configure.py +537 -239
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +924 -45
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +1 -39
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +322 -19
- claude_mpm/cli/executor.py +22 -3
- claude_mpm/cli/interactive/agent_wizard.py +1028 -43
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +256 -4
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
- claude_mpm/cli/parsers/base_parser.py +25 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +7 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +456 -103
- claude_mpm/cli/startup_display.py +4 -4
- claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
- claude_mpm/commands/mpm-agents-detect.md +9 -0
- claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
- claude_mpm/commands/mpm-agents-recommend.md +9 -0
- claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +14 -2
- claude_mpm/commands/mpm-init.md +9 -0
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
- claude_mpm/commands/mpm-status.md +9 -0
- claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +9 -0
- claude_mpm/commands/mpm.md +10 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +5 -34
- claude_mpm/core/config.py +16 -0
- claude_mpm/core/framework/__init__.py +3 -16
- claude_mpm/core/framework/loaders/file_loader.py +54 -101
- claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
- claude_mpm/core/interactive_session.py +83 -7
- claude_mpm/core/oneshot_session.py +71 -8
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/unified_config.py +22 -0
- claude_mpm/experimental/cli_enhancements.py +1 -5
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/failure_learning/__init__.py +2 -8
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
- claude_mpm/hooks/kuzu_response_hook.py +1 -5
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/services/agents/agent_builder.py +45 -9
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
- claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +1 -4
- claude_mpm/services/agents/local_template_manager.py +47 -9
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +7 -2
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +34 -6
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
- claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +3 -13
- claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
- claude_mpm/services/local_ops/health_manager.py +1 -4
- claude_mpm/services/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/monitor/daemon.py +28 -8
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/runner_configuration_service.py +16 -3
- claude_mpm/services/session_management_service.py +16 -4
- claude_mpm/services/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/templates/questions/__init__.py +2 -7
- claude_mpm/templates/questions/pr_strategy.py +1 -4
- claude_mpm/templates/questions/project_init.py +1 -4
- claude_mpm/templates/questions/ticket_mgmt.py +1 -4
- claude_mpm/utils/agent_dependency_loader.py +77 -10
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/gitignore.py +3 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +356 -112
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +188 -439
- claude_mpm/agents/templates/agent-manager.json +0 -273
- claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
- claude_mpm/agents/templates/api_qa.json +0 -183
- claude_mpm/agents/templates/clerk-ops.json +0 -235
- claude_mpm/agents/templates/code_analyzer.json +0 -101
- claude_mpm/agents/templates/content-agent.json +0 -358
- claude_mpm/agents/templates/dart_engineer.json +0 -307
- claude_mpm/agents/templates/data_engineer.json +0 -225
- claude_mpm/agents/templates/documentation.json +0 -238
- claude_mpm/agents/templates/engineer.json +0 -210
- claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
- claude_mpm/agents/templates/golang_engineer.json +0 -270
- claude_mpm/agents/templates/imagemagick.json +0 -264
- claude_mpm/agents/templates/java_engineer.json +0 -346
- claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
- claude_mpm/agents/templates/local_ops_agent.json +0 -1840
- claude_mpm/agents/templates/memory_manager.json +0 -158
- claude_mpm/agents/templates/nextjs_engineer.json +0 -285
- claude_mpm/agents/templates/ops.json +0 -185
- claude_mpm/agents/templates/php-engineer.json +0 -287
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -144
- claude_mpm/agents/templates/prompt-engineer.json +0 -737
- claude_mpm/agents/templates/python_engineer.json +0 -387
- claude_mpm/agents/templates/qa.json +0 -243
- claude_mpm/agents/templates/react_engineer.json +0 -239
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -258
- claude_mpm/agents/templates/ruby-engineer.json +0 -280
- claude_mpm/agents/templates/rust_engineer.json +0 -275
- claude_mpm/agents/templates/security.json +0 -202
- claude_mpm/agents/templates/svelte-engineer.json +0 -225
- claude_mpm/agents/templates/tauri_engineer.json +0 -274
- claude_mpm/agents/templates/ticketing.json +0 -181
- claude_mpm/agents/templates/typescript_engineer.json +0 -285
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
- claude_mpm/agents/templates/version_control.json +0 -159
- claude_mpm/agents/templates/web_qa.json +0 -400
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/cli/README.md +0 -253
- claude_mpm/cli/commands/mcp_install_commands.py.backup +0 -284
- claude_mpm/cli/commands/mpm_init/README.md +0 -365
- claude_mpm/cli_module/refactoring_guide.md +0 -253
- claude_mpm/commands/mpm-tickets.md +0 -151
- claude_mpm/config/agent_capabilities.yaml +0 -658
- claude_mpm/config/async_logging_config.yaml +0 -145
- claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +0 -34
- claude_mpm/d2/.gitignore +0 -22
- claude_mpm/d2/ARCHITECTURE_COMPARISON.md +0 -273
- claude_mpm/d2/FLASK_INTEGRATION.md +0 -156
- claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +0 -452
- claude_mpm/d2/QUICKSTART.md +0 -186
- claude_mpm/d2/README.md +0 -232
- claude_mpm/d2/STORE_FIX_SUMMARY.md +0 -167
- claude_mpm/d2/SVELTE5_STORES_GUIDE.md +0 -180
- claude_mpm/d2/TESTING.md +0 -288
- claude_mpm/d2/index.html +0 -118
- claude_mpm/d2/package.json +0 -19
- claude_mpm/d2/src/App.svelte +0 -110
- claude_mpm/d2/src/components/Header.svelte +0 -153
- claude_mpm/d2/src/components/MainContent.svelte +0 -74
- claude_mpm/d2/src/components/Sidebar.svelte +0 -85
- claude_mpm/d2/src/components/tabs/EventsTab.svelte +0 -326
- claude_mpm/d2/src/lib/socketio.js +0 -144
- claude_mpm/d2/src/main.js +0 -7
- claude_mpm/d2/src/stores/events.js +0 -114
- claude_mpm/d2/src/stores/socket.js +0 -108
- claude_mpm/d2/src/stores/theme.js +0 -65
- claude_mpm/d2/svelte.config.js +0 -12
- claude_mpm/d2/vite.config.js +0 -15
- claude_mpm/dashboard/.claude-mpm/memories/README.md +0 -36
- claude_mpm/dashboard/BUILD_NUMBER +0 -1
- claude_mpm/dashboard/README.md +0 -121
- claude_mpm/dashboard/VERSION +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +0 -273
- claude_mpm/dashboard/react/components/ErrorBoundary.tsx +0 -75
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +0 -141
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +0 -36
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/react/components/shared/FilterBar.tsx +0 -89
- claude_mpm/dashboard/react/contexts/DashboardContext.tsx +0 -215
- claude_mpm/dashboard/react/entries/events.tsx +0 -165
- claude_mpm/dashboard/react/hooks/useEvents.ts +0 -191
- claude_mpm/dashboard/react/hooks/useSocket.ts +0 -225
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +0 -170
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/activity-tree.js.map +0 -1
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-inference.js.map +0 -1
- claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-tree.js.map +0 -1
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-processor.js.map +0 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +0 -1
- claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/file-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
- claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/session-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js.map +0 -1
- claude_mpm/dashboard/static/built/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js.map +0 -1
- claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/built/react/events.js +0 -30
- claude_mpm/dashboard/static/built/react/events.js.map +0 -1
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
- claude_mpm/dashboard/static/built/shared/logger.js +0 -385
- claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/built/socket-client.js.map +0 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +0 -170
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/js/shared/logger.js +0 -385
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
- claude_mpm/dashboard/static/legacy/activity.html +0 -736
- claude_mpm/dashboard/static/legacy/agents.html +0 -786
- claude_mpm/dashboard/static/legacy/files.html +0 -747
- claude_mpm/dashboard/static/legacy/tools.html +0 -831
- claude_mpm/dashboard/static/monitors.html +0 -431
- claude_mpm/dashboard/static/navigation-test-results.md +0 -118
- claude_mpm/dashboard/static/production/events.html +0 -659
- claude_mpm/dashboard/static/production/main.html +0 -698
- claude_mpm/dashboard/static/production/monitors.html +0 -483
- claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
- claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
- claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
- claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +0 -36
- claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +0 -39
- claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +0 -38
- claude_mpm/hooks/README.md +0 -143
- claude_mpm/hooks/templates/README.md +0 -180
- claude_mpm/hooks/templates/settings.json.example +0 -147
- claude_mpm/schemas/agent_schema.json +0 -596
- claude_mpm/schemas/frontmatter_schema.json +0 -165
- claude_mpm/services/event_bus/README.md +0 -244
- claude_mpm/services/events/README.md +0 -303
- claude_mpm/services/framework_claude_md_generator/README.md +0 -119
- claude_mpm/services/mcp_gateway/README.md +0 -185
- claude_mpm/services/socketio/handlers/connection.py.backup +0 -217
- claude_mpm/services/socketio/handlers/hook.py.backup +0 -154
- claude_mpm/services/static/.gitkeep +0 -2
- claude_mpm/services/version_control/VERSION +0 -1
- claude_mpm/skills/bundled/.gitkeep +0 -2
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +0 -317
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +0 -251
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
- claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +0 -63
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +0 -611
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +0 -596
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +0 -260
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +0 -315
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +0 -436
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +0 -433
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +0 -452
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +0 -404
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +0 -420
- claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +0 -54
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +0 -322
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
- claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
- claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +0 -22
- claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +0 -2
- claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
- claude_mpm/skills/bundled/react/flexlayout-react.md +0 -742
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +0 -495
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +0 -599
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +0 -535
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +0 -613
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +0 -648
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +0 -673
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +0 -767
- claude_mpm/skills/bundled/tauri/tauri-performance.md +0 -669
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +0 -573
- claude_mpm/skills/bundled/tauri/tauri-testing.md +0 -384
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +0 -628
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
- claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +0 -158
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +0 -458
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +0 -411
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +0 -317
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +0 -270
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +0 -436
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
- claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
- claude_mpm/templates/questions/EXAMPLES.md +0 -501
- claude_mpm/tools/README_SOCKETIO_DEBUG.md +0 -224
- claude_mpm/tools/code_tree_analyzer/README.md +0 -64
- /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
- /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
- /claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +0 -0
- /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
- /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
# Dashboard JavaScript Refactoring Summary
|
|
2
|
-
|
|
3
|
-
## Date: 2025-09-05
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
Performed Phase 1 safe, incremental refactoring of the dashboard JavaScript code, focusing on the highest-impact, lowest-risk improvements.
|
|
7
|
-
|
|
8
|
-
## Changes Made
|
|
9
|
-
|
|
10
|
-
### 1. Created Shared Services Directory Structure
|
|
11
|
-
Created `/src/claude_mpm/dashboard/static/js/shared/` with reusable services:
|
|
12
|
-
|
|
13
|
-
#### **tooltip-service.js** (293 lines)
|
|
14
|
-
- Unified tooltip implementation for all components
|
|
15
|
-
- Single consistent API for all tooltips
|
|
16
|
-
- Support for different tooltip types (hover, click, persistent)
|
|
17
|
-
- Automatic viewport adjustment
|
|
18
|
-
- Content formatting with HTML escaping
|
|
19
|
-
|
|
20
|
-
#### **dom-helpers.js** (338 lines)
|
|
21
|
-
- Common DOM manipulation utilities
|
|
22
|
-
- createElement helpers with attribute and event handling
|
|
23
|
-
- Class manipulation utilities
|
|
24
|
-
- Safe querySelector wrappers
|
|
25
|
-
- Viewport and scroll utilities
|
|
26
|
-
- Debounce and throttle functions
|
|
27
|
-
|
|
28
|
-
#### **event-bus.js** (277 lines)
|
|
29
|
-
- Central event management with pub/sub pattern
|
|
30
|
-
- Decouples components from direct communication
|
|
31
|
-
- Priority-based event handlers
|
|
32
|
-
- Event history and debugging capabilities
|
|
33
|
-
- Scoped event buses for component isolation
|
|
34
|
-
|
|
35
|
-
#### **logger.js** (354 lines)
|
|
36
|
-
- Centralized logging with levels
|
|
37
|
-
- Component-specific loggers
|
|
38
|
-
- Performance timing helpers
|
|
39
|
-
- Log history and export capabilities
|
|
40
|
-
- Console group and table support
|
|
41
|
-
|
|
42
|
-
### 2. Extracted Code Tree Modules
|
|
43
|
-
Created `/src/claude_mpm/dashboard/static/js/components/code-tree/` with specialized modules:
|
|
44
|
-
|
|
45
|
-
#### **tree-utils.js** (424 lines)
|
|
46
|
-
- File type detection and icons
|
|
47
|
-
- Complexity level calculations
|
|
48
|
-
- File size formatting
|
|
49
|
-
- Node sorting and filtering
|
|
50
|
-
- Tree statistics calculation
|
|
51
|
-
- Path formatting utilities
|
|
52
|
-
|
|
53
|
-
#### **tree-constants.js** (178 lines)
|
|
54
|
-
- Layout dimensions and defaults
|
|
55
|
-
- Animation timings
|
|
56
|
-
- Color schemes for complexity
|
|
57
|
-
- File extension to language mappings
|
|
58
|
-
- API endpoints
|
|
59
|
-
- WebSocket events
|
|
60
|
-
- CSS class names
|
|
61
|
-
- All constants are frozen to prevent modification
|
|
62
|
-
|
|
63
|
-
#### **tree-search.js** (366 lines)
|
|
64
|
-
- Search term management with debouncing
|
|
65
|
-
- Language and type filtering
|
|
66
|
-
- Complexity range filtering
|
|
67
|
-
- Path pattern matching with wildcards
|
|
68
|
-
- Search suggestions
|
|
69
|
-
- Search term highlighting
|
|
70
|
-
- Filter state management
|
|
71
|
-
|
|
72
|
-
#### **tree-breadcrumb.js** (318 lines)
|
|
73
|
-
- Path navigation display
|
|
74
|
-
- Activity status updates
|
|
75
|
-
- Clickable path segments
|
|
76
|
-
- Overflow handling for long paths
|
|
77
|
-
- Loading states
|
|
78
|
-
- Activity history tracking
|
|
79
|
-
|
|
80
|
-
### 3. Updated code-tree.js Integration
|
|
81
|
-
- Added service initialization in constructor
|
|
82
|
-
- Uses extracted modules with fallback to original implementations
|
|
83
|
-
- Maintains backward compatibility
|
|
84
|
-
- Added documentation comments for module dependencies
|
|
85
|
-
|
|
86
|
-
### 4. Updated HTML Loading Sequence
|
|
87
|
-
Modified `/src/claude_mpm/dashboard/templates/index.html`:
|
|
88
|
-
- Loads shared services first (sequentially)
|
|
89
|
-
- Then loads tree modules
|
|
90
|
-
- Finally loads main components in parallel
|
|
91
|
-
- Ensures proper dependency resolution
|
|
92
|
-
|
|
93
|
-
## Results
|
|
94
|
-
|
|
95
|
-
### Code Organization Improvements
|
|
96
|
-
- **Before**: Single 5,845-line file with mixed concerns
|
|
97
|
-
- **After**: Modular architecture with 8 specialized modules totaling ~2,500 lines
|
|
98
|
-
- Clear separation of concerns
|
|
99
|
-
- Reusable services available to all components
|
|
100
|
-
|
|
101
|
-
### Maintainability Benefits
|
|
102
|
-
1. **Single Responsibility**: Each module has a clear, focused purpose
|
|
103
|
-
2. **Reusability**: Services can be used by any dashboard component
|
|
104
|
-
3. **Testability**: Individual modules can be tested in isolation
|
|
105
|
-
4. **Documentation**: All modules have JSDoc comments
|
|
106
|
-
5. **Consistency**: Shared services ensure consistent behavior
|
|
107
|
-
|
|
108
|
-
### Performance Considerations
|
|
109
|
-
- Modules loaded sequentially for dependencies, then parallel for main components
|
|
110
|
-
- Services use singleton pattern to minimize memory usage
|
|
111
|
-
- Lazy initialization where appropriate
|
|
112
|
-
- Debouncing and throttling built into utilities
|
|
113
|
-
|
|
114
|
-
## Backward Compatibility
|
|
115
|
-
- All changes maintain backward compatibility
|
|
116
|
-
- Fallback implementations when services unavailable
|
|
117
|
-
- No breaking changes to external APIs
|
|
118
|
-
- Dashboard remains fully functional
|
|
119
|
-
|
|
120
|
-
## Next Steps for Phase 2 (Future Work)
|
|
121
|
-
|
|
122
|
-
1. **Further code-tree.js decomposition**:
|
|
123
|
-
- Extract D3 visualization logic
|
|
124
|
-
- Separate WebSocket handling
|
|
125
|
-
- Create dedicated file analysis module
|
|
126
|
-
|
|
127
|
-
2. **Apply pattern to other components**:
|
|
128
|
-
- Refactor activity-tree.js to use shared services
|
|
129
|
-
- Update other components to use tooltip service
|
|
130
|
-
- Migrate to event bus for inter-component communication
|
|
131
|
-
|
|
132
|
-
3. **Testing**:
|
|
133
|
-
- Add unit tests for each module
|
|
134
|
-
- Integration tests for service interactions
|
|
135
|
-
- Performance benchmarks
|
|
136
|
-
|
|
137
|
-
4. **Documentation**:
|
|
138
|
-
- API documentation for each service
|
|
139
|
-
- Usage examples
|
|
140
|
-
- Migration guide for other components
|
|
141
|
-
|
|
142
|
-
## Files Created/Modified
|
|
143
|
-
|
|
144
|
-
### Created (New Files)
|
|
145
|
-
- `/static/js/shared/tooltip-service.js`
|
|
146
|
-
- `/static/js/shared/dom-helpers.js`
|
|
147
|
-
- `/static/js/shared/event-bus.js`
|
|
148
|
-
- `/static/js/shared/logger.js`
|
|
149
|
-
- `/static/js/components/code-tree/tree-utils.js`
|
|
150
|
-
- `/static/js/components/code-tree/tree-constants.js`
|
|
151
|
-
- `/static/js/components/code-tree/tree-search.js`
|
|
152
|
-
- `/static/js/components/code-tree/tree-breadcrumb.js`
|
|
153
|
-
|
|
154
|
-
### Modified
|
|
155
|
-
- `/static/js/components/code-tree.js` - Added service initialization and module usage
|
|
156
|
-
- `/templates/index.html` - Updated script loading sequence
|
|
157
|
-
|
|
158
|
-
## Success Criteria Met
|
|
159
|
-
✅ Dashboard remains fully functional
|
|
160
|
-
✅ No console errors or warnings
|
|
161
|
-
✅ Shared services created and available
|
|
162
|
-
✅ All new code has JSDoc documentation
|
|
163
|
-
✅ Backward compatibility maintained
|
|
164
|
-
✅ Clear separation of concerns achieved
|
|
165
|
-
|
|
166
|
-
## Notes
|
|
167
|
-
- The refactoring focused on extraction and organization rather than size reduction
|
|
168
|
-
- The main code-tree.js file grew slightly due to initialization code and fallbacks
|
|
169
|
-
- The real benefit is in the improved architecture and reusability
|
|
170
|
-
- Future phases can now proceed with a solid foundation
|
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DOM Helper Utilities
|
|
3
|
-
*
|
|
4
|
-
* Common DOM manipulation utilities for dashboard components.
|
|
5
|
-
* Provides safe, consistent methods for element creation and manipulation.
|
|
6
|
-
*
|
|
7
|
-
* @module dom-helpers
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const domHelpers = {
|
|
11
|
-
/**
|
|
12
|
-
* Create an element with attributes and content
|
|
13
|
-
* @param {string} tag - Element tag name
|
|
14
|
-
* @param {Object} attrs - Attributes to set
|
|
15
|
-
* @param {string|Element|Array} content - Element content
|
|
16
|
-
* @returns {HTMLElement} Created element
|
|
17
|
-
*/
|
|
18
|
-
createElement(tag, attrs = {}, content = null) {
|
|
19
|
-
const element = document.createElement(tag);
|
|
20
|
-
|
|
21
|
-
// Set attributes
|
|
22
|
-
for (const [key, value] of Object.entries(attrs)) {
|
|
23
|
-
if (key === 'className') {
|
|
24
|
-
element.className = value;
|
|
25
|
-
} else if (key === 'style' && typeof value === 'object') {
|
|
26
|
-
Object.assign(element.style, value);
|
|
27
|
-
} else if (key === 'dataset' && typeof value === 'object') {
|
|
28
|
-
for (const [dataKey, dataValue] of Object.entries(value)) {
|
|
29
|
-
element.dataset[dataKey] = dataValue;
|
|
30
|
-
}
|
|
31
|
-
} else if (key.startsWith('on') && typeof value === 'function') {
|
|
32
|
-
const eventName = key.slice(2).toLowerCase();
|
|
33
|
-
element.addEventListener(eventName, value);
|
|
34
|
-
} else {
|
|
35
|
-
element.setAttribute(key, value);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Add content
|
|
40
|
-
if (content !== null) {
|
|
41
|
-
this.setContent(element, content);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return element;
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Set element content (supports text, HTML, elements, and arrays)
|
|
49
|
-
* @param {HTMLElement} element - Target element
|
|
50
|
-
* @param {string|Element|Array} content - Content to set
|
|
51
|
-
*/
|
|
52
|
-
setContent(element, content) {
|
|
53
|
-
if (typeof content === 'string') {
|
|
54
|
-
element.textContent = content;
|
|
55
|
-
} else if (content instanceof HTMLElement) {
|
|
56
|
-
element.appendChild(content);
|
|
57
|
-
} else if (Array.isArray(content)) {
|
|
58
|
-
content.forEach(item => {
|
|
59
|
-
if (typeof item === 'string') {
|
|
60
|
-
element.appendChild(document.createTextNode(item));
|
|
61
|
-
} else if (item instanceof HTMLElement) {
|
|
62
|
-
element.appendChild(item);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Safely query selector with null check
|
|
70
|
-
* @param {string} selector - CSS selector
|
|
71
|
-
* @param {Element} context - Context element (default: document)
|
|
72
|
-
* @returns {Element|null} Found element or null
|
|
73
|
-
*/
|
|
74
|
-
query(selector, context = document) {
|
|
75
|
-
try {
|
|
76
|
-
return context.querySelector(selector);
|
|
77
|
-
} catch (e) {
|
|
78
|
-
console.error(`Invalid selector: ${selector}`, e);
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Safely query all matching elements
|
|
85
|
-
* @param {string} selector - CSS selector
|
|
86
|
-
* @param {Element} context - Context element (default: document)
|
|
87
|
-
* @returns {Array} Array of elements
|
|
88
|
-
*/
|
|
89
|
-
queryAll(selector, context = document) {
|
|
90
|
-
try {
|
|
91
|
-
return Array.from(context.querySelectorAll(selector));
|
|
92
|
-
} catch (e) {
|
|
93
|
-
console.error(`Invalid selector: ${selector}`, e);
|
|
94
|
-
return [];
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Add classes to element
|
|
100
|
-
* @param {HTMLElement} element - Target element
|
|
101
|
-
* @param {...string} classes - Classes to add
|
|
102
|
-
*/
|
|
103
|
-
addClass(element, ...classes) {
|
|
104
|
-
if (element && element.classList) {
|
|
105
|
-
element.classList.add(...classes.filter(c => c));
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Remove classes from element
|
|
111
|
-
* @param {HTMLElement} element - Target element
|
|
112
|
-
* @param {...string} classes - Classes to remove
|
|
113
|
-
*/
|
|
114
|
-
removeClass(element, ...classes) {
|
|
115
|
-
if (element && element.classList) {
|
|
116
|
-
element.classList.remove(...classes);
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Toggle classes on element
|
|
122
|
-
* @param {HTMLElement} element - Target element
|
|
123
|
-
* @param {string} className - Class to toggle
|
|
124
|
-
* @param {boolean} force - Force add (true) or remove (false)
|
|
125
|
-
* @returns {boolean} Whether class is now present
|
|
126
|
-
*/
|
|
127
|
-
toggleClass(element, className, force) {
|
|
128
|
-
if (element && element.classList) {
|
|
129
|
-
return element.classList.toggle(className, force);
|
|
130
|
-
}
|
|
131
|
-
return false;
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Check if element has class
|
|
136
|
-
* @param {HTMLElement} element - Target element
|
|
137
|
-
* @param {string} className - Class to check
|
|
138
|
-
* @returns {boolean} Whether element has class
|
|
139
|
-
*/
|
|
140
|
-
hasClass(element, className) {
|
|
141
|
-
return element && element.classList && element.classList.contains(className);
|
|
142
|
-
},
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Set multiple styles on element
|
|
146
|
-
* @param {HTMLElement} element - Target element
|
|
147
|
-
* @param {Object} styles - Style properties and values
|
|
148
|
-
*/
|
|
149
|
-
setStyles(element, styles) {
|
|
150
|
-
if (element && element.style && styles) {
|
|
151
|
-
Object.assign(element.style, styles);
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Get computed style value
|
|
157
|
-
* @param {HTMLElement} element - Target element
|
|
158
|
-
* @param {string} property - CSS property name
|
|
159
|
-
* @returns {string} Computed style value
|
|
160
|
-
*/
|
|
161
|
-
getStyle(element, property) {
|
|
162
|
-
if (element) {
|
|
163
|
-
return window.getComputedStyle(element).getPropertyValue(property);
|
|
164
|
-
}
|
|
165
|
-
return '';
|
|
166
|
-
},
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Show element (removes display: none)
|
|
170
|
-
* @param {HTMLElement} element - Element to show
|
|
171
|
-
* @param {string} displayValue - Display value to use (default: '')
|
|
172
|
-
*/
|
|
173
|
-
show(element, displayValue = '') {
|
|
174
|
-
if (element && element.style) {
|
|
175
|
-
element.style.display = displayValue;
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Hide element (sets display: none)
|
|
181
|
-
* @param {HTMLElement} element - Element to hide
|
|
182
|
-
*/
|
|
183
|
-
hide(element) {
|
|
184
|
-
if (element && element.style) {
|
|
185
|
-
element.style.display = 'none';
|
|
186
|
-
}
|
|
187
|
-
},
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Toggle element visibility
|
|
191
|
-
* @param {HTMLElement} element - Element to toggle
|
|
192
|
-
* @param {boolean} show - Force show (true) or hide (false)
|
|
193
|
-
*/
|
|
194
|
-
toggle(element, show) {
|
|
195
|
-
if (element) {
|
|
196
|
-
if (show === undefined) {
|
|
197
|
-
show = element.style.display === 'none';
|
|
198
|
-
}
|
|
199
|
-
if (show) {
|
|
200
|
-
this.show(element);
|
|
201
|
-
} else {
|
|
202
|
-
this.hide(element);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
},
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Remove element from DOM
|
|
209
|
-
* @param {HTMLElement} element - Element to remove
|
|
210
|
-
*/
|
|
211
|
-
remove(element) {
|
|
212
|
-
if (element && element.parentNode) {
|
|
213
|
-
element.parentNode.removeChild(element);
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Empty element content
|
|
219
|
-
* @param {HTMLElement} element - Element to empty
|
|
220
|
-
*/
|
|
221
|
-
empty(element) {
|
|
222
|
-
if (element) {
|
|
223
|
-
while (element.firstChild) {
|
|
224
|
-
element.removeChild(element.firstChild);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Insert element after reference element
|
|
231
|
-
* @param {HTMLElement} newElement - Element to insert
|
|
232
|
-
* @param {HTMLElement} referenceElement - Reference element
|
|
233
|
-
*/
|
|
234
|
-
insertAfter(newElement, referenceElement) {
|
|
235
|
-
if (referenceElement && referenceElement.parentNode) {
|
|
236
|
-
referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);
|
|
237
|
-
}
|
|
238
|
-
},
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Wrap element with wrapper element
|
|
242
|
-
* @param {HTMLElement} element - Element to wrap
|
|
243
|
-
* @param {HTMLElement} wrapper - Wrapper element
|
|
244
|
-
*/
|
|
245
|
-
wrap(element, wrapper) {
|
|
246
|
-
if (element && element.parentNode) {
|
|
247
|
-
element.parentNode.insertBefore(wrapper, element);
|
|
248
|
-
wrapper.appendChild(element);
|
|
249
|
-
}
|
|
250
|
-
},
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* Get element dimensions
|
|
254
|
-
* @param {HTMLElement} element - Target element
|
|
255
|
-
* @returns {Object} Width and height
|
|
256
|
-
*/
|
|
257
|
-
getDimensions(element) {
|
|
258
|
-
if (element) {
|
|
259
|
-
return {
|
|
260
|
-
width: element.offsetWidth,
|
|
261
|
-
height: element.offsetHeight,
|
|
262
|
-
innerWidth: element.clientWidth,
|
|
263
|
-
innerHeight: element.clientHeight
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
return { width: 0, height: 0, innerWidth: 0, innerHeight: 0 };
|
|
267
|
-
},
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Get element position relative to viewport
|
|
271
|
-
* @param {HTMLElement} element - Target element
|
|
272
|
-
* @returns {Object} Position coordinates
|
|
273
|
-
*/
|
|
274
|
-
getPosition(element) {
|
|
275
|
-
if (element) {
|
|
276
|
-
const rect = element.getBoundingClientRect();
|
|
277
|
-
return {
|
|
278
|
-
top: rect.top,
|
|
279
|
-
right: rect.right,
|
|
280
|
-
bottom: rect.bottom,
|
|
281
|
-
left: rect.left,
|
|
282
|
-
x: rect.x,
|
|
283
|
-
y: rect.y,
|
|
284
|
-
width: rect.width,
|
|
285
|
-
height: rect.height
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
return { top: 0, right: 0, bottom: 0, left: 0, x: 0, y: 0, width: 0, height: 0 };
|
|
289
|
-
},
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Check if element is visible in viewport
|
|
293
|
-
* @param {HTMLElement} element - Element to check
|
|
294
|
-
* @param {boolean} partial - Allow partial visibility
|
|
295
|
-
* @returns {boolean} Whether element is visible
|
|
296
|
-
*/
|
|
297
|
-
isInViewport(element, partial = false) {
|
|
298
|
-
if (!element) return false;
|
|
299
|
-
|
|
300
|
-
const rect = element.getBoundingClientRect();
|
|
301
|
-
const windowHeight = window.innerHeight || document.documentElement.clientHeight;
|
|
302
|
-
const windowWidth = window.innerWidth || document.documentElement.clientWidth;
|
|
303
|
-
|
|
304
|
-
const vertInView = partial
|
|
305
|
-
? rect.top < windowHeight && rect.bottom > 0
|
|
306
|
-
: rect.top >= 0 && rect.bottom <= windowHeight;
|
|
307
|
-
|
|
308
|
-
const horInView = partial
|
|
309
|
-
? rect.left < windowWidth && rect.right > 0
|
|
310
|
-
: rect.left >= 0 && rect.right <= windowWidth;
|
|
311
|
-
|
|
312
|
-
return vertInView && horInView;
|
|
313
|
-
},
|
|
314
|
-
|
|
315
|
-
/**
|
|
316
|
-
* Smoothly scroll element into view
|
|
317
|
-
* @param {HTMLElement} element - Element to scroll to
|
|
318
|
-
* @param {Object} options - Scroll options
|
|
319
|
-
*/
|
|
320
|
-
scrollIntoView(element, options = {}) {
|
|
321
|
-
if (element && element.scrollIntoView) {
|
|
322
|
-
const defaultOptions = {
|
|
323
|
-
behavior: 'smooth',
|
|
324
|
-
block: 'nearest',
|
|
325
|
-
inline: 'nearest'
|
|
326
|
-
};
|
|
327
|
-
element.scrollIntoView({ ...defaultOptions, ...options });
|
|
328
|
-
}
|
|
329
|
-
},
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
* Create DocumentFragment from HTML string
|
|
333
|
-
* @param {string} html - HTML string
|
|
334
|
-
* @returns {DocumentFragment} Document fragment
|
|
335
|
-
*/
|
|
336
|
-
createFragment(html) {
|
|
337
|
-
const template = document.createElement('template');
|
|
338
|
-
template.innerHTML = html.trim();
|
|
339
|
-
return template.content;
|
|
340
|
-
},
|
|
341
|
-
|
|
342
|
-
/**
|
|
343
|
-
* Escape HTML special characters
|
|
344
|
-
* @param {string} text - Text to escape
|
|
345
|
-
* @returns {string} Escaped text
|
|
346
|
-
*/
|
|
347
|
-
escapeHtml(text) {
|
|
348
|
-
const div = document.createElement('div');
|
|
349
|
-
div.textContent = text;
|
|
350
|
-
return div.innerHTML;
|
|
351
|
-
},
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Debounce function calls
|
|
355
|
-
* @param {Function} func - Function to debounce
|
|
356
|
-
* @param {number} wait - Wait time in ms
|
|
357
|
-
* @returns {Function} Debounced function
|
|
358
|
-
*/
|
|
359
|
-
debounce(func, wait) {
|
|
360
|
-
let timeout;
|
|
361
|
-
return function executedFunction(...args) {
|
|
362
|
-
const later = () => {
|
|
363
|
-
clearTimeout(timeout);
|
|
364
|
-
func(...args);
|
|
365
|
-
};
|
|
366
|
-
clearTimeout(timeout);
|
|
367
|
-
timeout = setTimeout(later, wait);
|
|
368
|
-
};
|
|
369
|
-
},
|
|
370
|
-
|
|
371
|
-
/**
|
|
372
|
-
* Throttle function calls
|
|
373
|
-
* @param {Function} func - Function to throttle
|
|
374
|
-
* @param {number} limit - Time limit in ms
|
|
375
|
-
* @returns {Function} Throttled function
|
|
376
|
-
*/
|
|
377
|
-
throttle(func, limit) {
|
|
378
|
-
let inThrottle;
|
|
379
|
-
return function(...args) {
|
|
380
|
-
if (!inThrottle) {
|
|
381
|
-
func.apply(this, args);
|
|
382
|
-
inThrottle = true;
|
|
383
|
-
setTimeout(() => inThrottle = false, limit);
|
|
384
|
-
}
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
// Support both module and global usage
|
|
390
|
-
if (typeof module !== 'undefined' && module.exports) {
|
|
391
|
-
module.exports = domHelpers;
|
|
392
|
-
} else if (typeof define === 'function' && define.amd) {
|
|
393
|
-
define([], () => domHelpers);
|
|
394
|
-
} else {
|
|
395
|
-
window.domHelpers = domHelpers;
|
|
396
|
-
}
|