{"_id":"@arclabs561/ai-visual-test","_rev":"14-688a4f3dbe7a16ff37bab48a6c9750fe","name":"@arclabs561/ai-visual-test","dist-tags":{"latest":"0.14.0"},"versions":{"0.5.1":{"name":"@arclabs561/ai-visual-test","version":"0.5.1","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.5.1","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"dist":{"shasum":"493384f9c667ced50ad410f5c12f63e252d9692f","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.5.1.tgz","fileCount":93,"integrity":"sha512-EOGJjpaY544pgrwImMli2UNpzkHFYcmbNQJqYCR0OCKhh9P6ymvkd2gIRFm+KrGROTsw1qjOB+hKAjL7rK+Jiw==","signatures":[{"sig":"MEUCIBeNfwqWl3jfc3q/gsiDq/Fao4iN6LhyKM0HfAOlfZalAiEAvexAFgqch3FmEo/v+XKisgQFLWNkGMn0HTw+xmNfniw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":820200},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"d1d0d469217e1f6e3fc4aea12d42a1ea0441ce0e","scripts":{"docs":"node scripts/generate-docs.mjs","lint":"echo 'No linter configured'","test":"node --test test/*.test.mjs","garden":"npx hookwise garden","annotate":"node evaluation/utils/invoke-human-annotation.mjs","test:e2e":"node --test test/e2e/*.test.mjs","check:all":"npm run check:secrets && npx hookwise garden && npm run check:test-performance","test:slow":"npm test 2>&1 | grep -E '✔.*\\([0-9]+\\.[0-9]+ms\\)' | sort -t'(' -k2 -nr | head -20","test:unit":"node --test test/unit/*.test.mjs","check:docs":"node node_modules/@arclabs561/hookwise/src/hooks/doc-bloat.mjs || echo 'Hookwise not available'","match:vllm":"node evaluation/utils/match-annotations-with-vllm.mjs","check:commit":"node node_modules/@arclabs561/hookwise/src/hooks/commit-msg.mjs .git/COMMIT_EDITMSG || echo 'Hookwise not available'","garden:watch":"node scripts/watch-garden.mjs","annotate:full":"node evaluation/utils/start-human-annotation.mjs","check:quality":"node node_modules/@arclabs561/hookwise/src/hooks/code-quality.mjs || echo 'Hookwise not available'","check:secrets":"node scripts/detect-secrets.mjs","deprecate:old":"node scripts/deprecate-old-package.mjs","test:datasets":"node --test test/dataset-*.test.mjs","annotate:quick":"node evaluation/utils/quick-start-annotation.mjs","check:security":"npm run check:secrets","datasets:parse":"node evaluation/utils/parse-all-datasets.mjs","datasets:setup":"npm run datasets:download && npm run datasets:parse","prepublishOnly":"npm test","garden:enhanced":"node scripts/enhanced-garden.mjs","test:validation":"node --test test/validation-*.test.mjs","playwright:check":"node scripts/ensure-playwright.mjs","playwright:setup":"node scripts/ensure-playwright.mjs --install --install-browsers","test:integration":"node --test test/integration/*.test.mjs","test:performance":"npm run check:test-performance","validate:dataset":"node evaluation/utils/validate-dataset-quality.mjs","datasets:download":"node evaluation/utils/download-all-datasets.mjs","playwright:install":"node scripts/ensure-playwright.mjs --install","validate:annotations":"node evaluation/utils/validate-annotation-quality.mjs","check:test-performance":"node node_modules/@arclabs561/hookwise/src/hooks/test-performance.mjs || node scripts/analyze-test-performance.mjs"},"_npmUser":{"name":"arclabs561","email":"femtobop@gmail.com"},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.6.2","description":"AI-powered visual testing framework for web applications using Vision Language Models","directories":{},"_nodeVersion":"25.1.0","dependencies":{"dotenv":"^16.4.5"},"_hasShrinkwrap":false,"devDependencies":{"fast-check":"4.3.0","@types/node":"^22.10.1","async-mutex":"0.5.0","proper-lockfile":"4.1.2"},"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.5.1_1763170908710_0.2211247466277131","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@arclabs561/ai-visual-test","version":"0.7.3","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.7.3","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"dist":{"shasum":"54cd71f0707e033b7ffa30d8368c319a40688a4b","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.7.3.tgz","fileCount":114,"integrity":"sha512-dvYwv+Te6G5EzJrjFpVTQdgsdA9c1B1Rs8UiFiYIz5WLDJ+/pbnN/iBftwodPJanyeFjIAOU8ivFILN8Pbzlzg==","signatures":[{"sig":"MEYCIQDmQBz/5aubT87szy1Xzo25IBjip4zCMa79obsxrNhr5wIhALI2rSgYzyAuc5lDxLFxW2DK7ZdcHrLGajFYxfLYvExw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1087445},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"6cba6c6821213937abb719201929afd61ae69e0e","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.11.0","description":"Visual testing framework for web applications using Vision Language Models","directories":{},"_nodeVersion":"20.20.0","dependencies":{"dotenv":"^16.4.5","openai":"6.9.1","async-mutex":"0.5.0","@anthropic-ai/sdk":"0.70.0","@google/generative-ai":"0.24.1"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.7.3_1772567001981_0.9140422719593471","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@arclabs561/ai-visual-test","version":"0.7.4","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.7.4","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"dist":{"shasum":"5f9d0324d56b05f6b00d9db08b34adbfe861d0bc","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.7.4.tgz","fileCount":114,"integrity":"sha512-BzdUT3+exnkz0mjgnv6ahG4TaW+XjUpqUvkPQB9V8o5c1zNDmbj66hUzX/9f0qQdkXeYd/uDrsVmv8ei5mDlZg==","signatures":[{"sig":"MEYCIQCJ3xm9RA1WteHcn+zOofD/o9DSsszl0fwcgt2yaXaF2wIhAK/hHmZ/1XiY+j5ZtuGm6rl9npn2u5OuP3izk0dULxrj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1091797},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"0bd3fece41d4abfdd49c51353e795de9c92417d5","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.11.0","description":"Visual testing framework for web applications using Vision Language Models","directories":{},"_nodeVersion":"20.20.0","dependencies":{"dotenv":"^16.4.5","openai":"6.9.1","async-mutex":"0.5.0","@anthropic-ai/sdk":"0.70.0","@google/generative-ai":"0.24.1"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.7.4_1772568513032_0.6815035860847314","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"@arclabs561/ai-visual-test","version":"0.7.5","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.7.5","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"dist":{"shasum":"f196a4ecf70a635caa03d38bb8ecbda2cdebb69c","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.7.5.tgz","fileCount":114,"integrity":"sha512-5VOuOT/53YlbA/lu9OQk/MHICPwDwwYM9pmuwGN6LzZdtc8sdkuO88jBGWyHbodMOKUki0b5QebNEUejvQBd1A==","signatures":[{"sig":"MEQCIFjtLgUqA2tJqHYBHNO6JGjPZu8PGVRSR++FTbla6pwtAiAK1GwN8xaiTM51CMhTcUE20bHcg24F927Qrn5bTeKnrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1103759},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"858ebdbea683b2809d00cddac33da5a3d17cecac","_npmUser":{"name":"arclabs561","email":"femtobop@gmail.com"},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.11.0","description":"Visual testing framework for web applications using Vision Language Models","directories":{},"_nodeVersion":"25.8.1","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.7.5_1773706163301_0.12345531315415825","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@arclabs561/ai-visual-test","version":"0.8.0","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.8.0","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.mjs"},"dist":{"shasum":"57b1a8c3fb6763284f86e19a015d0b8ef2b74cf4","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.8.0.tgz","fileCount":105,"integrity":"sha512-Jx04TH6yb3fJjfWAIJSGaOjxssxQFpYj+CEkpXkSdLFZLcZQwFWAPVFTNH/0T5jd7HisX/fyiFO5oNQ1Z34zzQ==","signatures":[{"sig":"MEUCIQD/7cPxLWKIBNYUZJu7p822iSqC6DG7EbDhKRsOorPGEgIgaA8fstOqVHEeg7cF6W03Incv0MSmQiSxCeXTDMwZfB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1059629},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"f563e1e316474d20544e932c4be2388e91deb076","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.11.1","description":"Visual testing framework for web applications using Vision Language Models","directories":{},"_nodeVersion":"20.20.1","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.8.0_1773761187598_0.6918441556552777","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@arclabs561/ai-visual-test","version":"0.9.0","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.9.0","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.mjs"},"dist":{"shasum":"af4acd3d0898bdf7fc5435009414f935a109215c","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.9.0.tgz","fileCount":79,"integrity":"sha512-JRkHW0HOl2RJAdzZjXF6Q2ZnMw4jMj2pN9cLpRtfYcfvYoQ0SWIpnPoeSDBWGI3p2Jy3QQXwuwLcg95htVt+rQ==","signatures":[{"sig":"MEUCIG4C7+b8qO9+RXBKuL+doejnfYKuE2Di4wnASK+PiVfRAiEA2F2XBxk1eCIf8T8WrKfyVOWj6J7ikvcJB8ylUHIHlrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":842076},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"47bad2475fde0a517ce51281a2437ce7f7a6eadb","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.12.0","description":"Validate screenshots against natural-language expectations using vision LLMs","directories":{},"_nodeVersion":"20.20.1","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.9.0_1773943030293_0.887505145373815","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@arclabs561/ai-visual-test","version":"0.9.1","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.9.1","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.mjs"},"dist":{"shasum":"c4e6c7ed8d20b3f38bebd786422123e6242a74d6","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.9.1.tgz","fileCount":80,"integrity":"sha512-+G8qUOM6rWrFx4ZaoSRbL3MjhK1A/1wayh4vJ7ZcC0dpq1ljjrAXvpG791AiFWA2W+YYch2tdY9w/zg85V9C3A==","signatures":[{"sig":"MEUCIQCLnLaQ3EK+Lw5rjvA5PZdWQxMZWvkeYIxAi0RrVdqitAIgbOPwtUcSDV/6tOkgxQmSYbhE+P2BMZ6StzY0oGSaSXY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":833488},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"592ed974363851ea3ad3879ed8fd951bc017f8d5","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.12.0","description":"Validate screenshots against natural-language expectations using vision LLMs","directories":{},"_nodeVersion":"20.20.1","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.9.1_1773946101401_0.6487400532743379","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"@arclabs561/ai-visual-test","version":"0.9.2","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.9.2","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.mjs"},"dist":{"shasum":"90929426e1e31d02e6fd7799b808621c9130a577","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.9.2.tgz","fileCount":80,"integrity":"sha512-ha2yUqvcBECa9FTe12+WM2XXBRl9bmrvHOBjGscL/h1m4ecpcbQrd+Nl+RFWsabLKAMWRfB2T3F32PVnQRS1NQ==","signatures":[{"sig":"MEYCIQDpWnYZyAGEuHybw5dL4AAb9KnDqFrPKP+UEwMBv+mDxAIhAJ2mtCHZcPyOWMSTD5tmkPl7PFiH+2fGnsOJ31HNEmpu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":831616},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"81cb34e445e13905b75203bf290ba636adba8e4d","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.12.0","description":"Validate screenshots against natural-language expectations using vision LLMs","directories":{},"_nodeVersion":"20.20.1","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.9.2_1773946684624_0.7017779228332512","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"@arclabs561/ai-visual-test","version":"0.9.3","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.9.3","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.mjs"},"dist":{"shasum":"2ff808df02469d66a9ff3eb1e86f756160b070f5","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.9.3.tgz","fileCount":80,"integrity":"sha512-NfHZMRzbuWT/FaDsmC+bTnNr6gS3KXncC/xiNnkYoIKnRhYj1Cj8Lhs/OnjihijDa+hMOEPktLNirz2Ej5FV9A==","signatures":[{"sig":"MEUCIQCyDYUIQDmbz7cLTKHS5YvvTEi8rpXUzKzSq6uqyolC+wIgHUw1clm9YeDRS73oXffmxSgoLlfEQh+mPAGTmp0yzgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.9.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":827629},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"c0d4810cfbde32806083051603976ba7e8aa8bdf","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.12.0","description":"Validate screenshots against natural-language expectations using vision LLMs","directories":{},"_nodeVersion":"20.20.1","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.9.3_1773947828151_0.6815005056892294","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"@arclabs561/ai-visual-test","version":"0.9.4","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.9.4","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.mjs"},"dist":{"shasum":"1c03be179cb5d6acc5160cb6ae05914345c3923e","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.9.4.tgz","fileCount":80,"integrity":"sha512-HK5UQmBP2y6iPp6mu5a6TWl/FQ2CTh2BmBcKZmcve/voZ+xH2MtJfuQg2aj1vnABvQnt4BqznWBE1Hd3IH8qww==","signatures":[{"sig":"MEQCIDkezYHac1+l66B39YBLn3PeoVrYl9HAB9puHfvq0KD1AiAdNxO8RerdMokTAQ3LHx1t8frnS0Dr6MLf9FPntGM7Jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.9.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":823256},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"78e1bd278367501e05d3d1f5d785f97c67d8c1bb","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.12.0","description":"Validate screenshots against natural-language expectations using vision LLMs","directories":{},"_nodeVersion":"20.20.1","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.9.4_1773948504373_0.40685822708343644","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@arclabs561/ai-visual-test","version":"0.10.0","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.10.0","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.mjs"},"dist":{"shasum":"f470b7f876fcad3e52e3bb2292a27f8814595af2","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.10.0.tgz","fileCount":83,"integrity":"sha512-sN8HseWkMeehjWvvrunjnbijg2dcipmK8fWYM2M4b5WqfgjI6gSLbSvn93HRa2mIIgv8Qb2TRlD+PZs0RhRrpQ==","signatures":[{"sig":"MEYCIQDdc834A6jPZSUN6/Or/YdYUD1NfC4siPuilVduOnZ98QIhAJ5YiGbyHk9YHaKBMUVsX/hu1MsGMAMd6QOzOHnPHD/i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":854057},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"b3684edd0466c0e9c757c2b24dc00f8ddbb69828","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.17.0","description":"Validate screenshots against natural-language expectations using vision LLMs","directories":{},"_nodeVersion":"20.20.2","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.10.0_1781387297554_0.9975852695646632","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@arclabs561/ai-visual-test","version":"0.12.0","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.12.0","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.mjs"},"dist":{"shasum":"924e36a698790fab422216127c316d12d1b8a40f","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.12.0.tgz","fileCount":90,"integrity":"sha512-MZ4FZ1eAYvRSTZSgoeu/NbK9DKEEUvTn5vBWYPCMTd3KWRHHP23BQLTMEQYw42XoYq1GWDfs1iu3MsQl/meq0w==","signatures":[{"sig":"MEYCIQCtHZ31LXMr6iq3tafFRDmv+6TSfIic8tNg+9Cg1hwhmwIhAIF4Yln0YVbt+Hwwd1pn9C3iUgrHHKaHDEuqj7mYewmW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":887129},"main":"src/index.mjs","type":"module","engines":{"node":">=18.0.0"},"exports":{".":"./src/index.mjs","./specs":"./src/specs/index.mjs","./utils":"./src/utils/index.mjs","./persona":"./src/persona/index.mjs","./ensemble":"./src/ensemble/index.mjs","./temporal":"./src/temporal/index.mjs","./validators":"./src/validators/index.mjs","./multi-modal":"./src/multi-modal/index.mjs","./package.json":"./package.json"},"gitHead":"6dc46d7fd0e528089bdfb006f3ab75542ff17e56","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.17.0","description":"Validate screenshots against natural-language expectations using vision LLMs","directories":{},"_nodeVersion":"20.20.2","dependencies":{"async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"*"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.12.0_1781485750210_0.9244502388083078","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@arclabs561/ai-visual-test","version":"0.13.0","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","_id":"@arclabs561/ai-visual-test@0.13.0","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"bin":{"ai-visual-test":"bin/ai-visual-test.js"},"dist":{"shasum":"0eb7b1f0701bd801b93ba503a5e63cc91ce45f9d","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.13.0.tgz","fileCount":397,"integrity":"sha512-r7Az34ir67tztDCILitxbfmmoTxyVspGcVFtmvfpPrSqmG+Lst0w+/lai7y6LokMpoC2XC8f7nGA30O2jCbqjw==","signatures":[{"sig":"MEUCIEtF+wYzTrMZECVU27L8RWXcjIphpuJi7ynxDL8e6/rpAiEA3Kj5+ov1CFEyfNEdV5DOk+pOudyEkTaKNsaP6ISszDc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2141791},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./game":{"types":"./src/game/index.d.ts","import":"./src/game/index.js"},"./jest":{"types":"./src/integrations/vitest-jest.d.ts","import":"./src/integrations/vitest-jest.js"},"./utils":{"types":"./src/utils/index.d.ts","import":"./src/utils/index.js"},"./video":{"types":"./src/video.d.ts","import":"./src/video.js"},"./errors":{"types":"./src/errors/index.d.ts","import":"./src/errors/index.js"},"./vitest":{"types":"./src/integrations/vitest-jest.d.ts","import":"./src/integrations/vitest-jest.js"},"./persona":{"types":"./src/persona/index.d.ts","import":"./src/persona/index.js"},"./ensemble":{"types":"./src/ensemble/index.d.ts","import":"./src/ensemble/index.js"},"./temporal":{"types":"./src/temporal/index.d.ts","import":"./src/temporal/index.js"},"./extractors":{"types":"./src/extractors.d.ts","import":"./src/extractors.js"},"./perception":{"types":"./src/perception/index.d.ts","import":"./src/perception/index.js"},"./playwright":{"types":"./src/integrations/playwright.d.ts","import":"./src/integrations/playwright.js"},"./validators":{"types":"./src/validators/index.d.ts","import":"./src/validators/index.js"},"./multi-modal":{"types":"./src/multi-modal/index.d.ts","import":"./src/multi-modal/index.js"},"./package.json":"./package.json"},"gitHead":"010113bcc82bb965473c3c5c51417b7cb8aaf650","imports":{"#judge":"./src/judge.js","#video":"./src/video.js","#errors":"./src/errors.js","#game-player":"./src/game-player.js","#temporal-core":"./src/temporal-core.js","#ensemble-judge":"./src/ensemble-judge.js","#page-validation":"./src/page-validation.js","#public-contract":"./src/public-contract.js","#review-contract":"./src/review-contract.js","#structured-task":"./src/structured-task.js","#game-convenience":"./src/game-convenience.js","#temporal-capture":"./src/temporal-capture.js","#game-goal-prompts":"./src/game-goal-prompts.js","#provider-adapters":"./src/provider-adapters.js","#structured-output":"./src/structured-output.js","#game-action-contract":"./src/game-action-contract.js","#temporal-multi-scale":"./src/temporal-multi-scale.js","#playwright-integration":"./src/integrations/playwright.js","#temporal-orchestration":"./src/temporal-orchestration.js","#position-counterbalance":"./src/position-counterbalance.js","#pairwise-fixture-metrics":"./src/pairwise-fixture-metrics.js","#dataset-evaluation-metrics":"./src/dataset-evaluation-metrics.js","#temporal-prompt-formatting":"./src/temporal-prompt-formatting.js","#research-enhanced-validation":"./src/research-enhanced-validation.js","#validation-result-normalizer":"./src/validation-result-normalizer.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"repository":{"url":"git+https://github.com/arclabs561/ai-visual-test.git","type":"git"},"_npmVersion":"11.5.1","description":"Visual testing with vision language models","directories":{},"_nodeVersion":"20.20.2","dependencies":{"typebox":"1.3.20","async-mutex":"0.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"@playwright/test":"^1.48.0","@arclabs561/llm-utils":"^0.1.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":true},"@arclabs561/llm-utils":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-visual-test_0.13.0_1788048143057_0.2596175548554509","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@arclabs561/ai-visual-test","version":"0.14.0","description":"Visual testing with vision language models","type":"module","main":"./src/index.js","types":"./src/index.d.ts","bin":{"ai-visual-test":"bin/ai-visual-test.js"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./validators":{"types":"./src/validators/index.d.ts","import":"./src/validators/index.js"},"./temporal":{"types":"./src/temporal/index.d.ts","import":"./src/temporal/index.js"},"./multi-modal":{"types":"./src/multi-modal/index.d.ts","import":"./src/multi-modal/index.js"},"./ensemble":{"types":"./src/ensemble/index.d.ts","import":"./src/ensemble/index.js"},"./video":{"types":"./src/video.d.ts","import":"./src/video.js"},"./extractors":{"types":"./src/extractors.d.ts","import":"./src/extractors.js"},"./persona":{"types":"./src/persona/index.d.ts","import":"./src/persona/index.js"},"./utils":{"types":"./src/utils/index.d.ts","import":"./src/utils/index.js"},"./game":{"types":"./src/game/index.d.ts","import":"./src/game/index.js"},"./errors":{"types":"./src/errors/index.d.ts","import":"./src/errors/index.js"},"./playwright":{"types":"./src/integrations/playwright.d.ts","import":"./src/integrations/playwright.js"},"./vitest":{"types":"./src/integrations/vitest-jest.d.ts","import":"./src/integrations/vitest-jest.js"},"./jest":{"types":"./src/integrations/vitest-jest.d.ts","import":"./src/integrations/vitest-jest.js"},"./perception":{"types":"./src/perception/index.d.ts","import":"./src/perception/index.js"},"./improvement":{"types":"./src/improvement/index.d.ts","import":"./src/improvement/index.js"},"./package.json":"./package.json"},"imports":{"#provider-adapters":"./src/provider-adapters.js","#dataset-evaluation-metrics":"./src/dataset-evaluation-metrics.js","#ensemble-judge":"./src/ensemble-judge.js","#errors":"./src/errors.js","#game-action-contract":"./src/game-action-contract.js","#game-convenience":"./src/game-convenience.js","#game-goal-prompts":"./src/game-goal-prompts.js","#game-player":"./src/game-player.js","#judge":"./src/judge.js","#pairwise-fixture-metrics":"./src/pairwise-fixture-metrics.js","#page-validation":"./src/page-validation.js","#playwright-integration":"./src/integrations/playwright.js","#position-counterbalance":"./src/position-counterbalance.js","#public-contract":"./src/public-contract.js","#review-contract":"./src/review-contract.js","#research-enhanced-validation":"./src/research-enhanced-validation.js","#structured-output":"./src/structured-output.js","#structured-task":"./src/structured-task.js","#temporal-capture":"./src/temporal-capture.js","#temporal-core":"./src/temporal-core.js","#temporal-multi-scale":"./src/temporal-multi-scale.js","#temporal-orchestration":"./src/temporal-orchestration.js","#temporal-prompt-formatting":"./src/temporal-prompt-formatting.js","#validation-result-normalizer":"./src/validation-result-normalizer.js","#video":"./src/video.js"},"keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","dependencies":{"async-mutex":"0.5.0","typebox":"1.3.20"},"peerDependencies":{"@arclabs561/llm-utils":"^0.1.0","@playwright/test":"^1.48.0"},"peerDependenciesMeta":{"@arclabs561/llm-utils":{"optional":true},"@playwright/test":{"optional":true}},"engines":{"node":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/arclabs561/ai-visual-test.git"},"homepage":"https://github.com/arclabs561/ai-visual-test#readme","bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"_id":"@arclabs561/ai-visual-test@0.14.0","gitHead":"716e569f6133fa7e79ec1b6f43ee9c9f1a343a77","_nodeVersion":"20.20.2","_npmVersion":"11.5.1","dist":{"integrity":"sha512-LKvXNeDiAqjT7aq9ChwPgHyvcXosr2FnE+v3bX3/XcvRZJyHghCwME8WnOzdDRRakL8lH3H/2BrbjEmGxxeGgQ==","shasum":"c1e5c2a772b86a8d7a50f2866cf8fafc07e5a365","tarball":"https://registry.npmjs.org/@arclabs561/ai-visual-test/-/ai-visual-test-0.14.0.tgz","fileCount":427,"unpackedSize":2386802,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arclabs561%2fai-visual-test@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEIcQsBhlziykCDJlRX0K8j2NcdS87Z+SqmXZQ0MRzmwAiEA1Ej9ovy8VUsLtJrWtfAzSeI6MTn5WOH3bG7ZMmMfQX0="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1aa46928-17d1-4f54-8636-88926b49e82e"}},"directories":{},"maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-visual-test_0.14.0_1788109478490_0.2597250878344244"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-15T01:41:48.581Z","modified":"2026-08-30T17:04:39.001Z","0.5.1":"2025-11-15T01:41:48.975Z","0.7.3":"2026-03-03T19:43:22.204Z","0.7.4":"2026-03-03T20:08:33.269Z","0.7.5":"2026-03-17T00:09:23.483Z","0.8.0":"2026-03-17T15:26:27.804Z","0.9.0":"2026-03-19T17:57:10.509Z","0.9.1":"2026-03-19T18:48:21.652Z","0.9.2":"2026-03-19T18:58:04.802Z","0.9.3":"2026-03-19T19:17:08.295Z","0.9.4":"2026-03-19T19:28:24.600Z","0.10.0":"2026-06-13T21:48:17.718Z","0.12.0":"2026-06-15T01:09:10.381Z","0.13.0":"2026-08-30T00:02:23.269Z","0.14.0":"2026-08-30T17:04:38.700Z"},"bugs":{"url":"https://github.com/arclabs561/ai-visual-test/issues"},"author":{"name":"arclabs561","email":"henry@henrywallace.io"},"license":"MIT","homepage":"https://github.com/arclabs561/ai-visual-test#readme","keywords":["visual-testing","ai","vllm","vision-language-models","playwright","accessibility","ui-testing","screenshot-validation"],"repository":{"type":"git","url":"git+https://github.com/arclabs561/ai-visual-test.git"},"description":"Visual testing with vision language models","maintainers":[{"name":"arclabs561","email":"femtobop@gmail.com"}],"readme":"# ai-visual-test\n\nReview screenshots against a natural-language expectation with a vision model.\nIt returns a score, issues, recommendations, and the provider/model used.\n\n## Install\n\n```bash\nnpm install @arclabs561/ai-visual-test\n```\n\nNode 18 or newer is required. The Playwright integration also needs\n`@playwright/test` in your project.\n\n## Configure\n\n`.env` files are loaded automatically. Set a provider and its API key:\n\n```bash\nVLM_PROVIDER=gemini\nGEMINI_API_KEY=your-key-here\n```\n\nSupported providers are `gemini`, `openai`, `claude`, `groq`, and `openrouter`.\nUse `ANTHROPIC_API_KEY` for `claude`; the others use `<PROVIDER>_API_KEY`.\n`VLM_MODEL` or a per-call `model` option pins a model.\n\nOptionally fail early in test setup:\n\n```js\nimport { validateStartup } from '@arclabs561/ai-visual-test';\n\nvalidateStartup();\n```\n\n## Review a screenshot\n\n```js\nimport { validateScreenshot } from '@arclabs561/ai-visual-test';\n\nconst result = await validateScreenshot(\n  'checkout.png',\n  'The payment form is readable, complete, and usable.',\n  { provider: 'gemini' },\n);\n\nconsole.log(result.score);           // 0–10, or null when validation is disabled\nconsole.log(result.issues);          // detected problems\nconsole.log(result.recommendations); // suggested fixes\n```\n\n## Integrations\n\n| Need | Import | API |\n| --- | --- | --- |\n| Review a Playwright page | `@arclabs561/ai-visual-test` | `validatePage(page, prompt, options)` |\n| Add Playwright matchers | `@arclabs561/ai-visual-test/playwright` | `createMatchers(expect)` |\n| Add Vitest/Jest matchers | `@arclabs561/ai-visual-test/vitest` or `/jest` | `createMatchers(expect)` |\n| Compare before/after images | `@arclabs561/ai-visual-test` | `validateComparison(before, after, prompt)` |\n\nFor Playwright, call `createMatchers(expect)` once in test setup, then use\n`expect(page).toHaveVisualScore(minimum, prompt)` or\n`expect(page).toBeAccessibleHybrid(minContrast)`. For Vitest or Jest, use\n`expect(imagePath).toPassVisualCheck(prompt)` or\n`expect(imagePath).toHaveVisualScore(minimum, prompt)`.\n\n`validatePage` captures a temporary screenshot; set `fullPage`, pass native\nscreenshot options through `screenshot`, or set `keepScreenshot: true` when\nyou need to inspect it.\n\n## Improve a downstream UI\n\n`@arclabs561/ai-visual-test/improvement` reviews one caller-owned candidate\nagainst a captured baseline. Your project supplies the reversible adapter,\ndeterministic gates, evidence projection, and evaluator:\n\n```js\nimport { runImprovementReview } from '@arclabs561/ai-visual-test/improvement';\n\nconst receipt = await runImprovementReview({\n  objective, candidate, adapter, observer, projector, evaluator, evaluation,\n});\n```\n\nAfter an apply attempt, the transaction invokes rollback and requires a fresh\nobservation matching the baseline. A rollback failure throws and may require\nproject-owned recovery. A preferred candidate returns `review-required`; the\nkernel never accepts or reapplies it.\n\nThe adapter, observer, projector, and evaluator are trusted in-process\ncallbacks; this API does not sandbox them or choose a model provider. Replay\nidentities combine kernel-derived evidence hashes with caller-attested\ncandidate, projector, prompt-variant, and evaluator-configuration hashes. They\nsupport controlled comparisons only when those attestations are trustworthy.\nSee the\n[complete example](https://github.com/arclabs561/ai-visual-test/blob/main/examples/improvement-review.mjs)\nfor the full contract.\n\n## CLI\n\n```bash\nnpx ai-visual-test check checkout.png \"The payment form is usable\" --min-score 7\n```\n\nUse `--provider`, `--model`, `--json`, or `--verbose` as needed. The command\nexits successfully only when the score meets `--min-score`.\n\n## Limits\n\n- Reviews require network access and a configured provider API key.\n- Scores are non-deterministic. Pin the provider and model, and use a stable\n  prompt and cache when repeatability matters.\n- A score is a model judgment, not a replacement for functional or accessibility\n  testing.\n- Provider/model capabilities, including multi-image and structured output,\n  differ. Pin them when reproducibility matters.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}