Spaces:
Paused
Paused
| const CONTROL_UI_AVATAR_PREFIX = "/avatar"; | |
| export function normalizeControlUiBasePath(basePath?: string): string { | |
| if (!basePath) { | |
| return ""; | |
| } | |
| let normalized = basePath.trim(); | |
| if (!normalized) { | |
| return ""; | |
| } | |
| if (!normalized.startsWith("/")) { | |
| normalized = `/${normalized}`; | |
| } | |
| if (normalized === "/") { | |
| return ""; | |
| } | |
| if (normalized.endsWith("/")) { | |
| normalized = normalized.slice(0, -1); | |
| } | |
| return normalized; | |
| } | |
| export function buildControlUiAvatarUrl(basePath: string, agentId: string): string { | |
| return basePath | |
| ? `${basePath}${CONTROL_UI_AVATAR_PREFIX}/${agentId}` | |
| : `${CONTROL_UI_AVATAR_PREFIX}/${agentId}`; | |
| } | |
| function looksLikeLocalAvatarPath(value: string): boolean { | |
| if (/[\\/]/.test(value)) { | |
| return true; | |
| } | |
| return /\.(png|jpe?g|gif|webp|svg|ico)$/i.test(value); | |
| } | |
| export function resolveAssistantAvatarUrl(params: { | |
| avatar?: string | null; | |
| agentId?: string | null; | |
| basePath?: string; | |
| }): string | undefined { | |
| const avatar = params.avatar?.trim(); | |
| if (!avatar) { | |
| return undefined; | |
| } | |
| if (/^https?:\/\//i.test(avatar) || /^data:image\//i.test(avatar)) { | |
| return avatar; | |
| } | |
| const basePath = normalizeControlUiBasePath(params.basePath); | |
| const baseAvatarPrefix = basePath | |
| ? `${basePath}${CONTROL_UI_AVATAR_PREFIX}/` | |
| : `${CONTROL_UI_AVATAR_PREFIX}/`; | |
| if (basePath && avatar.startsWith(`${CONTROL_UI_AVATAR_PREFIX}/`)) { | |
| return `${basePath}${avatar}`; | |
| } | |
| if (avatar.startsWith(baseAvatarPrefix)) { | |
| return avatar; | |
| } | |
| if (!params.agentId) { | |
| return avatar; | |
| } | |
| if (looksLikeLocalAvatarPath(avatar)) { | |
| return buildControlUiAvatarUrl(basePath, params.agentId); | |
| } | |
| return avatar; | |
| } | |
| export { CONTROL_UI_AVATAR_PREFIX }; | |