release: prepare 0629001 portal updates

This commit is contained in:
john
2026-06-29 22:20:04 +08:00
parent 18ea4f82fd
commit a40e340a41
84 changed files with 17516 additions and 2475 deletions
+22 -11
View File
@@ -3,6 +3,9 @@ import { mergeMessageContent } from '../../message-stream.mjs';
import { stripUserAddressPrefix } from './userAddress';
const IMAGE_URL_LINE_RE = /^\[图片\d+]: (.+)$/;
const IMAGE_URL_LINES_RE = /\n*\[图片\d+]: [^\n]+/g;
const USER_IDENTITY_BLOCK_RE = /^\[用户身份\][\s\S]*?(?:\n{2,}|$)/;
const TKMIND_VISION_NOTE_RE = /\n*【TKMind 图片分析结果[\s\S]*$/;
function normalizeImageUrl(url: string): string {
const value = String(url ?? '').trim();
@@ -32,6 +35,14 @@ function formatImageUrlsForAgentText(urls: string[]): string {
.join('\n');
}
function stripImageUrlLines(text: string): string {
return String(text ?? '')
.replace(USER_IDENTITY_BLOCK_RE, '')
.replace(TKMIND_VISION_NOTE_RE, '')
.replace(IMAGE_URL_LINES_RE, '')
.trim();
}
function parseImageUrlsFromText(text: string): string[] {
const urls: string[] = [];
for (const line of text.split('\n')) {
@@ -71,12 +82,12 @@ export function normalizeUserMessageForApi(message: Message): Message {
const imageUrls = getImageUrls(message);
const displayText =
message.metadata.displayText ??
message.content
.filter((item): item is Extract<MessageContent, { type: 'text' }> => item.type === 'text')
.map((item) => item.text)
.join('\n')
.replace(/\n*\[图片\d+]: [^\n]+/g, '')
.trim();
stripImageUrlLines(
message.content
.filter((item): item is Extract<MessageContent, { type: 'text' }> => item.type === 'text')
.map((item) => item.text)
.join('\n'),
);
const textOnly = message.content
.filter((item): item is Extract<MessageContent, { type: 'text' }> => item.type === 'text')
@@ -89,7 +100,7 @@ export function normalizeUserMessageForApi(message: Message): Message {
}
const imageText = formatImageUrlsForAgentText(imageUrls);
const agentText = [textOnly.replace(/\n*\[图片\d+]: [^\n]+/g, '').trim(), imageText]
const agentText = [stripImageUrlLines(textOnly), imageText]
.filter(Boolean)
.join('\n\n');
@@ -108,7 +119,7 @@ export function buildUserMessage(
text: string,
options?: { agentText?: string; displayText?: string; imageUrls?: string[]; previewImageUrls?: string[] },
): Message {
const displayText = options?.displayText ?? text;
const displayText = stripImageUrlLines(options?.displayText ?? text);
const imageUrls = (options?.imageUrls ?? []).filter((value) => typeof value === 'string' && value.trim());
const previewImageUrls = (options?.previewImageUrls ?? []).filter(
(value) => typeof value === 'string' && value.trim(),
@@ -160,12 +171,12 @@ export function mergeConversationSnapshot(current: Message[], incoming: Message[
export function getDisplayText(message: Message): string {
if ('displayText' in message.metadata) {
return message.metadata.displayText ?? '';
return stripImageUrlLines(message.metadata.displayText ?? '');
}
const systemText = getSystemNotificationText(message);
if (systemText) return systemText;
const visible = getVisibleText(message);
return message.role === 'user' ? stripUserAddressPrefix(visible) : visible;
return message.role === 'user' ? stripImageUrlLines(stripUserAddressPrefix(visible)) : visible;
}
export function pushMessage(messages: Message[], incoming: Message): Message[] {
@@ -187,7 +198,7 @@ export function getVisibleText(message: Message): string {
.filter((c): c is Extract<MessageContent, { type: 'text' }> => c.type === 'text')
.map((c) => c.text)
.join('');
return text.replace(/\n*\[图片\d+]: [^\n]+/g, '').trim();
return stripImageUrlLines(text);
}
export function getImageUrls(message: Message): string[] {