{"_id":"@testsprite/testsprite-cli","_rev":"19-94c0c3a4897faab16013e8fdaafde332","name":"@testsprite/testsprite-cli","dist-tags":{"latest":"0.16.0"},"versions":{"0.1.0":{"name":"@testsprite/testsprite-cli","version":"0.1.0","keywords":["testsprite","cli","testing","automation"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.1.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"89c320e787eb068649b83fd47c7f4948a62d21de","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.1.0.tgz","fileCount":63,"integrity":"sha512-iPsBJ3NedmKpPnYCYg6bchz6HrKrh9zpbV8isQLmaxqbc1xvBCT3Q7PpGeAkMs1eu8p5ngYwIZKL/aaq6yoaKQ==","signatures":[{"sig":"MEQCICxJsI+RGO72UY7loKwcGv2qwAil5U207uGtDRo6RVNsAiBkdPCcgTaEBrsM3stkuhLR/mPekpQSrZfgXh33ApxAyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":767486},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dukeduke2011","email":"zeshi@testsprite.com"},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.12.1","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"26.0.0","dependencies":{"valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.14.3","eslint":"^9.14.0","vitest":"^2.1.4","globals":"^15.12.0","prettier":"^3.3.3","@eslint/js":"^9.14.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.1.0_1781179647253_0.3640073467004876","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@testsprite/testsprite-cli","version":"0.1.1","keywords":["testsprite","cli","testing","automation"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.1.1","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"0a9b9b299c7fc2f751bdf6bb9818c0dca6f4c97d","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.1.1.tgz","fileCount":63,"integrity":"sha512-A6mihjLVXrO06GLz+MIBXvrhNUl1EHMLJLJv06DrdMyJrpM1us4JRBQEg0h8MieGATtZ/IXvVGNleNIO3qv0sA==","signatures":[{"sig":"MEUCIQCwDvJHcPW4g4+uTMncxCd3OSk/xxXmGNr3LsOtcAgKcwIgNXTqnjAyixiu+HFjjE1qi/uY3L8V/SNXtDQS+6/L4HY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":767486},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"69cc8a58cf0e6ba56a9857fb4cf00f32899a3290","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dukeduke2011","email":"zeshi@testsprite.com"},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.12.1","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"26.0.0","dependencies":{"valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.14.3","eslint":"^9.14.0","vitest":"^2.1.4","globals":"^15.12.0","prettier":"^3.3.3","@eslint/js":"^9.14.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.1.1_1781230520788_0.6965857222745608","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@testsprite/testsprite-cli","version":"0.1.2","keywords":["testsprite","cli","testing","automation"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.1.2","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"b711def79ebc55c9b2457b63883c0da9cc4704bd","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.1.2.tgz","fileCount":67,"integrity":"sha512-d9afzozRrG6nOrC+YOu4MjkeGvm4R+n8+NeS7D3C0VgxNREy9b+/awBqtopRFhRIXmVPZGpiKJHfxaHb8tNndQ==","signatures":[{"sig":"MEUCIQCCylpZyL/n8YOmAj336m4I+kmqYNifapbWZWCrPYN6BgIgC2ZTrlnda1J7H/lKHJUcmbONH0waM1jEv9z7UBpl95k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":785176},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"b34406b3c8678019bc9785e2d5cbf5fa79449bb5","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"dukeduke2011","email":"zeshi@testsprite.com"},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.12.1","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"26.0.0","dependencies":{"valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.14.3","eslint":"^9.14.0","vitest":"^2.1.4","globals":"^15.12.0","prettier":"^3.3.3","@eslint/js":"^9.14.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.1.2_1781925732332_0.5887466497556293","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@testsprite/testsprite-cli","version":"0.2.0","keywords":["testsprite","cli","testing","automation"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.2.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"efdc6ae9124beb38dec5a9aeb78c2007fb9b4a29","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.2.0.tgz","fileCount":68,"integrity":"sha512-BI6WcK9HyvCRFroHac1ezOetuoGl7CyJgnErWtnGZGEgg16kXvtKNRCgVnO+u0acqSPrH0u5IdcEDa0V+s6qHg==","signatures":[{"sig":"MEQCIHJOf2bLfTEyNRMsXXza4F7sl0ZkPVHRpW+EAauaicd4AiBOJRHdF7E1wTipYjBEGETXuhXNLf2yOqMya95M6jt6PQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":830770},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"dukeduke2011","email":"zeshi@testsprite.com"},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.12.1","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"26.0.0","dependencies":{"valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.14.3","eslint":"^9.14.0","vitest":"^2.1.4","globals":"^15.12.0","prettier":"^3.3.3","@eslint/js":"^9.14.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.2.0_1782783452684_0.9519120831154813","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@testsprite/testsprite-cli","version":"0.3.0","keywords":["testsprite","cli","testing","automation"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.3.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"576043984ed83545978686ee8b2b499649ad84ff","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.3.0.tgz","fileCount":82,"integrity":"sha512-g4yzbmrzj5HGiSPUHZpteAaTZSoNXdQHA6+MTO76wddvhwYA9BhGyncKnxq7dabLUqHuoeMI/YAmPI97rGYHWg==","signatures":[{"sig":"MEUCIEZDGA6wGkHl/pUCBEgSza4LjFtrSUVRf5YI9j9syFa3AiEAxl4hA57xictgwKb0B7jmL9tzkEHYi+cTuLAguWgPM5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1014234},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"60d55e47883e924ff1a5f0ab1fe67a25bc3b0877","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"dukeduke2011","email":"zeshi@testsprite.com"},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.12.1","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"26.0.0","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.14.3","eslint":"^9.14.0","vitest":"^2.1.4","globals":"^15.12.0","prettier":"^3.3.3","@eslint/js":"^9.14.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.3.0_1783638925905_0.9543785548747472","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@testsprite/testsprite-cli","version":"0.4.0","keywords":["testsprite","cli","testing","automation"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.4.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"c9fcbfda2c7c5163370191721119e65bd1a2bae2","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.4.0.tgz","fileCount":86,"integrity":"sha512-4/Qc1oiQZpZ5fcnGEwKwDFXdpGhcKXs4GE5j59eGdnblU421Cy2FIYp3tiT4XDjMYAgXgb7djd3gJJapAfMvQQ==","signatures":[{"sig":"MEUCIEtaA2fh1Hq3sTvAQchFQSyy0NcwE7McR0QlaNAd3OcsAiEA7arvnXTaIkeGEJ4b0emqPJvxrKxk7Btz++nyTxwS3Aw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1091307},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"7b4937bd903fcd201b30a7e7ee4dc8f3af4d871c","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"10.9.3","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.18.0","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.14.3","eslint":"^9.14.0","vitest":"^2.1.4","globals":"^15.12.0","prettier":"^3.3.3","@eslint/js":"^9.14.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.4.0_1784252053699_0.7376393145268889","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@testsprite/testsprite-cli","version":"0.5.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.5.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"2abf3a1077380490c0ba0f9a8036b3749a43b090","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.5.0.tgz","fileCount":101,"integrity":"sha512-jr11mQVMR+shJdwVY1+BkEbkKT1GcQVN4ex7c/EFVkj2VZyABsZZTHNDowzWwK0n8jNZ9ccXuHd6bdTdstlvsg==","signatures":[{"sig":"MEYCIQCT7WBxbyKGTPYWQm7MdR7EJliEf5mikVY1ZAoaaVq5jAIhAKvYLgk9aj0iyhZk+haWj6U/d170DWJ9ZiiXnGbj7yTj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1278187},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"b35dbaeb57add1cf666cc6e206a1662660f553e8","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.1","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^2.1.4","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.5.0_1785980307453_0.3141697629713709","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@testsprite/testsprite-cli","version":"0.6.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.6.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"f442bf458e64c3bbd181477453ea18c1c57e7094","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.6.0.tgz","fileCount":101,"integrity":"sha512-m/wEo4mPfmdg56BXLggEDRSKwiD8AbZE3qSJzb9RsmQmncLR/x0e/FB4kirYAuUbL0Bh9xWbT/MULVqzWCrBUA==","signatures":[{"sig":"MEQCIAGv0KD+Ie5Z9jt3YpIqgI8Vzl2VFwlDYUt+LuHn2cZfAiBig+CBwgd6g0ZEGvUBET58v+yD+6QlxY0uGTiR7PT17w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1315531},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"aa517e7c0f7c58747e90b94b36da6b6481c03c8a","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.1","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^2.1.4","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.6.0_1786580431232_0.6497744931350327","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@testsprite/testsprite-cli","version":"0.7.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.7.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"254f3a2e24d7b63428f6e8e5cc7df16bd6631995","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.7.0.tgz","fileCount":117,"integrity":"sha512-gENsRZQ4pk3i81W2AXmRguUsaDPuV8+cERkjxqR/WLjE1QKQCFOaQ6aTr42TnScIFd4vf8YRdFjJt9Qjdr0YLQ==","signatures":[{"sig":"MEUCIDUx2oz179OsGwWAT/6FiM3KWWQR/5+7gb8GzGxbRmvHAiEAiwNmjic0ZwANQ+M0W1uhbGh9ZBKayNu+BjB2aomgFrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1476680},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"40d18d2ef68acdd3a864304321aeea7d585031b8","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^2.1.4","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.7.0_1787189980428_0.40249886757322706","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@testsprite/testsprite-cli","version":"0.8.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.8.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"2ac4f00f5ce81d06d05be3ae035b8e377c6a9960","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.8.0.tgz","fileCount":149,"integrity":"sha512-Rj4PyYxxqgsT8AiJHpqEhENMKjftiIz950JlC4fTCCYHqemg/zi3D/bKyvQKAZux/Hcuhfe4LpDXi+A8Q7wKRQ==","signatures":[{"sig":"MEUCIFss1In9gLMJ7vXmqKq37l12D83JJj2zhd+6+B9fTxOfAiEA5z0RiP+HwZMBu5gm+0w3lFh4CSdOrUix/rF1sLue+9w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1860337},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"89807aaecf14ef0ba7cb3c4c97e9e0e977f81b78","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^2.1.4","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.8.0_1788175669527_0.054216809775485375","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@testsprite/testsprite-cli","version":"0.9.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.9.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"a9a51a1ae622bf60a393d9f57fceb06347351583","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.9.0.tgz","fileCount":151,"integrity":"sha512-QzBxlo2eGrG2AgNJGmS78OIIGMQAS+URxD67f04L5oHsaWO88OTk/dvLw79AKy0EgTnnvggSWr5/M7liYj5+0Q==","signatures":[{"sig":"MEQCIAQco09E5Jj03BfWhh3iMq5IIoK4VZpMqq3z4rfOodkAAiAAktPqYSnIOxw2BOZ/4eFcuaS45XTM9xmrarsowhH37A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1904310},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"6929ea330fd2cf16d55094069e07da915bc18721","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^2.1.4","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.9.0_1788413969786_0.8810558077340285","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@testsprite/testsprite-cli","version":"0.10.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.10.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"042e7fc42012f0dd7a7ae276f36ea0fafc29eab2","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.10.0.tgz","fileCount":151,"integrity":"sha512-TiqswYVl0Nz4vDMdM2DI6ZiY6eq+OuPPdEzSfLwTQma8lGgomBCmLFM6Ij1cLBwc6m/PJ3PdKyTcpeAE6FpldQ==","signatures":[{"sig":"MEUCIGpl0CGt/SH1WwjhfVWlV476sFqhJbEXDe/kUVE4syM4AiEAy7m64/ZDf08kJtyLTUGHh0x+iAhwEwU537G5hNVsQow=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1915163},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"e972204b8c4b4a546828809737275593075785c4","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^2.1.4","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.10.0_1788502476244_0.4502146423932798","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@testsprite/testsprite-cli","version":"0.11.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.11.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"7dcac2908f0f358ec33cbbeec043df2ad24766e1","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.11.0.tgz","fileCount":151,"integrity":"sha512-s0F3H+FEVk2E5ZtKs8c+EbUdDWJKBQzi8LNnqBuVQ1B/gBFUAQ7hjDOGkKCDCQ127peeOeWI6Sr6agMtoU/PfA==","signatures":[{"sig":"MEUCIQCz0jKdjOlrPI4Q45nDH0ITQkCMOWiXT/HvF+PFnLFYrwIgL1zOY0ReGjrnHvflYkKNVh4DmlvyGjhW2q0sQSHg5K0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1970366},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"125872fd1b19e948528177b6f6a2ac25c83dfd89","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^2.1.4","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","selfsigned":"^5.5.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.11.0_1789177673322_0.5207059448045142","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@testsprite/testsprite-cli","version":"0.12.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.12.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"7fbf25b807c215ff5115e34b369d97cf73b4425e","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.12.0.tgz","fileCount":155,"integrity":"sha512-fV1r76jO1UucjjZmtTuWDaBcOoRfcKHKYoPmugtS0x2wwmRFSKZdcUwdQ0Sk8720JGT77oPAEdcTEhowiYQzlQ==","signatures":[{"sig":"MEQCIDndZi0Pv1xw5ZhAl7yW1bPZHfia3EqvyvfNKXWIGAX0AiASkHladJT0gCbbQuW3zrEZXzQkDR7Q6qRdEBNI7O1Hig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBxre+S5/bjIcVhXjtVQub6IH1QCywro7iW9TchwhJKZAiBK26itxePj+U4n8eBRd7ZThfFe5Ap0xLJYkjtVSphCRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2064991},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"ea9aff41ec83e72da574b9c65de009f6c7998157","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^2.1.4","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","selfsigned":"^5.5.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^2.1.4","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.12.0_1789700618271_0.7186672922054511","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@testsprite/testsprite-cli","version":"0.13.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.13.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"a9412dbd41086b0f5229221238bb8cb28d303ecd","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.13.0.tgz","fileCount":163,"integrity":"sha512-PdYyD3IIA0NZuJfKkag+k5iOo4boBGZAwnUhLstVdCnx8RJAyMlb3uY+enbctDltm7wy5TCf9pHhZTeBhBqcTg==","signatures":[{"sig":"MEUCIQDHl34Jf/C7ojQq3ay97HwuCGUcBfprM9oLt9//HTeshQIgHbISa0/yXGAMXyg62eO8J2ddMrJ6V0P3GRYOR3r7A+o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDBV8PGSEP99D58rOs+9F903+xHUM4k97inRdNaLHgmlAiB9YLSbAxiPhBkEDTKB4mclSyuwrYz4DqX6wROv4xn5vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2255249},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"1921dcfe25d943ee94cf95e41af5ed87190ca793","scripts":{"lint":"eslint . && node .github/scripts/check-ticket-refs.mjs","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^4.1.11","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","selfsigned":"^5.5.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^4.1.11","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.13.0_1790567738365_0.0912811972723584","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@testsprite/testsprite-cli","version":"0.14.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.14.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"0f5261d0b8486e298bad41f94d77ca86140a551e","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.14.0.tgz","fileCount":169,"integrity":"sha512-LWxrZyK+NFjmOuVGbiADOd/rqz/qX2SBfroi77sFxlUT47eYCySjAnEip2RbG7P2CVmnRu37o5Q83oFDDJwepQ==","signatures":[{"sig":"MEQCIH2XdGfFEJFjoK/ENZFc2IvpyrJqWYbbl4grm+2IN7HvAiAOSWnFsNAmP81T9EHt8kWDhePbF6NV5t9lyHMxkwj+Lg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAJrCRRLuzwr9n60HpZyeeRHPxHtMsSiGH7Psj7eFZ27AiEA5KxyyQpuwRZhbIzlji3Wonwhu2oOivo0yin2QbEHEuw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2416000},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"d95105a76f05a96e841c16f31afbd86b3caf5193","scripts":{"lint":"eslint . && node .github/scripts/check-ticket-refs.mjs","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.3","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^4.1.11","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","selfsigned":"^5.5.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^4.1.11","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.14.0_1791268177701_0.121246355605233","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@testsprite/testsprite-cli","version":"0.15.0","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"author":{"name":"TestSprite team"},"license":"Apache-2.0","_id":"@testsprite/testsprite-cli@0.15.0","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"homepage":"https://github.com/TestSprite/testsprite-cli#readme","bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"bin":{"testsprite":"dist/index.js"},"dist":{"shasum":"46fd8a35a5895ac33eaa3c5b99c3496050530b32","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.15.0.tgz","fileCount":176,"integrity":"sha512-RcfiX8V0zE/nEU1zqYvemoI11lcu89I0sk+4vq73W/AZKYOgV4z4BtFMvSa96AiIBP3v/3l/O9kN7u+Cc00mmw==","signatures":[{"sig":"MEUCICVDSEkLCxt7T9ff2lZjEoL4QornUK+toJP1ryBU4nK4AiEA9tYoX2IrKNH6XcQgRx1xc4PFXlyvZ8wAj6YEm9kuB+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDkeaHoWW/zxCJvQL1Q5it3oKj1udp8FFkU+164tGQhEQIgWo9lxeyqWY9EJsDdJ0LdsT37/H9gxv9WJaQtLQmHBz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2524830},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"8a2361316a6b439250d95ba9ed619713aac70d3f","scripts":{"lint":"eslint . && node .github/scripts/check-ticket-refs.mjs","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"131d9fbc-9a45-4811-8ea2-423094451820"}},"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"_nodeVersion":"22.23.3","dependencies":{"undici":"^7.16.0","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^4.1.11","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","selfsigned":"^5.5.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^4.1.11","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/testsprite-cli_0.15.0_1792382186418_0.5931315200536305","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"_id":"@testsprite/testsprite-cli@0.16.0","bin":{"testsprite":"dist/index.js"},"bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"dist":{"shasum":"40bbf89c3cde5d21483fbce90f8ac5016c62aa40","tarball":"https://registry.npmjs.org/@testsprite/testsprite-cli/-/testsprite-cli-0.16.0.tgz","fileCount":176,"integrity":"sha512-wH5n7PNA26OMa+Fd17j27qCjy9n5W2+d5QDPtagETL+Sga9h/i3euB3F4+sRQUOY0KiNwZHZpUh85NJIWu5wBg==","signatures":[{"sig":"MEQCIEPJGeA+5njvvVh9coShWIFn29BbU6zvWAw0k4VPMFROAiAD2US2WlWF2TxZXJ7ZNzTY+knKo8jrOntVQKDhGbThUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCo/I7eBAuyI6s9EMeEjTwFHuN8sL5CtW9qq+3MUGnhLAIhAOSQFtkX+CQnxkhXBA/TOtPQUqLKOqIIq8nzNrmTqu7f"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@testsprite%2ftestsprite-cli@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2542885},"main":"dist/index.js","name":"@testsprite/testsprite-cli","type":"module","types":"./dist/index.d.ts","author":{"name":"TestSprite team"},"engines":{"node":"^20.19.0 || ^22.13.0 || >=24"},"gitHead":"4b5ae55c44cfd3dffae59b861580f32d236b39c1","license":"Apache-2.0","scripts":{"lint":"eslint . && node .github/scripts/check-ticket-refs.mjs","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/postbuild.mjs","clean":"rm -rf dist coverage","format":"prettier --write .","lint:fix":"eslint . --fix","prebuild":"node scripts/generate-version.mjs","test:e2e":"npm run build && vitest run -c vitest.e2e.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","generate:version":"node scripts/generate-version.mjs"},"version":"0.16.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"131d9fbc-9a45-4811-8ea2-423094451820"}},"homepage":"https://github.com/TestSprite/testsprite-cli#readme","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"_npmVersion":"11.6.2","description":"Official TestSprite command-line interface","directories":{},"maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"_nodeVersion":"22.23.4","dependencies":{"undici":"^7.30.1","valibot":"^1.4.1","commander":"^12.1.0","@llmcode/yamux-ts":"0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","msw":"^2.14.3","eslint":"^10.7.0","vitest":"^4.1.11","globals":"^17.7.0","prettier":"^3.3.3","@eslint/js":"^10.0.1","selfsigned":"^5.5.0","typescript":"^5.6.3","@types/node":"^22.9.0","typescript-eslint":"^8.13.0","@vitest/coverage-v8":"^4.1.11","eslint-config-prettier":"^9.1.0","eslint-plugin-security":"4.2.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/testsprite-cli_0.16.0_1793520393071_0.6957722241427189"}}},"time":{"created":"2026-06-11T12:07:27.101Z","modified":"2026-11-01T08:06:33.518Z","0.1.0":"2026-06-11T12:07:27.410Z","0.1.1":"2026-06-12T02:15:21.042Z","0.1.2":"2026-06-20T03:22:12.480Z","0.2.0":"2026-06-30T01:37:32.900Z","0.3.0":"2026-07-09T23:15:26.128Z","0.4.0":"2026-07-17T01:34:13.879Z","0.5.0":"2026-08-06T01:38:27.598Z","0.6.0":"2026-08-13T00:20:31.431Z","0.7.0":"2026-08-20T01:39:40.600Z","0.8.0":"2026-08-31T11:27:49.710Z","0.9.0":"2026-09-03T05:39:29.980Z","0.10.0":"2026-09-04T06:14:36.442Z","0.11.0":"2026-09-12T01:47:53.547Z","0.12.0":"2026-09-18T03:03:38.413Z","0.13.0":"2026-09-28T03:55:38.511Z","0.14.0":"2026-10-06T06:29:37.805Z","0.15.0":"2026-10-19T03:56:26.547Z","0.16.0":"2026-11-01T08:06:33.187Z"},"bugs":{"url":"https://github.com/TestSprite/testsprite-cli/issues"},"author":{"name":"TestSprite team"},"license":"Apache-2.0","homepage":"https://github.com/TestSprite/testsprite-cli#readme","keywords":["testsprite","cli","testing","automation","test-automation","ai-testing","e2e","qa","api-testing","playwright","mcp","claude-code","agent"],"repository":{"url":"git+https://github.com/TestSprite/testsprite-cli.git","type":"git"},"description":"Official TestSprite command-line interface","maintainers":[{"name":"dukeduke2011","email":"zeshi@testsprite.com"},{"name":"fangyuan_zhang","email":"fangyuan@testsprite.com"},{"name":"lrui_ts","email":"lrui@testsprite.com"},{"name":"sherryyang","email":"sherryyiyang@gmail.com"}],"readme":"<div align=\"center\">\n\n<a href=\"https://www.testsprite.com\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/testsprite-logo-dark.png\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"assets/testsprite-logo-light.png\">\n    <img src=\"assets/testsprite-logo-light.png\" alt=\"TestSprite\" width=\"420\">\n  </picture>\n</a>\n\n### The verification layer for the agentic coding era.\n\nAI ships code in minutes — verifying it hasn't. `testsprite` opens your live app, uses it like a real user, and shows your coding agent exactly what broke — so it fixes its own work before a bug ever reaches you.\n\n<sub><b>Proof, in public: verification beats model size.</b> With this CLI in the loop, the cheapest model in the field shipped the most correct app on an open leaderboard — <b>89%</b>, at half the cost of the priciest one. <a href=\"https://codercup.ai\">See the leaderboard →</a></sub>\n\n<p>\n  <a href=\"https://www.npmjs.com/package/@testsprite/testsprite-cli\"><img src=\"https://img.shields.io/npm/v/@testsprite/testsprite-cli?color=19C379&label=npm\" alt=\"npm version\"></a>\n  <a href=\"https://www.npmjs.com/package/@testsprite/testsprite-cli\"><img src=\"https://img.shields.io/npm/dm/@testsprite/testsprite-cli?color=19C379&label=downloads\" alt=\"npm downloads\"></a>\n  <a href=\"#quickstart\"><img src=\"https://img.shields.io/badge/node-20.19%2B%20%7C%2022.13%2B%20%7C%2024%2B-19C379\" alt=\"Node 20.19+, 22.13+, or 24+\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/badge/license-Apache%202.0-0A0A0A\" alt=\"License Apache 2.0\"></a>\n  <a href=\"https://github.com/TestSprite/testsprite-cli/actions/workflows/ci.yml\"><img src=\"https://github.com/TestSprite/testsprite-cli/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n</p>\n\n<p>\n  <a href=\"https://www.testsprite.com\"><img src=\"https://img.shields.io/badge/testsprite.com-19C379?style=for-the-badge&logoColor=white\" alt=\"Website\"></a>\n  <a href=\"https://docs.testsprite.com/cli/getting-started/overview\"><img src=\"https://img.shields.io/badge/Docs-0A0A0A?style=for-the-badge\" alt=\"Docs\"></a>\n  <a href=\"https://x.com/Test_Sprite\"><img src=\"https://img.shields.io/badge/Follow%20on%20X-000000?style=for-the-badge&logo=x&logoColor=white\" alt=\"Follow on X\"></a>\n  <a href=\"https://www.linkedin.com/company/testsprite\"><img src=\"https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white\" alt=\"LinkedIn\"></a>\n  <a href=\"https://discord.gg/GXWFjCe4an\"><img src=\"https://img.shields.io/badge/Join%20our%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white\" alt=\"Join our Discord\"></a>\n</p>\n\n⭐ _Help us reach more developers and grow the TestSprite community. Star this repo!_\n\n</div>\n\n<video src=\"https://github.com/user-attachments/assets/eca90a91-93ef-49f6-8d13-86b4eb25f4cf\" controls muted></video>\n\n<p align=\"center\"><sub><b><a href=\"https://github.com/user-attachments/assets/eca90a91-93ef-49f6-8d13-86b4eb25f4cf\">▶ Watch the launch video</a></b> — the three hard limits every coding agent hits, and the loop that breaks them (4 min).</sub></p>\n\n---\n\n## What is it?\n\n[TestSprite](https://www.testsprite.com) is the AI testing platform 100,000+ teams use to test their software, frontend and backend — in the cloud, against the live product, not mocks. This repo is its official CLI.\n\nIt puts that platform in your coding agent's hands: the agent verifies every behavior it ships, and what broke comes back as **one self-consistent bundle** it can act on — no dashboard scraping. Humans drive the same surface from a terminal or CI.\n\n## ⭐️ Star the Repository\n\n<img width=\"900\" height=\"506\" alt=\"testsprite-repo-star-fast\" src=\"https://github.com/user-attachments/assets/8c3975df-8d47-4d6c-a485-135b80f779a5\" />\n\nIf you find `testsprite` useful, a GitHub Star ⭐️ would be greatly appreciated — it helps other builders (and their agents) find the project, and stars notify you about new releases.\n\n## Quickstart\n\nRequires **Node.js 20.19+**, **22.13+**, or **24+**. (No global install? `npx @testsprite/testsprite-cli` works too.)\n\n```bash\nnpm install -g @testsprite/testsprite-cli\ntestsprite setup\n```\n\n`testsprite setup` prompts for your [API key](https://www.testsprite.com/dashboard/settings/apikey), verifies it, and installs the verification-loop skill for the coding agents this project uses — one command, so your agent is wired to verify its own work.\n\n**Which agent it installs for.** Each of the eight supported targets — `claude`, `cursor`, `cline`, `windsurf`, `antigravity`, `kiro`, `copilot`, `codex` — lands its skill in a different place, so `setup` works out which you use: the agent calling it, if it identifies itself, together with every agent whose config is already in the project. It installs for all of them and prints what it found — in a terminal it shows you that list first, so you can accept it or narrow it before anything is written. If nothing identifies an agent, it installs for `claude` and says so — that is the one case where you want `--agent <target>` to name one yourself. Check the result any time with `testsprite agent status`.\n\nNon-interactive (CI / onboarding scripts):\n\n```bash\nTESTSPRITE_API_KEY=sk-... testsprite setup --from-env --yes\n```\n\n> **Pointing a coding agent (Claude Code, Cursor, Codex, Cline, …) at TestSprite?** Have it run `testsprite setup` first — that installs the verification skill, so the agent knows how to create, run, and triage tests on its own (instead of guessing from this README). `setup` reports which agents it installed for; add `--agent <target>` if that list is not the one you wanted. New here? Start with the **[getting-started overview](https://docs.testsprite.com/cli/getting-started/overview)**.\n\n> **Privacy note:** interactive runs check the npm registry at most once per 24 h to offer a \"new version available\" notice — package name only, never your key or data; `TESTSPRITE_NO_UPDATE_NOTIFIER=1` disables it. The backend also advertises its minimum supported CLI version — a below-floor CLI prints a one-line upgrade advisory on stderr, and a too-old client may be rejected with exit 14 (`CLIENT_TOO_OLD`). Details in [DOCUMENTATION.md → Update notice](./DOCUMENTATION.md#update-notice).\n\nFrom there, the loop runs on its own — an example session, typed by the coding agent:\n\n```bash\n# 1 — describe the behavior you want to guarantee, run it, wait\ntestsprite test create --project proj_8f0f6 --type frontend \\\n  --plan-from ./checkout-flow.plan.json --run --wait --output json\n#   → exits 1: the run failed\n\n# 2 — pull ONE self-consistent failure bundle\ntestsprite test failure get test_3a9f21c7 --out ./.testsprite/failure\n\n# 3 — the agent reads the bundle, fixes the code, then replays\ntestsprite test run test_3a9f21c7 --wait --output json\n#   → exits 0: passed. The test now lives in your durable suite.\n```\n\n`./checkout-flow.plan.json` (the `--plan-from` argument above) is a JSON file describing the test in plain language — no browser code required. This is the exact, byte-identical output of `testsprite test create --plan-template` (also embedded verbatim in `test create --help`):\n\n```json\n{\n  \"$schema\": \"https://raw.githubusercontent.com/TestSprite/testsprite-cli/v0.4.0/schemas/plan.schema.json\",\n  \"projectId\": \"prj_abc123\",\n  \"type\": \"frontend\",\n  \"name\": \"Login rejects an empty password\",\n  \"planSteps\": [\n    {\n      \"type\": \"action\",\n      \"description\": \"Navigate to /login and submit the form with an empty password\"\n    },\n    {\n      \"type\": \"assertion\",\n      \"description\": \"Verify an inline error says the password is required\"\n    }\n  ]\n}\n```\n\nGet this exact skeleton without hand-copying it (and without the risk of it drifting from your installed version — see below): `testsprite test create --plan-template`. Full field reference (including the `{{...}}`-placeholder caveat, size caps, and the `$schema` hook for live editor validation): [Plan file format](./DOCUMENTATION.md#plan-file-format).\n\n> The `$schema` URL above is pinned to the CLI version that generated this doc (`v0.4.0`) — `--plan-template`'s live output always pins to **your installed version** instead, which is what actually resolves. If you're reading this on a later release, run the command yourself rather than trusting this snippet verbatim.\n\n**Don't want to write the first tests yourself?** For a deployed target, ask TestSprite to propose them. Local projects use the authored-plan flow below. `testsprite test plan generate --project <id>` explores your app (or reads the API spec you uploaded with `project docs upload`), drafts test cases, and stages them for review — nothing is written to your disk. You read the printed table and keep what you want:\n\n```bash\ntestsprite test plan generate --project proj_8f0f6           # stages proposals for review\ntestsprite test plan accept --project proj_8f0f6             # → real tests\ntestsprite test plan accept --project proj_8f0f6 --only prop_2 prop_5   # or just these\n```\n\nIt only runs what the project is still missing, so a second call picks up where the first left off. Generation spends workspace credits per stage that actually runs (the result line reports the spend), and a PRD uploaded with `project docs upload --role prd` bills 0.5 credits for its embedding — an API spec is free. Full walkthrough, including what happens on Ctrl-C and every precondition error: [Generate commands](./DOCUMENTATION.md#generate-commands).\n\nPrefer to configure each step by hand (or learn the surface offline with `--dry-run` first)? See [Manual setup](./DOCUMENTATION.md#manual-setup) and [Install & verify](./DOCUMENTATION.md#install--verify).\n\n## Testing an environment on your machine\n\nFrontend tests can reach your running app through a TestSprite tunnel, including on the Free plan (ordinary run credits apply).\nUse an API key with `run:tunnel`; the CLI names the missing scope if the key cannot open a tunnel. Existing keys receive this scope on backend v0.18.0 or later unless deliberately narrowed.\n\n```bash\ntestsprite project create --type frontend --name \"My local app\" --local 3000\ntestsprite test create --plan-from ./checkout.plan.json --project <project-id>\ntestsprite test run <test-id>  # the saved loopback URL opens a tunnel and waits\ntestsprite test run <id> <id> --max-concurrency 5\ntestsprite test run --all --project <project-id>\n# Or keep one tunnel open in terminal A (no port argument)\ntestsprite tunnel start --ttl 3600\n# Terminal B: borrow the clientId printed above; keep terminal A running\ntestsprite test run <test-id> --tunnel-client <client-uuid>\ntestsprite tunnel list\ntestsprite tunnel stop <client-uuid>\n# Stop every live tunnel on this account only when you intend to revoke them all\ntestsprite tunnel stop --all --confirm\n```\n\nRun several local frontend tests in one invocation to share one tunnel binding. The batch runs up to 5 tests at once by default; `--max-concurrency` accepts 1–10. `--all --local` skips backend tests. An owned batch cancels unfinished runs on Ctrl-C or tunnel loss; JSON output lists every requested test in input order, including tests that did not start. The minted client id is printed before the tunnel connects.\nHit the tunnel limit? Run `testsprite tunnel list`, then `testsprite tunnel stop <client-uuid>` for an unused binding, or `testsprite tunnel stop --all --confirm` to revoke them all. An older server without listing returns exit 4; a key without `run:tunnel` returns exit 3.\nA second `tunnel start` or process using the same credential takes over, and the first exits **10**.\nAn environment is one origin (scheme, host and port) plus its sign-in configuration. Frontend runs automatically open a tunnel for a saved `localhost`, `127.0.0.1` or `[::1]` URL: `test run`, `test create --run`, `test create-batch --run` and `testlist run` use this behavior. `--env <name>` selects the environment; omit it for the project default. `--no-wait` disables automatic tunnels; drop it to run through one. If environment reads are unavailable, the command keeps the previous server behavior. Several fresh-run IDs require a tunnel; public targets retain the exit-5 refusal. A named public environment used against a local origin prints a sign-in advisory on stderr. Test-list runs share one timeout including capacity waits and require the server to confirm tunnel support; an older server triggers a cancellation attempt and a clear error.\n\n`--local <port>` saves new project and environment URLs as `http://localhost:<port>`. Use `--url http://127.0.0.1:<port>` or `--url http://[::1]:<port>` when the host matters (`--local-host` is deprecated). Dev servers can be slow through a tunnel, so for heavy apps test a production build (`npm run build` plus your framework's preview or start command).\n\nThe tunnel uses verified TLS. On a network that re-signs TLS, set `NODE_EXTRA_CA_CERTS=/path/to/ca.pem` to your organisation's root CA. If the tunnel keeps failing to connect for 60 seconds, the command exits **10**, and an owned run is cancelled and refunded.\n\nOn an owned tunnel, Ctrl-C or a timeout cancels unfinished runs by default, and a run cancelled before it finishes is refunded. A run on a borrowed `--tunnel-client` detaches on Ctrl-C instead. Local projects skip plan generation, so write plans with `test create --plan-from`. Portal runs stay blocked, at no charge, until the project has a public URL. See [the local-testing reference](./DOCUMENTATION.md#local-frontend-testing-and-tunnels) for the details.\n\n## Commands\n\n| Group          | Command                                                                     | What it does                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| -------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Setup**      | `setup`                                                                     | **Start here** — one command: configure your API key, verify it, and install the agent verification skill                                                                                                                                                                                                                                                                                                                                     |\n|                | `doctor`                                                                    | Environment diagnostic — CLI/Node versions, profile, endpoint, credentials, connectivity, agent skill; exits non-zero on failure                                                                                                                                                                                                                                                                                                              |\n|                | `completion`                                                                | Print a shell completion script (bash, zsh, fish)                                                                                                                                                                                                                                                                                                                                                                                             |\n| **Auth**       | `auth status`                                                               | Resolve the active profile to its user, key, env, and scopes                                                                                                                                                                                                                                                                                                                                                                                  |\n|                | `auth remove`                                                               | Remove the active profile from the credentials file                                                                                                                                                                                                                                                                                                                                                                                           |\n|                | `usage` (alias `credits`)                                                   | Account pre-flight: identity, plus credit balance / plan info when the backend supplies them                                                                                                                                                                                                                                                                                                                                                  |\n| **Read**       | `project list` / `project get`                                              | List projects / fetch one by id, including the default environment and environment count when the server reports them                                                                                                                                                                                                                                                                                                                         |\n|                | `test list` / `test get`                                                    | List tests under a project / fetch one by id; `test list --env <name>` selects frontend status and the ENV column names its source                                                                                                                                                                                                                                                                                                            |\n|                | `test code get`                                                             | Print (or write) the generated test source                                                                                                                                                                                                                                                                                                                                                                                                    |\n|                | `test steps`                                                                | List the latest run's steps with screenshot / DOM pointers                                                                                                                                                                                                                                                                                                                                                                                    |\n|                | `test result`                                                               | Latest result; `--history` lists a test's prior runs (ENV column; `--env <name>` filters by environment)                                                                                                                                                                                                                                                                                                                                      |\n|                | `test failure get`                                                          | The agent entry point: one self-contained latest-failure bundle                                                                                                                                                                                                                                                                                                                                                                               |\n|                | `test failure summary`                                                      | One-screen triage card (no media download)                                                                                                                                                                                                                                                                                                                                                                                                    |\n|                | `test diff`                                                                 | Compare two runs — verdict, failure kind, per-step status flips, code-version drift                                                                                                                                                                                                                                                                                                                                                           |\n|                | `test open`                                                                 | Open a test in the dashboard (`--no-browser` prints the URL only)                                                                                                                                                                                                                                                                                                                                                                             |\n| **Write**      | `test scaffold` / `test lint`                                               | Author plans locally: emit a schema-correct starter, validate plan files offline — no network, no credentials                                                                                                                                                                                                                                                                                                                                 |\n|                | `test create` / `test create-batch`                                         | Create a test (or bulk-create from a plan file); `--step-timeout <ms>` sets a per-test timeout; dependency flags wire BE metadata                                                                                                                                                                                                                                                                                                             |\n|                | `test update` / `test delete` / `test delete-batch`                         | Edit metadata, set/clear the step timeout (`--step-timeout` / `--clear-step-timeout`), or permanently delete (`--confirm` required)                                                                                                                                                                                                                                                                                                           |\n|                | `test code put`                                                             | Replace generated code (etag-guarded)                                                                                                                                                                                                                                                                                                                                                                                                         |\n|                | `test plan put`                                                             | Replace a frontend test's plan-steps                                                                                                                                                                                                                                                                                                                                                                                                          |\n|                | `project create` / `project update` / `project delete`                      | Manage projects; `--test-id-attributes <list>` registers the app's own test-hook attributes (priority order) for exported locators, `--clear-test-id-attributes` reverts; `delete` removes a project and everything under it (`--confirm` required, no restore window)                                                                                                                                                                        |\n|                | `project credential` / `project auto-auth`                                  | Configure backend-test auth: a static injected credential, or auto-refresh login (Pro)                                                                                                                                                                                                                                                                                                                                                        |\n|                | `project env list` / `get` / `create` / `update` / `delete` / `set-default` | Manage a project's named URL + login bundles. `get` shows safe login details and variables; `create` / `update` accept repeatable `--var KEY=VALUE` (plain text — not for secrets, use `--username`/`--password`), and `update --clear-credentials` disables account login. Use `--url http://localhost:<port>` or `--local <port>` for an app on this machine; runs open its tunnel automatically. `delete` refuses the default environment. |\n|                | `project sign-in get` / `set`                                               | Inspect or change an environment's app sign-in mode; choose OTP with `project env create --sign-in otp`. SSO selection requires the per-account manual-login feature flag; capture the session in the Portal.                                                                                                                                                                                                                                 |\n| **Generate**   | `test plan generate`                                                        | Ask TestSprite to propose test cases for a project — proposals are staged server-side for review, never written to disk; only the stages the project is missing actually run                                                                                                                                                                                                                                                                  |\n|                | `test plan accept`                                                          | Turn staged proposals into real tests — all of them, or a subset with `--only`                                                                                                                                                                                                                                                                                                                                                                |\n|                | `project docs upload`                                                       | Upload an API spec or PRD as a project source, so generation has something to read                                                                                                                                                                                                                                                                                                                                                            |\n| **Run**        | `test run`                                                                  | Trigger a fresh run; saved loopback environments open a tunnel and wait automatically; `--wait` blocks until terminal; several ids or `--all --project <id>` run a batch in wave order (`--status`/`--filter` narrow `--all`; `--skip-dependencies` for backend); `--env <name>` runs against a named environment.                                                                                                                            |\n|                | `test rerun`                                                                | **Deprecated** — use `test run` (same flags; several ids and `--all --status` are supported there). Removed in 0.17.0.                                                                                                                                                                                                                                                                                                                        |\n|                | `test flaky`                                                                | **Deprecated** — no replacement; run `test run <id>` again to sample a test. Removed in 0.17.0.                                                                                                                                                                                                                                                                                                                                               |\n|                | `test wait`                                                                 | Block on one or more `runId`s until terminal                                                                                                                                                                                                                                                                                                                                                                                                  |\n|                | `test cancel`                                                               | Cancel one or more in-flight runs (Ctrl-C during `--wait` only detaches, `cancel` is the real stop — except a run with an owned tunnel, which Ctrl-C cancels by default)                                                                                                                                                                                                                                                                      |\n|                | `test artifact get`                                                         | Download the failure bundle for a specific `runId`                                                                                                                                                                                                                                                                                                                                                                                            |\n| **Test lists** | `testlist list` / `testlist get`                                            | Inspect saved test lists — named, cross-project collections with per-project environment pins (V3-only)                                                                                                                                                                                                                                                                                                                                       |\n|                | `testlist create` / `update` / `add` / `remove` / `delete`                  | Manage a list and its cases; `--project-env <id>:<env>` pins environments; `delete` requires `--confirm`                                                                                                                                                                                                                                                                                                                                      |\n|                | `testlist run`                                                              | Run every case (or a `--case` subset) through its pinned environment; loopback environments open a tunnel automatically; `--wait` polls all runs, `--report junit` writes a CI sidecar                                                                                                                                                                                                                                                        |\n| **Schedule**   | `schedule list` / `schedule get`                                            | List schedules visible to the key / fetch one by id, including a project schedule's pinned or inherited environment (status is `ENABLED`, `PAUSED`, or `AUTO_PAUSED` after repeated failures)                                                                                                                                                                                                                                                 |\n|                | `schedule create`                                                           | Run a project or test list on a 5-field cron; `--env <name>` pins a project schedule, while omission inherits the live default; states frequency and estimated cost                                                                                                                                                                                                                                                                           |\n|                | `schedule update`                                                           | Retime or rename a schedule, change recipients, pin a project schedule with `--env <name>`, or `--pause` / `--resume` it                                                                                                                                                                                                                                                                                                                      |\n|                | `schedule delete`                                                           | Remove a schedule and its run history, stopping future triggers (`--confirm` required, no restore window)                                                                                                                                                                                                                                                                                                                                     |\n|                | `schedule run list`                                                         | A schedule's past runs, with per-run pass / fail / blocked counts                                                                                                                                                                                                                                                                                                                                                                             |\n| **CI**         | `ci init github`                                                            | Write a GitHub Actions PR gate that runs `ci run` against each pull request's preview deployment — one placeholder step to fill in: your platform deploys every PR (`on: deployment_status`) or the workflow deploys                                                                                                                                                                                                                          |\n|                | `ci run`                                                                    | The CI gate in one command: every project test (or `--filter`) against `--target-url`, signed in as `--env`, in a temporary `github-pr-<N>` environment, one execution; waits and exits with the verdict. Job summary = the execution report (the GitHub App comment); `--summary-file`, `--report junit`, step outputs                                                                                                                       |\n| **Agent**      | `agent install` / `agent list` / `agent status`                             | Add, list, or health-check coding-agent skills (pure-local): `claude`, `codex`, `cursor`, `cline`, `antigravity`, `kiro`, `windsurf`, `copilot`                                                                                                                                                                                                                                                                                               |\n| **CI**         | `ci init github`                                                            | Write a GitHub Actions workflow that runs your tests                                                                                                                                                                                                                                                                                                                                                                                          |\n|                | `ci doctor`                                                                 | Check that deployment events reach this repo                                                                                                                                                                                                                                                                                                                                                                                                  |\n|                | `ci connect`                                                                | Link your deploy platform (Vercel) to this repo                                                                                                                                                                                                                                                                                                                                                                                               |\n| **Tunnel**     | `tunnel start` / `list` / `status` / `stop`                                 | Hold one tunnel open for several `--local` runs; list, check, or stop tunnels                                                                                                                                                                                                                                                                                                                                                                 |\n\n> The earlier command names — `init`, `auth configure`, `auth whoami`, `auth logout` — still work as hidden, deprecated aliases (each prints a one-line notice pointing at the new name), so existing scripts keep running. `auth configure` now runs the full `setup` (it also installs the skill).\n\n📚 **Full reference — every command, flag, and example:** [DOCUMENTATION.md](./DOCUMENTATION.md), including [configuration & profiles](./DOCUMENTATION.md#configuration), [scripting](./DOCUMENTATION.md#output--scripting), and [exit codes](./DOCUMENTATION.md#exit-codes).\n\nExit codes: `0` success, `1` failure (including a run that did not pass), `7` timeout, `12` insufficient credits, `13` feature gated, `14` CLI too old; the rest are in [DOCUMENTATION.md](./DOCUMENTATION.md#exit-codes).\n\n## Why a CLI for coding agents?\n\n- 🧪 **Tests like a real user.** Runs against a live browser or API in the cloud — real clicks, real navigation, real assertions. Not a mock.\n- 🤖 **Agent-shaped output.** `test failure get` returns **one bundle** — the failing step, its neighbors, screenshots, DOM snapshots, the test source, a root-cause hypothesis, and a recommended fix target — all sharing a single `snapshotId`. The CLI _refuses_ to stitch data from two different runs, so an agent never reasons over a frankenstein context.\n- ♻️ **A loop, not a one-shot.** `create → run → failure get → fix → run` — every pass is banked, not thrown away.\n- 📐 **Scriptable & deterministic.** Stable `--output json` contract, predictable [exit codes](./DOCUMENTATION.md#exit-codes), and a `--dry-run` that exercises the full code path offline with canned data.\n- 🚦 **CI-native.** `testsprite ci init github` writes a PR gate; `testsprite ci run --env <name> --target-url \"$PREVIEW_URL\"` tests each pull request's preview deployment as one execution and exits with the verdict. The job summary is the execution report — the same content as the GitHub App's PR comment — plus `::error::` annotations on the checks tab, step outputs, `--summary-file` for a machine summary and `--report junit` for a JUnit sidecar. In any other CI, `testsprite ci run --project <id> --env <name> --target-url <url>` still runs the suite as one execution and makes the exit code the verdict — the pull-request context, draft skip and job summary are GitHub Actions only. [Details →](./DOCUMENTATION.md#continuous-integration)\n- 🔌 **One command to onboard your agent.** `testsprite setup` drops ready-made skill files into your repo — for the agents it detects you using — so your coding agent knows how to drive the loop on its own.\n\n## How it works\n\nEvery time your agent changes code, it asks one question: **is this behavior already covered by the suite?**\n\n- **Not yet covered** → `testsprite test create` — describe the new behavior, run it.\n- **Already covered** → `testsprite test run --all` — run the existing tests, so nothing that used to work breaks silently.\n- **Something fails** → `testsprite test failure get` — one self-consistent bundle; the agent fixes the code and runs again.\n\nEvery pass is banked into a durable suite, so coverage compounds as the project grows — a lasting record of every requirement it has ever gotten right, far bigger than any context window.\n\n```mermaid\nflowchart TD\n    A[\"🤖 Your coding agent<br/>Claude Code · Codex · Antigravity · Kimi · Cursor · Trae …\"]\n    D{\"behavior already<br/>covered by the suite?\"}\n    B[\"<b>testsprite test create</b><br/>new behavior → new test\"]\n    R[\"<b>testsprite test run --all</b><br/>run the existing tests\"]\n    C{{\"☁️ TestSprite testing agent<br/>runs the test like a real user against<br/>real browsers & real APIs on Cloud\"}}\n    F[\"<b>testsprite test failure get</b><br/>ONE self-consistent bundle:<br/>failing step · screenshots · DOM ·<br/>root-cause · recommended fix\"]\n    S[(\"📚 Durable integration suite<br/>grows with every pass\")]\n\n    A -->|\"writes / changes code\"| D\n    D -->|\"no — new behavior\"| B\n    D -->|\"yes\"| R\n    B --> C\n    R --> C\n    C -->|\"pass ✅\"| S\n    C -->|\"fail ❌\"| F\n    F -->|\"agent reads the bundle<br/>& fixes the code\"| A\n    S -.->|\"defines what's covered\"| D\n```\n\nThe cloud is a black box on purpose: your agent describes intent and reads results. It never has to know _how_ the test was driven — only _what_ a real user experienced.\n\n## Proved in public\n\nOn [**CoderCup**](https://codercup.ai) — an open leaderboard where frontier coding agents build the _same_ app under the _same_ rules, with TestSprite as the referee — the **cheapest** model in the field shipped the **most correct** app on the board: **89%**, at half the cost of the priciest one.\n\nThat's the point of all of this: you no longer need the biggest, most expensive model to ship software you can trust — top-tier quality, without paying top-tier prices, within reach of every team.\n\n## Getting help\n\n- 📚 **CLI reference** — [DOCUMENTATION.md](./DOCUMENTATION.md)\n- 🌐 **Platform docs** — [docs.testsprite.com](https://docs.testsprite.com)\n- 🐛 **Issues & feature requests** — [GitHub issues](https://github.com/TestSprite/testsprite-cli/issues)\n- 💬 **Quick questions** — [Discord](https://discord.gg/GXWFjCe4an), or `testsprite --help` / `testsprite test run --help` right in your terminal\n- 📝 **Changelog** — [CHANGELOG.md](./CHANGELOG.md)\n\n## Contributing\n\nContributions are welcome — the CLI is plain TypeScript/Node (20.19+, 22.13+, or 24+), tested with Vitest, built with `tsc`. Getting a dev loop running takes a minute:\n\n```bash\ngit clone https://github.com/TestSprite/testsprite-cli.git\ncd testsprite-cli && npm install\nnpm run build       # tsc → dist/ ; try it: node dist/index.js --help\nnpm test            # unit suite — no network or credentials needed\nnpm run lint:fix    # ESLint\nnpm run typecheck   # tsc --noEmit\n```\n\nPull requests target the `main` branch. The full guide — build from source, test tiers, CI checks, branches, project layout — is in [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n**Support** — if you need any help, we're responsive on [Discord](https://discord.gg/GXWFjCe4an), and feel free to email us at [contact@testsprite.com](mailto:contact@testsprite.com) too.\n\n## License\n\n[Apache-2.0](./LICENSE) © TestSprite\n","readmeFilename":"README.md"}