From f8edd01c373abd9254a9a4c3d3009a1312a204a7 Mon Sep 17 00:00:00 2001 From: Shivering Ocelot Date: Sat, 12 Jul 2025 19:27:15 -0500 Subject: [PATCH] Support creating chats. Add agents in sidebar. Improve chat state management --- frontend-vue/src/backend.js | 23 ++++- frontend-vue/src/components/main/Sidebar.vue | 18 ++-- frontend-vue/src/router/index.js | 5 + frontend-vue/src/ui.js | 4 +- frontend-vue/src/views/Chat.vue | 100 ++++++++++++------- frontend-vue/src/views/ChatCreate.vue | 83 +++++++++++++++ 6 files changed, 184 insertions(+), 49 deletions(-) create mode 100644 frontend-vue/src/views/ChatCreate.vue diff --git a/frontend-vue/src/backend.js b/frontend-vue/src/backend.js index f6b8c37..2af3c22 100644 --- a/frontend-vue/src/backend.js +++ b/frontend-vue/src/backend.js @@ -16,7 +16,8 @@ let backendUrl = null; let nextNonce = 0; let reconnectTimeout = null; // For managing the reconnect timer let cache = { - chat: null, + chats: null, + agents: null, }; // Auth @@ -256,10 +257,24 @@ export async function getChat(chatId) { return allChats.find(chat => chat.id === chatId) || null; } -export function invalidateCache({ chat = false } = {}) { - if (chat) { - cache.chats = null; +export async function getAgents() { + if (cache.agents === null) { + const response = await sendAction("get-agents", {}); + if (response && response.agents) { + cache.agents = response.agents.map(msg => ({ + id: msg.id, + name: msg.name?.length > 0 ? msg.name : ``, + })); + } else { + throw new Error("Invalid response for get-agents: " + JSON.stringify(response)); + } } + return cache.agents; +} + +export function invalidateCache({ chats=false, agents=false } = {}) { + if (chats) cache.chats = null; + if (agents) cache.agents = null; } diff --git a/frontend-vue/src/components/main/Sidebar.vue b/frontend-vue/src/components/main/Sidebar.vue index f799bea..0bf64f3 100644 --- a/frontend-vue/src/components/main/Sidebar.vue +++ b/frontend-vue/src/components/main/Sidebar.vue @@ -14,8 +14,11 @@ const agents = ref([]); onMounted(async () => { - chats.value = (await backend.getChats()).map(entry => { - return {id: entry.id, name: entry.name}; + chats.value = (await backend.getChats()).map(it => { + return {id: it.id, name: it.name}; + }); + agents.value = (await backend.getAgents()).map(it => { + return {id: it.id, name: it.name}; }); }); @@ -35,10 +38,13 @@
  • -