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,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* File Viewer Component
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* A simple file content viewer that displays file contents in a modal window.
|
|
5
5
|
* This component handles file loading via HTTP requests and displays the content
|
|
6
6
|
* with basic syntax highlighting support.
|
|
@@ -24,7 +24,7 @@ class FileViewer {
|
|
|
24
24
|
|
|
25
25
|
this.createModal();
|
|
26
26
|
this.setupEventHandlers();
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
this.initialized = true;
|
|
29
29
|
console.log('File viewer initialized');
|
|
30
30
|
}
|
|
@@ -250,7 +250,7 @@ class FileViewer {
|
|
|
250
250
|
async show(filePath) {
|
|
251
251
|
console.log('[FileViewer] show() called with path:', filePath);
|
|
252
252
|
console.log('[FileViewer] initialized:', this.initialized);
|
|
253
|
-
|
|
253
|
+
|
|
254
254
|
if (!this.initialized) {
|
|
255
255
|
console.log('[FileViewer] Not initialized, initializing now...');
|
|
256
256
|
this.initialize();
|
|
@@ -258,10 +258,10 @@ class FileViewer {
|
|
|
258
258
|
|
|
259
259
|
this.currentFile = filePath;
|
|
260
260
|
this.modal.classList.add('show');
|
|
261
|
-
|
|
261
|
+
|
|
262
262
|
// Update path
|
|
263
263
|
document.getElementById('file-viewer-path').textContent = filePath;
|
|
264
|
-
|
|
264
|
+
|
|
265
265
|
console.log('[FileViewer] Modal shown, loading file content...');
|
|
266
266
|
// Load file content
|
|
267
267
|
await this.loadFileContent(filePath);
|
|
@@ -280,63 +280,63 @@ class FileViewer {
|
|
|
280
280
|
*/
|
|
281
281
|
async loadFileContent(filePath) {
|
|
282
282
|
const codeContent = document.getElementById('file-viewer-code-content');
|
|
283
|
-
|
|
283
|
+
|
|
284
284
|
console.log('[FileViewer] loadFileContent called with path:', filePath);
|
|
285
|
-
|
|
285
|
+
|
|
286
286
|
// Check cache first
|
|
287
287
|
if (this.contentCache.has(filePath)) {
|
|
288
288
|
console.log('[FileViewer] Using cached content for:', filePath);
|
|
289
289
|
this.displayContent(this.contentCache.get(filePath));
|
|
290
290
|
return;
|
|
291
291
|
}
|
|
292
|
-
|
|
292
|
+
|
|
293
293
|
// Show loading state
|
|
294
294
|
codeContent.textContent = 'Loading file content...';
|
|
295
|
-
|
|
295
|
+
|
|
296
296
|
try {
|
|
297
297
|
// Check if we have a socket connection available
|
|
298
298
|
if (window.socket && window.socket.connected) {
|
|
299
299
|
console.log('[FileViewer] Using Socket.IO to load file:', filePath);
|
|
300
|
-
|
|
300
|
+
|
|
301
301
|
// Create a promise to wait for the response
|
|
302
302
|
const responsePromise = new Promise((resolve, reject) => {
|
|
303
303
|
const timeoutId = setTimeout(() => {
|
|
304
304
|
console.error('[FileViewer] Socket.IO request timed out for:', filePath);
|
|
305
305
|
reject(new Error('Socket.IO request timed out'));
|
|
306
306
|
}, 10000); // 10 second timeout
|
|
307
|
-
|
|
307
|
+
|
|
308
308
|
// Set up one-time listener for the response
|
|
309
309
|
window.socket.once('file_content_response', (data) => {
|
|
310
310
|
clearTimeout(timeoutId);
|
|
311
311
|
console.log('[FileViewer] Received file_content_response:', data);
|
|
312
312
|
resolve(data);
|
|
313
313
|
});
|
|
314
|
-
|
|
314
|
+
|
|
315
315
|
// Emit the read_file event
|
|
316
316
|
console.log('[FileViewer] Emitting read_file event with data:', {
|
|
317
317
|
file_path: filePath,
|
|
318
318
|
working_dir: window.workingDirectory || '/',
|
|
319
319
|
max_size: 5 * 1024 * 1024 // 5MB limit
|
|
320
320
|
});
|
|
321
|
-
|
|
321
|
+
|
|
322
322
|
window.socket.emit('read_file', {
|
|
323
323
|
file_path: filePath,
|
|
324
324
|
working_dir: window.workingDirectory || '/',
|
|
325
325
|
max_size: 5 * 1024 * 1024 // 5MB limit
|
|
326
326
|
});
|
|
327
327
|
});
|
|
328
|
-
|
|
328
|
+
|
|
329
329
|
// Wait for the response
|
|
330
330
|
const data = await responsePromise;
|
|
331
|
-
|
|
331
|
+
|
|
332
332
|
if (data.success && data.content !== undefined) {
|
|
333
333
|
console.log('[FileViewer] Successfully loaded file content, caching...');
|
|
334
334
|
// Cache the content
|
|
335
335
|
this.contentCache.set(filePath, data.content);
|
|
336
|
-
|
|
336
|
+
|
|
337
337
|
// Display the content
|
|
338
338
|
this.displayContent(data.content);
|
|
339
|
-
|
|
339
|
+
|
|
340
340
|
// Update file info
|
|
341
341
|
this.updateFileInfo(data);
|
|
342
342
|
} else {
|
|
@@ -350,7 +350,7 @@ class FileViewer {
|
|
|
350
350
|
} catch (error) {
|
|
351
351
|
console.error('[FileViewer] Error loading file:', error);
|
|
352
352
|
console.error('[FileViewer] Error stack:', error.stack);
|
|
353
|
-
|
|
353
|
+
|
|
354
354
|
// If API fails, show error message with helpful information
|
|
355
355
|
this.displayError(filePath, error.message);
|
|
356
356
|
}
|
|
@@ -361,22 +361,22 @@ class FileViewer {
|
|
|
361
361
|
*/
|
|
362
362
|
displayContent(content) {
|
|
363
363
|
const codeContent = document.getElementById('file-viewer-code-content');
|
|
364
|
-
|
|
364
|
+
|
|
365
365
|
// Set the content
|
|
366
366
|
codeContent.textContent = content || '(Empty file)';
|
|
367
|
-
|
|
367
|
+
|
|
368
368
|
// Update line count
|
|
369
369
|
const lines = content ? content.split('\n').length : 0;
|
|
370
370
|
document.getElementById('file-viewer-lines').textContent = `Lines: ${lines}`;
|
|
371
|
-
|
|
371
|
+
|
|
372
372
|
// Update file size
|
|
373
373
|
const size = content ? new Blob([content]).size : 0;
|
|
374
374
|
document.getElementById('file-viewer-size').textContent = `Size: ${this.formatFileSize(size)}`;
|
|
375
|
-
|
|
375
|
+
|
|
376
376
|
// Detect and set file type
|
|
377
377
|
const fileType = this.detectFileType(this.currentFile);
|
|
378
378
|
document.getElementById('file-viewer-type').textContent = `Type: ${fileType}`;
|
|
379
|
-
|
|
379
|
+
|
|
380
380
|
// Apply syntax highlighting if Prism is available
|
|
381
381
|
if (window.Prism) {
|
|
382
382
|
const language = this.detectLanguage(this.currentFile);
|
|
@@ -390,27 +390,27 @@ class FileViewer {
|
|
|
390
390
|
*/
|
|
391
391
|
displayError(filePath, errorMessage) {
|
|
392
392
|
const codeContent = document.getElementById('file-viewer-code-content');
|
|
393
|
-
|
|
393
|
+
|
|
394
394
|
// For now, show a helpful message since the API endpoint doesn't exist yet
|
|
395
395
|
const errorHtml = `
|
|
396
396
|
<div class="file-viewer-error">
|
|
397
397
|
⚠️ File content loading is not yet implemented
|
|
398
|
-
|
|
398
|
+
|
|
399
399
|
File path: ${filePath}
|
|
400
|
-
|
|
400
|
+
|
|
401
401
|
The file viewing functionality requires:
|
|
402
402
|
1. A server-side /api/file endpoint
|
|
403
403
|
2. Proper file reading permissions
|
|
404
404
|
3. Security validation for file access
|
|
405
|
-
|
|
405
|
+
|
|
406
406
|
Error: ${errorMessage}
|
|
407
|
-
|
|
407
|
+
|
|
408
408
|
This feature will be available once the backend API is implemented.
|
|
409
409
|
</div>
|
|
410
410
|
`;
|
|
411
|
-
|
|
411
|
+
|
|
412
412
|
codeContent.innerHTML = errorHtml;
|
|
413
|
-
|
|
413
|
+
|
|
414
414
|
// Update info
|
|
415
415
|
document.getElementById('file-viewer-lines').textContent = 'Lines: --';
|
|
416
416
|
document.getElementById('file-viewer-size').textContent = 'Size: --';
|
|
@@ -424,11 +424,11 @@ class FileViewer {
|
|
|
424
424
|
if (data.lines !== undefined) {
|
|
425
425
|
document.getElementById('file-viewer-lines').textContent = `Lines: ${data.lines}`;
|
|
426
426
|
}
|
|
427
|
-
|
|
427
|
+
|
|
428
428
|
if (data.size !== undefined) {
|
|
429
429
|
document.getElementById('file-viewer-size').textContent = `Size: ${this.formatFileSize(data.size)}`;
|
|
430
430
|
}
|
|
431
|
-
|
|
431
|
+
|
|
432
432
|
if (data.type) {
|
|
433
433
|
document.getElementById('file-viewer-type').textContent = `Type: ${data.type}`;
|
|
434
434
|
}
|
|
@@ -439,11 +439,11 @@ class FileViewer {
|
|
|
439
439
|
*/
|
|
440
440
|
formatFileSize(bytes) {
|
|
441
441
|
if (bytes === 0) return '0 Bytes';
|
|
442
|
-
|
|
442
|
+
|
|
443
443
|
const k = 1024;
|
|
444
444
|
const sizes = ['Bytes', 'KB', 'MB', 'GB'];
|
|
445
445
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
446
|
-
|
|
446
|
+
|
|
447
447
|
return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];
|
|
448
448
|
}
|
|
449
449
|
|
|
@@ -452,7 +452,7 @@ class FileViewer {
|
|
|
452
452
|
*/
|
|
453
453
|
detectFileType(path) {
|
|
454
454
|
if (!path) return 'Unknown';
|
|
455
|
-
|
|
455
|
+
|
|
456
456
|
const ext = path.split('.').pop()?.toLowerCase();
|
|
457
457
|
const typeMap = {
|
|
458
458
|
'py': 'Python',
|
|
@@ -480,7 +480,7 @@ class FileViewer {
|
|
|
480
480
|
'rb': 'Ruby',
|
|
481
481
|
'php': 'PHP'
|
|
482
482
|
};
|
|
483
|
-
|
|
483
|
+
|
|
484
484
|
return typeMap[ext] || 'Text';
|
|
485
485
|
}
|
|
486
486
|
|
|
@@ -489,7 +489,7 @@ class FileViewer {
|
|
|
489
489
|
*/
|
|
490
490
|
detectLanguage(path) {
|
|
491
491
|
if (!path) return 'plaintext';
|
|
492
|
-
|
|
492
|
+
|
|
493
493
|
const ext = path.split('.').pop()?.toLowerCase();
|
|
494
494
|
const languageMap = {
|
|
495
495
|
'py': 'python',
|
|
@@ -516,7 +516,7 @@ class FileViewer {
|
|
|
516
516
|
'rb': 'ruby',
|
|
517
517
|
'php': 'php'
|
|
518
518
|
};
|
|
519
|
-
|
|
519
|
+
|
|
520
520
|
return languageMap[ext] || 'plaintext';
|
|
521
521
|
}
|
|
522
522
|
|
|
@@ -527,15 +527,15 @@ class FileViewer {
|
|
|
527
527
|
const codeContent = document.getElementById('file-viewer-code-content');
|
|
528
528
|
const button = document.getElementById('file-viewer-copy');
|
|
529
529
|
const content = codeContent.textContent;
|
|
530
|
-
|
|
530
|
+
|
|
531
531
|
try {
|
|
532
532
|
await navigator.clipboard.writeText(content);
|
|
533
|
-
|
|
533
|
+
|
|
534
534
|
// Show feedback
|
|
535
535
|
const originalText = button.textContent;
|
|
536
536
|
button.textContent = '✅ Copied!';
|
|
537
537
|
button.classList.add('copied');
|
|
538
|
-
|
|
538
|
+
|
|
539
539
|
setTimeout(() => {
|
|
540
540
|
button.textContent = originalText;
|
|
541
541
|
button.classList.remove('copied');
|
|
@@ -565,7 +565,7 @@ window.fileViewerInstance = fileViewer;
|
|
|
565
565
|
// Export for use in other modules
|
|
566
566
|
if (typeof window !== 'undefined') {
|
|
567
567
|
window.FileViewer = fileViewer;
|
|
568
|
-
|
|
568
|
+
|
|
569
569
|
// Initialize when DOM is ready
|
|
570
570
|
if (document.readyState === 'loading') {
|
|
571
571
|
document.addEventListener('DOMContentLoaded', () => {
|
|
@@ -17,21 +17,21 @@ class ModuleViewer {
|
|
|
17
17
|
// Global JSON visibility state - persisted across all events
|
|
18
18
|
// When true, all events show JSON expanded; when false, all collapsed
|
|
19
19
|
this.globalJsonExpanded = localStorage.getItem('dashboard-json-expanded') === 'true';
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
// Separate state for Full Event Data sections
|
|
22
22
|
this.fullEventDataExpanded = localStorage.getItem('dashboard-full-event-expanded') === 'true';
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
// Track if keyboard listener has been added to avoid duplicates
|
|
25
25
|
this.keyboardListenerAdded = false;
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
// Initialize unified data viewer
|
|
28
28
|
this.unifiedViewer = new UnifiedDataViewer('module-data-content');
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
// Sync unified viewer's JSON state with module viewer's state
|
|
31
31
|
// This ensures both viewers maintain consistent JSON visibility
|
|
32
32
|
this.unifiedViewer.globalJsonExpanded = this.globalJsonExpanded;
|
|
33
33
|
this.unifiedViewer.fullEventDataExpanded = this.fullEventDataExpanded;
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
// Listen for JSON state changes from unified viewer
|
|
36
36
|
document.addEventListener('jsonToggleChanged', (e) => {
|
|
37
37
|
this.globalJsonExpanded = e.detail.expanded;
|
|
@@ -40,7 +40,7 @@ class ModuleViewer {
|
|
|
40
40
|
this.unifiedViewer.globalJsonExpanded = e.detail.expanded;
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
// Listen for Full Event Data state changes
|
|
45
45
|
document.addEventListener('fullEventToggleChanged', (e) => {
|
|
46
46
|
this.fullEventDataExpanded = e.detail.expanded;
|
|
@@ -118,7 +118,7 @@ class ModuleViewer {
|
|
|
118
118
|
*/
|
|
119
119
|
showEventDetails(event) {
|
|
120
120
|
this.currentEvent = event;
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
if (!this.unifiedViewer) {
|
|
123
123
|
console.warn('ModuleViewer: UnifiedDataViewer not available');
|
|
124
124
|
// Fallback to legacy rendering
|
|
@@ -126,7 +126,7 @@ class ModuleViewer {
|
|
|
126
126
|
this.renderJsonData(event);
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
// Use unified viewer to display event data
|
|
131
131
|
this.unifiedViewer.display(event, 'event');
|
|
132
132
|
}
|
|
@@ -868,13 +868,13 @@ class ModuleViewer {
|
|
|
868
868
|
createCollapsibleJsonSection(event) {
|
|
869
869
|
const uniqueId = 'json-section-' + Math.random().toString(36).substr(2, 9);
|
|
870
870
|
const jsonString = this.formatJSON(event);
|
|
871
|
-
|
|
871
|
+
|
|
872
872
|
// Use global state to determine initial visibility
|
|
873
873
|
const isExpanded = this.globalJsonExpanded;
|
|
874
874
|
const display = isExpanded ? 'block' : 'none';
|
|
875
875
|
const arrow = isExpanded ? '▲' : '▼';
|
|
876
876
|
const ariaExpanded = isExpanded ? 'true' : 'false';
|
|
877
|
-
|
|
877
|
+
|
|
878
878
|
return `
|
|
879
879
|
<div class="collapsible-json-section" id="${uniqueId}">
|
|
880
880
|
<div class="json-toggle-header"
|
|
@@ -960,13 +960,13 @@ class ModuleViewer {
|
|
|
960
960
|
toggleJsonSection() {
|
|
961
961
|
// Toggle the global state
|
|
962
962
|
this.globalJsonExpanded = !this.globalJsonExpanded;
|
|
963
|
-
|
|
963
|
+
|
|
964
964
|
// Persist the preference to localStorage
|
|
965
965
|
localStorage.setItem('dashboard-json-expanded', this.globalJsonExpanded.toString());
|
|
966
|
-
|
|
966
|
+
|
|
967
967
|
// Update ALL JSON sections on the page
|
|
968
968
|
this.updateAllJsonSections();
|
|
969
|
-
|
|
969
|
+
|
|
970
970
|
// Dispatch event to notify other components of the change
|
|
971
971
|
document.dispatchEvent(new CustomEvent('jsonToggleChanged', {
|
|
972
972
|
detail: { expanded: this.globalJsonExpanded }
|
|
@@ -982,7 +982,7 @@ class ModuleViewer {
|
|
|
982
982
|
const allJsonContents = document.querySelectorAll('.json-content-collapsible');
|
|
983
983
|
const allArrows = document.querySelectorAll('.json-toggle-arrow');
|
|
984
984
|
const allHeaders = document.querySelectorAll('.json-toggle-header');
|
|
985
|
-
|
|
985
|
+
|
|
986
986
|
// Update each JSON section
|
|
987
987
|
allJsonContents.forEach((jsonContent, index) => {
|
|
988
988
|
if (this.globalJsonExpanded) {
|
|
@@ -1007,7 +1007,7 @@ class ModuleViewer {
|
|
|
1007
1007
|
}
|
|
1008
1008
|
}
|
|
1009
1009
|
});
|
|
1010
|
-
|
|
1010
|
+
|
|
1011
1011
|
// If expanded and there's content, scroll the first visible one into view
|
|
1012
1012
|
if (this.globalJsonExpanded && allJsonContents.length > 0) {
|
|
1013
1013
|
setTimeout(() => {
|
|
@@ -1221,7 +1221,7 @@ class ModuleViewer {
|
|
|
1221
1221
|
if (!text || text.length <= maxLength) return text;
|
|
1222
1222
|
return text.substring(0, maxLength) + '...';
|
|
1223
1223
|
}
|
|
1224
|
-
|
|
1224
|
+
|
|
1225
1225
|
/**
|
|
1226
1226
|
* Format operation details object for display
|
|
1227
1227
|
* @param {Object} details - Details object containing operation information
|
|
@@ -1231,40 +1231,40 @@ class ModuleViewer {
|
|
|
1231
1231
|
if (!details || typeof details !== 'object') {
|
|
1232
1232
|
return '';
|
|
1233
1233
|
}
|
|
1234
|
-
|
|
1234
|
+
|
|
1235
1235
|
let formattedDetails = '';
|
|
1236
|
-
|
|
1236
|
+
|
|
1237
1237
|
// Display the bash command if available
|
|
1238
1238
|
if (details.parameters && details.parameters.command) {
|
|
1239
1239
|
formattedDetails += `<br><strong>Command:</strong> <code>${this.escapeHtml(details.parameters.command)}</code>`;
|
|
1240
1240
|
}
|
|
1241
|
-
|
|
1241
|
+
|
|
1242
1242
|
// Display success/error status
|
|
1243
1243
|
if (details.success !== undefined) {
|
|
1244
1244
|
formattedDetails += `<br><strong>Status:</strong> ${details.success ? '✅ Success' : '❌ Failed'}`;
|
|
1245
1245
|
}
|
|
1246
|
-
|
|
1246
|
+
|
|
1247
1247
|
// Display exit code if available
|
|
1248
1248
|
if (details.exit_code !== undefined && details.exit_code !== null) {
|
|
1249
1249
|
formattedDetails += `<br><strong>Exit Code:</strong> ${details.exit_code}`;
|
|
1250
1250
|
}
|
|
1251
|
-
|
|
1251
|
+
|
|
1252
1252
|
// Display duration if available
|
|
1253
1253
|
if (details.duration_ms !== undefined && details.duration_ms !== null) {
|
|
1254
|
-
const duration = details.duration_ms > 1000
|
|
1255
|
-
? `${(details.duration_ms / 1000).toFixed(2)}s`
|
|
1254
|
+
const duration = details.duration_ms > 1000
|
|
1255
|
+
? `${(details.duration_ms / 1000).toFixed(2)}s`
|
|
1256
1256
|
: `${details.duration_ms}ms`;
|
|
1257
1257
|
formattedDetails += `<br><strong>Duration:</strong> ${duration}`;
|
|
1258
1258
|
}
|
|
1259
|
-
|
|
1259
|
+
|
|
1260
1260
|
// Display error message if available
|
|
1261
1261
|
if (details.error) {
|
|
1262
1262
|
formattedDetails += `<br><strong>Error:</strong> ${this.escapeHtml(this.truncateText(details.error, 200))}`;
|
|
1263
1263
|
}
|
|
1264
|
-
|
|
1264
|
+
|
|
1265
1265
|
return formattedDetails;
|
|
1266
1266
|
}
|
|
1267
|
-
|
|
1267
|
+
|
|
1268
1268
|
/**
|
|
1269
1269
|
* Escape HTML to prevent XSS
|
|
1270
1270
|
*/
|
|
@@ -1552,7 +1552,7 @@ class ModuleViewer {
|
|
|
1552
1552
|
const searchPattern = parameters.pattern || 'No pattern specified';
|
|
1553
1553
|
const searchPath = parameters.path || parameters.directory || '.';
|
|
1554
1554
|
const searchType = parameters.type || parameters.glob || 'all files';
|
|
1555
|
-
|
|
1555
|
+
|
|
1556
1556
|
// Extract search results from result_summary
|
|
1557
1557
|
let searchResultsContent = '';
|
|
1558
1558
|
if (toolCall.result_summary) {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Session Manager Component
|
|
3
3
|
* Handles session selection and management
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* WHY: Provides session filtering and management for the dashboard, allowing users
|
|
6
6
|
* to view events from specific sessions or all sessions.
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
8
|
* BROWSER COMPATIBILITY: This component runs in the browser. All Node.js-specific
|
|
9
9
|
* globals (process, require, etc.) have been removed. Uses browser-compatible
|
|
10
10
|
* alternatives for path handling and defaults.
|
|
11
|
-
*
|
|
11
|
+
*
|
|
12
12
|
* FIX APPLIED: Removed process.cwd() reference that caused "process is not defined"
|
|
13
13
|
* error in browser. Now uses window.location.pathname or hardcoded fallbacks.
|
|
14
14
|
*/
|
|
@@ -94,7 +94,7 @@ class SessionManager {
|
|
|
94
94
|
|
|
95
95
|
// Get the default working directory from various sources
|
|
96
96
|
let defaultWorkingDir = '/';
|
|
97
|
-
|
|
97
|
+
|
|
98
98
|
// Try to get from working directory manager
|
|
99
99
|
if (window.dashboard && window.dashboard.workingDirectoryManager) {
|
|
100
100
|
defaultWorkingDir = window.dashboard.workingDirectoryManager.getDefaultWorkingDir();
|
|
@@ -108,7 +108,7 @@ class SessionManager {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
|
|
111
|
+
|
|
112
112
|
console.log('[SESSION-MANAGER] Using default working directory:', defaultWorkingDir);
|
|
113
113
|
|
|
114
114
|
// Update "All Sessions" option to show working directory
|
|
@@ -129,19 +129,19 @@ class SessionManager {
|
|
|
129
129
|
const startTime = new Date(session.startTime || session.last_activity).toLocaleString();
|
|
130
130
|
const eventCount = session.eventCount || session.event_count || 0;
|
|
131
131
|
const isActive = session.id === this.currentSessionId;
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
// Extract working directory from session or events
|
|
134
134
|
let workingDir = session.working_directory || session.workingDirectory || '';
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
// Log for debugging
|
|
137
137
|
console.log(`[SESSION-DROPDOWN] Session ${session.id.substring(0, 8)} working_directory:`, workingDir);
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
if (!workingDir) {
|
|
140
140
|
const sessionData = this.extractSessionInfoFromEvents(session.id);
|
|
141
141
|
workingDir = sessionData.workingDir || defaultWorkingDir;
|
|
142
142
|
console.log(`[SESSION-DROPDOWN] Extracted working directory from events:`, workingDir);
|
|
143
143
|
}
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
// Format display: working_directory | session_id...
|
|
146
146
|
const shortId = session.id.substring(0, 8);
|
|
147
147
|
const dirDisplay = workingDir || defaultWorkingDir;
|
|
@@ -220,8 +220,8 @@ class SessionManager {
|
|
|
220
220
|
// Use browser-compatible fallback for working directory
|
|
221
221
|
// WHY: Removed process.cwd() Node.js reference - not available in browser
|
|
222
222
|
// BROWSER FIX: Use dashboard manager or server-provided config
|
|
223
|
-
let workingDir = window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir() ||
|
|
224
|
-
window.dashboardConfig?.workingDirectory ||
|
|
223
|
+
let workingDir = window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir() ||
|
|
224
|
+
window.dashboardConfig?.workingDirectory ||
|
|
225
225
|
'.';
|
|
226
226
|
let gitBranch = 'Unknown';
|
|
227
227
|
|
|
@@ -236,9 +236,9 @@ class SessionManager {
|
|
|
236
236
|
if (this.currentSessionId) {
|
|
237
237
|
const sessionData = this.extractSessionInfoFromEvents(this.currentSessionId);
|
|
238
238
|
// Browser-compatible working directory fallback
|
|
239
|
-
workingDir = sessionData.workingDir ||
|
|
240
|
-
window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir() ||
|
|
241
|
-
window.dashboardConfig?.workingDirectory ||
|
|
239
|
+
workingDir = sessionData.workingDir ||
|
|
240
|
+
window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir() ||
|
|
241
|
+
window.dashboardConfig?.workingDirectory ||
|
|
242
242
|
'.';
|
|
243
243
|
gitBranch = sessionData.gitBranch || 'Unknown';
|
|
244
244
|
}
|
|
@@ -62,7 +62,7 @@ class UIStateManager {
|
|
|
62
62
|
|
|
63
63
|
this.setupEventHandlers();
|
|
64
64
|
console.log('UI state manager initialized with hash navigation');
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
// Initialize with current hash
|
|
67
67
|
this.handleHashChange();
|
|
68
68
|
}
|
|
@@ -114,16 +114,16 @@ class UIStateManager {
|
|
|
114
114
|
console.log('[Hash Navigation] - Is hash in mapping?', hash in this.hashToTab);
|
|
115
115
|
console.log('[Hash Navigation] - Hash length:', hash.length);
|
|
116
116
|
console.log('[Hash Navigation] - Hash char codes:', hash.split('').map(c => c.charCodeAt(0)));
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
const tabName = this.hashToTab[hash] || 'events';
|
|
119
119
|
console.log('[Hash Navigation] Final resolved tab name:', tabName);
|
|
120
|
-
|
|
120
|
+
|
|
121
121
|
// Special logging for File Tree tab
|
|
122
122
|
if (tabName === 'claude-tree' || hash === '#file_tree') {
|
|
123
123
|
console.log('[UIStateManager] FILE TREE TAB SELECTED via hash:', hash);
|
|
124
124
|
console.log('[UIStateManager] Tab name resolved to:', tabName);
|
|
125
125
|
}
|
|
126
|
-
|
|
126
|
+
|
|
127
127
|
this.switchTab(tabName, false); // false = don't update hash (we're responding to hash change)
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -143,11 +143,11 @@ class UIStateManager {
|
|
|
143
143
|
document.querySelectorAll('.tab-button').forEach(button => {
|
|
144
144
|
button.addEventListener('click', (e) => {
|
|
145
145
|
console.log('[UIStateManager] Tab button clicked:', e.target);
|
|
146
|
-
|
|
146
|
+
|
|
147
147
|
// Prevent default only if we're going to handle it
|
|
148
148
|
const tabName = this.getTabNameFromButton(e.target);
|
|
149
149
|
console.log('[UIStateManager] Resolved tab name:', tabName);
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
if (tabName) {
|
|
152
152
|
// Let the href attribute update the hash naturally, which will trigger our hashchange handler
|
|
153
153
|
// But also explicitly trigger the switch in case href doesn't work
|
|
@@ -161,7 +161,7 @@ class UIStateManager {
|
|
|
161
161
|
}
|
|
162
162
|
});
|
|
163
163
|
});
|
|
164
|
-
|
|
164
|
+
|
|
165
165
|
console.log('[UIStateManager] Tab click handlers set up for', document.querySelectorAll('.tab-button').length, 'buttons');
|
|
166
166
|
}
|
|
167
167
|
|
|
@@ -197,7 +197,7 @@ class UIStateManager {
|
|
|
197
197
|
console.log('[getTabNameFromButton] DEBUG: button object:', button);
|
|
198
198
|
console.log('[getTabNameFromButton] DEBUG: button.nodeType:', button.nodeType);
|
|
199
199
|
console.log('[getTabNameFromButton] DEBUG: button.tagName:', button.tagName);
|
|
200
|
-
|
|
200
|
+
|
|
201
201
|
// CRITICAL FIX: Make sure we're dealing with the actual button element
|
|
202
202
|
// Sometimes the click target might be a child element (like the emoji icon)
|
|
203
203
|
let targetButton = button;
|
|
@@ -205,29 +205,29 @@ class UIStateManager {
|
|
|
205
205
|
targetButton = button.closest('.tab-button');
|
|
206
206
|
console.log('[getTabNameFromButton] DEBUG: Used closest() to find actual button');
|
|
207
207
|
}
|
|
208
|
-
|
|
208
|
+
|
|
209
209
|
// First check for data-tab attribute
|
|
210
210
|
const dataTab = targetButton ? targetButton.getAttribute('data-tab') : null;
|
|
211
211
|
console.log('[getTabNameFromButton] DEBUG: data-tab attribute:', dataTab);
|
|
212
212
|
console.log('[getTabNameFromButton] DEBUG: dataTab truthy:', !!dataTab);
|
|
213
|
-
|
|
213
|
+
|
|
214
214
|
// CRITICAL: Specifically handle the File Tree case
|
|
215
215
|
if (dataTab === 'claude-tree') {
|
|
216
216
|
console.log('[getTabNameFromButton] DEBUG: Found claude-tree data-tab, returning it');
|
|
217
217
|
return 'claude-tree';
|
|
218
218
|
}
|
|
219
|
-
|
|
219
|
+
|
|
220
220
|
if (dataTab) {
|
|
221
221
|
console.log('[getTabNameFromButton] DEBUG: Returning dataTab:', dataTab);
|
|
222
222
|
return dataTab;
|
|
223
223
|
}
|
|
224
|
-
|
|
224
|
+
|
|
225
225
|
// Fallback to text content matching
|
|
226
226
|
const text = targetButton ? targetButton.textContent.toLowerCase() : '';
|
|
227
227
|
console.log('[getTabNameFromButton] DEBUG: text content:', text);
|
|
228
228
|
console.log('[getTabNameFromButton] DEBUG: text includes file tree:', text.includes('file tree'));
|
|
229
229
|
console.log('[getTabNameFromButton] DEBUG: text includes events:', text.includes('events'));
|
|
230
|
-
|
|
230
|
+
|
|
231
231
|
// CRITICAL: Check File Tree FIRST since it's the problematic one
|
|
232
232
|
if (text.includes('file tree') || text.includes('📝')) {
|
|
233
233
|
console.log('[getTabNameFromButton] DEBUG: Matched file tree, returning claude-tree');
|
|
@@ -241,7 +241,7 @@ class UIStateManager {
|
|
|
241
241
|
if (text.includes('sessions')) return 'sessions';
|
|
242
242
|
if (text.includes('system')) return 'system';
|
|
243
243
|
if (text.includes('events') || text.includes('📊')) return 'events';
|
|
244
|
-
|
|
244
|
+
|
|
245
245
|
console.log('[getTabNameFromButton] DEBUG: No match, falling back to events');
|
|
246
246
|
return 'events';
|
|
247
247
|
}
|