// ── Session Page ── let _sessionPageCleanup = []; registerPage('session', { async init(params) { const sessionId = params.id; if (!sessionId) return navigateTo('dashboard'); currentSessionId = sessionId; // Session-Name laden const session = await apiGetSession(sessionId); const titleEl = document.getElementById('sessionTitle'); if (session && titleEl) { titleEl.textContent = session.name || 'Unbenannt'; titleEl.addEventListener('dblclick', () => editTitle(sessionId, titleEl)); } // System Prompt Toggle const showSystem = document.getElementById('showSystem'); const systemPrompt = document.getElementById('systemPrompt'); if (showSystem && systemPrompt) { showSystem.addEventListener('change', () => { systemPrompt.classList.toggle('visible', showSystem.checked); }); } // Send const sendBtn = document.getElementById('send'); if (sendBtn) sendBtn.addEventListener('click', sendMessage); // Ctrl+Enter const inputEl = document.getElementById('input'); if (inputEl) { const keyHandler = (e) => { if (e.ctrlKey && e.key === 'Enter') sendMessage(); }; inputEl.addEventListener('keydown', keyHandler); // Auto-Resize inputEl.addEventListener('input', function () { this.style.height = 'auto'; this.style.height = Math.min(this.scrollHeight, 150) + 'px'; }); } // Archivieren const archiveBtn = document.getElementById('archiveBtn'); if (archiveBtn) archiveBtn.addEventListener('click', clearChat); // State zurücksetzen und History laden messages.length = 0; lastKnownMessageId = 0; loadedArchiveCount = 0; isStreaming = false; await loadHistory(); }, destroy() { stopHistoryPolling(); messages.length = 0; lastKnownMessageId = 0; loadedArchiveCount = 0; isStreaming = false; } }); function editTitle(sessionId, titleEl) { const input = document.createElement('input'); input.type = 'text'; input.className = 'session-rename'; input.value = titleEl.textContent; titleEl.replaceWith(input); input.focus(); input.select(); const save = async () => { const newName = input.value.trim(); if (newName) { await apiUpdateSession(sessionId, { name: newName }); const newTitle = document.createElement('h1'); newTitle.id = 'sessionTitle'; newTitle.className = 'editable-title'; newTitle.textContent = newName; newTitle.addEventListener('dblclick', () => editTitle(sessionId, newTitle)); input.replaceWith(newTitle); } else { input.replaceWith(titleEl); } }; input.addEventListener('blur', save); input.addEventListener('keydown', (e) => { if (e.key === 'Enter') input.blur(); if (e.key === 'Escape') { input.replaceWith(titleEl); } }); }