claude-mpm 4.20.3__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.
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 +35 -6
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +1241 -667
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +75 -2
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/frontmatter_validator.py +1 -1
- claude_mpm/agents/templates/circuit-breakers.md +1254 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
- 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 +37 -2
- 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/aggregate.py +1 -1
- claude_mpm/cli/commands/analyze.py +3 -3
- claude_mpm/cli/commands/auto_configure.py +537 -239
- claude_mpm/cli/commands/cleanup.py +1 -1
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +924 -45
- claude_mpm/cli/commands/configure_agent_display.py +4 -4
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/debug.py +12 -12
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/mcp_install_commands.py +1 -1
- 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/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +125 -167
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +835 -44
- claude_mpm/cli/executor.py +78 -3
- claude_mpm/cli/interactive/agent_wizard.py +1032 -47
- 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 +53 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +145 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +564 -108
- 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/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 +17 -2
- claude_mpm/commands/mpm-init.md +28 -3
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -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 +11 -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 +13 -0
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +19 -35
- claude_mpm/core/config.py +24 -0
- claude_mpm/core/constants.py +1 -1
- 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/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 +131 -10
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +110 -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/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/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/socket-client.js +138 -121
- claude_mpm/dashboard/templates/code_simple.html +23 -23
- claude_mpm/dashboard/templates/index.html +18 -18
- 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/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/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/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/scripts/claude-hook-handler.sh +3 -3
- claude_mpm/scripts/start_activity_logging.py +3 -1
- 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_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- 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/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- 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 +9 -12
- claude_mpm/services/agents/local_template_manager.py +50 -10
- 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/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/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/core/models/agent_config.py +3 -0
- claude_mpm/services/core/models/process.py +4 -0
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- 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/mcp_services_check.py +7 -15
- claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
- 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 +40 -10
- claude_mpm/services/diagnostics/models.py +21 -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/consumers/logging.py +1 -2
- 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/infrastructure/monitoring/resources.py +1 -1
- 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 +5 -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/local_ops/process_manager.py +1 -1
- claude_mpm/services/local_ops/resource_monitor.py +2 -2
- claude_mpm/services/mcp_config_manager.py +75 -145
- 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 +41 -26
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- 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/mcp_service_verifier.py +6 -3
- 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 +29 -9
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- 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/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/documentation_manager.py +2 -1
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +17 -3
- claude_mpm/services/self_upgrade_service.py +165 -7
- 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/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/git.py +2 -2
- claude_mpm/services/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- 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/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- claude_mpm/services/visualization/__init__.py +1 -5
- 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/infrastructure/env-manager/scripts/validate_env.py +576 -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/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/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/scripts/with_server.py +37 -15
- claude_mpm/skills/skills_registry.py +44 -48
- claude_mpm/skills/skills_service.py +117 -108
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/tools/__main__.py +8 -8
- 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 +80 -13
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +244 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- 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-5.1.8.dist-info}/METADATA +496 -65
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +328 -416
- 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/agent-manager.json +0 -273
- claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
- claude_mpm/agents/templates/api_qa.json +0 -180
- claude_mpm/agents/templates/circuit_breakers.md +0 -638
- 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 -211
- 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/local_ops_agent.json +0 -1840
- 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/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 -281
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -140
- 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 -242
- claude_mpm/agents/templates/react_engineer.json +0 -238
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -188
- 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/ticketing.json +0 -177
- 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 -157
- claude_mpm/agents/templates/web_qa.json +0 -399
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/cli/commands/mpm_init.py +0 -2093
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- 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/built/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- 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/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-viewer.js +0 -2
- 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-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- 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-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- 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/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- 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/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/tab-isolation-fix.js +0 -185
- 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/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- 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/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/static/test-archive/test_debug.html +0 -25
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -75
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -184
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -107
- claude_mpm/skills/bundled/collaboration/requesting-code-review/code-reviewer.md +0 -146
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -118
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -177
- 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 -175
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -314
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -227
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -74
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -32
- 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/SKILL.md +0 -328
- 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/skill-creator/SKILL.md +0 -209
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -123
- 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/testing-anti-patterns/SKILL.md +0 -304
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -96
- claude_mpm/tools/code_tree_analyzer.py +0 -1825
- /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/{response_format.md → response-format.md} +0 -0
- /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Unified Data Viewer Component
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Consolidates all data formatting and display logic from event-driven tabs
|
|
5
5
|
* (Activity, Events, Agents) into a single, reusable component.
|
|
6
|
-
*
|
|
6
|
+
*
|
|
7
7
|
* WHY: Eliminates code duplication across multiple components and provides
|
|
8
8
|
* consistent data display formatting throughout the dashboard.
|
|
9
|
-
*
|
|
9
|
+
*
|
|
10
10
|
* DESIGN DECISION: Auto-detects data type and applies appropriate formatting,
|
|
11
11
|
* while allowing manual type specification for edge cases.
|
|
12
12
|
*/
|
|
@@ -16,21 +16,21 @@ class UnifiedDataViewer {
|
|
|
16
16
|
this.container = document.getElementById(containerId);
|
|
17
17
|
this.currentData = null;
|
|
18
18
|
this.currentType = null;
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
// Global JSON visibility state - synchronized with localStorage
|
|
21
21
|
// This ensures all JSON sections maintain consistent state
|
|
22
22
|
this.globalJsonExpanded = localStorage.getItem('dashboard-json-expanded') === 'true';
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
// Separate state for "Full Event Data" sections - uses its own localStorage key
|
|
25
25
|
// This allows independent control of Full Event Data visibility
|
|
26
26
|
this.fullEventDataExpanded = localStorage.getItem('dashboard-full-event-expanded') === 'true';
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
// Listen for global JSON toggle changes from other components
|
|
29
29
|
document.addEventListener('jsonToggleChanged', (e) => {
|
|
30
30
|
this.globalJsonExpanded = e.detail.expanded;
|
|
31
31
|
this.updateAllJsonSections();
|
|
32
32
|
});
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
// Listen for full event data toggle changes
|
|
35
35
|
document.addEventListener('fullEventToggleChanged', (e) => {
|
|
36
36
|
this.fullEventDataExpanded = e.detail.expanded;
|
|
@@ -111,16 +111,16 @@ class UnifiedDataViewer {
|
|
|
111
111
|
return 'event';
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
// Agent detection
|
|
115
|
-
if (data.agent_name || data.agentName ||
|
|
114
|
+
// Agent detection
|
|
115
|
+
if (data.agent_name || data.agentName ||
|
|
116
116
|
(data.name && (data.status === 'active' || data.status === 'completed'))) {
|
|
117
117
|
return 'agent';
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
// Tool detection - PRIORITY: Check if it's a tool first
|
|
121
121
|
// This includes TodoWrite tools which should always be displayed as tools, not todos
|
|
122
|
-
if (data.tool_name || data.name === 'TodoWrite' || data.name === 'Read' ||
|
|
123
|
-
data.tool_parameters || (data.params && data.icon) ||
|
|
122
|
+
if (data.tool_name || data.name === 'TodoWrite' || data.name === 'Read' ||
|
|
123
|
+
data.tool_parameters || (data.params && data.icon) ||
|
|
124
124
|
(data.name && data.type === 'tool')) {
|
|
125
125
|
return 'tool';
|
|
126
126
|
}
|
|
@@ -151,7 +151,7 @@ class UnifiedDataViewer {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
// File tool detection - handle file tools as file operations when they have file_path
|
|
154
|
-
if ((data.name === 'Read' || data.name === 'Write' || data.name === 'Edit' ||
|
|
154
|
+
if ((data.name === 'Read' || data.name === 'Write' || data.name === 'Edit' ||
|
|
155
155
|
data.name === 'MultiEdit' || data.name === 'Grep' || data.name === 'Glob') &&
|
|
156
156
|
(data.params?.file_path || data.tool_parameters?.file_path)) {
|
|
157
157
|
// Convert file tool to file operation format for better display
|
|
@@ -174,7 +174,7 @@ class UnifiedDataViewer {
|
|
|
174
174
|
displayEvent(data) {
|
|
175
175
|
const eventType = this.formatEventType(data);
|
|
176
176
|
const timestamp = this.formatTimestamp(data.timestamp);
|
|
177
|
-
|
|
177
|
+
|
|
178
178
|
let html = `
|
|
179
179
|
<div class="unified-viewer-header">
|
|
180
180
|
<h6>${eventType}</h6>
|
|
@@ -186,7 +186,7 @@ class UnifiedDataViewer {
|
|
|
186
186
|
// PRIMARY DATA: Event-specific key details
|
|
187
187
|
html += `<div class="primary-data">`;
|
|
188
188
|
html += this.formatEventDetails(data);
|
|
189
|
-
|
|
189
|
+
|
|
190
190
|
// Show important tool parameters inline if present
|
|
191
191
|
if (data.tool_name || data.data?.tool_name) {
|
|
192
192
|
const toolName = data.tool_name || data.data.tool_name;
|
|
@@ -196,7 +196,7 @@ class UnifiedDataViewer {
|
|
|
196
196
|
<span class="detail-value">${this.getToolIcon(toolName)} ${toolName}</span>
|
|
197
197
|
</div>
|
|
198
198
|
`;
|
|
199
|
-
|
|
199
|
+
|
|
200
200
|
// Show key parameters for specific tools
|
|
201
201
|
const params = data.tool_parameters || data.data?.tool_parameters;
|
|
202
202
|
if (params) {
|
|
@@ -236,7 +236,7 @@ class UnifiedDataViewer {
|
|
|
236
236
|
const agentIcon = this.getAgentIcon(data.name || data.agentName);
|
|
237
237
|
const agentName = data.name || data.agentName || 'Unknown Agent';
|
|
238
238
|
const status = this.formatStatus(data.status);
|
|
239
|
-
|
|
239
|
+
|
|
240
240
|
let html = `
|
|
241
241
|
<div class="unified-viewer-header">
|
|
242
242
|
<h6>${agentIcon} ${agentName}</h6>
|
|
@@ -247,7 +247,7 @@ class UnifiedDataViewer {
|
|
|
247
247
|
|
|
248
248
|
// PRIMARY DATA: Key agent information
|
|
249
249
|
html += `<div class="primary-data">`;
|
|
250
|
-
|
|
250
|
+
|
|
251
251
|
// Status with visual indicator
|
|
252
252
|
html += `
|
|
253
253
|
<div class="detail-row highlight">
|
|
@@ -261,7 +261,7 @@ class UnifiedDataViewer {
|
|
|
261
261
|
// Show active tools prominently
|
|
262
262
|
const activeTools = data.tools.filter(t => t.status === 'in_progress');
|
|
263
263
|
const completedTools = data.tools.filter(t => t.status === 'completed');
|
|
264
|
-
|
|
264
|
+
|
|
265
265
|
if (activeTools.length > 0) {
|
|
266
266
|
html += `
|
|
267
267
|
<div class="active-tools-section">
|
|
@@ -277,7 +277,7 @@ class UnifiedDataViewer {
|
|
|
277
277
|
});
|
|
278
278
|
html += `</div></div>`;
|
|
279
279
|
}
|
|
280
|
-
|
|
280
|
+
|
|
281
281
|
html += `
|
|
282
282
|
<div class="detail-row">
|
|
283
283
|
<span class="detail-label">Tools Summary:</span>
|
|
@@ -297,7 +297,7 @@ class UnifiedDataViewer {
|
|
|
297
297
|
</div>
|
|
298
298
|
`;
|
|
299
299
|
}
|
|
300
|
-
|
|
300
|
+
|
|
301
301
|
html += `</div>`;
|
|
302
302
|
|
|
303
303
|
// SECONDARY DATA: Collapsible JSON viewer
|
|
@@ -315,13 +315,13 @@ class UnifiedDataViewer {
|
|
|
315
315
|
const toolName = data.name || data.tool_name || 'Unknown Tool';
|
|
316
316
|
const toolIcon = this.getToolIcon(toolName);
|
|
317
317
|
const status = this.formatStatus(data.status);
|
|
318
|
-
|
|
318
|
+
|
|
319
319
|
// Special handling for TodoWrite tool
|
|
320
320
|
if (toolName === 'TodoWrite') {
|
|
321
321
|
this.displayTodoWriteTool(data);
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
|
-
|
|
324
|
+
|
|
325
325
|
let html = `
|
|
326
326
|
<div class="unified-viewer-header">
|
|
327
327
|
<h6>${toolIcon} ${toolName}</h6>
|
|
@@ -332,7 +332,7 @@ class UnifiedDataViewer {
|
|
|
332
332
|
|
|
333
333
|
// PRIMARY DATA: Show important tool-specific information first
|
|
334
334
|
const params = data.params || data.tool_parameters || {};
|
|
335
|
-
|
|
335
|
+
|
|
336
336
|
// Tool-specific primary data display
|
|
337
337
|
if (toolName === 'Read' || toolName === 'Edit' || toolName === 'Write') {
|
|
338
338
|
// File tools - show file path prominently
|
|
@@ -435,7 +435,7 @@ class UnifiedDataViewer {
|
|
|
435
435
|
|
|
436
436
|
// Collapsible JSON viewer for full details
|
|
437
437
|
html += this.createCollapsibleJSON(data, 'Full Tool Details');
|
|
438
|
-
|
|
438
|
+
|
|
439
439
|
html += '</div>';
|
|
440
440
|
this.container.innerHTML = html;
|
|
441
441
|
}
|
|
@@ -447,7 +447,7 @@ class UnifiedDataViewer {
|
|
|
447
447
|
const status = this.formatStatus(data.status);
|
|
448
448
|
const params = data.params || data.tool_parameters || {};
|
|
449
449
|
const todos = params.todos || [];
|
|
450
|
-
|
|
450
|
+
|
|
451
451
|
let html = `
|
|
452
452
|
<div class="unified-viewer-header">
|
|
453
453
|
<h6>📝 TodoWrite</h6>
|
|
@@ -459,7 +459,7 @@ class UnifiedDataViewer {
|
|
|
459
459
|
// PRIMARY DATA: Todo list and status summary immediately after title
|
|
460
460
|
if (todos.length > 0) {
|
|
461
461
|
const statusCounts = this.getTodoStatusCounts(todos);
|
|
462
|
-
|
|
462
|
+
|
|
463
463
|
// Status summary - horizontal single line format
|
|
464
464
|
html += `
|
|
465
465
|
<div class="todo-status-line">
|
|
@@ -473,13 +473,13 @@ class UnifiedDataViewer {
|
|
|
473
473
|
html += `
|
|
474
474
|
<div class="todo-list-primary">
|
|
475
475
|
`;
|
|
476
|
-
|
|
476
|
+
|
|
477
477
|
todos.forEach((todo, index) => {
|
|
478
478
|
const statusIcon = this.getCheckboxIcon(todo.status);
|
|
479
|
-
const displayText = todo.status === 'in_progress' ?
|
|
479
|
+
const displayText = todo.status === 'in_progress' ?
|
|
480
480
|
(todo.activeForm || todo.content) : todo.content;
|
|
481
481
|
const statusClass = this.formatStatusClass(todo.status);
|
|
482
|
-
|
|
482
|
+
|
|
483
483
|
html += `
|
|
484
484
|
<div class="todo-item ${todo.status}">
|
|
485
485
|
<span class="todo-icon ${statusClass}">${statusIcon}</span>
|
|
@@ -488,7 +488,7 @@ class UnifiedDataViewer {
|
|
|
488
488
|
</div>
|
|
489
489
|
`;
|
|
490
490
|
});
|
|
491
|
-
|
|
491
|
+
|
|
492
492
|
html += `
|
|
493
493
|
</div>
|
|
494
494
|
`;
|
|
@@ -512,7 +512,7 @@ class UnifiedDataViewer {
|
|
|
512
512
|
|
|
513
513
|
// Collapsible JSON viewer for full details
|
|
514
514
|
html += this.createCollapsibleJSON(data, 'Full Details');
|
|
515
|
-
|
|
515
|
+
|
|
516
516
|
html += '</div>';
|
|
517
517
|
this.container.innerHTML = html;
|
|
518
518
|
}
|
|
@@ -524,7 +524,7 @@ class UnifiedDataViewer {
|
|
|
524
524
|
// Handle different data structures for standalone todos
|
|
525
525
|
let todos;
|
|
526
526
|
let toolName = 'Todo List';
|
|
527
|
-
|
|
527
|
+
|
|
528
528
|
if (data.todos && Array.isArray(data.todos)) {
|
|
529
529
|
todos = data.todos;
|
|
530
530
|
} else if (Array.isArray(data)) {
|
|
@@ -534,7 +534,7 @@ class UnifiedDataViewer {
|
|
|
534
534
|
} else {
|
|
535
535
|
todos = [];
|
|
536
536
|
}
|
|
537
|
-
|
|
537
|
+
|
|
538
538
|
let html = `
|
|
539
539
|
<div class="unified-viewer-header">
|
|
540
540
|
<h6>📋 ${toolName}</h6>
|
|
@@ -547,13 +547,13 @@ class UnifiedDataViewer {
|
|
|
547
547
|
html += `
|
|
548
548
|
<div class="todo-list-primary">
|
|
549
549
|
`;
|
|
550
|
-
|
|
550
|
+
|
|
551
551
|
todos.forEach((todo) => {
|
|
552
552
|
const statusIcon = this.getCheckboxIcon(todo.status);
|
|
553
|
-
const displayText = todo.status === 'in_progress' ?
|
|
553
|
+
const displayText = todo.status === 'in_progress' ?
|
|
554
554
|
(todo.activeForm || todo.content) : todo.content;
|
|
555
555
|
const statusClass = this.formatStatusClass(todo.status);
|
|
556
|
-
|
|
556
|
+
|
|
557
557
|
html += `
|
|
558
558
|
<div class="todo-item ${todo.status}">
|
|
559
559
|
<span class="todo-icon ${statusClass}">${statusIcon}</span>
|
|
@@ -562,7 +562,7 @@ class UnifiedDataViewer {
|
|
|
562
562
|
</div>
|
|
563
563
|
`;
|
|
564
564
|
});
|
|
565
|
-
|
|
565
|
+
|
|
566
566
|
html += `
|
|
567
567
|
</div>
|
|
568
568
|
`;
|
|
@@ -591,7 +591,7 @@ class UnifiedDataViewer {
|
|
|
591
591
|
</div>
|
|
592
592
|
<div class="unified-viewer-content">
|
|
593
593
|
`;
|
|
594
|
-
|
|
594
|
+
|
|
595
595
|
// PRIMARY DATA: The instruction text itself
|
|
596
596
|
html += `
|
|
597
597
|
<div class="primary-data">
|
|
@@ -609,7 +609,7 @@ class UnifiedDataViewer {
|
|
|
609
609
|
if (Object.keys(data).length > 3) {
|
|
610
610
|
html += this.createCollapsibleJSON(data, 'Full Instruction Data');
|
|
611
611
|
}
|
|
612
|
-
|
|
612
|
+
|
|
613
613
|
html += '</div>';
|
|
614
614
|
this.container.innerHTML = html;
|
|
615
615
|
}
|
|
@@ -673,7 +673,7 @@ class UnifiedDataViewer {
|
|
|
673
673
|
const isSingleFile = this.isSingleFileOperation(data);
|
|
674
674
|
const fileIcon = this.getFileIcon(data.file_path);
|
|
675
675
|
const fileType = this.getFileType(data.file_path);
|
|
676
|
-
|
|
676
|
+
|
|
677
677
|
let html = `
|
|
678
678
|
<div class="unified-viewer-header ${isSingleFile ? 'single-file-header' : ''}">
|
|
679
679
|
<h6>${fileIcon} File: ${fileName}</h6>
|
|
@@ -684,7 +684,7 @@ class UnifiedDataViewer {
|
|
|
684
684
|
<div class="primary-data">
|
|
685
685
|
<div class="detail-row highlight">
|
|
686
686
|
<span class="detail-label">📁 File Path:</span>
|
|
687
|
-
<span class="detail-value code clickable-file-path"
|
|
687
|
+
<span class="detail-value code clickable-file-path"
|
|
688
688
|
onclick="window.showFileViewerModal && window.showFileViewerModal('${data.file_path}')"
|
|
689
689
|
title="Click to view file contents\\nKeyboard: Hover + V key or Ctrl/Cmd + Click\\nFile: ${data.file_path}"
|
|
690
690
|
tabindex="0"
|
|
@@ -697,16 +697,16 @@ class UnifiedDataViewer {
|
|
|
697
697
|
// Enhanced file viewing for single file operations
|
|
698
698
|
if (data.file_path) {
|
|
699
699
|
const shouldShowPreview = this.shouldShowInlinePreview(data);
|
|
700
|
-
|
|
700
|
+
|
|
701
701
|
html += `
|
|
702
702
|
<div class="file-actions ${isSingleFile ? 'single-file-actions' : ''}">
|
|
703
|
-
<button class="file-action-btn view-file-btn ${isSingleFile ? 'primary-action' : ''}"
|
|
703
|
+
<button class="file-action-btn view-file-btn ${isSingleFile ? 'primary-action' : ''}"
|
|
704
704
|
onclick="window.showFileViewerModal && window.showFileViewerModal('${data.file_path}')"
|
|
705
705
|
title="View file contents with syntax highlighting">
|
|
706
706
|
${fileIcon} View File Contents
|
|
707
707
|
</button>
|
|
708
708
|
${isSingleFile && this.isTextFile(data.file_path) ? `
|
|
709
|
-
<button class="file-action-btn inline-preview-btn"
|
|
709
|
+
<button class="file-action-btn inline-preview-btn"
|
|
710
710
|
onclick="window.unifiedDataViewer && window.unifiedDataViewer.toggleInlinePreview('${data.file_path}', this)"
|
|
711
711
|
title="Toggle inline preview">
|
|
712
712
|
📖 Quick Preview
|
|
@@ -714,7 +714,7 @@ class UnifiedDataViewer {
|
|
|
714
714
|
` : ''}
|
|
715
715
|
</div>
|
|
716
716
|
`;
|
|
717
|
-
|
|
717
|
+
|
|
718
718
|
// Add inline preview container for single file operations
|
|
719
719
|
if (isSingleFile && shouldShowPreview) {
|
|
720
720
|
const previewId = this.generatePreviewId(data.file_path);
|
|
@@ -762,7 +762,7 @@ class UnifiedDataViewer {
|
|
|
762
762
|
*/
|
|
763
763
|
displayHook(data) {
|
|
764
764
|
const hookType = data.event_type || data.subtype || 'unknown';
|
|
765
|
-
|
|
765
|
+
|
|
766
766
|
let html = `
|
|
767
767
|
<div class="unified-viewer-header">
|
|
768
768
|
<h6>🔗 Hook: ${hookType}</h6>
|
|
@@ -791,14 +791,14 @@ class UnifiedDataViewer {
|
|
|
791
791
|
if (typeof data === 'object' && data !== null) {
|
|
792
792
|
// Display meaningful properties
|
|
793
793
|
const meaningfulProps = ['id', 'name', 'type', 'status', 'timestamp', 'text', 'content', 'message'];
|
|
794
|
-
|
|
794
|
+
|
|
795
795
|
for (let prop of meaningfulProps) {
|
|
796
796
|
if (data[prop] !== undefined) {
|
|
797
797
|
let value = data[prop];
|
|
798
798
|
if (typeof value === 'string' && value.length > 200) {
|
|
799
799
|
value = value.substring(0, 200) + '...';
|
|
800
800
|
}
|
|
801
|
-
|
|
801
|
+
|
|
802
802
|
html += `
|
|
803
803
|
<div class="detail-row">
|
|
804
804
|
<span class="detail-label">${prop}:</span>
|
|
@@ -837,7 +837,7 @@ class UnifiedDataViewer {
|
|
|
837
837
|
*/
|
|
838
838
|
formatEventDetails(event) {
|
|
839
839
|
const data = event.data || {};
|
|
840
|
-
|
|
840
|
+
|
|
841
841
|
switch (event.type) {
|
|
842
842
|
case 'hook':
|
|
843
843
|
return this.formatHookDetails(event);
|
|
@@ -858,7 +858,7 @@ class UnifiedDataViewer {
|
|
|
858
858
|
formatHookDetails(event) {
|
|
859
859
|
const data = event.data || {};
|
|
860
860
|
const hookType = event.subtype || event.event_type || 'unknown';
|
|
861
|
-
|
|
861
|
+
|
|
862
862
|
let html = `
|
|
863
863
|
<div class="detail-row">
|
|
864
864
|
<span class="detail-label">Hook Type:</span>
|
|
@@ -1048,7 +1048,7 @@ class UnifiedDataViewer {
|
|
|
1048
1048
|
formatEventData(event) {
|
|
1049
1049
|
const data = event.data;
|
|
1050
1050
|
if (!data || Object.keys(data).length === 0) return '';
|
|
1051
|
-
|
|
1051
|
+
|
|
1052
1052
|
return `
|
|
1053
1053
|
<div class="detail-section">
|
|
1054
1054
|
<span class="detail-section-title">Event Data:</span>
|
|
@@ -1104,11 +1104,11 @@ class UnifiedDataViewer {
|
|
|
1104
1104
|
}
|
|
1105
1105
|
} else if (typeof value === 'object' && value !== null) {
|
|
1106
1106
|
// Special handling for todos array - display as formatted list instead of raw JSON
|
|
1107
|
-
if (Array.isArray(value) && value.length > 0 &&
|
|
1107
|
+
if (Array.isArray(value) && value.length > 0 &&
|
|
1108
1108
|
value[0].hasOwnProperty('content') && value[0].hasOwnProperty('status')) {
|
|
1109
1109
|
return this.formatTodosAsParameter(value);
|
|
1110
1110
|
}
|
|
1111
|
-
|
|
1111
|
+
|
|
1112
1112
|
try {
|
|
1113
1113
|
return `<pre class="param-json">${this.escapeHtml(JSON.stringify(value, null, 2))}</pre>`;
|
|
1114
1114
|
} catch (e) {
|
|
@@ -1124,7 +1124,7 @@ class UnifiedDataViewer {
|
|
|
1124
1124
|
*/
|
|
1125
1125
|
formatTodosAsParameter(todos) {
|
|
1126
1126
|
const statusCounts = this.getTodoStatusCounts(todos);
|
|
1127
|
-
|
|
1127
|
+
|
|
1128
1128
|
let html = `
|
|
1129
1129
|
<div class="param-todos">
|
|
1130
1130
|
<div class="param-todos-header">
|
|
@@ -1135,13 +1135,13 @@ class UnifiedDataViewer {
|
|
|
1135
1135
|
</div>
|
|
1136
1136
|
<div class="param-todos-list">
|
|
1137
1137
|
`;
|
|
1138
|
-
|
|
1138
|
+
|
|
1139
1139
|
todos.forEach((todo, index) => {
|
|
1140
1140
|
const statusIcon = this.getCheckboxIcon(todo.status);
|
|
1141
|
-
const displayText = todo.status === 'in_progress' ?
|
|
1141
|
+
const displayText = todo.status === 'in_progress' ?
|
|
1142
1142
|
(todo.activeForm || todo.content) : todo.content;
|
|
1143
1143
|
const statusClass = this.formatStatusClass(todo.status);
|
|
1144
|
-
|
|
1144
|
+
|
|
1145
1145
|
html += `
|
|
1146
1146
|
<div class="param-todo-item ${todo.status}">
|
|
1147
1147
|
<div class="param-todo-checkbox">
|
|
@@ -1154,12 +1154,12 @@ class UnifiedDataViewer {
|
|
|
1154
1154
|
</div>
|
|
1155
1155
|
`;
|
|
1156
1156
|
});
|
|
1157
|
-
|
|
1157
|
+
|
|
1158
1158
|
html += `
|
|
1159
1159
|
</div>
|
|
1160
1160
|
</div>
|
|
1161
1161
|
`;
|
|
1162
|
-
|
|
1162
|
+
|
|
1163
1163
|
return html;
|
|
1164
1164
|
}
|
|
1165
1165
|
|
|
@@ -1179,7 +1179,7 @@ class UnifiedDataViewer {
|
|
|
1179
1179
|
*/
|
|
1180
1180
|
getFileIcon(filePath) {
|
|
1181
1181
|
if (!filePath) return '📄';
|
|
1182
|
-
|
|
1182
|
+
|
|
1183
1183
|
const ext = filePath.split('.').pop()?.toLowerCase();
|
|
1184
1184
|
const iconMap = {
|
|
1185
1185
|
// Code files
|
|
@@ -1199,7 +1199,7 @@ class UnifiedDataViewer {
|
|
|
1199
1199
|
'swift': '🦉',
|
|
1200
1200
|
'kt': '🅺',
|
|
1201
1201
|
'scala': '🎯',
|
|
1202
|
-
|
|
1202
|
+
|
|
1203
1203
|
// Web files
|
|
1204
1204
|
'html': '🌐',
|
|
1205
1205
|
'htm': '🌐',
|
|
@@ -1208,7 +1208,7 @@ class UnifiedDataViewer {
|
|
|
1208
1208
|
'sass': '🎨',
|
|
1209
1209
|
'less': '🎨',
|
|
1210
1210
|
'vue': '💚',
|
|
1211
|
-
|
|
1211
|
+
|
|
1212
1212
|
// Config files
|
|
1213
1213
|
'json': '📋',
|
|
1214
1214
|
'xml': '📄',
|
|
@@ -1218,7 +1218,7 @@ class UnifiedDataViewer {
|
|
|
1218
1218
|
'ini': '⚙️',
|
|
1219
1219
|
'conf': '⚙️',
|
|
1220
1220
|
'config': '⚙️',
|
|
1221
|
-
|
|
1221
|
+
|
|
1222
1222
|
// Documentation
|
|
1223
1223
|
'md': '📝',
|
|
1224
1224
|
'txt': '📃',
|
|
@@ -1226,7 +1226,7 @@ class UnifiedDataViewer {
|
|
|
1226
1226
|
'pdf': '📕',
|
|
1227
1227
|
'doc': '📘',
|
|
1228
1228
|
'docx': '📘',
|
|
1229
|
-
|
|
1229
|
+
|
|
1230
1230
|
// Images
|
|
1231
1231
|
'jpg': '🖼️',
|
|
1232
1232
|
'jpeg': '🖼️',
|
|
@@ -1235,14 +1235,14 @@ class UnifiedDataViewer {
|
|
|
1235
1235
|
'svg': '🎨',
|
|
1236
1236
|
'webp': '🖼️',
|
|
1237
1237
|
'ico': '🖼️',
|
|
1238
|
-
|
|
1238
|
+
|
|
1239
1239
|
// Archives
|
|
1240
1240
|
'zip': '🗜️',
|
|
1241
1241
|
'tar': '🗜️',
|
|
1242
1242
|
'gz': '🗜️',
|
|
1243
1243
|
'rar': '🗜️',
|
|
1244
1244
|
'7z': '🗜️',
|
|
1245
|
-
|
|
1245
|
+
|
|
1246
1246
|
// Other
|
|
1247
1247
|
'sql': '🗃️',
|
|
1248
1248
|
'db': '🗃️',
|
|
@@ -1250,7 +1250,7 @@ class UnifiedDataViewer {
|
|
|
1250
1250
|
'env': '🔐',
|
|
1251
1251
|
'lock': '🔒'
|
|
1252
1252
|
};
|
|
1253
|
-
|
|
1253
|
+
|
|
1254
1254
|
return iconMap[ext] || '📄';
|
|
1255
1255
|
}
|
|
1256
1256
|
|
|
@@ -1259,7 +1259,7 @@ class UnifiedDataViewer {
|
|
|
1259
1259
|
*/
|
|
1260
1260
|
getFileType(filePath) {
|
|
1261
1261
|
if (!filePath) return null;
|
|
1262
|
-
|
|
1262
|
+
|
|
1263
1263
|
const ext = filePath.split('.').pop()?.toLowerCase();
|
|
1264
1264
|
const typeMap = {
|
|
1265
1265
|
'js': 'JavaScript',
|
|
@@ -1287,7 +1287,7 @@ class UnifiedDataViewer {
|
|
|
1287
1287
|
'sql': 'SQL',
|
|
1288
1288
|
'log': 'Log File'
|
|
1289
1289
|
};
|
|
1290
|
-
|
|
1290
|
+
|
|
1291
1291
|
return typeMap[ext] || null;
|
|
1292
1292
|
}
|
|
1293
1293
|
|
|
@@ -1304,7 +1304,7 @@ class UnifiedDataViewer {
|
|
|
1304
1304
|
*/
|
|
1305
1305
|
isTextFile(filePath) {
|
|
1306
1306
|
if (!filePath) return false;
|
|
1307
|
-
|
|
1307
|
+
|
|
1308
1308
|
const ext = filePath.split('.').pop()?.toLowerCase();
|
|
1309
1309
|
const textExtensions = [
|
|
1310
1310
|
'txt', 'md', 'json', 'xml', 'yaml', 'yml', 'ini', 'conf', 'config',
|
|
@@ -1312,7 +1312,7 @@ class UnifiedDataViewer {
|
|
|
1312
1312
|
'go', 'rs', 'swift', 'kt', 'scala', 'html', 'htm', 'css', 'scss', 'sass',
|
|
1313
1313
|
'less', 'vue', 'sql', 'log', 'env', 'gitignore', 'dockerignore'
|
|
1314
1314
|
];
|
|
1315
|
-
|
|
1315
|
+
|
|
1316
1316
|
return textExtensions.includes(ext);
|
|
1317
1317
|
}
|
|
1318
1318
|
|
|
@@ -1322,12 +1322,12 @@ class UnifiedDataViewer {
|
|
|
1322
1322
|
async toggleInlinePreview(filePath, buttonElement) {
|
|
1323
1323
|
const containerId = `preview-${this.generatePreviewId(filePath)}`;
|
|
1324
1324
|
const container = document.getElementById(containerId);
|
|
1325
|
-
|
|
1325
|
+
|
|
1326
1326
|
if (!container) {
|
|
1327
1327
|
console.warn('Preview container not found');
|
|
1328
1328
|
return;
|
|
1329
1329
|
}
|
|
1330
|
-
|
|
1330
|
+
|
|
1331
1331
|
if (container.style.display === 'none') {
|
|
1332
1332
|
// Show preview
|
|
1333
1333
|
container.style.display = 'block';
|
|
@@ -1389,7 +1389,7 @@ class UnifiedDataViewer {
|
|
|
1389
1389
|
*/
|
|
1390
1390
|
formatTimestamp(timestamp) {
|
|
1391
1391
|
if (!timestamp) return 'Unknown time';
|
|
1392
|
-
|
|
1392
|
+
|
|
1393
1393
|
try {
|
|
1394
1394
|
const date = new Date(timestamp);
|
|
1395
1395
|
if (isNaN(date.getTime())) return 'Invalid date';
|
|
@@ -1404,16 +1404,16 @@ class UnifiedDataViewer {
|
|
|
1404
1404
|
*/
|
|
1405
1405
|
formatStatus(status) {
|
|
1406
1406
|
if (!status) return 'unknown';
|
|
1407
|
-
|
|
1407
|
+
|
|
1408
1408
|
const statusMap = {
|
|
1409
1409
|
'active': '🟢 Active',
|
|
1410
|
-
'completed': '✅ Completed',
|
|
1410
|
+
'completed': '✅ Completed',
|
|
1411
1411
|
'in_progress': '🔄 In Progress',
|
|
1412
1412
|
'pending': '⏳ Pending',
|
|
1413
1413
|
'error': '❌ Error',
|
|
1414
1414
|
'failed': '❌ Failed'
|
|
1415
1415
|
};
|
|
1416
|
-
|
|
1416
|
+
|
|
1417
1417
|
return statusMap[status] || status;
|
|
1418
1418
|
}
|
|
1419
1419
|
|
|
@@ -1450,7 +1450,7 @@ class UnifiedDataViewer {
|
|
|
1450
1450
|
getToolIcon(toolName) {
|
|
1451
1451
|
const icons = {
|
|
1452
1452
|
'Read': '👁️',
|
|
1453
|
-
'Write': '✍️',
|
|
1453
|
+
'Write': '✍️',
|
|
1454
1454
|
'Edit': '✏️',
|
|
1455
1455
|
'MultiEdit': '📝',
|
|
1456
1456
|
'Bash': '💻',
|
|
@@ -1501,7 +1501,7 @@ class UnifiedDataViewer {
|
|
|
1501
1501
|
convertToolToFileOperation(toolData) {
|
|
1502
1502
|
const params = toolData.params || toolData.tool_parameters || {};
|
|
1503
1503
|
const filePath = params.file_path || params.path || params.notebook_path;
|
|
1504
|
-
|
|
1504
|
+
|
|
1505
1505
|
if (!filePath) {
|
|
1506
1506
|
return toolData; // Return original if no file path
|
|
1507
1507
|
}
|
|
@@ -1533,13 +1533,13 @@ class UnifiedDataViewer {
|
|
|
1533
1533
|
*/
|
|
1534
1534
|
getTodoStatusCounts(todos) {
|
|
1535
1535
|
const counts = { completed: 0, in_progress: 0, pending: 0 };
|
|
1536
|
-
|
|
1536
|
+
|
|
1537
1537
|
todos.forEach(todo => {
|
|
1538
1538
|
if (counts.hasOwnProperty(todo.status)) {
|
|
1539
1539
|
counts[todo.status]++;
|
|
1540
1540
|
}
|
|
1541
1541
|
});
|
|
1542
|
-
|
|
1542
|
+
|
|
1543
1543
|
return counts;
|
|
1544
1544
|
}
|
|
1545
1545
|
|
|
@@ -1548,12 +1548,12 @@ class UnifiedDataViewer {
|
|
|
1548
1548
|
*/
|
|
1549
1549
|
escapeHtml(text) {
|
|
1550
1550
|
if (typeof text !== 'string') return '';
|
|
1551
|
-
|
|
1551
|
+
|
|
1552
1552
|
const div = document.createElement('div');
|
|
1553
1553
|
div.textContent = text;
|
|
1554
1554
|
return div.innerHTML;
|
|
1555
1555
|
}
|
|
1556
|
-
|
|
1556
|
+
|
|
1557
1557
|
/**
|
|
1558
1558
|
* Toggle JSON section visibility and update global state
|
|
1559
1559
|
* WHY: Maintains sticky state across all JSON sections for consistent behavior
|
|
@@ -1563,19 +1563,19 @@ class UnifiedDataViewer {
|
|
|
1563
1563
|
toggleJsonSection(sectionId, button) {
|
|
1564
1564
|
// Toggle the global state
|
|
1565
1565
|
this.globalJsonExpanded = !this.globalJsonExpanded;
|
|
1566
|
-
|
|
1566
|
+
|
|
1567
1567
|
// Persist the preference to localStorage
|
|
1568
1568
|
localStorage.setItem('dashboard-json-expanded', this.globalJsonExpanded.toString());
|
|
1569
|
-
|
|
1569
|
+
|
|
1570
1570
|
// Update ALL JSON sections on the page
|
|
1571
1571
|
this.updateAllJsonSections();
|
|
1572
|
-
|
|
1572
|
+
|
|
1573
1573
|
// Dispatch event to notify other components (like module-viewer) of the change
|
|
1574
1574
|
document.dispatchEvent(new CustomEvent('jsonToggleChanged', {
|
|
1575
1575
|
detail: { expanded: this.globalJsonExpanded }
|
|
1576
1576
|
}));
|
|
1577
1577
|
}
|
|
1578
|
-
|
|
1578
|
+
|
|
1579
1579
|
/**
|
|
1580
1580
|
* Toggle Full Event Data section visibility and update state
|
|
1581
1581
|
* WHY: Maintains separate sticky state for Full Event Data sections
|
|
@@ -1585,19 +1585,19 @@ class UnifiedDataViewer {
|
|
|
1585
1585
|
toggleFullEventSection(sectionId, button) {
|
|
1586
1586
|
// Toggle the full event data state
|
|
1587
1587
|
this.fullEventDataExpanded = !this.fullEventDataExpanded;
|
|
1588
|
-
|
|
1588
|
+
|
|
1589
1589
|
// Persist the preference to localStorage
|
|
1590
1590
|
localStorage.setItem('dashboard-full-event-expanded', this.fullEventDataExpanded.toString());
|
|
1591
|
-
|
|
1591
|
+
|
|
1592
1592
|
// Update ALL Full Event sections on the page
|
|
1593
1593
|
this.updateAllFullEventSections();
|
|
1594
|
-
|
|
1594
|
+
|
|
1595
1595
|
// Dispatch event to notify other components of the change
|
|
1596
1596
|
document.dispatchEvent(new CustomEvent('fullEventToggleChanged', {
|
|
1597
1597
|
detail: { expanded: this.fullEventDataExpanded }
|
|
1598
1598
|
}));
|
|
1599
1599
|
}
|
|
1600
|
-
|
|
1600
|
+
|
|
1601
1601
|
/**
|
|
1602
1602
|
* Update all JSON sections on the page to match global state
|
|
1603
1603
|
* WHY: Ensures all "Structured Data" sections maintain consistent visibility
|
|
@@ -1606,7 +1606,7 @@ class UnifiedDataViewer {
|
|
|
1606
1606
|
// Find all unified JSON sections (NOT full event sections)
|
|
1607
1607
|
const allJsonContents = document.querySelectorAll('.unified-json-content');
|
|
1608
1608
|
const allJsonButtons = document.querySelectorAll('.unified-json-toggle');
|
|
1609
|
-
|
|
1609
|
+
|
|
1610
1610
|
// Update each JSON section
|
|
1611
1611
|
allJsonContents.forEach(content => {
|
|
1612
1612
|
if (this.globalJsonExpanded) {
|
|
@@ -1615,7 +1615,7 @@ class UnifiedDataViewer {
|
|
|
1615
1615
|
content.style.display = 'none';
|
|
1616
1616
|
}
|
|
1617
1617
|
});
|
|
1618
|
-
|
|
1618
|
+
|
|
1619
1619
|
// Update all button states
|
|
1620
1620
|
allJsonButtons.forEach(button => {
|
|
1621
1621
|
const title = button.textContent.substring(2); // Remove arrow
|
|
@@ -1628,7 +1628,7 @@ class UnifiedDataViewer {
|
|
|
1628
1628
|
}
|
|
1629
1629
|
});
|
|
1630
1630
|
}
|
|
1631
|
-
|
|
1631
|
+
|
|
1632
1632
|
/**
|
|
1633
1633
|
* Update all Full Event Data sections on the page to match state
|
|
1634
1634
|
* WHY: Ensures all "Full Event Data" sections maintain consistent visibility
|
|
@@ -1637,7 +1637,7 @@ class UnifiedDataViewer {
|
|
|
1637
1637
|
// Find all full event sections
|
|
1638
1638
|
const allFullEventContents = document.querySelectorAll('.full-event-content');
|
|
1639
1639
|
const allFullEventButtons = document.querySelectorAll('.full-event-toggle');
|
|
1640
|
-
|
|
1640
|
+
|
|
1641
1641
|
// Update each full event section
|
|
1642
1642
|
allFullEventContents.forEach(content => {
|
|
1643
1643
|
if (this.fullEventDataExpanded) {
|
|
@@ -1646,7 +1646,7 @@ class UnifiedDataViewer {
|
|
|
1646
1646
|
content.style.display = 'none';
|
|
1647
1647
|
}
|
|
1648
1648
|
});
|
|
1649
|
-
|
|
1649
|
+
|
|
1650
1650
|
// Update all button states
|
|
1651
1651
|
allFullEventButtons.forEach(button => {
|
|
1652
1652
|
const title = button.textContent.substring(2); // Remove arrow
|
|
@@ -1667,26 +1667,26 @@ class UnifiedDataViewer {
|
|
|
1667
1667
|
createCollapsibleJSON(data, title = 'Full Details') {
|
|
1668
1668
|
// Generate unique ID for this collapsible section
|
|
1669
1669
|
const sectionId = `json-details-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
1670
|
-
|
|
1670
|
+
|
|
1671
1671
|
// Filter out sensitive or overly verbose properties
|
|
1672
1672
|
const cleanData = this.cleanDataForDisplay(data);
|
|
1673
|
-
|
|
1673
|
+
|
|
1674
1674
|
// Determine which state to use based on title
|
|
1675
1675
|
// "Full Event Data" and similar titles use the fullEventDataExpanded state
|
|
1676
1676
|
// Other titles use the global JSON state (for backward compatibility)
|
|
1677
|
-
const isFullEventData = title.includes('Full Event') || title.includes('Full Details') ||
|
|
1677
|
+
const isFullEventData = title.includes('Full Event') || title.includes('Full Details') ||
|
|
1678
1678
|
title.includes('Full Agent') || title.includes('Full Tool');
|
|
1679
1679
|
const isExpanded = isFullEventData ? this.fullEventDataExpanded : this.globalJsonExpanded;
|
|
1680
1680
|
const display = isExpanded ? 'block' : 'none';
|
|
1681
1681
|
const arrow = isExpanded ? '▼' : '▶';
|
|
1682
1682
|
const expandedClass = isExpanded ? 'expanded' : '';
|
|
1683
|
-
|
|
1683
|
+
|
|
1684
1684
|
// Use different toggle function based on section type
|
|
1685
1685
|
const toggleFunction = isFullEventData ? 'toggleFullEventSection' : 'toggleJsonSection';
|
|
1686
|
-
|
|
1686
|
+
|
|
1687
1687
|
return `
|
|
1688
1688
|
<div class="collapsible-json-section">
|
|
1689
|
-
<button class="collapsible-json-toggle ${isFullEventData ? 'full-event-toggle' : 'unified-json-toggle'} ${expandedClass}"
|
|
1689
|
+
<button class="collapsible-json-toggle ${isFullEventData ? 'full-event-toggle' : 'unified-json-toggle'} ${expandedClass}"
|
|
1690
1690
|
data-section-id="${sectionId}"
|
|
1691
1691
|
data-is-full-event="${isFullEventData}"
|
|
1692
1692
|
onclick="window.unifiedDataViewer.${toggleFunction}('${sectionId}', this)">
|
|
@@ -1705,7 +1705,7 @@ class UnifiedDataViewer {
|
|
|
1705
1705
|
*/
|
|
1706
1706
|
cleanDataForDisplay(data) {
|
|
1707
1707
|
const seen = new WeakSet();
|
|
1708
|
-
|
|
1708
|
+
|
|
1709
1709
|
return JSON.parse(JSON.stringify(data, (key, value) => {
|
|
1710
1710
|
// Handle circular references
|
|
1711
1711
|
if (typeof value === 'object' && value !== null) {
|
|
@@ -1714,17 +1714,17 @@ class UnifiedDataViewer {
|
|
|
1714
1714
|
}
|
|
1715
1715
|
seen.add(value);
|
|
1716
1716
|
}
|
|
1717
|
-
|
|
1717
|
+
|
|
1718
1718
|
// Truncate very long strings
|
|
1719
1719
|
if (typeof value === 'string' && value.length > 1000) {
|
|
1720
1720
|
return value.substring(0, 1000) + '... [truncated]';
|
|
1721
1721
|
}
|
|
1722
|
-
|
|
1722
|
+
|
|
1723
1723
|
// Handle functions
|
|
1724
1724
|
if (typeof value === 'function') {
|
|
1725
1725
|
return '[Function]';
|
|
1726
1726
|
}
|
|
1727
|
-
|
|
1727
|
+
|
|
1728
1728
|
return value;
|
|
1729
1729
|
}));
|
|
1730
1730
|
}
|
|
@@ -1776,14 +1776,14 @@ window.UnifiedDataViewer = UnifiedDataViewer;
|
|
|
1776
1776
|
if (typeof window !== 'undefined') {
|
|
1777
1777
|
// Always create/update the global instance
|
|
1778
1778
|
window.unifiedDataViewer = new UnifiedDataViewer();
|
|
1779
|
-
|
|
1779
|
+
|
|
1780
1780
|
// Also expose the methods directly on window as a fallback
|
|
1781
1781
|
window.toggleFullEventSection = function(sectionId, button) {
|
|
1782
1782
|
if (window.unifiedDataViewer) {
|
|
1783
1783
|
window.unifiedDataViewer.toggleFullEventSection(sectionId, button);
|
|
1784
1784
|
}
|
|
1785
1785
|
};
|
|
1786
|
-
|
|
1786
|
+
|
|
1787
1787
|
window.toggleJsonSection = function(sectionId, button) {
|
|
1788
1788
|
if (window.unifiedDataViewer) {
|
|
1789
1789
|
window.unifiedDataViewer.toggleJsonSection(sectionId, button);
|
|
@@ -1798,7 +1798,7 @@ if (typeof window !== 'undefined') {
|
|
|
1798
1798
|
if (!window.unifiedDataViewer) {
|
|
1799
1799
|
window.unifiedDataViewer = new UnifiedDataViewer();
|
|
1800
1800
|
}
|
|
1801
|
-
|
|
1801
|
+
|
|
1802
1802
|
// Add keyboard shortcuts for file operations
|
|
1803
1803
|
document.addEventListener('keydown', function(e) {
|
|
1804
1804
|
// Ctrl/Cmd + Click on file paths to open file viewer
|
|
@@ -1809,7 +1809,7 @@ if (typeof window !== 'undefined') {
|
|
|
1809
1809
|
window.showFileViewerModal(filePath);
|
|
1810
1810
|
}
|
|
1811
1811
|
}
|
|
1812
|
-
|
|
1812
|
+
|
|
1813
1813
|
// 'V' key to open file viewer when hovering over clickable file paths
|
|
1814
1814
|
if (e.key.toLowerCase() === 'v' && document.querySelector('.clickable-file-path:hover')) {
|
|
1815
1815
|
const hoveredPath = document.querySelector('.clickable-file-path:hover');
|