Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
12345678910111213import test from 'node:test';import assert from 'node:assert/strict';import {mkdtemp,mkdir,rm,readdir,readFile,writeFile,lstat} from 'node:fs/promises';import {tmpdir} from 'node:os';import {join} from 'node:path';import {analyzePixels,captureFrame} from '../src/preview-frame.mjs';import {RuntimeFeedback} from '../src/runtime-feedback.mjs';import {handle} from '../src/tools.mjs';const rgba=Buffer.from([0,0,0,255,255,0,0,255,0,0,0,255,0,0,0,255]);async function fixture(t,legacy=false){const cwd=await mkdtemp(join(tmpdir(),'easel-frame-'));t.after(()=>rm(cwd,{recursive:true,force:true}));if(legacy)await mkdir(join(cwd,'.easel'));const feedback=new RuntimeFeedback(cwd);feedback.select({channel:'test/piece',revision:'abc',version:1});return {cwd,feedback};}async function respond(cwd,patch={},dir='.aesel'){for(let i=0;i<100;i++){try{const [name]=await readdir(join(cwd,dir+'/frame-requests'));if(name){const r=JSON.parse(await readFile(join(cwd,dir+'/frame-requests',name)));await writeFile(join(cwd,dir+'/frame-responses',name),JSON.stringify({...r,capturedAt:new Date().toISOString(),width:2,height:2,rgba:rgba.toString('base64'),source:'software-canvas',...patch}));return;}}catch{}await new Promise(r=>setTimeout(r,10));}throw new Error('No request');}test('offline pixel analysis reports actual colors and bounded foreground estimate',()=>{const a=analyzePixels(rgba,2,2);assert.equal(a.uniqueRGBColors,2);assert.equal(a.blank,false);assert.deepEqual(a.nonDominantBounds,{x:1,y:0,width:1,height:1});assert.throws(()=>analyzePixels(rgba,2048,2048));});test('capture returns native MCP image plus private file and static evidence',async t=>{const {cwd}=await fixture(t);const [result]=await Promise.all([captureFrame(cwd),respond(cwd)]);assert.equal(result[1].type,'image');const metadata=JSON.parse(result[0].text).untrustedFrameEvidence;assert.equal(metadata.renderedRevisionVerified,false);assert.equal(metadata.analysis.uniqueRGBColors,2);assert.equal((await lstat(metadata.file)).mode&0o777,0o600);assert.equal((await readdir(join(cwd,'.aesel/frame-requests'))).length,0);});test('MCP image:false keeps pixels local and returns analysis only',async t=>{const {cwd}=await fixture(t);const [result]=await Promise.all([handle({id:1,method:'tools/call',params:{name:'ac_frame',arguments:{image:false}}},{cwd}),respond(cwd)]);assert.equal(result.result.content.length,1);assert.equal(result.result.content[0].type,'text');});test('stale or wrong revision response is rejected',async t=>{const {cwd}=await fixture(t);await Promise.all([assert.rejects(captureFrame(cwd),/changed during capture/),respond(cwd,{revision:'old'})]);});test('absent preview gives bounded timeout and cleans request',async t=>{const {cwd}=await fixture(t);await assert.rejects(captureFrame(cwd,{}, {timeout:40}),/timed out/);assert.equal((await readdir(join(cwd,'.aesel/frame-requests'))).length,0);});test('a workspace that already has .easel keeps using it',async t=>{const {cwd}=await fixture(t,true);const [result]=await Promise.all([captureFrame(cwd),respond(cwd,{},'.easel')]);assert.equal(result[1].type,'image');await assert.rejects(lstat(join(cwd,'.aesel')),/ENOENT/);});