fix(webui): show quoted context after follow-up send (#5071)
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
interface ParsedUserMessageQuote {
|
||||
quotedContext: string | null;
|
||||
content: string;
|
||||
}
|
||||
|
||||
const QUOTED_CONTEXT_MARKER = "> [!QUOTE]";
|
||||
|
||||
function normalizeNewlines(value: string): string {
|
||||
return value.replace(/\r\n?/g, "\n");
|
||||
}
|
||||
|
||||
export function formatQuotedUserMessage(content: string, quotedContext?: string | null): string {
|
||||
const body = content.trim();
|
||||
const quote = normalizeNewlines(quotedContext ?? "").trim();
|
||||
if (!quote || body.startsWith("/")) return body;
|
||||
|
||||
const blockquote = quote
|
||||
.split("\n")
|
||||
.map((line) => line ? `> ${line}` : ">")
|
||||
.join("\n");
|
||||
const quotedMessage = `${QUOTED_CONTEXT_MARKER}\n${blockquote}`;
|
||||
return body ? `${quotedMessage}\n\n${body}` : quotedMessage;
|
||||
}
|
||||
|
||||
export function parseQuotedUserMessage(content: string): ParsedUserMessageQuote {
|
||||
if (!content.startsWith(QUOTED_CONTEXT_MARKER)) {
|
||||
return { quotedContext: null, content };
|
||||
}
|
||||
const normalized = normalizeNewlines(content);
|
||||
const quoteStart = QUOTED_CONTEXT_MARKER.length + 1;
|
||||
if (!normalized.startsWith(`${QUOTED_CONTEXT_MARKER}\n`)) {
|
||||
return { quotedContext: null, content };
|
||||
}
|
||||
const separatorIndex = normalized.indexOf("\n\n", quoteStart);
|
||||
const quoteBlock =
|
||||
separatorIndex === -1
|
||||
? normalized.slice(quoteStart)
|
||||
: normalized.slice(quoteStart, separatorIndex);
|
||||
const quoteLines = quoteBlock.split("\n");
|
||||
if (
|
||||
quoteLines.length === 0
|
||||
|| quoteLines.some((line) => line !== ">" && !line.startsWith("> "))
|
||||
) {
|
||||
return { quotedContext: null, content };
|
||||
}
|
||||
|
||||
const quotedContext = quoteLines
|
||||
.map((line) => line === ">" ? "" : line.slice(2))
|
||||
.join("\n")
|
||||
.trim();
|
||||
if (!quotedContext) {
|
||||
return { quotedContext: null, content };
|
||||
}
|
||||
return {
|
||||
quotedContext,
|
||||
content: separatorIndex === -1 ? "" : normalized.slice(separatorIndex + 2),
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user