fix(relay): send conversation history to SaaS relay (BUG-008)
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

SaaS Relay was sending only the current message without conversation
history, giving LLM no context from previous turns. Root cause:
streamStore passed only `content` string to chatStream(), and
saas-relay-client hard-coded a single-element messages array.

Fix:
- GatewayClient.chatStream() opts: add `history` field
- streamStore: extract last 20 messages as history before calling chatStream
- saas-relay-client: build messages array from history + current message
This commit is contained in:
iven
2026-04-09 22:41:56 +08:00
parent f8850ba95a
commit 9442471c98
3 changed files with 18 additions and 1 deletions

View File

@@ -296,6 +296,13 @@ export const useStreamStore = create<StreamState>()(
useConversationStore.setState({ sessionKey: effectiveSessionKey });
}
// Build conversation history for relay clients (last 20 messages ≈ 10 turns)
const history = (_chat?.getMessages() || [])
.filter(m => m.role === 'user' || m.role === 'assistant')
.filter(m => !m.streaming && !m.optimistic)
.map(m => ({ role: m.role, content: m.content }))
.slice(-20);
const result = await client.chatStream(
content,
{
@@ -528,6 +535,7 @@ export const useStreamStore = create<StreamState>()(
reasoning_effort: get().getChatModeConfig().reasoning_effort,
plan_mode: get().getChatModeConfig().plan_mode,
subagent_enabled: get().getChatModeConfig().subagent_enabled,
history,
}
);