fix some minor issues

This commit is contained in:
2026-04-08 09:35:49 +02:00
parent 31569b2d19
commit 603f8492cb
3 changed files with 24 additions and 22 deletions
+2 -1
View File
@@ -8,10 +8,11 @@
},
"dependencies": {
"bcrypt": "^5.1.1",
"body-parser": "^1.20.2",
"better-sqlite3": "^9.5.0",
"body-parser": "^1.20.2",
"express": "^4.19.2",
"express-session": "^1.17.3",
"qs": "^6.15.0",
"session-file-store": "^1.5.0"
}
}
+5 -4
View File
@@ -139,19 +139,20 @@ async function collectMarketPersona(marketId, personaType) {
setMarketStatus(personaType === "assistant" ? "AI persona collected." : "User persona collected.", "success");
}
refreshMarketBtn.addEventListener("click", loadMarketPersonas);
refreshMarketBtn.addEventListener("click", () => { void loadMarketPersonas(); });
marketSearchInput.addEventListener("input", applyMarketFilter);
marketPreviewCancel.addEventListener("click", closeMarketPreview);
marketPreviewClose.addEventListener("click", closeMarketPreview);
marketPreviewModal.addEventListener("click", (event) => { if (event.target === marketPreviewModal) closeMarketPreview(); });
marketPreviewConfirm.addEventListener("click", async () => {
if (!pendingMarketPersona) return;
const {id, persona_type} = pendingMarketPersona;
const marketId = pendingMarketPersona.id;
const personaType = pendingMarketPersona.persona_type;
closeMarketPreview();
await collectMarketPersona(id, persona_type);
await collectMarketPersona(marketId, personaType);
});
window.addEventListener("load", () => {
applyTheme(localStorage.getItem("krishd-theme") || "fakegpt");
loadMarketPersonas();
void loadMarketPersonas();
});
+17 -17
View File
@@ -7,7 +7,7 @@ const registerUsernameInput = $("registerUsername"), registerPasswordInput = $("
const loginSubmit = $("loginSubmit"), registerSubmit = $("registerSubmit");
const chatList = $("chatList"), chatSearchInput = $("chatSearch"), newChatBtn = $("newChat");
const renameChatBtn = $("renameChat"), clearChatBtn = $("clearChat"), exportChatBtn = $("exportChat");
const activeChatTitle = $("activeChatTitle"), workspaceSubline = $("workspaceSubline"), sessionUser = $("sessionUser");
const activeChatTitle = $("activeChatTitle"), sessionUser = $("sessionUser");
const personaList = $("personaList"), userPersonaList = $("userPersonaList");
const personaForm = $("personaForm"), personaFormTitle = $("personaFormTitle"), personaTypeSelect = $("personaType");
const personaNameInput = $("personaName"), personaPronounsInput = $("personaPronouns"), personaAppearanceInput = $("personaAppearance");
@@ -58,8 +58,10 @@ function setPersonaFormNotice(message = "", state = "") {
personaFormNotice.className = state ? `status ${state}` : "status";
}
function setMessageContent(el, content) {
if (window.marked && window.DOMPurify) {
el.innerHTML = DOMPurify.sanitize(marked.parse(content, {breaks: true}));
const markdownParser = window.marked;
const purifier = window.DOMPurify;
if (markdownParser?.parse && purifier?.sanitize) {
el.innerHTML = purifier.sanitize(markdownParser.parse(content, {breaks: true}));
} else {
el.textContent = content;
}
@@ -110,10 +112,6 @@ function updateWorkspaceCopy() {
}
}
function updateSummaryStats() {
return currentSummary;
}
function updateContextRail() {
return modelSelect?.selectedOptions[0]?.textContent || "";
}
@@ -353,13 +351,14 @@ async function deleteChat(id) {
async function displayModels() {
const res = await get("/models");
if (res.error || !Array.isArray(res.models)) {
const models = Array.isArray(res.models) ? res.models : null;
if (res.error || !models) {
modelSelect.innerHTML = "<option>Error loading models</option>";
updateContextRail();
return setNotice("Models could not be loaded.", "error");
}
modelSelect.innerHTML = "";
res.models.forEach((model, index) => {
models.forEach((model, index) => {
const option = document.createElement("option");
option.value = model.model; option.textContent = model.name; option.selected = index === 0; modelSelect.appendChild(option);
});
@@ -428,23 +427,24 @@ function togglePersonaPopover(event) {
}
toggleButtons.forEach((btn) => btn.addEventListener("click", () => showAuthScreen(btn.dataset.target)));
loginForm.addEventListener("submit", (event) => { event.preventDefault(); handleAuth("login", {username: loginUsernameInput.value.trim(), password: loginPasswordInput.value.trim()}); });
registerForm.addEventListener("submit", (event) => { event.preventDefault(); handleAuth("register", {username: registerUsernameInput.value.trim(), password: registerPasswordInput.value.trim()}); });
loginForm.addEventListener("submit", (event) => { event.preventDefault(); void handleAuth("login", {username: loginUsernameInput.value.trim(), password: loginPasswordInput.value.trim()}); });
registerForm.addEventListener("submit", (event) => { event.preventDefault(); void handleAuth("register", {username: registerUsernameInput.value.trim(), password: registerPasswordInput.value.trim()}); });
$("logout").addEventListener("click", async () => {
await post("/logout", {}); chatDiv.style.display = "none"; authDiv.style.display = "grid";
activeChatId = null; currentUsername = ""; currentSummary = null; chatSessions = []; currentMessages = []; assistantPersonas = []; userPersonas = [];
activePersonaId = null; activeUserPersonaId = null; publishedPersonaIds = new Set(); messagesDiv.innerHTML = ""; renderChatList(); updateChatActionState();
showAuthScreen("login"); setAuthMessage("Logged out.", "success"); setNotice("Ready.");
});
sendBtn.addEventListener("click", sendMessage);
msgInput.addEventListener("keydown", (event) => { if (event.key === "Enter" && !event.shiftKey) { event.preventDefault(); sendMessage(); } });
sendBtn.addEventListener("click", () => { void sendMessage(); });
msgInput.addEventListener("keydown", (event) => { if (event.key === "Enter" && !event.shiftKey) { event.preventDefault(); void sendMessage(); } });
msgInput.addEventListener("input", function () { this.style.height = "auto"; this.style.height = `${Math.min(this.scrollHeight, 180)}px`; });
newChatBtn.addEventListener("click", createNewChat); renameChatBtn.addEventListener("click", () => activeChatId && renameChat(activeChatId));
clearChatBtn.addEventListener("click", () => activeChatId && clearChat(activeChatId)); exportChatBtn.addEventListener("click", exportCurrentChat);
newChatBtn.addEventListener("click", () => { void createNewChat(); });
renameChatBtn.addEventListener("click", () => { if (activeChatId) void renameChat(activeChatId); });
clearChatBtn.addEventListener("click", () => { if (activeChatId) void clearChat(activeChatId); }); exportChatBtn.addEventListener("click", exportCurrentChat);
chatSearchInput.addEventListener("input", renderChatList); modelSelect.addEventListener("change", updateContextRail);
newPersonaBtn.addEventListener("click", () => openPersonaForm()); newUserPersonaBtn.addEventListener("click", () => openPersonaForm(null, "user"));
clearPersonaBtn.addEventListener("click", () => clearPersona("assistant")); clearUserPersonaBtn.addEventListener("click", () => clearPersona("user"));
personaForm.addEventListener("submit", (event) => { event.preventDefault(); savePersona(); }); personaCloseBtn.addEventListener("click", closePersonaForm);
clearPersonaBtn.addEventListener("click", () => { void clearPersona("assistant"); }); clearUserPersonaBtn.addEventListener("click", () => { void clearPersona("user"); });
personaForm.addEventListener("submit", (event) => { event.preventDefault(); void savePersona(); }); personaCloseBtn.addEventListener("click", closePersonaForm);
personaModal.addEventListener("click", (event) => { if (event.target === personaModal) closePersonaForm(); });
personaMenuButton.addEventListener("click", togglePersonaPopover); personaPopover.addEventListener("click", (event) => event.stopPropagation()); document.addEventListener("click", closePersonaPopover);
document.addEventListener("keydown", (event) => { if (event.key === "Escape") { closePersonaPopover(); closePersonaForm(); } });