{"_id":"@a3s-lab/testkit","_rev":"7-b76d096df276a2b30db3b30182da817f","name":"@a3s-lab/testkit","dist-tags":{"latest":"0.6.2"},"versions":{"0.4.0":{"name":"@a3s-lab/testkit","version":"0.4.0","keywords":["a3s","agentic-testing","browser-testing","human-review","vibe-coding"],"license":"MIT","_id":"@a3s-lab/testkit@0.4.0","maintainers":[{"name":"linzhixiao","email":"18770221825@163.com"}],"homepage":"https://a3s-lab.github.io/Test/guide/testkit.html","bugs":{"url":"https://github.com/A3S-Lab/Test/issues"},"dist":{"shasum":"4a5bc5cb153ff884093daac3f6922ef5fe6d3d11","tarball":"https://registry.npmjs.org/@a3s-lab/testkit/-/testkit-0.4.0.tgz","fileCount":19,"integrity":"sha512-yi64FDFLYXWRlN9wsR6HEjT8s92OXfGNu1el3z/hTIv64fTgGKcDByH/FwZt9tQJy+F0AjSpmWWprJtowXjmnQ==","signatures":[{"sig":"MEUCIC0tgkpEBPng6OOQ1uMDhx7At3k4Y0js/bVl9tkwMiIEAiEAvLs7zSqb51QTpRTHwRtO066sVn0ue9tk33NIhEZJqbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@a3s-lab%2ftestkit@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2725973},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"df879f47cd30f485877f80eac31bb4ce0b3933bf","scripts":{"test":"npm run test:node && vitest run src","build":"tsup","test:node":"node --test scripts/*.test.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","audit:check":"node scripts/check-screen-reader-audit.mjs","check:package":"node scripts/check-package.mjs && tsc -p scripts/tsconfig.json","audit:screen-reader":"node scripts/serve-screen-reader-audit.mjs"},"_npmUser":{"name":"linzhixiao","email":"18770221825@163.com"},"repository":{"url":"git+https://github.com/A3S-Lab/Test.git","type":"git","directory":"packages/testkit"},"_npmVersion":"10.9.8","description":"Embedded page context and human review SDK for A3S Test","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"modern-screenshot":"^4.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","jsdom":"^26.1.0","react":"^18.3.1","vitest":"^3.2.4","esbuild":"^0.27.7","axe-core":"^4.13.0","react-dom":"^18.3.1","typescript":"^5.8.3","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/testkit_0.4.0_1787186489560_0.7818735314154468","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@a3s-lab/testkit","version":"0.4.1","keywords":["a3s","agentic-testing","browser-testing","human-review","vibe-coding"],"license":"MIT","_id":"@a3s-lab/testkit@0.4.1","maintainers":[{"name":"linzhixiao","email":"18770221825@163.com"}],"homepage":"https://a3s-lab.github.io/Test/guide/testkit.html","bugs":{"url":"https://github.com/A3S-Lab/Test/issues"},"dist":{"shasum":"36bd7fd84b5f07e60f740c31d4f7d08048baccd3","tarball":"https://registry.npmjs.org/@a3s-lab/testkit/-/testkit-0.4.1.tgz","fileCount":19,"integrity":"sha512-1Bx+JSYOIa8OeVNS4ZIH/VCfqQSOLIMYRznmTr9UZvmXuX8YqM8ZLlwUclQ6udnv4AvjqUdmDoWLiqB48nNimg==","signatures":[{"sig":"MEQCIGIiiHYjSygqsGqhBSZ1c7WVGurxNZFDK7sgckJ0eD9qAiADUxMKaR06QsBzacgKlIew0CC7Paptfm2i+D2+WQ63Uw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@a3s-lab%2ftestkit@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2725803},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"bebb64bdeb96964d6785a97c9eb482c672e0dc94","scripts":{"test":"npm run test:node && vitest run src","build":"tsup","test:node":"node --test scripts/*.test.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","audit:check":"node scripts/check-screen-reader-audit.mjs","check:package":"node scripts/check-package.mjs && tsc -p scripts/tsconfig.json","audit:screen-reader":"node scripts/serve-screen-reader-audit.mjs"},"_npmUser":{"name":"linzhixiao","email":"18770221825@163.com"},"repository":{"url":"git+https://github.com/A3S-Lab/Test.git","type":"git","directory":"packages/testkit"},"_npmVersion":"10.9.8","description":"Embedded page context and human review SDK for A3S Test","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"modern-screenshot":"^4.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","jsdom":"^26.1.0","react":"^18.3.1","vitest":"^3.2.4","esbuild":"^0.27.7","axe-core":"^4.13.0","react-dom":"^18.3.1","typescript":"^5.8.3","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/testkit_0.4.1_1787187245637_0.311267599567318","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@a3s-lab/testkit","version":"0.4.2","keywords":["a3s","agentic-testing","browser-testing","human-review","vibe-coding"],"license":"MIT","_id":"@a3s-lab/testkit@0.4.2","maintainers":[{"name":"linzhixiao","email":"18770221825@163.com"}],"homepage":"https://a3s-lab.github.io/Test/guide/testkit.html","bugs":{"url":"https://github.com/A3S-Lab/Test/issues"},"dist":{"shasum":"6f2065124851bdb36a086db0605bed3622ab037b","tarball":"https://registry.npmjs.org/@a3s-lab/testkit/-/testkit-0.4.2.tgz","fileCount":19,"integrity":"sha512-/pK5A89t38VkYQEUfzIY/fOf1V9Zd/jibZwLfm/Wk6uZXS+YghsApkCERRZ31UtkE1dqA6MmNeSr9W8+/1CbWg==","signatures":[{"sig":"MEQCIG2O/a+yCQ2B6DNCw+xNuhoBH5Rvcl8JwRkzrAqMqfX0AiB0ox6AUiRYtmas4i1KtxQz99maH7qQLA02otgoPTb59w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@a3s-lab%2ftestkit@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2731805},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"f65c19d2cdf363a2f638ebf4fb3a3a33eaf206d4","scripts":{"test":"npm run test:node && vitest run src","build":"tsup","test:node":"node --test scripts/*.test.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","audit:check":"node scripts/check-screen-reader-audit.mjs","check:package":"node scripts/check-package.mjs && tsc -p scripts/tsconfig.json","audit:screen-reader":"node scripts/serve-screen-reader-audit.mjs"},"_npmUser":{"name":"linzhixiao","email":"18770221825@163.com"},"repository":{"url":"git+https://github.com/A3S-Lab/Test.git","type":"git","directory":"packages/testkit"},"_npmVersion":"10.9.8","description":"Embedded page context and human review SDK for A3S Test","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"modern-screenshot":"^4.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","jsdom":"^26.1.0","react":"^18.3.1","vitest":"^3.2.4","esbuild":"^0.27.7","axe-core":"^4.13.0","react-dom":"^18.3.1","typescript":"^5.8.3","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/testkit_0.4.2_1787191646395_0.17632808701448166","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@a3s-lab/testkit","version":"0.5.0","keywords":["a3s","agentic-testing","browser-testing","human-review","vibe-coding"],"license":"MIT","_id":"@a3s-lab/testkit@0.5.0","maintainers":[{"name":"linzhixiao","email":"18770221825@163.com"}],"homepage":"https://a3s-lab.github.io/Test/guide/testkit.html","bugs":{"url":"https://github.com/A3S-Lab/Test/issues"},"dist":{"shasum":"30412f9f3d24b899fac3af74c0337fa0ea5243a3","tarball":"https://registry.npmjs.org/@a3s-lab/testkit/-/testkit-0.5.0.tgz","fileCount":19,"integrity":"sha512-5bkHr5ny/7Wwhh1FZ04oTgKsBB3Opg38d+ksC8dp3BTFXkf+1fhyMYzhx90oC3JbrEabIOG8B3zbAw/cFWdBLQ==","signatures":[{"sig":"MEYCIQDZ4bGTOXebhzwTulNq2FSvh7jfh8BEBkZj8lTNqHobSgIhAOyF1IW7ieneBz8xqB/h7tcwX1/Q5pw5vvWvREMkYqa1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@a3s-lab%2ftestkit@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2878558},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"05bc3ed815ade8589020c401693e9625f6d294fd","scripts":{"test":"npm run test:node && vitest run src","build":"tsup","test:node":"node --test scripts/*.test.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","audit:check":"node scripts/check-screen-reader-audit.mjs","check:package":"node scripts/check-package.mjs && tsc -p scripts/tsconfig.json","audit:screen-reader":"node scripts/serve-screen-reader-audit.mjs"},"_npmUser":{"name":"linzhixiao","email":"18770221825@163.com"},"repository":{"url":"git+https://github.com/A3S-Lab/Test.git","type":"git","directory":"packages/testkit"},"_npmVersion":"10.9.8","description":"Embedded page context and human review SDK for A3S Test","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"modern-screenshot":"^4.7.0","@jridgewell/trace-mapping":"^0.3.31"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","jsdom":"^26.1.0","react":"^18.3.1","vitest":"^3.2.4","esbuild":"^0.27.7","axe-core":"^4.13.0","react-dom":"^18.3.1","typescript":"^5.8.3","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/testkit_0.5.0_1787199532576_0.2829967435227969","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@a3s-lab/testkit","version":"0.6.0","keywords":["a3s","agentic-testing","browser-testing","human-review","vibe-coding"],"license":"MIT","_id":"@a3s-lab/testkit@0.6.0","maintainers":[{"name":"linzhixiao","email":"18770221825@163.com"}],"homepage":"https://a3s-lab.github.io/Test/guide/testkit.html","bugs":{"url":"https://github.com/A3S-Lab/Test/issues"},"dist":{"shasum":"1a96eff7a0fc1afd765ccf4536390d0593f262d3","tarball":"https://registry.npmjs.org/@a3s-lab/testkit/-/testkit-0.6.0.tgz","fileCount":19,"integrity":"sha512-jxnL4HjEWfGygYIXcFgXFMj7CwUBSlLXm90F7LXXE/kx67Xa4o/RT9wNC++gdyn2c1jLLfW2O+XWO7FnG27Ufw==","signatures":[{"sig":"MEYCIQDu9BNRwvLIHGsBCMK9+doFlCUp69C/O58t170lfWKJSAIhAOh5FiomHX3ZHqvLesG1gkiRtsEzbgjNGTMlH0E8eVYu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@a3s-lab%2ftestkit@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3020169},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"40976e9113edb7b20ef981befe75fe87646fd970","scripts":{"test":"npm run test:node && vitest run src","build":"tsup","test:node":"node --test scripts/*.test.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","audit:check":"node scripts/check-screen-reader-audit.mjs","check:package":"node scripts/check-package.mjs && tsc -p scripts/tsconfig.json","audit:screen-reader":"node scripts/serve-screen-reader-audit.mjs"},"_npmUser":{"name":"linzhixiao","email":"18770221825@163.com"},"repository":{"url":"git+https://github.com/A3S-Lab/Test.git","type":"git","directory":"packages/testkit"},"_npmVersion":"10.9.8","description":"Embedded page context and human review SDK for A3S Test","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"modern-screenshot":"^4.7.0","@jridgewell/trace-mapping":"^0.3.31"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","jsdom":"^26.1.0","react":"^18.3.1","vitest":"^3.2.4","esbuild":"^0.27.7","axe-core":"^4.13.0","react-dom":"^18.3.1","typescript":"^5.8.3","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/testkit_0.6.0_1787208714839_0.6777961777548596","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@a3s-lab/testkit","version":"0.6.1","keywords":["a3s","agentic-testing","browser-testing","human-review","vibe-coding"],"license":"MIT","_id":"@a3s-lab/testkit@0.6.1","maintainers":[{"name":"linzhixiao","email":"18770221825@163.com"}],"homepage":"https://a3s-lab.github.io/Test/guide/testkit.html","bugs":{"url":"https://github.com/A3S-Lab/Test/issues"},"dist":{"shasum":"d4a6f1806ea8077f7cafd0974705baa69275fd42","tarball":"https://registry.npmjs.org/@a3s-lab/testkit/-/testkit-0.6.1.tgz","fileCount":19,"integrity":"sha512-EvZoYcF3aABvIUga632MecioKZmqvMibucVbE0QbPaOAhb4fl08f+ThBgYI5YSytwOLE2jdiAbimPFrxhVdbqA==","signatures":[{"sig":"MEUCIQCZbvbrgZQWOsQok/KejBt/IOPpHfX6rVIum6Arawt/CgIgJk6bDQYc0uv2JbXk6WexG/gkqXSpMyqsJcAqvBrA3Xs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@a3s-lab%2ftestkit@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3062629},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"gitHead":"ae68470cfc449181858519f2e94f318730390814","scripts":{"test":"npm run test:node && vitest run src","build":"tsup","prebuild":"npm run sync:a3s-ui","test:node":"node --test scripts/*.test.mjs","typecheck":"tsc --noEmit","test:watch":"vitest","audit:check":"node scripts/check-screen-reader-audit.mjs","sync:a3s-ui":"node scripts/sync-a3s-ui-style.mjs","check:package":"node scripts/check-package.mjs && tsc -p scripts/tsconfig.json","audit:screen-reader":"node scripts/serve-screen-reader-audit.mjs"},"_npmUser":{"name":"linzhixiao","email":"18770221825@163.com"},"repository":{"url":"git+https://github.com/A3S-Lab/Test.git","type":"git","directory":"packages/testkit"},"_npmVersion":"10.9.8","description":"Embedded page context and human review SDK for A3S Test","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"modern-screenshot":"^4.7.0","@jridgewell/trace-mapping":"^0.3.31"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","jsdom":"^26.1.0","react":"^18.3.1","vitest":"^3.2.4","esbuild":"^0.27.7","axe-core":"^4.13.0","react-dom":"^18.3.1","typescript":"^5.8.3","@a3s-lab/ui":"0.3.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/testkit_0.6.1_1787259085618_0.5599146497486267","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@a3s-lab/testkit","version":"0.6.2","description":"Embedded page context and human review SDK for A3S Test","keywords":["a3s","agentic-testing","browser-testing","human-review","vibe-coding"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/A3S-Lab/Test.git","directory":"packages/testkit"},"homepage":"https://a3s-lab.github.io/Test/guide/testkit.html","bugs":{"url":"https://github.com/A3S-Lab/Test/issues"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"type":"module","sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"}},"scripts":{"audit:check":"node scripts/check-screen-reader-audit.mjs","audit:screen-reader":"node scripts/serve-screen-reader-audit.mjs","build":"tsup","prebuild":"npm run sync:a3s-ui","check:package":"node scripts/check-package.mjs && tsc -p scripts/tsconfig.json","sync:a3s-ui":"node scripts/sync-a3s-ui-style.mjs","test":"npm run test:node && vitest run src","test:node":"node --test scripts/*.test.mjs","test:watch":"vitest","typecheck":"tsc --noEmit"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"devDependencies":{"@a3s-lab/ui":"0.3.0","@testing-library/react":"^16.3.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","axe-core":"^4.13.0","esbuild":"^0.27.7","jsdom":"^26.1.0","react":"^18.3.1","react-dom":"^18.3.1","tsup":"^8.5.0","typescript":"^5.8.3","vitest":"^3.2.4"},"dependencies":{"@jridgewell/trace-mapping":"^0.3.31","modern-screenshot":"^4.7.0"},"_id":"@a3s-lab/testkit@0.6.2","gitHead":"13f4cfbb5a3ccde797d74723594b848568b1d109","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-5kw4M7J/6Kt1bJZ2nE+y6h6SoQebzPYOlC96RHiGCB8pLfhDhDhtwYwzGgVZuGB8UUF+WeJi6HqW2UURAm70sA==","shasum":"0b1b235b149a1b76dc8e6a4d16d5886a5a4409c4","tarball":"https://registry.npmjs.org/@a3s-lab/testkit/-/testkit-0.6.2.tgz","fileCount":19,"unpackedSize":3063961,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@a3s-lab%2ftestkit@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCNTXK7IarmtPxyQc1dodrbcXhewlnMT4xxsbFnL9z/JgIhAN46cSVBruGyEYKqTAF1iEHv4O7cMxnpDv5c/KNjHMBT"}]},"_npmUser":{"name":"linzhixiao","email":"18770221825@163.com"},"directories":{},"maintainers":[{"name":"linzhixiao","email":"18770221825@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/testkit_0.6.2_1787260952441_0.647993929898439"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-20T00:41:29.337Z","modified":"2026-08-20T21:22:32.956Z","0.4.0":"2026-08-20T00:41:29.806Z","0.4.1":"2026-08-20T00:54:05.866Z","0.4.2":"2026-08-20T02:07:26.721Z","0.5.0":"2026-08-20T04:18:52.786Z","0.6.0":"2026-08-20T06:51:55.016Z","0.6.1":"2026-08-20T20:51:25.856Z","0.6.2":"2026-08-20T21:22:32.648Z"},"bugs":{"url":"https://github.com/A3S-Lab/Test/issues"},"license":"MIT","homepage":"https://a3s-lab.github.io/Test/guide/testkit.html","keywords":["a3s","agentic-testing","browser-testing","human-review","vibe-coding"],"repository":{"type":"git","url":"git+https://github.com/A3S-Lab/Test.git","directory":"packages/testkit"},"description":"Embedded page context and human review SDK for A3S Test","maintainers":[{"name":"linzhixiao","email":"18770221825@163.com"}],"readme":"# A3S Test Kit\n\nDevelopment-only page context, rendered-node source mapping, and human review\nSDK for A3S Test.\n\nThe browser already knows what it rendered. Test Kit turns that result into a\nbounded, revisioned record that a coding agent can inspect without scraping\nframework internals or guessing from a screenshot. Its optional right-side\nReview Overlay reduces the normal feedback path to two decisions: choose the\npage content that needs attention, then describe the requested result. A sketch\nor browser-page crop remains one optional addition before explicit submission.\n\n| Layer           | Responsibility                                                                                                 |\n| --------------- | -------------------------------------------------------------------------------------------------------------- |\n| Context Runtime | Publish semantics, exact revision deltas, components, locators, geometry, layout, state, motion, and controlled facts after rendering |\n| Source mapping  | Rank explicit component, DOM-owner, and Source Map v3 spans for a selected rendered node                       |\n| Review Overlay  | Keep a two-step element/area flow visible and disclose text, multi-select, drawing, Layout, board, and capture only when needed |\n| Repair handoff  | Bind a submitted finding to the current page revision without granting workspace or source-edit authority      |\n\nTest Kit is not a browser driver, test runner, coding agent, or source editor.\nThe A3S Test CLI continues to own typed actions, evidence, repair state,\nverification, and cleanup.\n\n## Install\n\n```bash\nnpm install --save-dev @a3s-lab/testkit@0.6.2\n```\n\n`@a3s-lab/testkit` 0.6.2 is published on the official npm Registry with GitHub\nOIDC provenance. The pinned command keeps installation reproducible and locks\nthe package integrity in the project lockfile.\n\nVerify that the current project can resolve the package:\n\n```bash\nnpm ls @a3s-lab/testkit\n```\n\n## React quick start\n\n```tsx\nimport { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { A3SReviewOverlay, A3STestKit } from \"@a3s-lab/testkit/react\";\nimport { App } from \"./App\";\n\nconst testKitEnabled = import.meta.env.DEV;\n\ncreateRoot(document.getElementById(\"root\")!).render(\n  <StrictMode>\n    <A3STestKit enabled={testKitEnabled} page={{ id: \"app\" }}>\n      <App />\n      <A3SReviewOverlay enabled={testKitEnabled} locale=\"auto\" />\n    </A3STestKit>\n  </StrictMode>,\n);\n```\n\nStart the existing development server. An **A3S Review** launcher in the\nlower-right corner confirms that the visible overlay is ready. The same panel\nopens with `Ctrl/Command+Shift+F`. Test Kit is a frontend SDK and does not add\nan `a3s-testkit` terminal command.\n\n`A3STestBoundary` is optional. Add it only when page context needs component\nownership or a bounded source hint:\n\n```tsx\nimport { A3STestBoundary } from \"@a3s-lab/testkit/react\";\n\n<A3STestBoundary\n  id=\"checkout-form\"\n  name=\"Checkout form\"\n  source={{ file: \"src/Checkout.tsx\" }}\n>\n  <Checkout />\n</A3STestBoundary>;\n```\n\nFor headless CI context, keep `A3STestKit` enabled and omit\n`A3SReviewOverlay`. The framework-neutral entry point exports\n`installTestKit`, `getPageContextBridge`, `registerSource`,\n`registerSourceMap`, and all protocol types.\n`installTestKit` also requires `enabled: true`; omitted or false-like runtime\nconfiguration fails closed.\n\nTest Kit 0.6.0 exposes `a3s.test.testkit-handshake/1`. After the provider and\noverlay mount, `a3s-test dev --json` verifies the live package identity, SDK\nrange, Page Context protocol, required capabilities, and Review Overlay before\nit reports a ready review session. The older `probe()` operation remains for\nPage Context feature discovery; it is not the CLI compatibility decision.\n\nOnce admitted, the same `a3s-test dev --json` process exposes\n`a3s.test.local-repair-bridge/1`. A finding explicitly sent from the Review\nOverlay is persisted with A3S Test-owned before evidence and emitted once as a\n`repair_batch` JSONL event containing the generated session ID. The coding\nagent therefore does not need a separate manually coordinated\n`repair-watch --session ...` process. The bridge reuses the existing repair\nledger and projects later agent or human state back into this page.\n\nEach selected node can also carry a ranked `a3s.test.source-mapping/1` record.\nAn enclosing `A3STestBoundary` contributes a coarse declared hint. Framework\nadapters can use `registerSource` for an exact DOM owner and\n`registerSourceMap` to trace a declared generated location through an encoded\nSource Map v3. The runtime never traverses React Fiber, Vue component\ninstances, or other undeclared framework state, and it discards\n`sourcesContent` before the map enters runtime state. Submitted repair context\nkeeps the same ranked spans, confidence, origin, and exact/ancestor relation so\nthe coding agent can open the likely owning file without another browser turn.\n\nThe review UI supports `locale=\"auto\" | \"en\" | \"zh-CN\"`. `auto` is the\ndefault and observes `<html lang>` while mounted, resolving every `zh-*` page\nlanguage to Simplified Chinese and other page languages to English. Set the\nlocale explicitly when the overlay should not follow the host page:\n\n```tsx\n<A3SReviewOverlay\n  enabled={import.meta.env.DEV}\n  locale=\"zh-CN\"\n  messages={{ reviewTitle: \"页面评审\" }}\n/>\n```\n\n`messages` accepts only known review-message keys. Empty values and strings\nlonger than 2,048 characters are ignored, so host copy customization remains\nbounded presentation data.\n\nThe runtime derives context after browser rendering. It reads semantic DOM,\nopen Shadow DOM, form state, layout, and viewport facts without adding test\nattributes to application elements. Observer and navigation signals advance a\nversioned snapshot; an unchanged page is not polled.\n\nEach snapshot also includes bounded `a3s.test.ui-understanding/1` evidence by\ndefault. It profiles observed colors, typography, spacing, radii, shadows, and\nsafe root design properties; publishes Flex/Grid/flow, scroll-container, and\nstacking relationships together with exact client/scroll extents, signed\noffsets, derived overflow/clipping state, resolved physical margin, border,\nand padding edges, box sizing, writing mode, and text direction; clusters\nrepeated structures with deterministic tag/role/subtree/style fingerprints;\nrecords real\ninteraction-state differences; and detects responsive conditions, transitions,\nCSS and Web Animations, document/scroll/view timelines, animation ranges,\nsticky nodes, canvas, and media. It never guesses a component from a class\nname or synthesizes an interaction for collection.\n\n```tsx\n<A3STestKit\n  enabled={import.meta.env.DEV}\n  page={{ id: \"checkout\" }}\n  maxUiNodes={200}\n  maxUiStateSamples={200}\n  maxUiDurationMs={32}\n  maxUiEncodedBytes={262_144}\n>\n  <App />\n</A3STestKit>\n```\n\nCall `snapshot({ ui: false })` to omit it once, or set\n`uiUnderstanding={false}` for the installation. Callers may only lower the\ninstalled node, state, string, byte, and time ceilings. UI evidence binds its\nown observation ID to the containing page revision, viewport, and scope; the\nWeb driver rejects protocol drift, stale bindings, invalid geometry,\nduplicate graph relationships, missing parents or edge endpoints, incomplete\nor cyclic containment, invalid component membership, and budget violations. It\nremains untrusted evidence with no action, verdict, or repair authority.\n\n## Revision-scoped diffs\n\nTest Kit 0.6.0 exposes `waitForDiff` and\n`a3s.test.page-context-diff/1`. Capture a normal baseline once, then wait for\nonly the evidence invalidated by a newer page revision:\n\n```ts\nconst baseline = bridge.snapshot({ detail: \"summary\", ui: false });\nconst diff = await bridge.waitForDiff({\n  sinceRevision: baseline.revision,\n  timeoutMs: 5_000,\n  ui: false,\n});\n```\n\nA `complete` delta carries changed nodes and components, removed node IDs, and\nindependent page, facts, and UI invalidation. `reset_required` means the exact\nbaseline is outside bounded history or complete invalidation metadata cannot\nfit the encoded-byte ceiling; discard old evidence and capture a fresh normal\nsnapshot. The runtime never turns reset into an empty diff or drops partial\nIDs silently.\n\nHistory, payloads, and waits remain bounded. A timeout must be an integer from\n0 through 300,000. Continuation cursors bind the full normalized request and\nrevision. A stale cursor, mismatched baseline, future revision, NaN, infinity,\nnegative timeout, or oversized wait is rejected. A3S Test validates delta\nordering, identifiers, changed/removed coverage, and reset semantics again in\nRust. Persistent sessions keep only one-way node fingerprints while retaining\nan unaffected `@cN` locator; raw Test Kit node IDs are not written to session\nmetadata.\n\n## Deterministic quality findings\n\nWhen a deterministic Surface Contract runs, the Web driver can project its\nbounded report through `reportQuality`. The Test Kit keeps these reports in a\nseparate in-memory Quality Store, never in the Repair Ledger. The overlay shows\neach finding with an explicit `blocking`, `important`, or `suggestion` label\nand asks the reviewer to confirm or choose a current target.\n\nViewing a finding, opening its editor, or cancelling target selection grants\nno repair authority. A finding leaves the Quality Store only when it is\ndismissed, saved as a local review draft, successfully submitted to the owning\nA3S Test session, or replaced by a newer report for the same\ncontract/variant/state. A passed report clears earlier candidates in that\nscope. Other findings in the report remain independently reviewable.\n\nReports are bounded to 500 findings, 5,000 matches, 1 MiB encoded JSON, and a\nmaximum JSON depth of 32. `maxQualityReports` defaults to five and is clamped\nfrom one through twenty. Projection is one-way and advisory: a missing bridge,\nan incompatible page, or a rejected report never changes the Runner's report\nor verdict.\n\n## Advisory design suggestions\n\n`reportDesignAudit` accepts only `a3s.test.design-audit-report/1` records whose\nprovenance is advisory and matches the current page revision. Provider/model\nidentity, observation, screenshot and page-context digests, dimensions, usage,\nfindings, and targets are structurally bounded. A node target must still\nresolve in the live page. These reports live in a separate Design Audit store,\nnever in the deterministic Quality Store or Repair Ledger. A later page\nrevision expires them immediately.\n\nThe overlay shows the provider's summary, rationale, typed dimension,\npriority, confidence, and current target. Reviewing or cancelling a suggestion\ndoes nothing to the product and grants no repair authority. The reviewer can\nedit the recommendation or choose a new target, then explicitly save a local\ndraft or send it through the existing single/batch repair flow. High provider\npriority maps only to `important`; design advice can never create a blocking\nrepair or test verdict by itself.\n\nReports are bounded to 500 findings and 1 MiB encoded JSON.\n`maxDesignAuditReports` defaults to five and is clamped from one through\ntwenty. `listDesignAuditReports`, `dismissDesignAuditFinding`, and\n`dismissDesignAuditReport` manage only these local review candidates.\n\nGeometry remains in CSS pixels at every browser zoom level. The page snapshot\nseparates the layout viewport and DPR from an optional visual viewport with its\ncurrent offset, visible size, and scale, allowing A3S Test to reason about\nzoomed and panned content without double-scaling coordinates.\n\nThe SDK never receives workspace, shell, MCP, or source-editing credentials.\nSubmitted DOM context is explicitly marked as untrusted evidence. A same-origin\n`repairEndpoint` is optional; without one A3S Test can pick queued repairs up\nthrough its fixed browser bridge integration.\n\nA3S Test captures its own before/after context, screenshot, and browser-error\nevidence, serializes workspace mutation across sessions and processes, and\nproves an admitted regression candidate in a fresh browser before presenting a\nrepair for review. Human acceptance is the default; automatic resolution must\nbe enabled for the owning A3S Test session explicitly.\n\nSee the\n[Test Kit design and security contract](https://github.com/A3S-Lab/Test/blob/main/docs/testkit.md)\nfor the complete protocol, security, repair, and verification design.\n\nFor requests that cannot both be satisfied, add one draft first and use the\noptional **Conflicts with another draft** control on the other. This emits a\ntyped `conflicts_with` relation; A3S Test does not infer conflicts from repair\ninstruction wording.\n\nBoth the provider and overlay require an explicit `enabled` value. The overlay\nalso requires a compatible live bridge and therefore fails closed if the\nprovider is disabled or the protocol is unavailable.\n\nFor CI, keep `A3STestKit` enabled and omit `A3SReviewOverlay`. For Next.js,\nmount both from a client component and gate them with\n`process.env.NODE_ENV !== \"production\"`. Server rendering does not access the\nDOM or emit layout-effect warnings; boundary registration and focus effects\nbegin after the browser hydrates. `getPageContextBridge()` returns `null` on\nthe server, while direct enabled installation reports that it requires a\nbrowser. The overlay supports element, text,\nclick/drag multi-selection, rectangular and freehand findings, persistent\nmarkers, draft editing/hiding, animation pause, system/light/dark themes,\nbounded structured copy, finding-level design references, and typed Layout\nMode. After selecting an element or region, a reviewer can open the design\nboard. Its built-in SVG editor uses a constrained 960 × 600\nsurface with freehand, rectangle, text, selection, movement, resize, styling,\nkeyboard, and history tools, and admits at most 250 objects. It can also\nopen a viewport selection layer so the reviewer can drag over one visible page\narea and release to add that crop to the board. The capture excludes the Test\nKit overlay and never requests screen-sharing permission. `Escape` cancels the\nselection; upload, paste, and drop remain available for PNG/JPEG references.\n\nNode and text markers resolve their current DOM elements again after page or\nnested-container scrolling and viewport changes. Stored viewport regions remain\ndocument-aligned through their captured scroll offset and act only as a fallback\nfor node targets that no longer resolve.\n\nKeep the review overlay development-only in normal integrations. The board\nruns entirely inside the Test Kit Shadow DOM. It does not load a drawing SDK,\nremote fonts, icons, translations, or other canvas assets, and it has no\nlicense-key or watermark requirement. The overlay should still remain\ndevelopment-only because it exposes review authoring controls.\n\nThe visual contract comes from `@a3s-lab/ui` without creating a runtime UI\ndependency. `npm run sync:a3s-ui` reads the pinned foundation, `task-pane`,\n`toolbar`, and `status-badge` CSS exports, scopes root and dark-theme selectors\nto `.a3s-root`, and generates TypeScript string constants that ship inside the\nShadow DOM bundle. Host CSS therefore cannot leak in, and consumers do not\nload a second stylesheet or UI package at runtime.\n\nThe board exports a bounded `designReference` with the finding. Imported files\nmay be at most 8 MiB; inline PNG/JPEG data URLs are limited to 384 KiB, and the\ngeneral contract admits at most 1,600 × 1,200 pixels and 1,920,000 pixels total.\nThe Web driver validates the encoded header and declared dimensions, writes\n`repairs/<finding-id>/design-reference.png|jpg` under its artifact root, and\nreplaces inline bytes with viewable evidence metadata and a SHA-256 digest\nbefore the repair reaches a coding agent.\n\nLayout Mode can draw the viewport region for a new component or select an\nexisting section and describe its destination. Its searchable catalog contains\n90 component types across ten categories, with complete English and Simplified\nChinese labels and search. Known catalog selections follow a live locale\nchange, while the component field preserves project-specific free-form values.\nIt emits `placement` or `rearrange` intent for A3S Test and does not move or\nstyle application DOM itself.\nSubmitted findings support human/agent replies, accept/reject/reopen review\nactions, and per-finding lifecycle projection.\n\nThe review flow stays inside one fixed side panel. The first screen exposes\nonly **Element** and **Area**; **Text**, **Multi**, **Draw**, and **Layout** are\nprogressively disclosed under **More tools**. Selecting a target replaces the\ntools with the requested-fix field in the same panel. **New feedback** and\n**Findings** remain the two top-level views, while preferences move to the\nheader control. No target-attached editor, secondary floating tray, or nested\nmodal is opened. Saving or sending is the final action, not another navigation\nstep. The design board temporarily replaces the panel and returns to the same\neditor when closed.\nShort viewports keep panel content internally scrollable. On mobile, starting\na marking mode uses the same compact finish/cancel bar as desktop. At every\nviewport size, the side panel temporarily yields the page so covered targets\nremain visible and directly selectable. Mobile controls use touch-sized targets\nand 16-pixel form text.\n\nVisible markers and the active candidate resolve live DOM rectangles after\npage or nested-container scrolling and disappear whenever the review panel is\nclosed. Transient hover geometry is discarded as soon as a target is selected,\nso a stale fixed-position outline cannot survive a scroll. Stored region\ntargets retain their captured scroll origin.\n\nAnimation pause is ownership-safe: Test Kit freezes running and newly started\npage motion while pause is active, then resumes only animations and media it\nactually paused. Motion already paused by the host application stays paused.\n\nFor keyboard multi-selection, focus an application element and press `Enter`\nto add it without activating the host control or moving focus into the review\nShadow DOM. Repeat for additional elements, then press `Shift+Enter` to open\nthe finding editor. `Escape` or the visible marking Cancel control discards an\nincomplete selection and restores application focus. From a completed\nmulti-select editor, `Escape` discards the editor and restores review-panel\nfocus.\n\nThe review preferences section persists only bounded presentation choices:\ntheme, marker color, clear-after-copy, explicit host pointer blocking, panel\ndock, and wireframe page fade. Auto-send and animation pause reset on mount.\n`Hide until tab restart` is tab-scoped and does not disable the headless page\ncontext bridge. Activating it returns focus without scrolling to the last\nconnected application control. Clipboard failure never clears local drafts.\n\nThe overlay exposes a named non-modal review region, finding-specific action names,\none polite status announcer, visible keyboard focus, and focus restoration when\ncontrols disappear, including when tab-scoped hiding removes the Shadow DOM.\nGlobal review commands are published through `aria-keyshortcuts` and a\nkeyboard-reference section in Review preferences. Letter shortcuts and the\npanel toggle are ignored while focus is in an editable control. Active marking\nor an open finding editor receives unmodified `Escape` first, including from\nan editable target; an idle host editable retains `Escape` and leaves the panel\nopen. With the panel open, `E`, `M`, `T`, `A`, and `D` start element, multi,\ntext, area, and draw marking; `L`, `P`, and `H` toggle Layout Mode, page motion,\nand marker visibility. Unit and real-Chromium accessibility-tree checks protect\nthese semantics.\nThe real-browser suite also runs `axe-core` WCAG A/AA scans across three themes\nand the major review, Layout, candidate, clarification, human-review, and\nterminal states, including the open Shadow DOM. A separate hands-on VoiceOver,\nNVDA, or equivalent screen-reader audit of every workflow is still required\nbefore claiming complete assistive-technology coverage.\n\nThe\n[independent screen-reader audit guide](../../docs/screen-reader-audit.md)\nprovides the loopback fixture command, canonical 15-workflow manifest,\nevidence rules, strict audit JSON contract, and separate structural and\nall-passed verification commands. Verification resolves the named Git commit\nand emits a location-independent v2 record with SHA-256 bindings for the audit,\ncommitted workflow manifest, and every evidence file. The harness makes the\naudit reproducible; it does not close M8 or grant repair authority.\n","readmeFilename":"README.md"}