export type PromptDefaultRole = { name: string; title: string; role: string; visualDescription?: string; actionDescription?: string; sceneVisualDescription?: string; description?: string; backstory?: string; personality?: string; motivation?: string; combatStyle?: string; tags?: string[]; }; export type CustomWorldRolePromptBundle = { visualPromptText: string; animationPromptText: string; scenePromptText: string; }; function cleanSeedText(value: string | undefined, maxLength: number) { return (value ?? '').replace(/\s+/gu, ' ').trim().slice(0, maxLength); } function pickFirstDescription( values: Array, maxLength: number, ) { for (const value of values) { const normalized = cleanSeedText(value, maxLength); if (normalized) { return normalized; } } return ''; } export function buildDefaultRolePromptBundle( role: PromptDefaultRole, ): CustomWorldRolePromptBundle { return { visualPromptText: pickFirstDescription( [role.visualDescription, role.description], 220, ), animationPromptText: pickFirstDescription( [role.actionDescription, role.combatStyle], 180, ), scenePromptText: pickFirstDescription( [role.sceneVisualDescription, role.backstory], 220, ), }; }