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