{"_id":"ai-model-verifier","_rev":"18-acea839b86844c43850ac00db9957e04","name":"ai-model-verifier","dist-tags":{"latest":"3.5.0"},"versions":{"1.0.0":{"name":"ai-model-verifier","version":"1.0.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@1.0.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"2ac4c7b1f264665f6827e9608ea193d1a924736e","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-1.0.0.tgz","fileCount":95,"integrity":"sha512-CP1BgBvR2m8cGfkJ7yJ3o1aqx+pH+W6ksrwKKRcK8rdotRCp99cEVj8P7TqZt/WUWJAQiNlKgujfUSJGOPkb2g==","signatures":[{"sig":"MEUCIGmM4thbyUCJULCKs03dx/f4sdpJurMjm6Jw7+3sr1/UAiEAhy2KNy0zFZHFlS1sa83086dBjD+4m807Wo2GSc+AgZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187835},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","default":"./dist/providers/*.js"}},"gitHead":"a76d5fd02f749e73742d75fd3d39b5dbed10218c","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"don-cryptus","email":"don.cryptus@gmail.com"},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"11.6.2","description":"Verify an AI API endpoint really serves the model it claims: model substitution, Claude thinking signatures, token-billing accuracy, response-envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_1.0.0_1788139755851_0.5623324733116","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"ai-model-verifier","version":"1.1.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@1.1.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"6e7307b86b3393b1c8120e3bc24a439fd167d03b","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-1.1.0.tgz","fileCount":95,"integrity":"sha512-N4+/KJ/GtdQaaYssdTASNXbdpdeWqaiIULGkvMeLmwmdv4g396ZszFISxra17LMr2lz1ItveZs7E5BvnysxzUg==","signatures":[{"sig":"MEYCIQCy/QpNj8GZ1Ah6ZBf1Yx4rJTRLM/91U75sjyiid37JwAIhANIT22LyTE5Zn71joFXeue7HIxbFt4Ci4KkwkFy57lKN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191633},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","default":"./dist/providers/*.js"}},"gitHead":"6ff967cb1309bf2b57a2293d15effe924c3e20c5","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: model substitution, Claude thinking signatures, token-billing accuracy, response-envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_1.1.0_1788788005768_0.8875972891912816","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"ai-model-verifier","version":"1.2.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@1.2.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"f6c66a7c1f6f1cd65a48274be8f014f8148165de","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-1.2.0.tgz","fileCount":95,"integrity":"sha512-2wR02bmne8nvEmydzrZVQoJFQ1bZHUm1en9tRcRBO3rYkrL2QDb9ZFpdKd6NMb+J6CZVzhEDFVzWw1UVxTmjLg==","signatures":[{"sig":"MEUCIQCXHSEvKk4In45xR8YlhrSOz9MpTfTBl2f54uCNOQxsdAIgFQFH3ddDCxCFmbWyNiseqAHzWo8tA5h14NIvH5ofciU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191671},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","default":"./dist/providers/*.js"}},"gitHead":"21562eb98bb716553a0fbe58c42c3e0540c15f7c","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: model substitution, Claude thinking signatures, token-billing accuracy, response-envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_1.2.0_1788789995950_0.561588864587818","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"ai-model-verifier","version":"1.3.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@1.3.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"cdb495161aaec0cf8b10d36d6deb6bc9c44905b8","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-1.3.0.tgz","fileCount":99,"integrity":"sha512-iI7MPCR0Ry5CV2HvrC9HMOsKnsO7Yi2nDP7YRT/mwdtQk95Vw9i0qwvXaMA0ANJ3JCwOL4zrGqBCrqJ/pd8ebA==","signatures":[{"sig":"MEQCIE3Y9a9NOmJZP1O+W56igZ3xvYx0aC3zDzgm/zuoFMLLAiBhSoPNsa9IQlSbE6cx5QaC19gBsJ9O4dEi/cHa2EbJBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":208553},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","default":"./dist/providers/*.js"}},"gitHead":"5daf38d4bdbb51478a60d0b98d7532a5eedfcf0c","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: model substitution, Claude thinking signatures, token-billing accuracy, response-envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_1.3.0_1788986148120_0.8431657937889203","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"ai-model-verifier","version":"1.4.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@1.4.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"6960528da4302f04662081ee91499445a302a2e0","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-1.4.0.tgz","fileCount":107,"integrity":"sha512-RCOnQqk0R5RIdX1qNVtXIE/SZxlE7uZbI0DvmAMVZJZIFDPeK/6GAo5RYHH8YRpc0nsxm4Lk0yRUHbPJ5HTb9g==","signatures":[{"sig":"MEYCIQDntouF5VYZ/AOpBSZuTff0UmxwC0iwR1v+qIC2M76MNAIhAMJ5yTfOBt6hRBAjx/HhduLDQa8iZ1q71Ba3P6Hirn7E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDnTYL11lCVyAksl0KtDZhciXp9f6MazlYaK4H7BKnK3wIhAJNFzKY8z1CxXQ3M22kJEJv1FjXJAkn6/xyctP/3t6oe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":227815},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","default":"./dist/providers/*.js"}},"gitHead":"c21d17cc9b90821c49dd58f8272f7654effc5546","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: model substitution, Claude thinking signatures, token-billing accuracy, response-envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_1.4.0_1789241651677_0.33599655689962704","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"ai-model-verifier","version":"1.4.1","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@1.4.1","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"1b31091a49c4ec18c9f3e6fdcbde3d401419ff12","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-1.4.1.tgz","fileCount":107,"integrity":"sha512-+Tu1n6LagoX9me1nDAPYntlZ/4hdBcN1szRlp8zUrYjK7B0JMxssUTgAdZqejKmilUor/QMrfkRL/Q2FSaCMVQ==","signatures":[{"sig":"MEYCIQD+dyRqugvJBjYL17SbITyLR6v+fVMH+fS/10rjfJtbqQIhAMOWZlhTrfIdQzoqc6uKoWKgda6xWNLGWGGFitIQGHoC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDeYYrkHTgfbYgJ2S8sFzJfCiSUznqgNmWf2wfQJDJiIgIgdhVjsU/J/cfSthT/bJ4dEfN67kY/16LtEcmhJV6I5wQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":227299},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","default":"./dist/providers/*.js"}},"gitHead":"ec25df27de17f56b3c645d5bf6d10b2c967e6fd6","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: model substitution, Claude thinking signatures, token-billing accuracy, response-envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_1.4.1_1789267156301_0.011205841051524779","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"ai-model-verifier","version":"2.0.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@2.0.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"3b6731ee4747ad31df113d6e0dbc110218cad503","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-2.0.0.tgz","fileCount":155,"integrity":"sha512-FSUSDjSsS4N1GBngABePpNtQNImOUX26XoEbd5QT4Lt0SmFOzUN3mbtFrymgX89WkrwxceVq1nYqmepFpST8fg==","signatures":[{"sig":"MEUCIG28iM/h35MS2T74+/8nzlxNSwc9iQawzhh+xq/MhxAQAiEAyPdSCnMgy70LDaivLhQsOmta7KJdGbPN5d/dZyHzkiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDLqaEnDh/VQb3oruwYo5CAGbBNjb5u65cPZzt7dHRoEgIgJsmgSnwJiwxQdERAmDjHmFg9Rr2hX5w/Xg1j8LxvoKs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":304280},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"753eb317d9289df6fa631ecd3b135bde583b447b","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_2.0.0_1789776216058_0.519194337229826","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"ai-model-verifier","version":"2.0.1","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@2.0.1","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"531b9fb0ab03052f9ec7e3d54aad2f82a8aaf5bf","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-2.0.1.tgz","fileCount":155,"integrity":"sha512-P+CpB/+hvoDke67pdRD9ugbQmxqjCAR7I6QZGDu4MroXbtwKxOttn1dWlh+UFrpy5qfqsHv5QJRezyGAKIHC4g==","signatures":[{"sig":"MEUCIFbmpLySp+8GTNJty7fvvmBL84eIuNg3xPlgNcDIqA45AiEA3cojkCEx4aJTbrJyRBayLPwcPArNpc+Gt6NOKnJINIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA9PVMiJjcUotpHUNjmwZBboqJBPRscnhqD21Ryle8uWAiEAjuvRMiErRXK7+JVXuwfoKGRwwqUNkiyIJVyyZjIvd6o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":305380},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"de03adb5f30d63a894e609fed220cef57e1403db","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_2.0.1_1789778184196_0.7708970084004743","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"ai-model-verifier","version":"2.0.2","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@2.0.2","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"e7bbcde87f411dc362c9ab20421e2d7b4b4ff659","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-2.0.2.tgz","fileCount":155,"integrity":"sha512-Bo+AQ66kqBsqU66kE21/glKUZX0CC8y6CuX1nqLDusKOvH2CdL41uKvC+i4fuTQwsUfhuPEUpjmiZ7mgv7tueA==","signatures":[{"sig":"MEYCIQCVJoZUBkdPJLPiGACiviUFeYjTfaL10D3Q4rOgyzrFMQIhAJB8IqrV6hBdz+vOik2OR+jJCE+YcRwdz7yFVu9jPCxS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFUhFAXob7CNprYSDyxCUU6jbExO31siIqEaT5oiKk50AiBZ92Se3BIEza/a9y6oJu9aMkSu/aiU9V5FNaaLDk26bA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":305587},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"aeceb351f63af6b00580a6c121175f64e4c15ed1","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_2.0.2_1789778377751_0.618927778969524","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"ai-model-verifier","version":"2.0.3","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@2.0.3","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"dc7643847eedb6ae6cb75423b1cc38dd30610cf7","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-2.0.3.tgz","fileCount":159,"integrity":"sha512-YYKrxHbBMfWQhdPpBTAH1KJRnYutsop23pJoLYGyDLBAVMFSme08Um+bSeNmJhNz9FV5wzmUjT5YJr4to06pjQ==","signatures":[{"sig":"MEUCIDX6GFCUmcdgIa9HT2bTva17HYvGOkB2V5vJkQm9ay5vAiEA/531VjPI0XpGfSD6SM8wUE6046/vhPXuc88YPE2LmLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFfiCUL3xKo0V88V7inZXOVI9QvxxuK4k0aZeYPfK3YjAiEAnz6wRf7Jedsf2z5Ly/ZsLFz0tUNiHY5VA+/JoLd4JeU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@2.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":307718},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"0e9d12ab888bfd265a237ee261ab90f7b3ed8dde","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, envelope and throughput evidence.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_2.0.3_1789779666156_0.8716386923813197","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"ai-model-verifier","version":"3.0.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@3.0.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"9ce7855050b5d61fa859f6f2b7cddd21c313e1e0","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-3.0.0.tgz","fileCount":175,"integrity":"sha512-Xw1JqvrGM+xuQJnSIYc1jP6yGpvQEyqVUgD4+7iYebUav/e7SS43QlNDm8wzef8JYSaJX3RC0C6WUCBfjO89lA==","signatures":[{"sig":"MEYCIQDgWL+NNh46ZaOG8pV1xn0HzOwf4hiKNhEcZMUDB6A+LgIhAP1krN1lSY3SbtyQ7V0A9p+/p28IkRMJFSqJKsm7WrC4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEcoGBywmJYd0mt3KGE1BncLh8AfQ7GqBNQJkn7xR5iZAiAvvG8WNIjEyK1Bpn0A0erZCL+Dhz81bG3Kt4DUwyAuoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":332660},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./makers":{"types":"./dist/makers/index.d.ts","default":"./dist/makers/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"53a9414362d5f562569a52f6c1c308b4e6719481","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_3.0.0_1789840224486_0.504526999302991","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"ai-model-verifier","version":"3.0.1","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@3.0.1","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"2bc9a5a5fcfa5128f6dd1e93fb95fa12995c9ae8","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-3.0.1.tgz","fileCount":175,"integrity":"sha512-a5i36F290ZjNcvHpNuEn+cFkj9cbzWQCvJO2MAOkKNdMLIG7jjWAF/qUn8WSijz7YSqCXZZPCJRQWteY1icp2w==","signatures":[{"sig":"MEUCIGz0O/yorZO4eYiJSTnEBf8MdzhFhANLAAjywUvjAEksAiEA1wKSHqckxNcUy5gbga2svCS7mfWiZKJ+OFVBYpm4eSM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAHmsl9/jegS5yhHU/I1VsE4tiuLkG2edyzfWgOiKaD+AiBTjTKCLkS7PyWmj43I1kwVJcRo/8zIEPXFO2gLv+i0XA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":334084},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./makers":{"types":"./dist/makers/index.d.ts","default":"./dist/makers/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"eb05e06c53205b0889e9a646820017f404d80782","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_3.0.1_1789841504632_0.5820208364456618","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"ai-model-verifier","version":"3.0.2","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@3.0.2","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"303e3f5afaefd6afd40b2d0056455049243997ad","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-3.0.2.tgz","fileCount":175,"integrity":"sha512-EX5IdT+hhkKVN+zMWRnyc5Zwfc1mPpjp9xx99xsLorn53fvxF1jSxlfr37qbcDcaS9Co0UVpG0i7jKFLVLbaRQ==","signatures":[{"sig":"MEQCIGLHtWz2b7sDeH2lZ1O+0t8dUtZ0iJCJl7+cVDDlLy45AiBCVV4EOdzljSdNfnrw771hEEbbgYQ+vLbmv82HbHYIzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEysWl9WlXx2xlRQ81/4jrrQ7eZDDmw2QjmbymZstAaFAiBBlHbsbWMfhlkBh2qlxzCdAl4TNsrpbjASRCQCm9mQrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@3.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":335686},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./makers":{"types":"./dist/makers/index.d.ts","default":"./dist/makers/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"1386654cdbc53fc1b160d09a47f9eaffaf54d16a","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_3.0.2_1789842428355_0.6028024586926111","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"ai-model-verifier","version":"3.1.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@3.1.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"e5af45ce014f0124ac44825782867eed85132629","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-3.1.0.tgz","fileCount":175,"integrity":"sha512-qQKo90QLShP8H5SSis7/tPaWViqNtBHN6vZVT0lWbys9hieHqazq/RCPUWWE6Cc20LIhknztmQdgOvqVJDCXdw==","signatures":[{"sig":"MEQCIG6ZW6nTGzwprjt6ojmkBnV7lFODoEeJjoah3aBEVtmsAiACN8EhbvLS/zFWTOaOuWWLmxgzxN4CIas62QScj+99tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCWqKNMEyt3T08CFUwXmbSpipprYl3EV+fKpGpAuCb3nQIhAPSFJF9yRDq3pi2SPh6gaIP0sAS1hmW+aEloEA78ZgNt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":335957},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./makers":{"types":"./dist/makers/index.d.ts","default":"./dist/makers/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"df81c9c96995f7b40bb428efe008050cd62e0e2f","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_3.1.0_1789844016602_0.6716382000990335","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"ai-model-verifier","version":"3.2.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@3.2.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"ac09e87896788795ca4d2f0214aef1bbcb888cbc","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-3.2.0.tgz","fileCount":187,"integrity":"sha512-mqqWyCx7qhSabvWvbssNg2RR3WMOqSIfpYCIpq5S2bLIvuHSbgUjyc2x1BHrISdcVw0HF6eeUK7IHn6LcSv/Wg==","signatures":[{"sig":"MEQCIDitMzB8tE7qxw/ZQKWQPXbuli+7hCJ5mn5PHmVV/XxkAiBgCwtoTC0iE1Ihkr2GzFQwxM5NFvwSrexiDYBl4Cx93g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBPzlViZafNnm5Q+AfW941LchcjsqXY9w4ZpyuHrFN8xAiEAu2faDSwS8do41dfIR6o/gzqGjCdr54s3NeudGLfRXxM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":353501},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./makers":{"types":"./dist/makers/index.d.ts","default":"./dist/makers/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"c84b7afcf7819a4db6e5b6a0a879deaeab0054aa","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_3.2.0_1789845524286_0.13707345425812312","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"ai-model-verifier","version":"3.3.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@3.3.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"73c3d1168900e570bb595cfa4fb3c224e2508ff5","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-3.3.0.tgz","fileCount":187,"integrity":"sha512-OKlIXdPuoTYfovvHxT2u+8i5MRCe4N/KM5H1Ux2DOvmfe0NFIuY3PrbtkdfjDx9B85zSkPJXBqQTeeCxU4NOaA==","signatures":[{"sig":"MEQCIHgwXUpHiB0iMxq32qVa3kDTDj3ulvjnF83iHbe8sPDuAiBArmP7LfdzfY43+syBUFlswaaJQHvXwtXbl1xLOjBzFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDFz4IVUerxhHcM/jutYieWVyaXRuUGb/ResohF5tPgHAIgDr3LwuksKl52coYmong8mIzoV6xETFfqMTOgs26jdUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":383558},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./makers":{"types":"./dist/makers/index.d.ts","default":"./dist/makers/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"57d058002888cb44d0ae893e3703f54247ad1890","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_3.3.0_1789849497156_0.15414274617904566","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"ai-model-verifier","version":"3.4.0","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"license":"AGPL-3.0-only","_id":"ai-model-verifier@3.4.0","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"homepage":"https://github.com/unorouter/ai-model-verifier","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"278effbae1ed8a9aba2b357b2bbbe9ba10132507","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-3.4.0.tgz","fileCount":207,"integrity":"sha512-8OexgJ4bRBMTrG7dY7kj56tKxUSTf+xiHh+I4EJkj2yECkivgkknp2ig2sVQoqYM6h/aiNd8UZVzYfZM0dEeuQ==","signatures":[{"sig":"MEQCIDH21qlu09K0td1wBTtDj/q8Vvy6Fze0Frt25WD2FMXvAiAYlmDTWko3gor6L4Is07wPuCp8sqfsGQF/TimgLxuAPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHuL6kTb+BV3t5mf24ZePplEBYumHYbUaKyYDh0S1dEiAiAfmIdULbp76voJ/M9TqVLWdK1UIEpYlb4x8SxgJ1Jq0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@3.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":438641},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./makers":{"types":"./dist/makers/index.d.ts","default":"./dist/makers/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"e0a68c52cd515245103f167cda94ecf20472d256","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/ai-model-verifier_3.4.0_1790013812838_0.8179542944778693","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"_id":"ai-model-verifier@3.5.0","bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"dist":{"shasum":"056bd23ddd41408f186416250814479be0c576d4","tarball":"https://registry.npmjs.org/ai-model-verifier/-/ai-model-verifier-3.5.0.tgz","fileCount":207,"integrity":"sha512-MvL4A+jSLBV/Ba86sARUSm7mfjUtQXv3nuFjOvhvs4B0twJv7i8O+9YF/CiaLDqvhOzh7xlVztd9dD6Iu3uRlA==","signatures":[{"sig":"MEQCIHiYVHHZ568jfjG//+P4ttEziSjtSxPakHas5b0bSKBfAiAnLi1z3hGpLgvPExBGKjrk0N5G2Mkh+Op0qcNViSfTGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCyMz5YGmPI2jclBrEmZRjVtBtEQyZ88xO1W35p43MBuwIhAO4Eebya4+tUObc3bMZcdSRi/2mQC8Z4dhTgjo7TAwBL"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ai-model-verifier@3.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":440648},"name":"ai-model-verifier","type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","default":"./dist/rules/index.js"},"./makers":{"types":"./dist/makers/index.d.ts","default":"./dist/makers/index.js"},"./models":{"types":"./dist/models/index.d.ts","default":"./dist/models/index.js"},"./vendors":{"types":"./dist/vendors/index.d.ts","default":"./dist/vendors/index.js"},"./highlight":{"types":"./dist/highlight.d.ts","default":"./dist/highlight.js"},"./transport":{"types":"./dist/transport.d.ts","default":"./dist/transport.js"}},"gitHead":"7a240c922bd9c1c1995b530389eeec1b3b5641f9","license":"AGPL-3.0-only","scripts":{"test":"bun test","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"version":"3.5.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2147c223-8abc-474d-b0ed-cdda4e249060"}},"homepage":"https://github.com/unorouter/ai-model-verifier","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"_npmVersion":"12.0.2","description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","directories":{},"maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-model-verifier_3.5.0_1790098865217_0.1102706832059781"}}},"time":{"created":"2026-08-31T01:29:15.673Z","modified":"2026-09-22T17:41:05.627Z","1.0.0":"2026-08-31T01:29:15.981Z","1.1.0":"2026-09-07T13:33:25.919Z","1.2.0":"2026-09-07T14:06:36.127Z","1.3.0":"2026-09-09T20:35:48.262Z","1.4.0":"2026-09-12T19:34:11.787Z","1.4.1":"2026-09-13T02:39:16.379Z","2.0.0":"2026-09-19T00:03:36.155Z","2.0.1":"2026-09-19T00:36:24.280Z","2.0.2":"2026-09-19T00:39:37.884Z","2.0.3":"2026-09-19T01:01:06.248Z","3.0.0":"2026-09-19T17:50:24.578Z","3.0.1":"2026-09-19T18:11:44.791Z","3.0.2":"2026-09-19T18:27:08.446Z","3.1.0":"2026-09-19T18:53:36.722Z","3.2.0":"2026-09-19T19:18:44.373Z","3.3.0":"2026-09-19T20:24:57.234Z","3.4.0":"2026-09-21T18:03:32.942Z","3.5.0":"2026-09-22T17:41:05.316Z"},"bugs":{"url":"https://github.com/unorouter/ai-model-verifier/issues"},"license":"AGPL-3.0-only","homepage":"https://github.com/unorouter/ai-model-verifier","keywords":["ai","llm","relay","proxy","verify","authenticity","model-verification","fake-model","anthropic","claude","openai","gemini","deepseek","qwen","token-billing","rule-engine","adapter"],"repository":{"url":"git+https://github.com/unorouter/ai-model-verifier.git","type":"git"},"description":"Verify an AI API endpoint really serves the model it claims: a vendor adapter per wire, a maker table for who trained what, a rule table over shared evidence, and per model facts. Model substitution, Claude thinking signatures, token billing accuracy, env","maintainers":[{"name":"don-cryptus","email":"don.cryptus@gmail.com"}],"readme":"# ai-model-verifier\n\n**Is that API endpoint really serving the model it claims?**\n\nResellers and relay stations sell \"Claude Opus\" or \"GPT-5\" and quietly serve\nsomething cheaper. Given a `baseUrl`, `apiKey` and `model`, this library\nprobes the endpoint and reports what it actually found: a substituted model, a\ndowngraded Claude tier, a stripped thinking signature, inflated token billing,\nor a translation layer sitting in front of the real vendor.\n\nExtracted from [unorouter](https://unorouter.com)'s model tester so the same\nengine runs in the browser, on a server, and inside our sync pipeline.\n\n## Design\n\n- **Adapters.** One object per wire format (`anthropic`, `openai`, `gemini`)\n  builds every request and reads every reply. Rules never see a URL.\n- **Makers.** Who trained a model is separate from how it is sold. A maker\n  table (Anthropic, OpenAI, Google, DeepSeek, Moonshot, Zhipu, MiniMax, Xiaomi,\n  Mistral, Alibaba, Meta, xAI, Tencent) carries the words a genuine model uses\n  for itself, its tiers and whether Chinese in a reply is a tell; the model id\n  picks the maker, the wire only shapes the request. A DeepSeek sold over an\n  OpenAI-shaped relay is judged as a DeepSeek.\n- **Rules over evidence.** Every detection is a rule that declares the\n  evidence it needs (the four behavioural probes, a fixed-text pair, a thinking\n  reply, a floor reply). Evidence is collected once per run and shared; the\n  rule table's order is the verdict's precedence.\n- **Model facts.** One glob table says which models think adaptively, which\n  tokenizer generation they bill with, which cannot switch reasoning off.\n- **Isomorphic.** Web-standard APIs only, no `node:` imports. The HTTP call is\n  an injected `TransportFn`, so a browser can route through its backend and a\n  server through an SSRF-safe fetch.\n- **Zero required dependencies.**\n\n## Install\n\n```sh\nnpm i ai-model-verifier\n```\n\n## Use\n\n```ts\nimport { verify } from \"ai-model-verifier\";\n\nconst result = await verify({\n  vendor: \"anthropic\",\n  baseUrl: \"https://relay.example.com\",\n  apiKey: process.env.RELAY_KEY!,\n  model: \"claude-opus-4-6\",\n  mode: \"direct\",\n  checks: { signature: true, tokenTruth: true, tokenizerFingerprint: true },\n});\nconsole.log(result.verdict, result.reasons, result.findings);\n```\n\n`runRules` judges chosen rules on a wire you already know works, without a\nhandshake, and is what a pipeline with its own connectivity probes wants:\n\n```ts\nimport { runRules } from \"ai-model-verifier\";\n\nconst run = await runRules({\n  vendor: \"openai\",\n  baseUrl,\n  apiKey,\n  model: \"pool/claude-opus-4-6\",\n  mode: \"server\",\n  transport: myFetch,\n  bodyExtras: { provider: [\"bedrock\"] },\n  only: [\"coding-tool\", \"foreign\", \"served-model-mismatch\", \"quorum\", \"tokenizer-fingerprint\"],\n});\nfor (const f of run.findings) console.log(f.rule, f.severity, f.reason);\n```\n\nExtend without forking:\n\n```ts\nimport { createVerifier, defineMaker, defineRule, defineVendor, defineModelFacts } from \"ai-model-verifier\";\n\nconst { verify } = createVerifier({\n  vendors: [defineVendor({ id: \"mywire\", ... })],\n  makers: [defineMaker({ id: \"acme\", name: \"Acme\", wire: \"openai\", models: [\"acme-*\"], home: [\"acme\"], modelNames: [\"acme\"], acceptsCloudHost: false, tiers: null, cjkNative: false })],\n  rules: [defineRule({ id: \"my-rule\", layer: \"probe\", needs: [\"probes\"], applies: () => true, judge: async (ctx) => ... })],\n  omit: [\"substituted\"],\n  modelFacts: defineModelFacts([{ match: \"hy4-*\", maker: \"tencent\" }, { match: \"my-model*\", alwaysThinks: true }]),\n});\n```\n\n## What it detects\n\nVerdict rules, in precedence order: a must-think model answering with no\nreasoning tokens (`thinking-floor`, opt-in); a tokenizer fingerprint matching a\ncheaper tier under a caller-supplied calibration (`tokenizer-fingerprint`,\nopt-in; ships no table, see the rule's note); `coding-tool` refusals (Kiro or\nAmazon Q wearing a Claude badge); scam pages; CJK language leaks from a\nsubstituted Chinese model (skipped for makers that train on Chinese);\nresponse-mixing proxies (`mux`); another maker named as the maker, judged by the\nrequested model's own maker rather than the wire; the reply's own `model` field naming another tier\n(`served-model-mismatch`) or another model (`substituted`); and a probe quorum\nthat only fails on non-transient evidence.\n\nA model whose id names no maker is judged by the wire's default maker, and a\nmodel that only says \"I am an AI assistant\" fails the identity probe, which the\nquorum tolerates when the other three pass.\n\nNote rules report without judging: the Claude thinking signature, token\naccounting against the billed usage, a self-reported tier, the response\nenvelope (which vendor's shape and id minted the reply), throughput and the\nsurvey.\n\nThe answer fingerprint (`answer-fingerprint`, opt-in via `checks.answerFingerprint` or `only`)\nasks eight one-word questions at temperature 1 (a random number, a colour, a letter, a city, a\ncoin flip, an animal, a favourite number, a fruit), `repeats` times each (default 3, 24 calls of\n32 output tokens, `concurrency` of them in flight, default 4), and reports the answer counts per\ncell. One run says nothing; the answer\ndistribution of a model is specific to it once a cell holds 10 or more valid answers (the\nmethod of arXiv 2607.10252), so a caller merges runs over days with `mergeFingerprints` and\ncompares a lane against the profiles it trusts with `compareFingerprints` (Jensen-Shannon\ndivergence in bits: match at or under 0.25, mismatch above 0.35) or `compareToProfiles` (a set of\naccepted profiles: the maker's own route, each known host). The prompts carry no nonce on\npurpose: the bytes must be identical across lanes. It separates families and mixed pools; it\ndoes not name a version or a quantisation level, and nothing in the literature does black-box.\n\nTwo more note rules read what the lane leaks about itself: `think-leak` (reasoning returned\ninside the content, which also poisons the identity probes) and `wrapper-leak` (the survey's\nreplay of prior instructions matches a known IDE or agent wrapper).\n\nA maker may carry `selfConfusions`, names the model habitually gives for itself that are not\nevidence of a swap: DeepSeek answers \"openai\" or \"chatgpt\" about half the time on the routes\nDeepSeek operates. Those words are never foreign for that maker and pass its identity probes,\nwhile a competitor's name (a DeepSeek saying \"kimi\") stays foreign. A self confusion is added\nonly after it has been measured on a route the maker operates.\n\nThe tokenizer fingerprint now measures every maker (its verdict stays Claude-only) and adds\n`diverseDelta`, the billed input tokens of a script-mixed text that every vocabulary splits\ndifferently, so two lanes of one model on different tokenizers show it in one number.\n\nThe survey (`survey`, opt-in via `checks.survey` or `only`) asks four questions\nfor the record and reports every answer with its usage, hidden token count and\nlatency: a verbatim replay of any prior instructions (a relay's injected system\nprompt shows here), a sum (with a fact check, and the thinking it cost), a JSON\nobject naming maker and model (with a parse check) and a one sentence self\ndescription. Training cutoff and context window were asked until 3.4.0 and\ndropped: one backend known to be real gave twelve different cutoffs in 34 runs. Nothing in it decides a\nverdict; over many lanes and weeks it is the record to read a model's usual\nanswers from before any rule gets authority over that maker.\n\n## Tests\n\n`bun test` replays recordings made with the 1.4.1 build (`test/parity`) and a\nset of synthetic endpoints. `test/parity/record.ts` records a new fixture.\n\n## License\n\nAGPL-3.0-only.\n","readmeFilename":"README.md"}