Browse Source

feat: 更新会话处理逻辑,添加新会话处理函数并优化消息加载

feat/agent-independence
npmrun 2 months ago
parent
commit
17f22bca57
  1. 9
      app/composables/useAgentChat.ts
  2. 15
      app/pages/index.vue
  3. BIN
      packages/drizzle-pkg/db.sqlite

9
app/composables/useAgentChat.ts

@ -78,7 +78,7 @@ export function useAgentChat(options: UseAgentChatOptions) {
); );
} }
async function loadMessages(sid: string) { async function loadMessages(sid: string, skipResume = false) {
messages.value = []; messages.value = [];
errorMessage.value = ""; errorMessage.value = "";
try { try {
@ -91,7 +91,9 @@ export function useAgentChat(options: UseAgentChatOptions) {
parts: m.parts ? (typeof m.parts === "string" ? JSON.parse(m.parts) : m.parts) : undefined, parts: m.parts ? (typeof m.parts === "string" ? JSON.parse(m.parts) : m.parts) : undefined,
})); }));
await tryResumeStream(sid); if (!skipResume) {
await tryResumeStream(sid);
}
} catch { } catch {
messages.value = []; messages.value = [];
} }
@ -119,7 +121,6 @@ export function useAgentChat(options: UseAgentChatOptions) {
} }
if (!res.ok) { if (!res.ok) {
await loadMessages(sid);
return; return;
} }
@ -128,7 +129,7 @@ export function useAgentChat(options: UseAgentChatOptions) {
try { try {
const body = await res.json(); const body = await res.json();
if (body?.reason === "already-done" || body?.reason === "no-buffer") { if (body?.reason === "already-done" || body?.reason === "no-buffer") {
await loadMessages(sid); await loadMessages(sid, true);
} }
} catch { /* not JSON */ } } catch { /* not JSON */ }
return; return;

15
app/pages/index.vue

@ -179,6 +179,19 @@ async function handleSend(content: string) {
} }
} }
async function handleNewSession() {
const sid = sessions.currentSessionId.value;
if (sid) {
const inst = chat.getInstance(sid);
if (inst.messages.value.length === 0 && !inst.isLoading.value) {
if (isMobile) mobileSidebarOpen.value = false;
return;
}
}
await sessions.newSession();
if (isMobile) mobileSidebarOpen.value = false;
}
function refreshTitleWithRetry(sid: string) { function refreshTitleWithRetry(sid: string) {
const delays = [3000, 6000, 10000, 15000, 22000]; const delays = [3000, 6000, 10000, 15000, 22000];
delays.forEach((delay) => { delays.forEach((delay) => {
@ -232,7 +245,7 @@ onMounted(async () => {
:user="auth.user.value" :user="auth.user.value"
:collapsed="isMobile ? !mobileSidebarOpen : sidebarCollapsed" :collapsed="isMobile ? !mobileSidebarOpen : sidebarCollapsed"
:mobile="isMobile" :mobile="isMobile"
@new-session="sessions.newSession(); if (isMobile) mobileSidebarOpen = false" @new-session="handleNewSession"
@select="sessions.selectSession($event); if (isMobile) mobileSidebarOpen = false" @select="sessions.selectSession($event); if (isMobile) mobileSidebarOpen = false"
@rename="sessions.renameSession" @rename="sessions.renameSession"
@delete="handleDeleteSession" @delete="handleDeleteSession"

BIN
packages/drizzle-pkg/db.sqlite

Binary file not shown.
Loading…
Cancel
Save