feat(FN-3392): implement follow-up suggestion contract and policy system
Merges the evaluator follow-up suggestion system (FN-3392, Steps 1–5), which adds a normalized contract, provenance tracking, and lifecycle documentation for AI-generated follow-up tasks, alongside chat UI improvements including unread indicators in header and mobile nav, corrected message routing, Fusion-Task-Id: FN-3392
This commit is contained in:
@@ -8220,11 +8220,17 @@ export function streamChatResponse(
|
||||
processLines(decoder.decode(value, { stream: true }));
|
||||
}
|
||||
|
||||
const hasUndispatchedTrailingFragment =
|
||||
buffer.length > 0 || currentEvent.length > 0 || currentDataLines.length > 0;
|
||||
|
||||
// Server closed the stream without emitting a terminal `done` or `error`
|
||||
// SSE event (common on flaky mobile networks, proxy idle-kill, or
|
||||
// backgrounded tabs). Surface as an error so the client unwinds
|
||||
// streaming state instead of getting stuck with isStreaming=true.
|
||||
if (!terminated && !closedByUser) {
|
||||
// Ignore dangling partial fragments at EOF: those indicate a truncated
|
||||
// trailing event that should be dropped rather than surfaced as transport
|
||||
// failure.
|
||||
if (!terminated && !closedByUser && !hasUndispatchedTrailingFragment) {
|
||||
handlers.onError?.("Connection closed unexpectedly");
|
||||
}
|
||||
} catch (err: unknown) {
|
||||
|
||||
Reference in New Issue
Block a user