- Use async spawn for agent-browser wait so Node event loop stays active
for the upload HTTP server to process browser POST requests
- Add CORS headers to upload server responses
- Add frameSource: 'snapdom' to test page (headless Chrome auto-detects
tab-capture which hangs waiting for screen share permission)
- Copy source assets to output dir (CSS, fonts not inlined by compiler)
- Use compile-test.ts for compilation (injects runtime + __hf bridge)
- Write serve.json with cleanUrls:false to prevent .html→extensionless redirects
- Increase upload timeout from 10s to 300s for long compositions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
drawElementImage: pixel-perfect capture via html-in-canvas API using
<canvas layoutsubtree> with iframe child. Achieves 42 dB PSNR vs 30 dB
for SnapDOM. Requires Chrome --enable-blink-features=CanvasDrawElement.
Tab-capture: experimental getDisplayMedia-based capture.
Also adds regression parity scripts for compiling test compositions and
comparing PSNR against golden reference renders.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>