mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-15 03:50:40 +00:00
69 lines
1.6 KiB
TypeScript
69 lines
1.6 KiB
TypeScript
import {
|
|
isAvatarHttpUrl,
|
|
isAvatarImageDataUrl,
|
|
looksLikeAvatarPath,
|
|
} from "../shared/avatar-policy.js";
|
|
|
|
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}`;
|
|
}
|
|
|
|
export function resolveAssistantAvatarUrl(params: {
|
|
avatar?: string | null;
|
|
agentId?: string | null;
|
|
basePath?: string;
|
|
}): string | undefined {
|
|
const avatar = params.avatar?.trim();
|
|
if (!avatar) {
|
|
return undefined;
|
|
}
|
|
if (isAvatarHttpUrl(avatar) || isAvatarImageDataUrl(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 (looksLikeAvatarPath(avatar)) {
|
|
return buildControlUiAvatarUrl(basePath, params.agentId);
|
|
}
|
|
return avatar;
|
|
}
|
|
|
|
export { CONTROL_UI_AVATAR_PREFIX };
|