{"_id":"@bitsocial/ai-moderation-challenge","_rev":"20-96642b7be64e09b75def60285fec9fab","name":"@bitsocial/ai-moderation-challenge","dist-tags":{"latest":"0.5.1"},"versions":{"0.1.0":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.0","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.0","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"cf4b3da988f820d8eaf1983f99d175be910bf640","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.0.tgz","fileCount":9,"integrity":"sha512-oM6NWVWEqXOYJQOUuxn/qnCZT46TdWBJDfxGfwX6Fr/TovsKNmDlUsalhE2IkqbbLXyF8HR8F1a7EHgom2mBnQ==","signatures":[{"sig":"MEUCIDC/9+UGQ3ngK0aphp3gYWjgvh5pKlEin6CbD2E3ioCmAiEA+2NfAtP9YineF0wXjy/Sx98fgy3xbTQ22EyFow/RR6w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102015},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"5438bba969b36165cb2eca87afc075d477950b64","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check ."},"_npmUser":{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.6.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-js":"0.0.18","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.0_1776838542591_0.130261743664579","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.1","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.1","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"bc56d54905fda437b8127a626627276a851e898f","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.1.tgz","fileCount":9,"integrity":"sha512-wYeKXZx08I1dw6Kh6jD1SA8W738JC03BbmZqpmJA5QzvLQD5Mnf0GJ/nBhOeAnJNuBD0KS9Uf80iOvFS1B56ew==","signatures":[{"sig":"MEUCIAtpVY0H+HZPpsLHt5uhqczHwfPXxJRGZv8UW4ESGvKsAiEAhB/UHOHN7+gZ2NjVDAT96tiuGNmhgIAqSXryVsJOEnc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112045},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"26791c7760cf1f72767a2f6666e02995c72c91f0","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check ."},"_npmUser":{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.6.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-js":"0.0.18","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.1_1776839371692_0.3707711564744931","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.2","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.2","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"db272ccae7172ebb715a5a23d9a4a7118a97be36","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.2.tgz","fileCount":9,"integrity":"sha512-5tEoikf0gxzZaII+NJGk2LEgodon/x7TG1Ztj1IiR2ejriFXwEMuClI4nSNDwtnl790tySQWr5igF/adAxqhsg==","signatures":[{"sig":"MEYCIQD9GynpFUuuS0MnhA4egTwHHOtnsy6bkiquvPtc0VuyCAIhANazcU34m8zWZlDElFvlarid/dx22WAaR2LSUa60RuWp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135089},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"4f4bf459129e36b79a6b1a46b9a87812282c92f5","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.13.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.27","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.2_1778063550853_0.4626521350666237","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.3","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.3","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"c7435b47585ff6a43c4b2c9f9128015b47a8ea6e","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.3.tgz","fileCount":9,"integrity":"sha512-NIm3cr0hGrDC+w4WfHWvx6N0dHTdMuS8hNX/z2TJmYiqfnFOhDGO1UlZMTy+nmXPCergTJ2nVlj4dMFo8/MRTw==","signatures":[{"sig":"MEUCICeJI30Is3C5TmmOPkf49T1xqhZctNoketGkZv0aM6A3AiEA0RsTWXaqHzkMUErqX68uu+H/37OJd/UUWmONWCWxcE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142616},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"806a7e050ce653d868b24c3e0213ac167e23bf92","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.14.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.29","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.3_1778146068658_0.26357269520543447","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.4","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.4","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"df67141471f216cab8ad431a2fb1d5fc65959145","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.4.tgz","fileCount":9,"integrity":"sha512-ldqyxxa0xg3PL9x3fIxHcxPhAJ3iQraz/98AYpK/vwGWlOa14b3PGHsCmzbHQNlW83hA9uWeSY9AEuI2AiS1dA==","signatures":[{"sig":"MEQCIGN2sMw6mJqsEk21sKUYYjhy71YM2AOtCofCOwR+siBvAiA61yV/vgwaJqHZskbKprGwEG+jawbw1+sbJ8/V3zQBLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":161194},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"570ccb0dfe4d8411f1aa8a4b3d9270306b894d5b","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.15.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.20.1","ws@npm:^8.18.3":"npm:8.20.1","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.15.2","uuid@npm:^11.0.0":"npm:11.1.1","undici@npm:6.22.0":"npm:6.25.0","basic-ftp@npm:^5.0.2":"npm:5.3.1","ip-address@npm:^10.0.1":"npm:10.1.1","protobufjs@npm:^6.10.2":"npm:7.5.8","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@libp2p/gossipsub@npm:15.0.21":"npm:15.0.23","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.15.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.29","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.4_1779446666922_0.3801857797049859","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.5","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.5","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"628641a2225dc14f218c5c1081b22dd91e2e5b10","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.5.tgz","fileCount":9,"integrity":"sha512-yMfXTbDrgs2h6K6VnLMHlQIBgHYT0xh5jZmCDzRNIydwh7P10diku1B/ZVT/+xNgWQocrvge+A+sKVDIupZvbw==","signatures":[{"sig":"MEQCIHzFIXY8u3qp7kt4GKouDSl7zDBSyxJNdtcy3CAnSycfAiAda2tZaDUopmVQFfE+PZcjSyYQjRQYkAV8PuDkvHMKjg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":180307},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"d2141b8f223ac1898f0927cd1d26e13c30c156eb","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.15.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.20.1","ws@npm:^8.18.3":"npm:8.20.1","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.15.2","uuid@npm:^11.0.0":"npm:11.1.1","undici@npm:6.22.0":"npm:6.25.0","basic-ftp@npm:^5.0.2":"npm:5.3.1","ip-address@npm:^10.0.1":"npm:10.1.1","protobufjs@npm:^6.10.2":"npm:7.5.8","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@libp2p/gossipsub@npm:15.0.21":"npm:15.0.23","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.15.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.36","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.5_1779534224126_0.1377058823454571","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.6","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.6","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"e92a28985eca2c02955df21613b773a4577add2d","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.6.tgz","fileCount":9,"integrity":"sha512-TRLN0dpEVKs0EX3Pj+cQO2J1RcDTTh4iTaRw7bYFk3gdkdHoum0pNcMEPJapLdM/BU5+2TCEHx4nzz58G+VB+Q==","signatures":[{"sig":"MEUCIQDfnkxYOz/pzEJn0D2UvUhiJ4tmY80UviTXl2to9Smd2gIgMsmuVo/JdajbABbahau6hg1mPyt5J2Xuc8ELb3sjRog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":181711},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"26841e01699deb2793dc7ef78e50c1f7db4d88d7","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.15.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.20.1","ws@npm:^8.18.3":"npm:8.20.1","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.15.2","uuid@npm:^11.0.0":"npm:11.1.1","undici@npm:6.22.0":"npm:6.25.0","basic-ftp@npm:^5.0.2":"npm:5.3.1","ip-address@npm:^10.0.1":"npm:10.1.1","protobufjs@npm:^6.10.2":"npm:7.5.8","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@libp2p/gossipsub@npm:15.0.21":"npm:15.0.23","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.15.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.37","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.6_1779551939836_0.9978082073142214","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.7","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.7","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"e162983f11631fe37856f664b66803c89c54833e","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.7.tgz","fileCount":9,"integrity":"sha512-CbQG/LbhRlKPtupiP5RNYMFYdL8o00STjfkPJAK2X68TB76tJ0o9bMZX0W3UMkTX8dsmVMKIo1hx+kBUqgHzyg==","signatures":[{"sig":"MEUCIEk+EgrL1xQcD0+wSyaWPUWa4Ug4yvMTFawV0Kxv0jzzAiEAr2C1QLxxG0mYiaK1uQSdrZ8tU04Gj6W0s2v4bi59ZNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":203109},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7fceea3f67c84520313adcefbaf3c452978976d6","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.16.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.20.1","ws@npm:^8.18.3":"npm:8.20.1","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.15.2","uuid@npm:^11.0.0":"npm:11.1.1","undici@npm:6.22.0":"npm:6.25.0","basic-ftp@npm:^5.0.2":"npm:5.3.1","ip-address@npm:^10.0.1":"npm:10.1.1","protobufjs@npm:^6.10.2":"npm:7.5.8","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@libp2p/gossipsub@npm:15.0.21":"npm:15.0.23","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.16.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.37","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.7_1780576013958_0.523989399618241","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.8","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.8","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"e8b7a3caa778e70d02e9109c90846979eab38a60","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.8.tgz","fileCount":9,"integrity":"sha512-8nVOOsFXIPm5WDM2NB4LwbstQFG3yiuesCpBkUKN6wY22NCUD1idvJOOXybXnV3kaDIpSM6gzhKR/2UDH1qgag==","signatures":[{"sig":"MEUCIQC0PhSRQ1kiaCTSe7sC87weQDLxn/lyWO4Vluy8/lDJRQIgX19t5Reb7+csXkbJDisPix59bXvnDBIWlkgggu+v22s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":208880},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"304790cfe7f4b642b676011eaac4cf120718eb65","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.16.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.20.1","ws@npm:^8.18.3":"npm:8.20.1","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.15.2","uuid@npm:^11.0.0":"npm:11.1.1","undici@npm:6.22.0":"npm:6.25.0","basic-ftp@npm:^5.0.2":"npm:5.3.1","ip-address@npm:^10.0.1":"npm:10.1.1","protobufjs@npm:^6.10.2":"npm:7.5.8","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@libp2p/gossipsub@npm:15.0.21":"npm:15.0.23","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.16.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.37","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.8_1781100827429_0.5566731965400438","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.9","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.9","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"4aefb0aca680375e966d2091521ea91743ccde79","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.9.tgz","fileCount":9,"integrity":"sha512-6T8coYLPC2F5orSjYWIJvYCbxmfwk8zb2W7q5HxXRHCWc6HTxS9X/YJK/LdyWUQHbdXoIUbKZjsCi84rovhYvg==","signatures":[{"sig":"MEQCIDzTtJVXcDmblhOIcF6tfr7oKg2ur6jzAgEG1iXfIpmgAiBdKjgamLGFYexZ1j6SoFhjb2ybJrsRPnR6Lk8w24IOYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215207},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"86e4a90280e23e883f095e045574b9c1657c5709","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.17.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.20.1","ws@npm:^8.18.3":"npm:8.20.1","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.15.2","uuid@npm:^11.0.0":"npm:11.1.1","undici@npm:6.22.0":"npm:6.25.0","basic-ftp@npm:^5.0.2":"npm:5.3.1","ip-address@npm:^10.0.1":"npm:10.1.1","protobufjs@npm:^6.10.2":"npm:7.5.8","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@libp2p/gossipsub@npm:15.0.21":"npm:15.0.23","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.16.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.37","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.9_1781420605234_0.27793663182592976","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.10","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.10","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"f68d52dd0e649c7a1c80e49699d1ef134dd9e9fa","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.10.tgz","fileCount":9,"integrity":"sha512-AZrJGU8CROevPaYh831/kxQxKv6BdiqD+oxEwMWpGAkNc7TQo3cFGDbn8urRJvC3HgkaXlksvtKjqIINzj2w3w==","signatures":[{"sig":"MEUCIQCRg+uaLYYm3PaQ1rT3qn+xkpn74oWm+Bjy5UT9r5QlYQIgLvgSe1ibMl8xFD2kiFveFcA7Qun+ndiw7Zim+PlELcM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":219656},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0cf57cfc7f8b2ab52f1bccf89afd715e54bda351","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"11.18.0","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.20.1","ws@npm:^8.18.3":"npm:8.20.1","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.15.2","uuid@npm:^11.0.0":"npm:11.1.1","undici@npm:6.22.0":"npm:6.25.0","basic-ftp@npm:^5.0.2":"npm:5.3.1","ip-address@npm:^10.0.1":"npm:10.1.1","protobufjs@npm:^6.10.2":"npm:7.5.8","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@libp2p/gossipsub@npm:15.0.21":"npm:15.0.23","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","prettier":"3.8.1","release-it":"19.2.3","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.37","@vitest/coverage-v8":"4.0.16","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.10_1783332911937_0.0810208708148712","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.11","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.11","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"e5da1724b8be6362abad921162e06f46e53fd92a","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.11.tgz","fileCount":9,"integrity":"sha512-XdI3/SSAhOlUFn4R5/Alh3DzFuaEkLGqMptLGBrME+MM/IInPZtbPmXFubu6mHelcGGD11YIM9OzvWhco08wdQ==","signatures":[{"sig":"MEYCIQCwVk0p7pdhkeUGr2Z5UYcLDBkAP3k0DCUZGSDlauUdeAIhAIMJMGNSyCfzYZSi1YkQi8VtSAxLrWPx3pDRP7tOQMpb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":233826},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"e75e70257c14e9065b5adba4556e3d99d6248f2e","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:^8.0.3":"npm:8.9.0","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","prettier":"3.8.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.37","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.11_1786637144603_0.3753214354604091","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@bitsocial/ai-moderation-challenge","version":"0.1.13","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.1.13","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"a53154be3ccfe371fea3cf7ad863e609ed4a308f","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.1.13.tgz","fileCount":9,"integrity":"sha512-JygU66AquVl4Oedzg1xEN4KeDctYL83WtxZ5SwWHtzrAkNfZJMbDDflP+h8SjwxG40OYGX3nauHLpRU9dxSo8w==","signatures":[{"sig":"MEYCIQDb0ZXZwF4h6rf2II8XQvsVUszLhvI6IWfuT95rliq1lwIhAOf214FPowkgIE0OdXjqj9fQdIoO6ySi/o3gLBmkXFnu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":244155},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7f2c260ae1dbe366f5cadcd24763c72244aba830","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:^8.0.3":"npm:8.9.0","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","prettier":"3.8.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.37","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.1.13_1787243873918_0.3778179880011947","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bitsocial/ai-moderation-challenge","version":"0.2.0","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.2.0","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"b5caeac7a0c58033be78dd4bca33cbb3fa69b9c1","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.2.0.tgz","fileCount":9,"integrity":"sha512-KgBH9wXj+O17Y9m8PWw22jVLl/o8DEc0yq+t1dgkNEY6FYgUyrGnGD5DlHxckA27WlVw1BIN9G1toQk47x06WA==","signatures":[{"sig":"MEUCIQC8jazabu5hLNrM5EJ/kdZBdm9m8P/RHNiOGt0BnTEzXAIgeeNjsq5fq41RtnjFR7sNYsT5yS9QUdBXo1cPI2M9utE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":248992},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"1185cfb8a245b6b913d49826d0e5ffb2618296e9","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:^8.0.3":"npm:8.9.0","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","prettier":"3.8.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.85","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.2.0_1787373682297_0.48288888639660366","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bitsocial/ai-moderation-challenge","version":"0.2.1","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.2.1","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"72a373417cf9b452e2f20267136c19b484c2a93c","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.2.1.tgz","fileCount":9,"integrity":"sha512-4iXMGXXcEPZBhfA+qGaVwmZtb8jyy0R6HT0JAIYUFVr/hTdQB2uPWoTkAev3Aa/WPGjFAJdEAKkxFBNz9ORWiw==","signatures":[{"sig":"MEQCIAVpZXGQuDdsmTPXt4CEuvR3UdKaPArxY3tDUOsrmzJ2AiAephIDljF3RLe0LZR9SbAElkMQrzEP0gSVOOrodH4/fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":248992},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"78bcf3df68ba02a9ca51ef253e9311a2532cd948","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:^8.0.3":"npm:8.9.0","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","prettier":"3.8.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.85","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.2.1_1787585924786_0.1030635651205285","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bitsocial/ai-moderation-challenge","version":"0.3.0","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.3.0","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"1e0db0ee44abcf270d3cf1418737c2a5a279f9f4","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.3.0.tgz","fileCount":9,"integrity":"sha512-M4LJpvqcdrIMjxCFgLT3dedimy9bvVMVR5XZRPSi/sKq7QkohmxESvARixffU/JcGStLGraxg6ZFIxOrFOTwGw==","signatures":[{"sig":"MEUCIQC/LI2A8rkasLMXDk2Tm/7E78g/YbRHtEj5JqGdPncueQIgd6gzREUlhHkjzv+tpbVtwoHBaqbLLSUvf8Cj3n0ejXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":270780},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"3b4543507f9ce620b73ee49a5321b52679958e2c","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:^8.0.3":"npm:8.9.0","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","prettier":"3.8.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.85","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.3.0_1788387345819_0.6822539154224112","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bitsocial/ai-moderation-challenge","version":"0.3.1","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.3.1","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"30fc62bdcecfd6f22b9657dc5514ec0f5f80e4f2","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.3.1.tgz","fileCount":9,"integrity":"sha512-wh+qMSIxXQEjAhzTZA/q78VB7EufNHryLH/jqxbZ/oD+tRRdByCH7eNKqmQ2oZX5BoPJBGmq6nc0+zDayoNUqQ==","signatures":[{"sig":"MEUCIQCfg7sgM1aGEMq4FHSexNXiS0XM941O+LhE3uJUPToeEAIgQACfp4XQ8goqZqTWXloetfyrkd6PoXBxCjp1tRlV3l8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBb/YCW2xVcZ9doR1HuA/sRRH39170c0VjVU6Wt/iuiuAiEAhNh1pf+ClGPZ4BfKaX9aLCtawJtRGZQMT0+rZNmUjXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":272215},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"a8648ac7a69373a54b12dec56d20c013d465503d","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:8.20.0":"npm:8.21.0","ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","nanoid@npm:^5.0.7":"npm:5.1.16","nanoid@npm:^5.1.5":"npm:5.1.16","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:7.24.7":"npm:7.29.0","undici@npm:^8.0.3":"npm:8.9.0","nanoid@npm:^3.3.16":"npm:3.3.18","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.20.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","prettier":"3.8.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.85","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.3.1_1788620390123_0.92672854328429","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bitsocial/ai-moderation-challenge","version":"0.4.0","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.4.0","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"896adede550450613636687bc8ed9696ed879d75","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.4.0.tgz","fileCount":13,"integrity":"sha512-KhDNEkxejkVMgD7QNGpTRb3IAkx1CvGlRvB+r7db7H7O7pOVpC8ilKSOm6HGd8+m/pVwhCDxlS+PQXXgxQ6XGA==","signatures":[{"sig":"MEQCIAruzQCX3ESfky54jj7dlwajc8ZFvoDcXP30QDGEkVE6AiA1vckYb6VG0p6uabavgMvPV9udF9Wd/LiKmudDGKho9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICiYYidzuqM0HJ07DPseCVCmmInjVBI3aF25USkl3aelAiA0BI4daB4lszU+K2wAakAq1qR/jnKaMCVJxuVktwRZ2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":315899},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0059c723ba4734167fb30732a90faa7cf8bf8cd1","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs","ai-workflow:sync":"node scripts/sync-ai-workflow.mjs","ai-workflow:test":"node --test scripts/__tests__/ai-workflow.node-test.mjs scripts/__tests__/agent-hooks.node-test.mjs","ai-workflow:check":"node scripts/validate-ai-workflow.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:8.20.0":"npm:8.21.0","ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","nanoid@npm:^5.0.7":"npm:5.1.16","nanoid@npm:^5.1.5":"npm:5.1.16","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:7.24.7":"npm:7.29.0","undici@npm:^8.0.3":"npm:8.9.0","nanoid@npm:^3.3.16":"npm:3.3.18","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.20.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","js-yaml":"4.3.1","prettier":"3.8.1","smol-toml":"1.6.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.85","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.4.0_1789736894480_0.15051505808410126","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bitsocial/ai-moderation-challenge","version":"0.5.0","keywords":["bitsocial","pkc","challenge","moderation","ai"],"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","_id":"@bitsocial/ai-moderation-challenge@0.5.0","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"f14e23e44bbaec4575a715f3607b14cb58ff9c3b","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.5.0.tgz","fileCount":15,"integrity":"sha512-lFs8ZtEKGeduJOnpcFIyFFfSiEoh1MUr080Zsl69MDCuvzuqo7JMBZ03MZ3FGtulhxAhZarWqBvi4h4MpCn7/g==","signatures":[{"sig":"MEUCIFGzil7Xjs0I4sE+oAe90sBOCie9oFXQMXq8msxdFOgpAiEAvMy8wHWMotXR9hTAFdEPIl8ma16rT+MGU14xuZ+g/Zo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDqg7pxgEQQQBs969+Sawnood9VUQ40qv+LwW5o2ihRggIhAPmdJIqWNwHnJvXAuyWxkVUZPOInU9EDxqYhZ19KhMNL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":330460},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"491effd431919238d63430626f197a0f3f9aec84","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs","ai-workflow:sync":"node scripts/sync-ai-workflow.mjs","ai-workflow:test":"node --test scripts/__tests__/ai-workflow.node-test.mjs scripts/__tests__/agent-hooks.node-test.mjs","ai-workflow:check":"node scripts/validate-ai-workflow.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"resolutions":{"ws@npm:8.20.0":"npm:8.21.0","ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","nanoid@npm:^5.0.7":"npm:5.1.16","nanoid@npm:^5.1.5":"npm:5.1.16","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:7.24.7":"npm:7.29.0","undici@npm:^8.0.3":"npm:8.9.0","nanoid@npm:^3.3.16":"npm:3.3.18","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.20.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","js-yaml":"4.3.1","prettier":"3.8.1","smol-toml":"1.6.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.85","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-moderation-challenge_0.5.0_1789769321677_0.7261333675419455","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"_id":"@bitsocial/ai-moderation-challenge@0.5.1","bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"dist":{"shasum":"1419dab396e8a73fd22c8058efa0230b1348361b","tarball":"https://registry.npmjs.org/@bitsocial/ai-moderation-challenge/-/ai-moderation-challenge-0.5.1.tgz","fileCount":15,"integrity":"sha512-YSybLMoo7vpNDwlbQxudc3Au07hUfuQjs6kzC1c7Ndgu80BSIdr8rHaj5hq0FQg0ZipY9AvMnCjVxFmvSTlZFg==","signatures":[{"sig":"MEQCIGZiZbKo/WYXqD9l/qSipX/4ji9Se1I1p/PkkZM4ksB/AiBCxwnLGrR4gWhJe93o2ywjPrAS0+W83NZ6kLxYbj0zWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDwvT1DNqZZbcrB49NvvpLNy78fFvULL/21rwVdhiYSJgIgZNxNgZVV6onvliBY63SEsCTAExjnOVtKT6oDzzsbAB8="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fai-moderation-challenge@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":330970},"main":"dist/index.js","name":"@bitsocial/ai-moderation-challenge","type":"module","types":"dist/index.d.ts","author":{"name":"Bitsocial Forge"},"engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"89891277ab9f7e13650358083c1e9a5876ee626f","license":"GPL-3.0-or-later","scripts":{"test":"vitest run","build":"yarn clean && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","format":"prettier --write .","release":"HUSKY=0 release-it --config .release-it.json","type-check":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","llms:generate":"node scripts/generate-llms-files.mjs","test:coverage":"vitest run --coverage.enabled","coverage:badge":"node scripts/write-coverage-badge.mjs","ai-workflow:sync":"node scripts/sync-ai-workflow.mjs","ai-workflow:test":"node --test scripts/__tests__/ai-workflow.node-test.mjs scripts/__tests__/agent-hooks.node-test.mjs","ai-workflow:check":"node scripts/validate-ai-workflow.mjs"},"version":"0.5.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0286a4f9-4c86-4b94-a78e-a08681263075"}},"homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","keywords":["bitsocial","pkc","challenge","moderation","ai"],"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"_npmVersion":"12.0.2","description":"Bitsocial AI moderation challenge implementation for PKC","directories":{},"maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"resolutions":{"ws@npm:8.20.0":"npm:8.21.0","ws@npm:^8.5.0":"npm:8.21.0","tar@npm:^7.5.4":"npm:7.5.22","ws@npm:^8.18.3":"npm:8.21.0","uuid@npm:13.0.0":"npm:13.0.1","axios@npm:^1.7.2":"npm:1.18.1","uuid@npm:^11.0.0":"npm:11.1.1","@libp2p/gossipsub":"16.0.4","nanoid@npm:^5.0.7":"npm:5.1.16","nanoid@npm:^5.1.5":"npm:5.1.16","undici@npm:6.22.0":"npm:6.28.0","undici@npm:6.25.0":"npm:6.28.0","undici@npm:7.24.7":"npm:7.29.0","undici@npm:^8.0.3":"npm:8.9.0","nanoid@npm:^3.3.16":"npm:3.3.18","undici@npm:^6.25.0":"npm:6.28.0","undici@npm:^7.16.0":"npm:7.29.0","undici@npm:^7.19.0":"npm:7.29.0","esbuild@npm:^0.27.0":"npm:0.28.1","basic-ftp@npm:^5.0.2":"npm:5.3.1","form-data@npm:^4.0.5":"npm:4.0.6","ip-address@npm:^10.0.1":"npm:10.3.1","protobufjs@npm:^6.10.2":"npm:7.6.5","@libp2p/kad-dht@npm:^16.2.0":"npm:16.2.6","@protobufjs/utf8@npm:^1.1.0":"npm:1.1.1","@conventional-changelog/git-client@npm:^1.0.0":"npm:2.7.0"},"_nodeVersion":"24.20.0","dependencies":{"zod":"4.3.5","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.28.1","js-yaml":"4.3.1","prettier":"3.8.1","smol-toml":"1.6.1","release-it":"19.2.3","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.85","@vitest/coverage-v8":"4.1.10","@release-it/conventional-changelog":"10.0.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-moderation-challenge_0.5.1_1789769704412_0.9868931699386643"}}},"time":{"created":"2026-04-22T06:15:42.514Z","modified":"2026-09-18T22:15:04.884Z","0.1.0":"2026-04-22T06:15:42.734Z","0.1.1":"2026-04-22T06:29:31.850Z","0.1.2":"2026-05-06T10:32:30.986Z","0.1.3":"2026-05-07T09:27:48.859Z","0.1.4":"2026-05-22T10:44:27.111Z","0.1.5":"2026-05-23T11:03:44.322Z","0.1.6":"2026-05-23T15:58:59.964Z","0.1.7":"2026-06-04T12:26:54.119Z","0.1.8":"2026-06-10T14:13:47.587Z","0.1.9":"2026-06-14T07:03:25.370Z","0.1.10":"2026-07-06T10:15:12.102Z","0.1.11":"2026-08-13T16:05:44.765Z","0.1.13":"2026-08-20T16:37:54.061Z","0.2.0":"2026-08-22T04:41:22.447Z","0.2.1":"2026-08-24T15:38:44.924Z","0.3.0":"2026-09-02T22:15:45.965Z","0.3.1":"2026-09-05T14:59:50.243Z","0.4.0":"2026-09-18T13:08:14.567Z","0.5.0":"2026-09-18T22:08:41.766Z","0.5.1":"2026-09-18T22:15:04.498Z"},"bugs":{"url":"https://github.com/bitsocialnet/ai-moderation-challenge/issues"},"author":{"name":"Bitsocial Forge"},"license":"GPL-3.0-or-later","homepage":"https://github.com/bitsocialnet/ai-moderation-challenge#readme","keywords":["bitsocial","pkc","challenge","moderation","ai"],"repository":{"url":"git+https://github.com/bitsocialnet/ai-moderation-challenge.git","type":"git"},"description":"Bitsocial AI moderation challenge implementation for PKC","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"readme":"[![Coverage](https://img.shields.io/endpoint?url=https://bitsocialnet.github.io/ai-moderation-challenge/badges/coverage.json)](https://github.com/bitsocialnet/ai-moderation-challenge/blob/master/scripts/write-coverage-badge.mjs)\n\n# @bitsocial/ai-moderation-challenge\n\nAutomatic PKC challenge that evaluates Bitsocial comment content against `community.rules` with an OpenAI-compatible model endpoint and optional TypeSafe Jev triage. The package runs on the community node and does not require a hosted Bitsocial moderation server.\n\n## Installation\n\n```bash\nbitsocial challenge install @bitsocial/ai-moderation-challenge\n```\n\n## Configuration\n\nInstall this challenge twice: one `allow` branch and one `review` branch. The `review` branch uses PKC `pendingApproval` to route rule-breaking comments to the moderator queue, and returns the AI model reason in `commentUpdate.reason` when the installed PKC runtime supports pending-approval metadata.\n\n```js\n[\n    { name: \"@bitsocial/spam-blocker-challenge\" },\n    {\n        name: \"@bitsocial/ai-moderation-challenge\",\n        options: {\n            apiUrl: \"https://api.x.ai/v1/chat/completions\",\n            apiFormat: \"chat-completions\",\n            apiKey: \"xai-...\",\n            model: \"grok-4.6\",\n            reasoningEffort: \"high\",\n            triageApiKey: \"sk-...\",\n            triageModel: \"gpt-5.6-luna\",\n            triageReasoningEffort: \"none\",\n            branch: \"allow\",\n            promptUrl: \"https://prompt.example.com/v1/prompts/ai-moderation.md\",\n            promptBearerToken: \"shared-secret-token\"\n        },\n        exclude: [{ challenges: [2] }]\n    },\n    {\n        name: \"@bitsocial/ai-moderation-challenge\",\n        options: {\n            apiUrl: \"https://api.x.ai/v1/chat/completions\",\n            apiFormat: \"chat-completions\",\n            apiKey: \"xai-...\",\n            model: \"grok-4.6\",\n            reasoningEffort: \"high\",\n            triageApiKey: \"sk-...\",\n            triageModel: \"gpt-5.6-luna\",\n            triageReasoningEffort: \"none\",\n            branch: \"review\",\n            promptUrl: \"https://prompt.example.com/v1/prompts/ai-moderation.md\",\n            promptBearerToken: \"shared-secret-token\"\n        },\n        pendingApproval: true,\n        exclude: [{ challenges: [1] }]\n    }\n];\n```\n\nChallenge options are private community-node settings in `pkc-js`: nothing in `options` is copied into the public community challenge metadata unless the owner names it in `publicOptions` (see [Settings validation and public options](#settings-validation-and-public-options)). Keep local settings backups private because they can contain provider keys or prompt access tokens.\n\nProduction operators should keep the real moderation prompt in a private node-local file referenced by `promptPath`, or in a private HTTPS endpoint referenced by `promptUrl` plus `promptBearerToken`. Do not commit production prompts to public repositories; the built-in prompt is only a public fallback and the challenge emits a warning when it is used.\n\n## Options\n\n| Option                    | Default                                  | Description                                                                                                    |\n| ------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| `apiUrl`                  | `https://api.openai.com/v1/responses`    | Full OpenAI-compatible endpoint URL                                                                            |\n| `apiFormat`               | `responses`                              | Request/response format: `responses` or `chat-completions`                                                     |\n| `apiKey`                  | none                                     | Private provider API key; leave empty for self-hosted endpoints that do not require one                        |\n| `model`                   | `gpt-5.4-nano`                           | Model name sent to the provider                                                                                |\n| `fallbackModel`           | none                                     | Secondary model used once when the primary model returns HTTP 429                                              |\n| `reasoningEffort`         | none                                     | Optional primary-model reasoning effort: `none`, `low`, `medium`, `high`, `xhigh`, or `max`                    |\n| `triageApiUrl`            | `https://api.openai.com/v1/responses`    | Full endpoint URL for the optional first-pass triage model                                                     |\n| `triageApiFormat`         | `responses`                              | Triage request/response format: `responses` or `chat-completions`                                              |\n| `triageApiKey`            | none                                     | Private triage-provider API key                                                                                |\n| `triageModel`             | none                                     | Optional first-pass model; setting it enables the two-stage cascade                                            |\n| `triageReasoningEffort`   | none                                     | Optional triage-model reasoning effort: `none`, `low`, `medium`, `high`, `xhigh`, or `max`                     |\n| `jevMode`                 | `off`                                    | `off`, non-blocking `shadow`, or confidence-gated `triage` before the existing cascade                         |\n| `jevApiUrl`               | `https://api.typesafe.ai/v1/systemone`   | HTTPS TypeSafe evaluation endpoint                                                                             |\n| `jevApiKey`               | none                                     | Private TypeSafe key; required when Jev is enabled                                                             |\n| `jevModel`                | `jev-1.13.0`                             | Pinned Jev model; an unexpected returned version falls back to the existing cascade                            |\n| `jevMaxReviewProbability` | `0.05`                                   | Maximum review probability for a Jev `allow` to finish triage; must be at least 0 and below 0.5                |\n| `branch`                  | `allow`                                  | Branch mode: `allow` or `review`                                                                               |\n| `prompt`                  | built-in prompt                          | Private inline system prompt text                                                                              |\n| `promptPath`              | none                                     | Private file path for a system prompt on the community node; `~` expands to the home directory                 |\n| `promptUrl`               | none                                     | Private HTTPS URL for a remotely hosted system prompt                                                          |\n| `promptBearerToken`       | none                                     | Private bearer token sent only when fetching `promptUrl`                                                       |\n| `cachePath`               | `~/.bitsocial-ai-moderation-cache.json`  | Private JSON verdict cache path; set to an empty string to disable persistent caching                          |\n| `auditLogPath`            | `~/.bitsocial-ai-moderation-audit.jsonl` | Private JSONL verdict audit log path; set to an empty string to disable audit logging                          |\n| `articleMaxAgeHours`      | disabled                                 | Optional deterministic age limit for top-level non-media links; uses URL-path day hints and submission time    |\n| `rejectDuplicateMedia`    | `false`                                  | Reject top-level posts that reuse an image, video, or audio URL from a non-archived post in the same community |\n| `error`                   | `Rejected by Bitsocial AI moderation.`   | Error shown when content edits are rejected or moderation is unavailable for an edit                           |\n\nPrompt source precedence is `prompt` > `promptPath` > `promptUrl` > built-in fallback. If multiple private prompt sources are configured, the challenge uses the highest-precedence source and emits a warning about the ignored source.\n\nRemote prompts must use HTTPS. When `promptBearerToken` is set, it is sent as an `Authorization: Bearer ...` header rather than in the URL. Prefer `.md` or `text/markdown` for human-maintained prompts and `.txt` or `text/plain` for plain text prompts; the model only receives the fetched text, so the file extension itself does not change model behavior.\n\nFor providers exposing the chat-completions API shape, set both `apiFormat` and `apiUrl`:\n\n```js\n{\n    name: \"@bitsocial/ai-moderation-challenge\",\n    options: {\n        branch: \"allow\",\n        apiFormat: \"chat-completions\",\n        apiUrl: \"https://provider.example/v1/chat/completions\",\n        apiKey: \"provider-key\",\n        model: \"provider-model\",\n        reasoningEffort: \"high\"\n    }\n}\n```\n\nOpenAI-compatible APIs are a practical compatibility convention, not a formal open standard. Test custom providers before enabling the challenge on live communities.\nProvider API keys are only sent to HTTPS endpoints. Keyless HTTP endpoints remain available for trusted local or self-hosted deployments.\n\nTo enable 5chan-style exact-media rejection, set `rejectDuplicateMedia: \"true\"` on both the `allow` and `review` challenge entries. PKC challenge option values are strings; leaving this option unset preserves the default and does not perform the deterministic hard-rejection check.\n\n## Optional Jev triage\n\nKeep the existing Luna and Grok configuration. Add the same Jev options to both AI challenge branches:\n\n```js\n{\n    jevMode: \"shadow\",\n    jevApiKey: \"your-private-typesafe-key\",\n    jevModel: \"jev-1.13.0\",\n    jevMaxReviewProbability: \"0.05\"\n}\n```\n\n`off` is the default and makes no Jev requests. `shadow` starts one Jev request alongside the existing cascade on each cache miss. Its result never changes publication or moderation outcomes, and the posting path does not wait for it. Shadow mode requires audit logging. A separate `${auditLogPath}.jev-shadow.jsonl` file records the Jev decision/probability, whether it would have allowed, the final baseline verdict or failure, correlation hashes, timing, and usage. These advisory entries never enter the normal mod-log publisher's input. Writes are best effort; a process stopped before the background comparison finishes can lose that observation. Cache hits issue no shadow request.\n\nAfter evaluating disagreements and cost on representative traffic, explicitly set `jevMode: \"triage\"` to enable early approvals. A schema-valid Jev `allow` with review probability at or below the threshold finishes moderation. Every other result, including a Jev `review`, uncertainty, invalid response, unexpected pinned model, or provider failure, continues through the existing Luna-to-Grok cascade. Jev never independently queues a publication or invents a free-text review reason. If Luna is not configured, these cases go directly to the configured reviewer. The existing branch, edit, and provider-failure rules still apply.\n\nJev requests have a two-second deadline covering headers and body. The threshold is an experimental operating choice, not a guaranteed error rate. Start with shadow mode, adjudicate disagreements, and measure false approvals and escalation rates before enabling decisions. Pin a version while selecting a threshold; explicitly choosing `jev-latest` or `jev-preview` permits the provider alias to change versions. Jev mode, endpoint, model, and threshold participate in cache identity, so changing them cannot reuse a verdict under a different decision policy. Credentials never enter the cache.\n\nThe [TypeSafe API](https://docs.typesafe.ai/api) receives the same normalized policy, user instructions, community context, and publication fields as the existing providers. Publication text remains untrusted data. No linked pages or media are fetched.\n\n### Provider usage and latency\n\nFresh final audit entries include an `attempts` array for every actual decision-provider request, including first-pass reviews, invalid verdicts, timeouts, 429 attempts, and fallback retries. Each attempt records stage, requested/returned model when available, host, format, start time, elapsed milliseconds, status, and reported token usage. Jev triage attempts also record the review probability, confidence, configured threshold, and eligibility for early approval. Cache-hit entries omit attempts so they cannot be mistaken for new provider usage. Shadow Jev attempts appear only in the separate shadow file.\n\nUsage fields are `inputTokens`, `outputTokens`, `cachedInputTokens`, `cacheWriteInputTokens`, and `reasoningTokens` when the provider supplies valid values. Missing usage is unknown, not zero. Reasoning is preserved separately: providers differ in whether it is included in output/completion counts, so do not blindly add it or infer a dollar bill from these fields. Prices are not hardcoded. HTTP errors record the status without copying provider bodies that could echo private content. The mod-log publisher retains its existing public fields and does not publish attempt telemetry.\n\n## Settings validation and public options\n\n`pkc-js` 0.0.85+ validates `community.settings.challenges[i]` on every community edit, creation, and start. For this challenge that means:\n\n- Option keys that are not listed in the table above are rejected as typos by `pkc-js` itself.\n- The challenge's `validateChallengeSettings` hook rejects the same option errors that would otherwise fail every publication: an `apiUrl` or `triageApiUrl` that is not `http`/`https`, a keyed provider URL that is not HTTPS, a `promptUrl` that is not `https`, an unknown API format, reasoning effort, or `branch`, or a `rejectDuplicateMedia` value other than `true`/`false`. The hook is synchronous and never contacts a provider, so wrong credentials are only discovered when a publication is moderated (fail closed). Enabling Jev also requires `jevApiKey`, a valid mode/threshold and an HTTPS endpoint; shadow mode requires `auditLogPath`.\n- If `promptPath` does not exist on the node, the hook logs it through `pkc-logger` but does not reject the settings, so a prompt file that is created later does not block the community.\n- Rejections fail the offending `community.edit()`; at start they surface as community `error` events with code `ERR_CHALLENGE_SETTINGS_VALIDATION_FAILED` and the community still starts. Existing settings that were silently broken start emitting these errors after upgrading.\n\nEvery option is private by default. An owner can publish specific options by naming them in `publicOptions`, and `pkc-js` then copies their values into the public `community.challenges[i].publicOptions`. The hook refuses to publish `apiKey`, `triageApiKey`, `jevApiKey`, and `promptBearerToken` because they are credentials. Everything else is the owner's call: publishing `prompt`, `promptUrl`, or `promptPath` is a transparency choice, but it lets users read the moderation prompt and try to game it, and publishing provider URLs, `cachePath`, or `auditLogPath` reveals private node details. Most communities should leave `publicOptions` unset.\n\n```js\n{\n    name: \"@bitsocial/ai-moderation-challenge\",\n    options: { apiKey: \"sk-...\", branch: \"allow\", rejectDuplicateMedia: \"true\" },\n    publicOptions: [\"branch\", \"rejectDuplicateMedia\"]\n}\n```\n\n## Behavior\n\n- New comments with verdict `allow` publish normally.\n- New comments with verdict `review` are sent to pending approval with the redacted model reason attached for the author.\n- New comments are also sent to pending approval if the model API is unavailable.\n- When `triageModel` is configured, its `allow` verdict is final and avoids a primary-model call. A triage `review` verdict or triage-provider failure calls the primary reviewer, and only that reviewer's verdict can send content to pending approval.\n- Triage requests time out after 30 seconds and escalate to the primary reviewer. Reviewer requests have a separate 90-second deadline, including response-body reading, so reasoning models can finish decisions that take longer than the triage limit. Reviewer timeouts still fail closed, and audit errors identify the stage and deadline.\n- When `fallbackModel` is configured, an HTTP 429 from the primary model is retried once with the fallback model before the publication is sent to pending approval.\n- Comments sent to pending approval because moderation is unavailable include a generic moderator-visible reason; provider details remain in the private audit log.\n- Content edits with verdict `review` are rejected until PKC supports pending approval for edits.\n- Content edits are rejected if the model API is unavailable.\n- Delete-only edits and non-comment publication types bypass AI moderation.\n- When `rejectDuplicateMedia` is `\"true\"`, new top-level posts reuse neither an exact image, video, or audio URL from a non-archived top-level post nor an in-flight media URL in the same community. This option is disabled by default and is configured independently by each community operator. The deterministic check covers every non-archived thread, runs before any model request, and never enters pending approval; URL comparison upgrades HTTP to HTTPS, ignores fragments and default ports, and retains query parameters.\n- The challenge sends text, title, submission time, link URL/domain/path, URL-path date hints, flags, flairs, community address/title/description, `community.rules`, and a bounded activity-relative list of recent top-level posts for duplicate-thread checks when the local community database is available.\n- The model payload explicitly labels publication fields as untrusted user content, not instructions.\n- The challenge does not fetch linked publication media or user-submitted URLs. `promptUrl` is an operator-configured private prompt source, not publication content.\n- Remote prompts are fetched without following redirects, with a 5 second timeout, capped at 64 KiB, cached in memory for 5 minutes, and reused from the last in-memory copy if a refresh fails. If the first remote prompt fetch fails, moderation fails closed for the allow branch.\n- Two branch invocations for the same publication reuse one in-process verdict promise.\n- Successful verdicts are cached in a private JSON file keyed by a SHA-256 hash over primary, triage, and enabled Jev model/provider config, community context including duplicate-check context, target content, and the final prompt hash. The cache does not store the raw prompt or API keys.\n- Verdicts are written to a private JSONL audit log with the model stage, model reason, raw publication fields, and hashes/metadata for correlation. The audit log does not store the raw prompt, API keys, prompt URL, or prompt bearer token.\n\n## Article age checks\n\nSet `articleMaxAgeHours: \"48\"` on **both** branches only for communities whose intended policy is a 48-hour article-link window. This is an independent explicit operator setting: the package never extracts numbers from arbitrary rules or prompts. Empty or omitted leaves deterministic enforcement disabled.\n\nFor top-level links, excluding known image/video/audio links, the node computes minimum and maximum possible article age from the existing URL-path date hint and submission timestamp. The existing hint convention spans the full UTC calendar day; a URL date is not a verified publication time. Review occurs only when **even the latest possible article time is strictly older** than the configured window. An exact boundary, a day straddling the boundary, a future day, a missing/invalid date, or missing submission time cannot establish an age violation. The model receives computed age bounds and is instructed not to re-enforce the configured window, while still enforcing any stricter explicit community age limit and all other rules. Replies and content edits retain their existing behavior; edits do not contain the original linked-article context.\n\nA proven age violation uses the existing allow/review branch semantics and does not call any provider. Its audit entry has `source: \"rule\"`, `rule: \"article-recency\"`, numeric bounds, and no provider or token usage. It uses the existing in-process deduplication; deterministic age verdicts are not written to the persistent model cache. Applicable age configuration participates in the verdict cache identity. The setting does not fetch articles or prove that an untrusted URL date is truthful; enable it only where that date convention is suitable.\n\n## Local usage reporting and evaluation\n\nRun `node scripts/moderation-usage.mjs --audit /private/moderation-audit.jsonl` to generate an offline aggregate report. It counts final provider stages, stages reached, audited disk-cache hits, deterministic decisions, request latency, throttling, timeouts, and reported tokens. It excludes publication text, prompts, reasons, credentials, and unknown audit fields. In-process cache reuse is not logged and cannot be counted from these files. Shadow logs can be reported separately; do not concatenate overlapping log copies.\n\nFor cost estimates, pass `--rates /private/rates.json`. Rates are explicitly supplied per exact host/model; no prices are embedded or assumed current. Missing rates, usage, cache breakdowns, or separately billed reasoning counts leave total cost unknown. Known cost remains a subtotal. Provider-attempt latency is not end-to-end moderation latency, and the report cannot reconstruct unreported billing. See [operator tooling](docs/moderation-tooling.md) for the rate format and examples.\n\n`node scripts/moderation-evaluate.mjs` validates the committed synthetic corpus **offline**. Saved predictions can be compared without network access. Deliberate live evaluation uses the built challenge, explicit credential environment references, and request/byte budgets; it prints only sanitized case IDs, labels, and aggregate telemetry. See [evaluation instructions](docs/moderation-tooling.md#moderation-evaluation). Synthetic cases and independently reviewed real cases are labeled separately; the initial corpus is not evidence of real-world model accuracy.\n\n## Moderation Audit Community\n\nThe challenge writes one private JSONL audit entry per model verdict. To mirror those entries into a Bitsocial community for moderators, create an unnamed local community with a single `question` challenge, store the answer in a private node-local file, and run the publisher script on the node:\n\n```bash\nnode scripts/publish-audit-log-to-community.mjs \\\n  --community 12D3KooW... \\\n  --audit-log ~/.bitsocial-ai-moderation-audit.jsonl \\\n  --challenge-answer-file ~/.bitsocial-ai-moderation-mod-log-password \\\n  --follow\n```\n\nThe publisher creates a persistent local signer at `~/.bitsocial-ai-moderation-mod-log-signer.json`, stores its read offset in `~/.bitsocial-ai-moderation-mod-log-state.json`, and submits the private challenge answer when publishing. Each mod-log post includes the AI action, verdict reason, matched rule indexes, source community, publication kind, author identifiers, available CIDs, link metadata, content/title, provider/model, cache key, prompt hash, and rule hash.\n\n## Test Coverage\n\nThe coverage badge reports line coverage generated with `yarn test:coverage`. On pushes to `master`, CI writes a Shields-compatible endpoint payload and publishes it to GitHub Pages.\n\nThe test suite covers the moderation-critical flow: OpenAI-compatible Responses and chat-completions requests include `community.rules`, triage approvals avoid the primary reviewer, triage reviews and outages escalate, model `review` verdicts fail the `allow` branch and pass the `review` branch used with `pendingApproval`, provider outages and malformed responses route new comments to review, and content edits are rejected on review or outage.\n\n## Publishing\n\nThe first npm publish must create the package before trusted publishing can be configured:\n\n```bash\nnpm publish --access public\n```\n\nAfter the package exists, configure npm trusted publishing:\n\n- Publisher: GitHub Actions\n- Organization: `bitsocialnet`\n- Repository: `ai-moderation-challenge`\n- Workflow filename: `publish.yml`\n- Environment: leave blank\n\nEquivalent npm CLI command:\n\n```bash\nnpm trust github @bitsocial/ai-moderation-challenge --repo bitsocialnet/ai-moderation-challenge --file publish.yml\n```\n\nFuture releases publish automatically when `package.json` version changes on `master`. The publish workflow skips versions that already exist on npm.\n","readmeFilename":"README.md"}