fix(chat): prevent duplicate user messages in conversation history (#258)

Build conversation_history before adding the new user message to the
session, so the message is sent only via `input` and not duplicated
in `conversation_history` as well.

Closes #257

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
ekko
2026-04-27 17:18:12 +08:00
committed by GitHub
parent 5193dbc49e
commit 88ca3c865d
+8 -5
View File
@@ -777,6 +777,14 @@ export const useChatStore = defineStore('chat', () => {
timestamp: Date.now(),
attachments: attachments && attachments.length > 0 ? attachments : undefined,
}
// Build conversation history BEFORE adding the new message, so the
// user's current message appears only in `input` — not duplicated in
// `conversation_history` as well.
const sessionMsgs = getSessionMsgs(sid)
const history: ChatMessage[] = sessionMsgs
.filter(m => (m.role === 'user' || m.role === 'assistant') && m.content.trim())
.map(m => ({ role: m.role as 'user' | 'assistant' | 'system', content: m.content }))
addMessage(sid, userMsg)
updateSessionTitle(sid)
// Persist immediately so a refresh before the first SSE event (e.g. the
@@ -788,11 +796,6 @@ export const useChatStore = defineStore('chat', () => {
}
try {
// Build conversation history from past messages
const sessionMsgs = getSessionMsgs(sid)
const history: ChatMessage[] = sessionMsgs
.filter(m => (m.role === 'user' || m.role === 'assistant') && m.content.trim())
.map(m => ({ role: m.role as 'user' | 'assistant' | 'system', content: m.content }))
// Upload attachments and build input with file paths
let inputText = content.trim()