async function renderSkills() {
const content = document.getElementById('pageContent');
content.innerHTML = `
${skills.map(s => {
const lastScore = s.scores && s.scores.length > 0 ? s.scores[s.scores.length - 1] : null;
const avg = lastScore && lastScore.criteria_scores ? (lastScore.criteria_scores.reduce((a, b) => a + b, 0) / lastScore.criteria_scores.length) : null;
const icons = ['โก', '๐ง', '๐', '๐', '๐', '๐ฏ', '๐', '๐ ', '๐ก', '๐งช', '๐', '๐พ', '๐ฐ', '๐', '๐จ'];
const iconIdx = s.name.split('').reduce((a, c) => a + c.charCodeAt(0), 0) % icons.length;
const icon = icons[iconIdx];
return `
${s.description ? s.description.slice(0, 120) + (s.description.length > 120 ? '...' : '') : 'No description'}
`;
}).join('')}
`;
}
function switchSkillView(view) {
document.querySelectorAll('#skillTabs .tab').forEach(t => t.classList.toggle('active', t.dataset.view === view));
if (view === 'list') {
const skills = window._allSkills || [];
document.getElementById('skillsContainer').innerHTML = `
${scores.length > 0 ? `
${scores.slice(-10).map(s => `${((s.total_score || 0) * 100).toFixed(0)}%`).join('')}
Average: ${avg !== null ? (avg * 100).toFixed(0) : 'N/A'}% (${scores.length} runs)
` : '
No evaluation scores yet
'}
${skill.context && skill.context.length > 0
? `
${skill.context.map(f => `${f}`).join('')}
`
: '
No context files
'}
${skill.eval && skill.eval.criteria ? `
Eval Criteria:${skill.eval.criteria.map(c => `${c}`).join('')}
` : ''}
`;
} catch (err) {
detail.innerHTML = `