{"_id":"@ai-application-toolkit/guardrail","_rev":"2-3d61a582ef2128d1cd66f97e1a3d04e7","name":"@ai-application-toolkit/guardrail","dist-tags":{"latest":"0.1.1"},"versions":{"0.0.0":{"name":"@ai-application-toolkit/guardrail","version":"0.0.0","keywords":["ai","llm","toolkit","anthropic","claude","guardrail","middleware"],"author":{"name":"Danny LAN","email":"45042818+shaoyulan@users.noreply.github.com"},"license":"MIT","_id":"@ai-application-toolkit/guardrail@0.0.0","maintainers":[{"name":"dannyshao","email":"dannyshao94@gmail.com"}],"homepage":"https://github.com/shaoyulan/ai-application-toolkit/tree/main/packages/guardrail#readme","bugs":{"url":"https://github.com/shaoyulan/ai-application-toolkit/issues"},"dist":{"shasum":"c38910f12da2c3e270a3864fd9fca4b7a0252dcc","tarball":"https://registry.npmjs.org/@ai-application-toolkit/guardrail/-/guardrail-0.0.0.tgz","fileCount":11,"integrity":"sha512-IrkH7d62sCJqZverNTHy8Q72DM/i885NRwTn5p7rkB1FSpAFV/PjcqrWlwAGcedg/LGZ7HiNQ99daG23XE2wAQ==","signatures":[{"sig":"MEYCIQC6egKVjFYBgvKQddWoj24Grsc0KT+2FLA0bLoKtyB/nwIhAJKa4Di/G2/2/Ut+NSPylG7MjdlWTSvx5cTN5NssBTIa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14123},"type":"module","_from":"file:ai-application-toolkit-guardrail-0.0.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"eslint src","test":"vitest run","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"dannyshao","email":"dannyshao94@gmail.com"},"_resolved":"/private/var/folders/yd/ygwjqvld63b4z_j_0dk3krzm0000gq/T/0589b3f114a81de5aab3f595f1202f77/ai-application-toolkit-guardrail-0.0.0.tgz","_integrity":"sha512-IrkH7d62sCJqZverNTHy8Q72DM/i885NRwTn5p7rkB1FSpAFV/PjcqrWlwAGcedg/LGZ7HiNQ99daG23XE2wAQ==","repository":{"url":"git+https://github.com/shaoyulan/ai-application-toolkit.git","type":"git","directory":"packages/guardrail"},"_npmVersion":"11.11.0","description":"Guardrail middleware for the AI Application Toolkit runtime.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"@ai-application-toolkit/core":"0.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","typescript":"^5.7.2"},"_npmOperationalInternal":{"tmp":"tmp/guardrail_0.0.0_1782911981601_0.9653139566553366","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ai-application-toolkit/guardrail","version":"0.1.1","description":"Guardrail middleware for the AI Application Toolkit runtime.","license":"MIT","author":{"name":"Danny LAN","email":"45042818+shaoyulan@users.noreply.github.com"},"homepage":"https://github.com/shaoyulan/ai-application-toolkit/tree/main/packages/guardrail#readme","repository":{"type":"git","url":"git+https://github.com/shaoyulan/ai-application-toolkit.git","directory":"packages/guardrail"},"bugs":{"url":"https://github.com/shaoyulan/ai-application-toolkit/issues"},"keywords":["ai","llm","toolkit","anthropic","claude","guardrail","middleware"],"type":"module","sideEffects":false,"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"@ai-application-toolkit/core":"0.1.1"},"devDependencies":{"typescript":"^5.7.2","vitest":"^2.1.8"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","lint":"eslint src","clean":"rm -rf dist"},"_id":"@ai-application-toolkit/guardrail@0.1.1","_integrity":"sha512-575dxoIzlO4PKIipQrbe2gxvri3th6Kvq6NHRigcN7UWabQtXsa0Gw4Zka6KgKUsPOiw43veTyT2Rf9kfc4CGQ==","_resolved":"/tmp/16cbbc824928597708ad7fee8adb8787/ai-application-toolkit-guardrail-0.1.1.tgz","_from":"file:ai-application-toolkit-guardrail-0.1.1.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-575dxoIzlO4PKIipQrbe2gxvri3th6Kvq6NHRigcN7UWabQtXsa0Gw4Zka6KgKUsPOiw43veTyT2Rf9kfc4CGQ==","shasum":"01e4b6bdd39c3c65beb4440694643e979ee662a6","tarball":"https://registry.npmjs.org/@ai-application-toolkit/guardrail/-/guardrail-0.1.1.tgz","fileCount":11,"unpackedSize":14123,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEzwMW3hWbDeckq29Wc5C+Ua903lXYFMIvkEHt4m6nk6AiAaWt0fQS3u6w/WgKOdliNQSj5i0kyKcQpdqAWjIM9l5A=="}]},"_npmUser":{"name":"dannyshao","email":"dannyshao94@gmail.com"},"directories":{},"maintainers":[{"name":"dannyshao","email":"dannyshao94@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/guardrail_0.1.1_1782913594378_0.9615272038359608"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-01T13:19:41.428Z","modified":"2026-07-01T13:46:34.655Z","0.0.0":"2026-07-01T13:19:41.748Z","0.1.1":"2026-07-01T13:46:34.529Z"},"bugs":{"url":"https://github.com/shaoyulan/ai-application-toolkit/issues"},"author":{"name":"Danny LAN","email":"45042818+shaoyulan@users.noreply.github.com"},"license":"MIT","homepage":"https://github.com/shaoyulan/ai-application-toolkit/tree/main/packages/guardrail#readme","keywords":["ai","llm","toolkit","anthropic","claude","guardrail","middleware"],"repository":{"type":"git","url":"git+https://github.com/shaoyulan/ai-application-toolkit.git","directory":"packages/guardrail"},"description":"Guardrail middleware for the AI Application Toolkit runtime.","maintainers":[{"name":"dannyshao","email":"dannyshao94@gmail.com"}],"readme":"# @ai-application-toolkit/guardrail\n\nGuardrail middleware for the AI Application Toolkit runtime.\n\nPart of the [AI Application Toolkit](https://github.com/shaoyulan/ai-application-toolkit#readme).\n\n## Install\n\n```bash\npnpm add @ai-application-toolkit/guardrail\n```\n\n## Usage\n\nA guardrail returns whether an input is allowed. The runtime runs every\nguardrail before executing a tool and passes a `GuardrailContext` (the target\ntool id and the immutable run context) as the second argument, so guardrails can\nauthorize based on the caller — not just the raw input.\n\n```ts\nimport { defineGuardrail } from '@ai-application-toolkit/guardrail'\n\nconst noSecrets = defineGuardrail<{ text: string }>({\n  id: 'no-secrets',\n  check: ({ text }) =>\n    text.includes('SECRET') ? { allowed: false, reason: 'contains secret' } : { allowed: true }\n})\n```\n\n### Scope-based authorization\n\n`defineScopeGuardrail` enforces per-tool OAuth scopes against the authenticated\ncaller in `context.metadata.auth.scopes` (populated by a transport boundary such\nas the MCP HTTP server). A tool with no entry is unrestricted.\n\n```ts\nimport { defineScopeGuardrail } from '@ai-application-toolkit/guardrail'\n\nconst authz = defineScopeGuardrail({\n  required: { 'delete-user': ['admin'] }\n})\n\ncreateRuntime({ tools, guardrails: [authz] })\n```\n\n## License\n\nMIT © Danny LAN\n","readmeFilename":"README.md"}