{"_id":"stealthql","_rev":"38-d74ef475e5707dd985f9884a1c2aabb3","name":"stealthql","dist-tags":{"latest":"0.2.15"},"versions":{"0.1.0":{"name":"stealthql","version":"0.1.0","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.0","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"d6692d36f45605a62aafaa75e3b40dc853144b16","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.0.tgz","fileCount":43,"integrity":"sha512-whJTKjX8UcWrHl+OWPOJaIpXte0gsZmLkIVBIkx2BGwvyad5YpGTYNJhwiVblmq7hkVM25719Q1jONO9iHHRCQ==","signatures":[{"sig":"MEQCIBnf2aS1x+lvhf+tuKMDx2gdOFma5GMGW+aodK9PO9/nAiA6szKohisrhe7d7+cbHJP+ZwGfYNMKWwbY5fwHYGHgiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":515429},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"7eac23a09d8b8c64b4994d5f6e57ac57ba918176","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.0_1777445161807_0.9017887866020302","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"stealthql","version":"0.1.1","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.1","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"b3bcb26970f1b7fcf3e75c4b5685255c646dce12","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.1.tgz","fileCount":43,"integrity":"sha512-chRFNLbrLsjyuO6ncTJjfPP4vl7wCNli5RiW/tywCkdD5BfblOXsv4OKJq9ynmGsVkZCd2gjRgkZ0kt9Z9rxHQ==","signatures":[{"sig":"MEQCIDArZYnvfJ08RkKjJO6tEqSF4tNuklWXbzOmE/8NRERnAiBlRI7rmvNjFu0nH3iGxG1Jk/08m3QuB/ykqv5U5ZmaJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":522189},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"7eac23a09d8b8c64b4994d5f6e57ac57ba918176","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.1_1777447946752_0.14979600458224618","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"stealthql","version":"0.1.2","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.2","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"6381fd35a28e8daeb6afb69fbf2f073507cfaf5c","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.2.tgz","fileCount":43,"integrity":"sha512-T6hllsU/oThSNI2fsyVEJpqJ6JiqTGP3ZTYLBPcVOVm8s2ZORmKyFJ4HFLyFb3zbPdhGZiKIiY8kpd9SUGwT+Q==","signatures":[{"sig":"MEUCIQCfg9k1EJQFCnRzecnaQVLgwUIRyxIP1DpMHKBPJA7ttwIgFZfY79TzrymH/zXbY9xJ9lrAEwcxxaT3IGZu4ARpQ3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":528893},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"f28d08a6c42c2cd494c4b0e1a871ff6389b1914d","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.2_1777451506909_0.12913127744293784","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"stealthql","version":"0.1.3","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.3","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"c65dd184243f9fcabcb0fa90a0bf10eab78ff2ec","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.3.tgz","fileCount":45,"integrity":"sha512-1nRbgJMnMjg4wYBBlVFQgrkcOs+l+U0NkUG/xhqfqaeABzthzd3THfRNdvcrizX9MfNj1Ny2zH5n4FcueCEB8g==","signatures":[{"sig":"MEUCIElqFPMFlG58W2kbmi+/GNSkq1stK2PXMdzSXlxzKVhoAiEAv7mcLoG6hA7rK4JRygXJzw4qrHb8iosbIYh/B4jWX9I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":552726},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"f28d08a6c42c2cd494c4b0e1a871ff6389b1914d","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.3_1777452956801_0.20784411088688937","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"stealthql","version":"0.1.4","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.4","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"104d7534d456e9502c6c88dd367a83289c20af51","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.4.tgz","fileCount":45,"integrity":"sha512-umULUZxFH88D50h1qas1nB3H/6ITeueD8TeXybDHKLr6/yabWIKzbm+jepbKNFavsful/uJOifCfjncumG3fhw==","signatures":[{"sig":"MEYCIQDXO2nS1Ymlfe0vyz4gqZJu0M63hUHg8VbfSfQ5AYrIPAIhAIOgI3EVvnOg6tFs0+WUb1stH05Z7fYeQKgtN5xT/cgZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":552760},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"f28d08a6c42c2cd494c4b0e1a871ff6389b1914d","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.4_1777453148480_0.6193567359077354","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"stealthql","version":"0.1.5","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.5","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"831a80fd0dafeb20d16da599174cdaf43f984168","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.5.tgz","fileCount":45,"integrity":"sha512-79ll76omw/doXvQTqxhD/A7aG1FUeb3fdQ5zFUsLDKvOKJvad3Wbq4Nx5kVfhkeh9QmPkZcX8bLip3D3hZdSeg==","signatures":[{"sig":"MEQCIGKnPtxok3cvL/PvAcq77OB2CCrXY/ts0WdzRYlzTUwgAiAt0T8guMLc3ErJ9FGcVQvRXuDmQVM7C8OLQx4pDe+i1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":557140},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"f28d08a6c42c2cd494c4b0e1a871ff6389b1914d","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.5_1777481246299_0.07186681360680236","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"stealthql","version":"0.1.6","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.6","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"931073a363fafff957e6b46f618baf99d00ea968","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.6.tgz","fileCount":45,"integrity":"sha512-I90/N1YP3eEcfX6YxtY3RnWFB15c8fB+ZB4mYNEK2dInVQQ3U4bLnX0Qbbb6eDF+4RgiqMpaK8pyaXBoJf+fmg==","signatures":[{"sig":"MEYCIQDdKh+qbSKHOpFWK/ETafyZZvRb+qHU+Fy7yAhyova1nAIhAPDgHgZiH2Tc/LNQ3PyQ8TUV+4rxDwqR08k/fRJQ8gbO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":570368},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"f28d08a6c42c2cd494c4b0e1a871ff6389b1914d","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.6_1777483510071_0.6040373049029613","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"stealthql","version":"0.1.7","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.7","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"1b637a402ea878b023668a3766d911b351030b09","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.7.tgz","fileCount":45,"integrity":"sha512-dCNTiemfc5nUrl4CXolZC50ED62jg5RKmv6MRhbxG4lGy32TLZvfsQgfSfsOnXXhTaQn1bxsqgdr0mpRoQBoSw==","signatures":[{"sig":"MEUCIQCHLCt/1Ad62woWXDAqtZUz5/qWgdJoMETglLMs2Rsg6wIgIc14GPpLLeEwkPHJLuQyzuDuspGpjyOqSe8FizTTnA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":576758},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"f28d08a6c42c2cd494c4b0e1a871ff6389b1914d","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.7_1777485365830_0.5099313142938091","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"stealthql","version":"0.1.8","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.8","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"abece05a9c47f4d35923221c7221d06640b5fe12","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.8.tgz","fileCount":45,"integrity":"sha512-FQa1+UMjsycG53cuVKqNxH6AdLLYXWLfRNgigcwwWJbV+4jTqz4Wlp0yreGf0W+nROrGW9xUK05pkZceW/ucBw==","signatures":[{"sig":"MEUCIQCC7bTEourCibfAJ5GIaTTR3MVyy171leGhj7Qri5yIRAIgCpQ/SaAzrDIgYCI4VwwjBzyqEIoRKevBRvsbN2bwwLU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":582468},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"f28d08a6c42c2cd494c4b0e1a871ff6389b1914d","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.8_1777485867982_0.969656991116097","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"stealthql","version":"0.1.9","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.9","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"312f3dcddfeaeaf5805be259a3eac79a5ef48d77","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.9.tgz","fileCount":47,"integrity":"sha512-b0y80MawQbwEst3wRSww0XUuPE1EFHLZbgPeTs09Apsw5KxtKouv4Rm/UsP/pp5ROnGSLP1uP85qnFKTDcwvYw==","signatures":[{"sig":"MEQCIGyUbo9/RSlQQOtVe38aoKxs6BCrn9x4yDonAxVWbfWDAiAd3RALG/bZQCyhO5cOtWxTZe8Cr6yfPvoVkTgQUtNSrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":601566},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.9_1777486267556_0.19211535093866994","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"stealthql","version":"0.1.10","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.10","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"7f799a7d2e51431d14ae47de133bdc995f178906","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.10.tgz","fileCount":47,"integrity":"sha512-D7UHNHI+KJgMVgVo+Zn0V9i0tCA7Hw9qIKR8Yfsx05wz2TlV8fXF9X4jwUR6QarUE5ncRvsJFoXUVXU3HhaKmQ==","signatures":[{"sig":"MEYCIQD7TIGsHBEzZ/xxKbf8uYjO4UWU2/ZU0Y/XsmW+9FoUGgIhAI8EJAco53UzlMmCDFr5C6LxXJ2+UFbebQGx2jJZ997d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":606643},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./next":"./src/next.js"},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.10_1777489543852_0.20250595034828245","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"stealthql","version":"0.1.11","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.11","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"d51b4e1678430c3b4a2af7c6724d13735a935521","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.11.tgz","fileCount":49,"integrity":"sha512-1RICzTDZAY4BeoRGE2zxLmzSNDvOZ6Eyb8bC1bHVNLKfTc3nZYZwhppjZt2UIWp+IeXhci/lnyD26dRHOS/XbQ==","signatures":[{"sig":"MEUCIASRw8JcKM202cBk9UX2M4jlm0d+T+q92JYGxN1hb+SrAiEArOgAbLsM9dPODoSfwuZbmrCyJhk8JizOaWSSpod5swc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":618814},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.11_1777491539838_0.8660244119359402","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"stealthql","version":"0.1.12","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.12","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"46e72f845cb7b76073f0d3915215b81ff10ce600","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.12.tgz","fileCount":57,"integrity":"sha512-ypK3Pu277da2U7B0KlGnVhKT9obE82T6leiOuHEmEF6pr3HkgOY0TcdRw4BXxlbEjN6QUJvwbdALB5yEK3WdRA==","signatures":[{"sig":"MEQCIEF8qS2VR4BJEPdUpT9jOoVoTKIQdS6iZusjfzaQ1uz3AiAuZMnRQ33l41pkZxRuAyu3SfzVHXUl2dmetdI21uSxOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":628903},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.12_1777491998620_0.22797510257191966","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"stealthql","version":"0.1.13","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.13","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"cecbabaf99ceef152427972c1d1876641c3526fb","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.13.tgz","fileCount":57,"integrity":"sha512-NBjU6JtthdGuHXMa86fUnkJk+VaeS0jjMbgfAs0oqbRwQf+6ej2kf3vpVHh+tEifURVI2L6RSI1/osbF4xWeww==","signatures":[{"sig":"MEUCIQDLemxcCbFSk8eZxORMIaaTfW1DmAa92CuvdN1BgKUMXgIgJ4ZAvIUpdysUx5zZrt/ATNEKBMOQqOwt7cPk56MeSO4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":641849},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.13_1777493204129_0.8227314344624206","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"stealthql","version":"0.1.14","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.14","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"b0b5f30efc62337df5f04a9f81df326be06d2692","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.14.tgz","fileCount":57,"integrity":"sha512-V/azJpNVsu7px88XptBk6uW17jgAomQurvHgonqVvG6QydsG3Pws1fnOYbUQsj8BFVt4U6ktWZZGg5RA/Zem2A==","signatures":[{"sig":"MEYCIQDsoWrkLSXEFsPTnb++tJF/p+v9KlLc/YYy68SMWZ3v8gIhAKgckfTOzY6RvroFlEtHNUlhqnW8S3B48MkmlwAwNgIK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":661763},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.14_1777495019310_0.11488914464474842","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"stealthql","version":"0.1.15","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.15","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"8fab1f9c5b60344453c9b95982bbc0d71c74fbcd","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.15.tgz","fileCount":57,"integrity":"sha512-sGMHl4pIfvXyyee2Lbh+4oFpTnmMKIr7JWkGsV5LWH4t20DawdvKUmXbEZCcltAm2krXLlwQ8AuiK6TABSxSYQ==","signatures":[{"sig":"MEUCIQCDewIStr4gByVydbK2zeo8kcE+CdJRt+/VfX2T6Pl82gIgRmk2roygiKLXJSmAOPg/k7o1WMphplm3eRm7i5zC/To=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":686743},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.15_1777497408443_0.8692845308182684","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"stealthql","version":"0.1.16","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm"],"license":"Apache-2.0","_id":"stealthql@0.1.16","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"ab0e83dc0803734a69c8a454ae2861d07c04dda7","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.16.tgz","fileCount":57,"integrity":"sha512-LpGJyCYXgNSolOt1PVxkut0y/Yck/pL6QXAi7kuCEX5Ksxv3vUJMEhM/Ln7SkxilDePnQiVhEf5k96G9dbh4Tw==","signatures":[{"sig":"MEQCIApFWylaMUinS0VR7hHRyhxd3DFCuVhraN4WPVkylLr1AiAE0oOCbCK89AZsILL4JnVG9vPgBCviFtliQJWd10zk6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":694810},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule compiler and local sovereignty runtime.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.16_1777503161916_0.49016005774744875","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"stealthql","version":"0.1.17","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"license":"Apache-2.0","_id":"stealthql@0.1.17","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"940d7acb348fb3a41a812aa3b7e93f04fb1a0796","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.17.tgz","fileCount":62,"integrity":"sha512-wLgQT/6y335o5LUTTaMFkQ7GjLaI66KLxZhYK8sIXDxrTCbjX4Pwu19hnfX4p9gvhqiCtbebEgmzKu68WfI4EQ==","signatures":[{"sig":"MEUCIQDxGyaxrpemEOgGllXWUzJabsZwid8mVlINWNGrATf8IgIgdkHbyJS+7Y8QqMNgx/ECEKiEJTQB4jOiMSNzJXhEJi0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":765628},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.17_1777510343488_0.5363916125448012","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"stealthql","version":"0.1.18","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"license":"Apache-2.0","_id":"stealthql@0.1.18","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"c5fa1f16e784295e77947ad4c0e7d15fb21e9693","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.18.tgz","fileCount":62,"integrity":"sha512-TPCBOZvTRkgnzHfUF/YnDVf6tWWrqw1ZyulZJz4I8U28GCOx7Sv9f3R0MK0WvYR4da65ccXTaJErKLfpk00zVw==","signatures":[{"sig":"MEUCIQCUwVz89HaS0trnKI6mPalsR/qg+TAZTj98RXMoqoNIEgIgF0//x2IgA/xmvISdGYCNTIqT+tjk55mViZHpLuafNOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":774644},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.18_1777511068984_0.8242601504362461","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"stealthql","version":"0.1.19","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"license":"Apache-2.0","_id":"stealthql@0.1.19","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"d3b9cd1beeac9cda6f7a0a2e010352172846a596","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.1.19.tgz","fileCount":62,"integrity":"sha512-bKEXZ80bg7O3JVSgKzHbrQuqCPU7Fl724s1lmWYs4QYn/gCJ99CMpwon40DwSNpZEER+JT/kay2T54W9BX4G8A==","signatures":[{"sig":"MEQCIBN0mDS5dTqzMWHJ67HdMxglQuFpLp4Vt1dLCo8+/qcjAiAFyd26wu6UwQWyDAOVlE69IdewVqq6lGrHRz3DAljMgA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":779245},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"5c82d514be4cb22476191fe91de99c83ab6641c9","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.1.19_1777512434743_0.6369659793376428","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"stealthql","version":"0.2.0","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"license":"Apache-2.0","_id":"stealthql@0.2.0","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"cd24fa49e1b9a7fa4ab86bee13ed577f7425be6d","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.0.tgz","fileCount":63,"integrity":"sha512-j6gRX6JSl2Cx0ov6kiAe5kWSbSZZPYVJzM6pjKmIZ5CWWfBtX+Ayh8q1ZLyhZ+X6dy05MfxNC33M72QcKVVN1Q==","signatures":[{"sig":"MEYCIQCSsdqoAWwmVfySyuSUy3RUMJmnkNGHAr4Kw/f038hERwIhAOvgAXNiaEo6qHLB8K5heMfCTw/GydA7nhqy10m36wKp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":836827},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"cb768aebad784a5fe1fcfac703b0caf2abe4bb9f","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.0_1777520601046_0.24893919408888965","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"stealthql","version":"0.2.1","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"license":"Apache-2.0","_id":"stealthql@0.2.1","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"0ddcdb4b0100c854d183386ec84cc7d7593dc5af","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.1.tgz","fileCount":65,"integrity":"sha512-BEJqXFaLL2W04adOy7WPOeX+y9tNAchgdkipieSa5FQ4GT2oucaKxJTdIOi44DmTC+qw3pVp/jmdeMqZkAlK9Q==","signatures":[{"sig":"MEUCIQCjgUP+XH5qrME2mHQxorBs4FEMX3D5TLlR07YswO1WmgIgaY84ser332koxRItJgYA5nJwX6PN7SYCUYT9n7T/qkM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1026473},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"cb768aebad784a5fe1fcfac703b0caf2abe4bb9f","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.1_1777542291515_0.37294430766763487","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"stealthql","version":"0.2.2","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"license":"Apache-2.0","_id":"stealthql@0.2.2","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"78903a4f8e699b0f71f077a7d5d29efaebadcfd9","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.2.tgz","fileCount":65,"integrity":"sha512-e6NVDf5ViVh9DRskMu4NeSMxYhCA6kXeSgBHqD6lsQsaqzDm/PlTW9nNaZnMTwqE8D7+3ctd2XhU9FT3HU7bWw==","signatures":[{"sig":"MEQCIHReijQ3x6K3nq2k1JLmspa2QUXs7rCO8dddjV869c0VAiAJKhvtx53SHUwjwWpwbLFmL6PQNjUq0xREMX4lVOLJwg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1101019},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"242b9f1382be6222a4eeb4ce80d502a68511af1f","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.2_1777575090215_0.10924975192902031","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"stealthql","version":"0.2.3","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"license":"Apache-2.0","_id":"stealthql@0.2.3","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"3f0bac0ce6003d363f051ae4696e3629d64e0745","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.3.tgz","fileCount":65,"integrity":"sha512-ptgzWsi7VXPmXusGRklk0FqUS2kE+7h1/wR5/yJ2q33AeB0GTJX3CdhW4veDXGNmPOLJ6ukm1FyyIfXTDMwufw==","signatures":[{"sig":"MEQCIGh2/3+R5bTOdu9wBEb3N3N0A6gOtWugJ+d7R4PQwVELAiB8i5qSXZpQMPdO3MrUaUbOLkPSfEAyK37KWdEJ9hLAEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1135623},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"2662bf8e00176aebcb7cbb6f9cd2fe227fa6322a","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.3_1777601480285_0.4804708291296944","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"stealthql","version":"0.2.4","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"license":"Apache-2.0","_id":"stealthql@0.2.4","maintainers":[{"name":"r3l1c7","email":"brentwoodard7@gmail.com"}],"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"8fbe82edcc6c1940fa3a3925e892c68054fd17cd","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.4.tgz","fileCount":65,"integrity":"sha512-+FIybr4OrFfnampwfSJJTNhj7wya1Q0HstL2EVbUYjSsiDOLQfdN7/iK5Gy5fPMcgyQepBYJMl578aZxnKce9g==","signatures":[{"sig":"MEQCIBHeb8AsghwWfFfbCn/7G/LcjfHwzrhYu1S8h978tVrOAiBVl5YrbU9+tur5vnesVpX0EPXhg+2MCxbNOFnkx5CrSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1172077},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"}},"gitHead":"2662bf8e00176aebcb7cbb6f9cd2fe227fa6322a","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"r3l1c7","email":"brentwoodard7@gmail.com"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.4_1777610490328_0.48475974148997514","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"stealthql","version":"0.2.5","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.5","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"e97678c24c493017c3d0362ea785d1c3498060d5","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.5.tgz","fileCount":72,"integrity":"sha512-Qx9av2cKcyeJ+ZOGZkm254zbcA87+4hRPydJ2mdmzhv8R+ecs7FU3py8YbsrkBBRDFwksNPLBN97If1ZV6St8w==","signatures":[{"sig":"MEUCIQDQFAnetuKl13CN0CfYq+r9f0H+kJXfIyFRWbP7vD3jDwIgVdfRuyKBdDp7Ak7EE4Lw8HhD3/BgeTymkEoe5YBWuIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1194464},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js"}},"gitHead":"7283398f3ed973e7a479424e1330591b676ca024","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","build:capsule":"node ./bin/stealthql.js capsule build","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.5_1777623791006_0.15660645423328967","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"stealthql","version":"0.2.6","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.6","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"7a2753a3dc41c2e7639aebf2103856ba0aabaf39","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.6.tgz","fileCount":81,"integrity":"sha512-ZZM97YdYSrd+1icDRa6JDbQM1q8Ioah6VKe1KSTij3qxKJIu/jb7yye/ighXX6DeyGheee51BzCr/itTjZYo2A==","signatures":[{"sig":"MEUCIBbQ1c49HA2JPw6ZJ1loXeU8kKbGBVDSX++7DqVUHSXPAiEA9a3OZFoNSmPIQ3065KEMrqaPROdvjzEgWe8XeAc7Mlw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1225659},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js"},"./package.json":"./package.json"},"gitHead":"7283398f3ed973e7a479424e1330591b676ca024","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.6_1777627952878_0.9822628520387948","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"stealthql","version":"0.2.7","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.7","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"d70c4f2c32058d2d3d8979a745f596f1f6cf6257","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.7.tgz","fileCount":81,"integrity":"sha512-Sj+qHjX7cLZBDdJqFQeoxSX/zMpORlxGNLJfIKzQhaLqhD43BC83EpGWR+/tqDj2I/yrC/2dlBw2jDZntiCU9Q==","signatures":[{"sig":"MEQCIFmtXnGNiSfRqN0HfZ+fRC+jLkxxq7Nuts2zbWOpG/d5AiAMLqYjYmc76t9/hJFQSWDF/fbNcLYxUjVm1PrlM1b5ag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1228083},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js"},"./package.json":"./package.json"},"gitHead":"7283398f3ed973e7a479424e1330591b676ca024","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.7_1777629046383_0.24066898721393382","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"stealthql","version":"0.2.8","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.8","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"9effc2a64b33a67e1cec544b936ab26ea386cce9","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.8.tgz","fileCount":81,"integrity":"sha512-nysgkYQKJBf6DGzpu4kNF119r7tzXt0bcZzAc7m2ZPgUfjXGyUjgmpjtx7mTmgQ59bWZTYKJQoT78oROG7GPTg==","signatures":[{"sig":"MEUCIQDP6oLbD7T1Z6jXVoP/vormddDaWg5sPPk6GGPVWyuZhgIgILbGeOlClzcKKSIicLvIcI9H5NTo+fmRytxc7fwk2l8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1233220},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js"},"./package.json":"./package.json"},"gitHead":"7283398f3ed973e7a479424e1330591b676ca024","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.8_1777654381075_0.9058558102127896","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"stealthql","version":"0.2.9","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean","react-native","expo"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.9","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"7f318d9a4f411287c572b308dbac71ce09307ab3","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.9.tgz","fileCount":89,"integrity":"sha512-2Hk4iZoSCeWeGRmCh7Vi0vUsFoQhqSHa7+9a2GzmWSCIhBvaXkZ9asMgYQJSuDJywcpAX5QFUS9tUuPH4jKjeA==","signatures":[{"sig":"MEYCIQCrc2NkbLhgKE2PC+QjNEU1PIrvGllf7Lsahn6zqP2FdQIhALJ+KbmvBH46gJc6CRJLo1zZHPBKeUBmpa3q2ik3/RmK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1476644},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js"},"./package.json":"./package.json","./react-native":{"types":"./src/react-native.d.ts","import":"./src/react-native.js"}},"gitHead":"7283398f3ed973e7a479424e1330591b676ca024","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","fuzz:security":"node ./scripts/security-fuzz.mjs","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test policies","test:security":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"node ./bin/stealthql.js capsule build --quiet && node ./bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.9_1777668879792_0.5437973022414673","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"stealthql","version":"0.2.10","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean","react-native","expo"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.10","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"c833dafdc3a341d3de132bc71b67719ddc9bbf33","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.10.tgz","fileCount":118,"integrity":"sha512-neOrFBXbVSb5f0Po7gR8UV2mjQAKFokuNuncsCwpV0/b4tp/z9knlbusIlQuGzOlRE6X7/cQ3R1731dBeplkfQ==","signatures":[{"sig":"MEYCIQDkm38dGzAw100xyAAk2hGOKGkv5wQntxcVEg63FtaXWgIhAIJvhmFCOvhVfgoNDBaPI3l4UTEh36PfLGw/uEUgGEY1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1637074},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./mcp":{"types":"./src/mcp/index.d.ts","import":"./src/mcp/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js"},"./package.json":"./package.json","./react-native":{"types":"./src/react-native.d.ts","import":"./src/react-native.js"}},"gitHead":"51c85d79361acfe149a83bcecbabc2a1d77069cb","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","test:mcp":"node --test src/mcp/__tests__/mcp.test.js","stealthql":"node ./bin/stealthql.js","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","fuzz:security":"node ./scripts/security-fuzz.mjs","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test policies","test:security":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@electric-sql/pglite":"^0.4.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.10_1777690855194_0.8636424505417906","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"stealthql","version":"0.2.11","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean","react-native","expo"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.11","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"1c18e93b39b315a13acfd925a17dc33d6ca0c94c","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.11.tgz","fileCount":155,"integrity":"sha512-o94JuX/3CaPLD6BLUbvVaXXMkVwa8QPiU/xXIp/IK5yi9wr3a9839Nkb24YyY/5WYK6gTlPWZig40eOt6T/3Nw==","signatures":[{"sig":"MEQCIEgyCn8KQrzzNQlSpafm6Up7OStHpKTjXrlDKgo3lNmaAiADjNirl/ctRMzEg15oN7f0WfIpnwWar9e2sQAg6WA1Sw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2415658},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./mcp":{"types":"./src/mcp/index.d.ts","import":"./src/mcp/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./rule-packs":"./rule-packs/index.js","./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js","browser":"./src/next-client.js","default":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js","default":"./src/next-server.js"},"./package.json":"./package.json","./react-native":{"types":"./src/react-native.d.ts","import":"./src/react-native.js"},"./rule-packs/db/orm":"./rule-packs/db/orm.js","./rule-packs/payments/stripe":"./rule-packs/payments/stripe.js","./rule-packs/framework/nextjs":"./rule-packs/framework/nextjs.js","./rule-packs/security/baseline":"./rule-packs/security/baseline.js"},"gitHead":"728d48c755a3553c28ecbd400493b5db1d4d86c4","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","test:mcp":"node --test src/mcp/__tests__/mcp.test.js","stealthql":"node ./bin/stealthql.js","dns:assign":"node scripts/cloudflare-dns.mjs --assign-random --verify","dns:delete":"node scripts/cloudflare-dns.mjs --delete","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","fuzz:security":"node ./scripts/security-fuzz.mjs","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test policies","test:security":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security","dns:cloudflare":"node scripts/cloudflare-dns.mjs","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"^9.0.0","typescript":"^6.0.3","@electric-sql/pglite":"^0.4.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.11_1778013744500_0.5150338404599639","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"stealthql","version":"0.2.12","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean","react-native","expo"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.12","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"93d9221de03bc09fa8ca0488d4a17e53cfb6be93","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.12.tgz","fileCount":155,"integrity":"sha512-q07/Q6/c6xo7y9nCmWYqb3u9gQCtLUd39EA9C2K5ABpddA3tNbplX9K0Jd7AGLzRPLBrWNrFXzNOEx9YsGXwqw==","signatures":[{"sig":"MEYCIQDvgpMxe2EolNBEodr0hj+lBFBKq9A5FulL3GS83lXh2wIhANkmpXnEnffsyBIver+72xL4k0HQHMxKGuuqZZyTqzTu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2443504},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./mcp":{"types":"./src/mcp/index.d.ts","import":"./src/mcp/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./rule-packs":"./rule-packs/index.js","./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js","browser":"./src/next-client.js","default":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js","default":"./src/next-server.js"},"./package.json":"./package.json","./react-native":{"types":"./src/react-native.d.ts","import":"./src/react-native.js"},"./rule-packs/db/orm":"./rule-packs/db/orm.js","./rule-packs/payments/stripe":"./rule-packs/payments/stripe.js","./rule-packs/framework/nextjs":"./rule-packs/framework/nextjs.js","./rule-packs/security/baseline":"./rule-packs/security/baseline.js"},"gitHead":"8459b49623975df14eb9cf5b24b138d7ceaf63b6","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","test:mcp":"node --test src/mcp/__tests__/mcp.test.js","stealthql":"node ./bin/stealthql.js","dns:assign":"node scripts/cloudflare-dns.mjs --assign-random --verify","dns:delete":"node scripts/cloudflare-dns.mjs --delete","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","fuzz:security":"node ./scripts/security-fuzz.mjs","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test policies","test:security":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security","dns:cloudflare":"node scripts/cloudflare-dns.mjs","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"^9.0.0","typescript":"^6.0.3","@electric-sql/pglite":"^0.4.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.12_1778018089955_0.855292555686733","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"stealthql","version":"0.2.13","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean","react-native","expo"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.13","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"ed82a9a76860876f81b50cbfab8e95a785b12447","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.13.tgz","fileCount":160,"integrity":"sha512-R4gY/pJXGkO36soNU/57BcSeylc05wyZpw/p34FgFuzoALWIlZfPKmwO7yKZRtjEaWKiIqce1yC2NtkPyOmwSQ==","signatures":[{"sig":"MEYCIQChz7svp/HkA44UhxPjUEfZDO7OtRAlGK2q3vksLxXuywIhAJpwJgTegDnm1hF1LWMkv+PNrk1BWcVprdZWdid6lMHO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2540479},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./mcp":{"types":"./src/mcp/index.d.ts","import":"./src/mcp/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./rule-packs":"./rule-packs/index.js","./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js","browser":"./src/next-client.js","default":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js","default":"./src/next-server.js"},"./package.json":"./package.json","./react-native":{"types":"./src/react-native.d.ts","import":"./src/react-native.js"},"./rule-packs/db/orm":"./rule-packs/db/orm.js","./rule-packs/payments/stripe":"./rule-packs/payments/stripe.js","./rule-packs/framework/nextjs":"./rule-packs/framework/nextjs.js","./rule-packs/security/baseline":"./rule-packs/security/baseline.js"},"gitHead":"1b9e22fd8095566bc87cb8fe6ec2871029b1f573","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","test:mcp":"node --test src/mcp/__tests__/mcp.test.js","stealthql":"node ./bin/stealthql.js","dns:assign":"node scripts/cloudflare-dns.mjs --assign-random --verify","dns:delete":"node scripts/cloudflare-dns.mjs --delete","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","fuzz:security":"node ./scripts/security-fuzz.mjs","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test policies","test:security":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security","dns:cloudflare":"node scripts/cloudflare-dns.mjs","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"diff":"^9.0.0","typescript":"^6.0.3","@electric-sql/pglite":"^0.4.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.13_1778138528441_0.7029457967360613","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"stealthql","version":"0.2.14","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean","react-native","expo"],"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","_id":"stealthql@0.2.14","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"homepage":"https://stealthql.com","bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"bin":{"stealthql":"bin/stealthql.js"},"dist":{"shasum":"ac04a625e9d3eaef0d775323948d7a5dbaa4c6fb","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.14.tgz","fileCount":164,"integrity":"sha512-+6hmm6Dz2GvhKDp6L2vlth/H06pNTqsOc0FBDXM+c45mv2CtDFS9ltkDtEKcWpvIKc6dSSZiBf6a3z0PhY4Ufg==","signatures":[{"sig":"MEQCIFV/nC5zjxrhj1q1v++UbU2knEuB2FJcVARDOIAe8XOeAiBW2DiTOXsp+zDTZAFJa1f+0VIrqUmwbSWI61rcVpqb8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2647961},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./mcp":{"types":"./src/mcp/index.d.ts","import":"./src/mcp/index.js"},"./next":{"types":"./src/next.d.ts","import":"./src/next.js","browser":"./src/next-client.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"},"./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./rule-packs":"./rule-packs/index.js","./next/client":{"types":"./src/next-client.d.ts","import":"./src/next-client.js","browser":"./src/next-client.js","default":"./src/next-client.js"},"./next/server":{"types":"./src/next-server.d.ts","import":"./src/next-server.js","default":"./src/next-server.js"},"./package.json":"./package.json","./react-native":{"types":"./src/react-native.d.ts","import":"./src/react-native.js"},"./rule-packs/db/orm":"./rule-packs/db/orm.js","./rule-packs/payments/stripe":"./rule-packs/payments/stripe.js","./rule-packs/framework/nextjs":"./rule-packs/framework/nextjs.js","./rule-packs/security/baseline":"./rule-packs/security/baseline.js"},"gitHead":"1b9e22fd8095566bc87cb8fe6ec2871029b1f573","scripts":{"dev":"node ./bin/stealthql.js dev","bench":"node ./bin/stealthql.js bench","export":"node ./bin/stealthql.js export","replay":"node ./bin/stealthql.js replay latest","stress":"node ./bin/stealthql.js stress","test:mcp":"node --test src/mcp/__tests__/mcp.test.js","stealthql":"node ./bin/stealthql.js","dns:assign":"node scripts/cloudflare-dns.mjs --assign-random --verify","dns:delete":"node scripts/cloudflare-dns.mjs --delete","setup:next":"node ./bin/stealthql.js setup next","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:test":"stealthql test security --smoke","build:capsule":"node ./bin/stealthql.js capsule build","fuzz:security":"node ./scripts/security-fuzz.mjs","stealth:reset":"stealthql dev --once --reset","stealth:setup":"stealthql setup next --preset saas","test:policies":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test policies","test:security":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security","dns:cloudflare":"node scripts/cloudflare-dns.mjs","query:projects":"node ./bin/stealthql.js query projects --actor alice","stealth:test:full":"stealthql test security","test:security:smoke":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security --smoke","stealth:deploy:split":"stealthql deploy split"},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"repository":{"url":"git+https://github.com/stealthql/stealthql.git","type":"git"},"_npmVersion":"10.8.1","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"pg":"^8.21.0","diff":"^9.0.0","typescript":"^6.0.3","@electric-sql/pglite":"^0.4.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/stealthql_0.2.14_1779262324194_0.7374264399230952","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"stealthql","version":"0.2.15","description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","homepage":"https://stealthql.com","repository":{"type":"git","url":"git+https://github.com/stealthql/stealthql.git"},"bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean","react-native","expo"],"type":"module","main":"./src/index.js","types":"./src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"},"./next":{"types":"./src/next.d.ts","browser":"./src/next-client.js","import":"./src/next.js"},"./next/client":{"types":"./src/next-client.d.ts","browser":"./src/next-client.js","default":"./src/next-client.js","import":"./src/next-client.js"},"./rule-packs":"./rule-packs/index.js","./rule-packs/security/baseline":"./rule-packs/security/baseline.js","./rule-packs/framework/nextjs":"./rule-packs/framework/nextjs.js","./rule-packs/payments/stripe":"./rule-packs/payments/stripe.js","./rule-packs/db/orm":"./rule-packs/db/orm.js","./next/server":{"types":"./src/next-server.d.ts","default":"./src/next-server.js","import":"./src/next-server.js"},"./package.json":"./package.json","./client":{"types":"./src/client.d.ts","import":"./src/client.js"},"./react-native":{"types":"./src/react-native.d.ts","import":"./src/react-native.js"},"./mcp":{"types":"./src/mcp/index.d.ts","import":"./src/mcp/index.js"},"./server":{"types":"./src/server.d.ts","import":"./src/server.js"},"./adapters":{"types":"./src/adapters.d.ts","import":"./src/adapters.js"},"./vite":{"types":"./src/vite.d.ts","import":"./src/vite.js"},"./sveltekit":{"types":"./src/sveltekit.d.ts","import":"./src/sveltekit.js"},"./astro":{"types":"./src/astro.d.ts","import":"./src/astro.js"},"./schema":{"types":"./src/schema.d.ts","import":"./src/schema.js"},"./types":{"types":"./src/types.d.ts","import":"./src/types.js"}},"publishConfig":{"access":"public"},"bin":{"stealthql":"bin/stealthql.js"},"scripts":{"stealthql":"node ./bin/stealthql.js","build:capsule":"node ./bin/stealthql.js capsule build","export":"node ./bin/stealthql.js export","bench":"node ./bin/stealthql.js bench","stress":"node ./bin/stealthql.js stress","dev":"node ./bin/stealthql.js dev","setup:next":"node ./bin/stealthql.js setup next","test:policies":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test policies","test:security:smoke":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security --smoke","test:security":"cd examples/starter-capsule && node ../../bin/stealthql.js capsule build --quiet && node ../../bin/stealthql.js test security","dns:cloudflare":"node scripts/cloudflare-dns.mjs","dns:assign":"node scripts/cloudflare-dns.mjs --assign-random --verify","dns:delete":"node scripts/cloudflare-dns.mjs --delete","fuzz:security":"node ./scripts/security-fuzz.mjs","replay":"node ./bin/stealthql.js replay latest","query:projects":"node ./bin/stealthql.js query projects --actor alice","dev:stealth":"node scripts/stealth-next-dev.mjs","stealth:dev":"stealthql dev","stealth:reset":"stealthql dev --once --reset","stealth:test":"stealthql test security --smoke","stealth:test:full":"stealthql test security","test:mcp":"node --test src/mcp/__tests__/mcp.test.js","stealth:setup":"stealthql setup next --preset saas","stealth:deploy:split":"stealthql deploy split"},"engines":{"node":">=20"},"dependencies":{"@electric-sql/pglite":"^0.4.5","@modelcontextprotocol/sdk":"^1.29.0","diff":"^9.0.0","pg":"^8.21.0","typescript":"^6.0.3"},"_id":"stealthql@0.2.15","gitHead":"1b9e22fd8095566bc87cb8fe6ec2871029b1f573","_nodeVersion":"24.14.0","_npmVersion":"10.8.1","dist":{"integrity":"sha512-UR/Pub2pXkheq9ingoBwkky2tz3yzGDd5NuZhakHoHpu/4/z18+4CiO4CmsDfcGM/PdFGAs1XQRKs/TaFmnX+Q==","shasum":"0d7762c5613000e29be369de5cbade12f9a1e61d","tarball":"https://registry.npmjs.org/stealthql/-/stealthql-0.2.15.tgz","fileCount":164,"unpackedSize":2682624,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEH1ya7vnHsgI9Nb1jUfIO1UgutBEpv50y+TBdKe5mTyAiEAhlwDWlc1qlPZew8C1O6H1Ey6Rg87u0ALfCTqQBj1xcU="}]},"_npmUser":{"name":"stealthqljs","email":"npm@stealthql.com"},"directories":{},"maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/stealthql_0.2.15_1779266044691_0.46177174078362526"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-29T06:46:01.712Z","modified":"2026-05-20T08:34:04.953Z","0.1.0":"2026-04-29T06:46:02.012Z","0.1.1":"2026-04-29T07:32:26.959Z","0.1.2":"2026-04-29T08:31:47.141Z","0.1.3":"2026-04-29T08:55:56.941Z","0.1.4":"2026-04-29T08:59:08.622Z","0.1.5":"2026-04-29T16:47:26.540Z","0.1.6":"2026-04-29T17:25:10.230Z","0.1.7":"2026-04-29T17:56:06.088Z","0.1.8":"2026-04-29T18:04:28.137Z","0.1.9":"2026-04-29T18:11:07.776Z","0.1.10":"2026-04-29T19:05:44.118Z","0.1.11":"2026-04-29T19:39:00.051Z","0.1.12":"2026-04-29T19:46:38.781Z","0.1.13":"2026-04-29T20:06:44.341Z","0.1.14":"2026-04-29T20:36:59.527Z","0.1.15":"2026-04-29T21:16:48.657Z","0.1.16":"2026-04-29T22:52:42.080Z","0.1.17":"2026-04-30T00:52:23.764Z","0.1.18":"2026-04-30T01:04:29.268Z","0.1.19":"2026-04-30T01:27:14.938Z","0.2.0":"2026-04-30T03:43:21.188Z","0.2.1":"2026-04-30T09:44:51.759Z","0.2.2":"2026-04-30T18:51:30.409Z","0.2.3":"2026-05-01T02:11:20.465Z","0.2.4":"2026-05-01T04:41:30.607Z","0.2.5":"2026-05-01T08:23:11.172Z","0.2.6":"2026-05-01T09:32:33.030Z","0.2.7":"2026-05-01T09:50:46.606Z","0.2.8":"2026-05-01T16:53:01.323Z","0.2.9":"2026-05-01T20:54:40.033Z","0.2.10":"2026-05-02T03:00:55.378Z","0.2.11":"2026-05-05T20:42:24.717Z","0.2.12":"2026-05-05T21:54:50.158Z","0.2.13":"2026-05-07T07:22:08.630Z","0.2.14":"2026-05-20T07:32:04.354Z","0.2.15":"2026-05-20T08:34:04.862Z"},"bugs":{"url":"https://github.com/stealthql/stealthql/issues","email":"support@stealthql.com"},"author":{"name":"StealthQL","email":"npm@stealthql.com"},"license":"Apache-2.0","homepage":"https://stealthql.com","keywords":["backend","local-first","nextjs","auth","database","pglite","capsule","llm","security","self-hosted","vercel","digitalocean","react-native","expo"],"repository":{"type":"git","url":"git+https://github.com/stealthql/stealthql.git"},"description":"Repo-native backend capsule for Next.js: local database, auth, policies, shares, and one-command deployment.","maintainers":[{"name":"stealthqljs","email":"npm@stealthql.com"}],"readme":"# StealthQL\n\nStealthQL is a repo-native backend capsule for apps where the security boundary matters. Same database, different actor: support can be blind, admins can approve, members can only touch their rows, external users can work through scoped share portals, and the ledger records what happened without starting from a hosted dashboard.\n\nFor agent/MCP usage, see [docs/MCP.md](docs/MCP.md).\n\nThe fastest path:\n\n```powershell\nnpm install stealthql\nnpx stealthql setup next\nnpm run dev:stealth\n```\n\nFor TypeScript-first projects or empty Next apps, force TypeScript output:\n\n```powershell\nnpx stealthql setup next --typescript\n```\n\nThen open the generated demo page and start editing the capsule files in your repo:\n\n- `stealth.schema.js` defines tables.\n- `stealth.auth.js` defines local actors, policies, field masks, and data visibility contracts.\n- `stealth.functions.js` defines intent functions.\n- `stealth.storage.js` and `stealth.sync.js` define materialization rules.\n- `stealth.shares.js` defines table and record shares.\n- `stealth.compliance.js` maps tables, shares, storage, functions, and data classes to compliance evidence controls.\n- `stealth.database.js` declares preview reviewed SQL migrations, triggers, and procedures as hash-tracked deploy artifacts.\n- `stealth.jobs.js` declares preview scheduled jobs that run named functions as service actors.\n- `stealth.seeds.js` gives the local runtime real starting state.\n- `stealth.policy.test.js` declares authorization attack tests.\n\n## What You Get\n\n- **Database in seconds:** `npx stealthql setup next` scaffolds a SaaS-shaped database/auth capsule and local PGlite materialization.\n- **LLM-friendly schema setup:** Cursor, Codex, and Claude Code can edit `stealth.schema.request.json`, preview it, apply it, and run policy/security tests.\n- **Built-in auth model:** local actors, sessions, magic links, Google/GitHub/Facebook OAuth, recovery codes, org membership, service accounts, and share-token actors use one normalized actor model.\n- **Policy-bound row handles:** browser/mobile update and delete flows use short-lived action handles instead of raw IDs by default.\n- **Google-Sheets-style shares:** table/record shares support field masks, proposal mode, CSV round trip, expiration, revocation, and audit logs.\n- **Preview automation surface:** reviewed SQL artifacts are hash-tracked in the capsule, and scheduled jobs run declared functions as service actors while live DB application and external scheduler wiring stay deploy-adapter responsibilities.\n- **Local-first dev loop:** schema/auth/policy/function changes hot-reload without resetting local data.\n- **Production options:** deploy the website and capsule on one DigitalOcean Droplet, or run the Next.js frontend on Vercel with the capsule runtime on DigitalOcean.\n\n## Deploy\n\nFriendly deploy menu:\n\n```powershell\nnpx stealthql deploy\n```\n\nChoose:\n\n```text\n1. DigitalOcean only: website + capsule runtime on one Droplet\n2. Vercel frontend + DigitalOcean capsule runtime\n```\n\nDirect commands:\n\n```powershell\nnpx stealthql deploy single --url https://app.example.com --repo https://github.com/you/app.git --write\nnpx stealthql deploy split --frontend-url https://app.example.com --backend-url https://api.example.com --write\n```\n\n## Local Commands\n\n```powershell\nnpm run setup:next\nnpm run build:capsule\nnpm run export\nnpm run bench\nnpm run stress\nnpm run test:policies\nnode .\\bin\\stealthql.js test security --smoke\nnode .\\bin\\stealthql.js test security\nnpm run query:projects\nnpm run dev\n```\n\n## Public npm Install\n\nPackage page:\n\n```text\nhttps://www.npmjs.com/package/stealthql\n```\n\nInstall into an existing app:\n\n```powershell\nnpm install stealthql\nnpx stealthql init\n```\n\nFor an existing Next.js app, use the one-command setup:\n\n```powershell\nnpx stealthql setup next\n```\n\nBoth `init` and `setup next` write the LLM handoff files into the project:\n\n```text\nSTEALTHQL_AGENT.md\nSTEALTHQL_SCHEMA_PROMPT.md\nstealth.schema.request.json\n.cursor/rules/stealthql.mdc\n```\n\nGive `STEALTHQL_AGENT.md` or `.cursor/rules/stealthql.mdc` to Cursor, Codex, or Claude Code so the agent knows this is a StealthQL capsule project, not GraphQL, Prisma, Firebase, or Supabase.\n\nThey also create `stealth.project.json`, a non-secret stable project identity. Keep it with the project so local runtime data does not move just because you rename the app or folder. Private database files, ledgers, auth state, and storage blobs still live outside the repo by default and `.stealthql/` remains ignored.\n\nThe dev server prints the local dashboard URL when it starts:\n\n```text\nnpx stealthql dev\n```\n\nThe local dashboard is also the Studio for non-CLI work. Pick an actor and table, then use Add Row to enter data in a generated form. Relationship fields are shown as dropdowns when the current actor can read the related rows, and the save still goes through the runtime mutation path, so table policies, field policies, data integrity rules, and ledger events apply exactly like app code.\n\nIt tries `8787` when that port is free. In default or auto mode, if `8787` is busy, StealthQL scans upward and uses `8788`, `8789`, and so on before falling back to an OS-assigned port. If you explicitly pass `--port 8787`, that port is treated as required unless you also pass `--auto-port`. The chosen port is written to `.stealthql/runtime.json`. If a killed Windows process leaves a materializer lock behind, `stealthql dev` reclaims dead-PID locks automatically; use `stealthql doctor unlock --force` or `stealthql dev --force-unlock` only after confirming the old runtime is stopped.\n\nWhen a port is busy, do not kill the occupying process unless you know it belongs to the same project. Prefer `npx stealthql dev --auto-port` or `npx stealthql dev --port auto`, then let the app proxy read `.stealthql/runtime.json` or the helper-provided `STEALTHQL_URL`.\n\nDuring development, `stealthql dev` watches capsule source files and hot-reloads schema, auth, policies, functions, storage, sync, shares, compliance mappings, database/job declarations, and seeds without resetting local data. Use `--no-watch` to disable this.\n\n## CLI\n\n```powershell\nnode .\\bin\\stealthql.js init\nnode .\\bin\\stealthql.js setup next [--typescript]\nnode .\\bin\\stealthql.js schema spec\nnode .\\bin\\stealthql.js schema init\nnode .\\bin\\stealthql.js schema preview --file stealth.schema.request.json\nnode .\\bin\\stealthql.js schema apply --file stealth.schema.request.json --test\nnode .\\bin\\stealthql.js capsule build\nnode .\\bin\\stealthql.js export --out stealthql-export\nnode .\\bin\\stealthql.js bench --sizes 1000,10000\nnode .\\bin\\stealthql.js stress --operations 500 --concurrency 64 --http 250\nnode .\\bin\\stealthql.js dev --port 8787\nnode .\\bin\\stealthql.js doctor unlock --force\nnode .\\bin\\stealthql.js query projects --actor alice --format table\nnode .\\bin\\stealthql.js query invoices --actor bob --as-of 2026-05-01T14:00:00Z --format table\nnode .\\bin\\stealthql.js sql \"select * from projects where orgId = 'org_acme';\" --actor alice --format table\nnode .\\bin\\stealthql.js sql \"insert into projects (id, orgId, ownerId, name, visibility) values ('proj_sql', 'org_acme', 'user_alice', 'SQL app', 'private');\" --actor alice\nnode .\\bin\\stealthql.js mutate projects insert --actor alice --input '{ \"id\": \"proj_new\", \"orgId\": \"org_acme\", \"ownerId\": \"user_alice\", \"name\": \"New app\" }'\nnode .\\bin\\stealthql.js call createProject --actor alice --input '{ \"name\": \"Capsule CRM\" }'\nnode .\\bin\\stealthql.js database plan\nnode .\\bin\\stealthql.js jobs list\nnode .\\bin\\stealthql.js jobs run nightlyCleanup --dry-run\nnode .\\bin\\stealthql.js test policies\nnode .\\bin\\stealthql.js test security --smoke\nnode .\\bin\\stealthql.js test security\nnode .\\bin\\stealthql.js replay latest\nnode .\\bin\\stealthql.js sovereignty\nnode .\\bin\\stealthql.js audit-report --framework soc2-cc7 --out evidence/soc2-cc7\nnode .\\bin\\stealthql.js snapshot create --as-of 2026-05-01T14:00:00Z --out snapshots/bug.stealthql-snapshot.json.gz\nnode .\\bin\\stealthql.js snapshot restore snapshots/bug.stealthql-snapshot.json.gz --out tmp/repro\n```\n\n## 30-Second Next.js Setup\n\nInside an existing Next.js app:\n\n```powershell\nnpx stealthql setup next\nnpm install\nnpm run dev:stealth\n```\n\nThat command creates a real SaaS-shaped backend capsule, compiles it, materializes the local database, wires a same-origin Next API proxy, and adds a demo page at:\n\n```text\nhttp://localhost:3000/stealthql-demo\n```\n\nThe default `saas` preset creates:\n\n```text\norganizations\nusers\nmemberships\nprojects\ninvoices\n```\n\nIt also configures local auth actors, sessions, magic links, recovery codes, invites, test users, roles, organization membership, generated policy tests, sync shapes, and share demos. The setup report prints the tables and auth features so the developer can see what exists immediately.\n\nUse it from React code with either SQL or mutation JSON. The generated `lib/stealthql.*` file exports typed local demo actors so `alice` / `bob` typos do not become silent string bugs in TypeScript projects:\n\n```js\nimport { createStealthClient, stealthActors } from \"./lib/stealthql\";\n\nconst stealth = createStealthClient({ actor: stealthActors.alice });\n\nawait stealth.sql(\"select id, name from projects;\");\nawait stealth.mutate(\"projects\", \"insert\", {\n  id: \"proj_new\",\n  orgId: \"org_acme\",\n  ownerId: \"user_alice\",\n  name: \"New app\"\n});\n```\n\nLocal actor strings are demo-only. Production code should use real sessions, bearer tokens, service tokens, or share tokens instead of hardcoded actors.\n\nThe generated proxy keeps browser calls same-origin at `/api/stealthql/*`, so a Next app does not need to think about CORS, runtime ports, or backend credentials during local development. In production, the same proxy can run on Vercel while `STEALTHQL_URL` points server-side to a capsule runtime on DigitalOcean. TypeScript projects receive `.ts` / `.tsx` integration files, and the package ships declarations for `stealthql`, `stealthql/next/client`, `stealthql/next/server`, and the backwards-compatible `stealthql/next` entry, so do not add broad `declare module \"*.js\"` workarounds.\n\nIf a project has no Next config yet, `setup next` writes a minimal `next.config.mjs` with `allowedDevOrigins: [\"127.0.0.1\", \"localhost\"]`. Existing configs are not rewritten; add that setting manually if Next.js dev warns about cross-origin local resources from `127.0.0.1`.\n\nPublic typed imports:\n\n```text\nstealthql          root exports\nstealthql/next/client  browser-safe Next.js client helper\nstealthql/next/server  Next.js server client and proxy helpers\nstealthql/next     compatibility entry that re-exports both sides\nstealthql/client   generic browser, mobile, Vite, Expo, SvelteKit, Astro, Remix client helper\nstealthql/react-native  React Native / Expo client helper for absolute runtime URLs\nstealthql/server   generic server and proxy helpers\nstealthql/vite     Vite dev-server proxy adapter\nstealthql/sveltekit  SvelteKit request-handler proxy adapter\nstealthql/astro    Astro endpoint proxy adapter\nstealthql/schema   typed capsule authoring helpers such as defineSchema and defineAuth\nstealthql/types    shared TypeScript types only\n```\n\nFor Vite/SvelteKit/Astro details, including `stealthVite()` and `.stealthql/runtime.json` port discovery, see `docs/VITE_INTEGRATION.md`. Vite adapter `runtimeFile` paths are resolved relative to the Vite config file first, with `process.cwd()` kept as a fallback. In Astro and SvelteKit dev mode, `stealthVite()` is usually the right primitive; the Astro/SvelteKit handler exports are for explicit framework endpoint routes.\n\n### React Native / Expo\n\nReact Native does not have a same-origin browser proxy, so use an absolute runtime URL and authenticate with a bearer/session token instead of raw local demo actors:\n\n```ts\nimport { createStealthReactNativeClient } from \"stealthql/react-native\";\n\nconst stealth = createStealthReactNativeClient({\n  baseUrl: \"https://api.example.com\",\n  token: session.accessToken,\n});\n\nconst { rows } = await stealth.query(\"projects\");\n```\n\nLocal emulator URLs usually differ by platform:\n\n```ts\n// Android emulator -> host machine\ncreateStealthReactNativeClient({ baseUrl: \"http://10.0.2.2:8787\" });\n\n// iOS simulator -> host machine\ncreateStealthReactNativeClient({ baseUrl: \"http://127.0.0.1:8787\" });\n```\n\nIf a mobile app talks through a Next/Vercel proxy instead of the capsule runtime directly, pass that proxy path explicitly:\n\n```ts\ncreateStealthReactNativeClient({\n  baseUrl: \"https://app.example.com\",\n  basePath: \"/api/stealthql\",\n  token: session.accessToken,\n});\n```\n\nWhen `token` or `getToken` is configured and no explicit `actor` is passed, the React Native client omits raw actor selectors from query strings and request bodies. `actor: \"alice\"` remains local-demo-only.\n\nFor typed capsule files or better IntelliSense in `.mjs` capsule files:\n\n```js\nimport { defineSchema } from \"stealthql/schema\";\n\nexport default defineSchema({\n  name: \"my-app\",\n  tables: {\n    projects: {\n      columns: {\n        id: { type: \"text\", primary: true },\n        name: { type: \"text\", required: true }\n      },\n      indexes: [[\"name\"]],\n      searchIndexes: {\n        default: [\"name\"]\n      }\n    }\n  }\n});\n```\n\n### Data Integrity\n\nStealthQL validates and canonicalizes mutation inputs from the compiled schema before policy evaluation and before data reaches the materializer. It does not require Zod and does not silently strip arbitrary user prose.\n\nDefaults are conservative:\n\n- text is Unicode-normalized to NFC and unsafe control/bidirectional characters are rejected\n- normal `text` fields are trimmed; `longText` preserves surrounding whitespace unless `trim: true`\n- `status` values are trimmed and lowercased\n- `email` values are trimmed, lowercased, length-limited, and shape-checked\n- `url` values must be HTTP(S), cannot include credentials, and are canonicalized with `URL`\n- `integer`, `number`, and `money` accept safe integers or integer strings and store numbers\n- `boolean` and `checkbox` accept booleans or common form strings like `true`, `false`, `yes`, and `no`\n- `enum`, `minLength`, `maxLength`, `trim`, `emptyAsNull`, and `case` are honored per column\n\nExample:\n\n```js\ncolumns: {\n  email: { type: \"email\", required: true },\n  status: { type: \"status\", default: \"open\", enum: [\"open\", \"paid\", \"archived\"] },\n  notes: { type: \"longText\", trim: false, maxLength: 20000 },\n  externalUrl: { type: \"url\", emptyAsNull: true }\n}\n```\n\n### Data Placement Contracts\n\n`dataVisibility` can also say where a field or table is allowed to exist, not only who may read it. Existing `cloudReadable`, `supportReadable`, and `aiReadable` contracts still work; new projects should add `mayExistOn` for explicit placement rules.\n\n```js\ndataVisibility: {\n  \"users.email\": {\n    stored: \"hosted-or-local\",\n    encryptedBy: \"runtime\",\n    cloudReadable: true,\n    supportReadable: false,\n    aiReadable: false,\n    mayExistOn: {\n      server: true,\n      mobileDevice: true,\n      browserCache: false,\n      aiPrompt: false,\n      supportExport: false,\n      evidencePacket: true,\n      externalShare: false\n    }\n  }\n}\n```\n\nSupported placement keys are `server`, `mobileDevice`, `browserCache`, `aiPrompt`, `supportExport`, `evidencePacket`, and `externalShare`. Explicit `false` values are enforced by placement-aware response filtering and redaction: browser/Next/Vite proxy reads are treated as `browserCache`, React Native reads are treated as `mobileDevice`, server/service clients are treated as `server`, AI ports use `aiPrompt`, shares use `externalShare`, and ledger evidence uses `evidencePacket`. Omitted keys preserve existing behavior for older apps.\n\n### AI Ports\n\nBackend functions should call AI through `ctx.ports.ai.*`, not raw provider fetches:\n\n```js\nexport async function summarizeInvoice(ctx, input) {\n  const invoices = await ctx.query(\"invoices\");\n  const invoice = invoices.find((row) => row.id === input.invoiceId);\n\n  return ctx.ports.ai.complete({\n    providerClass: \"hostedCloud\",\n    prompt: `Summarize invoice ${invoice.id}: ${invoice.internalNote}`,\n    sources: [{ table: \"invoices\", row: invoice }]\n  });\n}\n```\n\nV1 is the governance surface: it validates, redacts/blocks, and ledger-records AI calls. Live provider adapters can be wired behind this port later without changing function code.\n\nIf `invoices.internalNote` is marked `aiReadable: false`, `mayExistOn.aiPrompt: false`, or `aiReadable.hostedCloud: false`, the hosted-cloud AI call is blocked and the attempted violation is written to the hash-chained ledger without logging the raw prompt.\n\nProvider classes are `localDevice`, `privateCloud`, `hostedCloud`, `vendorAgent`, and `support`. Use an `aiReadable` matrix when local/on-device AI is allowed but cloud AI is not:\n\n```js\ndataVisibility: {\n  \"invoices.internalNote\": {\n    aiReadable: {\n      localDevice: true,\n      hostedCloud: false,\n      vendorAgent: false,\n      support: false,\n      modelTraining: false,\n      redactedExtract: true\n    }\n  }\n}\n```\n\nWhen `redactedExtract: true` is allowed and the function opts in with `redactedExtract: true`, the AI port redacts restricted source fields and matching prompt text before recording/simulating the call.\n\n### Agent Runtime Foundation\n\nThe MCP server is a separate product, but the runtime now has the complete substrate it needs:\n\n- `auth.agentAccounts` declares durable agent identities distinct from humans, services, and share principals.\n- `POST /_stealthql/auth/agent-session` mints short-lived `agent_...` bearer sessions for an authorized issuer.\n- `POST /_stealthql/auth/agent-session/revoke` revokes one live session or all sessions for an agent.\n- Agent actors carry `agentName`, `agentSessionId`, `taskId`, `scopeShareId`, `trustClass`, `keyId`, and public-key fingerprint metadata into policy decisions and ledger events.\n- `GET /_stealthql/scope/describe` returns the policy-scoped surface an actor can see: tables, fields, shares, functions, AI-port placement rules, and rate limits.\n- `POST /_stealthql/memory/recall` and `/forget` expose an agent-filtered ledger memory view with tombstones.\n- `stealth.mutate(..., { dryRun: true, mcpToolName })` records a dry-run decision without changing materialized state.\n- Agent sessions are per-minute rate-limited by account config and rate-limit events are ledger-recorded.\n\nExample:\n\n```js\nexport default {\n  agentAccounts: {\n    claudeSupport: {\n      id: \"agent_claude_support\",\n      issuer: \"user_alice\",\n      scopeShareId: \"acmeInvoicesForBob\",\n      trustClass: \"hostedCloud\",\n      keyId: \"agent_claude_support.v1\",\n      publicKey: process.env.STEALTHQL_AGENT_CLAUDE_PUBLIC_KEY,\n      sessionTtlMinutes: 60,\n      maxConcurrent: 3,\n      rateLimits: {\n        queriesPerMinute: 120,\n        mutationsPerMinute: 30,\n        functionsPerMinute: 30,\n        aiCallsPerMinute: 60\n      },\n      scopes: [\"agent:read\"]\n    }\n  }\n};\n```\n\nService actors with `agent:issue`, `agent:write`, or `provisioning:write`, platform admins, or the configured issuer can create agent sessions. Agent accounts should be scoped with shares and normal policies; do not give MCP agents broad service tokens.\n\nAgent authority is session-backed. `agent:<name>` is not a usable raw actor selector, and plain JSON objects like `{ type: \"agent\" }` are rejected unless they came from a verified live agent session inside the runtime. If an agent session is revoked or expires, old actor objects stop authorizing access too.\n\nFor user-facing search on large tables, use search indexes instead of broad `LIKE` scans:\n\n```js\nconst results = await stealth.search(\"projects\", \"capsule\", {\n  limit: 25,\n  columns: [\"id\", \"name\"]\n});\n```\n\nEvery capsule build also emits schema-specific client types:\n\n```text\n.stealthql/client.d.ts\n```\n\nWhen that file is included by TypeScript, normal `stealthql/next/client`, `stealthql/next`, and `stealthql/client` imports become schema-aware. Wrong table names, unknown mutation fields, missing required insert fields, and wrong scalar types fail at type-check time. If your `tsconfig.json` has a custom `include`, add:\n\n```json\n{\n  \"include\": [\"**/*.ts\", \"**/*.tsx\", \".stealthql/**/*.d.ts\"]\n}\n```\n\nIDs are opaque by default. If an insert omits a text `id`, StealthQL generates a `prefix_<random>` ID from `crypto.randomUUID()`, not a sequential number. That reduces casual enumeration risk, but it is not the authorization boundary: IDOR prevention still comes from actor resolution plus table, field, share, and storage policies.\n\nStealthQL also issues **policy-bound row handles** on query results. Treat `id` as identity and `handle` as authority:\n\n```ts\nconst { rows } = await stealth.query(\"projects\");\nawait stealth.mutate(\"projects\", \"update\", {\n  handle: rows[0].$handles.update,\n  patch: {\n    visibility: \"public\"\n  }\n});\n```\n\nRows include `$key` for UI/cache identity, `$handles.read`, `$handles.update`, and `$handles.delete` for action-specific capabilities, plus legacy `$handle` as an update-handle alias for older clients. Handles are sealed with authenticated encryption, short-lived, and bound to the table, row id, actor id, session when available, active organization, capsule hash, policy hash, row authorization hash, action, and allowed update fields. Destructive handles are single-use, handle-carrying runtime responses are sent with `Cache-Control: no-store`, and handles/auth-like tokens are redacted from ledger events. In production mode, normal user update/delete mutations require a row handle and still re-check policy before applying the mutation.\n\nRaw-id update/delete is reserved for local development, explicit service actors, or a deliberate `authConfig.capabilities.allowRawIdMutations` escape hatch. The client exposes that escape hatch under an intentionally noisy API:\n\n```ts\nawait stealth.unsafe.mutateById(\"projects\", \"delete\", {\n  id: \"proj_123\"\n});\n```\n\nUse that only in trusted server code. Browser and mobile user flows should mutate by handle.\n\nFor webhooks, signup provisioning, billing callbacks, cron jobs, and background workers, do not use local demo actors like `alice`. Define a service account and use a service token:\n\n```js\n// stealth.auth.js\nexport default {\n  serviceAccounts: {\n    system: {\n      id: \"svc_system\",\n      tokenEnv: \"STEALTHQL_SERVICE_TOKEN\",\n      scopes: [\"provisioning:write\", \"billing:write\", \"share:issue\"]\n    }\n  }\n};\n```\n\n```ts\nimport { createStealthServiceClient } from \"stealthql/server\";\n\nconst stealth = createStealthServiceClient({\n  token: process.env.STEALTHQL_SERVICE_TOKEN,\n  serviceAccount: \"system\"\n});\n```\n\n`serviceAccount` is the service actor hint, for example `\"roofpo_service\"` becomes `service:roofpo_service`. The bearer token remains the authority, but the hint keeps server-side URLs and request bodies from falling back to `actor=anonymous`.\n\nUse `stealth.functions.*` for actions that need to touch multiple rows or cross role boundaries. For example, a user-facing action can insert an audit/event row as the user, while the function performs a protected aggregate update through `ctx.mutate` under the function's policy. Do not split those workflows into unrelated browser mutations with different actors.\n\nService actors are for trusted system-originated work: Stripe/Twilio webhooks after signature verification, signup provisioning, cron jobs, migrations, and internal reconciliation. Do not accept a member-supplied `PATCH` body and then write it through `createStealthServiceClient()`. Human-originated writes should run as the human actor, usually with row handles, so table and field policies still apply. `npx stealthql test security` includes a static confused-deputy check for Next route files that parse request bodies and then perform service-client mutations; add `stealthql-confused-deputy-ok` only to routes that receive trusted system input, not browser/member data.\n\n### Database Artifacts And Jobs\n\nEnterprise SQL belongs in `stealth.database.*` as reviewed `.sql` files, not as ad hoc strings in app routes. This is a preview deploy surface: the compiler validates that migration, procedure, and trigger files are relative project `.sql` paths, rejects traversal/private directories, blocks psql shell/include commands, requires explicit unsafe acknowledgement for privileged SQL features, and hashes every SQL artifact into the capsule. The JS runtime does not blindly execute stored procedures; deploy/runtime adapters can apply the reviewed artifacts using the capsule hashes.\n\nScheduled jobs live in `stealth.jobs.*` as a preview scheduler contract. A job must reference an exported `stealth.functions.*` handler and a declared `service:<name>` actor. Local actors like `alice` or arbitrary actor objects are rejected at compile time so a cron path cannot become user input with service authority. Run declared jobs manually or from a trusted scheduler with:\n\n```powershell\nnpx stealthql jobs list\nnpx stealthql jobs run nightlyCleanup --dry-run\n```\n\nGenerated custom-table update policies are owner-or-admin by default. UI hiding is not authorization: if a role like crew, client, viewer, or subcontractor should not create or edit a domain table such as jobs, documents, contracts, payments, or customer records, tighten `stealth.auth.*` table/field policies and add negative policy tests for that member session.\n\nService actors are the only intended way for trusted server code to perform explicit raw-id system mutations in production.\n\n### Zod\n\nStealthQL does not require Zod. If an app already uses it, keep StealthQL as the source of truth and bind Zod schemas to generated capsule types:\n\n```ts\nimport { z } from \"zod\";\nimport type { InsertInput } from \"./.stealthql/client.js\";\n\nconst projectInsertSchema = z.object({\n  orgId: z.string(),\n  ownerId: z.string(),\n  name: z.string(),\n  visibility: z.string().optional()\n}) satisfies z.ZodType<InsertInput<\"projects\">>;\n```\n\nThat gives form/request validation without creating a second schema authority.\n\nFor Server Components, server actions, or API routes, use the server client and forward request headers so StealthQL resolves the actor from a real session cookie, bearer token, or share token. Do not hardcode `actor: \"alice\"` in deployed routes.\n\n```js\nimport { headers } from \"next/headers\";\nimport { createStealthServerClient } from \"stealthql/next/server\";\n\nconst stealth = createStealthServerClient({\n  headers: await headers()\n});\nconst projects = await stealth.query(\"projects\");\n```\n\n## Relationships And Includes\n\nRelationships are declared as capsule metadata, not raw database joins. Store references as normal indexed text fields, then name the relationship in `stealth.schema.js`:\n\n```js\nexport default {\n  tables: {\n    users: { columns: { id: { type: \"text\", primary: true }, name: { type: \"text\" } } },\n    projects: {\n      columns: {\n        id: { type: \"text\", primary: true },\n        ownerId: { type: \"text\", required: true },\n        name: { type: \"text\", required: true }\n      },\n      indexes: [[\"ownerId\"]]\n    }\n  },\n  relationships: {\n    projects: {\n      owner: {\n        table: \"users\",\n        localField: \"ownerId\",\n        foreignField: \"id\",\n        cardinality: \"one\",\n        fields: [\"id\", \"name\"]\n      }\n    },\n    users: {\n      projects: {\n        table: \"projects\",\n        localField: \"id\",\n        foreignField: \"ownerId\",\n        cardinality: \"many\",\n        limit: 100\n      }\n    }\n  }\n};\n```\n\nThen include related rows from clients or sync shapes:\n\n```js\nawait stealth.query(\"projects\", {\n  include: { owner: { fields: [\"id\", \"name\"] } }\n});\n```\n\nIncludes are not a policy bypass. StealthQL reads each related table as the same actor, applies that table's row policies, field masks, data-placement rules, and strips nested row handles. If a related row is not readable, a `one` relationship returns `null` and a `many` relationship omits it from the array.\n\n## Multi-Business Auth\n\nEmail is an identity credential, not the tenant boundary. A single email can belong to more than one business, so session actors include `activeOrgId`, `activeMembership`, membership-scoped `roles`, and separate `platformRoles`.\n\nNormal tenant policies should use:\n\n```js\n{ eq: [\"row.orgId\", \"actor.activeOrgId\"] }\n```\n\nRead that as: allow the row when `row.orgId` equals the actor's currently selected organization. The policy DSL is JSON-shaped so agents and tests can compile it, but each clause maps to plain authorization language: `eq` means equals, `includes` means array membership, `all` means every child rule must pass, and `any` means at least one child rule must pass.\n\nNormal tenant-admin policies should check the active membership, not a global role:\n\n```js\n{ includes: [\"actor.activeMembership.roles\", \"admin\"] }\n```\n\n## Membership Contract\n\nStealthQL apps should treat membership as a first-class auth contract, not an app-specific pile of profile columns. The generated SaaS capsule declares this contract in `authConfig.memberContract` and maps it onto the generated `users` and `memberships` tables.\n\nThe baseline contract covers identity, lifecycle, roles, and recovery factors:\n\n```js\nauthConfig: {\n  memberContract: {\n    userTable: \"users\",\n    membershipTable: \"memberships\",\n    fields: {\n      id: \"id\",\n      email: \"email\",\n      phone: \"phone\",\n      name: \"name\",\n      status: \"status\",\n      signedUpAt: \"signedUpAt\",\n      emailVerifiedAt: \"emailVerifiedAt\",\n      phoneVerifiedAt: \"phoneVerifiedAt\",\n      twoFactorRequired: \"twoFactorRequired\",\n      suspendedAt: \"suspendedAt\",\n      disabledAt: \"disabledAt\"\n    },\n    membershipFields: {\n      userId: \"userId\",\n      orgId: \"orgId\",\n      role: \"role\",\n      status: \"status\",\n      joinedAt: \"joinedAt\",\n      invitedAt: \"invitedAt\",\n      suspendedAt: \"suspendedAt\",\n      disabledAt: \"disabledAt\",\n      twoFactorRequired: \"twoFactorRequired\"\n    },\n    statuses: {\n      invited: \"invited\",\n      active: \"active\",\n      suspended: \"suspended\",\n      disabled: \"disabled\",\n      deleted: \"deleted\"\n    },\n    factors: [\"magic\", \"sms\", \"totp\"],\n    requiredFactors: 2\n  }\n}\n```\n\nRuntime actor snapshots use the same shape: `email`, `phone`, `status`, `signedUpAt`, `emailVerifiedAt`, `phoneVerifiedAt`, `twoFactorRequired`, `suspendedAt`, `disabledAt`, plus active-membership `role`, `status`, `joinedAt`, and `twoFactorRequired`. Suspended, disabled, deleted, banned, or locked accounts cannot mint new sessions. Suspended, disabled, removed, revoked, or inactive active memberships cannot mint a session for that organization.\n\nIf `twoFactorRequired` is true on the user or active membership, a single magic link is not enough to create a session. Magic-link verification returns `requiresSecondFactor: true`; the UI should collect another factor and call `stealth.auth.verifyRecoveryFactors(...)`.\n\nMagic links are for existing registered actors. A public login route should look up the submitted email against its member/user contract first, return the same generic UI response for unknown emails, and only ask StealthQL to issue a link for a known actor. Do not turn arbitrary submitted emails into actor objects for magic-link issuance. Signup is a separate provisioning flow: create/provision the actor first, then send a link to that registered actor.\n\nOAuth providers are also resolved into the same member contract. Enable providers in `stealth.auth.js`, configure exact callback/redirect origins, and set provider secrets in server-only env vars:\n\n```js\nauthConfig: {\n  hostedAuth: {\n    magicLink: true,\n    oauth: [\"google\", \"github\", \"facebook\"]\n  },\n  production: {\n    allowedOrigins: [\"https://app.example.com\"],\n    allowedRedirectOrigins: [\"https://app.example.com\"]\n  },\n  oauth: {\n    allowedCallbackOrigins: [\"https://api.example.com\"]\n  }\n}\n```\n\n```text\nSTEALTHQL_OAUTH_GOOGLE_CLIENT_ID=...\nSTEALTHQL_OAUTH_GOOGLE_CLIENT_SECRET=...\nSTEALTHQL_OAUTH_GITHUB_CLIENT_ID=...\nSTEALTHQL_OAUTH_GITHUB_CLIENT_SECRET=...\nSTEALTHQL_OAUTH_FACEBOOK_CLIENT_ID=...\nSTEALTHQL_OAUTH_FACEBOOK_CLIENT_SECRET=...\n```\n\nApp code starts the provider redirect through the runtime:\n\n```js\nconst started = await stealth.auth.startOAuth(\"google\", {\n  redirectTo: \"/dashboard\",\n  orgId: \"org_acme\"\n});\nwindow.location.href = started.url;\n```\n\nThe runtime owns `/_stealthql/auth/oauth/:provider/start` and `/_stealthql/auth/oauth/:provider/callback`, uses server-side authorization-code exchange, one-time `state`, PKCE where supported, and sets the normal `stealth_session` cookie after provider verification. OAuth does not silently create members: unknown emails are denied until the app explicitly provisions the actor. Provider identities are linked by provider subject hash; verified email is only used to find an existing member on first link. Facebook does not expose the same verified-email signal as Google/GitHub in this implementation, so email auto-linking stays off for Facebook unless you explicitly set `authConfig.oauth.providers.facebook.allowUnverifiedEmailLink = true`.\n\nWhen a magic-link email maps to multiple businesses, verification returns `requiresOrgSelection: true` until the UI supplies an org:\n\n```js\nconst pending = await stealth.auth.verifyMagicLink(token);\n\nif (pending.requiresOrgSelection) {\n  await stealth.auth.verifyMagicLink(token, { orgId: \"org_acme\" });\n}\n```\n\nIf a user cannot receive email, use a one-time recovery code instead of adding passwords or raw actor impersonation. Recovery codes are hashed at rest, short-lived, and consumed once. They can be issued by the signed-in user for themselves, an active org admin for a member in that org, local dev, or a trusted service account with `provisioning:write`:\n\n```js\nconst code = await stealth.auth.createRecoveryCode({ actor: \"bob\" });\nawait stealth.auth.verifyRecoveryCode(code.token, { orgId: \"org_beta\" });\n```\n\nFor stronger account recovery, use two independent factors. StealthQL supports magic-link tokens, SMS codes, and TOTP codes from Google Authenticator-compatible apps. Recovery only mints a session after the configured number of distinct factors verify, defaulting to two:\n\n```js\nconst sms = await stealth.auth.requestSmsCode({ actor: \"bob\" });\nconst totp = await stealth.auth.createTotpEnrollment({ actor: \"bob\" });\nawait stealth.auth.verifyTotpEnrollment({\n  enrollmentId: totp.enrollmentId,\n  code: \"123456\"\n});\n\nawait stealth.auth.verifyRecoveryFactors({\n  actor: \"bob\",\n  smsToken: sms.token,\n  totpCode: \"123456\"\n});\n```\n\nProduction SMS delivery uses the same locked-down port model as email/webhooks. Configure `STEALTHQL_SMS_WEBHOOK_URL` and optionally `STEALTHQL_SMS_WEBHOOK_ALLOWED_HOSTS`; without a live URL, SMS sends are simulated or fail closed without exposing the runtime to arbitrary outbound URLs.\n\nIn production mode, local actor impersonation stays disabled. If a trusted server route needs to provision a user session, create a magic link, or create a recovery code, use a service account with `provisioning:write` and call the auth endpoint through `createStealthServiceClient()` or an `Authorization: Bearer <service-token>` header. Anonymous callers and normal session tokens cannot bypass the local auth gate.\n\nTo re-run the database/auth setup later:\n\n```powershell\nnpm run stealth:setup\nnpm run stealth:test\n```\n\n`stealthql schema apply --test` preserves local data by default and runs tests against an isolated temporary materializer. Use `npm run stealth:reset`, `stealthql dev --reset`, or `schema apply --reset` only when you explicitly want to discard local data and rebuild from seeds.\n\n## Database Wizard\n\nRun the local runtime and open:\n\n```text\nhttp://127.0.0.1:<printed-port>/wizard\n```\n\nThe wizard supports templates and custom table setup. A non-technical user can enter table names, column names, and friendly field types like short text, long text, email, money, status, checkbox, date, and URL. StealthQL sanitizes those names into safe database identifiers, adds org-scoped auth by default, generates tenant policies, masks private fields, creates or preserves seed data, writes policy tests, backs up replaced capsule files, rebuilds the capsule, and hot-reloads the local materializer without discarding existing rows.\n\nBuilt-in wizard templates:\n\n```text\nSaaS\nCRM\nMarketplace\nContent\n```\n\n## AI Schema Import\n\nCursor, Codex, Claude Code, and other coding agents can design the schema through a machine-readable request file instead of hand-editing every capsule file.\n\n```powershell\nnpx stealthql schema spec\nnpx stealthql schema init\nnpx stealthql schema prompt --idea \"A client portal for invoices, projects, documents, and approvals\" --out STEALTHQL_SCHEMA_PROMPT.md\nnpx stealthql schema preview --file stealth.schema.request.json\nnpx stealthql schema apply --file stealth.schema.request.json --test\n```\n\n`schema init` writes:\n\n```text\nSTEALTHQL_AGENT.md\n.cursor/rules/stealthql.mdc\nstealth.schema.request.json\n```\n\n`STEALTHQL_AGENT.md` explains the StealthQL architecture to an LLM. The Cursor rule makes Cursor stop looking for GraphQL, Apollo, Prisma, Supabase, or hosted DB endpoints and use `stealthql/next/client` for browser code plus `stealthql/next/server` for server code instead.\n\n`schema prompt` writes a copy/paste-ready LLM task. Give `STEALTHQL_SCHEMA_PROMPT.md` to Cursor, Codex, Claude Code, or another coding agent; it should write `stealth.schema.request.json`, then run the preview/apply commands.\n\nThe package ships a sample at `examples/client-portal.schema.request.json`. Keep `stealth.schema.request.json` in an app root only when it is the active requested schema; stale sample requests confuse agents because the applied capsule source is `stealth.schema.*`.\n\nAn agent can change `stealth.schema.request.json` like this:\n\n```json\n{\n  \"format\": \"stealthql.schema-request\",\n  \"version\": 1,\n  \"mode\": \"custom\",\n  \"appName\": \"Client Portal\",\n  \"tables\": [\n    {\n      \"name\": \"Clients\",\n      \"columns\": [\n        { \"name\": \"Name\", \"type\": \"text\", \"required\": true, \"indexed\": true },\n        { \"name\": \"Email\", \"type\": \"email\", \"private\": true },\n        { \"name\": \"Status\", \"type\": \"status\" }\n      ]\n    }\n  ],\n  \"relationships\": [\n    {\n      \"from\": \"Projects\",\n      \"name\": \"client\",\n      \"to\": \"Clients\",\n      \"localField\": \"Client Id\",\n      \"foreignField\": \"id\",\n      \"cardinality\": \"one\",\n      \"fields\": [\"id\", \"Name\", \"Status\"]\n    }\n  ],\n  \"serviceAccounts\": [\n    {\n      \"name\": \"billing_worker\",\n      \"scopes\": [\"provisioning:write\", \"clients:read\"],\n      \"memberships\": [\"all\"]\n    }\n  ]\n}\n```\n\nApplying that request generates the schema, auth model, policies, private-field redaction, seeds, sync shapes, shares, and policy tests. The `--test` flag immediately runs policy and security checks so the agent can iterate without leaving the editor.\n\nLocal auth emulator endpoints are available immediately in dev:\n\n```text\nPOST /_stealthql/auth/sign-in-as\nPOST /_stealthql/auth/magic-link\nPOST /_stealthql/auth/verify-magic-link\nPOST /_stealthql/auth/recovery-code\nPOST /_stealthql/auth/verify-recovery-code\nPOST /_stealthql/auth/sms-code\nPOST /_stealthql/auth/totp/enroll\nPOST /_stealthql/auth/totp/confirm\nPOST /_stealthql/auth/recovery-factors\nGET  /_stealthql/auth/session\nGET  /_stealthql/auth/actor\nPOST /_stealthql/auth/sign-out\nPOST /_stealthql/auth/test-users\nPOST /_stealthql/auth/invites\nPOST /_stealthql/auth/invites/accept\nPOST /_stealthql/auth/share-token\n```\n\nLocal share pages are available at:\n\n```text\nhttp://127.0.0.1:<printed-port>/share/acmeInvoicesForBob?actor=bob\nhttp://127.0.0.1:<printed-port>/share/acmeInvoicePageForBob?actor=bob\n```\n\nShares are delegated owner grants. The owner must be allowed to create/read the shared resource, then the recipient receives only the share-scoped fields, filters, grants, expiration, revocation state, and proposal permissions. A share does not give the recipient the owner's whole org membership.\n\nShares can also become signable portals. Add a `sign` grant and a `actions.sign` contract-signature action to capture a signer name, explicit consent, and a drawn signature. The signature image is accepted as base64 input, decoded and validated as PNG/JPEG/WebP, stored in a policy-bound storage bucket, hashed, and referenced from a signed packet. StealthQL records the document hash, packet hash, capsule hash, share id, row id, signer identity, consent text, signature image hash, storage object ids, timestamp, and hashed request evidence in the ledger. Do not model signatures as base64 columns. Product copy should say this captures electronic signatures with an audit trail; do not claim every signed packet is automatically legally binding in every jurisdiction. When `lockAfterSign` is true, the row stays locked across dev sessions because signature state is runtime state, not page state.\n\nIf `consentText` or `intentText` is omitted, the generated local portal shows conservative default copy. Set either field to a string to override it, or set it to `null` to suppress that default paragraph in generated portal HTML. The `requires` array controls validation; suppressing display text does not remove the requirement for explicit consent.\n\n```js\nactions: {\n  sign: {\n    type: \"contract-signature\",\n    signatureBucket: \"signatures\",\n    documentTemplate: \"work-order-v1\",\n    documentVersion: \"1\",\n    requires: [\"fullName\", \"consent\", \"signatureImage\"],\n    lockAfterSign: true\n  }\n}\n```\n\nShares can also opt into spreadsheet round trips:\n\n```js\ncsvRoundTrip: true\n```\n\nThat enables CSV export, editing in Google Sheets or Excel, and reupload as proposal diffs. The runtime validates the CSV header, row ids, visible fields, editable fields, schema types, Unicode constraints, share expiration/revocation, and actor policy before it writes proposal events. It never performs direct spreadsheet bulk writes.\n\n```text\nGET  /_stealthql/shares/acmeInvoicesForBob/export.csv?actor=bob\nPOST /_stealthql/shares/acmeInvoicesForBob/preview-import.csv\nPOST /_stealthql/shares/acmeInvoicesForBob/import.csv\nPOST /_stealthql/shares/acmeInvoicePageForBob/sign\nGET  /_stealthql/shares/acmeInvoicePageForBob/signatures/:signatureId\nGET  /_stealthql/proposals?actor=alice\nPOST /_stealthql/shares/acmeInvoicesForBob/proposals/:proposalId/accept\nPOST /_stealthql/shares/acmeInvoicesForBob/proposals/:proposalId/reject\n\nnpx stealthql share export acmeInvoicesForBob --actor bob --out invoices.csv\nnpx stealthql share preview-import acmeInvoicesForBob --actor bob --file invoices.csv\nnpx stealthql share import acmeInvoicesForBob --actor bob --file invoices.csv\nnpx stealthql share issue-token acmeInvoicesForBob --actor alice --principal bob --email client@example.com\nnpx stealthql share read acmeInvoicesForBob --token share_...\nnpx stealthql share export acmeInvoicesForBob --token share_... --out invoices.csv\n```\n\nProposal responses use `proposalId` as the canonical identifier and include `id` as a UI-friendly alias.\n\n## Compliance Evidence Packs\n\nCompliance mappings live in `stealth.compliance.js` / `stealth.compliance.mjs`. Use them to map tables, storage buckets, shares, functions, and data classes to evidence controls such as SOC 2 CC7, HIPAA Security Rule sections, and GDPR Articles 30/32.\n\n```js\nexport default {\n  dataClasses: {\n    financial: {\n      controls: [\"soc2.CC7.2\", \"gdpr.Art30\", \"gdpr.Art32\"],\n      aiReadable: false,\n      retention: \"7y\"\n    }\n  },\n  tables: {\n    invoices: {\n      dataClasses: [\"financial\"],\n      controls: [\"soc2.CC7.2\", \"soc2.CC8.1\", \"gdpr.Art32\"],\n      purpose: \"Customer billing records\"\n    }\n  }\n};\n```\n\nGenerate an evidence bundle from the compiled capsule and hash-chained ledger:\n\n```powershell\nnpx stealthql audit-report --framework soc2-cc7 --out evidence/soc2-cc7\nnpx stealthql audit-report --framework hipaa-security --json\nnpx stealthql audit-report --framework gdpr --since 2026-01-01\n```\n\nThe command writes `report.json`, `report.md`, `compliance-manifest.json`, `ledger-summary.json`, `control-evidence.json`, and `gaps.json` when `--out` points to a directory. These are compliance-readiness evidence packs, not automatic certification or legal advice; manual evidence like training, vendor agreements, risk assessments, and auditor judgment still belongs outside the capsule.\n\n## Backend Snapshots\n\nA StealthQL backend can be captured as a portable time-capsule artifact: capsule sources, compiled capsule, generated client files, and the hash-chained ledger prefix up to a chosen timestamp.\n\n```powershell\nnpx stealthql snapshot create --as-of 2026-05-01T14:00:00Z --out snapshots/bug-123.stealthql-snapshot.json.gz\nnpx stealthql snapshot inspect snapshots/bug-123.stealthql-snapshot.json.gz\nnpx stealthql snapshot restore snapshots/bug-123.stealthql-snapshot.json.gz --out tmp/bug-123-repro\n```\n\nRestores place the ledger under `.stealthql/events.ndjson` for local runtime migration, plus a `snapshot-restore.json` receipt. V1 snapshots intentionally focus on the capsule plus ledger; storage blob inclusion is reserved for a later artifact format. The restored project can be materialized with `npx stealthql dev`.\n\nHistorical reads can query the ledger-backed state as of a timestamp:\n\n```powershell\nnpx stealthql query invoices --actor bob --as-of 2026-05-01T14:00:00Z --format table\n```\n\nThe V1 policy mode is `current-policy-over-historical-data`: StealthQL reconstructs historical rows from seeds plus mutation events, then applies the current capsule policies and field masks. Historical query results do not include mutation handles.\n\n### Local Event Inspection\n\n`GET /_stealthql/events` is local-only and admin-only. In local mode it is an inspection surface over the raw ledger so admins can debug policy decisions, share access, SQL commands, mutations, storage events, side-effect ports, AI-port denials, and MCP activity. The ledger is not exposed as a normal SQL table such as `_stealth_events`; use the local events endpoint, `npx stealthql audit`, or typed audit/report commands instead. Ordinary `stealth.query(...)` reads are intentionally not logged as ledger events; use SQL/share/audit/mutation/function events for evidence. Production deployments should keep event inspection blocked or expose only tenant-filtered audit summaries.\n\n## Personal Beta Runbook\n\nFor personal self-hosted beta use, run the readiness gate:\n\n```powershell\nnpx stealthql deploy self\n```\n\nIt checks the capsule hash, durable PGlite materialization, ledger hash-chain integrity, bundled function integrity, the production actor boundary, private runtime data location, and `.gitignore` protections. It also warns about declared-but-not-yet-productionized subsystems like storage buckets and live side-effect ports.\n\nFor a fresh DigitalOcean Droplet, use the hardened Ubuntu bootstrap runbook:\n\n```text\ndocs/DIGITALOCEAN_DEPLOYMENT.md\nscripts/digitalocean-ubuntu-setup.sh\n```\n\nThe Droplet script supports `plan`, deploy, and `doctor` modes. It keeps runtime state in `/var/lib/stealthql/<app>`, records the owning `stealth.project.json` id in `/etc/stealthql/<app>.owner.json`, keeps secrets in `/etc/stealthql/<app>.env`, stores source releases under `/opt/stealthql/releases/<app>`, and uses nginx as the only public entrypoint. A later GitHub deploy with a different project id fails instead of reusing the same data directory. Agents should fill in variables and run the script, not improvise root-level server setup.\n\nFor the common split where Vercel hosts the Next.js frontend and DigitalOcean hosts only the capsule runtime, use:\n\n```powershell\nnpx stealthql deploy split --frontend-url https://app.example.com --backend-url https://api.example.com --write\n```\n\nThat plan validates the generated `/api/stealthql/*` proxy, checks production auth origins, prints the Vercel env vars plus DigitalOcean bootstrap variables, and with `--write` creates copy-paste deployment files in the app repo. The full runbook is `docs/VERCEL_DIGITALOCEAN_SPLIT.md`.\n\nFor the simplest one-machine deployment, put the Next.js website and capsule runtime on the same Droplet:\n\n```bash\nnpx stealthql deploy\n```\n\nChoose `DigitalOcean only` in the prompt, or run the direct command:\n\n```bash\nnpx stealthql deploy single --url https://app.example.com --repo https://github.com/you/your-app.git --write\n```\n\nThe generated server command uses:\n\n```bash\nAPP_REPO=\"https://github.com/you/your-app.git\" \\\nAPP_NAME=\"my-app\" \\\nDOMAIN=\"app.example.com\" \\\nLETSENCRYPT_EMAIL=\"you@example.com\" \\\nDEPLOY_WEB=true \\\nRUN_SECURITY_TESTS=true \\\n/root/stealthql-do-setup.sh\n```\n\nIn that mode nginx proxies public traffic to Next.js on `127.0.0.1:3000`, and the generated Next proxy calls StealthQL privately on `127.0.0.1:8787`. See `docs/DIGITALOCEAN_SINGLE_DROPLET.md`.\n\nPrivate runtime state does not live in the project by default. Local database state, auth emulator tokens, ledgers, and storage blobs are stored under the OS app-data directory, such as `%LOCALAPPDATA%\\StealthQL\\projects\\<project-key>` on Windows. You can override this with `STEALTHQL_DATA_DIR`, but it must point outside the repo and outside deploy artifacts. StealthQL writes a `runtime-manifest.json` beside that private state and refuses to boot if the materialized projection suddenly has fewer/different row ids than the last manifest recorded. That protects every host app, not only dashboards, from silently accepting a fresh projection as truth. On DigitalOcean, non-empty data directories without an owner manifest require a one-time `STEALTHQL_CLAIM_EXISTING_DATA=true` after you verify the data belongs to the checked-out project.\n\nThe repo should contain source capsule files like `stealth.schema.mjs`, `stealth.auth.mjs`, `stealth.functions.mjs`, `stealth.storage.mjs`, `stealth.sync.mjs`, `stealth.shares.mjs`, `stealth.compliance.mjs`, `stealth.database.mjs`, `stealth.jobs.mjs`, and `stealth.policy.test.mjs`. Generated/private artifact folders are ignored:\n\n```text\n.stealthql/\nstealthql-export/\nbackups/\n```\n\nBackup and restore are explicit:\n\n```powershell\nnpx stealthql backup --out backups/my-app\nnpx stealthql backup drill --from backups/my-app\nnpx stealthql ledger verify\nnpx stealthql doctor projection\nnpx stealthql doctor projection --repair --force\nnpx stealthql restore --from backups/my-app --force\nnpx stealthql migrate preview\nnpx stealthql migrate drift\nnpx stealthql migrate apply\n```\n\nFor production buyers, use managed Postgres instead of the default local PGlite materializer:\n\n```bash\nSTEALTHQL_MATERIALIZER=postgres \\\nSTEALTHQL_DATABASE_URL=\"postgres://user:password@host:5432/db\" \\\nnpx stealthql migrate drift --materializer postgres --database-url \"$STEALTHQL_DATABASE_URL\"\n```\n\nThe Postgres path uses `pg` pooling, migration receipts, guarded rollback SQL for additive migrations, drift checks against `information_schema`, and `pg_dump` backup plans through `npx stealthql backup postgres-plan`. PGlite remains the local/self-host beta default: single-process lock, local filesystem durability, and no managed PITR/read-replica/multi-instance guarantees. See `docs/POSTGRES_PRODUCTION.md`.\n\nShare and spreadsheet edits land in a proposal inbox. The dashboard shows pending proposals, and the API exposes accept/reject endpoints so CSV imports never mutate source data without approval. Public share portals should be opened with a `share_token` URL once; the runtime then redirects to a clean URL and uses a share-scoped HttpOnly cookie for proposal, export, and import requests. Hosted share pages should not post raw `actor` values.\n\nStorage buckets are now policy-enforced locally:\n\n```powershell\nnpx stealthql storage put projectFiles --actor alice --key docs/a.txt --file a.txt --org-id org_acme\nnpx stealthql storage list projectFiles --actor alice\nnpx stealthql storage get projectFiles --actor alice --key docs/a.txt --out a.txt\n```\n\n`storage get` requires `--out` by default. Use `--stdout` only when intentionally piping raw bytes.\n\nProduction side-effect ports can run live by pointing them at explicit webhooks:\n\n```powershell\n$env:STEALTHQL_EMAIL_WEBHOOK_URL=\"https://example.com/email\"\n$env:STEALTHQL_WEBHOOK_URL=\"https://example.com/webhook\"\n$env:STEALTHQL_PAYMENT_WEBHOOK_URL=\"https://example.com/payment\"\n$env:STEALTHQL_WEBHOOK_ALLOWED_HOSTS=\"example.com\"\n```\n\nProduction outbound URLs are SSRF-guarded. Webhook ports require public HTTPS targets on port 443 and block loopback, private ranges, link-local metadata, URL credentials, non-HTTP schemes, IPv4 encoding tricks, IPv6-mapped private IPs, IDN/punycode hostnames, wildcard DNS helpers, and DNS rebinding. Optional host allowlists are available through `STEALTHQL_EMAIL_WEBHOOK_ALLOWED_HOSTS`, `STEALTHQL_WEBHOOK_ALLOWED_HOSTS`, and `STEALTHQL_PAYMENT_WEBHOOK_ALLOWED_HOSTS`. Private webhook targets are not allowed in production port delivery; use an explicit internal service path instead of relaxing SSRF checks. The Next proxy also validates server-only `STEALTHQL_URL`; it allows loopback for local/single-Droplet mode and public HTTPS for split deployments, while blocking metadata/private targets unless `STEALTHQL_ALLOW_PRIVATE_PROXY_URLS=true` is deliberately set.\n\n## Production Auth Profile\n\nAuth assumptions are part of the capsule, not deployment folklore. Add or edit `authConfig` in `stealth.auth.js`:\n\n```js\nauthConfig: {\n  mode: \"capsule-native\",\n  sessions: {\n    cookieName: \"stealth_session\",\n    sameSite: \"Lax\",\n    secureCookies: true,\n    accessTokenMinutes: 60,\n    refreshTokenDays: 30,\n    refreshTokenRotation: true\n  },\n  csrf: {\n    requireOriginForUnsafeMethods: true\n  },\n  production: {\n    requireHttps: true,\n    allowedOrigins: [\"https://your-app.example\"]\n  },\n  oauth: {\n    allowedCallbackOrigins: [\"https://your-app.example\"]\n  }\n}\n```\n\nThe compiler rejects unsafe profile values. `npx stealthql deploy self` blocks production readiness until secure cookies, same-origin CSRF gating, HTTPS requirements, refresh-token rotation, and explicit production origins are configured.\n\n## What Exists Now\n\nThis is not a hosted backend service yet. It is the runtime-system skeleton:\n\n- A deterministic capsule compiler.\n- A signed capsule hash.\n- Bundled function source with live-source hash verification in local dev.\n- A generated local client in `.stealthql/client.js`.\n- An ownership export command that copies source definitions, capsule, generated client, local state, and ledger into a portable bundle.\n- A local materializer that runs reads and writes through PGlite, with `local-state.json` kept in the private runtime-data directory as an export/debug mirror.\n- Durable local PGlite state under the private runtime-data directory.\n- Backup, restore, and ledger hash-chain verification commands.\n- Migration preview/apply commands for additive schema changes, with destructive changes blocked unless forced.\n- Policy-enforced local storage materialization with file blobs and metadata included in backups.\n- Configurable production side-effect ports for email, SMS, webhooks, payments, and policy-guarded AI calls.\n- A self-deploy readiness command for personal beta deployments.\n- A local Auth Kernel with fake sessions, magic links, recovery codes, invites, test users, share tokens, bearer-token resolution, and auth audit events.\n- A production-safe Actor Resolver boundary: non-local modes reject raw `actor` request values unless a verified credential is provided.\n- A stress harness that runs auth, SQL reads, concurrent mutations, shares, HTTP routes, and ledger hash-chain verification in a temporary capsule copy.\n- A one-command Next.js setup path that adds a SaaS database/auth blueprint, `.mjs` capsule files, scripts, env defaults, a same-origin API proxy, a demo page, and a local database materialization.\n- A local database setup wizard at `/wizard` for template-based or custom table/column setup with secure generated auth, policies, seeds, and tests.\n- A machine-readable AI schema import workflow through `STEALTHQL_AGENT.md`, `stealth.schema.request.json`, and `stealthql schema apply --test`.\n- Schema-declared indexes emitted into the local materializer.\n- Schema-declared full-text search indexes emitted as PGlite/Postgres GIN indexes, exposed through `stealth.search(...)` and `/_stealthql/search`.\n- Read policies compiled into SQL predicates instead of post-query JS filters.\n- Prepared read plan caching and result caching with table invalidation.\n- Shape-first reads through `/_stealthql/shape?shape=myProjects&actor=alice`.\n- Ledger-backed table invalidation for cached query results.\n- A share layer compiled into the capsule through `stealth.shares.js`.\n- Local table shares as grids and row shares as record pages.\n- Read-only and proposal share modes.\n- Share field projection, explicit masks, expiration, runtime revocation, access audit, and proposal diff events.\n- `csvRoundTrip: true` shares with CSV export/import for Google Sheets and Excel workflows, validated into proposal events.\n- Compliance evidence packs compiled from `stealth.compliance.*`, the capsule, policy metadata, and the hash-chained ledger.\n- AI port enforcement through `ctx.ports.ai.complete/embed/classify`, with provider-class placement controls, redacted extracts, and ledger-recorded blocked attempts.\n- A dashboard proposal inbox with approve/reject actions for shared and spreadsheet edits.\n- Query profiles showing materializer, duration, rows scanned/returned, cache hit, plan hit, and index/search estimate.\n- A constrained policy evaluator shared by reads, writes, functions, tests, sync declarations, and storage declarations.\n- A SQL adapter for simple `SELECT`, `INSERT`, `UPDATE`, and `DELETE` statements over the same policy/mutation runtime.\n- A security test runner covering cross-tenant access, field write policies, SQL policy bypass attempts, Unicode/control-character fuzz cases, duplicate-key/duplicate-column cases, prototype pollution, dashboard XSS rendering, local CORS, body limits, and event log access.\n- An append-only ledger in the private runtime-data directory.\n- Ledger redaction driven by the data visibility contract.\n- Simulated side-effect ports for email and webhooks.\n- A local dashboard.\n\nThe current local materializer uses persistent PGlite as the query engine and mirrors state to JSON for export/debug outside the repo.\n\n## Strategy Docs\n\n- [Open-core strategy](docs/OPEN_CORE_STRATEGY.md)\n- [Capsule spec](docs/CAPSULE_SPEC.md)\n- [Coordination layer](docs/COORDINATION_LAYER.md)\n- [Vite and non-Next integration](docs/VITE_INTEGRATION.md)\n- [Repository split](docs/REPO_SPLIT.md)\n","readmeFilename":"README.md"}