deerflow2/frontend/src/core/threads/priority-hint.ts

56 lines
1.5 KiB
TypeScript

function uniqueNormalizedValues(values: Array<string | undefined>): string[] {
const result: string[] = [];
const seen = new Set<string>();
for (const value of values) {
const normalized = value?.trim();
if (!normalized) continue;
const dedupeKey = normalized.toLocaleLowerCase();
if (seen.has(dedupeKey)) continue;
seen.add(dedupeKey);
result.push(normalized);
}
return result;
}
export function buildPriorityHintText({
attachmentNames,
skillIds,
}: {
attachmentNames: string[];
skillIds: string[];
}): string {
const attachments = uniqueNormalizedValues(attachmentNames);
const skills = uniqueNormalizedValues(skillIds);
if (attachments.length === 0 && skills.length === 0) {
return "";
}
const attachmentPart =
attachments.length > 0 ? `${attachments.join("、")}` : "";
const skillPart = skills.length > 0 ? `${skills.join("、")}` : "";
if (attachmentPart && skillPart) {
return `XClaw优先使用${attachmentPart}${skillPart}`;
}
return `XClaw优先使用${attachmentPart || skillPart}`;
}
export function composeSubmitText({
baseText,
attachmentNames,
skillIds,
}: {
baseText: string;
attachmentNames: string[];
skillIds: string[];
}): string {
const trimmedBase = baseText.trim();
if (!trimmedBase) return trimmedBase;
const priorityHint = buildPriorityHintText({
attachmentNames,
skillIds,
});
if (!priorityHint) return trimmedBase;
return `${trimmedBase}\n${priorityHint}`;
}