{"_id":"@beoks/belay","_rev":"5-c3083d487aef05c4c822a6572ffe69b8","name":"@beoks/belay","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"@beoks/belay","version":"0.1.0","keywords":["testing","e2e","bdd","gherkin","black-box","scenario","harness","agent","llm"],"license":"MIT","_id":"@beoks/belay@0.1.0","maintainers":[{"name":"beoks","email":"lee01042000@gmail.com"}],"homepage":"https://beoks.github.io/Belay/","bugs":{"url":"https://github.com/BEOKS/Belay/issues"},"bin":{"belay":"dist/cli.js"},"dist":{"shasum":"7662d0935146bd1b86dfbd662d49a7bbd8a85a4b","tarball":"https://registry.npmjs.org/@beoks/belay/-/belay-0.1.0.tgz","fileCount":171,"integrity":"sha512-nw2hb3Hl8hUi/pGmJgXjeL60WcJD6J9oupDWLUI1xhFTXTWrf7YPBv566OsylU4yhzlAI+ReknaWpw1KqQSQJw==","signatures":[{"sig":"MEUCIGK/whIaYrWygpgkPohN3DM72ZHGk3WtffKy1E/78yPOAiEA/taJ7kOGQRQl+99JvUHoCckMuVALnM+u+83JX4J1JSA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":690359},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","import":"./dist/runtime/index.js"}},"gitHead":"100f2ac84b6fb56f0492488d2ae4ab2072ad6404","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"node --test \"test/**/*.test.js\"","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"beoks","email":"lee01042000@gmail.com"},"repository":{"url":"git+https://github.com/BEOKS/Belay.git","type":"git","directory":"packages/belay"},"_npmVersion":"11.12.1","description":"Black-box scenario test harness — executable specs that survive rewrites. Zero dependencies.","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"peerDependencies":{"pngjs":">=7","pixelmatch":">=6","playwright":">=1.40"},"peerDependenciesMeta":{"pngjs":{"optional":true},"pixelmatch":{"optional":true},"playwright":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/belay_0.1.0_1785387875881_0.9050327076025124","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@beoks/belay","version":"0.1.1","keywords":["testing","e2e","bdd","gherkin","black-box","scenario","harness","agent","llm"],"license":"MIT","_id":"@beoks/belay@0.1.1","maintainers":[{"name":"beoks","email":"lee01042000@gmail.com"}],"homepage":"https://beoks.github.io/Belay/","bugs":{"url":"https://github.com/BEOKS/Belay/issues"},"bin":{"belay":"dist/cli.js"},"dist":{"shasum":"86a17497b381eeca7e93766900f2229ba54778bf","tarball":"https://registry.npmjs.org/@beoks/belay/-/belay-0.1.1.tgz","fileCount":171,"integrity":"sha512-5PIkd2zV8O8JGS7LzwPPiKLlIYNNoCgTkGfIQke2neGFacgf8ZOwcmzqPNOh78ALEAn5Lv1I9do8tUS6dlqz/g==","signatures":[{"sig":"MEQCIHAGf/MDAZJKm2RVTalZpqzCcGXg19ae1X5u+N754PUqAiAtin5HYLK4UefISaCtPg2oklw+SDWk5OtGlqHcx/x2iA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beoks%2fbelay@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":690359},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","import":"./dist/runtime/index.js"}},"gitHead":"561c036139fce81fa0a86d1dae7ac0f9ff18bcf6","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"node --test \"test/**/*.test.js\"","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:627e013d-82a6-4ad6-83af-5e5cf3b974ea"}},"repository":{"url":"git+https://github.com/BEOKS/Belay.git","type":"git","directory":"packages/belay"},"_npmVersion":"12.0.2","description":"Black-box scenario test harness — executable specs that survive rewrites. Zero dependencies.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"peerDependencies":{"pngjs":">=7","pixelmatch":">=6","playwright":">=1.40"},"peerDependenciesMeta":{"pngjs":{"optional":true},"pixelmatch":{"optional":true},"playwright":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/belay_0.1.1_1785392741535_0.0911890246416438","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@beoks/belay","version":"0.1.2","keywords":["testing","e2e","bdd","gherkin","black-box","scenario","harness","agent","llm"],"license":"MIT","_id":"@beoks/belay@0.1.2","maintainers":[{"name":"beoks","email":"lee01042000@gmail.com"}],"homepage":"https://beoks.github.io/Belay/","bugs":{"url":"https://github.com/BEOKS/Belay/issues"},"bin":{"belay":"dist/cli.js"},"dist":{"shasum":"ad245e76a7dbaab59b93a6d597445cdfdaf40f4b","tarball":"https://registry.npmjs.org/@beoks/belay/-/belay-0.1.2.tgz","fileCount":171,"integrity":"sha512-bS6/Zx8Y3iCiqB/NUAVbZIAH03lQehbpSRkr14JFLc8lvcis6Bp8n5Iawpno1/TK5lZU27v/50bWSMMJXnYDLg==","signatures":[{"sig":"MEYCIQCYCDCfQWlL4tsbOj1WXo8AOqZDFlsKvXh8nskyTtGcAwIhAKQEmJiAaQTZX2lwIGQKnjAfQ9koU/YKcMmq2a5OU+J3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beoks%2fbelay@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":697074},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","import":"./dist/runtime/index.js"}},"gitHead":"5a2352e35c74531d817bceedc840dff9d8d8fe2a","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"node --test \"test/**/*.test.js\"","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:627e013d-82a6-4ad6-83af-5e5cf3b974ea"}},"repository":{"url":"git+https://github.com/BEOKS/Belay.git","type":"git","directory":"packages/belay"},"_npmVersion":"12.0.2","description":"Black-box scenario test harness — executable specs that survive rewrites. Zero dependencies.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"peerDependencies":{"pngjs":">=7","pixelmatch":">=6","playwright":">=1.40"},"peerDependenciesMeta":{"pngjs":{"optional":true},"pixelmatch":{"optional":true},"playwright":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/belay_0.1.2_1785393491465_0.383691439764158","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@beoks/belay","version":"0.1.3","keywords":["testing","e2e","bdd","gherkin","black-box","scenario","harness","agent","llm"],"license":"MIT","_id":"@beoks/belay@0.1.3","maintainers":[{"name":"beoks","email":"lee01042000@gmail.com"}],"homepage":"https://beoks.github.io/Belay/","bugs":{"url":"https://github.com/BEOKS/Belay/issues"},"bin":{"belay":"dist/cli.js"},"dist":{"shasum":"e09f9853fa5a5b1c19f1cb588fec27f9217e5441","tarball":"https://registry.npmjs.org/@beoks/belay/-/belay-0.1.3.tgz","fileCount":171,"integrity":"sha512-A6uEc0sUJV98IJkLBcwlwpcFfX6uyGscqo98ZfD+zrlYqL7mixMIH/bulBwwG3Mon3Bn3CM8UvS41u7aKkYLkg==","signatures":[{"sig":"MEQCIA+ouu3t6b1gMzWZjyE11MpKJuv/hI5Fea6/OVq6jGHnAiAU+sgq4D8qN94Bv1QaKZ3NVIlhtV/yEuO6/JT5TYR0pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beoks%2fbelay@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":743675},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","import":"./dist/runtime/index.js"}},"gitHead":"5b87fc781e9f999560d1b92b25f5c180b78b7d4a","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"node --test \"test/**/*.test.js\"","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:627e013d-82a6-4ad6-83af-5e5cf3b974ea"}},"repository":{"url":"git+https://github.com/BEOKS/Belay.git","type":"git","directory":"packages/belay"},"_npmVersion":"12.0.2","description":"Black-box scenario test harness — executable specs that survive rewrites. Zero dependencies.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"peerDependencies":{"pngjs":">=7","pixelmatch":">=6","playwright":">=1.40"},"peerDependenciesMeta":{"pngjs":{"optional":true},"pixelmatch":{"optional":true},"playwright":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/belay_0.1.3_1785422829030_0.2838883421050411","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@beoks/belay","version":"1.0.0","description":"Black-box scenario test harness — executable specs that survive rewrites. Zero dependencies.","keywords":["testing","e2e","bdd","gherkin","black-box","scenario","harness","agent","llm"],"license":"MIT","homepage":"https://beoks.github.io/Belay/","repository":{"type":"git","url":"git+https://github.com/BEOKS/Belay.git","directory":"packages/belay"},"bugs":{"url":"https://github.com/BEOKS/Belay/issues"},"type":"module","publishConfig":{"access":"public"},"engines":{"node":">=22"},"bin":{"belay":"dist/cli.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","import":"./dist/runtime/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsc -p tsconfig.json --watch","test":"node --test \"test/**/*.test.js\"","prepublishOnly":"npm run build"},"peerDependencies":{"kafkajs":">=2","pixelmatch":">=6","playwright":">=1.40","pngjs":">=7"},"peerDependenciesMeta":{"kafkajs":{"optional":true},"playwright":{"optional":true},"pixelmatch":{"optional":true},"pngjs":{"optional":true}},"devDependencies":{"@types/node":"^22.10.2","typescript":"^5.7.2"},"gitHead":"ec56e237b633c21c5e2b9814c60e42a276f80faa","_id":"@beoks/belay@1.0.0","_nodeVersion":"24.18.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-oXdvyLDjeEnYVTTpGiB8qS3LAzioBVJLT9cApl6mNlzKvCrLyphqvoq+/Sm6xA2ZnOQuE08O1cB6mR/ba/0+Nw==","shasum":"7c95d808e434b65fc5b944070acf2df673fa5264","tarball":"https://registry.npmjs.org/@beoks/belay/-/belay-1.0.0.tgz","fileCount":188,"unpackedSize":857269,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beoks%2fbelay@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCYXzhQseIm+S61eSPdBeGU3UFrLxoAFA1DU5XoWnFi9AIgTuAWWSmgotpRNvkSOdYEzogHsXRnvKDc0mSQZGZapZU="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:627e013d-82a6-4ad6-83af-5e5cf3b974ea"}},"directories":{},"maintainers":[{"name":"beoks","email":"lee01042000@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/belay_1.0.0_1785470598923_0.7039309971070826"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-30T05:04:35.650Z","modified":"2026-07-31T04:03:19.420Z","0.1.0":"2026-07-30T05:04:36.082Z","0.1.1":"2026-07-30T06:25:41.715Z","0.1.2":"2026-07-30T06:38:11.680Z","0.1.3":"2026-07-30T14:47:09.164Z","1.0.0":"2026-07-31T04:03:19.104Z"},"bugs":{"url":"https://github.com/BEOKS/Belay/issues"},"license":"MIT","homepage":"https://beoks.github.io/Belay/","keywords":["testing","e2e","bdd","gherkin","black-box","scenario","harness","agent","llm"],"repository":{"type":"git","url":"git+https://github.com/BEOKS/Belay.git","directory":"packages/belay"},"description":"Black-box scenario test harness — executable specs that survive rewrites. Zero dependencies.","maintainers":[{"name":"beoks","email":"lee01042000@gmail.com"}],"readme":"<h1 align=\"center\">Belay</h1>\n\n<p align=\"center\"><strong>Executable specs that survive rewrites.</strong></p>\n\n<p align=\"center\">\n  <a href=\"https://beoks.github.io/Belay/\">Documentation</a> ·\n  <a href=\"https://beoks.github.io/Belay/ko.html\">한국어 문서</a> ·\n  <a href=\"https://github.com/BEOKS/Belay\">GitHub</a>\n</p>\n\nBelay is a black-box scenario harness. Your project goes in `src/`. Your specs go in `test/`\nas Gherkin scenarios backed by TypeScript step definitions. One command boots the mock\ninfrastructure, starts your app, waits until it is genuinely ready, runs every scenario,\ncollects evidence, and tears everything down.\n\nThe specs never import your code. They only knock on the surfaces a user can reach — HTTP,\nGraphQL, WebSocket, gRPC, CLI, the browser. That single constraint is what makes them survive\na rewrite.\n\n## Install\n\n```bash\nnpm install -g @beoks/belay\nbelay init\nbelay run\n```\n\nOr per project:\n\n```bash\nnpm install -D @beoks/belay\nnpx belay init\n```\n\nRequires Node ≥ 22. Zero runtime dependencies.\n\n## Writing a step\n\n```ts\nimport { Given, Then, expect, World } from '@beoks/belay';\n\nGiven('the audit system answers {int}', function (this: World, status: number) {\n  this.mock.audit.onPost('/events').reply(status);   // the stub is ours; program it freely\n});\n\nThen('the status is {int}', function (this: World, status: number) {\n  expect(this.last.status).toBe(status);\n});\n```\n\n## Commands\n\n```bash\nbelay init                    # scaffold config + test skeleton (interactive)\nbelay init --from ../my-api   # adopt an existing project (--link symlink|submodule|move|copy)\nbelay analyze                 # inventory existing code into a scenario checklist\nbelay run                     # boot → run → collect → tear down\nbelay run --only L1           # one layer          (--upto L2 also works)\nbelay run --grep signup       # filter by name     (--tags \"@smoke\" too)\nbelay run --bail              # stop at first failure\nbelay run --watch             # re-run on change; the environment stays up\nbelay new L1-account/signup   # create a .feature and its steps together\nbelay approve cart-empty      # accept a visual baseline, after reviewing the diff\nbelay report --open           # open the latest HTML report\nbelay doctor                  # check ports, Docker, engines, config\nbelay down                    # clean up a kept environment\n```\n\n## Optional peers\n\nThe browser driver and visual gate need optional peers, installed only if you use them:\n\n```bash\nnpm i -D playwright pngjs pixelmatch && npx playwright install chromium\n```\n\nThe gRPC driver needs `@grpc/grpc-js` and `@grpc/proto-loader`.\n\n## Language\n\nScaffolding and Gherkin are English by default; set `BELAY_LANG=ko` for Korean.\n\n```bash\nbelay init                # English scaffolding and Gherkin\nBELAY_LANG=ko belay init  # Korean scaffolding and Gherkin\n```\n\nThe [full design document](https://beoks.github.io/Belay/) covers the layer model, the driver\nsurfaces, the mock infrastructure and the agent workflow.\n\nMIT © BEOKS\n","readmeFilename":"README.md"}