/** 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 `\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 = ``
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')