/** Code-native artwork for YCode's five general development roles. No remote image service. */ import fs from 'node:fs/promises' import path from 'node:path' import { fileURLToPath } from 'node:url' import { Resvg } from '@resvg/resvg-js' const project = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') const palettes = { explorer: ['#E4F3ED', '#9DCCB9', '#558E79', '#D8EEE4', '#1D3E37'], implementer: ['#E7EFFB', '#A6BCE2', '#668CC3', '#E0EBFA', '#253D60'], verifier: ['#FAF0DE', '#E6C384', '#B98B42', '#F8E9CB', '#55412B'], reviewer: ['#EDEAF7', '#B9AADC', '#8770B5', '#E9E1F6', '#3D3258'], debugger: ['#F7E9E6', '#DBADA5', '#B6786C', '#F5DDD6', '#533730'] } const marks = { explorer: '', implementer: '', verifier: '', reviewer: '', debugger: '' } function avatar(role) { const [background, accent, edge, highlight, ink] = palettes[role] return ` ${marks[role]} \n` } const directory = path.join(project, 'resources/agents/avatars') await fs.mkdir(directory, { recursive: true }) for (const role of Object.keys(palettes)) { const source = avatar(role) await fs.writeFile(path.join(directory, `${role}.svg`), source) await fs.writeFile(path.join(directory, `${role}.png`), new Resvg(source).render().asPng()) } await fs.mkdir(path.join(project, '.tmp'), { recursive: true }) const preview = `${Object.keys(palettes).map((role, index) => `${avatar(role)}`).join('')}` await fs.writeFile(path.join(project, '.tmp/general-agent-avatars.png'), new Resvg(preview).render().asPng()) console.log('Generated five SVG sources, five 256px PNG avatars and .tmp/general-agent-avatars.png')