async function sendMessage(e) { if (e && e.preventDefault) e.preventDefault(); const input = document.getElementById("user-input"); const chatWindow = document.getElementById("chat-window"); const sendBtn = document.getElementById("send-btn"); if (!input || !chatWindow) return; const text = input.value.trim(); if (!text) return; // Вывод сообщения пользователя const userMsgHtml = `
${escapeHtml(text)}
`; chatWindow.insertAdjacentHTML("beforeend", userMsgHtml); input.value = ""; input.style.height = "auto"; chatWindow.scrollTop = chatWindow.scrollHeight; if (sendBtn) { sendBtn.disabled = true; sendBtn.classList.add("opacity-50"); } const token = typeof API_TOKEN !== 'undefined' && API_TOKEN ? API_TOKEN : localStorage.getItem("scud_api_auth_token"); const isGuest = typeof IS_GUEST !== 'undefined' ? IS_GUEST : (localStorage.getItem("scud_is_guest") === "true"); const endpoint = isGuest ? "/api/v1/chat/guest" : "/api/v1/chat"; const headers = { "Content-Type": "application/json" }; if (!isGuest && token) { headers["Authorization"] = "Bearer " + token; } try { const res = await fetch(endpoint, { method: "POST", headers: headers, body: JSON.stringify({ session_id: "web_session_main", message: text }) }); if (res.status === 401 && !isGuest) { if (typeof logout === 'function') logout(); return; } const data = await res.json(); const assistantTitle = isGuest ? "Локальная нейросеть (Гость)" : "ИИ-Ассистент SCUD Orion AI"; const replyText = data.reply || "Пустой ответ от нейросети"; const botMsgHtml = `

${assistantTitle}

${escapeHtml(replyText)}

`; chatWindow.insertAdjacentHTML("beforeend", botMsgHtml); chatWindow.scrollTop = chatWindow.scrollHeight; if (!isGuest && typeof loadTasks === 'function') { loadTasks(); } } catch (err) { console.error("[Chat Error]", err); const errorHtml = `
Ошибка связи с сервером.
`; chatWindow.insertAdjacentHTML("beforeend", errorHtml); chatWindow.scrollTop = chatWindow.scrollHeight; } finally { if (sendBtn) { sendBtn.disabled = false; sendBtn.classList.remove("opacity-50"); } } } function escapeHtml(text) { if (!text) return ""; return text .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); }