/** * Chat Agent Mode — handles toggling between Agent and Chat mode, * multi-panel layout management, and WebSocket message routing * for thought process, terminal output, browser preview, and step tracking. */ (function () { "use strict"; var agentMode = false; var currentStep = 0; var totalSteps = 0; var terminalLineCount = 0; function initAgentMode() { setupModeToggle(); setupToggleSwitches(); setupStepNavigation(); setupQuickActions(); setupSidebarItems(); } function setupModeToggle() { var agentBtn = document.getElementById("modeAgentBtn"); var chatBtn = document.getElementById("modeChatBtn"); if (!agentBtn || !chatBtn) return; agentBtn.addEventListener("click", function () { setMode("agent"); }); chatBtn.addEventListener("click", function () { setMode("chat"); }); } function setMode(mode) { var chatApp = document.getElementById("chat-app"); var agentBtn = document.getElementById("modeAgentBtn"); var chatBtn = document.getElementById("modeChatBtn"); var quickActions = document.getElementById("quickActions"); if (!chatApp || !agentBtn || !chatBtn) return; agentMode = mode === "agent"; agentBtn.classList.toggle("active", agentMode); chatBtn.classList.toggle("active", !agentMode); if (agentMode) { chatApp.classList.add("agent-mode"); if (quickActions) quickActions.style.display = "none"; } else { chatApp.classList.remove("agent-mode"); if (quickActions) quickActions.style.display = ""; } } function setupToggleSwitches() { var planToggle = document.getElementById("togglePlan"); var yoloToggle = document.getElementById("toggleYolo"); if (planToggle) { planToggle.addEventListener("click", function () { this.classList.toggle("on"); emitModeChange(); }); } if (yoloToggle) { yoloToggle.addEventListener("click", function () { this.classList.toggle("on"); emitModeChange(); }); } } function emitModeChange() { var planOn = document.getElementById("togglePlan"); var yoloOn = document.getElementById("toggleYolo"); var mode = "plan"; if (yoloOn && yoloOn.classList.contains("on")) { mode = "yolo"; } if (window.ws && window.ws.readyState === WebSocket.OPEN) { window.ws.send(JSON.stringify({ type: "toggle_mode", mode: mode })); } } function setupStepNavigation() { var prevBtn = document.getElementById("stepPrev"); var nextBtn = document.getElementById("stepNext"); if (prevBtn) { prevBtn.addEventListener("click", function () { if (currentStep > 1) { currentStep--; updateStepCounter(); } }); } if (nextBtn) { nextBtn.addEventListener("click", function () { if (currentStep < totalSteps) { currentStep++; updateStepCounter(); } }); } } function updateStepCounter() { var display = document.getElementById("stepCounterText"); if (display) { display.textContent = currentStep + " / " + totalSteps; } } function setupQuickActions() { var chips = document.querySelectorAll(".quick-action-chip"); chips.forEach(function (chip) { chip.addEventListener("click", function () { var action = this.getAttribute("data-action"); var prompts = { "full-stack": "Create a full-stack web application", "writing": "Help me write ", "data-insight": "Analyze data and provide insights", "magic-design": "Design a beautiful UI for " }; var input = document.getElementById("messageInput"); if (input && prompts[action]) { input.value = prompts[action]; input.focus(); } }); }); } function setupSidebarItems() { var items = document.querySelectorAll(".agent-sidebar-item"); items.forEach(function (item) { item.addEventListener("click", function () { items.forEach(function (i) { i.classList.remove("active"); }); this.classList.add("active"); }); }); } /* =========================================== Agent Mode WebSocket Message Handlers =========================================== */ function handleAgentMessage(data) { if (!agentMode) return; switch (data.type) { case "thought_process": renderThoughtProcess(data.content); break; case "terminal_output": appendTerminalLine(data.line, data.stream); break; case "browser_ready": showBrowserPreview(data.url); break; case "step_progress": currentStep = data.current; totalSteps = data.total; updateStepCounter(); break; case "step_complete": break; case "todo_update": renderTodoList(data.todos); break; case "agent_status": updateAgentInfo(data); break; case "file_created": incrementBadge("explorerBadge"); break; } } function renderThoughtProcess(content) { var messages = document.getElementById("messages"); if (!messages) return; var block = document.createElement("div"); block.className = "thought-process"; block.innerHTML = '" + '