Refactor: Renomeacao e modernizacao completa para Pedagog / PedagogIA

This commit is contained in:
2026-08-31 10:34:33 +00:00
parent 00341ebf64
commit f3350b0969
16 changed files with 225 additions and 176 deletions
+56 -56
View File
@@ -216,16 +216,16 @@ const initApp = () => {
const searchClearAll = document.getElementById('searchClearAll');
const sidebarTags = document.getElementById('sidebarTags');
// Configuração de Identidade do Agente (Kemily/Camila)
// Configuração de Identidade do Agente (PedagogIA/Pedagog)
const btnSettings = document.getElementById('btnSettings');
const settingsModal = document.getElementById('settingsModal');
const closeSettingsModal = document.getElementById('closeSettingsModal');
const btnSaveSettings = document.getElementById('btnSaveSettings');
const settingAgentName = document.getElementById('settingAgentName');
const previewKemilyAvatar = document.getElementById('previewKemilyAvatar');
const uploadKemilyAvatar = document.getElementById('uploadKemilyAvatar');
const previewCamilaAvatar = document.getElementById('previewCamilaAvatar');
const uploadCamilaAvatar = document.getElementById('uploadCamilaAvatar');
const previewIaAvatar = document.getElementById('previewIaAvatar');
const uploadIaAvatar = document.getElementById('uploadIaAvatar');
const previewUserAvatar = document.getElementById('previewUserAvatar');
const uploadUserAvatar = document.getElementById('uploadUserAvatar');
const welcomeTitle = document.getElementById('welcomeTitle');
const welcomeAvatarImg = document.getElementById('welcomeAvatarImg');
const sidebarAvatarImg = document.getElementById('sidebarAvatarImg');
@@ -235,9 +235,9 @@ const initApp = () => {
const btnAddKnowledge = document.getElementById('btnAddKnowledge');
window.agentConfig = {
agentName: "Kemily",
kemilyAvatarUrl: "assets/kemily.png",
camilaAvatarUrl: "assets/camila_prof.png",
agentName: "PedagogIA",
iaAvatarUrl: "assets/pedagog_ia.png",
userAvatarUrl: "assets/pedagog_user.png",
temperaturePreset: 'equilibrado'
};
@@ -264,22 +264,22 @@ const initApp = () => {
const updateAgentIdentityUI = () => {
if (welcomeTitle) {
welcomeTitle.innerText = `Olá! Sou sua assistente virtual e me chamo ${window.agentConfig.agentName}. Como posso ajudar?`;
welcomeTitle.innerText = `Olá! Sou sua assistente virtual e me chamo ${window.agentConfig.agentName || 'PedagogIA'}. Como posso ajudar?`;
}
if (welcomeAvatarImg) {
welcomeAvatarImg.src = window.agentConfig.kemilyAvatarUrl;
welcomeAvatarImg.src = window.agentConfig.iaAvatarUrl || window.agentConfig.kemilyAvatarUrl || 'assets/pedagog_ia.png';
}
if (sidebarAvatarImg) {
sidebarAvatarImg.src = window.agentConfig.camilaAvatarUrl;
sidebarAvatarImg.src = window.agentConfig.userAvatarUrl || window.agentConfig.camilaAvatarUrl || 'assets/pedagog_user.png';
}
if (settingAgentName) {
settingAgentName.value = window.agentConfig.agentName;
settingAgentName.value = window.agentConfig.agentName || 'PedagogIA';
}
if (previewKemilyAvatar) {
previewKemilyAvatar.src = window.agentConfig.kemilyAvatarUrl;
if (previewIaAvatar) {
previewIaAvatar.src = window.agentConfig.iaAvatarUrl || window.agentConfig.kemilyAvatarUrl || 'assets/pedagog_ia.png';
}
if (previewCamilaAvatar) {
previewCamilaAvatar.src = window.agentConfig.camilaAvatarUrl;
if (previewUserAvatar) {
previewUserAvatar.src = window.agentConfig.userAvatarUrl || window.agentConfig.camilaAvatarUrl || 'assets/pedagog_user.png';
}
// Atualiza seleção de temperatura
renderTemperatureOptions();
@@ -472,17 +472,17 @@ const initApp = () => {
};
// Variáveis temporárias para avatares (em base64 ou URLs novas)
let newKemilyAvatarData = null;
let newCamilaAvatarData = null;
let newIaAvatarData = null;
let newUserAvatarData = null;
// Eventos do Modal
if (btnSettings) {
btnSettings.addEventListener('click', () => {
newKemilyAvatarData = null;
newCamilaAvatarData = null;
if (settingAgentName) settingAgentName.value = window.agentConfig.agentName;
if (previewKemilyAvatar) previewKemilyAvatar.src = window.agentConfig.kemilyAvatarUrl;
if (previewCamilaAvatar) previewCamilaAvatar.src = window.agentConfig.camilaAvatarUrl;
newIaAvatarData = null;
newUserAvatarData = null;
if (settingAgentName) settingAgentName.value = window.agentConfig.agentName || 'PedagogIA';
if (previewIaAvatar) previewIaAvatar.src = window.agentConfig.iaAvatarUrl || window.agentConfig.kemilyAvatarUrl || 'assets/pedagog_ia.png';
if (previewUserAvatar) previewUserAvatar.src = window.agentConfig.userAvatarUrl || window.agentConfig.camilaAvatarUrl || 'assets/pedagog_user.png';
renderTemperatureOptions();
loadConhecimento();
settingsModal.style.display = 'flex';
@@ -529,18 +529,18 @@ const initApp = () => {
}
};
if (uploadKemilyAvatar) {
uploadKemilyAvatar.addEventListener('change', () => {
handleAvatarFileSelect(uploadKemilyAvatar, previewKemilyAvatar, (base64) => {
newKemilyAvatarData = base64;
if (uploadIaAvatar) {
uploadIaAvatar.addEventListener('change', () => {
handleAvatarFileSelect(uploadIaAvatar, previewIaAvatar, (base64) => {
newIaAvatarData = base64;
});
});
}
if (uploadCamilaAvatar) {
uploadCamilaAvatar.addEventListener('change', () => {
handleAvatarFileSelect(uploadCamilaAvatar, previewCamilaAvatar, (base64) => {
newCamilaAvatarData = base64;
if (uploadUserAvatar) {
uploadUserAvatar.addEventListener('change', () => {
handleAvatarFileSelect(uploadUserAvatar, previewUserAvatar, (base64) => {
newUserAvatarData = base64;
});
});
}
@@ -552,31 +552,31 @@ const initApp = () => {
btnSaveSettings.innerText = 'Salvando...';
try {
let kemilyUrl = window.agentConfig.kemilyAvatarUrl;
let camilaUrl = window.agentConfig.camilaAvatarUrl;
let iaUrl = window.agentConfig.iaAvatarUrl || window.agentConfig.kemilyAvatarUrl || 'assets/pedagog_ia.png';
let userUrl = window.agentConfig.userAvatarUrl || window.agentConfig.camilaAvatarUrl || 'assets/pedagog_user.png';
// Se houver novas imagens, faz upload
if (newKemilyAvatarData) {
if (newIaAvatarData) {
const res = await fetch('/api/upload-avatar', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ avatarType: 'kemily', base64Data: newKemilyAvatarData })
body: JSON.stringify({ avatarType: 'ia', base64Data: newIaAvatarData })
});
if (res.ok) {
const data = await res.json();
kemilyUrl = data.url;
iaUrl = data.url;
}
}
if (newCamilaAvatarData) {
if (newUserAvatarData) {
const res = await fetch('/api/upload-avatar', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ avatarType: 'camila', base64Data: newCamilaAvatarData })
body: JSON.stringify({ avatarType: 'user', base64Data: newUserAvatarData })
});
if (res.ok) {
const data = await res.json();
camilaUrl = data.url;
userUrl = data.url;
}
}
@@ -587,8 +587,8 @@ const initApp = () => {
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
agentName: settingAgentName.value,
kemilyAvatarUrl: kemilyUrl,
camilaAvatarUrl: camilaUrl,
iaAvatarUrl: iaUrl,
userAvatarUrl: userUrl,
temperaturePreset: selectedTempPreset
})
});
@@ -615,10 +615,10 @@ const initApp = () => {
loadAgentConfig();
// Variáveis de Estado
let chats = JSON.parse(localStorage.getItem('camila_chats')) || [];
let chats = JSON.parse(localStorage.getItem('pedagog_chats') || localStorage.getItem('camila_chats')) || [];
// Migração: adicionar campos tags e pinned a chats antigos
chats = chats.map(c => ({ ...c, tags: c.tags || [], pinned: c.pinned || false }));
let currentChatId = localStorage.getItem('camila_current_chat_id') || null;
let currentChatId = localStorage.getItem('pedagog_current_chat_id') || localStorage.getItem('camila_current_chat_id') || null;
let isGenerating = false;
let searchQuery = '';
let activeTag = 'all';
@@ -638,7 +638,7 @@ const initApp = () => {
const applyTheme = (theme) => {
document.documentElement.setAttribute('data-theme', theme);
localStorage.setItem('camila_theme', theme);
localStorage.setItem('pedagog_theme', theme);
if (theme === 'light') {
iconThemeSun.style.display = 'none';
iconThemeMoon.style.display = 'block';
@@ -649,7 +649,7 @@ const initApp = () => {
};
// Init theme from localStorage or system preference
const savedTheme = localStorage.getItem('camila_theme');
const savedTheme = localStorage.getItem('pedagog_theme') || localStorage.getItem('camila_theme');
if (savedTheme) {
applyTheme(savedTheme);
} else {
@@ -1283,11 +1283,11 @@ const initApp = () => {
// ==========================================================================
const saveChats = () => {
localStorage.setItem('camila_chats', JSON.stringify(chats));
localStorage.setItem('pedagog_chats', JSON.stringify(chats));
if (currentChatId) {
localStorage.setItem('camila_current_chat_id', currentChatId);
localStorage.setItem('pedagog_current_chat_id', currentChatId);
} else {
localStorage.removeItem('camila_current_chat_id');
localStorage.removeItem('pedagog_current_chat_id');
}
};
@@ -1563,7 +1563,7 @@ const initApp = () => {
if (isGenerating) return;
currentChatId = null;
localStorage.removeItem('camila_current_chat_id');
localStorage.removeItem('pedagog_current_chat_id');
welcomeContainer.style.display = 'flex';
conversationList.innerHTML = '';
@@ -1599,8 +1599,8 @@ const initApp = () => {
row.className = `message-row ${role}`;
const avatarHtml = isUser
? `<div class="avatar user-avatar user-avatar-img-wrapper"><img src="${window.agentConfig?.camilaAvatarUrl || 'assets/camila_prof.png'}" alt="Camila" class="user-avatar-img"></div>`
: `<div class="avatar bot-avatar bot-avatar-img-wrapper"><img src="${window.agentConfig?.kemilyAvatarUrl || 'assets/kemily.png'}" alt="${window.agentConfig?.agentName || 'Kemily'}" class="bot-avatar-img"></div>`;
? `<div class="avatar user-avatar user-avatar-img-wrapper"><img src="${window.agentConfig?.userAvatarUrl || window.agentConfig?.camilaAvatarUrl || 'assets/pedagog_user.png'}" alt="Usuário" class="user-avatar-img"></div>`
: `<div class="avatar bot-avatar bot-avatar-img-wrapper"><img src="${window.agentConfig?.iaAvatarUrl || window.agentConfig?.kemilyAvatarUrl || 'assets/pedagog_ia.png'}" alt="${window.agentConfig?.agentName || 'PedagogIA'}" class="bot-avatar-img"></div>`;
let contentHtml = '';
if (isUser) {
@@ -1991,7 +1991,7 @@ const initApp = () => {
botRow.innerHTML = `
<div class="message-icon">
<div class="avatar bot-avatar bot-avatar-img-wrapper"><img src="${window.agentConfig?.kemilyAvatarUrl || 'assets/kemily.png'}" alt="${window.agentConfig?.agentName || 'Kemily'}" class="bot-avatar-img"></div>
<div class="avatar bot-avatar bot-avatar-img-wrapper"><img src="${window.agentConfig?.iaAvatarUrl || window.agentConfig?.kemilyAvatarUrl || 'assets/pedagog_ia.png'}" alt="${window.agentConfig?.agentName || 'PedagogIA'}" class="bot-avatar-img"></div>
</div>
<div class="message-content-wrapper">
<div class="message-content">
@@ -2713,7 +2713,7 @@ const initApp = () => {
showRecordState('processing');
try {
const turmaData = localStorage.getItem('camila_turma') || '[]';
const turmaData = localStorage.getItem('pedagog_turma') || localStorage.getItem('camila_turma') || '[]';
const res = await fetch('/api/observacao/analisar', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -2923,7 +2923,7 @@ const initApp = () => {
let especialKidsNames = [];
if (isSpecialObsMode) {
const turma = JSON.parse(localStorage.getItem('camila_turma') || '[]');
const turma = JSON.parse(localStorage.getItem('pedagog_turma') || localStorage.getItem('camila_turma') || '[]');
especialKidsNames = turma.filter(c => c.especial).map(c => (c.nome || '').toLowerCase().trim()).filter(Boolean);
if (especialKidsNames.length === 0) {
obsList.innerHTML = '<div class="obs-empty">Nenhuma criança com "Educação Especial" cadastrada na Minha Turma.</div>';
@@ -3051,7 +3051,7 @@ const initApp = () => {
try {
const res = await fetch('/api/alunos');
currentAlunos = await res.json();
localStorage.setItem('camila_turma', JSON.stringify(currentAlunos));
localStorage.setItem('pedagog_turma', JSON.stringify(currentAlunos));
return currentAlunos;
} catch(e) { console.error(e); return []; }
};
@@ -4981,7 +4981,7 @@ Se algum dado não for mencionado, deixe a string vazia ou false para boolean.`
}
// Renderizar quadrinhos na tela (todos, incluindo os anteriores caso tenha sido extensão)
comicsResultTitle.textContent = scriptData.title || comicsResultTitle.textContent || 'Fábrica de Quadrinhos Camila';
comicsResultTitle.textContent = scriptData.title || comicsResultTitle.textContent || 'Fábrica de Quadrinhos Pedagog';
comicsGridContainer.innerHTML = '';
generatedPanelsData.forEach((panel, index) => {