Files
ChatAIBot/static/js/app.js
T
2026-05-28 14:29:43 +03:00

67 lines
2.4 KiB
JavaScript

import { toggleSidebar, dom, setRpgEnabled } from './state.js';
import { initSessions, createNewChat } from './sessions.js';
import { loadPersonas, initPersonaModals } from './personas.js';
import { sendMessage, clearHistory } from './chat.js';
document.getElementById('sidebarToggle').addEventListener('click', () => {
const open = toggleSidebar();
document.getElementById('sidebar').classList.toggle('collapsed', !open);
});
document.getElementById('newChatBtn').addEventListener('click', createNewChat);
dom.inputEl.addEventListener('input', () => {
dom.inputEl.style.height = 'auto';
dom.inputEl.style.height = dom.inputEl.scrollHeight + 'px';
});
dom.inputEl.addEventListener('keydown', (e) => {
if (e.key === 'Enter' && !e.shiftKey) {
e.preventDefault();
sendMessage();
}
});
dom.sendBtn.addEventListener('click', sendMessage);
dom.clearBtn.addEventListener('click', clearHistory);
dom.rpgToggle?.addEventListener('change', async () => {
setRpgEnabled(dom.rpgToggle.checked);
const { sessionId } = await import('./state.js');
if (!sessionId) return;
await fetch(`/sessions/${sessionId}`, {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ rpg_enabled: dom.rpgToggle.checked }),
});
// Debug: immediately bootstrap plot arc and show it in chat
if (dom.rpgToggle.checked) {
const { currentPersona } = await import('./state.js');
const res = await fetch('/chat/rpg/bootstrap', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ session_id: sessionId, persona_id: currentPersona }),
});
if (res.ok) {
const data = await res.json();
if (data.plot_arc) {
const { addMessage } = await import('./chat.js');
const title = data.plot_arc.title || 'PlotArc';
const phase = data.plot_arc.phase || '';
const hint = data.plot_arc.next_beat_hint || '';
addMessage('assistant', `--- PlotArc ---\n${title}\nphase: ${phase}\nnext: ${hint}\n---`);
}
}
}
});
dom.systemBlobToggle?.addEventListener('click', () => {
const hidden = dom.systemBlobContent.classList.toggle('hidden');
dom.systemBlobToggle.textContent = hidden ? 'Показать' : 'Скрыть';
});
initPersonaModals();
await initSessions();
loadPersonas();