{"_id":"@neonwatty/limner","_rev":"33-cce2f92ea5b0a4d5f7d30e7752fa5eb1","name":"@neonwatty/limner","dist-tags":{"latest":"0.1.32"},"versions":{"0.1.0":{"name":"@neonwatty/limner","version":"0.1.0","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.0","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limn":"dist/cli.js"},"dist":{"shasum":"b364f42f3909321f28ff0870faaa9ebf9ee055f2","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.0.tgz","fileCount":82,"integrity":"sha512-Y90aonUtBnqXEQIBXaydwIfaMn/h6sMzFKTJY0L/J29mr6X6sFYCYFWnMNVAY24ovXfyGLKP09P9jtCp9nvfZg==","signatures":[{"sig":"MEUCIFtZ50zs0xKAJ1UHT1hXhhFRY8oi8O6Cwd45IfsQ0o3mAiEAwY9VH3imqP+PJl7e7JMorQclWpcz8qbJ1STbhIgKVPc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191950},"type":"module","engines":{"node":">=20"},"gitHead":"dc40798cfc721f9aa22f594b53f2be280e8c517e","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"10.9.8","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.0_1781265382971_0.26171622060216615","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@neonwatty/limner","version":"0.1.1","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.1","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"37604c58bba549e38b2520dfb0c873ba6f1b5f6e","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.1.tgz","fileCount":82,"integrity":"sha512-0tLK4dt7kktPYj7G3o4EWt0+jh5wOj+vOUF5q1NpscUQhq76AQsKByCGM3Qt5dQUcxZ8YDrhaIdFzYaxRjlkag==","signatures":[{"sig":"MEYCIQDhqEanxja/WNN4HMawoSL5KBTowFSXQUIH48Hs9PPZLQIhAM5m8RdfrggOfJXG61ww0q7zeI3nsm55FyL68lHwM+/S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192213},"type":"module","engines":{"node":">=20"},"gitHead":"8f0b5313073cb4bdae4040f43f7f5ece763e3dce","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.1_1781267918592_0.6742887495962742","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@neonwatty/limner","version":"0.1.2","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.2","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"1a646a1f6d3ed0a0feeb462aca77085edea5766a","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.2.tgz","fileCount":101,"integrity":"sha512-VxB25ivM5vR9kIsqd5bik9lcB/ui0QbY0chPZAn2J8xoXaxrGYURJCjhwomtcAZjF4FQq9Z7SV/YjmEgOf5Urg==","signatures":[{"sig":"MEUCIBOTYDHMwn6z7xCvtQT6Eth9Cn+n/BAjvxaRLRGLCkUGAiEAmrLqRnP55hnZKQueQI4hlgpHBfg5M+Koqg6dlgv9w40=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272942},"type":"module","engines":{"node":">=20"},"gitHead":"102cac312945c809bdb63cd60548082e2272592c","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.2_1781291438338_0.5202216765173298","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@neonwatty/limner","version":"0.1.3","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.3","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"cea23792c2768c502f7b62a0f2d7937fe58e0a11","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.3.tgz","fileCount":101,"integrity":"sha512-YvatqtJ3WqvnNwik/dduoBmyb3qGDMO/zwa3AyhpjYMw8ERXXQgFp3GULUsqmV14TzuKzgowUcLyl+ooV7je1Q==","signatures":[{"sig":"MEUCIHphoYYkXX4qbvLCFkbXk8iCiGDITcVeWOFpzOeYjvZUAiEAhwx1xKgssj7eBVuG5gGvDjbfWelRWMcmy7a550eJt3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":273279},"type":"module","engines":{"node":">=20"},"gitHead":"0d8cf01ed3f63444d73165cc140bb57a030a5d81","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.3_1781291736998_0.33311556643855655","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@neonwatty/limner","version":"0.1.4","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.4","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"9b6d1e6549445ddff65a3ef79ade573613823625","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.4.tgz","fileCount":136,"integrity":"sha512-4JOk3nRyhNWjd3mLmwrWqlHlOrD2sxdsQxh8LiHA+sJ1dOrNrkNI11y4ooW6oFP118PWtdvEZtiXucid4sBvlw==","signatures":[{"sig":"MEUCIQD4EMpqAUUb80MgcbslBF1PM0LrVwyqso8wRyrHWavIHAIgXcvSvVCiX0OBi9xwLDvfoqf+p1yjZG8n2Q6zpXgfM6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364138},"type":"module","engines":{"node":">=20"},"gitHead":"6bfb4474a22cd05d7add8ef9877ce7b1c96a0a82","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.4_1781308844355_0.41143222106179","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@neonwatty/limner","version":"0.1.5","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.5","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"fec85b88efbb4bbe2e43b4b456c659494b267123","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.5.tgz","fileCount":142,"integrity":"sha512-CucQqgGQhH/t2jG69huT84RGC7Z26BjNJgZmkJ4WwPOSYtp9vyhcU3Kj6UXq+tbIXDyn3Rwl6CGVWMg6I0lf1Q==","signatures":[{"sig":"MEUCIQC3w9az63NtSbBp0C3e1Dn/L9nBad9uuB8+jqbIbBGqWgIgUSVMgQAzNsrgZPayS5hwpkp7/aYEXs279pxpLX4fHfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370346},"type":"module","engines":{"node":">=20"},"gitHead":"2cba6aa87331d5ada6d3b7afe600181afc73db42","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.5_1781310536001_0.4988326667075411","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@neonwatty/limner","version":"0.1.6","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.6","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"61c470cdcc9115eeddf28596d54d6d28f09ac4aa","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.6.tgz","fileCount":151,"integrity":"sha512-yDoAtyXvYLv3bM2iicFGlVwCmnmNZMzz6wn0n3/tytfPblyedbNVvHiCZl4LO9C8A8BswY9Nuwlqv5Pc1hlzAA==","signatures":[{"sig":"MEUCIQCrJFV/kaxUksDVnwLUOnhz05IssfZN3PW3xAPMtT42cAIgRb89j4aulO4vQd8eb4Jmm0/K8vjcGuadl3WW866tNVw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":388587},"type":"module","engines":{"node":">=20"},"gitHead":"26623dffe0b8db6cc83433a42cf7381bed5d043a","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.6_1781313029059_0.04976583499322129","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@neonwatty/limner","version":"0.1.7","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.7","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"b8792763bfcaf85c0efb1e9391c575b310788df6","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.7.tgz","fileCount":174,"integrity":"sha512-a93pPdHe1DVZ7kHoEDZXu7uLb0wRztd33FnKB7O3FX4nFy9KsLGwS5dz9uBj/B3wN8X8t2YM8CGZSiTZewGG/g==","signatures":[{"sig":"MEQCID1BQ194YCVhBm5XkxNspPEiPjPkSEM1McdfCJddoGA7AiBBeCNwd4yHUvRcqlpQfWq4/qH2qV5NfDqtFdxcgk0bdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":470044},"type":"module","engines":{"node":">=20"},"gitHead":"c1ee5b52fd7a608ccddd6fbd823ceb56613733c7","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.7_1781361031556_0.7117147315406589","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@neonwatty/limner","version":"0.1.8","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.8","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"fa7214c4b4e3021cf0de22ed124736d4c0c4d011","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.8.tgz","fileCount":183,"integrity":"sha512-1DHRFR48bxi5DeOCA6bN7RH621UkbfCjP/YeZqnHREYi4xDxKELH/R/R8VkHoPJIUPuVOYZYIKtLiYOJa/AYRg==","signatures":[{"sig":"MEQCIHuPBertWBh9wYVIMZtP0nQ+iOECyPP1iCmphzTbR88LAiB7Kyi/uCKXeCn83HKyfWD9r7viFMfOqsZsnysceEzeZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":497476},"type":"module","engines":{"node":">=20"},"gitHead":"19530836878fdbcb6cd284c9ce0a5cc9b0725c9d","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.8_1781442629394_0.38764300400489815","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@neonwatty/limner","version":"0.1.9","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.9","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"d6eebbdc71e3ba321299ff59ef7feb5ce312130e","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.9.tgz","fileCount":183,"integrity":"sha512-nXY5oprOaZw/bb15Q2/YON4wwkKkc8CD3McBo7X6CBHBvXBcp+1OojxlnuSSBqKRomOJx6l+6QiohHY5MLEOwA==","signatures":[{"sig":"MEYCIQDSB7W/Xpy+AKr1udWOHpr6mMyG1f6qRjUgf31+LmIBqwIhAJFHLP5VUMmaErZxHIluS7W/QTsC4yo07nB2j7sJ0/wP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":502416},"type":"module","engines":{"node":">=20"},"gitHead":"9c50fd66f50cabdcecf0dab2d1445179609edf9b","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.9_1781471835368_0.2254149689765399","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@neonwatty/limner","version":"0.1.10","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.10","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"7002738d52584dd2f7d93fd8fb8acaa45f9768c9","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.10.tgz","fileCount":186,"integrity":"sha512-xoEhHLPkonEpj1FiBbcdqWo4nxvnpPzlE05HlEVMUZCSpNsTm2JDjxJEh0ZYPCajliQWpZq4ye706TXiBd11oQ==","signatures":[{"sig":"MEUCIFM08sXvwzawgHz6G/eyLOBWKqpghRJnHwgJ17JVjqxvAiEAxcXLYzy1s7huqkztFrrCa4ARF52QreS/EGiAWyJ94ME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":515614},"type":"module","engines":{"node":">=20"},"gitHead":"c05f0ec40690875bd2930e602334ba5a6fb2666d","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.10_1781473276968_0.9605747063591612","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@neonwatty/limner","version":"0.1.11","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.11","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"79a2eff40dcd3c6343fcd4b85dea3059ccea79bd","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.11.tgz","fileCount":186,"integrity":"sha512-/vy9sRvH9bvqBror8/vSFU+1ppdQ/b9KzT4cmbKDarHTwjIGGGdXGodpRBMDKQ7ROjXLBMQ/wDmDqUCoLJmmfQ==","signatures":[{"sig":"MEUCIH+LBkfAGjVxzlUZHZo9rxAazNDZ72Ti72aLdweu6wkpAiEAnpnSwo6P/G8IzCT8D+mWzOJ+8ze7zuGJQ7NWBVazi5A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":516150},"type":"module","engines":{"node":">=20"},"gitHead":"856253704742ede13739871f8166964a3aafb8df","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.11_1781476695769_0.6810703641518816","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@neonwatty/limner","version":"0.1.12","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.12","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"b5ccf038e93cbab468e50ccc22d91b5a89d9a36f","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.12.tgz","fileCount":186,"integrity":"sha512-3BgqobqYEmFJ9nCfnSOboGtTrhXfWbGvB1HaaATQLylkjhHSA+wzc9URezO2aYjkK2l1kHYlWDuQkQtY6Lk2eQ==","signatures":[{"sig":"MEUCIQDuOiCuBTYWqIqpFIfzd98We1IFH+noe9lGzepxe80USQIgCARdDo5zrTpI/HpVD0RthEmMbbU4QxEHJhY/s53CsYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":520225},"type":"module","engines":{"node":">=20"},"gitHead":"267e680eedafc35a1a128c0dd7d13387eb3cba72","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.12_1781477390920_0.9182609660332426","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@neonwatty/limner","version":"0.1.13","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.13","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"89c631bb285baf97c8bb6a836e988d9f0bebeb46","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.13.tgz","fileCount":186,"integrity":"sha512-4EnfjDbc6Us4IVqjCqzg4oK14LyM1kd4AQq/NZxMP/y0/c2mHN2HPrXpE1ekYQ9Y1Y295utNs2g3EIUa1FTj0w==","signatures":[{"sig":"MEUCIDTwYw9CG/54RHEvvWJN+FlDsuj2kRSGVc7QHrtSumXpAiEA9JJaXFtd5olV6QvWz7G7+Mx87dKW4Ko3uKEGPKIAXVY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":525536},"type":"module","engines":{"node":">=20"},"gitHead":"3c6c25ca18b76f10916514562f100bf474353c00","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.13_1781478091650_0.6381513423186569","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@neonwatty/limner","version":"0.1.14","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.14","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"0fe353ee924b2a09d2426bc04d38ccef435c540a","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.14.tgz","fileCount":189,"integrity":"sha512-EVbSTxHDHHMl4mctCFm9gHkM3OJ03xBEN9QQhOBkkIyYcKcSPU3BeW7zU1u/mQ8Q1TMRT9ns+pl18u09bbAoLg==","signatures":[{"sig":"MEUCIHNaBR7DOgbgcQnNcOYuVc3IzotPbYt9VXRSqNTUliyLAiEA1THNU86mRKyeiOFneH/fWyhlFKeKCzvyCsLhBwbgN04=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":532382},"type":"module","engines":{"node":">=20"},"gitHead":"f3cf02bae596b810426bc8f622149970e81dceaf","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.14_1781483293316_0.6324238970480733","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@neonwatty/limner","version":"0.1.15","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.15","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"86237dad81f29d9af56ec3ee4f54df1ddd01bf3d","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.15.tgz","fileCount":189,"integrity":"sha512-BavQUkpyh7gUCJHaeDoO4CKochN8xJsAJvL6mzx+BV0dErioCUuhdJtxlifRIwrauOLdLJCVJArA/KbnYXSrWA==","signatures":[{"sig":"MEQCIHlVPbdeHcz4lj/8plmSXnxt3obe3JhsZmm4F7lOuxOqAiB558gNDY9Q3JlPUA6Dirxgz0hX6uf41fGLjnCMIrI3zw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":538226},"type":"module","engines":{"node":">=20"},"gitHead":"1b1d0d02c863d4209ff5abdc9cac0f94a4a88140","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.15_1781485918710_0.0054023416601005625","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@neonwatty/limner","version":"0.1.16","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.16","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"28be9856538695bcfb0cda0588fadd57fcc51d91","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.16.tgz","fileCount":197,"integrity":"sha512-abb6X/2EyRAwBJPrFIlgctSVoBLXfb3nMUzq+HA1SwcMkidjjtOky+s7ANb8Cjof56jZ+9Nie/0Bv0ef3Z1rxQ==","signatures":[{"sig":"MEQCIEIvUzSvNoiXmN09H1+/LOkcHUqKkbIKKe4aieTQNgK6AiBBxpCWxLxSSqbZPm1p1aFlTExXpcytaS+0d7RNcRPAkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":565589},"type":"module","engines":{"node":">=20"},"gitHead":"8b5bebfa76d7defd83bfd23b66e9f40077ec1154","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.16_1781535493167_0.33652214101918543","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@neonwatty/limner","version":"0.1.17","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.17","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"31efb92ddeecdcfd9e961efe4102f7a8a2c656d0","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.17.tgz","fileCount":200,"integrity":"sha512-TggegU3TGk814VrOw1PtgKxKfO+BGjjCIz3Boh3e3zhPtZmqybvlm3jkLJ+kfI1GZAZ1upvY/2EjEjHegNSX4A==","signatures":[{"sig":"MEUCIQCFmptarUFeBsYwkG2IaMgjxvfnyfPQy7+hVPgt9C4ieAIgQ33HDQKxYidEvInEDlQK30o3a0clF9hz6pbuO6rjHAc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":573758},"type":"module","engines":{"node":">=20"},"gitHead":"10f8fe29459c670b93754415bcf16438742b2737","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.17_1781540295327_0.7921691808079068","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@neonwatty/limner","version":"0.1.18","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.18","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"f1fef4bc1eef350c7889c0829801e48e1af65c57","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.18.tgz","fileCount":212,"integrity":"sha512-5qziMr9GC4kdY6QLqWFBkLxXpQii1lTyVSo5Mepn717lUADlQyl/HEbrcP39sLwrmicHtabEpglQ2WDCKkncOg==","signatures":[{"sig":"MEQCIAWmPHs0shY1vqT7/YujUeXuObbMFiOvMbgUyPVmRcuVAiBKD8zPs7oS9x9HWVMKdvr8Dz8N5OO3+CFhyUvcbsWbEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":618195},"type":"module","engines":{"node":">=20"},"gitHead":"5bc08e368c2f1472b83c4c246173b05b01ded046","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.18_1781545572416_0.24252831577124523","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@neonwatty/limner","version":"0.1.19","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.19","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"2432310f4de7dd58721b054aff22fc9530782fbb","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.19.tgz","fileCount":219,"integrity":"sha512-Hu96AAAhHhoVtRbpNQcuaCgukmgGq1W9B2uFAsrPcCUpuCUwZHykk0JY7JJBqy/nlOhzpTUKF6iCeFpWUcg1UA==","signatures":[{"sig":"MEQCIGf/itGpVhK+HCMFCTtUQifyFreVsTZPmnzyujaV/VpoAiAm4g16TUyNULEtZC9iVurqWeELNDRltj+Nln+drzbZjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":666148},"type":"module","engines":{"node":">=20"},"gitHead":"8eca16fa7d2e71918fc6c0eed2dba4e04be241b4","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.19_1781554298753_0.5613156336455687","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@neonwatty/limner","version":"0.1.20","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.20","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"63019dc18c15b17da71305205b17bd8366d64b06","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.20.tgz","fileCount":228,"integrity":"sha512-iv1VhTfWpuEsA9z8y5HDmGR7WTRR069INCN+tptj0srsSI8Rap0DXqw6N8UtTmYMptAbfNqwcD4DcqNghRcgUA==","signatures":[{"sig":"MEUCIQDqeKflcNpitD4AuJ8JB24U3joA8rg6cC1/FILN5yWs3wIgU3ylUipDPJuzGSSTUa3EWmXfTOXS8RAzn7+hW3oDUY8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":678281},"type":"module","engines":{"node":">=20"},"gitHead":"43e873506410c564eb99f888e6b54dd6e9207f60","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.20_1781560498415_0.11479067716992986","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@neonwatty/limner","version":"0.1.21","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.21","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"7e6d8d34b8cf7450484c493c9234aab60a9a749e","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.21.tgz","fileCount":228,"integrity":"sha512-d1LW8INNhb6P7ST9rlw2aX08JPl2ok+XsWO37UuUu8YVZ2qvN5j8/k6GSbJ6nXVV01R55QPWxMoOpnRGvRYy5Q==","signatures":[{"sig":"MEYCIQC/Ck6rq9DaGuk8WVJV2JQHGvMRt4Ui135ThAwD4A84SQIhALiUglUETMNVz/5P4VJYM+m7SZEAvqMg5Q2c5llBHENi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":683172},"type":"module","engines":{"node":">=20"},"gitHead":"0eb54685015a6969faaf6093be41f4bfeb4934f1","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.21_1781626252574_0.9266670457673758","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@neonwatty/limner","version":"0.1.22","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.22","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"b1e1d244aec3c0a970870615907edf05fc8b63d2","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.22.tgz","fileCount":237,"integrity":"sha512-vCOtWECDoxsPp+lhLyrOF6yubMRfI+SzCPydgZ79nUWlDzxBnAaCQsA2RQzOdtz6b8wFXA3KczrPZ36Vfqq/WA==","signatures":[{"sig":"MEUCIQD0ztMSHQ/7GUD5eRkRoPN+8A9ZuVbnHzujpn3cmSyl2AIgHqI5bckE1WnOiLtkbD7QxOd+7fzNbgy679GAyS5Q5/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":699240},"type":"module","engines":{"node":">=20"},"gitHead":"7f3b4c0958ff791c512cc179b9f04122e5b71be9","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.22_1781702178448_0.9983636234129474","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"@neonwatty/limner","version":"0.1.23","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.23","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"0b853b29c8ac333ca61fed24a8caa0d65de5ffbd","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.23.tgz","fileCount":237,"integrity":"sha512-91OT1VhvrR8GMbnC/01fclmHILAkC8Vep1xCbv4eRA4atAclAXyNhUtv1HJXTdj4mZnLBGAtJk1UHrCXghLXuQ==","signatures":[{"sig":"MEUCIQDtjfRZvl+tsiaxeM07XfVsNY74OC5/MKNvk7EmRgWtGwIgYFfKEoEELI8ti/HJVWHhblA5LQTbs40PEDNkjat36ss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":699271},"type":"module","engines":{"node":">=20"},"gitHead":"9c15d608d669252d96e7403c7f61c1b674bd1a5e","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.23_1781716737376_0.5151656596062808","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"@neonwatty/limner","version":"0.1.24","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.24","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"4150258c99e59aae6596c42b5ba6a727013a146c","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.24.tgz","fileCount":254,"integrity":"sha512-ICy/LKMfPj5WwNU7UZRNygJ8vOKAYeUUZQiCupOQjrXhANADldHbN/MdZhVnavKu2eT2nPkzxDzoh8XQJ8mU2w==","signatures":[{"sig":"MEYCIQDC3VcI6ZOSvJM0vmVkNiwCUulcMWt2RrZxYfWnVKdhbAIhAKYu5hgNaWzimcU+eVZlA4t5r/e5RQokaLi8PuvVzLZJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":757549},"type":"module","engines":{"node":">=20"},"gitHead":"bebe9ae92f6e4bf1337a7ddbf5a8d9508ee6280b","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"neonwatty","email":"jermwatt@gmail.com"},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.24_1781824053250_0.37914953474425706","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@neonwatty/limner","version":"0.1.25","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.25","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"38bff58cc2178c28ca850d5cec6907410caa924c","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.25.tgz","fileCount":269,"integrity":"sha512-+kl9Htv8+qwq2QEBlvLYmHNTP3AWo4qL6G3kA5YOpeaH39FSLPveVLZUooA/RaJgeWAwtlXy7T5OXy98KDhsTg==","signatures":[{"sig":"MEUCIQDAchLARaML/Q5MVww9b/Tfqpp3+1SGPokvpEydUEUxEQIgIrLS+nk/B2hsQhjbI5fl4fD+Rter+MO5yHUHXbCLSlg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":811147},"type":"module","engines":{"node":">=20"},"gitHead":"96f9c64f0a5423df09af98fcef7c377c518233d5","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efb201ac-23f1-47ba-88ec-8ce48afa0394"}},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.25_1781882885499_0.5957001908137567","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"@neonwatty/limner","version":"0.1.26","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.26","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"1e39acf8470638079219f340a18fde6e4860311d","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.26.tgz","fileCount":287,"integrity":"sha512-EDrWHd3deNrMmMs7py8b9W8RLjP4O9LIKpjZVNwIyzeaQbBEoC/Ca6UoO1svsVz+0rIWQQDw//L0Mg2fGtwnNg==","signatures":[{"sig":"MEUCIQDI90fxOg8ILrCe/ikyUSL2ADtK+cs3cDS+2yLki19INgIgQ0s5xrfRxrBzIuwdO8D5xR1zQT7fuazSZRAnwIE6QxQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":845827},"type":"module","engines":{"node":">=20"},"gitHead":"b19dcdd607b82a1d1778a0f06a4578e43ff363e9","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efb201ac-23f1-47ba-88ec-8ce48afa0394"}},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.26_1781885753479_0.6616494738392056","host":"s3://npm-registry-packages-npm-production"}},"0.1.27":{"name":"@neonwatty/limner","version":"0.1.27","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.27","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"ba3632e77bf9ee316b0245febae86fb56ff499ce","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.27.tgz","fileCount":296,"integrity":"sha512-gYOFT50dCdd3pdDJE3p23qXjdcG4mMAz8jGdPCzu3TFNGUHYZtNWX33n7g1XTHcqSYlCvlAdR7tJT2vRWbSYLg==","signatures":[{"sig":"MEYCIQD4gIIXny2YBtUE8/QPgEEgxEOWPQOE0+fQ4hCMbo8tXQIhAJUeHCVRKnXWO5JCQqspWkUQXp8ids0nM2/WisYC0VZj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":860677},"type":"module","engines":{"node":">=20"},"gitHead":"6f489105e17ffc55fb74d7e090fcd54ad3bd8f4e","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:plugin && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged","check:plugin":"node plugins/limner-polish/scripts/validate-plugin-surface.mjs","plugin:install":"node scripts/install-codex-plugin.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efb201ac-23f1-47ba-88ec-8ce48afa0394"}},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.27_1781902898641_0.05458490070961308","host":"s3://npm-registry-packages-npm-production"}},"0.1.28":{"name":"@neonwatty/limner","version":"0.1.28","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.28","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"aba63db83b29552e4148b283a1a44731a63139e8","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.28.tgz","fileCount":296,"integrity":"sha512-af3W+yDCg2kM81dPI3zZ4Hay/M8x4jsY/KA3djFxhw5iEzMI6ntWWSzkrHqyCXiukNkHxhCWsZ7Fsuj2uUAnVg==","signatures":[{"sig":"MEUCIQD5jPu727x6ltg7P3nEzjiXtd/Kz/QI9lvWZqxFwZx+xAIgbZ8poycknZS8rNbGrHU9Xs80wxvoYP17XliOPxxPHBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":863483},"type":"module","engines":{"node":">=20"},"gitHead":"a1f0c9e148ba69076d5db16a19fc1eea99b02468","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:plugin && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged","check:plugin":"node plugins/limner-polish/scripts/validate-plugin-surface.mjs","plugin:install":"node scripts/install-codex-plugin.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efb201ac-23f1-47ba-88ec-8ce48afa0394"}},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.2.1","sharp":"^0.34.5","commander":"^15.0.0","playwright":"^1.57.0","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^25.0.0","lint-staged":"^17.0.7","typescript-eslint":"^8.61.0","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.28_1781903515214_0.7863402631393919","host":"s3://npm-registry-packages-npm-production"}},"0.1.29":{"name":"@neonwatty/limner","version":"0.1.29","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.29","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"cbc59c2677f7106c22baf12adb65999ad298049f","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.29.tgz","fileCount":415,"integrity":"sha512-S/Z/kAJiGurqu9PuVqjLplCkRbVvUWFD7uCQNFj/2WSGAG9PDVtUtvBVDtvwhb0L/91baCWokhLUJ2IJ+Eg/0g==","signatures":[{"sig":"MEUCIQDLhBPy7QGfvfpuIq/9SFH9f+eLkTxwsjN1f8e+tA81TwIgN6Dw/OOXu/QnIZ/i71FDiV3X724zHs57+n5/h7JL050=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3517240},"knip":{"entry":["src/cli.ts","src/viewer/variants/main.tsx","scripts/*.mjs"],"project":["src/**/*.ts","src/**/*.tsx","scripts/**/*.mjs"],"ignoreDependencies":["@xyflow/react","d3-hierarchy","react","react-dom","@types/d3-hierarchy","@types/react","@types/react-dom"]},"type":"module","engines":{"node":">=20"},"gitHead":"03161b939176807d819fd01261df3ca62b8af846","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json && node scripts/build-viewer.mjs","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:plugin && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged","check:plugin":"node plugins/limner-polish/scripts/validate-plugin-surface.mjs","smoke:assets":"node scripts/smoke-asset-provenance.mjs","plugin:install":"node scripts/install-codex-plugin.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efb201ac-23f1-47ba-88ec-8ce48afa0394"}},"_npmVersion":"11.17.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.23.0","dependencies":{"zod":"^4.2.1","react":"^19.2.7","sharp":"^0.34.5","commander":"^15.0.0","react-dom":"^19.2.7","playwright":"^1.57.0","d3-hierarchy":"^3.1.2","@xyflow/react":"^12.11.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","esbuild":"^0.28.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","typescript-eslint":"^8.61.0","@types/d3-hierarchy":"^3.1.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.29_1782496759681_0.7694205504140574","host":"s3://npm-registry-packages-npm-production"}},"0.1.30":{"name":"@neonwatty/limner","version":"0.1.30","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.30","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"3d3da409037f402f798a30d6f34391c641d6cf81","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.30.tgz","fileCount":521,"integrity":"sha512-ohgqHUfkzC2IjFplakOXr9sxR10X1LXsZQ5qwYNxfLcJSMNpxRt0JK7uscXnlaVJMBKjm6N0YOpEaXjjyVHnZA==","signatures":[{"sig":"MEUCIBUKcqw/HwaazJYsVcPCpG5KnU7+4du7oFh+z5nXMseHAiEAjbA3MRFWPqXy8Mt4NWBTWytzv2xITLDk7wWssGDLNOY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10091237},"knip":{"entry":["src/cli.ts","src/viewer/variants/main.tsx","src/viewer/polish/main.tsx","scripts/*.mjs"],"project":["src/**/*.ts","src/**/*.tsx","scripts/**/*.mjs"],"ignoreDependencies":["@xyflow/react","d3-hierarchy","react","react-dom","@types/d3-hierarchy","@types/react","@types/react-dom"]},"type":"module","engines":{"node":">=20"},"gitHead":"3732ff8b3437939c7938f62779427e133da388ac","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json && node scripts/build-viewer.mjs","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:plugin && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged","check:plugin":"node plugins/limner-polish/scripts/validate-plugin-surface.mjs","smoke:assets":"node scripts/smoke-asset-provenance.mjs","plugin:install":"node scripts/install-codex-plugin.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efb201ac-23f1-47ba-88ec-8ce48afa0394"}},"_npmVersion":"11.18.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.23.0","dependencies":{"zod":"^4.2.1","react":"^19.2.7","sharp":"^0.34.5","commander":"^15.0.0","react-dom":"^19.2.7","playwright":"^1.57.0","d3-hierarchy":"^3.1.2","@xyflow/react":"^12.11.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","esbuild":"^0.28.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","typescript-eslint":"^8.61.0","@types/d3-hierarchy":"^3.1.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.30_1783016782653_0.16108389117454003","host":"s3://npm-registry-packages-npm-production"}},"0.1.31":{"name":"@neonwatty/limner","version":"0.1.31","keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","_id":"@neonwatty/limner@0.1.31","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"bin":{"limner":"dist/cli.js"},"dist":{"shasum":"3462560c784809896becbf3b6082265dc835f153","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.31.tgz","fileCount":521,"integrity":"sha512-BOafVvVqh30D51UV0c198Gd99yXlX8tiabmzkNRZhxFPy1Lku7wrzr6MLM1AE6y8OJdoY0kX9lrw/owzxE0sAQ==","signatures":[{"sig":"MEQCH1oeDMQJPcArne5/z/EQULBoyXl5Mqsfge64AnqNIYcCIQDwYjkd6lSak5egq5fd+633ejdJiC9hMRqqekWlSNFkLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10091279},"knip":{"entry":["src/cli.ts","src/viewer/variants/main.tsx","src/viewer/polish/main.tsx","scripts/*.mjs"],"project":["src/**/*.ts","src/**/*.tsx","scripts/**/*.mjs"],"ignoreDependencies":["@xyflow/react","d3-hierarchy","react","react-dom","@types/d3-hierarchy","@types/react","@types/react-dom"]},"type":"module","engines":{"node":">=20"},"gitHead":"7b1ac82da5aebcd95a60a7b9c6e14063f44bfcba","scripts":{"dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc -p tsconfig.build.json && node scripts/build-viewer.mjs","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:plugin && npm run check:size","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc --noEmit","check:size":"node scripts/check-file-size.mjs","lint:staged":"lint-staged","check:plugin":"node plugins/limner-polish/scripts/validate-plugin-surface.mjs","smoke:assets":"node scripts/smoke-asset-provenance.mjs","plugin:install":"node scripts/install-codex-plugin.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efb201ac-23f1-47ba-88ec-8ce48afa0394"}},"_npmVersion":"11.18.0","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","directories":{},"lint-staged":{"*":["node scripts/check-file-size.mjs --staged"],"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"]},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.2.1","react":"^19.2.7","sharp":"^0.34.5","commander":"^15.0.0","react-dom":"^19.2.7","playwright":"^1.57.0","d3-hierarchy":"^3.1.2","@xyflow/react":"^12.11.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","knip":"^6.16.1","eslint":"^10.4.1","vitest":"^4.1.0","esbuild":"^0.28.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.0.0","lint-staged":"^17.0.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","typescript-eslint":"^8.61.0","@types/d3-hierarchy":"^3.1.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/limner_0.1.31_1783020726312_0.13645050355682642","host":"s3://npm-registry-packages-npm-production"}},"0.1.32":{"name":"@neonwatty/limner","version":"0.1.32","description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","type":"module","bin":{"limner":"dist/cli.js"},"scripts":{"build":"npm run clean && tsc -p tsconfig.build.json && node scripts/build-viewer.mjs","check":"npm run lint && npm run typecheck && npm test && npm run build && npm run knip && npm run check:plugin && npm run check:size","check:plugin":"node plugins/limner-polish/scripts/validate-plugin-surface.mjs","check:size":"node scripts/check-file-size.mjs","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","dev":"tsx src/cli.ts","knip":"knip","lint":"eslint .","lint:staged":"lint-staged","plugin:install":"node scripts/install-codex-plugin.mjs","smoke:assets":"node scripts/smoke-asset-provenance.mjs","test":"vitest run","typecheck":"tsc --noEmit"},"lint-staged":{"*.{js,mjs,cjs,ts,tsx}":["eslint --fix --no-error-on-unmatched-pattern"],"*":["node scripts/check-file-size.mjs --staged"]},"knip":{"entry":["src/cli.ts","src/viewer/variants/main.tsx","src/viewer/polish/main.tsx","scripts/*.mjs"],"project":["src/**/*.ts","src/**/*.tsx","scripts/**/*.mjs"],"ignoreDependencies":["@xyflow/react","d3-hierarchy","react","react-dom","@types/d3-hierarchy","@types/react","@types/react-dom"]},"keywords":["visual-regression","design","playwright","cli","agent"],"license":"MIT","engines":{"node":">=20"},"dependencies":{"@xyflow/react":"^12.11.1","better-sqlite3":"^12.10.0","commander":"^15.0.0","d3-hierarchy":"^3.1.2","playwright":"^1.57.0","react":"^19.2.7","react-dom":"^19.2.7","sharp":"^0.34.5","zod":"^4.2.1"},"devDependencies":{"@eslint/js":"^10.0.1","@types/better-sqlite3":"^7.6.13","@types/d3-hierarchy":"^3.1.7","@types/node":"^26.0.0","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","esbuild":"^0.28.1","eslint":"^10.4.1","knip":"^6.16.1","lint-staged":"^17.0.7","tsx":"^4.21.0","typescript":"^6.0.3","typescript-eslint":"^8.61.0","vitest":"^4.1.0"},"gitHead":"24110336f6a0279274fc6e772e2f3775911610c5","_id":"@neonwatty/limner@0.1.32","_nodeVersion":"22.23.1","_npmVersion":"11.18.0","dist":{"integrity":"sha512-iIRjIszqM6x3KdI9OGTfn5jozTodaqJCUcFICCeoImamheD0HEyQdIctQNZtJ/8NVvW8IpN0tIIomA2GRDpsoA==","shasum":"acb37c1a2db36235a1118706c0dae0b0da618ceb","tarball":"https://registry.npmjs.org/@neonwatty/limner/-/limner-0.1.32.tgz","fileCount":531,"unpackedSize":10156905,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIES1wynu9QY/ISC8aK4utucI7JxwKLzaKOx0Ei13QNIXAiARNYpkla3oW0unNiykGrJjIz+xh9szCdaL7rDRhiNr0Q=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efb201ac-23f1-47ba-88ec-8ce48afa0394"}},"directories":{},"maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/limner_0.1.32_1783179483616_0.5572564349186242"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-12T11:56:22.751Z","modified":"2026-07-04T15:38:03.981Z","0.1.0":"2026-06-12T11:56:23.101Z","0.1.1":"2026-06-12T12:38:38.730Z","0.1.2":"2026-06-12T19:10:38.508Z","0.1.3":"2026-06-12T19:15:37.164Z","0.1.4":"2026-06-13T00:00:44.495Z","0.1.5":"2026-06-13T00:28:56.199Z","0.1.6":"2026-06-13T01:10:29.217Z","0.1.7":"2026-06-13T14:30:31.684Z","0.1.8":"2026-06-14T13:10:29.573Z","0.1.9":"2026-06-14T21:17:15.557Z","0.1.10":"2026-06-14T21:41:17.110Z","0.1.11":"2026-06-14T22:38:15.929Z","0.1.12":"2026-06-14T22:49:51.072Z","0.1.13":"2026-06-14T23:01:31.781Z","0.1.14":"2026-06-15T00:28:13.477Z","0.1.15":"2026-06-15T01:11:58.867Z","0.1.16":"2026-06-15T14:58:13.294Z","0.1.17":"2026-06-15T16:18:15.523Z","0.1.18":"2026-06-15T17:46:12.568Z","0.1.19":"2026-06-15T20:11:38.909Z","0.1.20":"2026-06-15T21:54:58.585Z","0.1.21":"2026-06-16T16:10:52.798Z","0.1.22":"2026-06-17T13:16:18.666Z","0.1.23":"2026-06-17T17:18:57.583Z","0.1.24":"2026-06-18T23:07:33.409Z","0.1.25":"2026-06-19T15:28:05.747Z","0.1.26":"2026-06-19T16:15:53.661Z","0.1.27":"2026-06-19T21:01:38.863Z","0.1.28":"2026-06-19T21:11:55.430Z","0.1.29":"2026-06-26T17:59:19.917Z","0.1.30":"2026-07-02T18:26:22.883Z","0.1.31":"2026-07-02T19:32:06.651Z","0.1.32":"2026-07-04T15:38:03.851Z"},"license":"MIT","keywords":["visual-regression","design","playwright","cli","agent"],"description":"Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.","maintainers":[{"name":"neonwatty","email":"jermwatt@gmail.com"}],"readme":"# Limner\n\nLimner is an agent-guided visual fidelity workbench. It helps a coding agent turn an input image into an approved HTML mockup, then compare that approved mockup against a real implementation.\n\nLimner is model-agnostic. It does not call a vision model and it does not make final pass/fail judgments. It prepares artifacts and schemas for agent-authored UX comparison scores, diffs, and next-iteration guidance.\n\nThe older visual spec workflow is archived in `docs/archive/visual-spec-workflow.md`; active loops use DB-native agent comparison responses.\n\n## Install\n\nUse the published CLI:\n\n```bash\nnpm install -g @neonwatty/limner\nlimner --help\nnpx @neonwatty/limner --help\n```\n\nInstall from source for development:\n\n```bash\nnpm install\nnpm run build\n```\n\nRun from source during development:\n\n```bash\nnpm run dev -- --help\nnpm --silent run dev -- ledger list --active --format json\n```\n\nUse `npm --silent run dev -- ...` for agent-ingestible JSON so npm does not prepend lifecycle output.\n\nBefore PRs, run `npm run check`; it covers ESLint, TypeScript, Vitest, build, Knip, and the tracked-file line-count guard.\n\n## Polish Demo Fixture\n\nUse the Swissifier fixture to load a synthetic local trajectory with score progression, screenshots, and mixed proof states. The launcher tour maps viewer controls to CLI commands and agent workflows; it is demo data, not proof against a real application. See `docs/polish-demo-fixtures.md` for details.\n\n```bash\nnpm run dev -- polish view --port 53456\nnpm --silent run dev -- polish demo seed --fixture swissifier --reset --format json\nnpm run dev -- polish view --trajectory <trajectory-id> --port 53456\nnpm --silent run dev -- polish demo remove --fixture swissifier --yes --format json\n```\n\n## Codex Polish Plugin\n\nFetch the Codex plugin source from GitHub at `plugins/limner-polish/`; it is intentionally not bundled in the npm package. It provides `limner-image-mockup-loop`, `limner-mockup-implementation-loop`, and `limner-image-implementation-loop`.\nThe plugin does not replace Limner's CLI or ledger. Its skills and scripts help agents run the canonical loop, preserve `LIMNER_LEDGER_HOME`, keep comparison work subagent-friendly, and pass Ralph Loop iteration count `N` through `limner loop start --max-iterations <N>`.\n\nGenerate an agent-ingestible command envelope with:\n\n```bash\nnode plugins/limner-polish/scripts/loop-command-envelope.mjs --mode image-mockup --target replay-boundaries --name replay-boundaries-polish --iterations 5\nnode plugins/limner-polish/scripts/loop-command-envelope.mjs --mode mockup-implementation --target replay-boundaries --iterations 5 --url http://localhost:3152/replay-boundaries\n```\n\nUse `node plugins/limner-polish/scripts/response-skeleton.mjs --mode <mode>` for a schema-shaped starter response and `node plugins/limner-polish/scripts/validate-plugin-surface.mjs` for a fast plugin surface check.\n\nInstall or refresh the plugin globally for Codex with `limner plugin install` from the published CLI, or `npm run plugin:install` from a source checkout.\n\n## Basic Workflow\n\n```bash\nlimner init ./ideal.png --target replay-boundaries\nlimner preview --target replay-boundaries\nlimner preview status\nlimner capture reference --target replay-boundaries\nlimner loop start --mode image-mockup --target replay-boundaries --name replay-boundaries-polish --max-iterations 5\nlimner loop compare --trajectory traj_... --format json\nlimner loop response submit --trajectory traj_... --from-run run_... --file ./response.json --format json\nlimner loop task --trajectory traj_... --executor subagent --format json\nlimner loop action start --trajectory traj_... --from-run run_... --kind polish --executor subagent --summary \"Resize dashboard preview\" --format json\nlimner loop action complete --trajectory traj_... --action act_... --executor subagent --summary \"Adjusted preview sizing\" --files \"src/app/page.tsx\"\nlimner loop status --trajectory traj_...\nlimner compare image-reference --target replay-boundaries\nlimner compare reference-implementation --target replay-boundaries --url http://localhost:3152/internal/optimization-lab/wedding-envelope#replay-boundaries --storage-state ./e2e/.auth/user.json\nlimner report --target replay-boundaries\nlimner ledger export traj_... --format markdown\nlimner runs list\n```\nPreview note: `limner preview --target <target>` is the static reference server with `/__limner` status; `limner variants view --concept <concept>` is the graphical variants workbench with lineage nodes and selected next bases.\n## Asset Provenance\n\n```bash\nlimner assets add ./ideal.png --source-label imagegen_original --concept replay-boundaries --format json\nlimner assets reconcile ./candidate.png --format json\nlimner assets contact-sheet --run-dir ./.limner/runs/<run-id> --format json\n```\n\nUse source labels `imagegen_original`, `downloaded_copy`, `derived_edit`, `html_frame`, or `reference_screenshot`. Loop runs auto-register known visual inputs by default; add `--require-registered-assets` to `limner loop start` or `limner loop compare` for strict workflows. Use `assets reconcile` before trusting ad hoc images, and use `assets contact-sheet` to write `.limner/runs/<run-id>/assets/contact-sheet.png` with asset ID, source label, dimensions, and status. Agent final answers should not claim visual proof from stale artifacts or unregistered image sources.\n\n## Availability Diagnostics\n\nUse `limner doctor --target <target> --mode <mode> --url <implementation-url> --json`, `limner target list --json`, and `limner target status --target <target> --json` before claiming proof is blocked. Agents must report `cli`, `target`, `reference`, `implementation`, `auth`, and `comparison` separately. Say \"Limner unavailable\" only when `command -v limner` or `limner --version` fails; otherwise report the exact `LIMNER_*` blocking reason code.\n\n## Workspace Shape\n\n```text\nlimner-workspace/\n  limner.config.ts\n  targets/\n    replay-boundaries/\n      source/ideal.png\n      contract/regions.json\n      contract/tokens.json\n      contract/acceptance.md\n      reference/index.html\n      reference/styles.css\n      AGENT_GUIDE.md\n  .limner/runs/\n```\n\n## Modes\n\n### Loop Ledger\n\nUse `limner loop` for Ralph Loop-style polishing. Loop work is tracked in a global local-only SQLite ledger at `~/.limner/ledger.sqlite`; no telemetry is sent.\n\n```bash\nlimner loop start --mode image-mockup --target replay-boundaries --name replay-boundaries-polish --max-iterations 5\nlimner loop compare --trajectory traj_... --format json\nlimner loop task --trajectory traj_... --executor subagent --format json\nlimner loop action start --trajectory traj_... --from-run run_... --kind polish --executor subagent --summary \"Resize dashboard preview\" --format json\nlimner loop action complete --trajectory traj_... --action act_... --executor subagent --summary \"Adjusted preview sizing\" --files \"src/app/page.tsx\" --format json\nlimner loop action skip --trajectory traj_... --from-run run_... --summary \"Comparison smoke only; no edit intended\" --format json\nlimner loop response submit --trajectory traj_... --from-run run_... --file ./response.json --format json\nlimner loop status --trajectory traj_... --feedback \"Prompt should mention button contrast.\"\nlimner loop next --trajectory traj_...\nlimner loop close --trajectory traj_...\n```\n\nLoop modes:\n- `image-mockup`: source image to editable HTML mockup.\n- `mockup-implementation`: approved mockup to real implementation.\n- `image-implementation`: source image directly to real implementation.\nEvery meaningful loop interaction writes a ledger event. Agent responses are submitted into local SQLite with the full JSON body, response hash, validation status, and freshness (`missing`, `fresh`, `stale`, or `invalid`). When a response validates, Limner rewrites the same run report at `.limner/runs/<run-id>/reports/comparison.md` with the validated score, top fix, and comparison artifacts. Written artifacts that exist on disk are copied into local immutable snapshots under `~/.limner/snapshots` and exposed as `snapshotPath` in ledger exports. `agentFeedback` is an optional 255-character field for short process-improvement notes; longer comments belong in notes or project artifacts.\n\nCurrent comparison artifacts are Limner-owned run state under `.limner/runs/<run-id>/`. Use the run ID printed by `loop compare`, or returned by `loop compare --format json`, to submit responses and inspect the matching screenshots, report, prompt, schema, and examples. Loop run manifests use the loop mode as the primary `mode` (`image-mockup`, `mockup-implementation`, or `image-implementation`) and keep the legacy comparison command name in `comparisonMode` when they differ. Legacy `targets/<target>/captures/**` and `targets/<target>/reports/**` paths may appear in old ledgers, but new compare runs write current artifacts under the run directory.\n\nWhen reference and implementation data intentionally differ, add `--comparison-note \"<fixture caveat>\"` to `loop start` or `loop compare`; Limner includes it in agent prompts and preserves it in task rerun commands. Use `--state-policy fixture-expected` when populated fixture data is expected, `--state-policy current-rendered` when the agent should assess whatever the app currently renders, or `--state-policy empty-ok` when empty/sparse data is acceptable. For hydrated apps, add `--wait-for-selector`, `--wait-for-text`, and optional `--wait-timeout-ms` so implementation screenshots wait for the intended app-ready state. Capture commands hide known local dev overlays by default before screenshots and write `*.capture.json` beside screenshots with final URL, readiness milestones, hidden selectors, visible text inventory, and region evidence hints. Pass `--show-capture-overlays` only when those overlays are intentionally part of the comparison.\nRegion contracts require `id`, `label`, and `referenceSelector`; add `appSelector` when comparing against an implementation. Example: `{ \"id\": \"event-list\", \"label\": \"Event List\", \"referenceSelector\": \"[data-limner-region='event-list']\", \"appSelector\": \"[data-testid='event-list']\", \"checks\": [\"bounds\", \"visible\", \"text\"] }`. Contracted regions are reported as `captured`, `absent`, `hidden`, `zero-size`, or `offscreen` in reports and agent prompts.\n### Action Logging\n\nAfter `loop compare` creates a comparison prompt, have the agent submit structured JSON with `limner loop response submit --trajectory traj_... --from-run run_... --file ./response.json --format json`. Each generated prompt pack includes `agent-response.minimal.json` as a schema-valid starter for simple diffs. Once the response validates, use `limner loop task --trajectory traj_... --executor subagent` to print the next edit brief. The intended loop is:\n\n```text\nloop compare -> loop response submit -> loop task --executor subagent -> loop action start -> edit -> loop action complete -> loop compare\n```\n\nThe task brief names likely files, selectors, prioritized diffs, next steps, action logging commands, and the compare command to rerun. JSON task output includes `taskFreshness`, `ledgerContext`, and a `commandEnvelope` with `LIMNER_LEDGER_HOME`-prefixed commands that another agent can run without guessing which local ledger is active. When newer compare runs are unresolved, `loop task` blocks by default with `status: \"stale\"` and no action commands. Submit the newer response first, or intentionally use older guidance with `limner loop task --trajectory traj_... --executor subagent --allow-stale --format json`. Record `loop action start` before edits and `loop action complete` after edits; `--from-run` must reference an existing run for that trajectory, `complete` must reference an existing started action, and `--summary` must stay under 255 characters. Completed, failed, or skipped actions cannot be completed again. Use `loop action skip` for comparison-only smoke runs where no edit is intended. Limner records executor intent and action claims; it cannot prove an external orchestrator actually used a subagent. `--executor codex` is accepted as an alias for the generic `agent` executor. Use `--format json` when another tool needs machine-readable handoff data.\n\nUse `limner ledger` to query and export trajectories:\n\n```bash\nlimner ledger list --active\nlimner ledger list --active --format json\nlimner ledger current --target homepage-desktop --mode image-mockup --format json\nlimner ledger status --trajectory traj_...\nlimner ledger status --trajectory traj_... --format json\nlimner ledger show traj_...\nlimner ledger next --trajectory traj_...\nlimner ledger next --trajectory traj_... --format json\nlimner ledger export traj_... --format json\nlimner ledger export traj_... --format markdown\nlimner ledger delete trajectory --trajectory traj_... --dry-run --format json\nlimner ledger delete trajectory --trajectory traj_... --yes --backup ./limner-backup.json\nlimner ledger delete run --trajectory traj_... --run 2026-... --dry-run\nlimner ledger delete response --response resp_... --dry-run\nlimner workspace clean-artifacts --target homepage-desktop --legacy --dry-run\nlimner workspace clean-artifacts --target homepage-desktop --legacy --yes\n```\n\nLedger JSON outputs include `ledgerContext` with the resolved local ledger home, SQLite database path, snapshots directory, and the exact `LIMNER_LEDGER_HOME` value to reuse in another session.\n\nLedger deletes are dry-run by default. Pass `--yes` to actually delete matching local SQLite rows. Use `--backup <path>` with trajectory deletion to write the trajectory export before hard deletion.\n\nWorkspace artifact cleanup is also dry-run by default. `--legacy` removes only target-scoped `captures/` and `reports/` roots; current run artifacts under `.limner/runs/<run-id>/` are preserved.\n\nAgents can discover the current CLI surface with:\n\n```bash\nlimner --help\nlimner loop --help\nlimner loop task --help\nlimner ledger --help\nlimner runs list --format json\nlimner runs show <run-id> --format json\nlimner workspace --help\n```\n\n### Image To Reference\n\nUse this while recreating the ideal image as a standalone HTML/CSS mockup. This mode uses the `ideal-to-mockup` agent comparison profile.\n\n```bash\nlimner compare image-reference --target replay-boundaries\n```\n\nOutputs:\n- `.limner/runs/<run-id>/captures/reference.png`\n- `.limner/runs/<run-id>/captures/side-by-side.png`\n- `.limner/runs/<run-id>/agent-comparison/agent-prompt.codex.md`\n- `.limner/runs/<run-id>/agent-comparison/agent-response.schema.json`\n- `.limner/runs/<run-id>/reports/comparison.md`\n\nIn a loop trajectory, submit the agent's structured response with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`. Limner validates and emits:\n- `.limner/runs/<run-id>/captures/image-comparison.json`\n- `.limner/runs/<run-id>/captures/comparison-summary.json`\n- `.limner/runs/<run-id>/reports/comparison.md` refreshed with the validated result\n\nAgents should inspect the ideal image and reference screenshot separately. The side-by-side image is comparison context, not the source image to parse.\n\n### Reference To Implementation\n\nUse this after the HTML mockup is approved and the real implementation needs to match it. This mode uses the `mockup-to-implementation` agent comparison profile.\n\n```bash\nlimner compare reference-implementation --target replay-boundaries --url http://localhost:3152/... --storage-state ./e2e/.auth/user.json\n```\n\nOutputs:\n- `.limner/runs/<run-id>/captures/reference.png`\n- `.limner/runs/<run-id>/captures/implementation.png`\n- `.limner/runs/<run-id>/captures/side-by-side.png`\n- `.limner/runs/<run-id>/captures/dom-metrics.json`\n- `.limner/runs/<run-id>/agent-comparison/agent-prompt.codex.md`\n- `.limner/runs/<run-id>/agent-comparison/agent-response.schema.json`\n- `.limner/runs/<run-id>/reports/comparison.md`\n\nIn a loop trajectory, submit the agent's structured response with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`. Limner validates and emits:\n- `.limner/runs/<run-id>/captures/image-comparison.json`\n- `.limner/runs/<run-id>/captures/structure-comparison.json`\n- `.limner/runs/<run-id>/captures/comparison-summary.json`\n- `.limner/runs/<run-id>/reports/comparison.md` refreshed with the validated result\n\nCapture commands default to viewport-only screenshots. Add `--full-page` when the full scrollable page is the comparison target.\n\n`limner init` writes `.limner-scaffold.json` in each target with template and content hashes for generated scaffold files. If every tracked scaffold file still matches its template, the state is reported as an untouched template scaffold.\n\n## Local Logs\n\nLimner writes local structured logs only. There is no remote telemetry.\n\n```text\n.limner/runs/<run-id>/\n  manifest.json\n  events.jsonl\n  agent-notes.md\n  captures/\n  reports/comparison.md\n  agent-comparison/\n```\n","readmeFilename":"README.md"}