claude-mpm 4.2.15__tar.gz → 4.2.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/PKG-INFO +1 -1
- claude_mpm-4.2.16/VERSION +1 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/pyproject.toml +2 -2
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/monitor.py +27 -6
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/built/components/session-manager.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/built/components/working-directory.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/built/dashboard.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/built/socket-client.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/dist/components/code-tree.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/dist/components/file-viewer.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/dist/dashboard.js +2 -0
- claude_mpm-4.2.16/src/claude_mpm/dashboard/static/dist/socket-client.js +2 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/daemon.py +65 -2
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/server.py +2 -1
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm.egg-info/PKG-INFO +1 -1
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm.egg-info/SOURCES.txt +1 -0
- claude_mpm-4.2.15/VERSION +0 -1
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm-4.2.15/src/claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/BUILD_NUMBER +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/CLAUDE.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/LICENSE +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/MANIFEST.in +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/README.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/scripts/ticket +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/setup.cfg +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/BUILD_NUMBER +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/VERSION +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/__main__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/BASE_DOCUMENTATION.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/BASE_ENGINEER.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/BASE_OPS.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/BASE_PM.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/BASE_QA.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/BASE_RESEARCH.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/INSTRUCTIONS.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/MEMORY.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/OUTPUT_STYLE.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/WORKFLOW.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/agent-template.yaml +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/agent_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/agent_loader_integration.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/agents_metadata.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/async_agent_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/base_agent.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/base_agent_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/frontmatter_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/system_agent_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/agent-manager.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/agent-manager.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/agentic_coder_optimizer.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/api_qa.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/code_analyzer.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/data_engineer.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/documentation.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/engineer.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/gcp_ops_agent.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/imagemagick.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/memory_manager.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/ops.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/project_organizer.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/qa.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/refactoring_engineer.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/research.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/security.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/test-non-mpm.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/ticketing.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/vercel_ops_agent.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/version_control.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/web_qa.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/agents/templates/web_ui.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/__main__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/agent_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/agents.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/aggregate.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/analyze.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/analyze_code.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/cleanup.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/cleanup_orphaned_agents.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/configure.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/configure_tui.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/dashboard.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/debug.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/doctor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/info.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mcp.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mcp_command_router.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mcp_config_commands.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mcp_install_commands.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mcp_pipx_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mcp_server_commands.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mcp_tool_commands.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/memory.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mpm_init.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/mpm_init_handler.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/run.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/commands/tickets.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/agent_manager_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/agents_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/analyze_code_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/analyze_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/base_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/config_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/configure_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/dashboard_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/debug_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/mcp_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/memory_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/monitor_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/mpm_init_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/run_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/parsers/tickets_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/shared/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/shared/argument_patterns.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/shared/base_command.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/shared/error_handling.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/shared/output_formatters.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/startup_logging.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/ticket_cli.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli/utils.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli_module/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli_module/args.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli_module/commands.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/cli_module/migration_example.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/mpm-agents.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/mpm-config.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/mpm-doctor.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/mpm-help.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/mpm-init.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/mpm-status.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/mpm-tickets.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/commands/mpm.md +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/config/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/config/agent_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/config/experimental_features.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/config/paths.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/config/socketio_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/constants.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/agent_name_normalizer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/agent_registry.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/agent_session_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/base_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/cache.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/claude_runner.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/config_aliases.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/config_constants.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/constants.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/container.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/error_handler.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/exceptions.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/factories.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/file_utils.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/framework_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/hook_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/hook_performance_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/injectable_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/instruction_reinforcement_hook.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/interactive_session.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/interfaces.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/lazy.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/log_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/logger.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/logging_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/logging_utils.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/minimal_framework_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/mixins.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/oneshot_session.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/optimized_agent_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/optimized_startup.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/output_style_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/pm_hook_interceptor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/service_registry.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/session_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/shared/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/shared/config_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/shared/path_resolver.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/shared/singleton_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/socketio_pool.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/tool_access_control.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/types.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/typing_utils.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/unified_agent_registry.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/unified_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/core/unified_paths.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/analysis_runner.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/api/simple_directory.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/index.html +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/open_dashboard.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/activity-tree.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/agent-inference.js +0 -0
- {claude_mpm-4.2.15/src/claude_mpm/dashboard/static/dist → claude_mpm-4.2.16/src/claude_mpm/dashboard/static/built}/components/code-tree.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/code-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/event-processor.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/event-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/export-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.2.15/src/claude_mpm/dashboard/static/dist → claude_mpm-4.2.16/src/claude_mpm/dashboard/static/built}/components/file-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/hud-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -0
- {claude_mpm-4.2.15/src/claude_mpm/dashboard/static/dist → claude_mpm-4.2.16/src/claude_mpm/dashboard/static/built}/components/module-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/socket-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -0
- {claude_mpm-4.2.15/src/claude_mpm/dashboard/static/dist → claude_mpm-4.2.16/src/claude_mpm/dashboard/static/built}/components/unified-data-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/css/activity.css +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/css/code-tree.css +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/css/connection-status.css +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/css/dashboard.css +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/event-processor.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/export-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/activity-tree.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/agent-inference.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/build-tracker.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/code-simple.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/code-tree.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/code-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/connection-debug.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/event-processor.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/event-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/export-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/file-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/hud-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/module-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/session-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/socket-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/components/working-directory.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/connection-manager.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/dashboard.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/extension-error-handler.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/shared/event-bus.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/shared/logger.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/js/socket-client.js +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/test-simple.html +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/static/test_debug.html +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/templates/code_simple.html +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/templates/index.html +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/dashboard/test_dashboard.html +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/experimental/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/experimental/cli_enhancements.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/generators/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/generators/agent_profile_generator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/base_hook.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/connection_pool.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/event_handlers.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/hook_handler.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/hook_wrapper.sh +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/installer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/memory_integration.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/response_tracking.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/services/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/services/connection_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/services/state_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/services/subagent_processor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/claude_hooks/tool_analysis.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/memory_integration_hook.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/tool_call_interceptor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/hooks/validation_hooks.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/init.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/models/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/models/agent_definition.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/models/agent_session.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/schemas/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/scripts/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/scripts/claude-hook-handler.sh +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/scripts/mcp_server.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/scripts/mcp_wrapper.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/scripts/mpm_doctor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/scripts/start_activity_logging.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agent_capabilities_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/agent_builder.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_config_provider.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_configuration_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_definition_factory.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_deployment.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_discovery_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_environment_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_filesystem_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_format_converter.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_metrics_collector.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_operation_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_record_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_state_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_template_builder.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_version_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agent_versioning.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/agents_directory_resolver.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/async_agent_deployment.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/base_agent_locator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/config/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/config/deployment_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/config/deployment_config_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/deployment_config_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/deployment_results_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/deployment_type_detector.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/deployment_wrapper.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/facade/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/facade/deployment_facade.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/interface_adapter.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/lifecycle_health_checker.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/multi_source_deployment_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/processors/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/processors/agent_processor.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/results/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/results/deployment_metrics.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/results/deployment_result_builder.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/single_agent_deployer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/strategies/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/strategies/base_strategy.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/strategies/project_strategy.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/strategies/strategy_selector.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/strategies/system_strategy.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/strategies/user_strategy.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/system_instructions_deployer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/validation/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/validation/agent_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/validation/deployment_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/validation/template_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/deployment/validation/validation_result.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/loading/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/loading/agent_profile_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/loading/base_agent_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/loading/framework_agent_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/management/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/management/agent_capabilities_generator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/management/agent_management_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/agent_memory_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/agent_persistence_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/content_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/memory_categorization_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/memory_file_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/memory_format_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/memory_limits_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/memory/template_generator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/registry/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/registry/deployed_agent_discovery.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/agents/registry/modification_tracker.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/async_session_logger.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/claude_session_logger.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/agent_cleanup_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/agent_dependency_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/agent_listing_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/agent_output_formatter.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/agent_validation_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/memory_crud_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/memory_output_formatter.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/session_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/startup_checker.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/cli/unified_dashboard_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/command_deployment_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/command_handler_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/communication/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/base.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/cache_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/interfaces/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/interfaces/agent.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/interfaces/communication.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/interfaces/infrastructure.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/interfaces/service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/interfaces.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/memory_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/path_resolver.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/service_container.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/core/service_interfaces.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/agent_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/base_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/common_issues_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/configuration_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/filesystem_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/installation_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/instructions_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/mcp_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/monitor_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/checks/startup_log_check.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/diagnostic_runner.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/doctor_reporter.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/diagnostics/models.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/event_aggregator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/event_bus/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/event_bus/config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/event_bus/direct_relay.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/event_bus/event_bus.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/event_bus/relay.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/consumers/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/consumers/dead_letter.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/consumers/logging.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/consumers/metrics.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/consumers/socketio.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/core.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/interfaces.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/producers/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/producers/hook.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/events/producers/system.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/exceptions.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/content_assembler.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/content_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/deployment_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/header.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/section_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/framework_claude_md_generator/version_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/hook_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/context_preservation.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/daemon_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/logging.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring/aggregator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring/base.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring/legacy.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring/network.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring/process.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring/resources.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring/service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/infrastructure/monitoring.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/auto_configure.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/config/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/config/config_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/config/config_schema.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/config/configuration.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/core/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/core/base.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/core/exceptions.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/core/interfaces.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/core/process_pool.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/main.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/registry/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/server/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/tools/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory/builder.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory/cache/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory/cache/shared_prompt_cache.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory/cache/simple_cache.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory/indexed_memory.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory/optimizer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory/router.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/memory_hook_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/event_emitter.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/handlers/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/handlers/code_analysis.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/handlers/dashboard.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/handlers/file.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/handlers/hooks.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/management/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/management/health.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor/management/lifecycle.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/monitor_build_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/port_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/analyzer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/analyzer_refactored.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/analyzer_v2.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/architecture_analyzer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/dependency_analyzer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/language_analyzer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/metrics_collector.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/project/registry.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/recovery_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/response_tracker.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/runner_configuration_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/session_management_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/shared/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/shared/async_service_base.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/shared/config_service_base.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/shared/lifecycle_service_base.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/shared/manager_base.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/shared/service_factory.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/client_proxy.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/dashboard_server.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/event_normalizer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/base.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/code_analysis.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/connection.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/connection_handler.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/file.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/git.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/hook.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/memory.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/project.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/handlers/registry.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/migration_utils.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/monitor_client.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/server/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/server/broadcaster.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/server/connection_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/server/core.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/server/eventbus_integration.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio/server/main.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio_client_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/socketio_server.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/subprocess_launcher_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/system_instructions_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/ticket_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/ticket_services/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/ticket_services/crud_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/ticket_services/formatter_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/ticket_services/search_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/ticket_services/validation_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/ticket_services/workflow_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/utility_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/version_control/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/version_control/branch_strategy.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/version_control/conflict_resolution.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/version_control/git_operations.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/version_control/semantic_versioning.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/version_control/version_parser.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/version_service.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/visualization/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/services/visualization/mermaid_generator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/storage/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/storage/state_storage.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/ticket_wrapper.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/tools/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/tools/__main__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/tools/code_tree_analyzer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/tools/code_tree_builder.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/tools/code_tree_events.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/tools/socketio_debug.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/agent_dependency_loader.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/config_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/console.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/dependency_cache.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/dependency_manager.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/dependency_strategies.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/environment_context.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/error_handler.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/file_utils.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/framework_detection.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/import_migration_example.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/imports.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/path_operations.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/robust_installer.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/session_logging.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/utils/subprocess_utils.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/validation/__init__.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/validation/agent_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm/validation/frontmatter_validator.py +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm.egg-info/dependency_links.txt +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm.egg-info/entry_points.txt +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm.egg-info/requires.txt +0 -0
- {claude_mpm-4.2.15 → claude_mpm-4.2.16}/src/claude_mpm.egg-info/top_level.txt +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
4.2.16
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "claude-mpm"
|
7
|
-
version = "4.2.
|
7
|
+
version = "4.2.16"
|
8
8
|
description = "Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking"
|
9
9
|
readme = "README.md"
|
10
10
|
requires-python = ">=3.8"
|
@@ -248,7 +248,7 @@ ignore-imports = false
|
|
248
248
|
|
249
249
|
[tool.commitizen]
|
250
250
|
name = "cz_conventional_commits"
|
251
|
-
version = "4.2.
|
251
|
+
version = "4.2.16"
|
252
252
|
version_files = [
|
253
253
|
"VERSION",
|
254
254
|
"src/claude_mpm/VERSION",
|
@@ -116,14 +116,23 @@ class MonitorCommand(BaseCommand):
|
|
116
116
|
"""Stop the unified monitor daemon."""
|
117
117
|
self.logger.info("Stopping unified monitor daemon")
|
118
118
|
|
119
|
+
# Get parameters from args or use defaults
|
120
|
+
port = getattr(args, "port", None)
|
121
|
+
if port is None:
|
122
|
+
port = 8765 # Default to 8765 for unified monitor
|
123
|
+
host = getattr(args, "host", "localhost")
|
124
|
+
|
119
125
|
# Create daemon instance to check status and stop
|
120
|
-
daemon
|
126
|
+
# For stop, we need to know if it was started in daemon mode
|
127
|
+
# We default to daemon mode since that's the usual case
|
128
|
+
daemon_mode = True
|
129
|
+
daemon = UnifiedMonitorDaemon(host=host, port=port, daemon_mode=daemon_mode)
|
121
130
|
|
122
131
|
if not daemon.lifecycle.is_running():
|
123
132
|
return CommandResult.success_result("No unified monitor daemon running")
|
124
133
|
|
125
|
-
# Stop the daemon
|
126
|
-
if daemon.
|
134
|
+
# Stop the daemon
|
135
|
+
if daemon.stop():
|
127
136
|
return CommandResult.success_result("Unified monitor daemon stopped")
|
128
137
|
return CommandResult.error_result("Failed to stop unified monitor daemon")
|
129
138
|
|
@@ -131,12 +140,24 @@ class MonitorCommand(BaseCommand):
|
|
131
140
|
"""Restart the unified monitor daemon."""
|
132
141
|
self.logger.info("Restarting unified monitor daemon")
|
133
142
|
|
134
|
-
#
|
135
|
-
|
143
|
+
# Get parameters from args or use defaults
|
144
|
+
port = getattr(args, "port", None)
|
145
|
+
if port is None:
|
146
|
+
port = 8765 # Default to 8765 for unified monitor
|
147
|
+
host = getattr(args, "host", "localhost")
|
148
|
+
|
149
|
+
# For restart, default to daemon mode (the usual use case)
|
150
|
+
# unless explicitly running in foreground
|
151
|
+
daemon_mode = not getattr(args, "foreground", False)
|
152
|
+
|
153
|
+
# Create daemon instance with proper parameters
|
154
|
+
daemon = UnifiedMonitorDaemon(host=host, port=port, daemon_mode=daemon_mode)
|
136
155
|
|
137
156
|
# Restart the daemon
|
138
157
|
if daemon.restart():
|
139
|
-
return CommandResult.success_result(
|
158
|
+
return CommandResult.success_result(
|
159
|
+
f"Unified monitor daemon restarted on {host}:{port}"
|
160
|
+
)
|
140
161
|
return CommandResult.error_result("Failed to restart unified monitor daemon")
|
141
162
|
|
142
163
|
def _status_monitor(self, args) -> CommandResult:
|
@@ -0,0 +1,2 @@
|
|
1
|
+
class e{constructor(e){this.socketClient=e,this.sessions=new Map,this.currentSessionId=null,this.selectedSessionId="",this.init()}init(){this.setupEventHandlers(),this.setupSocketListeners(),this.updateSessionSelect()}setupEventHandlers(){const e=document.getElementById("session-select");e&&e.addEventListener("change",e=>{this.selectedSessionId=e.target.value,this.onSessionFilterChanged(),window.dashboard&&window.dashboard.loadWorkingDirectoryForSession&&window.dashboard.loadWorkingDirectoryForSession(e.target.value)});const s=document.querySelector('button[onclick="refreshSessions()"]');s&&s.addEventListener("click",()=>{this.refreshSessions()})}setupSocketListeners(){this.socketClient.onEventUpdate((e,s)=>{console.log("[SESSION-MANAGER] Received sessions update:",s),this.sessions=s,this.updateSessionSelect(),this.updateFooterInfo()}),document.addEventListener("socketConnectionStatus",e=>{"connected"===e.detail.type&&setTimeout(()=>this.refreshSessions(),1e3)})}updateSessionSelect(){const e=document.getElementById("session-select");if(!e)return;const s=e.value;let t="/";if(window.dashboard&&window.dashboard.workingDirectoryManager)t=window.dashboard.workingDirectoryManager.getDefaultWorkingDir();else{const e=document.getElementById("working-dir-path");if(e?.textContent?.trim()){const s=e.textContent.trim();"Loading..."!==s&&"Unknown"!==s&&(t=s)}}if(console.log("[SESSION-MANAGER] Using default working directory:",t),e.innerHTML=`\n <option value="">${t} | All Sessions</option>\n `,this.sessions&&this.sessions.size>0){Array.from(this.sessions.values()).sort((e,s)=>new Date(s.lastActivity||s.startTime)-new Date(e.lastActivity||e.startTime)).forEach(s=>{const n=document.createElement("option");n.value=s.id,new Date(s.startTime||s.last_activity).toLocaleString(),s.eventCount||s.event_count;const o=s.id===this.currentSessionId;let i=s.working_directory||s.workingDirectory||"";if(console.log(`[SESSION-DROPDOWN] Session ${s.id.substring(0,8)} working_directory:`,i),!i){i=this.extractSessionInfoFromEvents(s.id).workingDir||t,console.log("[SESSION-DROPDOWN] Extracted working directory from events:",i)}const r=s.id.substring(0,8),a=i||t;n.textContent=`${a} | ${r}...${o?" [ACTIVE]":""}`,e.appendChild(n)})}s&&Array.from(e.options).some(e=>e.value===s)?(e.value=s,this.selectedSessionId=s,this.onSessionFilterChanged()):(this.selectedSessionId=e.value,this.selectedSessionId&&this.onSessionFilterChanged())}onSessionFilterChanged(){const e=window.eventViewer;e&&e.setSessionFilter(this.selectedSessionId),this.updateFooterInfo(),document.dispatchEvent(new CustomEvent("sessionFilterChanged",{detail:{sessionId:this.selectedSessionId}})),document.dispatchEvent(new CustomEvent("sessionChanged",{detail:{sessionId:this.selectedSessionId}}))}refreshSessions(){this.socketClient&&this.socketClient.getConnectionState().isConnected?(console.log("Refreshing sessions..."),this.socketClient.requestStatus()):console.warn("Cannot refresh sessions: not connected to server")}updateFooterInfo(){console.log("[SESSION-DEBUG] updateFooterInfo called, selectedSessionId:",this.selectedSessionId);const e=document.getElementById("footer-session"),s=document.getElementById("footer-working-dir"),t=document.getElementById("footer-git-branch");if(!e)return void console.warn("[SESSION-DEBUG] footer-session element not found");let n="All Sessions",o=window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir()||window.dashboardConfig?.workingDirectory||".",i="Unknown";if(console.log("[SESSION-DEBUG] Initial values - sessionInfo:",n,"workingDir:",o,"gitBranch:",i),"current"===this.selectedSessionId){if(n=this.currentSessionId?`Current: ${this.currentSessionId.substring(0,8)}...`:"Current: None",this.currentSessionId){const e=this.extractSessionInfoFromEvents(this.currentSessionId);o=e.workingDir||window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir()||window.dashboardConfig?.workingDirectory||".",i=e.gitBranch||"Unknown"}}else if(this.selectedSessionId){const e=this.sessions.get(this.selectedSessionId);if(e&&(n=`${this.selectedSessionId.substring(0,8)}...`,o=e.working_directory||e.workingDirectory||"",i=e.git_branch||e.gitBranch||"",!o||!i)){const e=this.extractSessionInfoFromEvents(this.selectedSessionId);o=o||e.workingDir||window.dashboardConfig?.workingDirectory||".",i=i||e.gitBranch||""}}console.log("[SESSION-DEBUG] Final values before setting footer - sessionInfo:",n,"workingDir:",o,"gitBranch:",i),e.textContent=n,s?(console.log("[SESSION-DEBUG] Setting footer working dir to:",o),s.textContent=o):console.warn("[SESSION-DEBUG] footer-working-dir element not found"),t?(console.log("[SESSION-DEBUG] Setting footer git branch to:",i),t.textContent=i):console.warn("[SESSION-DEBUG] footer-git-branch element not found")}extractSessionInfoFromEvents(e){let s="",t="";console.log(`[DEBUG] extractSessionInfoFromEvents called for sessionId: ${e}`);const n=this.socketClient;if(n&&n.events){console.log(`[DEBUG] Total events available: ${n.events.length}`);const o=n.events.filter(s=>s.data&&s.data.session_id===e);console.log(`[DEBUG] Events matching sessionId ${e}: ${o.length}`),o.length>0&&(console.log(`[DEBUG] Sample events for session ${e}:`),o.slice(0,3).forEach((e,s)=>{console.log(`[DEBUG] Event ${s+1}:`,{type:e.type,timestamp:e.timestamp,data_keys:e.data?Object.keys(e.data):"no data",full_event:e})}),o.length>3&&(console.log(`[DEBUG] Last 3 events for session ${e}:`),o.slice(-3).forEach((e,s)=>{console.log(`[DEBUG] Last Event ${s+1}:`,{type:e.type,timestamp:e.timestamp,data_keys:e.data?Object.keys(e.data):"no data",full_event:e})})));for(let e=o.length-1;e>=0;e--){const n=o[e];if(n.data){if(console.log(`[DEBUG] Examining event ${e} data:`,n.data),s||(n.data.working_directory?(s=n.data.working_directory,console.log(`[DEBUG] Found working_directory: ${s}`)):n.data.cwd?(s=n.data.cwd,console.log(`[DEBUG] Found cwd: ${s}`)):n.data.instance_info&&n.data.instance_info.working_dir&&(s=n.data.instance_info.working_dir,console.log(`[DEBUG] Found instance_info.working_dir: ${s}`))),!t){const e=["git_branch","gitBranch","branch","git.branch","vcs_branch","current_branch"];for(const s of e)if(n.data[s]){t=n.data[s],console.log(`[DEBUG] Found git branch in field '${s}': ${t}`);break}if(!t){if(n.data.instance_info){console.log("[DEBUG] Checking instance_info for branch:",n.data.instance_info);for(const s of e)if(n.data.instance_info[s]){t=n.data.instance_info[s],console.log(`[DEBUG] Found git branch in instance_info.${s}: ${t}`);break}}!t&&n.data.git&&(console.log("[DEBUG] Checking git object:",n.data.git),n.data.git.branch&&(t=n.data.git.branch,console.log(`[DEBUG] Found git branch in git.branch: ${t}`)))}}if(s&&t){console.log("[DEBUG] Found both workingDir and gitBranch, stopping search");break}}}}else console.log("[DEBUG] No socket client or events available");return console.log(`[DEBUG] Final results - workingDir: '${s}', gitBranch: '${t}'`),{workingDir:s,gitBranch:t}}setCurrentSessionId(e){this.currentSessionId=e,this.updateSessionSelect(),this.updateFooterInfo()}addSession(e){if(!e.id)return;const s=this.sessions.get(e.id);s?Object.assign(s,e):this.sessions.set(e.id,{id:e.id,startTime:e.startTime||e.start_time||(new Date).toISOString(),lastActivity:e.lastActivity||e.last_activity||(new Date).toISOString(),eventCount:e.eventCount||e.event_count||0,working_directory:e.working_directory||e.workingDirectory||"",git_branch:e.git_branch||e.gitBranch||"",agent_type:e.agent_type||e.agentType||"",...e}),this.updateSessionSelect()}removeSession(e){if(this.sessions.has(e)){if(this.sessions.delete(e),this.selectedSessionId===e){this.selectedSessionId="";const e=document.getElementById("session-select");e&&(e.value=""),this.onSessionFilterChanged()}this.updateSessionSelect()}}getCurrentFilter(){return this.selectedSessionId}getSession(e){return this.sessions.get(e)||null}getAllSessions(){return this.sessions}getCurrentSessionId(){return this.currentSessionId}clearSessions(){this.sessions.clear(),this.currentSessionId=null,this.selectedSessionId="",this.updateSessionSelect(),this.updateFooterInfo()}exportSessionData(){return{sessions:Array.from(this.sessions.entries()),currentSessionId:this.currentSessionId,selectedSessionId:this.selectedSessionId}}importSessionData(e){e.sessions&&Array.isArray(e.sessions)&&(this.sessions.clear(),e.sessions.forEach(([e,s])=>{this.sessions.set(e,s)})),e.currentSessionId&&(this.currentSessionId=e.currentSessionId),void 0!==e.selectedSessionId&&(this.selectedSessionId=e.selectedSessionId),this.updateSessionSelect(),this.updateFooterInfo()}getEventsForSession(e){if(!e||!this.socketClient)return[];return(this.socketClient.events||[]).filter(s=>(s.session_id||s.data&&s.data.session_id||null)===e)}}window.refreshSessions=function(){window.sessionManager&&window.sessionManager.refreshSessions()},window.SessionManager=e;export{e as S};
|
2
|
+
//# sourceMappingURL=session-manager.js.map
|
@@ -0,0 +1,2 @@
|
|
1
|
+
class e{constructor(e){this.socketManager=e,this.currentWorkingDir=null,this.footerDirObserver=null,this._updatingFooter=!1,this.setupEventHandlers(),this.initialize(),console.log("Working directory manager initialized")}initialize(){this.initializeWorkingDirectory(),this.watchFooterDirectory()}setupEventHandlers(){const e=document.getElementById("change-dir-btn"),t=document.getElementById("working-dir-path");if(e&&e.addEventListener("click",()=>{this.showChangeDirDialog()}),t&&t.addEventListener("click",e=>{e.shiftKey?this.showChangeDirDialog():this.showWorkingDirectoryViewer()}),document.addEventListener("sessionChanged",e=>{const t=e.detail.sessionId;console.log("[WORKING-DIR-DEBUG] sessionChanged event received, sessionId:",this.repr(t)),t&&this.loadWorkingDirectoryForSession(t)}),this.socketManager&&this.socketManager.getSocket){const e=this.socketManager.getSocket();e&&(console.log("[WORKING-DIR-DEBUG] Setting up git_branch_response listener"),e.on("git_branch_response",e=>{console.log("[GIT-BRANCH-DEBUG] Received git_branch_response:",e),this.handleGitBranchResponse(e)}))}}initializeWorkingDirectory(){const e=document.getElementById("working-dir-path");e&&!e.textContent.trim()&&(e.textContent="Loading...");const t=document.getElementById("session-select");t&&t.value&&"all"!==t.value?this.loadWorkingDirectoryForSession(t.value):this.setWorkingDirectory(this.getDefaultWorkingDir())}watchFooterDirectory(){const e=document.getElementById("footer-working-dir");e&&(this.footerDirObserver=new MutationObserver(t=>{this._updatingFooter||t.forEach(t=>{if("childList"===t.type||"characterData"===t.type){const t=e.textContent.trim();console.log("Footer directory changed to:",t),t&&t!==this.currentWorkingDir&&(console.log("Syncing working directory from footer change"),this.setWorkingDirectory(t))}})}),this.footerDirObserver.observe(e,{childList:!0,characterData:!0,subtree:!0}),console.log("Started watching footer directory for changes"))}loadWorkingDirectoryForSession(e){if(console.log("[WORKING-DIR-DEBUG] loadWorkingDirectoryForSession called with sessionId:",this.repr(e)),!e||"all"===e){console.log('[WORKING-DIR-DEBUG] No sessionId or sessionId is "all", using default working dir');const e=this.getDefaultWorkingDir();return console.log("[WORKING-DIR-DEBUG] Default working dir:",this.repr(e)),void this.setWorkingDirectory(e)}const t=JSON.parse(localStorage.getItem("sessionWorkingDirs")||"{}");console.log("[WORKING-DIR-DEBUG] Session directories from localStorage:",t);const r=t[e],o=this.getDefaultWorkingDir(),i=r||o;console.log("[WORKING-DIR-DEBUG] Directory selection:",{sessionId:e,sessionDir:this.repr(r),defaultDir:this.repr(o),finalDir:this.repr(i)}),this.setWorkingDirectory(i)}setWorkingDirectory(e){console.log("[WORKING-DIR-DEBUG] setWorkingDirectory called with:",this.repr(e)),this.currentWorkingDir=e;const t=document.getElementById("working-dir-path");t?(console.log("[WORKING-DIR-DEBUG] Updating UI path element to:",e),t.textContent=e):console.warn("[WORKING-DIR-DEBUG] working-dir-path element not found");const r=document.getElementById("footer-working-dir");if(r){const t=r.textContent;console.log("[WORKING-DIR-DEBUG] Footer directory current text:",this.repr(t),"new text:",this.repr(e)),t!==e?(this._updatingFooter=!0,r.textContent=e,console.log("[WORKING-DIR-DEBUG] Updated footer directory to:",e),setTimeout(()=>{this._updatingFooter=!1,console.log("[WORKING-DIR-DEBUG] Cleared _updatingFooter flag")},100)):console.log("[WORKING-DIR-DEBUG] Footer directory already has correct text")}else console.warn("[WORKING-DIR-DEBUG] footer-working-dir element not found");const o=document.getElementById("session-select");if(o&&o.value&&"all"!==o.value){const t=o.value,r=JSON.parse(localStorage.getItem("sessionWorkingDirs")||"{}");r[t]=e,localStorage.setItem("sessionWorkingDirs",JSON.stringify(r)),console.log(`[WORKING-DIR-DEBUG] Saved working directory for session ${t}:`,e)}else console.log('[WORKING-DIR-DEBUG] No session selected or session is "all", not saving to localStorage');console.log("[WORKING-DIR-DEBUG] About to call updateGitBranch with:",this.repr(e)),this.validateDirectoryPath(e)?this.updateGitBranch(e):console.log("[WORKING-DIR-DEBUG] Skipping git branch update for invalid directory:",this.repr(e)),document.dispatchEvent(new CustomEvent("workingDirectoryChanged",{detail:{directory:e}})),console.log("[WORKING-DIR-DEBUG] Working directory set to:",e)}updateGitBranch(e){if(console.log("[GIT-BRANCH-DEBUG] updateGitBranch called with dir:",this.repr(e),"type:",typeof e),!this.socketManager||!this.socketManager.isConnected()){console.log("[GIT-BRANCH-DEBUG] Not connected to socket server");const e=document.getElementById("footer-git-branch");return void(e&&(e.textContent="Not Connected",e.style.display="inline"))}const t=this.validateDirectoryPath(e),r="Loading..."===e||"Loading"===e,o="Unknown"===e,i=!e||"string"==typeof e&&""===e.trim();if(console.log("[GIT-BRANCH-DEBUG] Validation results:",{dir:e,isValidPath:t,isLoadingState:r,isUnknown:o,isEmptyOrWhitespace:i,shouldReject:!t||r||o||i}),!t||r||o||i){console.warn("[GIT-BRANCH-DEBUG] Invalid working directory for git branch request:",e);const t=document.getElementById("footer-git-branch");return void(t&&(t.textContent=r?"Loading...":o||i?"No Directory":"Invalid Directory",t.style.display="inline"))}const n=this.socketManager.getSocket();n?(console.log("[GIT-BRANCH-DEBUG] Requesting git branch for directory:",e),console.log("[GIT-BRANCH-DEBUG] Socket state:",{connected:n.connected,id:n.id}),n.emit("get_git_branch",e)):console.error("[GIT-BRANCH-DEBUG] No socket available for git branch request")}getDefaultWorkingDir(){if(console.log("[WORKING-DIR-DEBUG] getDefaultWorkingDir called"),this.currentWorkingDir&&this.validateDirectoryPath(this.currentWorkingDir))return console.log("[WORKING-DIR-DEBUG] Using current working directory:",this.currentWorkingDir),this.currentWorkingDir;const e=document.querySelector(".working-dir-text");if(e?.textContent?.trim()){const t=e.textContent.trim();if("Loading..."!==t&&"Unknown"!==t&&this.validateDirectoryPath(t))return console.log("[WORKING-DIR-DEBUG] Using header working directory:",t),t}const t=document.getElementById("footer-working-dir");if(t?.textContent?.trim()){const e=t.textContent.trim();console.log("[WORKING-DIR-DEBUG] Footer path found:",this.repr(e));const r="Unknown"===e,o=this.validateDirectoryPath(e);if(console.log("[WORKING-DIR-DEBUG] Footer path validation:",{footerPath:this.repr(e),isUnknown:r,isValid:o,shouldUse:!r&&o}),!r&&o)return console.log("[WORKING-DIR-DEBUG] Using footer path as default:",e),e}else console.log("[WORKING-DIR-DEBUG] No footer directory element or no text content");if(window.socketClient&&window.socketClient.events){const e=window.socketClient.events.filter(e=>e.data&&(e.data.working_directory||e.data.cwd||e.data.working_dir)).reverse();if(e.length>0){const t=e[0],r=t.data.working_directory||t.data.cwd||t.data.working_dir;return console.log("[WORKING-DIR-DEBUG] Using working directory from recent event:",r),r}}const r=document.getElementById("working-dir-path");if(r?.textContent?.trim()){const e=r.textContent.trim();if(console.log("[WORKING-DIR-DEBUG] Found working-dir-path element text:",this.repr(e)),"Unknown"!==e&&this.validateDirectoryPath(e))return console.log("[WORKING-DIR-DEBUG] Using working-dir-path as fallback:",e),e}const o=(window.location.hostname,"/");return console.log("[WORKING-DIR-DEBUG] Using generic fallback directory:",this.repr(o)),o}showChangeDirDialog(){const e=prompt("Enter new working directory:",this.currentWorkingDir||"");e&&""!==e.trim()&&this.setWorkingDirectory(e.trim())}showWorkingDirectoryViewer(){this.createDirectoryViewerOverlay()}createDirectoryViewerOverlay(){this.removeDirectoryViewerOverlay();const e=document.querySelector(".working-dir-display");if(!e)return;const t=document.createElement("div");t.id="directory-viewer-overlay",t.className="directory-viewer-overlay",t.innerHTML=`\n <div class="directory-viewer-content">\n <div class="directory-viewer-header">\n <h3 class="directory-viewer-title">\n 📁 ${this.currentWorkingDir||"Working Directory"}\n </h3>\n <button class="close-btn" onclick="workingDirectoryManager.removeDirectoryViewerOverlay()">✕</button>\n </div>\n <div class="directory-viewer-body">\n <div class="loading-indicator">Loading directory contents...</div>\n </div>\n <div class="directory-viewer-footer">\n <span class="directory-hint">Click file to view • Shift+Click directory path to change</span>\n </div>\n </div>\n `;const r=e.getBoundingClientRect();t.style.cssText=`\n position: fixed;\n top: ${r.bottom+5}px;\n left: ${r.left}px;\n min-width: 400px;\n max-width: 600px;\n max-height: 400px;\n z-index: 1001;\n background: white;\n border-radius: 8px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);\n border: 1px solid #e2e8f0;\n `,document.body.appendChild(t),this.loadDirectoryContents(),setTimeout(()=>{document.addEventListener("click",this.handleOutsideClick.bind(this),!0)},100)}removeDirectoryViewerOverlay(){const e=document.getElementById("directory-viewer-overlay");e&&(e.remove(),document.removeEventListener("click",this.handleOutsideClick.bind(this),!0))}handleOutsideClick(e){const t=document.getElementById("directory-viewer-overlay"),r=document.getElementById("working-dir-path");t&&!t.contains(e.target)&&e.target!==r&&this.removeDirectoryViewerOverlay()}loadDirectoryContents(){if(!this.socketManager||!this.socketManager.isConnected())return void this.showDirectoryError("Not connected to server");const e=this.socketManager.getSocket();if(!e)return void this.showDirectoryError("No socket connection available");e.emit("get_directory_listing",{directory:this.currentWorkingDir,limit:50});const t=r=>{e.off("directory_listing_response",t),this.handleDirectoryListingResponse(r)};e.on("directory_listing_response",t),setTimeout(()=>{e.off("directory_listing_response",t);const r=document.getElementById("directory-viewer-overlay");r&&r.querySelector(".loading-indicator")&&this.showDirectoryError("Request timeout")},5e3)}handleDirectoryListingResponse(e){const t=document.querySelector(".directory-viewer-body");if(!t)return;if(!e.success)return void this.showDirectoryError(e.error||"Failed to load directory");const r=e.files||[],o=e.directories||[];let i="";if(this.currentWorkingDir&&"/"!==this.currentWorkingDir){const e=this.currentWorkingDir.split("/").slice(0,-1).join("/")||"/";i+=`\n <div class="file-item directory-item" onclick="workingDirectoryManager.setWorkingDirectory('${e}')">\n <span class="file-icon">📁</span>\n <span class="file-name">..</span>\n <span class="file-type">parent directory</span>\n </div>\n `}o.forEach(e=>{const t=`${this.currentWorkingDir}/${e}`.replace(/\/+/g,"/");i+=`\n <div class="file-item directory-item" onclick="workingDirectoryManager.setWorkingDirectory('${t}')">\n <span class="file-icon">📁</span>\n <span class="file-name">${e}</span>\n <span class="file-type">directory</span>\n </div>\n `}),r.forEach(e=>{const t=`${this.currentWorkingDir}/${e}`.replace(/\/+/g,"/"),r=e.split(".").pop().toLowerCase(),o=this.getFileIcon(r);i+=`\n <div class="file-item" onclick="workingDirectoryManager.viewFile('${t}')">\n <span class="file-icon">${o}</span>\n <span class="file-name">${e}</span>\n <span class="file-type">${r}</span>\n </div>\n `}),""===i&&(i='<div class="no-files">Empty directory</div>'),t.innerHTML=i}showDirectoryError(e){const t=document.querySelector(".directory-viewer-body");t&&(t.innerHTML=`\n <div class="directory-error">\n <span class="error-icon">⚠️</span>\n <span class="error-message">${e}</span>\n </div>\n `)}getFileIcon(e){return{js:"📄",py:"🐍",html:"🌐",css:"🎨",json:"📋",md:"📝",txt:"📝",yml:"⚙️",yaml:"⚙️",xml:"📄",pdf:"📕",png:"🖼️",jpg:"🖼️",jpeg:"🖼️",gif:"🖼️",svg:"🖼️",zip:"📦",tar:"📦",gz:"📦",sh:"🔧",bat:"🔧",exe:"⚙️",dll:"⚙️"}[e]||"📄"}viewFile(e){this.removeDirectoryViewerOverlay(),window.showFileViewerModal?window.showFileViewerModal(e):console.warn("File viewer modal function not available")}getCurrentWorkingDir(){return this.currentWorkingDir}getSessionDirectories(){return JSON.parse(localStorage.getItem("sessionWorkingDirs")||"{}")}setSessionDirectory(e,t){const r=this.getSessionDirectories();r[e]=t,localStorage.setItem("sessionWorkingDirs",JSON.stringify(r));const o=document.getElementById("session-select");o&&o.value===e&&this.setWorkingDirectory(t)}removeSessionDirectory(e){const t=this.getSessionDirectories();delete t[e],localStorage.setItem("sessionWorkingDirs",JSON.stringify(t))}clearAllSessionDirectories(){localStorage.removeItem("sessionWorkingDirs")}extractWorkingDirectoryFromPair(e){return e.pre?.working_dir?e.pre.working_dir:e.post?.working_dir?e.post.working_dir:e.pre?.data?.working_dir?e.pre.data.working_dir:e.post?.data?.working_dir?e.post.data.working_dir:this.currentWorkingDir||this.getDefaultWorkingDir()}validateDirectoryPath(e){if(!e||"string"!=typeof e)return!1;const t=e.trim();if(0===t.length)return!1;if(t.includes("\0"))return!1;return!["Loading...","Loading","Unknown","undefined","null","Not Connected","Invalid Directory","No Directory"].includes(t)&&(!(!t.startsWith("/")&&!/^[A-Za-z]:/.test(t))||!!(t.startsWith("./")||t.startsWith("../")||/^[a-zA-Z0-9._-]+/.test(t)))}handleGitBranchResponse(e){console.log("[GIT-BRANCH-DEBUG] handleGitBranchResponse called with:",e);const t=document.getElementById("footer-git-branch");if(t){if(e.success)console.log("[GIT-BRANCH-DEBUG] Git branch request successful, branch:",e.branch),t.textContent=e.branch,t.style.display="inline",t.classList.remove("git-error"),t.classList.add("git-success");else{let r="Git Error";const o=e.error||"Unknown error";r=o.includes("Directory not found")||o.includes("does not exist")?"Dir Not Found":o.includes("Not a directory")?"Invalid Path":o.includes("Not a git repository")?"No Git Repo":o.includes("git")?"Git Error":"Unknown",console.log("[GIT-BRANCH-DEBUG] Git branch request failed:",o,"- showing as:",r),t.textContent=r,t.style.display="inline",t.classList.remove("git-success"),t.classList.add("git-error")}e.original_working_dir&&console.log("[GIT-BRANCH-DEBUG] Server received original working_dir:",this.repr(e.original_working_dir)),e.working_dir&&console.log("[GIT-BRANCH-DEBUG] Server used working_dir:",this.repr(e.working_dir)),e.git_error&&console.log("[GIT-BRANCH-DEBUG] Git command stderr:",e.git_error)}else console.warn("[GIT-BRANCH-DEBUG] footer-git-branch element not found")}isWorkingDirectoryReady(){const e=this.getCurrentWorkingDir();return this.validateDirectoryPath(e)&&"Loading..."!==e&&"Unknown"!==e}whenDirectoryReady(e,t=5e3){const r=Date.now(),o=()=>{this.isWorkingDirectoryReady()?e():Date.now()-r<t?setTimeout(o,100):console.warn("[WORKING-DIR-DEBUG] Timeout waiting for directory to be ready")};o()}repr(e){return null===e?"null":void 0===e?"undefined":"string"==typeof e?`"${e}"`:String(e)}cleanup(){this.footerDirObserver&&(this.footerDirObserver.disconnect(),this.footerDirObserver=null),console.log("Working directory manager cleaned up")}}export{e as W};
|
2
|
+
//# sourceMappingURL=working-directory.js.map
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{S as e,U as t}from"./socket-client.js";import{E as n,a as i}from"./components/event-viewer.js";import{M as s}from"./components/module-viewer.js";import{S as o}from"./components/session-manager.js";import{A as r}from"./components/agent-inference.js";import{E as a}from"./components/export-manager.js";import{W as l}from"./components/working-directory.js";import{F as c}from"./components/file-tool-tracker.js";import"./components/unified-data-viewer.js";class d{constructor(e,t){this.agentInference=e,this.eventViewer=t,this.state={hierarchyTree:null,nodeMap:new Map,expandedNodes:new Set,selectedNode:null},this.expandAll=!0,this.setupEventListeners(),console.log("Agent hierarchy component initialized")}setupEventListeners(){document.addEventListener("click",e=>{const t=e.target.closest("[data-toggle-node]");if(t&&window.dashboard&&window.dashboard.agentHierarchy){const e=t.dataset.toggleNode;window.dashboard.agentHierarchy.toggleNode(e)}})}buildHierarchy(){this.agentInference.processAgentInference();const e=this.agentInference.getPMDelegations(),t=this.eventViewer.events,n=this.agentInference.getEventAgentMap(),i={id:"pm_main",type:"pm",name:"PM (Main Session)",children:[],events:[],eventCount:0,status:"active",startTime:null,endTime:null,expanded:!0},s=new Map;this.state.nodeMap.clear(),this.state.nodeMap.set(i.id,i);const o=new Set;for(const[h,u]of e){const e={id:h,type:"subagent",name:u.agentName,delegationContext:this.extractDelegationContext(u.pmCall),children:[],events:u.agentEvents,eventCount:u.agentEvents.length,status:u.endIndex?"completed":"active",startTime:u.timestamp,endTime:u.endIndex?t[u.endIndex]?.timestamp:null,startIndex:u.startIndex,endIndex:u.endIndex,expanded:this.expandAll||this.state.expandedNodes.has(h)};if(i.children.push(e),this.state.nodeMap.set(h,e),o.add(u.agentName),i.eventCount++,(!i.startTime||new Date(u.timestamp)<new Date(i.startTime))&&(i.startTime=u.timestamp),u.endIndex&&t[u.endIndex]){const e=t[u.endIndex].timestamp;(!i.endTime||new Date(e)>new Date(i.endTime))&&(i.endTime=e)}}const r=this.agentInference.getOrphanGroups();let a=1;for(const[h,u]of r){const i={id:`pm_implied_${h}`,type:"pm",name:`PM (Implied #${a})`,children:[],events:[],eventCount:0,status:"inferred",startTime:null,endTime:null,expanded:!0,isImplied:!0,tooltip:"Inferred PM - Subagents started without explicit PM delegation"};s.set(h,i),this.state.nodeMap.set(i.id,i),a++;const o=new Map;for(const s of u){const i=[];t.forEach((t,o)=>{const r=n.get(o);if(r&&r.agentName===s.agentName){let n=!0;for(const[t,i]of e)if(i.agentEvents.some(e=>e.eventIndex===o)){n=!1;break}n&&i.push({eventIndex:o,event:t,inference:r})}}),i.length>0&&(o.has(s.agentName)||o.set(s.agentName,[]),o.get(s.agentName).push(...i))}for(const[e,t]of o){if(0===t.length)continue;const n=t[0].event,s=t[t.length-1].event,o={id:`implied_agent_${h}_${e}`,type:"subagent",name:e,delegationContext:"Orphan agent - no explicit PM delegation found",children:[],events:t,eventCount:t.length,status:"inferred",startTime:n.timestamp,endTime:s.timestamp,startIndex:t[0].eventIndex,endIndex:t[t.length-1].eventIndex,expanded:this.expandAll,isImplied:!0,tooltip:"This agent was spawned without an explicit PM Task delegation"};i.children.push(o),this.state.nodeMap.set(o.id,o),i.eventCount+=t.length,(!i.startTime||new Date(n.timestamp)<new Date(i.startTime))&&(i.startTime=n.timestamp),(!i.endTime||new Date(s.timestamp)>new Date(i.endTime))&&(i.endTime=s.timestamp)}}const l=[];if(t.forEach((t,i)=>{const o=n.get(i);if(o&&"subagent"===o.type){let n=!0;for(const[t,s]of e)if(s.agentEvents.some(e=>e.eventIndex===i)){n=!1;break}if(n)for(const[e,t]of s){for(const e of t.children)if(e.events.some(e=>e.eventIndex===i)){n=!1;break}if(!n)break}n&&l.push({eventIndex:i,event:t,inference:o})}}),l.length>0){const e={id:"pm_implied_generic",type:"pm",name:"PM (Implied - Uncategorized)",children:[],events:[],eventCount:0,status:"inferred",startTime:null,endTime:null,expanded:!0,isImplied:!0,tooltip:"Orphan agents without clear grouping"},t=new Map;for(const n of l){const e=n.inference.agentName;t.has(e)||t.set(e,[]),t.get(e).push(n)}for(const[n,i]of t){const t=i[0].event,s=i[i.length-1].event,o={id:`implied_generic_${n}`,type:"subagent",name:n,delegationContext:"Uncategorized orphan agent",children:[],events:i,eventCount:i.length,status:"inferred",startTime:t.timestamp,endTime:s.timestamp,startIndex:i[0].eventIndex,endIndex:i[i.length-1].eventIndex,expanded:this.expandAll,isImplied:!0};e.children.push(o),this.state.nodeMap.set(o.id,o),e.eventCount+=i.length,(!e.startTime||new Date(t.timestamp)<new Date(e.startTime))&&(e.startTime=t.timestamp),(!e.endTime||new Date(s.timestamp)>new Date(e.endTime))&&(e.endTime=s.timestamp)}e.children.length>0&&(s.set("generic",e),this.state.nodeMap.set(e.id,e))}let c=0;if(t.forEach((e,t)=>{const s=n.get(t);s&&"main_agent"===s.type&&(c++,i.events.push({eventIndex:t,event:e,inference:s}))}),i.eventCount+=c,i.children.length>0){const e=i.children.some(e=>"active"===e.status);i.status=e?"active":"completed"}const d={roots:[]};(i.eventCount>0||i.children.length>0)&&d.roots.push(i);for(const[h,u]of s)u.children.length>0&&d.roots.push(u);return this.state.hierarchyTree=d,console.log("Hierarchy built:",{mainPM:{children:i.children.length,events:i.eventCount,ownEvents:c},impliedPMGroups:s.size,totalImpliedAgents:Array.from(s.values()).reduce((e,t)=>e+t.children.length,0)}),d}extractDelegationContext(e){if(!e)return"Unknown delegation";const t=e.tool_parameters||e.data?.tool_parameters||{},n=t.task||t.request||t.description;if(n){const e=100;return n.length>e?n.substring(0,e)+"...":n}const i=e.tool_input||e.data?.tool_input;if(i&&"string"==typeof i){const e=100;return i.length>e?i.substring(0,e)+"...":i}return"Task delegation"}render(e={}){const t=this.state.hierarchyTree||this.buildHierarchy();if(!t.roots||0===t.roots.length)return'<div class="agent-hierarchy-empty">No agent activity detected</div>';return`<div class="agent-hierarchy">${this.applyFilters(t,e).roots.map(e=>this.renderNode(e,0)).join("")}</div>`}renderNode(e,t){const n=e.expanded||this.state.expandedNodes.has(e.id),i=e.children&&e.children.length>0,s=this.state.selectedNode===e.id,o=this.getNodeIcon(e),r=i?n?"▼":"▶":" ",a=this.getStatusClass(e.status),l=e.isImplied?"agent-node-implied":"",c=e.tooltip?`title="${this.escapeHtml(e.tooltip)}"`:"";let d=`\n <div class="agent-node agent-node-level-${t} ${s?"agent-node-selected":""} ${l}" \n data-node-id="${e.id}" ${c}>\n <div class="agent-node-header ${a}" \n data-toggle-node="${e.id}" style="cursor: pointer">\n <span class="agent-node-expand">${r}</span>\n <span class="agent-node-icon">${o}</span>\n <span class="agent-node-name">${this.escapeHtml(e.name)}</span>\n <span class="agent-node-stats">\n <span class="agent-event-count">${e.eventCount} events</span>\n ${e.status?`<span class="agent-status">${e.status}</span>`:""}\n </span>\n </div>\n `;if(n&&(e.delegationContext||e.startTime)){if(d+='<div class="agent-node-details">',e.delegationContext&&"Unknown delegation"!==e.delegationContext&&(d+=`\n <div class="agent-delegation-context">\n <strong>Task:</strong> ${this.escapeHtml(e.delegationContext)}\n </div>\n `),e.startTime){const t=this.calculateDuration(e.startTime,e.endTime);d+=`\n <div class="agent-timing">\n <span class="agent-time-start">${this.formatTime(e.startTime)}</span>\n ${t?`<span class="agent-duration">(${t})</span>`:""}\n </div>\n `}d+="</div>"}return n&&i&&(d+='<div class="agent-node-children">',d+=e.children.map(e=>this.renderNode(e,t+1)).join(""),d+="</div>"),d+="</div>",d}getNodeIcon(e){if("pm"===e.type)return e.isImplied?"🔍":"👔";return{"Engineer Agent":"🔧","Research Agent":"🔍","QA Agent":"✅","Documentation Agent":"📝","Security Agent":"🔒","Ops Agent":"⚙️","Version Control Agent":"📦","Data Engineer Agent":"💾","Test Integration Agent":"🧪"}[e.name]||"🤖"}getStatusClass(e){switch(e){case"active":return"agent-status-active";case"completed":return"agent-status-completed";case"pending":return"agent-status-pending";case"inferred":return"agent-status-inferred";default:return"agent-status-unknown"}}toggleNode(e){const t=this.state.nodeMap.get(e);t&&(this.state.expandedNodes.has(e)?(this.state.expandedNodes.delete(e),t.expanded=!1):(this.state.expandedNodes.add(e),t.expanded=!0),window.dashboard&&window.dashboard.renderCurrentTab())}selectNode(e){this.state.selectedNode=e;const t=this.state.nodeMap.get(e);if(t){const e=new CustomEvent("agentNodeSelected",{detail:{node:t}});document.dispatchEvent(e)}}applyFilters(e,t){if(!t||0===Object.keys(t).length)return e;const n={roots:[]};for(const i of e.roots){const e=this.filterNode(i,t);e&&n.roots.push(e)}return n}filterNode(e,t){let n=!0;if(t.searchText){const i=t.searchText.toLowerCase();n=n&&(e.name.toLowerCase().includes(i)||e.delegationContext&&e.delegationContext.toLowerCase().includes(i))}t.agentType&&(n=n&&e.name.includes(t.agentType)),t.status&&(n=n&&e.status===t.status);let i=[];if(e.children)for(const s of e.children){const e=this.filterNode(s,t);e&&i.push(e)}return n||i.length>0?{...e,children:i}:null}formatTime(e){if(!e)return"";return new Date(e).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}calculateDuration(e,t){if(!e||!t)return"";const n=new Date(e).getTime(),i=new Date(t).getTime()-n;if(i<1e3)return`${i}ms`;if(i<6e4)return`${(i/1e3).toFixed(1)}s`;return`${Math.floor(i/6e4)}m ${Math.floor(i%6e4/1e3)}s`}escapeHtml(e){if(!e)return"";const t=document.createElement("div");return t.textContent=e,t.innerHTML}updateWithNewEvents(e){this.buildHierarchy()}clear(){this.state.hierarchyTree=null,this.state.nodeMap.clear(),this.state.expandedNodes.clear(),this.state.selectedNode=null}expandAllNodes(){for(const[e,t]of this.state.nodeMap)this.state.expandedNodes.add(e),t.expanded=!0;this.expandAll=!0}collapseAllNodes(){this.state.expandedNodes.clear();for(const[e,t]of this.state.nodeMap)t.expanded=!1;this.expandAll=!1}}class h{constructor(){this.element=null,this.buildInfo={monitor:{version:"1.0.0",build:1,formatted_build:"0001",full_version:"v1.0.0-0001"},mpm:{version:"unknown",build:"unknown",full_version:"v0.0.0"}},this.socketClient=null,this.init()}async init(){await this.loadDashboardVersion(),this.createElements(),this.setupEventListeners()}async loadDashboardVersion(){try{const e=await fetch("/version.json");if(e.ok){const t=await e.json();this.buildInfo.monitor={version:t.version||"1.0.0",build:t.build||1,formatted_build:t.formatted_build||"0001",full_version:t.full_version||"v1.0.0-0001"}}}catch(e){}}createElements(){this.element=document.createElement("div"),this.element.className="version-display",this.element.id="version-display";const e=document.createElement("span");e.className="version-item mpm-version",e.id="mpm-version",e.innerHTML='\n <span class="version-label">MPM</span>\n <span class="version-value">v0.0.0</span>\n ';const t=document.createElement("span");t.className="version-separator",t.textContent="|";const n=document.createElement("span");n.className="version-item monitor-version",n.id="monitor-version",n.innerHTML='\n <span class="version-label">Monitor</span>\n <span class="version-value">v1.0.0-0001</span>\n ',this.element.appendChild(e),this.element.appendChild(t),this.element.appendChild(n),this.element.title="Click for detailed version information"}setSocketClient(e){this.socketClient=e,this.socketClient&&this.socketClient.socket&&(this.socketClient.socket.on("welcome",e=>{const t=e.build_info||e.data&&e.data.build_info;t&&this.updateBuildInfo(t)}),this.socketClient.socket.on("status",e=>{const t=e.build_info||e.data&&e.data.build_info;t&&this.updateBuildInfo(t)}),this.socketClient.socket.on("build_info",e=>{this.updateBuildInfo(e)}))}updateBuildInfo(e){this.buildInfo=e,this.updateDisplay()}updateDisplay(){const e=this.element.querySelector(".mpm-version .version-value");if(e&&this.buildInfo.mpm){const t=this.buildInfo.mpm.full_version||`v${this.buildInfo.mpm.version}`;e.textContent=t,this.buildInfo.mpm.build&&"unknown"!==this.buildInfo.mpm.build&&(e.parentElement.title=`MPM Build: ${this.buildInfo.mpm.build}`)}const t=this.element.querySelector(".monitor-version .version-value");if(t&&this.buildInfo.monitor){const e=this.buildInfo.monitor.full_version||`v${this.buildInfo.monitor.version}-${this.buildInfo.monitor.formatted_build}`;if(t.textContent=e,this.buildInfo.monitor.last_updated){const e=new Date(this.buildInfo.monitor.last_updated).toLocaleString();t.parentElement.title=`Monitor Build: ${this.buildInfo.monitor.formatted_build}\nLast Updated: ${e}`}}}setupEventListeners(){this.element.addEventListener("click",()=>{this.showDetailedInfo()})}showDetailedInfo(){const e=[];if(this.buildInfo.mpm&&(e.push("=== MPM Framework ==="),e.push(`Version: ${this.buildInfo.mpm.version}`),this.buildInfo.mpm.build&&"unknown"!==this.buildInfo.mpm.build&&e.push(`Build: ${this.buildInfo.mpm.build}`),e.push(`Full: ${this.buildInfo.mpm.full_version}`)),e.push(""),this.buildInfo.monitor&&(e.push("=== Monitor UI ==="),e.push(`Version: ${this.buildInfo.monitor.version}`),e.push(`Build: ${this.buildInfo.monitor.formatted_build} (${this.buildInfo.monitor.build})`),e.push(`Full: ${this.buildInfo.monitor.full_version}`),this.buildInfo.monitor.last_updated)){const t=new Date(this.buildInfo.monitor.last_updated).toLocaleString();e.push(`Updated: ${t}`)}const t=document.createElement("div");t.className="version-modal",t.innerHTML=`\n <div class="version-modal-content">\n <h3>Version Information</h3>\n <pre>${e.join("\n")}</pre>\n <button onclick="this.parentElement.parentElement.remove()">Close</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>{t.remove()},1e4)}mount(e){const t="string"==typeof e?document.querySelector(e):e;this.element&&t&&this.element.parentNode!==t&&t.appendChild(this.element)}getElement(){return this.element}destroy(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.socketClient&&this.socketClient.socket&&(this.socketClient.socket.off("welcome"),this.socketClient.socket.off("status"),this.socketClient.socket.off("build_info")),this.element=null,this.socketClient=null}}class u{constructor(){this.eventViewer=null,this.moduleViewer=null,this.sessionManager=null,this.activityTreeRetryCount=0,this.maxRetryAttempts=10,this.socketManager=null,this.agentInference=null,this.agentHierarchy=null,this.uiStateManager=null,this.eventProcessor=null,this.exportManager=null,this.workingDirectoryManager=null,this.fileToolTracker=null,this.buildTracker=null,this.init()}init(){console.log("Initializing refactored Claude MPM Dashboard...");try{this.fetchServerConfig(),this.initializeSocketManager(),this.initializeCoreComponents(),this.initializeBuildTracker(),this.initializeAgentInference(),this.initializeAgentHierarchy(),this.initializeUIStateManager(),this.initializeWorkingDirectoryManager(),this.initializeFileToolTracker(),this.initializeEventProcessor(),this.initializeExportManager(),this.setupModuleInteractions(),this.initializeFromURL(),console.log("Claude MPM Dashboard initialized successfully")}catch(e){throw console.error("Error during dashboard initialization:",e),e}}fetchServerConfig(){fetch("/api/config").then(e=>e.json()).then(e=>{window.dashboardConfig=e;const t=document.getElementById("working-dir-path");t&&e.workingDirectory&&(t.textContent=e.workingDirectory);const n=document.getElementById("footer-git-branch");n&&e.gitBranch&&(n.textContent=e.gitBranch),console.log("Dashboard configuration loaded:",e)}).catch(e=>{console.warn("Failed to fetch server config:",e),window.dashboardConfig={workingDirectory:".",gitBranch:"Unknown"}})}validateInitialization(){const e=[{name:"socketManager",component:this.socketManager},{name:"eventViewer",component:this.eventViewer},{name:"agentHierarchy",component:this.agentHierarchy}].filter(e=>!e.component);e.length>0?console.warn("Missing critical components:",e.map(e=>e.name)):console.log("All critical components initialized")}postInit(){try{this.agentHierarchy&&(window.dashboard.agentHierarchy=this.agentHierarchy,console.log("Agent hierarchy global reference set")),this.validateInitialization()}catch(e){console.error("Error in dashboard postInit:",e)}}initializeSocketManager(){this.socketManager=new e,this.socketManager.setupConnectionControls(),this.socketClient=this.socketManager.getSocketClient(),window.socketClient=this.socketClient}initializeCoreComponents(){this.eventViewer=new n("events-list",this.socketClient),this.moduleViewer=new s,this.sessionManager=new o(this.socketClient),window.eventViewer=this.eventViewer,window.moduleViewer=this.moduleViewer,window.sessionManager=this.sessionManager}initializeBuildTracker(){this.buildTracker=new h,this.buildTracker.setSocketClient(this.socketClient);const e=()=>{const t=document.querySelector(".header-title");t?(this.buildTracker.mount(t),console.log("BuildTracker mounted successfully")):(console.warn("Header-title element not found for build tracker, will retry"),setTimeout(e,100))};e(),window.buildTracker=this.buildTracker}initializeAgentInference(){this.agentInference=new r(this.eventViewer),this.agentInference.initialize()}initializeAgentHierarchy(){try{this.agentHierarchy=new d(this.agentInference,this.eventViewer),console.log("Agent hierarchy component created")}catch(e){console.error("Failed to initialize agent hierarchy:",e),this.agentHierarchy={render:()=>'<div class="error">Agent hierarchy unavailable</div>',expandAllNodes:()=>{},collapseAllNodes:()=>{},updateWithNewEvents:()=>{}}}}initializeUIStateManager(){this.uiStateManager=new t,this.setupTabFilters()}initializeWorkingDirectoryManager(){this.workingDirectoryManager=new l(this.socketManager)}initializeFileToolTracker(){this.fileToolTracker=new c(this.agentInference,this.workingDirectoryManager)}initializeEventProcessor(){this.eventProcessor=new i(this.eventViewer,this.agentInference)}initializeExportManager(){this.exportManager=new a(this.eventViewer)}setupModuleInteractions(){this.socketManager.onEventUpdate(e=>{this.fileToolTracker.updateFileOperations(e),this.fileToolTracker.updateToolCalls(e),this.agentInference.processAgentInference(),this.agentHierarchy.updateWithNewEvents(e),"events"===this.uiStateManager.getCurrentTab()&&this.exportManager.scrollListToBottom("events-list"),this.renderCurrentTab()}),this.socketManager.onConnectionStatusChange((e,t)=>{"connected"===t&&this.workingDirectoryManager.updateGitBranch(this.workingDirectoryManager.getCurrentWorkingDir())}),document.addEventListener("tabChanged",e=>{this.renderCurrentTab(),this.uiStateManager.updateTabNavigationItems()}),document.addEventListener("eventsClearing",()=>{this.fileToolTracker.clear(),this.agentInference.initialize()}),document.addEventListener("showCardDetails",e=>{this.showCardDetails(e.detail.tabName,e.detail.index)}),document.addEventListener("sessionFilterChanged",e=>{console.log("Session filter changed, re-rendering current tab:",this.uiStateManager.getCurrentTab()),this.renderCurrentTab()})}setupTabFilters(){const e=document.getElementById("agents-search-input"),t=document.getElementById("agents-type-filter");e&&e.addEventListener("input",()=>{"agents"===this.uiStateManager.getCurrentTab()&&this.renderCurrentTab()}),t&&t.addEventListener("change",()=>{"agents"===this.uiStateManager.getCurrentTab()&&this.renderCurrentTab()});const n=document.getElementById("tools-search-input"),i=document.getElementById("tools-type-filter");n&&n.addEventListener("input",()=>{"tools"===this.uiStateManager.getCurrentTab()&&this.renderCurrentTab()}),i&&i.addEventListener("change",()=>{"tools"===this.uiStateManager.getCurrentTab()&&this.renderCurrentTab()});const s=document.getElementById("files-search-input"),o=document.getElementById("files-type-filter");s&&s.addEventListener("input",()=>{"files"===this.uiStateManager.getCurrentTab()&&this.renderCurrentTab()}),o&&o.addEventListener("change",()=>{"files"===this.uiStateManager.getCurrentTab()&&this.renderCurrentTab()})}initializeFromURL(){const e=new URLSearchParams(window.location.search);this.socketManager.initializeFromURL(e)}renderCurrentTab(){const e=this.uiStateManager.getCurrentTab();switch(e){case"events":break;case"activity":if(window.ActivityTree&&"function"==typeof window.ActivityTree)this.activityTreeRetryCount=0,window.activityTreeInstance||(console.log("Creating new ActivityTree instance..."),window.activityTreeInstance=new window.ActivityTree),window.activityTreeInstance&&(window.activityTreeInstance.initialized||(console.log("Initializing ActivityTree..."),window.activityTreeInstance.initialize()),"function"==typeof window.activityTreeInstance.renderWhenVisible&&(console.log("Dashboard triggering activity tree render..."),window.activityTreeInstance.renderWhenVisible()),"function"==typeof window.activityTreeInstance.forceShow&&(console.log("Dashboard forcing activity tree to show..."),window.activityTreeInstance.forceShow()));else if(window.activityTree&&"function"==typeof window.activityTree){const e=window.activityTree();e&&("function"==typeof e.renderWhenVisible&&(console.log("Dashboard triggering activity tree render (legacy)..."),e.renderWhenVisible()),"function"==typeof e.forceShow&&(console.log("Dashboard forcing activity tree to show (legacy)..."),e.forceShow()))}else if(this.activityTreeRetryCount<this.maxRetryAttempts)this.activityTreeRetryCount++,console.warn(`Activity tree component not available, retrying in 100ms... (attempt ${this.activityTreeRetryCount}/${this.maxRetryAttempts})`),setTimeout(()=>{"activity"===this.uiStateManager.getCurrentTab()&&this.renderCurrentTab()},100);else{console.error("Maximum retry attempts reached for ActivityTree initialization. Giving up.");const e=document.getElementById("activity-tree-container")||document.getElementById("activity-tree");e&&(e.innerHTML='<div class="error-message">⚠️ Activity Tree failed to load. Please refresh the page.</div>')}break;case"agents":this.renderAgents();break;case"tools":this.renderTools();break;case"files":this.renderFiles()}this.uiStateManager.getSelectedCard().tab===e&&this.uiStateManager.updateCardSelectionUI(),this.uiStateManager.updateUnifiedSelectionUI()}renderAgents(){const e=document.getElementById("agents-list");if(!e)return;const t=document.getElementById("agents-search-input")?.value||"",n=document.getElementById("agents-type-filter")?.value||"",i=this.renderAgentsFlat(t,n);e.innerHTML=i,this.removeHierarchyControls();const s=this.agentInference.getUniqueAgentInstances();this.updateAgentsFilterDropdowns(s)}removeHierarchyControls(){const e=document.getElementById("hierarchy-controls");e&&e.remove()}renderAgentsFlat(e,t){const n=this.eventViewer.events;if(!n||0===n.length)return'<div class="no-events">No agent events found...</div>';this.agentInference.processAgentInference();const i=this.agentInference.getEventAgentMap(),s=[];if(n.forEach((n,o)=>{const r=i.get(o);if(r&&("subagent"===r.type||"main_agent"===r.type)){let i=!0;if(e){const t=e.toLowerCase();i=i&&(r.agentName.toLowerCase().includes(t)||n.tool_name&&n.tool_name.toLowerCase().includes(t)||n.data&&JSON.stringify(n.data).toLowerCase().includes(t))}t&&(i=i&&r.agentName.includes(t)),i&&s.push({event:n,inference:r,index:o,timestamp:new Date(n.timestamp)})}}),0===s.length)return'<div class="no-events">No agent events match the current filters...</div>';return`<div class="agent-events-flat">${s.map((e,t)=>{const{event:n,inference:i,index:s,timestamp:o}=e;let r="Activity",a="📋",l="";if("SubagentStart"===n.event_type)r="Started",a="🟢",l="Agent session began";else if("SubagentStop"===n.event_type)r="Stopped",a="🔴",l="Agent session ended";else if(n.tool_name&&(r=`Tool: ${n.tool_name}`,a=this.getToolIcon(n.tool_name),n.data&&n.data.tool_parameters)){const e=n.data.tool_parameters;e.file_path?l=e.file_path:e.command?l=e.command.substring(0,50)+(e.command.length>50?"...":""):e.pattern?l=`pattern="${e.pattern}"`:e.query&&(l=`query="${e.query}"`)}let c="completed";return"SubagentStart"===n.event_type?c="active":n.data&&n.data.error&&(c="error"),`\n <div class="agent-event-item" data-index="${t}" onclick="window.dashboard.showCardDetails('agents', ${s})">\n <div class="agent-event-header">\n <div class="agent-event-time">${this.formatTimestamp(o)}</div>\n <div class="agent-event-agent">\n ${this.getAgentIcon(i.agentName)} ${i.agentName}\n </div>\n <div class="agent-event-action">\n ${a} ${r}\n </div>\n <div class="agent-event-status status-${c}">\n ${this.getStatusIcon(c)}\n </div>\n </div>\n ${l?`<div class="agent-event-details">${this.escapeHtml(l)}</div>`:""}\n </div>\n `}).join("")}</div>`}getAgentIcon(e){return{PM:"🎯","Engineer Agent":"🔧","Research Agent":"🔍","QA Agent":"✅","Documentation Agent":"📝","Security Agent":"🔒","Ops Agent":"⚙️","Version Control Agent":"📦","Data Engineer Agent":"💾","Test Integration Agent":"🧪"}[e]||"🤖"}getToolIcon(e){return{Read:"📖",Write:"✏️",Edit:"📝",Bash:"💻",Grep:"🔍",Glob:"📂",LS:"📁",Task:"📋"}[e]||"🔧"}getStatusIcon(e){return{active:"🟢",completed:"✅",error:"❌",pending:"🟡"}[e]||"❓"}formatTimestamp(e){return e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}escapeHtml(e){if(!e)return"";const t=document.createElement("div");return t.textContent=e,t.innerHTML}renderTools(){const e=document.getElementById("tools-list");if(!e)return;const t=this.fileToolTracker.getToolCalls(),n=Array.from(t.entries()),i=this.eventProcessor.getUniqueToolInstances(n),s=this.eventProcessor.generateToolHTML(i);e.innerHTML=s,this.exportManager.scrollListToBottom("tools-list"),this.updateToolsFilterDropdowns(i)}renderFiles(){const e=document.getElementById("files-list");if(!e)return;const t=this.fileToolTracker.getFileOperations(),n=Array.from(t.entries()),i=this.eventProcessor.getUniqueFileInstances(n),s=this.eventProcessor.generateFileHTML(i);e.innerHTML=s,this.exportManager.scrollListToBottom("files-list"),this.updateFilesFilterDropdowns(n)}updateAgentsFilterDropdowns(e){const t=new Set;e.forEach(e=>{e.agentName&&"Unknown"!==e.agentName&&t.add(e.agentName)});const n=Array.from(t).filter(e=>e&&""!==e.trim());this.populateFilterDropdown("agents-type-filter",n,"All Agent Types"),n.length>0?console.log("Agent types found for filter:",n):console.log("No agent types found for filter. Instances:",e.length)}updateToolsFilterDropdowns(e){const t=[...new Set(e.map(([e,t])=>t.tool_name))].filter(e=>e);this.populateFilterDropdown("tools-type-filter",t,"All Tools")}updateFilesFilterDropdowns(e){const t=[...new Set(e.flatMap(([e,t])=>t.operations.map(e=>e.operation)))].filter(e=>e);this.populateFilterDropdown("files-type-filter",t,"All Operations")}populateFilterDropdown(e,t,n="All"){const i=document.getElementById(e);if(!i)return;const s=i.value,o=t.sort((e,t)=>e.localeCompare(t));i.innerHTML=`<option value="">${n}</option>`,o.forEach(e=>{const t=document.createElement("option");t.value=e,t.textContent=e,i.appendChild(t)}),s&&o.includes(s)&&(i.value=s)}showCardDetails(e,t){switch(e){case"events":this.eventViewer&&this.eventViewer.showEventDetails(t);break;case"agents":this.showAgentDetailsByIndex(t);break;case"tools":this.showToolDetailsByIndex(t);break;case"files":this.showFileDetailsByIndex(t)}}showAgentDetailsByIndex(e){const t=this.eventProcessor.getFilteredEventsForTab("agents");if(!t||!Array.isArray(t)||e<0||e>=t.length)return void console.warn("Dashboard: Invalid agent index or events array");const n=this.eventProcessor.applyAgentsFilters([t[e]]);if(n.length>0&&this.moduleViewer&&"function"==typeof this.moduleViewer.showAgentEvent){const t=n[0];this.moduleViewer.showAgentEvent(t,e)}}showAgentInstanceDetails(e){const t=this.agentInference.getPMDelegations().get(e);if(!t){const t=this.agentInference.getUniqueAgentInstances().find(t=>t.id===e);return t?void this.showImpliedAgentDetails(t):void console.error("Agent instance not found:",e)}this.moduleViewer&&"function"==typeof this.moduleViewer.showAgentInstance?this.moduleViewer.showAgentInstance(t):console.log("Agent Instance Details:",{id:e,agentName:t.agentName,type:"PM Delegation",eventCount:t.agentEvents.length,startTime:t.timestamp,pmCall:t.pmCall})}showImpliedAgentDetails(e){this.moduleViewer&&"function"==typeof this.moduleViewer.showImpliedAgent?this.moduleViewer.showImpliedAgent(e):console.log("Implied Agent Details:",{id:e.id,agentName:e.agentName,type:"Implied PM Delegation",eventCount:e.eventCount,startTime:e.timestamp,note:"No explicit PM call found - inferred from agent activity"})}showToolDetailsByIndex(e){const t=this.fileToolTracker.getToolCalls(),n=Array.from(t.entries()),i=this.eventProcessor.applyToolCallFilters(n);if(e>=0&&e<i.length){const[t]=i[e];this.showToolCallDetails(t)}}showFileDetailsByIndex(e){const t=this.fileToolTracker.getFileOperations();let n=Array.from(t.entries());if(n=this.eventProcessor.applyFilesFilters(n),e>=0&&e<n.length){const[t]=n[e];this.showFileDetails(t)}}showToolCallDetails(e){const t=this.fileToolTracker.getToolCall(e);t&&this.moduleViewer&&this.moduleViewer.showToolCall(t,e)}showFileDetails(e){const t=this.fileToolTracker.getFileOperationsForFile(e);t&&this.moduleViewer&&this.moduleViewer.showFileOperations(t,e)}switchTab(e){this.uiStateManager.switchTab(e)}selectCard(e,t,n,i){this.uiStateManager.selectCard(e,t,n,i)}clearEvents(){this.exportManager.clearEvents()}exportEvents(){this.exportManager.exportEvents()}clearSelection(){this.uiStateManager.clearSelection(),this.eventViewer&&this.eventViewer.clearSelection(),this.moduleViewer&&this.moduleViewer.clear()}get currentWorkingDir(){return this.workingDirectoryManager.getCurrentWorkingDir()}set currentWorkingDir(e){this.workingDirectoryManager.setWorkingDirectory(e)}get currentTab(){return this.uiStateManager.getCurrentTab()}get selectedCard(){return this.uiStateManager.getSelectedCard()}get fileOperations(){return this.fileToolTracker.getFileOperations()}get toolCalls(){return this.fileToolTracker.getToolCalls()}get tabNavigation(){return this.uiStateManager?this.uiStateManager.tabNavigation:null}}async function p(e,t,n){const i=e.querySelector(".file-viewer-file-path"),s=e.querySelector(".file-viewer-file-size");i&&(i.textContent=t),s&&(s.textContent="");const o=e.querySelector(".file-viewer-loading"),r=e.querySelector(".file-viewer-error"),a=e.querySelector(".file-viewer-content-area");o&&(o.style.display="flex"),r&&(r.style.display="none"),a&&(a.style.display="none");try{const i=window.socket||window.dashboard?.socketClient?.socket||window.socketClient?.socket;if(console.log("[FileViewer] Socket search results:",{"window.socket":!!window.socket,"window.socket.connected":window.socket?.connected,"dashboard.socketClient.socket":!!window.dashboard?.socketClient?.socket,"dashboard.socketClient.socket.connected":window.dashboard?.socketClient?.socket?.connected,"window.socketClient.socket":!!window.socketClient?.socket,"window.socketClient.socket.connected":window.socketClient?.socket?.connected}),!i)throw new Error("No socket connection available. Please ensure the dashboard is connected.");i.connected||console.warn("[FileViewer] Socket found but not connected, attempting to use anyway..."),console.log("[FileViewer] Socket found, setting up listener for file_content_response");const s=new Promise((e,n)=>{const s=o=>{console.log("[FileViewer] Received file_content_response:",o),o.file_path===t&&(i.off("file_content_response",s),o.success?(console.log("[FileViewer] File content loaded successfully"),e(o)):(console.error("[FileViewer] File read failed:",o.error),n(new Error(o.error||"Failed to read file"))))};i.on("file_content_response",s),console.log("[FileViewer] Listener registered for file_content_response"),setTimeout(()=>{i.off("file_content_response",s),console.error("[FileViewer] Request timeout after 10 seconds"),n(new Error("Request timeout - server did not respond"))},1e4)}),o={file_path:t,working_dir:n};console.log("[FileViewer] Emitting read_file event with data:",o),i.emit("read_file",o);const r=await s,a=e.querySelector(".file-viewer-loading");a&&(a.style.display="none"),function(e,t){const n=e.querySelector(".file-viewer-content-area"),i=e.querySelector(".file-extension"),s=e.querySelector(".file-encoding"),o=e.querySelector(".file-viewer-file-size"),r=e.querySelector(".file-content-code");i&&(i.textContent=`Type: ${t.extension||"unknown"}`);s&&(s.textContent=`Encoding: ${t.encoding||"unknown"}`);o&&(o.textContent=`Size: ${function(e){if(!e)return"0 B";const t=1024,n=["B","KB","MB","GB"],i=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,i)).toFixed(2))+" "+n[i]}(t.file_size)}`);if(r&&t.content){r.innerHTML=function(e,t){const n=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");switch(t){case".js":case".jsx":case".ts":case".tsx":return function(e){return g(e.replace(/\b(function|const|let|var|if|else|for|while|return|import|export|class|extends)\b/g,'<span class="keyword">$1</span>').replace(/(\/\*[\s\S]*?\*\/|\/\/.*)/g,'<span class="comment">$1</span>').replace(/('[^']*'|"[^"]*"|`[^`]*`)/g,'<span class="string">$1</span>').replace(/\b(\d+)\b/g,'<span class="number">$1</span>'))}(n);case".py":return function(e){return g(e.replace(/\b(def|class|if|elif|else|for|while|return|import|from|as|try|except|finally|with)\b/g,'<span class="keyword">$1</span>').replace(/(#.*)/g,'<span class="comment">$1</span>').replace(/('[^']*'|"[^"]*"|"""[\s\S]*?""")/g,'<span class="string">$1</span>').replace(/\b(\d+)\b/g,'<span class="number">$1</span>'))}(n);case".json":return function(e){return g(e.replace(/("[\w\s]*")\s*:/g,'<span class="property">$1</span>:').replace(/:\s*(".*?")/g,': <span class="string">$1</span>').replace(/:\s*(\d+)/g,': <span class="number">$1</span>').replace(/:\s*(true|false|null)/g,': <span class="keyword">$1</span>'))}(n);case".css":return function(e){return g(e.replace(/([.#]?[\w-]+)\s*\{/g,'<span class="selector">$1</span> {').replace(/([\w-]+)\s*:/g,'<span class="property">$1</span>:').replace(/:\s*([^;]+);/g,': <span class="value">$1</span>;').replace(/(\/\*[\s\S]*?\*\/)/g,'<span class="comment">$1</span>'))}(n);case".html":case".htm":return function(e){return g(e.replace(/(<\/?[\w-]+)/g,'<span class="tag">$1</span>').replace(/([\w-]+)=(['"][^'"]*['"])/g,'<span class="attribute">$1</span>=<span class="string">$2</span>').replace(/(<!--[\s\S]*?-->)/g,'<span class="comment">$1</span>'))}(n);case".md":case".markdown":return function(e){return g(e.replace(/^(#{1,6})\s+(.*)$/gm,'<span class="header">$1</span> <span class="header-text">$2</span>').replace(/\*\*(.*?)\*\*/g,'<span class="bold">**$1**</span>').replace(/\*(.*?)\*/g,'<span class="italic">*$1*</span>').replace(/`([^`]+)`/g,'<span class="code">`$1`</span>').replace(/^\s*[-*+]\s+(.*)$/gm,'<span class="list-marker">•</span> $1'))}(n);default:return g(n)}}(t.content,t.extension);const n=e.querySelector(".file-viewer-scroll-wrapper");n&&setTimeout(()=>{const t=e.querySelector(".modal-content"),i=e.querySelector(".file-viewer-header"),s=e.querySelector(".file-viewer-toolbar"),o=(t?.offsetHeight||0)-(i?.offsetHeight||0)-(s?.offsetHeight||0)-40;n.style.maxHeight=`${o}px`,n.style.overflowY="auto"},50)}else console.warn("⚠️ Missing codeElement or file content");n&&(n.style.display="block")}(e,r)}catch(l){console.error("❌ Failed to fetch file content:",l);const i=e.querySelector(".file-viewer-loading");i&&(i.style.display="none");let s=l.message||"Unknown error occurred",o=[];l.message.includes("No socket connection")?(s="Failed to connect to the monitoring server",o=["Check if the monitoring server is running","Verify the socket connection in the dashboard","Try refreshing the page and reconnecting"]):l.message.includes("timeout")?(s="Request timed out",o=["The file may be too large to load quickly","Check your network connection","Try again in a few moments"]):l.message.includes("File does not exist")?(s="File not found",o=["The file may have been moved or deleted","Check the file path spelling","Refresh the file list to see current files"]):l.message.includes("Access denied")&&(s="Access denied",o=["The file is outside the allowed directories","File access is restricted for security reasons"]),function(e,t){const n=e.querySelector(".file-viewer-error"),i=e.querySelector(".error-message"),s=e.querySelector(".error-suggestions");let o=t.error||"Unknown error occurred";i&&(i.innerHTML=`\n <div class="error-main">${o}</div>\n ${t.file_path?`<div class="error-file">File: ${t.file_path}</div>`:""}\n ${t.working_dir?`<div class="error-dir">Working directory: ${t.working_dir}</div>`:""}\n `);s&&(t.suggestions&&t.suggestions.length>0?s.innerHTML=`\n <h4>Suggestions:</h4>\n <ul>\n ${t.suggestions.map(e=>`<li>${e}</li>`).join("")}\n </ul>\n `:s.innerHTML="");console.log("📋 Displaying file viewer error:",{originalError:t.error,processedMessage:o,suggestions:t.suggestions}),n&&(n.style.display="block")}(e,{error:s,file_path:t,working_dir:n,suggestions:o})}}function g(e){return e.split("\n").map((e,t)=>`<span class="line-number">${String(t+1).padStart(3," ")}</span> ${e||" "}`).join("\n")}function m(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}window.clearEvents=function(){window.dashboard&&window.dashboard.clearEvents()},window.exportEvents=function(){window.dashboard&&window.dashboard.exportEvents()},window.clearSelection=function(){window.dashboard&&window.dashboard.clearSelection()},window.switchTab=function(e){window.dashboard&&window.dashboard.switchTab(e)},window.copyFileContent=function(){const e=document.getElementById("file-viewer-modal");if(!e)return;const t=e.querySelector(".file-content-code");if(!t)return;const n=t.textContent;if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(n).then(()=>{const t=e.querySelector(".file-content-copy");if(t){const e=t.textContent;t.textContent="✅ Copied!",setTimeout(()=>{t.textContent=e},2e3)}}).catch(e=>{console.error("Failed to copy text:",e)});else{const t=document.createElement("textarea");t.value=n,document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t);const i=e.querySelector(".file-content-copy");if(i){const e=i.textContent;i.textContent="✅ Copied!",setTimeout(()=>{i.textContent=e},2e3)}}},window.showFileViewerModal=async function(e){console.log("[FileViewer] Opening file:",e);let t="";window.dashboard&&window.dashboard.currentWorkingDir&&(t=window.dashboard.currentWorkingDir,console.log("[FileViewer] Using working directory:",t));let n=document.getElementById("file-viewer-modal");n||(console.log("[FileViewer] Creating new modal"),n=function(){const e=document.createElement("div");return e.id="file-viewer-modal",e.className="modal file-viewer-modal",e.innerHTML='\n <div class="modal-content file-viewer-content">\n <div class="file-viewer-header">\n <h2 class="file-viewer-title">\n <span class="file-viewer-icon">📄</span>\n <span class="file-viewer-title-text">File Viewer</span>\n </h2>\n <div class="file-viewer-meta">\n <span class="file-viewer-file-path"></span>\n <span class="file-viewer-file-size"></span>\n </div>\n <button class="file-viewer-close" onclick="hideFileViewerModal()">\n <span>×</span>\n </button>\n </div>\n <div class="file-viewer-body">\n <div class="file-viewer-loading">\n <div class="loading-spinner"></div>\n <span>Loading file content...</span>\n </div>\n <div class="file-viewer-error" style="display: none;">\n <div class="error-icon">⚠️</div>\n <div class="error-message"></div>\n <div class="error-suggestions"></div>\n </div>\n <div class="file-viewer-content-area" style="display: none;">\n <div class="file-viewer-toolbar">\n <div class="file-viewer-info">\n <span class="file-extension"></span>\n <span class="file-encoding"></span>\n </div>\n <div class="file-viewer-actions">\n <button class="file-content-copy" onclick="copyFileContent()">\n 📋 Copy\n </button>\n </div>\n </div>\n <div class="file-viewer-scroll-wrapper">\n <pre class="file-content-display"><code class="file-content-code"></code></pre>\n </div>\n </div>\n </div>\n </div>\n ',e.addEventListener("click",t=>{t.target===e&&hideFileViewerModal()}),document.addEventListener("keydown",t=>{"Escape"===t.key&&"flex"===e.style.display&&hideFileViewerModal()}),e}(),document.body.appendChild(n),await new Promise(e=>setTimeout(e,10))),n.style.display="flex",document.body.style.overflow="hidden",p(n,e,t).catch(e=>{console.error("Error updating file viewer modal:",e),function(e,t){const n=e.querySelector(".file-viewer-error"),i=e.querySelector(".error-message"),s=e.querySelector(".error-suggestions"),o=e.querySelector(".file-viewer-loading"),r=e.querySelector(".file-viewer-content-area");o&&(o.style.display="none");r&&(r.style.display="none");n&&(n.style.display="flex");let a=t.error||"Unknown error occurred";a.includes("not found")?a="📁 File not found or not accessible":a.includes("permission")?a="🔒 Permission denied accessing this file":a.includes("too large")?a="📏 File is too large to display":a.includes("socket connection")?a="🔌 Not connected to the server. Please check your connection.":a.includes("timeout")?a="⏱️ Request timed out. The server may be busy or unresponsive.":a.includes("📁")||a.includes("🔒")||a.includes("📏")||(a=`⚠️ ${a}`);i&&(i.textContent=a);s&&(t.suggestions&&t.suggestions.length>0?s.innerHTML=`\n <h4>Suggestions:</h4>\n <ul>\n ${t.suggestions.map(e=>`<li>${e}</li>`).join("")}\n </ul>\n `:s.innerHTML="\n <h4>Try:</h4>\n <ul>\n <li>Check if the file exists and is readable</li>\n <li>Verify file permissions</li>\n <li>Ensure the monitoring server has access to this file</li>\n </ul>\n ");console.log("📋 Displaying file content error:",{originalError:t.error,processedMessage:a,suggestions:t.suggestions}),n&&(n.style.display="block")}(n,{error:e.message})})},window.hideFileViewerModal=function(){const e=document.getElementById("file-viewer-modal");e&&(e.style.display="none",document.body.style.overflow="")},window.copyFileContent=function(){const e=document.getElementById("file-viewer-modal");if(!e)return;const t=e.querySelector(".file-content-code");if(!t)return;const n=t.textContent;if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(n).then(()=>{const t=e.querySelector(".file-content-copy");if(t){const e=t.textContent;t.textContent="✅ Copied!",setTimeout(()=>{t.textContent=e},2e3)}}).catch(e=>{console.error("Failed to copy text:",e)});else{const t=document.createElement("textarea");t.value=n,document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t);const i=e.querySelector(".file-content-copy");if(i){const e=i.textContent;i.textContent="✅ Copied!",setTimeout(()=>{i.textContent=e},2e3)}}},window.showSearchViewerModal=function(e,t){let n=document.getElementById("search-viewer-modal");n||(n=function(){const e=document.createElement("div");return e.id="search-viewer-modal",e.className="modal search-viewer-modal",e.innerHTML='\n <div class="modal-content search-viewer-content">\n <div class="search-viewer-header">\n <h2 class="search-viewer-title">\n <span class="search-viewer-icon">🔍</span>\n <span class="search-viewer-title-text">Search Results</span>\n </h2>\n <button class="search-viewer-close" onclick="hideSearchViewerModal()">\n <span>×</span>\n </button>\n </div>\n <div class="search-viewer-body">\n <div class="search-params-section">\n <h3>Search Parameters</h3>\n <pre class="search-params-display"></pre>\n </div>\n <div class="search-results-section">\n <h3>Search Results</h3>\n <div class="search-results-display"></div>\n </div>\n </div>\n </div>\n ',e.addEventListener("click",t=>{t.target===e&&hideSearchViewerModal()}),document.addEventListener("keydown",t=>{"Escape"===t.key&&"flex"===e.style.display&&hideSearchViewerModal()}),e}(),document.body.appendChild(n)),function(e,t,n){const i=e.querySelector(".search-params-display"),s=e.querySelector(".search-results-display");i&&t&&(i.textContent=JSON.stringify(t,null,2));if(s&&n){let e="";"string"==typeof n?e=`<pre class="search-results-text">${m(n)}</pre>`:Array.isArray(n)?(e='<ul class="search-results-list">',n.forEach(t=>{e+="object"==typeof t?`<li><pre>${JSON.stringify(t,null,2)}</pre></li>`:`<li>${m(String(t))}</li>`}),e+="</ul>"):e="object"==typeof n?`<pre class="search-results-json">${JSON.stringify(n,null,2)}</pre>`:`<div class="search-results-text">${m(String(n))}</div>`,s.innerHTML=e}}(n,e,t),n.style.display="flex",document.body.style.overflow="hidden"},window.hideSearchViewerModal=function(){const e=document.getElementById("search-viewer-modal");e&&(e.style.display="none",document.body.style.overflow="")},window.showAgentInstanceDetails=function(e){window.dashboard&&"function"==typeof window.dashboard.showAgentInstanceDetails?window.dashboard.showAgentInstanceDetails(e):console.error("Dashboard not available or method not found")},document.addEventListener("DOMContentLoaded",function(){try{window.dashboard=new u,window.dashboard&&"function"==typeof window.dashboard.postInit&&window.dashboard.postInit(),console.log("Dashboard loaded and initialized successfully"),document.dispatchEvent(new CustomEvent("dashboardReady",{detail:{dashboard:window.dashboard}}))}catch(e){console.error("Failed to initialize dashboard:",e),document.body.innerHTML=`\n <div style="padding: 20px; font-family: sans-serif;">\n <h1>Dashboard Initialization Error</h1>\n <p>The dashboard failed to load properly. Please refresh the page or check the console for details.</p>\n <pre style="background: #f5f5f5; padding: 10px; border-radius: 4px;">${e.message}</pre>\n </div>\n `}});
|
2
|
+
//# sourceMappingURL=dashboard.js.map
|
@@ -0,0 +1,2 @@
|
|
1
|
+
const t=window.io;class e{constructor(){this.socket=null,this.port=null,this.connectionCallbacks={connect:[],disconnect:[],error:[],event:[]},this.eventSchema={required:["source","type","subtype","timestamp","data"],optional:["event","session_id"]},this.isConnected=!1,this.isConnecting=!1,this.lastConnectTime=null,this.disconnectTime=null,this.events=[],this.sessions=new Map,this.currentSessionId=null,this.eventQueue=[],this.maxQueueSize=100,this.retryAttempts=0,this.maxRetryAttempts=5,this.retryDelays=[1e3,2e3,3e3,4e3,5e3],this.pendingEmissions=new Map,this.lastPingTime=null,this.lastPongTime=null,this.pingTimeout=12e4,this.healthCheckInterval=null,this.startStatusCheckFallback(),this.startHealthMonitoring()}connect(t="8765"){this.port=t;const e=`http://localhost:${t}`;if(this.socket&&(this.socket.connected||this.socket.connecting))return console.log("Already connected or connecting, disconnecting first..."),this.socket.disconnect(),void setTimeout(()=>this.doConnect(e),100);this.doConnect(e)}doConnect(e){if(console.log(`Connecting to Socket.IO server at ${e}`),void 0===t)return console.error("Socket.IO library not loaded! Make sure socket.io.min.js is loaded before this script."),void this.notifyConnectionStatus("Socket.IO library not loaded","error");this.isConnecting=!0,this.notifyConnectionStatus("Connecting...","connecting"),this.socket=t(e,{autoConnect:!0,reconnection:!0,reconnectionDelay:1e3,reconnectionDelayMax:1e4,reconnectionAttempts:10,timeout:3e4,forceNew:!0,transports:["websocket","polling"],pingInterval:3e4,pingTimeout:6e4}),this.setupSocketHandlers()}setupSocketHandlers(){this.socket.on("connect",()=>{console.log("Connected to Socket.IO server");const t=this.isConnected;if(this.isConnected=!0,this.isConnecting=!1,this.lastConnectTime=Date.now(),this.retryAttempts=0,this.disconnectTime&&!1===t){const t=(Date.now()-this.disconnectTime)/1e3;console.log(`Reconnected after ${t.toFixed(1)}s downtime`),this.flushEventQueue()}this.notifyConnectionStatus("Connected","connected"),window.socket=this.socket,console.log("SocketClient: Exposed socket globally as window.socket"),this.connectionCallbacks.connect.forEach(t=>t(this.socket.id)),this.requestStatus()}),this.socket.on("disconnect",t=>{const e={reason:t,timestamp:(new Date).toISOString(),wasConnected:this.isConnected,uptimeSeconds:this.lastConnectTime?((Date.now()-this.lastConnectTime)/1e3).toFixed(1):0,lastPing:this.lastPingTime?((Date.now()-this.lastPingTime)/1e3).toFixed(1)+"s ago":"never",lastPong:this.lastPongTime?((Date.now()-this.lastPongTime)/1e3).toFixed(1)+"s ago":"never"};console.log("Disconnected from server:",e),this.isConnected=!1,this.isConnecting=!1,this.disconnectTime=Date.now(),this.notifyConnectionStatus(`Disconnected: ${t}`,"disconnected"),this.connectionCallbacks.disconnect.forEach(e=>e(t));["transport close","ping timeout","transport error","io server disconnect"].includes(t)?(console.log(`Auto-reconnect triggered for reason: ${t}`),this.scheduleReconnect()):"io client disconnect"===t?console.log("Client-initiated disconnect, not auto-reconnecting"):(console.log(`Unknown disconnect reason: ${t}, attempting reconnect anyway`),this.scheduleReconnect())}),this.socket.on("connect_error",t=>{console.error("Connection error:",t),this.isConnecting=!1;const e=t.message||t.description||"Unknown error";this.notifyConnectionStatus(`Connection Error: ${e}`,"disconnected"),this.addEvent({type:"connection.error",timestamp:(new Date).toISOString(),data:{error:e,url:this.socket.io.uri,retry_attempt:this.retryAttempts}}),this.connectionCallbacks.error.forEach(t=>t(e)),this.scheduleReconnect()}),this.socket.on("claude_event",t=>{console.log("Received claude_event:",t);const e=this.validateEventSchema(t);if(!e)return void console.warn("Invalid event schema received:",t);e.type&&e.type.startsWith("code:")&&console.log("Code analysis event received via claude_event, adding to events list for troubleshooting:",e.type);const n=this.transformEvent(e);console.log("Transformed event:",n),this.addEvent(n)}),this.socket.on("ping",t=>{this.lastPingTime=Date.now(),this.socket.emit("pong",{timestamp:t.timestamp,client_time:Date.now()})}),this.socket.on("pong",t=>{this.lastPongTime=Date.now()}),this.socket.on("heartbeat",t=>{console.log("🫀 Received server heartbeat:",t),this.addEvent({type:"system",subtype:"heartbeat",timestamp:t.timestamp||(new Date).toISOString(),data:t}),this.lastPingTime=Date.now(),console.log(`Server heartbeat #${t.heartbeat_number}: ${t.server_uptime_formatted} uptime, ${t.connected_clients} clients connected`)}),this.socket.on("session.started",t=>{this.addEvent({type:"session",subtype:"started",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("session.ended",t=>{this.addEvent({type:"session",subtype:"ended",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("claude.request",t=>{this.addEvent({type:"claude",subtype:"request",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("claude.response",t=>{this.addEvent({type:"claude",subtype:"response",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("agent.loaded",t=>{this.addEvent({type:"agent",subtype:"loaded",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("agent.executed",t=>{this.addEvent({type:"agent",subtype:"executed",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("todo.updated",t=>{this.addEvent({type:"todo",subtype:"updated",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("memory.operation",t=>{this.addEvent({type:"memory",subtype:"operation",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("log.entry",t=>{this.addEvent({type:"log",subtype:"entry",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("code:analysis:queued",t=>{console.log("Code analysis queued event received, adding to events list for troubleshooting"),this.addEvent({type:"code",subtype:"analysis:queued",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("code:analysis:accepted",t=>{console.log("Code analysis accepted event received, adding to events list for troubleshooting"),this.addEvent({type:"code",subtype:"analysis:accepted",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("code:analysis:start",t=>{console.log("Code analysis start event received, adding to events list for troubleshooting"),this.addEvent({type:"code",subtype:"analysis:start",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("code:analysis:complete",t=>{console.log("Code analysis complete event received, adding to events list for troubleshooting"),this.addEvent({type:"code",subtype:"analysis:complete",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("code:analysis:error",t=>{console.log("Code analysis error event received, adding to events list for troubleshooting"),this.addEvent({type:"code",subtype:"analysis:error",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("code:file:start",t=>{console.log("Code file start event received, adding to events list for troubleshooting"),this.addEvent({type:"code",subtype:"file:start",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("code:node:found",t=>{console.log("Code node found event received, adding to events list for troubleshooting"),this.addEvent({type:"code",subtype:"node:found",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("code:analysis:progress",t=>{console.log("Code analysis progress event received, adding to events list for troubleshooting"),this.addEvent({type:"code",subtype:"analysis:progress",timestamp:(new Date).toISOString(),data:t})}),this.socket.on("history",t=>{console.log("Received event history:",t),t&&Array.isArray(t.events)?(console.log(`Processing ${t.events.length} historical events (${t.count} sent, ${t.total_available} total available)`),t.events.forEach(t=>{const e=this.transformEvent(t);this.addEvent(e,!1)}),this.notifyEventUpdate(),console.log(`Event history loaded: ${t.events.length} events added to dashboard`)):Array.isArray(t)&&(console.log("Received legacy event history format:",t.length,"events"),t.forEach(t=>{const e=this.transformEvent(t);this.addEvent(e,!1)}),this.notifyEventUpdate())}),this.socket.on("system.status",t=>{console.log("Received system status:",t),t.sessions&&this.updateSessions(t.sessions),t.current_session&&(this.currentSessionId=t.current_session)})}disconnect(){this.socket&&(this.socket.disconnect(),this.socket=null),this.port=null,this.isConnected=!1,this.isConnecting=!1}emitWithRetry(t,e=null,n={}){const{maxRetries:s=3,retryDelays:o=[1e3,2e3,4e3],onSuccess:i=null,onFailure:a=null}=n,c=`${t}_${Date.now()}_${Math.random()}`,l=(n=0)=>{if(this.socket&&this.socket.connected)try{this.socket.emit(t,e),console.log(`Emitted ${t} successfully`),this.pendingEmissions.delete(c),i&&i()}catch(r){if(console.error(`Failed to emit ${t} (attempt ${n+1}):`,r),n<s-1){const s=o[n]||o[o.length-1];console.log(`Retrying ${t} in ${s}ms...`),this.pendingEmissions.set(c,{event:t,data:e,attemptNum:n+1,scheduledTime:Date.now()+s}),setTimeout(()=>l(n+1),s)}else console.error(`Failed to emit ${t} after ${s} attempts`),this.pendingEmissions.delete(c),a&&a("max_retries_exceeded")}else 0===n&&(this.queueEvent(t,e),console.log(`Queued ${t} for later emission (disconnected)`),a&&a("disconnected"))};l()}queueEvent(t,e){if(this.eventQueue.length>=this.maxQueueSize){const t=this.eventQueue.shift();console.warn(`Event queue full, dropped oldest event: ${t.event}`)}this.eventQueue.push({event:t,data:e,timestamp:Date.now()})}flushEventQueue(){if(0===this.eventQueue.length)return;console.log(`Flushing ${this.eventQueue.length} queued events...`);const t=[...this.eventQueue];this.eventQueue=[],t.forEach((t,e)=>{setTimeout(()=>{this.socket&&this.socket.connected&&(this.socket.emit(t.event,t.data),console.log(`Flushed queued event: ${t.event}`))},100*e)})}scheduleReconnect(){if(this.retryAttempts>=this.maxRetryAttempts)return console.log("Max reconnection attempts reached, stopping auto-reconnect"),void this.notifyConnectionStatus("Reconnection failed","disconnected");const t=this.retryDelays[this.retryAttempts]||this.retryDelays[this.retryDelays.length-1];this.retryAttempts++,console.log(`Scheduling reconnect attempt ${this.retryAttempts}/${this.maxRetryAttempts} in ${t}ms...`),this.notifyConnectionStatus(`Reconnecting in ${t/1e3}s...`,"connecting"),setTimeout(()=>{!this.isConnected&&this.port&&(console.log(`Attempting reconnection ${this.retryAttempts}/${this.maxRetryAttempts}...`),this.connect(this.port))},t)}requestStatus(){this.socket&&this.socket.connected&&(console.log("Requesting server status..."),this.emitWithRetry("request.status",null,{maxRetries:2,retryDelays:[500,1e3]}))}requestHistory(t={}){if(this.socket&&this.socket.connected){const e={limit:t.limit||50,event_types:t.event_types||[]};console.log("Requesting event history...",e),this.emitWithRetry("get_history",e,{maxRetries:3,retryDelays:[1e3,2e3,3e3],onFailure:t=>{console.error(`Failed to request history: ${t}`)}})}else console.warn("Cannot request history: not connected to server")}addEvent(t,e=!0){if(t.timestamp||(t.timestamp=(new Date).toISOString()),t.id||(t.id=Date.now()+Math.random()),this.events.push(t),t.data&&t.data.session_id){const e=t.data.session_id;this.sessions.has(e)||this.sessions.set(e,{id:e,startTime:t.timestamp,lastActivity:t.timestamp,eventCount:0,working_directory:null,git_branch:null});const n=this.sessions.get(e);n.lastActivity=t.timestamp,n.eventCount++;const s=[t.data.cwd,t.data.working_directory,t.data.working_dir,t.data.workingDirectory,t.data.instance_info?.working_dir,t.data.instance_info?.working_directory,t.data.instance_info?.cwd,t.cwd,t.working_directory,t.working_dir];for(const t of s)if(t&&"string"==typeof t&&t.trim()){n.working_directory=t,console.log(`[SOCKET-CLIENT] Found working directory for session ${e}:`,t);break}t.data.git_branch?n.git_branch=t.data.git_branch:t.data.instance_info&&t.data.instance_info.git_branch&&(n.git_branch=t.data.instance_info.git_branch)}e&&this.notifyEventUpdate()}updateSessions(t){Array.isArray(t)&&t.forEach(t=>{this.sessions.set(t.id,t)})}clearEvents(){this.events=[],this.sessions.clear(),this.notifyEventUpdate()}refreshHistory(t={}){this.clearEvents(),this.requestHistory(t)}getEventsBySession(t=null){return t?this.events.filter(e=>e.data&&e.data.session_id===t):this.events}onConnection(t,e){this.connectionCallbacks[t]&&this.connectionCallbacks[t].push(e)}onEventUpdate(t){this.connectionCallbacks.event.push(t)}on(t,e){if(this.socket)return this.socket.on(t,e);console.warn(`Cannot subscribe to '${t}': socket not initialized`)}off(t,e){if(this.socket)return this.socket.off(t,e);console.warn(`Cannot unsubscribe from '${t}': socket not initialized`)}notifyConnectionStatus(t,e){console.log(`SocketClient: Connection status changed to '${t}' (${e})`),this.updateConnectionStatusDOM(t,e),document.dispatchEvent(new CustomEvent("socketConnectionStatus",{detail:{status:t,type:e}}))}updateConnectionStatusDOM(t,e){const n=document.getElementById("connection-status");n?(n.innerHTML=`<span>●</span> ${t}`,n.className=`status-badge status-${e}`,console.log(`SocketClient: Direct DOM update - status: '${t}' (${e})`)):console.warn("SocketClient: Could not find connection-status element in DOM")}notifyEventUpdate(){this.connectionCallbacks.event.forEach(t=>t(this.events,this.sessions)),document.dispatchEvent(new CustomEvent("socketEventUpdate",{detail:{events:this.events,sessions:this.sessions}}))}getConnectionState(){return{isConnected:this.isConnected,isConnecting:this.isConnecting,socketId:this.socket?this.socket.id:null}}validateEventSchema(t){if(!t||"object"!=typeof t)return console.warn("Event data is not an object:",t),null;const e={...t};return e.source||(e.source="system"),e.type||(e.event?e.type=e.event:e.type="unknown"),e.subtype||(e.subtype="generic"),e.timestamp||(e.timestamp=(new Date).toISOString()),e.data||(e.data={}),e.data&&"object"!=typeof e.data&&(e.data={value:e.data}),console.log("Validated event:",e),e}transformEvent(t){if(!t)return t;let e={...t};if(t.type&&t.subtype&&!t.type.includes(".")&&!t.type.includes(":"))e.originalEventName||("generic"===t.subtype||t.type===t.subtype?e.originalEventName=t.type:e.originalEventName=`${t.type}.${t.subtype}`);else if(!t.type&&t.event){const n=t.event;"TestStart"===n||"TestEnd"===n?(e.type="test",e.subtype=n.toLowerCase().replace("test","")):"SubagentStart"===n||"SubagentStop"===n?(e.type="subagent",e.subtype=n.toLowerCase().replace("subagent","")):"ToolCall"===n?(e.type="tool",e.subtype="call"):"UserPrompt"===n?(e.type="hook",e.subtype="user_prompt"):(e.type="unknown",e.subtype=n.toLowerCase(),e.type===e.subtype&&(e.subtype="event")),delete e.event,e.originalEventName=n}else if(t.type){const n=t.type;if(n.startsWith("hook.")){const t=n.substring(5);e.type="hook",e.subtype=t,e.originalEventName=n}else if(n.startsWith("code:")){e.type="code";const t=n.substring(5);e.subtype=t.replace(/:/g,"_"),e.originalEventName=n}else if(n.includes(".")){const[t,...s]=n.split(".");e.type=t,e.subtype=s.join("."),e.originalEventName=n}else if(n.includes(":")){const t=n.split(":",2);e.type=t[0],e.subtype=t.length>1?t[1].replace(/:/g,"_"):"generic",e.originalEventName=n}else t.subtype||(e.subtype="generic",e.originalEventName=n)}else e.type="unknown",e.subtype="",e.originalEventName="unknown";if(t.data&&"object"==typeof t.data){const n=["type","subtype","timestamp","id","event","event_type","originalEventName"];Object.keys(t.data).forEach(s=>{n.includes(s)?"timestamp"!==s&&console.debug(`Protected field '${s}' in data object was not copied to top level to preserve event structure`):"tool_parameters"===s&&"object"==typeof t.data[s]?e[s]=JSON.parse(JSON.stringify(t.data[s])):e[s]=t.data[s]}),e.data=t.data}if("hook"===e.type?"pre_tool"===e.subtype?e.hook_event_name="PreToolUse":"post_tool"===e.subtype?e.hook_event_name="PostToolUse":"subagent_start"===e.subtype?e.hook_event_name="SubagentStart":"subagent_stop"===e.subtype?e.hook_event_name="SubagentStop":"todo_write"===e.subtype?e.hook_event_name="TodoWrite":"start"===e.subtype?e.hook_event_name="Start":"stop"===e.subtype&&(e.hook_event_name="Stop"):"subagent"===e.type?"start"===e.subtype?e.hook_event_name="SubagentStart":"stop"===e.subtype&&(e.hook_event_name="SubagentStop"):"todo"===e.type&&"updated"===e.subtype&&(e.hook_event_name="TodoWrite"),"hook"===e.type&&("pre_tool"===e.subtype||"post_tool"===e.subtype)){console.log("Transformed tool event:",{type:e.type,subtype:e.subtype,hook_event_name:e.hook_event_name,tool_name:e.tool_name,has_tool_parameters:!!e.tool_parameters,tool_parameters:e.tool_parameters,has_data:!!e.data,keys:Object.keys(e).filter(t=>"data"!==t)});["Read","Write","Edit","MultiEdit","NotebookEdit"].includes(e.tool_name)&&console.log("File tool event details:",{tool_name:e.tool_name,file_path:e.tool_parameters?.file_path,path:e.tool_parameters?.path,notebook_path:e.tool_parameters?.notebook_path,full_parameters:e.tool_parameters})}return e}getState(){return{events:this.events,sessions:this.sessions,currentSessionId:this.currentSessionId}}startHealthMonitoring(){this.healthCheckInterval=setInterval(()=>{if(this.isConnected&&this.lastPingTime){const t=Date.now()-this.lastPingTime;t>this.pingTimeout&&(console.warn(`No ping from server for ${t/1e3}s, connection may be stale`),this.socket&&(console.log("Forcing reconnection due to stale connection..."),this.socket.disconnect(),setTimeout(()=>{this.port&&this.connect(this.port)},1e3)))}},1e4)}stopHealthMonitoring(){this.healthCheckInterval&&(clearInterval(this.healthCheckInterval),this.healthCheckInterval=null)}startStatusCheckFallback(){setInterval(()=>{this.checkAndUpdateStatus()},2e3),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>this.checkAndUpdateStatus(),100)}):setTimeout(()=>this.checkAndUpdateStatus(),100)}checkAndUpdateStatus(){let t="Disconnected",e="disconnected";this.socket&&(this.socket.connected?(t="Connected",e="connected",this.isConnected=!0,this.isConnecting=!1):this.socket.connecting||this.isConnecting?(t="Connecting...",e="connecting",this.isConnected=!1):(t="Disconnected",e="disconnected",this.isConnected=!1,this.isConnecting=!1));const n=document.getElementById("connection-status");if(n){const s=n.textContent.replace("●","").trim(),o=n.className,i=`status-badge status-${e}`;s===t&&o===i||(console.log(`SocketClient: Fallback update - was '${s}' (${o}), now '${t}' (${i})`),this.updateConnectionStatusDOM(t,e))}}destroy(){this.stopHealthMonitoring(),this.socket&&(this.socket.disconnect(),this.socket=null),this.eventQueue=[],this.pendingEmissions.clear()}getConnectionMetrics(){return{isConnected:this.isConnected,uptime:this.lastConnectTime?(Date.now()-this.lastConnectTime)/1e3:0,lastPing:this.lastPingTime?(Date.now()-this.lastPingTime)/1e3:null,queuedEvents:this.eventQueue.length,pendingEmissions:this.pendingEmissions.size,retryAttempts:this.retryAttempts}}}window.SocketClient=e;class n{constructor(){this.socketClient=null,this.connectionCallbacks=new Set,this.eventUpdateCallbacks=new Set,this.socketClient=new e,window.socketClient=this.socketClient,this.setupSocketEventHandlers(),setTimeout(()=>{this.updateInitialConnectionStatus()},100),console.log("Socket manager initialized")}setupSocketEventHandlers(){document.addEventListener("socketConnectionStatus",t=>{console.log(`SocketManager: Processing connection status update: ${t.detail.status} (${t.detail.type})`),this.handleConnectionStatusChange(t.detail.status,t.detail.type),this.connectionCallbacks.forEach(e=>{try{e(t.detail.status,t.detail.type)}catch(n){console.error("Error in connection callback:",n)}})}),this.socketClient&&this.socketClient.onEventUpdate(t=>{this.eventUpdateCallbacks.forEach(e=>{try{e(t)}catch(n){console.error("Error in event update callback:",n)}})})}handleConnectionStatusChange(t,e){this.updateConnectionStatus(t,e),"connected"===e&&this.socketClient&&this.socketClient.socket&&(window.socket=this.socketClient.socket,console.log("SocketManager: Exposed socket globally as window.socket"),this.setupGitBranchListener())}updateInitialConnectionStatus(){console.log("SocketManager: Updating initial connection status"),this.socketClient&&"function"==typeof this.socketClient.checkAndUpdateStatus?(console.log("SocketManager: Using socket client checkAndUpdateStatus method"),this.socketClient.checkAndUpdateStatus()):this.socketClient&&this.socketClient.socket?(console.log("SocketManager: Checking socket state directly",{connected:this.socketClient.socket.connected,connecting:this.socketClient.socket.connecting,isConnecting:this.socketClient.isConnecting,isConnected:this.socketClient.isConnected}),this.socketClient.socket.connected?(console.log("SocketManager: Socket is already connected, updating status"),window.socket=this.socketClient.socket,console.log("SocketManager: Exposed socket globally as window.socket"),this.updateConnectionStatus("Connected","connected")):this.socketClient.isConnecting||this.socketClient.socket.connecting?(console.log("SocketManager: Socket is connecting, updating status"),this.updateConnectionStatus("Connecting...","connecting")):(console.log("SocketManager: Socket is disconnected, updating status"),this.updateConnectionStatus("Disconnected","disconnected"))):(console.log("SocketManager: No socket client or socket found, setting disconnected status"),this.updateConnectionStatus("Disconnected","disconnected")),setTimeout(()=>{console.log("SocketManager: Secondary status check after 1 second"),this.socketClient&&this.socketClient.socket&&this.socketClient.socket.connected&&(console.log("SocketManager: Socket connected in secondary check, updating status"),window.socket||(window.socket=this.socketClient.socket,console.log("SocketManager: Exposed socket globally as window.socket (secondary check)")),this.updateConnectionStatus("Connected","connected"))},1e3)}setupGitBranchListener(){this.socketClient.socket.off("git_branch_response"),this.socketClient.socket.on("git_branch_response",t=>{if(t.success){const e=document.getElementById("footer-git-branch");e&&(e.textContent=t.branch||"unknown"),e&&(e.style.display="inline")}else console.error("Git branch request failed:",t.error)})}updateConnectionStatus(t,e){const n=document.getElementById("connection-status");if(n){if(n.querySelector("span")){const e="●";n.innerHTML=`<span>${e}</span> ${t}`}else n.textContent=t;n.className=`status-badge status-${e}`,console.log(`SocketManager: UI updated - status: '${t}' (${e})`)}else console.error("SocketManager: Could not find connection-status element in DOM")}connect(t){this.socketClient&&this.socketClient.connect(t)}disconnect(){this.socketClient&&this.socketClient.disconnect()}isConnected(){return this.socketClient&&this.socketClient.isConnected}isConnecting(){return this.socketClient&&this.socketClient.isConnecting}getSocketClient(){return this.socketClient}getSocket(){return this.socketClient?this.socketClient.socket:null}onConnectionStatusChange(t){this.connectionCallbacks.add(t)}offConnectionStatusChange(t){this.connectionCallbacks.delete(t)}onEventUpdate(t){this.eventUpdateCallbacks.add(t)}offEventUpdate(t){this.eventUpdateCallbacks.delete(t)}toggleConnectionControls(){const t=document.getElementById("connection-controls-row"),e=document.getElementById("connection-toggle-btn");if(t&&e){t.classList.contains("show")?(t.classList.remove("show"),t.style.display="none",e.textContent="Connection Settings"):(t.classList.add("show"),t.style.display="block",e.textContent="Hide Settings")}}setupConnectionControls(){const t=document.getElementById("connect-btn"),e=document.getElementById("disconnect-btn"),n=document.getElementById("connection-toggle-btn");t&&t.addEventListener("click",()=>{const t=document.getElementById("port-input").value||8765;this.connect(t)}),e&&e.addEventListener("click",()=>{this.disconnect()}),n&&n.addEventListener("click",()=>{this.toggleConnectionControls()})}initializeFromURL(t){const e=t.get("port"),n=document.getElementById("port-input");let s=e;s||"http:"!==window.location.protocol||(s=window.location.port||"8765"),s||(s=n?.value||"8765"),n&&(n.value=s);!("false"!==t.get("connect"))||this.isConnected()||this.isConnecting()||(console.log(`SocketManager: Auto-connecting to port ${s}`),this.connect(s))}}class s{constructor(){this.currentTab="events",this.autoScroll=!0,this.selectedCard={tab:null,index:null,type:null,data:null},this.tabNavigation={events:{selectedIndex:-1,items:[]},agents:{selectedIndex:-1,items:[]},tools:{selectedIndex:-1,items:[]},files:{selectedIndex:-1,items:[]}},this.setupEventHandlers(),console.log("UI state manager initialized")}setupEventHandlers(){this.setupTabNavigation(),this.setupUnifiedKeyboardNavigation()}setupTabNavigation(){document.querySelectorAll(".tab-button").forEach(t=>{t.addEventListener("click",()=>{const e=this.getTabNameFromButton(t);this.switchTab(e)})})}setupUnifiedKeyboardNavigation(){document.addEventListener("keydown",t=>{document.activeElement&&["INPUT","TEXTAREA","SELECT"].includes(document.activeElement.tagName)||("ArrowUp"===t.key||"ArrowDown"===t.key?(t.preventDefault(),this.handleUnifiedArrowNavigation("ArrowDown"===t.key?1:-1)):"Enter"===t.key?(t.preventDefault(),this.handleUnifiedEnterKey()):"Escape"===t.key&&this.clearUnifiedSelection())})}getTabNameFromButton(t){const e=t.textContent.toLowerCase();return e.includes("events")?"events":e.includes("activity")?"activity":e.includes("agents")?"agents":e.includes("tools")?"tools":e.includes("files")?"files":e.includes("code")?"code":e.includes("sessions")?"sessions":e.includes("system")?"system":"events"}switchTab(t){console.log(`[DEBUG] switchTab called with tabName: ${t}`);const e=this.currentTab;this.currentTab=t,document.querySelectorAll(".tab-button").forEach(e=>{e.classList.remove("active"),this.getTabNameFromButton(e)===t&&e.classList.add("active")}),document.querySelectorAll(".tab-content").forEach(t=>{t.classList.remove("active")});const n=document.getElementById(`${t}-tab`);n&&n.classList.add("active"),this.clearUnifiedSelection(),document.dispatchEvent(new CustomEvent("tabChanged",{detail:{newTab:t,previousTab:e}})),setTimeout(()=>{this.autoScroll&&this.scrollCurrentTabToBottom()},100)}handleUnifiedArrowNavigation(t){const e=this.tabNavigation[this.currentTab];if(!e)return;let n=e.selectedIndex+t;0!==e.items.length&&(n<0?n=e.items.length-1:n>=e.items.length&&(n=0),this.selectCardByIndex(this.currentTab,n))}handleUnifiedEnterKey(){const t=this.tabNavigation[this.currentTab];if(!t||-1===t.selectedIndex)return;const e=t.items[t.selectedIndex];e&&e.onclick&&e.onclick()}clearUnifiedSelection(){Object.keys(this.tabNavigation).forEach(t=>{this.tabNavigation[t].selectedIndex=-1}),this.clearCardSelection()}updateTabNavigationItems(){const t=this.tabNavigation[this.currentTab];if(!t)return;let e;switch(this.currentTab){case"events":e="#events-list .event-item";break;case"agents":e="#agents-list .event-item";break;case"tools":e="#tools-list .event-item";break;case"files":e="#files-list .event-item"}e&&(t.items=Array.from(document.querySelectorAll(e)))}selectCardByIndex(t,e){const n=this.tabNavigation[t];if(!n||e<0||e>=n.items.length)return;n.selectedIndex=e,this.updateUnifiedSelectionUI();n.items[e]&&this.selectCard(t,e,this.getCardType(t),e),this.showCardDetails(t,e)}updateUnifiedSelectionUI(){document.querySelectorAll(".event-item.keyboard-selected").forEach(t=>{t.classList.remove("keyboard-selected")});const t=this.tabNavigation[this.currentTab];t&&-1!==t.selectedIndex&&t.items[t.selectedIndex]&&t.items[t.selectedIndex].classList.add("keyboard-selected")}showCardDetails(t,e){document.dispatchEvent(new CustomEvent("showCardDetails",{detail:{tabName:t,index:e}}))}selectCard(t,e,n,s){this.clearCardSelection(),this.selectedCard={tab:t,index:e,type:n,data:s},this.updateCardSelectionUI(),console.log("Card selected:",this.selectedCard)}clearCardSelection(){document.querySelectorAll(".event-item.selected, .file-item.selected").forEach(t=>{t.classList.remove("selected")}),this.selectedCard={tab:null,index:null,type:null,data:null}}updateCardSelectionUI(){if(!this.selectedCard.tab||null===this.selectedCard.index)return;let t;switch(this.selectedCard.tab){case"events":t=document.getElementById("events-list");break;case"agents":t=document.getElementById("agents-list");break;case"tools":t=document.getElementById("tools-list");break;case"files":t=document.getElementById("files-list")}if(t){const e=t.querySelectorAll(".event-item, .file-item");e[this.selectedCard.index]&&e[this.selectedCard.index].classList.add("selected")}}getCardType(t){switch(t){case"events":return"event";case"agents":return"agent";case"tools":return"tool";case"files":return"file";default:return"unknown"}}scrollCurrentTabToBottom(){const t=`${this.currentTab}-list`,e=document.getElementById(t);e&&this.autoScroll&&(e.scrollTop=e.scrollHeight)}clearSelection(){this.clearCardSelection(),this.clearUnifiedSelection()}getCurrentTab(){return this.currentTab}getSelectedCard(){return{...this.selectedCard}}getTabNavigation(){return{...this.tabNavigation}}setAutoScroll(t){this.autoScroll=t}getAutoScroll(){return this.autoScroll}}export{n as S,s as U};
|
2
|
+
//# sourceMappingURL=socket-client.js.map
|