fix: briefing discuss button — full article content + scroll + optimistic UI

Three bugs in discussArticle():
- Scroll selector was '.briefing-chat' (doesn't exist) → '.briefing-center';
  the panel never scrolled into view so the response was invisible until refresh
- Only 300-char snippet was sent to the LLM; now passes the full stored
  content (up to 2000 chars) from the backend
- User message wasn't shown until streaming ended; now added optimistically
  to messages[] immediately on click so it appears straight away

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-01 11:46:23 -04:00
parent 5924e565b1
commit 71b8c5965c
3 changed files with 19 additions and 4 deletions
+1
View File
@@ -3,6 +3,7 @@ export interface NewsItem {
title: string
url: string
snippet: string
content: string
published_at: string | null
topics: string[]
source: string
+17 -4
View File
@@ -176,12 +176,25 @@ async function send(overrideText?: string) {
}
async function discussArticle(item: NewsItem) {
const snippet = item.snippet ? `\n\n"${item.snippet.slice(0, 400)}${item.snippet.length > 400 ? '' : ''}"` : ''
const text = `Summarize the following article excerpt for me in a few sentences and share your thoughts. Do not use any research or search tools — just respond conversationally based on what I've shared below.\n\n**${item.title}**${snippet}\n\nSource: ${item.source}`
// Scroll the chat panel into view on narrow layouts, then send
const body = (item.content || item.snippet || '').trim()
const bodyBlock = body ? `\n\n---\n${body}\n---` : ''
const text = `Please summarize and share your thoughts on this article. Do not use any research or search tools — respond conversationally based only on the content below.\n\n**${item.title}**\nSource: ${item.source}${bodyBlock}`
// Add the user message optimistically so it appears immediately
const optimisticMsg: BriefingMessage = {
id: Date.now(),
role: 'user',
content: text,
created_at: new Date().toISOString(),
}
messages.value = [...messages.value, optimisticMsg]
// Scroll the chat panel into view
await nextTick(() => {
document.querySelector('.briefing-chat')?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })
document.querySelector('.briefing-center')?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })
scrollToBottom()
})
await send(text)
}