// ── Avatar Transform Helper ──
function _buildAvatarTransformStyle(obj) {
const parts = [];
if (obj.avatarScale && obj.avatarScale !== 1) parts.push(`scale(${obj.avatarScale})`);
if (obj.avatarOffsetX || obj.avatarOffsetY) parts.push(`translate(${obj.avatarOffsetX || 0}%, ${obj.avatarOffsetY || 0}%)`);
return parts.length ? ` style="transform: ${parts.join(' ')}"` : '';
}
// ── Session Card Helper ──
// Erzeugt ein .card-Element für eine Session (wiederverwendbar für Dashboard + Picker).
function buildSessionCard(session, agent) {
const card = document.createElement('div');
card.className = 'card';
const transformStyle = _buildAvatarTransformStyle(session);
const imageHtml = session.image ? `
` : '';
// Badges
const badges = [];
if (agent) badges.push(`${esc(agent.name)}`);
if (session.reviewAgentId) badges.push(``);
if (session.finalizerAgentId) badges.push(``);
if (session.context) badges.push(``);
if (session.telegramConfigured) badges.push(``);
// Meta
const metaParts = [];
if (session.messageCount) metaParts.push(` ${esc(session.messageCount + ' Nachrichten')}`);
if (session.archiveMessageCount) metaParts.push(` ${esc(session.archiveMessageCount + ' Nachrichten archiviert')}`);
if (session.workspace) metaParts.push(` ${esc(session.workspace)}`);
card.innerHTML = `
${esc(session.name || 'Unbenannt')}
${badges.join('')}
${metaParts.length ? `
${metaParts.join('')}
` : ''}
`;
return card;
}
// ── Telegram Bot Card Helper ──
function buildTelegramBotCard(bot) {
const card = document.createElement('div');
card.className = 'card card-compact';
const badges = [];
if (bot.isPublic) {
badges.push('
${esc(bot.name)}
${badges.join('')}
${metaParts.length ? `
${metaParts.join('')}
` : ''}
`;
return card;
}
// ── User Card Helper ──
// Erzeugt ein kompaktes .card-Element für einen Benutzer (für den Zuweisungs-Picker).
function buildUserCard(user) {
const card = document.createElement('div');
card.className = 'card card-compact';
const badges = [];
if (user.isAdmin) {
badges.push('
${esc(title)}
${badges.join('')}
${metaParts.length ? `
${metaParts.join('')}
` : ''}
`;
return card;
}
// ── Agent Card Helper ──
// Erzeugt ein .card-Element für einen Agent (wiederverwendbar für Dashboard + Picker).
function buildAgentCard(agent, skills) {
const card = document.createElement('div');
card.className = 'card';
const agentTransformStyle = _buildAvatarTransformStyle(agent);
const imageHtml = agent.avatar ? `
${esc(agent.name)}
${prettyModelName(agent.model)}
${effort ? `${effort}` : ``}
${badges.length ? `
${badges.join('')}
` : ''}
`;
return card;
}