{"_id":"agent-sanitizer","_rev":"205-5176026fb8641c7bb879e74dea20c3b1","name":"agent-sanitizer","dist-tags":{"latest":"2.58.6"},"versions":{"2.0.0":{"name":"agent-sanitizer","version":"2.0.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":{"name":"Alexander Turner"},"license":"Apache-2.0","_id":"agent-sanitizer@2.0.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"89ee3aca56ff8db96e9a11356aa185be9a950776","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.0.0.tgz","fileCount":34,"integrity":"sha512-nYir4T4uCf8he709SKBEOrlelkNP7CR3uA80lzLrgrVlL9TnRUn2ODdYhYU8Joddm/BtTn9jZoglBQgH2oKZ3Q==","signatures":[{"sig":"MEYCIQCMfaCVgDbSN9V5O9z45YpRusXCtWcRjGI2AzoTf3W05AIhAJv4c+AGrqkqDbCUC3c3KFMRVnFNPArnVULYHof3lvxO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":433237},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"}},"gitHead":"655b7fb5471fc14476270e08a0835461ab680fc4","scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit","format":"prettier --write .","prepack":"pnpm build:types","prepare":"pnpm build:types && if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then git config core.hooksPath .hooks; fi","coverage":"c8 node --test","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"turntrout","email":"alex@turntrout.com"},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"_npmVersion":"10.9.8","description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"22.22.3","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.8.0","devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.0.0_1785199744025_0.33933661023311723","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"agent-sanitizer","version":"2.0.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.0.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c37dbc911cbb69c987fa1816487a79b319c22dda","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.0.1.tgz","fileCount":34,"integrity":"sha512-qrposVKZOtAC1wh0x5D/yy1uGr7KYClXptwUL2fuEugsz3XoR1/Jtqu5/PXwORB3SKXsuMHfM5iFANAQQJy4Kg==","signatures":[{"sig":"MEUCIQC2O0jL3+gWifUsFWwtBFrhqqQQtXuwQN53r+p3m29gkgIgbJWA7pX6J5k6mPv0AzX72QoZFy7qIQeibibsYkeLi0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":433030},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.0.1_1785273112943_0.5731763640840564","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"agent-sanitizer","version":"2.0.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.0.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a13c5d726b6a02c767fbbf7b94d2395a7018d1ba","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.0.2.tgz","fileCount":34,"integrity":"sha512-9wYv0DPNSHIlHthxogzSO0tA/4ELEFP2UhlE8nmVuBMhDwua9uG9MjN4rDGFPWkGqxT4kl3vTybixV0nQYp9gw==","signatures":[{"sig":"MEQCIG4auaUpv2Zwc3vDD9yaLorF3QRy2DczYcD2eRCf+mERAiBwwO/uuwS54gm5Ni3QyIefuqK7HDrfheCVRwp/QzSizg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":433030},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.0.2_1785273905828_0.2911299225682622","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"agent-sanitizer","version":"2.0.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.0.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"235b445caf76db62918226d04904233449f38688","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.0.3.tgz","fileCount":34,"integrity":"sha512-nR+ZiKikCQC5Fm5fqpvcpHb7rXUYbwE0OlvNbvNe/fgN4aOcNvC6RZUiJd1Qx4un9Dfi6YjTX+Orq1kqXFDyug==","signatures":[{"sig":"MEQCIFx6381J9Db8GcjjpLbXBr9+4CIzZCNij4kOUjZmDelSAiBt+kxzBHHTqSU9HLjC9T8bi6UEHYGr0t19b0/cAWg28Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":433030},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.0.3_1785277815250_0.8782893107010958","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"agent-sanitizer","version":"2.1.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.1.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"76e73c9cc46bad862e8088094cd0ca4c23515ff5","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.1.0.tgz","fileCount":34,"integrity":"sha512-r6b0LJYRn4Jc9vkwezoUv7Yb2lANPmnuOA2TlxpG+WHTg995/H8t5jnSQUmKeZV9Xpg+av1Jlf/xTI1T5ovJLw==","signatures":[{"sig":"MEUCIDQZ8vnIuybhSg+mKB+GYDvSYHLV99R9c4ofnWZcMemrAiEA9Mbz8l/blV9AtQjtJWPAX6nmIj16ApO3tDn5qYormA0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":433030},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.1.0_1785349655384_0.43627649937524837","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"agent-sanitizer","version":"2.2.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.2.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c37505b6b8ed09dae753f162ec1eee42157f1fe3","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.2.0.tgz","fileCount":36,"integrity":"sha512-rPCjcGGO3ubaOvZLH3RZObbedSQP/cfdiQI7JT9F59NZdHq8vJm1NIEwughkLZnzOtMsvo66i92P6WIo9oDFJQ==","signatures":[{"sig":"MEUCIQDA0v4P20DADOnBEf0wTZpJNYpPBX92zTEUdIscP+Og3QIgT7u5uwqlRE1X+IFTnOt4tzjqBbXQOG9DUYwX/l9BnPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":442112},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json"},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.2.0_1785373521423_0.7270757551990266","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"agent-sanitizer","version":"2.2.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.2.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"61f6f255484d76d6cd2b8d1c4cdedd1093dbfe17","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.2.1.tgz","fileCount":36,"integrity":"sha512-0e2cUr+QOW8pt0DD8PnMoXUGJkZsMJKK843aNZbWYYVbZL6MKxA9QdIAuteCXDf9+64zzx7TZeyb/GlkNxrgMg==","signatures":[{"sig":"MEQCIH/ki8CZ8siWW3Xk9f9ua66Vew39xs+5xObDStlkHy3ZAiAObINF4I0L33LT2hK88SQY0Q90biVameUxcR/V51JHdA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":442112},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json"},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.2.1_1785376405595_0.6061214457733373","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"agent-sanitizer","version":"2.2.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.2.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"9b443a0acd27bfab24bc28a85552e1a8dbd719af","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.2.2.tgz","fileCount":36,"integrity":"sha512-BT/spbnh5AY9/nDuqR7MIrFTp7KeUFTioqj65pWoaz0AMGg3dQbFg4Vd7NqFaCNfr79khW650ip600cUqcMkUA==","signatures":[{"sig":"MEUCIQCJc7lCJcgj3XdrA0Zi+ygF8dMnkwMY2EOppk3SmcPk3QIgegXqre9ubgk/UP/Rdi9kBtDLcZLdpe/qtZDi/EJ71sA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":442669},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json"},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.2.2_1785383245159_0.6577231772920922","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"agent-sanitizer","version":"2.3.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.3.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"9f4453833f94da423bb16909ca5abddea1975350","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.3.0.tgz","fileCount":36,"integrity":"sha512-TsWBMWtJ404ZrWIgPES4hxjsFAapaawge60rO1mCSvCqKPySGHYg7m9G0CQh3B4tAp06VOIhss73Ix3xAn1M2Q==","signatures":[{"sig":"MEQCIByqTa657RQNRDd5rLY7RYGXrcWf2yjAirDwfkcRZHbUAiBPlWgluh78CFuALsZblQMc18IVPs500m4/I0qHmTO0NQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":442971},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json"},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","coverage:hooks":"c8 --config .c8rc.claude-hooks.json node --test plugin/test/*.test.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","namespace-guard":"0.20.0","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","agent-control-plane-core":"0.2.13","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.3.0_1785386737904_0.03860967174480767","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"agent-sanitizer","version":"2.4.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.4.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a02351e46b008751c397080e2efa4d1cd86ed714","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.4.0.tgz","fileCount":53,"integrity":"sha512-jHwJqXcTzkxRHDt1Q+/5MtsQKpwIQWI5W11cX4fO/jKwm4at9KQw4WTBrg1zawIvw86ILGvRoO3aIwm3VK5Nsg==","signatures":[{"sig":"MEUCIQCGdcmSkQAt4+Z1zJ7hU5s4KA8968GOhzr4OJXAKT8pGwIgNkJUTGXdMG7jIkkD2vn2H01MUqLESWkmw6XECBgtqfY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":591323},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":"./claude-hooks/plugin-hooks.mjs","./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json"},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.4.0_1785389089244_0.8717558810811459","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"agent-sanitizer","version":"2.4.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.4.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"12dff4b3683eadcc470b12af9bb5d6d105630805","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.4.1.tgz","fileCount":53,"integrity":"sha512-mGOJskoLmaSUpJYVAQsjfW1tk4xX30MF3GNskhg6OcQx83DFOFhWqYjzaO5djVUL+AoH37wCZkKoLxpkSPBDgw==","signatures":[{"sig":"MEYCIQCoiR5c76tgfG3B5I8C/br0hnr2e3Lyxp86VKWoqcZ6KgIhAJMHhxUDrJYBvY/DSwOy9Numw48Gf9A7PgbbNqSplW9O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":587486},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":"./claude-hooks/plugin-hooks.mjs","./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json"},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.4.1_1785389633678_0.7103925508694369","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"agent-sanitizer","version":"2.5.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.5.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1196e82f45bd8716c630d986965daa89c7c3ec43","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.5.0.tgz","fileCount":67,"integrity":"sha512-bux6N4NyGEwg6l2Kyjc0dLFcQECJ1FAPZtgO99yrC1/J5a2y4jFfFET/QFIciRY+EoHrmcUgG2/UppRLSpIBUQ==","signatures":[{"sig":"MEQCICU1NofMSvT8FDLrT1CtEJiS39bTywnDZOhDFCrJygioAiBsVesuRCxLzcSat+kWrwPRLWHu/oz6KJB7kktIpNFGRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":632784},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./claude-hooks/*":{"types":"./types/claude-hooks/*.d.mts","default":"./claude-hooks/*.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json"},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.5.0_1785391711828_0.30805061998334415","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"agent-sanitizer","version":"2.6.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.6.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"9ccc6ed7571beb0ddc338da10d8f6c2725d035aa","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.6.0.tgz","fileCount":67,"integrity":"sha512-d/0z/aLRJdscEIvjrMFIkxbHQ2YaI2dNW46n8PFud3TdBVg4IE4md29UTRMIRBBjvPSZ2CNl0bktO9GH3zcPcQ==","signatures":[{"sig":"MEQCIBLyyKmzX1WU45dxELzYq/FTeLFnRRvmz5dNpgXBv8ldAiAVQF3JRJtq2I7NSdcXZd2UFdACvo1vC5W+rLIN1wQnGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":632784},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./claude-hooks/*":{"types":"./types/claude-hooks/*.d.mts","default":"./claude-hooks/*.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json"},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.6.0_1785393734269_0.27739898321588097","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"agent-sanitizer","version":"2.7.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.7.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"558517a4771cbb3e4fb179ad50ba306cc21b41ae","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.7.0.tgz","fileCount":69,"integrity":"sha512-gyPgcgo5VvauAEJ8BApuf01H084aVswWZiQIjJQRZqxjHO0VwwG5jZ4j+MBWAVloqNVXGilm7EHykZv+qSbI2Q==","signatures":[{"sig":"MEUCIECr1rei3PaN4yY9MZfB7UrNRMESsOT/UMs8fJIOuKD4AiEAzxu60g7jZIMnbu1UBs0B6UIa12PjsQoYW0L4DfXBgbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":646859},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./claude-hooks/*":{"types":"./types/claude-hooks/*.d.mts","default":"./claude-hooks/*.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","style-to-object":"1.0.14","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.7.0_1785427795832_0.721767916829331","host":"s3://npm-registry-packages-npm-production"}},"2.7.1":{"name":"agent-sanitizer","version":"2.7.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.7.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"6d3d13b111643f2751b0d0193f4eb42942c6557e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.7.1.tgz","fileCount":69,"integrity":"sha512-bTTDUeZFzBshwBud/LXjN7B5gFGHOaDszWQU/HyjYYfcsTj86CJncCWKJw2/pSmyxyn1t4QMaVr298a8K0bEKA==","signatures":[{"sig":"MEQCIDQO1oq6FIAzryPeQ9ODehMJXAV8mefqjndk0HoYwq66AiAsPaRzJTK1YN3z0uuFcYfrkPOEJynO3qXrlI5e3oEjAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":646826},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./claude-hooks/*":{"types":"./types/claude-hooks/*.d.mts","default":"./claude-hooks/*.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.7.1_1785427863179_0.0862333788795544","host":"s3://npm-registry-packages-npm-production"}},"2.7.2":{"name":"agent-sanitizer","version":"2.7.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.7.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1179ebe3caf358781ebbf821402240ccb62526bd","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.7.2.tgz","fileCount":68,"integrity":"sha512-Cs2j2vHxBvmrDYoWOxsB3bEgfeI9+2+BKn44gGH2f7R4UQjW3pN9I2jHflDfqKU1V5+04qUCIunuvfz0HU6dSw==","signatures":[{"sig":"MEUCICN4bsnAz3zoH/4jq1yuf9OnJfAZ6bDLuKcTWvKdH2siAiEAoy/PsK8ttsZrYRJY8AES8CgCUBf7KHSIwGudgiC5cIE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":666706},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.7.2_1785429189911_0.10301306819254763","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"agent-sanitizer","version":"2.8.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.8.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"bb6a4728d79db3a78c2b504c76ceb177edfffc44","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.8.0.tgz","fileCount":68,"integrity":"sha512-/bWAkTavMULHTbrn4Ko23sccUJoVFG0sIn1rozw0t7PxC2adJuOUxxC0qH5tVL0DWBJBxc7G2H9O7U/gX4Bd6A==","signatures":[{"sig":"MEQCIFFkb/o9+rfpE5A/W3FwKAUHpTQjhwmc18UEHv1xpVkBAiBRPvPpevbTd3x9ynehVYj6r0g2WaiLecdgrRwr6NvABA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":666706},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.8.0_1785430151382_0.5092174079463123","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"agent-sanitizer","version":"2.9.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.9.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"f4a73a01bbb55f434d2ba31e616f8f36ecbe2f73","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.9.0.tgz","fileCount":68,"integrity":"sha512-8v9PKgnk7rtykcEKOSO6yxjzSXDZFh6jz2eiWzMTOiSMtfRM3pOAemeGApX/IM8rmi5332SfsCcytdSaosq+5w==","signatures":[{"sig":"MEQCIC4rReolKFSbKQmsp95gLzReQAV9Nm9lo0Jd6228IPY/AiBfoL8gxJr2Uv3YEzSpjd8LikNTRfYQmLISgtpfuyNarA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":699089},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.9.0_1785459020461_0.20201130404235568","host":"s3://npm-registry-packages-npm-production"}},"2.9.1":{"name":"agent-sanitizer","version":"2.9.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.9.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"21ef52681f4c6324a6e1d5027a016950543b2ce2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.9.1.tgz","fileCount":68,"integrity":"sha512-Ug0+p+ZOsrS29G1Wcwn6Swd6lT5a8gU85nUhW8kpJF3L0bDjPwZWjyQrs3NHNWjL9RnN0AHMzgp/E6K8PnbfJQ==","signatures":[{"sig":"MEQCIE/ahKWPMSpQLN+o5irnO/3f4PV7zPjqhS9iTEhX6NrUAiAt2mrOsWSRa+s16ZndYi2ERwZRjRGlYHByJeObW8ugMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":702234},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.9.1_1785461401294_0.40907627569967664","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"agent-sanitizer","version":"2.10.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.10.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"5c88bc01a2c5625cc556341fe28eb8b56a99126b","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.10.0.tgz","fileCount":68,"integrity":"sha512-ygU89JEPmUmbJlaRxGo0px4jmh5pe0XSbMZpcSJ1zYglsyZepViC5S36cDReunpz5+Ot4/zvAupHFNMmS8emnw==","signatures":[{"sig":"MEYCIQDkOMva7yzLgQdOkWns/XrXHYi+elPGDKVAeMADoFn88AIhAMB63xigYlUpXOXkgliXwVEe4wQFw16KgD2ePAT6eQC8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":716884},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.10.0_1785512351704_0.9100511520020451","host":"s3://npm-registry-packages-npm-production"}},"2.10.1":{"name":"agent-sanitizer","version":"2.10.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.10.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"eaf2a4e8810a460c3318f81cd4419bb7a1be6032","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.10.1.tgz","fileCount":68,"integrity":"sha512-jDoqvmJ8cNJw9NKqoa9uuKguC5B8tgTQfrEDr4hnCPxqGpVTrVv2+cdPPQCea0Ij9l+29RoyomX9r9J3zLlPYg==","signatures":[{"sig":"MEUCIQDr1iA+iVyICR6ObNxCDZiLEGVxewfBb4yUlvZn38I1bQIgXugiiTakDQMfk1MvPxLiahtUrvApq0zCN/Ho0Af3nzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":720119},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.10.1_1785514520430_0.06519143010382034","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"agent-sanitizer","version":"2.11.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.11.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"8c1f1b9b00b91acf723a298e8bf314052e0a9b43","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.11.0.tgz","fileCount":68,"integrity":"sha512-8xDGYBeNC5ugQIv8q+kdI65nlp37vvjMaTZSIRAY3wvSDChTUlUZhZc4mx6K90ki4mF6kC+/An3/brDz1o7Iug==","signatures":[{"sig":"MEYCIQCELrMO9sZr1/cw5719WAK8TEy5yznrT1HXk4hJDgf2AQIhAI0BIH3w6lUJwv7o5dofdIhnIUIWWJbDOdbzGYVQ6rtZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":729321},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.11.0_1785566927534_0.54980285915242","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"agent-sanitizer","version":"2.12.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.12.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"671a414e4e7263b34fb376aed40b857435c3e849","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.12.0.tgz","fileCount":68,"integrity":"sha512-AAJ1M5OpIzh7RLdfbDCbSZiopp9z6cVVRmh677HsBpAULNOrmqCCweZFUFfG+8rCCTzyQrTdf1VOmJBzhiV1XA==","signatures":[{"sig":"MEUCIQCHYKZC46QYqY69p2I2gaKp3Qxw7w+ewo79xDDYOIoehQIgR4d3/4AEkf/V56S8V8WHYxyqi0lgLCV4brxJIrJV2AE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":729697},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.1.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.12.0_1785570610275_0.6320141731092557","host":"s3://npm-registry-packages-npm-production"}},"2.13.0":{"name":"agent-sanitizer","version":"2.13.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.13.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"cc75750a59c5e6b97c897e9a5bd1eb48263a54a1","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.13.0.tgz","fileCount":68,"integrity":"sha512-SNo1R+dUBTJgnbF+wZZ6K1rHUvwbttQ4NCJrLrEGFMHeufRL+G65Kxv/UPvyElpoYap9cKEOsbGM3mergDXXZQ==","signatures":[{"sig":"MEYCIQC8KKu5MRt9nQXgKnsCCbhgDhksGbLOHUYZZeV1MgdrpAIhANGmoNP4db5mYHkbmTdjOJLpQhF6KvTd8+3BPCwoaJ+V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":723478},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.13.0_1785585389937_0.5877643835534601","host":"s3://npm-registry-packages-npm-production"}},"2.14.0":{"name":"agent-sanitizer","version":"2.14.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"74436053129c826c091515ba508595552317b3c2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.0.tgz","fileCount":68,"integrity":"sha512-Zmi12MccKAOmupInq4rRkEw71dKlhcaEue2rs54o5rDqtVJjkGViU9yjFnEyrdiGrPdl4Jq1UdBeh7BZHFguxg==","signatures":[{"sig":"MEYCIQCw709a4BvB+dMA1MSKamn3UfqIaccSnJ0rcPrkbGmOpgIhAI7bp3dSKVYxnw4Pcv68dP7ubjzfiKCFdF3u4suoY11q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":731317},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.0_1785606949262_0.7755606119061964","host":"s3://npm-registry-packages-npm-production"}},"2.14.1":{"name":"agent-sanitizer","version":"2.14.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"058000636c0c1dbdf6b84fed5fcb8246060cf4ad","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.1.tgz","fileCount":68,"integrity":"sha512-4AVDIXyA6K8u3Hqb07eEwGz3mDT3aUfhArprkPFd3CHwD5Kqh9V/cx5kErSAa2JglRuEMMXDGDuZOctiiAKrpA==","signatures":[{"sig":"MEUCIQCIbhuBuSH04c+LU2uyGshbTfcYGZcAx1erwTXsyFCcLAIgZBfZYPP7PKJ4Qcg+zu//cb+QlBHZoQQ7iC84g4iRvb0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":732429},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.1_1785609091051_0.8849447454191848","host":"s3://npm-registry-packages-npm-production"}},"2.14.2":{"name":"agent-sanitizer","version":"2.14.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"3f5c124b17715a7ca1053cfdd7a03a258c414332","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.2.tgz","fileCount":68,"integrity":"sha512-Qh3WhhTUQSsTTUkUFXzvMD5AjTLU/PvqllGvg/kjkZVB7DzESV8Kb5fBrSj0fCwjj50xOjUiw1iscotk9hxFwA==","signatures":[{"sig":"MEUCIC2LX7RKJiq1rD4lvYURdfwM+M2E4LV3otA0I2WqugdfAiEAk78PCJAUvwkFggSb0O4pqHgAIbZwJFTrsC4fjQSbAyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":732429},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.2_1785778158366_0.8183691557296386","host":"s3://npm-registry-packages-npm-production"}},"2.14.3":{"name":"agent-sanitizer","version":"2.14.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"38215941e1578877dee4a077e5a3505a627717a4","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.3.tgz","fileCount":68,"integrity":"sha512-CQtujBUSArDhg0QYioIgDnrOszcWgmFIAEeag7CCalYHxbvQFzKa5iDDDMUegs9J7v+rwBbOtIvRsOITsfCNGg==","signatures":[{"sig":"MEUCIQCoQPgAlssySYLKoTfI5G/OgXFEbP5jcvKVLz92O5sjhgIgLX2jbqqFswWBWryBAEUgW/2WMh6hYbK4Ybf3npOloso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":732785},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.3_1785779679220_0.28098915042015915","host":"s3://npm-registry-packages-npm-production"}},"2.14.4":{"name":"agent-sanitizer","version":"2.14.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"ab149516c3600191a5429e43068f2ddcc734b28d","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.4.tgz","fileCount":68,"integrity":"sha512-3TL5/GeUEDE46Rsz9vo+mH0aGP5MH/O20vOZxg8VHE/4V5xb5bvQt7fbIn/PjbaryULUQLNGsHw4ROhdTrhhcA==","signatures":[{"sig":"MEUCIQD80LFED9r/CkX1+sEYLb/pYaX/ufzP+Ej36XQT6Nx64QIgJEA3YrCOYsTk/t79MgyF8JEqQjSs4Tjkyhqtr1yo5AU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":732692},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.4_1785779901661_0.7813142831095579","host":"s3://npm-registry-packages-npm-production"}},"2.14.5":{"name":"agent-sanitizer","version":"2.14.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"047c4de4faedfc77010ce0da9eee32b963cec141","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.5.tgz","fileCount":68,"integrity":"sha512-r/rEMmyCfi++FAD6JghgST6DGiiQIMIwTm7Olou5wXX2Jmpgwp3Uk1GSDKHNW4tQM4tx1gXtf+krypW0jVOvfw==","signatures":[{"sig":"MEQCIAwIcf21ZemyJFes4PQ4pvSYBrcGwZhSGBbIWS2PDGYMAiBuEShxLo0yhBEGW7Y/UcOrCmR3RQ260BteYrx/cUlfvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":735042},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.5_1785911266793_0.40449901790203446","host":"s3://npm-registry-packages-npm-production"}},"2.14.6":{"name":"agent-sanitizer","version":"2.14.6","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.6","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a1acdc05962d98fcd68aae58e86e441a20917829","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.6.tgz","fileCount":68,"integrity":"sha512-31btEfAU/8Awz4gS3kHkma8dJw1zCF2C3la5BRAtlnvfmCa6Q0FV1NcHusVpkmvjCUVOVSQZWGPFQgrezSoB9Q==","signatures":[{"sig":"MEUCIDRuOGi7OSQ/1tyYoi/xC6nq2o9Xz37+CPsXdAD7QapSAiEAg205kCSsBGvWivq+FcUH7pzn+M/9xDaHr45v5Lixu9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":735042},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.6_1785914873790_0.04747742884956163","host":"s3://npm-registry-packages-npm-production"}},"2.14.7":{"name":"agent-sanitizer","version":"2.14.7","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.7","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"6a05865a94c57da965ac948bad02eb2eda470b53","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.7.tgz","fileCount":68,"integrity":"sha512-Q0Gbzo/6fZ/zE2BnOahzABCf6uF4xt0p8s7QMugRbtGIpB8xHRnqV+lxjBv1sjkHno5ZlzKCP9SABMSL75upSw==","signatures":[{"sig":"MEUCIQDPZNZ3WdtWkwrnbB/DCnLPyabJtdGTSOCmfPu0ScQxiwIgFF0hlYxD0bNA62G71UhheM9zOd5X8097yhCNhjIPZto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":735042},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.7_1785914955822_0.544218108014898","host":"s3://npm-registry-packages-npm-production"}},"2.14.8":{"name":"agent-sanitizer","version":"2.14.8","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.8","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"7d57ff6a0846632c754c452be920f32faee7b483","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.8.tgz","fileCount":68,"integrity":"sha512-8h4Z1a4vQhAjxiq4Caf75pfUR66M7srLASXlTKtFXux4spTLy9Ks6Wgwd7atKmYSu/Z2UIJ++OQG5UluVbIHyQ==","signatures":[{"sig":"MEQCID8qOrWYsZFpiznw9xtpaqZ5AxRyfxS1VrDM2nWmWWBHAiAv8eUry4SwokKGlTJv6CJuKt8kE66ISJjqFGwMvVwlPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":735042},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.8_1785915008228_0.7178582299190019","host":"s3://npm-registry-packages-npm-production"}},"2.14.9":{"name":"agent-sanitizer","version":"2.14.9","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.9","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"2d66701f5314a87e9b3bf5baface879e14ae8dfe","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.9.tgz","fileCount":68,"integrity":"sha512-Ay84lvB9eg3MOUNIlY/NEjtU+jS2RG+NshrxLBoMijxVIuE1miaiD6BNnogKnuiGg/spFUIbLO/3wEMJ/HufsQ==","signatures":[{"sig":"MEQCICylmydEhYZUUPUHuaQE1omIup10cyI9sWPolPgDjGL/AiAKFijXQcxqL0OAdfXPA8yzC+J/vVjHnUy5KykMRpdshQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":746468},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.9_1785915353228_0.4330274895328978","host":"s3://npm-registry-packages-npm-production"}},"2.14.10":{"name":"agent-sanitizer","version":"2.14.10","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.10","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"d4b83ea9c5b112b9b12b67c065c23c1d647d882a","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.10.tgz","fileCount":68,"integrity":"sha512-DdzkNF8mN2AQRfoY8Ww2LOQPB39fYy4HsWpFp+pxqn11guMYQ40qKIZHHGz8vNmCS91b4NRTjyd11sqn4RhmPA==","signatures":[{"sig":"MEYCIQCExMMdQdac97VUanZm8PGi+1CvlL1lI3zfbMSwtQX1YwIhALDys7cJcR1GhSN6hrKBVAn01DojC1GMdBj2znJLG6Nk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":746469},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.10_1785947186699_0.1523703267425458","host":"s3://npm-registry-packages-npm-production"}},"2.14.11":{"name":"agent-sanitizer","version":"2.14.11","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.11","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"264446bbdefc5c06ac73aea55f223415ffaad698","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.11.tgz","fileCount":68,"integrity":"sha512-7DIwMOMo44ascmJfQ6eA85yRsTYopk4+tbj/Zdx/r8YPBOvlnDukLOzhN7gqRP3SMxJ/dIe4NwyWYqsRIDGHoA==","signatures":[{"sig":"MEUCIQDs7m1xJEddbehZbCItiCnxwtGuQIPh5Lv92mLXZtUe9gIgSOi9UbSkzF4k4n9PgBnJNCbRFmCA6m+QhWLDQjw9EzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":746469},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.11_1785951762660_0.23055415152044145","host":"s3://npm-registry-packages-npm-production"}},"2.14.12":{"name":"agent-sanitizer","version":"2.14.12","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.12","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a24954017108d6945979096f7a2d32e2e422aebc","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.12.tgz","fileCount":68,"integrity":"sha512-e1jOLlqylSELHMO19+hm9Czpdb6pdYGd5f6u2GnUYJiH+dA+d+6uOlcEOVxiEejha2AcOK0pIdTNNfRapS1A7g==","signatures":[{"sig":"MEUCIAjFYW1Kgbauwqb8lkBedTEsPO2iILnxFWGe3TVuOi/gAiEA5GPiSyAktwmlGg5t3KYE54oVaq5WKrLpgg/bEb39ZYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":746469},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.12_1785951862968_0.44715188816959683","host":"s3://npm-registry-packages-npm-production"}},"2.14.13":{"name":"agent-sanitizer","version":"2.14.13","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.13","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"31838af357f941de7b34ff2dad5c55fc602e03ab","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.13.tgz","fileCount":68,"integrity":"sha512-IuZSNMxVCI9YqT0295gOC6xM6Qljo/cCC/6D22DGzFSplyRA/8Q4pEperPDEMPoJDezYDDW2vka6udJASZ+FHg==","signatures":[{"sig":"MEUCIAev/O6gcEAeHHcL6bRrLiffBrO+ka91f92OCCjwtlZ3AiEA5OJJyfyejwtcen055p5ROSHPM8YrK2RkTgwKOVEEfGA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":746469},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.13_1785956232924_0.994193698276312","host":"s3://npm-registry-packages-npm-production"}},"2.14.14":{"name":"agent-sanitizer","version":"2.14.14","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.14.14","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"ed4c04dfe36e7636a7ef862eedf9057d1e35e0d5","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.14.14.tgz","fileCount":68,"integrity":"sha512-VPh6iNH6VrdU5P093pq/nGS+ziIckRbLgtXJ8wt41otTkBAGo6iKwl8g4p59xl3OdqbblSwGLMzBKTeLB+DwTQ==","signatures":[{"sig":"MEUCIQCsaM/A+XSWUNhWi8fRqeSMBUn2vOZckYKjLym7w5lk5gIgUDblS1kVweZD3LrTriM8ISG+31Qx6eaq71yu0HnOIzk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.14.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":746469},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.14.14_1785970084721_0.2292866061041572","host":"s3://npm-registry-packages-npm-production"}},"2.15.0":{"name":"agent-sanitizer","version":"2.15.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.15.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"7c18a07b8d520130f6b038457200615ae6f94fd9","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.15.0.tgz","fileCount":68,"integrity":"sha512-LQkBt7KqLMdvhIHOan9YP5APW1H0y1GmXJWuXHIDLv2xA3ps88ujBecqpsTciaFnomsh3saej5O5UsQNtKvIpg==","signatures":[{"sig":"MEYCIQCDu2+G7p60iakiIpltAmH6LwhdowNtwT0UNjC55Y//MQIhAMXy5DJ+vpurpvxCkmqqEC50z94oA9dPjyqsYPx2P2j/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":763947},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.15.0_1786122592227_0.02039290489805068","host":"s3://npm-registry-packages-npm-production"}},"2.16.0":{"name":"agent-sanitizer","version":"2.16.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.16.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a46187b27d0430c9854a5bc44432a5af43bde276","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.16.0.tgz","fileCount":68,"integrity":"sha512-GAno9t3vGAeFFCc9g0AyWFMf5XtpGQOtBrletmREoNCmJO7cYchOcHfN0E7wzENlgTxJAw9FPv2qxnnrz6nWRQ==","signatures":[{"sig":"MEUCIGo3M/wTQ4cryHrdt7EivSVkgVWxbcUQUj0ut+gkuJAcAiEA/tV1zbUJXKKCmnDFuJ4q550onHAPTMcF3ZpkDNeW2YU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":763947},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.16.0_1786128945174_0.5655246026960139","host":"s3://npm-registry-packages-npm-production"}},"2.17.0":{"name":"agent-sanitizer","version":"2.17.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.17.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"67a856a9d2a095f57229838e064f784cd00ffe4e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.17.0.tgz","fileCount":68,"integrity":"sha512-k4hNJsXJa20KZl3Kd/hXhtN7ECUhGOpoBWg+ZRT+WlbKEAUBUTsc6V6JezdU42G59qBMSl/bx8iIuLhg24kfRw==","signatures":[{"sig":"MEUCIQDN8e6ycWTxDRd8E3H9X6MX8p+SNYgAY8YN8+0Dw5YsfwIgW9j0x2xng9gr/vpu6ZF5DGOfnWjRCjJf0FKLu9hCtfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":763947},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.17.0_1786136739780_0.7829645782094008","host":"s3://npm-registry-packages-npm-production"}},"2.17.1":{"name":"agent-sanitizer","version":"2.17.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.17.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"e73874705474f76367f1102617a755f1fe1d00d1","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.17.1.tgz","fileCount":68,"integrity":"sha512-I2S04zhaNN4qLEDTNn81goP/F+pY3Uc+nY3Yo+Hcpam2Zzo16ZqAa1UI/gU2LxhbxxR/bSwdIRalqkHgHk1S9w==","signatures":[{"sig":"MEYCIQCUTzQ+gr4eyDLdoQJEMDxVZfK7rdlzU26o8vQbSP/zXwIhAJMF+7KeJrrhLeTnrLC4hZz5Lc7EYqsAi/hnTOPUC6YJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":763947},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.17.1_1786137656409_0.4715688982726871","host":"s3://npm-registry-packages-npm-production"}},"2.18.0":{"name":"agent-sanitizer","version":"2.18.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.18.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"0325fe84703cfdc3a2aad59f02b904bb389df551","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.18.0.tgz","fileCount":68,"integrity":"sha512-ZomkUw+5Eo4MztYEJAjcm6trMX2yeBDtk1rc86z/3J3V6gGwyLpWaTG+1otemeOwWWXhs8RH4hh5c76D3OXhHA==","signatures":[{"sig":"MEQCICnbDE2lC7fV0WD9KDIT7e1DJbZytkIUkUCqil1ZudupAiB3ehIhYhQu84WOX0VWJ6rVo+C5D3KSn8B4JDcd9RWaOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":763947},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.18.0_1786146539636_0.32125662459402715","host":"s3://npm-registry-packages-npm-production"}},"2.18.1":{"name":"agent-sanitizer","version":"2.18.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.18.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"75b721709b9416fecbf89c068653df5570d796a8","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.18.1.tgz","fileCount":68,"integrity":"sha512-0spSyLnOlnyGmwurSE8qjzr4mLymfAJePAc4VNy0BKvCtmpcEtMx9AlcTsuADm6ILG/2+LQrkHd5lxQMz4p8og==","signatures":[{"sig":"MEQCIBkuTi8O8BQB9OSF95auEfKehQ2mNIkjyJncEtLbVussAiAfAQvQ4fDpJRIWUYooG3e6QhUNfROny5yFCY2kQziumw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.18.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":763947},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.18.1_1786149422372_0.19871810261043588","host":"s3://npm-registry-packages-npm-production"}},"2.19.0":{"name":"agent-sanitizer","version":"2.19.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"42194872c1e855dd1997d623b2b937c39d23d8b4","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.0.tgz","fileCount":68,"integrity":"sha512-NO+Rw029BJX4zRhLxm7vH5nkFn68HryVipAqZPaFTjIfPMpJlf4Umop+/zqUFL0wkuuQFKA5IXuf+Egh9hup/Q==","signatures":[{"sig":"MEUCIQDyEISsBUlHNmyqzlXTzY3s25cAc4jjnDl3+j/nlG+vTgIgabDkokX+buaxM+Dz5moa0Gy0isZHge910STcHAFw6w0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":764670},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.0_1786149690387_0.9748308059968862","host":"s3://npm-registry-packages-npm-production"}},"2.19.1":{"name":"agent-sanitizer","version":"2.19.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"e5192ea289943203726af55fdc9b8d58a5556e14","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.1.tgz","fileCount":68,"integrity":"sha512-M1lasZ7DbdkST4xn2gYHZBw1vHUck4TnbPwN3IGHXFTbxwHrSz+Kp6o5ONQF0ahdySEtMCABwHDIQkovy+EFbA==","signatures":[{"sig":"MEQCIGriaZF1rYOTdV/mEiP+8NeFNJLggYZfqe0k/oON4cyAAiB/mEtrZOYaElzZLPWdzpjDt37DQENRkgB6/sF0xopPtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":764670},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"c8 node --test","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"c8 node --test","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"stryker run","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.1_1786204628454_0.5041885955229655","host":"s3://npm-registry-packages-npm-production"}},"2.19.2":{"name":"agent-sanitizer","version":"2.19.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"698f02141e64078c728ff0854c9ec9bc81ad6451","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.2.tgz","fileCount":68,"integrity":"sha512-vFYtjPNwbgjhmnhSaCKdjPHlySb+1m31KlcwEoj0BeVUkTP2gC5xaHKnnugX0wdY7ywrAUPqdsXHlanxOhvYrA==","signatures":[{"sig":"MEYCIQCLrbvNLBdGZUQ02TzhiWja3TGFby5U7VCQLiALQoW/dwIhALw693z8HjQQIFbFsKKooBQidxyjHoqraYXDkyVbqH8j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":766293},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.2_1786204996790_0.9598619207394845","host":"s3://npm-registry-packages-npm-production"}},"2.19.3":{"name":"agent-sanitizer","version":"2.19.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"b77e925a5ff991dba62a323f299eca3db91bce8e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.3.tgz","fileCount":68,"integrity":"sha512-0Q8uyqw2iftN9AqXI8TEuoi/qsxoQuA+6E1uMux9mfm4ax4l1kCB+PhKqMPi0UwqlNnKQ6sjgjXB727QLe4OHg==","signatures":[{"sig":"MEYCIQDx0bvoyDt852GinqyrScspRbb/ALCUUxs4YAAvhJ4phgIhAKXnoMwSWQUQGNHYr7ek2aCcm/x3rIkOUwb2vfWRoAge","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":773020},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.3_1786205404305_0.9663689825204895","host":"s3://npm-registry-packages-npm-production"}},"2.19.4":{"name":"agent-sanitizer","version":"2.19.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"b6a2a4cf1d202d8bf0a2c393cc04bee6cbf9a15c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.4.tgz","fileCount":74,"integrity":"sha512-Iw0lLtHXZdlF+b5Xpa5721VePK1SwCmtAr37M6l6n2JyfHxVFfHiiWRquCDuOsKduD94EMB4yR4GW5RJ6ZucaA==","signatures":[{"sig":"MEUCIQD8dXm1Kp4L16NStuwMBjejtzmEmIn/Yv4z/3eAkhHnAQIgZbGZjuz/IYUephqsPeWGCTOVG4BgmyM0n3XuQUYoLqw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":835898},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.4_1786205661319_0.3424208661510497","host":"s3://npm-registry-packages-npm-production"}},"2.19.5":{"name":"agent-sanitizer","version":"2.19.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"61b4ebbe7ae700e27010206e80fc5ccfce558b58","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.5.tgz","fileCount":74,"integrity":"sha512-no0HW+1JDedjtdLYI8zJVENN+f09KSVOc4fXujy+imk3Qbzky8vFNluGpm8PdWB8LOoclOJXruoQ9gKvlvPYNg==","signatures":[{"sig":"MEUCIF4ChtOCiXa6KhsJ6eFUMCaw0+o4IpRMbBiCNclbl2KbAiEApUL/DMJFNVn1v4BfxFTC7FVGmjFaYJkLMN6fFcQWW9M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":839742},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.5_1786205893898_0.028218372886631204","host":"s3://npm-registry-packages-npm-production"}},"2.19.6":{"name":"agent-sanitizer","version":"2.19.6","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.6","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"9e257b5c13f920fcec90de50006f746d35e66d85","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.6.tgz","fileCount":74,"integrity":"sha512-cqjmumwXktxt/99OIAmIE8XUULTURqiOtpVJTFCLHw1EBe4iaBqe6e0nm6V51cKlOJS3qI8ZvttNOEQLgEwMeg==","signatures":[{"sig":"MEQCIAFfeD1kDqpWVBRzgFNfpdtitPuUAXxlq78Fw/aWW/Q2AiBkWw9ial0ovccD3FNX8vc2l7t/TjR1aa3w3pZa67WiTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":839742},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.6_1786206779907_0.1847216245363259","host":"s3://npm-registry-packages-npm-production"}},"2.19.7":{"name":"agent-sanitizer","version":"2.19.7","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.7","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"40700d8020ed29d3d4a80894f5884e8d31ba9ce1","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.7.tgz","fileCount":74,"integrity":"sha512-kY1gZrW/KnTgFZsyoNgLJyB6cikLA0sFr0PXtSbMEq5Xb/TmdY43tkF25TFDG0tr8al/VunzNTGwUJJUOJLbvw==","signatures":[{"sig":"MEYCIQDx2llhlh44O2EID2VCNFjWY88sowA7J/m1M+Vw8X00vgIhAOLNIQxZHa+Ne15cM+I9tqvkHPdFyfXnWVLtSlIPZzhT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":846930},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.7_1786207119076_0.7233690667978485","host":"s3://npm-registry-packages-npm-production"}},"2.19.8":{"name":"agent-sanitizer","version":"2.19.8","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.19.8","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c86c9c8afbae73f9db27aaba9d64c3c8dc0fa633","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.19.8.tgz","fileCount":76,"integrity":"sha512-+LK7HQZ/xe6W5deapvJwlF3Agf/RUY/MjTPRPN7HiLAAMZ27dQs04UzxFRRnPzsCOoq0vVd5hyv+s6+d1vuKXw==","signatures":[{"sig":"MEYCIQD/qtmuDnzu73vlp6J6LLLeKd9VJlkBhgAmB5ZRuEaehQIhAIEprLqBQuwRe6JQavUbxirLhxHSoy6n5oRRuPEQhMpy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.19.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":860864},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.19.8_1786211741266_0.1438028807128373","host":"s3://npm-registry-packages-npm-production"}},"2.20.0":{"name":"agent-sanitizer","version":"2.20.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.20.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"7765e150d137c7e1a34147f01b8ee78b84f9bce6","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.20.0.tgz","fileCount":76,"integrity":"sha512-gzc065RTa1K1vttqZ2RfsOEe0iAa4fzpODlX0u5GUeH8ezAvMiW7BNFL2TmDkZ8KWwf6qYGlIazeg8BKsohweA==","signatures":[{"sig":"MEUCIQCEQL6cOiateIpBA+6XWMooNzENqlFItCk7fnE7Gg0HkAIgOxXN/vLYYVkujewQZ8HnbzjBawZTGs5TDBr6pH6yuu8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":860864},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.20.0_1786212364773_0.7035107585762013","host":"s3://npm-registry-packages-npm-production"}},"2.20.1":{"name":"agent-sanitizer","version":"2.20.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.20.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4f2ba9dc60184102ee9049bd52097756476921b6","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.20.1.tgz","fileCount":76,"integrity":"sha512-yAN+WmnvUrFefhe2n8PvYT3aWrUNoWal6YF1Qq5Btw9CSwoiOJYCMRaKYWnnGlPk7ikVRg2AQnsjJCeu4ky/vQ==","signatures":[{"sig":"MEUCIHqrIji+akBgVBGDtRIBRz4CLb7QJKC3NaBCk15Fk3VsAiEA4qvYjfWaFsOVhszZ/zD/amYRpHCSlRP8CxPwALrkBVU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":860864},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.12.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.20.1_1786214217024_0.579215902851286","host":"s3://npm-registry-packages-npm-production"}},"2.20.2":{"name":"agent-sanitizer","version":"2.20.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.20.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"20ad4cf988da91c5cded77d14ef426c4a4e7708e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.20.2.tgz","fileCount":76,"integrity":"sha512-tLAafs+Hc4w1OCCaFOdvKzQRBwhUHUlKlufIk09KAfiEKYojlWYGRLNZLaHNZ0OZrGSCgaCYUhZO0E01615BvQ==","signatures":[{"sig":"MEYCIQC+zdKF70AO1k4M1O6p+24wH1Bdv8jAVb13x4XwF3/keAIhAPnjRchNOfyxZN1HIz1iLFnho1wxwFLa2Grg+w6nm2uv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.20.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":860864},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.20.2_1786214533109_0.29699328529608837","host":"s3://npm-registry-packages-npm-production"}},"2.21.0":{"name":"agent-sanitizer","version":"2.21.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.21.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"3f4e41b1cbee0c790494020ae0a8771d934320bf","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.21.0.tgz","fileCount":76,"integrity":"sha512-CQxV6mKJ0XukGish/hZ8x4Zfi0AfhaFMbv6VZ2d12+EfvMDrl+PA7TyT9fXClT9xvMzsi9Pm/Bu5J1tBNwBs7A==","signatures":[{"sig":"MEQCIEa821uVzFC/+X2T05hPEglqvTD/1Q+5QGo4UCo1zcLXAiAPtEtwZTAwyUQIJ3ST861rIkNnoz7RQxT+jXFALTkN0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":861997},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.21.0_1786216591652_0.39390026789247523","host":"s3://npm-registry-packages-npm-production"}},"2.21.1":{"name":"agent-sanitizer","version":"2.21.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.21.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"d7f37c360ed492649436c1a5a2d942a4cddf0e23","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.21.1.tgz","fileCount":76,"integrity":"sha512-/oszDtypuYvQlv4/9mPOVpM56BaEIOLs/iVkDjBTYZ99Dwm3+s8avY7tfUW2dAzuQ6J4/cUjkR15JIyZGLls7A==","signatures":[{"sig":"MEUCIF5XxwHZ6mC9cMFKvcweV5vwxxvOw0WSyl5TDPbIJCgBAiEAkeV1Su8BnOQd6TuRORxQn8VaflCQi3XGxPeAMF6gFeo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.21.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":862021},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.21.1_1786216709787_0.8715628443964614","host":"s3://npm-registry-packages-npm-production"}},"2.22.0":{"name":"agent-sanitizer","version":"2.22.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.22.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"85ead0a463307d3a017c28c9d7d501a4005ee6d2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.22.0.tgz","fileCount":80,"integrity":"sha512-kcncA9R26dZLeccqaj8RslRJsUcO1xae/YLaCN6+H/B6vRMUH/a4ppMKudVUevaUbWvtzd8nrmfTJV7RTnYqaw==","signatures":[{"sig":"MEYCIQDUGlvKBoU7Z3u7k5iGt5y36OMW7jGZ3xTQa6NesQAwRwIhAIw9GJiHop2aPgdkjPoAvbG7XjEPPZW+6TrOYiniVqgN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":893358},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.22.0_1786216827087_0.3500443335476968","host":"s3://npm-registry-packages-npm-production"}},"2.23.0":{"name":"agent-sanitizer","version":"2.23.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.23.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"25376919df6c9ed9dec797885931726f31f69269","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.23.0.tgz","fileCount":80,"integrity":"sha512-qGLlJ9uCjm5JVh11eyyfkLchaSxBnxfhQQbF6n5+tdawfva5xAKvng3nQ2Iu32t0RzRh+tT6y5xzuXp3KlRNJA==","signatures":[{"sig":"MEYCIQD1zhM64i+T3fkaC+GiF8NJtDusopYiCBtZfHPM09pZ2QIhAKR/UOjKdOUGvIMCTvDUkGmOvDrQn9Q1OTWjYENaOMG8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":893358},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.23.0_1786217090694_0.4763963386341654","host":"s3://npm-registry-packages-npm-production"}},"2.23.1":{"name":"agent-sanitizer","version":"2.23.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.23.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"2fac4a62ec3a4ce497447f558b3c97a86ec78b57","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.23.1.tgz","fileCount":80,"integrity":"sha512-H8t+vANL2tYX6CRW5zvmN0c8xIitoG9x9do91w4Lz2+VhvZAnEiD/bdE0ZehpbSXzAjejtuxhDFPQ7kbvSTXIg==","signatures":[{"sig":"MEUCIDFH5O4X5k7GmpIvD0ex0eIOM3Y04tZ+ta2VO3ZkFssqAiEAwA/JKFolDwwOvYKVrFIq6NCpOVwGuX1f6byw3Hheq3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.23.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":894259},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.23.1_1786217292359_0.28361902099173353","host":"s3://npm-registry-packages-npm-production"}},"2.23.2":{"name":"agent-sanitizer","version":"2.23.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.23.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"79241c9dce177e0d3162be8ce3192788b9d4b0e1","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.23.2.tgz","fileCount":80,"integrity":"sha512-caj4OLuBchlq7C57c3HmV8UanXRYSmTkV1/DqtgLmF8t1DVsHj5ld7kvOxCytB1Akgi3JdC981DgqdYfz2IsQA==","signatures":[{"sig":"MEUCIE5aGT9X9Wy3YwJkVDD3RmG5AH2s66c+XzdTfdy+VDkOAiEA3HDkFVhKxz+2nH+dq95o+0AbH3LUlQ+553odUWczlmY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.23.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":900451},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.23.2_1786217882000_0.08601051586601827","host":"s3://npm-registry-packages-npm-production"}},"2.24.0":{"name":"agent-sanitizer","version":"2.24.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.24.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"e7d794d92fdd58dca3f68b2593643fc3a8811a5c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.24.0.tgz","fileCount":82,"integrity":"sha512-CS0QjudmI28pFYqQ+RgOoejQbUU8U3mrL35o1G/tIhNnrLzZaQ7wubJGh7YuOXvBz4zYnF9toHW/quS3TCiTFg==","signatures":[{"sig":"MEUCIBkzEnqnCdaJiPz3jVenDs34MPS3bi3wRzmzK3yZVpLBAiEAwXU7KDoB5hHzf+CoVW1me+Nwl0AlzsA7Vz/O6LAOOb4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":935834},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.24.0_1786218197680_0.5099842293675085","host":"s3://npm-registry-packages-npm-production"}},"2.24.1":{"name":"agent-sanitizer","version":"2.24.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.24.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a392582437ef39ffa6d92c3b346a1c8a78267c65","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.24.1.tgz","fileCount":82,"integrity":"sha512-eiaTF2dlLtI0IIQCZlgdreHdhbk2BnIOGcZoEwzrD5evBU5Brnxa3BHQaYNOXj8Zc1zM5LKgv0iHsBDEkMoq6Q==","signatures":[{"sig":"MEUCIQDOGXJywP90mpzFa5UKpdjxZeYwH/vvR4c1lEPHwnWplAIgJBZg9n9gMHhuSyGsiOg60ahZUUnIAQzokqUxZFL/Dos=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.24.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":935834},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.24.1_1786218593033_0.509757828456145","host":"s3://npm-registry-packages-npm-production"}},"2.24.2":{"name":"agent-sanitizer","version":"2.24.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.24.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1fb5c2381f3b6133a437d6d7ac97c68505820c0c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.24.2.tgz","fileCount":82,"integrity":"sha512-AwS4c0hmlEnRDKHPWTeCq/WZmvaYB72Vu5hrytUBNflxNBq+csyVdVL6loQpALY/IwWhzR0db7Qjwul7/4SKAA==","signatures":[{"sig":"MEUCIQCzXdkYLM1QnD7dCBLqWayJVCzTJwlz3vRYREsIXZYt5QIgXvRxFCDnYg1zYGpqkI9mIZjS4w8B3Yj4upe1O6DcV4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.24.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":935834},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.24.2_1786219915626_0.4062057536835515","host":"s3://npm-registry-packages-npm-production"}},"2.25.0":{"name":"agent-sanitizer","version":"2.25.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.25.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"8d4f0f378873460bd4e3ddc4c1d5827a683daa94","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.25.0.tgz","fileCount":82,"integrity":"sha512-IhHYMjcmRQr4zyqQdqJpYBEoxgFboT+sSrsFQwIgZeV/ZaDnmqSPa7d16y6Gf4gEtTltoQ0d8iBj3f5PJHXoRQ==","signatures":[{"sig":"MEQCIDmRvtnF40dF2ZXWI4+nR+pgY5H2Ob+1Pc5EzBV4nAV8AiBaGC+2sSV3PnGnAMSH75PDYbMWxA2+BZJ766T1ByluwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":935834},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.25.0_1786220374251_0.1763335895639091","host":"s3://npm-registry-packages-npm-production"}},"2.26.0":{"name":"agent-sanitizer","version":"2.26.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.26.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"633584b08bb6413cbf669abbaf869f33bc6e2503","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.26.0.tgz","fileCount":87,"integrity":"sha512-3TNZuqt5Gx1lmTRqMTjBHScSrla2gD5EiyWqPT5Flj+UAVCa3rdAQmwOui2bmox8PpuTy4nzKdXwLCmC45+Gww==","signatures":[{"sig":"MEUCIHyh4ycz3SgO/vtwHZiWWaLoPQDAPCoRhU6gQh7XLodIAiEA+vcAWLHjpHk6jtKNteiHs3leZ/ll4XXQnl1Fx4ZUE3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":989439},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.26.0_1786229114126_0.2182961015088163","host":"s3://npm-registry-packages-npm-production"}},"2.26.1":{"name":"agent-sanitizer","version":"2.26.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.26.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c05bf59038f5287271d5a8d9f83acaf9258e9bc1","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.26.1.tgz","fileCount":87,"integrity":"sha512-o6r0DAJhwoq7JDkh3Ahw0y3Xvod0th1JmkWb/WPCwigcG6GhL9qA1iEpY/5qlKd3yYP4QxL/p3FeNfkGcs3jlg==","signatures":[{"sig":"MEUCIFqJqlvM+5iep5oBZ8JBp19Izvr04KF9xV/YpDfw45fnAiEAkstWM1wOYZRxrYfZSlQZBqF5rf+7BcZ8jea9bkRG1TQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.26.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":994700},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.26.1_1786229503706_0.6352582221004033","host":"s3://npm-registry-packages-npm-production"}},"2.26.2":{"name":"agent-sanitizer","version":"2.26.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.26.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"5a143b97e2c6c1cb02ea7056b72207adcc90fb83","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.26.2.tgz","fileCount":87,"integrity":"sha512-M1J113ujBZGLI6tYw47q/VTun2JpIu0dWVb+doLOXGJzfoqvx9NC6LePCi/tAfK1S1kmcSCiZWc+MBW0Ku+JAQ==","signatures":[{"sig":"MEUCIQD83pz4ISEp2INAslPIYBNFTkIklhdBFu58e8KV8cm9DAIgNWXaub9nEkhHJLwDPH5nI9vJbvJRDDjMYrUjjENXqg0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.26.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":994700},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.26.2_1786231211481_0.4897995044556607","host":"s3://npm-registry-packages-npm-production"}},"2.26.3":{"name":"agent-sanitizer","version":"2.26.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.26.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"37d5501543501a7612947c780211ab7ee9cb9d6a","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.26.3.tgz","fileCount":87,"integrity":"sha512-zL59clt7IKaSECyaYokNNml3AxyI1rwhLO1Sz3I6nZxre+yEncE1Y10W5MTilbYo6AdPMy+QsJP2jaOUxduPDA==","signatures":[{"sig":"MEQCIHhMbr2yUWEmjiyA9MWbpfgeL7d3XRA/5E0k2Xtz2LZUAiAKxLYVwo7lbPQ78J4FsxkQBxzzKeMrilQlKR3lk1V3NA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.26.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1001065},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.26.3_1786233048086_0.4932917966096966","host":"s3://npm-registry-packages-npm-production"}},"2.27.0":{"name":"agent-sanitizer","version":"2.27.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.27.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"6226e3270b80f0842695ea8f336fd9ee214f9823","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.27.0.tgz","fileCount":87,"integrity":"sha512-4Ju1MEAqamQLbt1NWIyqfYykyrX2oDS2Dl+hfhRfl1eF5FRiPgHmivFfXPTGyxxSc13izmCJm/d7HQokmwzTtA==","signatures":[{"sig":"MEYCIQCUgAJaV47wO6y/CfAulQZn75Q56r7wtcAzr7uQXVzIQQIhAM6ADuK3LyW2zrK1UVCqAAmopqip3ZxT2pm3yntUZd7b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1022476},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.27.0_1786233238646_0.5483693690540492","host":"s3://npm-registry-packages-npm-production"}},"2.28.0":{"name":"agent-sanitizer","version":"2.28.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.28.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c17bf6d557b09d58f24bf014ad3ef6f1c95310f9","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.28.0.tgz","fileCount":87,"integrity":"sha512-PH2FLGvxwUlunG3osLyNYMlwcIlTd+SBTavK2Rn9HT1fDuKoH3xqOklNvgdf/aecMzUY9tMMo+16UjHWVD6zBw==","signatures":[{"sig":"MEQCICJ39+0gOaQhWyUQm+SSoXF6rm9NSaNlCzG1alOkckk4AiAOyY+qMXjZrpRO1UIB3DSLFdM5xMxnSG/76t2Op+3qQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1023496},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.28.0_1786236389577_0.1562661091863069","host":"s3://npm-registry-packages-npm-production"}},"2.28.1":{"name":"agent-sanitizer","version":"2.28.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.28.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"5d1dd5b5ee1b1cafc42c67e20d0c34e9b3e6cb56","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.28.1.tgz","fileCount":89,"integrity":"sha512-YRxgCiPONxWVxGr+2SLnWUhlIcptHbV5/qOy9BbbV3SBU4t8QaOlRur5CSokirqebdI6UPO9OSS4tXdXt7L4rQ==","signatures":[{"sig":"MEUCIQCIQjqeplMQWCaF9hx5evyfXdk5IhzAH2/Pxpq+FaGfgQIgSiDFRz97/dH4rwTWGBBa05+DO8gU0MpOVpziuOPNiRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.28.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1037629},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.28.1_1786236581916_0.6583571595387987","host":"s3://npm-registry-packages-npm-production"}},"2.28.2":{"name":"agent-sanitizer","version":"2.28.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.28.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c52a26577255bc3a4cc5c87baf37dd9e06ee1879","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.28.2.tgz","fileCount":89,"integrity":"sha512-ZfT5h2h4HBcIL1cSBxBXjoewnIfSsmmKkHg7CkP81XVtQQS/8wl8ADx/8ZaxBrqY++/Cx9s3I52t9MITvQEqFg==","signatures":[{"sig":"MEUCIQCBXbi2PLTey5apxg6WTIYEwGJqR1Blj/Vk57kMBLDH3AIgF47k3ouW9xDV9HPqUxWQh78BcMch4kVfcSsByqajMQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.28.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1037629},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.28.2_1786238031524_0.028465373799618776","host":"s3://npm-registry-packages-npm-production"}},"2.28.3":{"name":"agent-sanitizer","version":"2.28.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.28.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"30e736dace74dd3d13d798a98290289ebe8d6df2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.28.3.tgz","fileCount":89,"integrity":"sha512-qZbCLxMTPIUwdCseHcjOb3eEOH+orTsZhRMMZzcxXMJ0izypJlbFRSC9IdASr1wmBNbUvNoNVw2y25eGcHkfuA==","signatures":[{"sig":"MEUCIQCL0mSSPg9XCazIqwlZnJQ50HEMcexDFKxhciECycx88AIgdUnbm/seU1OnZ+cPEWXRkqJvUbA6NFndzKrWJes2uUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.28.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1037629},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.28.3_1786239408666_0.8365998710497695","host":"s3://npm-registry-packages-npm-production"}},"2.29.0":{"name":"agent-sanitizer","version":"2.29.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.29.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"941a6636ac4b5a9c529065df658ddf66e5488bae","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.29.0.tgz","fileCount":89,"integrity":"sha512-OnGcGM8pOp+dIuylSp/QU8/w6pk+u27zN+40i5wyaa4jGDW3YX5D8//DyBxSHOtRUZ+nLRL1T0UZR1T+I8LiDw==","signatures":[{"sig":"MEUCIQCUy1ywjPQIfYmgRljw4s3+Cw67czIGNFUbK/fDHpnGqwIgEms31COGvL24tnsJslh7Rcl5pisxK6cAbzd8CYCopDk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1052765},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.29.0_1786240734857_0.4667089846953507","host":"s3://npm-registry-packages-npm-production"}},"2.29.1":{"name":"agent-sanitizer","version":"2.29.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.29.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"ee9c9c1efb61a6ee8070d7fbb2d84ae7f9fdb424","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.29.1.tgz","fileCount":89,"integrity":"sha512-pCXAa2gHf3QEbRw9RQ3qgzXUrXe63kvBOmBsq43jX0gmQ8ltnmQeuPzKsPZbRvZDpPNWje9mZngNQDKaafA7zA==","signatures":[{"sig":"MEUCIQDozRpFce2N9Wl54gf718RdREefrdgYiYxxiKWkh1o7aQIgQVcSs+vs/YpPoYhN1y3YHv/bJzIVKDD0ZpRQ5Yru+Ng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.29.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1052765},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.29.1_1786242678510_0.42795468104448053","host":"s3://npm-registry-packages-npm-production"}},"2.30.0":{"name":"agent-sanitizer","version":"2.30.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.30.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"903cce638d6275bafe975f8e65f643eee9cde29c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.30.0.tgz","fileCount":89,"integrity":"sha512-sBiX7YEurE+tSgrXsowTDtpmgWCK3s0BUZKwjj0VQK/WtBTRY150EoQM4FJ2GfAILIcLxgQ/XBtxVKorwfcXfQ==","signatures":[{"sig":"MEUCIHyyiFcn2lCawg44MLl0jQWw1JqF3M9oOI6sGV9unilxAiEA15+ewB5TJ8O7ZD0CCpiLDzbUZBP4xLuiIGNoXDPeWbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1072748},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.30.0_1786244505599_0.04828905975337494","host":"s3://npm-registry-packages-npm-production"}},"2.31.0":{"name":"agent-sanitizer","version":"2.31.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.31.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"3359b481d33bda84eb11eef1ba44766755ea909e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.31.0.tgz","fileCount":89,"integrity":"sha512-hohnwnnvj2Wwue0opfyT8G/9PDGAj3IYU3gv5psPOKE80DgeE2U4x3lfaQQ3TBG5vvA+dLkeyxTEo8CVIeb9yg==","signatures":[{"sig":"MEQCIDInUZOBzk+Ay1WfqnE38z4wVYYWm6785Uq1DfeAt2BTAiBxtbItvCX5xkX/y5elNm+l3dsiJV8yfBifzw7VvjmzYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.31.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1112479},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.31.0_1786261193693_0.510216854033394","host":"s3://npm-registry-packages-npm-production"}},"2.31.1":{"name":"agent-sanitizer","version":"2.31.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.31.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"291cee1116f5804e65d82036346b488f40746660","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.31.1.tgz","fileCount":89,"integrity":"sha512-ukadv6Vul40AS2GSUgMia6x83eWveC4YHbDFmRBaLrXeBqFJsRRk50Q/nXm1vwmJP81eOFPQ0SHJQQc9Ekj1pg==","signatures":[{"sig":"MEUCIQDMWnQ9rZjmEJvPSOEgoQ7BIf8C6IYmQLeR60+Y14vSsQIgZxB9wahlSuW9VaGsSvRXZaq5QBffq8+v10dJjyYXcuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.31.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1112479},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.31.1_1786295056208_0.716361836450768","host":"s3://npm-registry-packages-npm-production"}},"2.31.2":{"name":"agent-sanitizer","version":"2.31.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.31.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"817ac8822b5230f3318d7e7ec1cb1ed72f2465a5","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.31.2.tgz","fileCount":89,"integrity":"sha512-prLZAVm1ut3cgHMaFWdesT9d7RPu5v1eQYhF7WrtwXysIoW5fSc8ZagUL3oN8X0qQziWbS93s8b6OA1NHIR0rQ==","signatures":[{"sig":"MEUCIBTS+n/hBXKtd9V9qbXe2fFalTqmJ4FLbl7ti/QI4l2AAiEA+UXJiBJU6911rBJlla7aM5qTtf4t4o7MTMx/yffWj1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.31.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1117850},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.31.2_1786296240481_0.9902755922690898","host":"s3://npm-registry-packages-npm-production"}},"2.31.3":{"name":"agent-sanitizer","version":"2.31.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.31.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"cb4b1e75db228d5cc2dce9ab3cde1aff6810c1ae","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.31.3.tgz","fileCount":89,"integrity":"sha512-OOxKnAFIiqRCWA5p5ZsCUWu9fOVjGpDslCCk5IbE7H4iKHy8oMJ/1g7pjM2il7GwxG0pjS4UOEKPNO1UkbjYeg==","signatures":[{"sig":"MEUCIQCv+CueC+uAzMM5jY+ppQqvmyQe+hpEj8ii1/99mWpeJwIgO6QuVh008+6CAvWRRJqAENpYFRxeeJd0gMuoVMoHcvI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.31.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1124041},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.31.3_1786298471157_0.3443179610482121","host":"s3://npm-registry-packages-npm-production"}},"2.31.4":{"name":"agent-sanitizer","version":"2.31.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.31.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"cdc2f816c3f2fe7f23974c96d4115c8628314206","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.31.4.tgz","fileCount":89,"integrity":"sha512-8dHRy6qyWOBg/JWNphkzev41wyillZveckYoIK0yD1VWatBCmi1SsBPWZJexcFTU3BZrK5KAZMnf31Vnv3MKHg==","signatures":[{"sig":"MEUCIQCGR73y8jGwdwzEWdnJetrLhjmL0tdR7IixmHyIoNZfmgIgIMIXuaW8sa5so+61OsXyN+QBSLSKfrbPhjowCmpH5D0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.31.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1124041},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.31.4_1786299047003_0.8874438246032781","host":"s3://npm-registry-packages-npm-production"}},"2.31.5":{"name":"agent-sanitizer","version":"2.31.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.31.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"647fb67fc2230928844c7a84b2f5052f2a0f0bc6","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.31.5.tgz","fileCount":89,"integrity":"sha512-AHpCBzKWcqZjj6SrHr9TTJXG5ucuqVKhx+dcRqUZo4Bh12vWmx+D3VrDCIUaaxm1SWHsaob5xPvdIALF/EBthA==","signatures":[{"sig":"MEUCIGYRTwOswDa46RSmcuvB7+/a2sSt9fD2qz/+dJ4iw2DtAiEAy5ZFxK67VCvbQx0F9hfbSQizAI8+lHXQSgqh3UmyxaE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.31.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1124041},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.31.5_1786301035684_0.29907467354864314","host":"s3://npm-registry-packages-npm-production"}},"2.31.6":{"name":"agent-sanitizer","version":"2.31.6","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.31.6","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"810d776ea11fa281d9f631d76dd5122b2ee00bdc","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.31.6.tgz","fileCount":89,"integrity":"sha512-gXMC1f9wMKxcLoZQqVgDd96FIMXDALNIYBkz3DXgoHvVzFrP7E2d1LyMMGEMdZdsjjcuC+3ifJdmUHC0WL/A0w==","signatures":[{"sig":"MEUCIGDPyitpy9IRHxZHayYRKxegnRIHtDjARZOax3aj8FCFAiEA3LLemzV6Er8G/m3rPBqKfB3wH9hYizrohoOJW6JDtqg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.31.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1126949},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.31.6_1786304665743_0.14914073088188062","host":"s3://npm-registry-packages-npm-production"}},"2.32.0":{"name":"agent-sanitizer","version":"2.32.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.32.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"0e3c114535edb708174be4ae083812e2e46aca13","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.32.0.tgz","fileCount":89,"integrity":"sha512-Wk5RDSyo2jUS4qDjPtm/kzh7OIapA/oXq2QlUJHhNvaRxuqJL9VVVjD5Kilzqk/g/rH0MdIo8sMKJNiZzz7Ppg==","signatures":[{"sig":"MEUCIQDpdUDG6evVo8x3VSYHhLHedLOXoHtlSeidR6d53pKc+wIgUygxh6wNWZgTlD0HaDTbYnZtfRNAo8tt/U22yB7CQUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.32.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1126949},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.32.0_1786307443294_0.5663535028544917","host":"s3://npm-registry-packages-npm-production"}},"2.32.1":{"name":"agent-sanitizer","version":"2.32.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.32.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"13359d05bfe3dcbf090be0ebfc03d80e8897008f","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.32.1.tgz","fileCount":89,"integrity":"sha512-TsZQFfQWdSuvk4GHDFPNWOdoN8e8YgDsmsCD3CW/KDIdwcNmmzTpRTmO4GaIzyA2pftEDvIFRSDfjXsmDjBCvQ==","signatures":[{"sig":"MEQCIGxDB4hMVUErfjm1QYFcEtw46voAxCm7hjMUNZfeAbRiAiBdWYnpjAxcVWeRrcBqFGjSGLQr7Gu8gHPdV/9aTUtabg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.32.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1126949},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.32.1_1786310157133_0.14142547127906302","host":"s3://npm-registry-packages-npm-production"}},"2.32.2":{"name":"agent-sanitizer","version":"2.32.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.32.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"0547e684da8be702ddaa179e2be1e5ecb42af10f","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.32.2.tgz","fileCount":89,"integrity":"sha512-FTW6eLogTr8p0/mN0jmnL8JSUgZTSSU6gNYABAqdM8bRRz0ibdPrXExmGqOOY9kBGtfaUlYoucPb+DO/A0zXYQ==","signatures":[{"sig":"MEUCIQDBDG16G1HTpaaBF6WeyX/ELHkiVOh3YENVPyl38ZZh1wIgcQNSbT7PSsdrjprPU+izSh8vtedz/A956CUbnWXT5KA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.32.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1126949},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.32.2_1786311520688_0.921791313645214","host":"s3://npm-registry-packages-npm-production"}},"2.32.3":{"name":"agent-sanitizer","version":"2.32.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.32.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"766931d3b4e1070bb3df3fe492a52238bd79d3e9","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.32.3.tgz","fileCount":89,"integrity":"sha512-X9k7pZwdmORda7dqldrCVNyLsKjBr4JRAXjV5+N7FIimWUeShznzdV/HCbBzRrZxuwasE9AO04Y0T3li/YsGTg==","signatures":[{"sig":"MEYCIQCMPCgrtA6zuCQW1Z50fOMVQh1OM51wu6WRl/LZz7FYFgIhAJMy5fcQwgY361V7kaGlDBj2gjqEvwbRiGYZkhA4im6U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.32.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1126987},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.32.3_1786313667057_0.092984321046784","host":"s3://npm-registry-packages-npm-production"}},"2.33.0":{"name":"agent-sanitizer","version":"2.33.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.33.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4ba19eedae0d4e1000987594fdb0dd76e96b288e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.33.0.tgz","fileCount":89,"integrity":"sha512-lVVnnxFd5uA+bhX1cqF5u7rhLODjKDmxMaTBJj1vKt5TO1vRlcNofwpAbu0B7yoRfFzCix8Xp/XuEVMNF1RzGg==","signatures":[{"sig":"MEQCIDDr5IyRfB+vH9PWBHV5nKMqNPPAUY0OxCG7QyYwUTUwAiAnhfzDmtBOw1xUtTXcmh3ZRxucBYZq0CtSMzdmdNCSWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.33.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1127285},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.33.0_1786315444869_0.3892055358811106","host":"s3://npm-registry-packages-npm-production"}},"2.33.1":{"name":"agent-sanitizer","version":"2.33.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.33.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"76035e2dbf6942c0dca1a669f0bd2e6b7333d0d5","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.33.1.tgz","fileCount":89,"integrity":"sha512-/3i0zLmPcHLhsUGWBunmz/3Dzg7lbK03d9nbScJa8kBm4wYXhUHAL6Ds+cbAO98etuWrCqATQENaB3xVAdGvcw==","signatures":[{"sig":"MEUCIERzYFVIgE1QnQnXohh17Y+5PKKG5XG9HtKlX4yOznCWAiEAm0GwjuSA+Df91QHngHSVe9Jsb28T8uOPmaQpOH+rBSQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.33.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1127285},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.33.1_1786320245248_0.48679140060630277","host":"s3://npm-registry-packages-npm-production"}},"2.34.0":{"name":"agent-sanitizer","version":"2.34.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"e07c75c994a6f83915e140e153edb6c80a4fcd3b","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.0.tgz","fileCount":89,"integrity":"sha512-+YrsgjOy7syBuStqhlOWlnBOW79B4CFUa5Itse7QT+Ei4++6pIgXIHLiTcxgcaBwuB3vGyqNRvPQ3AIVH2sJLg==","signatures":[{"sig":"MEUCIQCWPUJoRvuiJmQ2G2becXPXTjhT/T3pI0IoKtxl4buwBAIgO/Ve5KWSaCrzrNUVyapj2R0yGgDoUG3jXlrfjrvNef4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1132953},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.0_1786323003493_0.35873194742609926","host":"s3://npm-registry-packages-npm-production"}},"2.34.1":{"name":"agent-sanitizer","version":"2.34.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"9364beebacd010d7d4567a1295372a776ab3eba7","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.1.tgz","fileCount":89,"integrity":"sha512-i5JrNCxxmBRU0DXP7qxhBIiDbMmyW7XBlwCQxtKZPTaRg2Tp9BBdK96F+PsGUoyZQBvWoMdJYzYgdGtKUoqkxw==","signatures":[{"sig":"MEUCIQD0cZ+CQHjtAQqhLG8f6eWHttPueKMg6kpBVQOK0uk4SgIgN6Xj3oZJxoYc6W7m8gpY6ZfhhoA5fOXq6Vnx821Ywno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1132953},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.1_1786327097774_0.3264452164993705","host":"s3://npm-registry-packages-npm-production"}},"2.34.2":{"name":"agent-sanitizer","version":"2.34.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4922f5a0e301811ec2f7aa15ccc8ba4998ee77c8","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.2.tgz","fileCount":89,"integrity":"sha512-zbCmP5v1AI5TDGv2gskrluh3JH52Tef+57C8iKSHvgVGoy+/8FQLyurh85TnXVgsUsxzF3vsdTDfL+14NTDRRw==","signatures":[{"sig":"MEQCIE+YTJHxA/jaI+V+KAgnYDzLw3Vx6ik763zQ/W5Qtx4jAiBS/QqmdOee1YQ7s++h2EmCcn6RFFxw7GORWttkRve2CQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1137204},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.2_1786327390994_0.45189269473048777","host":"s3://npm-registry-packages-npm-production"}},"2.34.3":{"name":"agent-sanitizer","version":"2.34.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"0fc616f7ec15bb37de34cbbb3c0b35da7779f1e7","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.3.tgz","fileCount":89,"integrity":"sha512-yMzUW6jAz6sD0vfQ5uWNxySkXCOivDq0sZM3GeOqz1OiIxLWjUbo7ANQZAZdMKjboY79oiJ3VQ99JpyBinWePw==","signatures":[{"sig":"MEYCIQC5RrWS3sEJFwAdgUiFrK2TER1zvdRU5yNbflfQCI2qHQIhAMHU5vG8ZsZ/3Z54+gl5V0WLT5P8C5eUMJXyVv1mT0SO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1137204},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.3_1786328855849_0.6542650081826484","host":"s3://npm-registry-packages-npm-production"}},"2.34.4":{"name":"agent-sanitizer","version":"2.34.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"5f09649e0f8e5a7a94866eec9e3c1ec9c1e58a4b","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.4.tgz","fileCount":89,"integrity":"sha512-S43Zo9NJqR9GbavGXcIC6Y8prNwOL3xLnnSdJl56HKaTnlIUrDZx4STTovOeHk/G/ejYGSrm3VHloXI9SZs4pw==","signatures":[{"sig":"MEUCIQDbTQGTPqLpjVRte0PKME3b2ka+kj2aNeGMq/vhRf5h3AIgbuPOOEXsf35fMGRg/m7Vm9jXROWuYLXDSeCelsLSsT4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1137226},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.4_1786330683050_0.38709764395328294","host":"s3://npm-registry-packages-npm-production"}},"2.34.5":{"name":"agent-sanitizer","version":"2.34.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"bb6dbf2e137bbc609c416c029a57a876c1ca00b7","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.5.tgz","fileCount":89,"integrity":"sha512-/3YyPO/znJ/tARorbPjJAI8VVTWMhBOVyh3VJEKix3b3yZ5rJAfuYzP0T7rwPlXjx2waMSw2ZJL5H6A62SbDoA==","signatures":[{"sig":"MEQCIFkFMTAWhj4mT1mseVuD5IBiENQ/pOzUFJctobLyfHlhAiBlUAlFp1JQAb0jAPzxrBp8CFnPx6Jh4fhmFxqcnSfDRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1139083},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.5_1786333229378_0.08929085647160306","host":"s3://npm-registry-packages-npm-production"}},"2.34.6":{"name":"agent-sanitizer","version":"2.34.6","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.6","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c2ed3ca52ae0216c991e955f19a2b3cc57af8920","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.6.tgz","fileCount":89,"integrity":"sha512-A+jJfJDJ82x3mAZCyvlX37UjZLejefPT8bhVI7nvAF59tA1wsi3e622P3aViXj5JF1AQmIHHqRdB5IRP6sTrvA==","signatures":[{"sig":"MEUCIG98s9Qhov7M7+Qz1W/OJ7Skp91vModyqlj4/fzPD6pkAiEA0Ss5i6TAONuORN1CHZCLa3UltvZYKb5QBhwBzs8PbpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1145882},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.6_1786349450713_0.47194136215318205","host":"s3://npm-registry-packages-npm-production"}},"2.34.7":{"name":"agent-sanitizer","version":"2.34.7","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.7","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"986bb4b123ed4a0411471d1209f628344a9fbdbd","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.7.tgz","fileCount":89,"integrity":"sha512-pduq72pqmk6dRHVk1K3RTndHYz+s3e90eo8HMHGqaXOHvadJRle76dmS4K9LUAon/VR10Ehuwjdys/2SPOQ/0g==","signatures":[{"sig":"MEQCIHHnswVEbeEqofFW/F3aGy7W3gB9O3jVJWKhrAz92oSqAiBNvmlfiEtKqeWdEMycl2JawEOhtEdX/ep3mldBs5L4YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1147379},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.7_1786383732654_0.8861922662209525","host":"s3://npm-registry-packages-npm-production"}},"2.34.8":{"name":"agent-sanitizer","version":"2.34.8","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.8","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"18907e9bb0d09912ed186d03643ad8cbac6fd523","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.8.tgz","fileCount":89,"integrity":"sha512-C/0bhnrvLi/ehrZkYh1bE0OdecgvOKJ5sDD7YiUla9QwVEFfqvHLXSbVKEVVjjD72+jvj7d4izIn2o1u81XE/w==","signatures":[{"sig":"MEUCIQDFw1+m9w1pOKE5z3fAO3wwSDkYk+x30jC6qzuYwRWbaAIgcWEOmdMgGQf4hb9vnpz9nM8oBup1FuUdW24Uj+n9aB4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1164612},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","sanitizer-engine":"npm:agent-sanitizer@2.20.0","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.8_1786386442471_0.24224003902310565","host":"s3://npm-registry-packages-npm-production"}},"2.34.9":{"name":"agent-sanitizer","version":"2.34.9","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.9","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"5327bb30052d1da237e4a0cd35aa77891f690d43","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.9.tgz","fileCount":89,"integrity":"sha512-FyDV26y1zmHhmZAgLmRR5MbJpoucLo+wJX2LxRzx9a5icIUtxo35+bkouyhfsasppoEwLhANCUUiB5HqvniDAw==","signatures":[{"sig":"MEQCIBQL+dCxJ0JGj0NzryjFGzyh9TlpuKimBbCVYWacgmQrAiA/TwybvtBDbdXsYpo0BzgMbgT37VgEaln5VSfvnR7SOw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1162432},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.9_1786392592312_0.8570036924489544","host":"s3://npm-registry-packages-npm-production"}},"2.34.10":{"name":"agent-sanitizer","version":"2.34.10","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.10","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"6607227ecb6f2f501a528f2645dbb46158ff9489","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.10.tgz","fileCount":89,"integrity":"sha512-CMVb76TxONhyBN+i3OZ8fbWjzHngfkzqBaDiLcPuVpWF8fxjVr5xRAZSsGQ8mBWa4Suf1KGnYysm7CQbgmy59w==","signatures":[{"sig":"MEYCIQDudTaQHeVOBs6sZdyr5iJFGM1biBrM4kEcUYYqGWCI4QIhAJ5wccKixFUO0SwWRQK47R2cD8E1Bk5ZZ05x6y6Ac7mB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1163412},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.10_1786396916828_0.6141112867767962","host":"s3://npm-registry-packages-npm-production"}},"2.34.11":{"name":"agent-sanitizer","version":"2.34.11","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.11","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"2b8cf292a2a1ff5d2545a85051b434533f0996d5","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.11.tgz","fileCount":89,"integrity":"sha512-HO4yDiq2kGctREMNYLSJEhowcWKEXH7gDCR8wym6WSjk3Lk/kLzu/KuK2hV1pwDSzL2PN62rzV7NZAaHFN+BVA==","signatures":[{"sig":"MEQCIDEqSAze89w1jP70Ig84QVGw7BDf27tU5JM93yKP+9CHAiB8HMPA/2KP3I9dzKU+z2HmauwPZoBvP5qhML4lp/lEjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1165651},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.11_1786399338533_0.15461745231012403","host":"s3://npm-registry-packages-npm-production"}},"2.34.12":{"name":"agent-sanitizer","version":"2.34.12","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.12","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"41d7689cbe66e2ead85d81d25640d1bad05a1716","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.12.tgz","fileCount":89,"integrity":"sha512-jMkxXJDCPO8y/IWlkmuRdQUapVsHY3L/iHvPzIbvR2aq/xJ2NZAjMf2a0juWTJOfvZMqHKtAICDIqfrKCNlNhg==","signatures":[{"sig":"MEQCIBOSsRf2B2hsYkKE+3Pfa3W4kcOmqPtN2Ufc0fk7U9VhAiAppJWkbBX2OQpGlhE6Qy1iFMUR6Zd3caaE2+mXbYAZww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1165699},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.12_1786402892210_0.817029857571993","host":"s3://npm-registry-packages-npm-production"}},"2.34.13":{"name":"agent-sanitizer","version":"2.34.13","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.13","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"ed3752accfc1eb4ed710170fa30b8ca8299d0c49","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.13.tgz","fileCount":89,"integrity":"sha512-Iq+ZCrRLU6vlT/SL7OaEauoiff0dJdBb7pRv6HkzpmIb6p9g/r8lhCgPou3FhQmnxePdOErOweAtKzHnsv5cwg==","signatures":[{"sig":"MEQCIHBeWYlBetMnIDdi68LbcmO7rolG6/sjbLEO5byPSA29AiAvuQKH9UFiUIp2TJzXLIGIXPZoNy54TSX7wFwL40Yg4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1165764},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.2.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.13_1786426360746_0.37204429848743326","host":"s3://npm-registry-packages-npm-production"}},"2.34.14":{"name":"agent-sanitizer","version":"2.34.14","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.14","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"b4d28770b2828f830786c9651707fd2714bd593c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.14.tgz","fileCount":89,"integrity":"sha512-dr0BxxpO6cQ8G/cJcyiS6znrh3BYdJPpiClCZJDB24eXlCcKjgFbp+9rEgWUsH9tyjBIPoeppK03RqMzKwVjIA==","signatures":[{"sig":"MEUCIAyconcLpiXpbD2aVZIrfZQ6JUjvr6n4xsYaOYgPuIwzAiEAhrCMSmh5A76464WrYyRKaNOWoCIt2NyxHH5tPhdHwh8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1166184},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.14_1786429297486_0.7721593148525003","host":"s3://npm-registry-packages-npm-production"}},"2.34.15":{"name":"agent-sanitizer","version":"2.34.15","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.34.15","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c98275fbcf69c91f20a69981b666290b696747f2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.34.15.tgz","fileCount":89,"integrity":"sha512-Dh12S8+0DdW9PPAhmNEj7QDTZLfnk3iwciHJ1GrXCAEKgxbo1IxH7xbehvvOW79FrHfSvZFmB530m2kf7UsM8Q==","signatures":[{"sig":"MEQCIEfX2i32VAgRYp9SbelzeKT9vtKfdaGFv75l1dMZf8B8AiAE41KQgZrTvZ0qRWO9CpL/+auCng1Ss33ht86+pFvzhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.34.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1166184},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.34.15_1786430818384_0.6915299708437217","host":"s3://npm-registry-packages-npm-production"}},"2.35.0":{"name":"agent-sanitizer","version":"2.35.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.35.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"73a0919df589755da74f8abd6f8e375a2606b312","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.35.0.tgz","fileCount":89,"integrity":"sha512-YBc+HMprWZqitmlvKeL/Dd//bl39wTkjj/LbluyeL6XoKf2FwlO9k4SPbdOhDeytriTlXtfdwcA5XnqjSHFdDA==","signatures":[{"sig":"MEUCIQCMKga8/EcPZnujhMDFiP5aHu9+1aqxjWlBYSdKw1utcAIgOLu1u1ugD14spVJtsVkTTQqAE0dHuLXLLajzCnZdkq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.35.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1169055},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.35.0_1786432676892_0.8400257829878626","host":"s3://npm-registry-packages-npm-production"}},"2.35.1":{"name":"agent-sanitizer","version":"2.35.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.35.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4cc63a5aae641167b42ab123a6d22330187eb84f","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.35.1.tgz","fileCount":89,"integrity":"sha512-dfeQWpzGTuF5Gs7RFWiclDy5AB3nJPiehgPVtntkp9sqxLJ5tWeB1fNa9Bm8vVRv3jlDmGK5k/h82kcK7WlOqA==","signatures":[{"sig":"MEUCIQCdCK9Y7iLu2JSOSdyw7fOdbPVFDSxurZS4C22pIZ/k1wIgU4lmIfgRvQeJupnocOBlXCPGfrXz5A4FkzMCX/14wog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.35.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1169055},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.35.1_1786464467699_0.642593295997534","host":"s3://npm-registry-packages-npm-production"}},"2.36.0":{"name":"agent-sanitizer","version":"2.36.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.36.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"56574829b485c6be77ac39af6eac825c8a2a1842","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.36.0.tgz","fileCount":93,"integrity":"sha512-cQ9ekqyee2dKWlxYsNFCrv/Ah146fxvSB3ym/JIY8lBjWmld9GhehDTUICPZ/9q9QJksL9HK+ST7H9WTY39jKg==","signatures":[{"sig":"MEQCICy6KKt47RaCdLuHAmfnLCt1XWeOhLEXK8PzLBekRw5gAiAb01lAl9/C2yZyyQwrKXLHoT0CUu1JD5bFQv3J/TCVQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.36.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1210566},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.36.0_1786550704844_0.8154275959724266","host":"s3://npm-registry-packages-npm-production"}},"2.37.0":{"name":"agent-sanitizer","version":"2.37.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.37.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"7ec1e449bfddd2fdbf93fb426aba571925aced18","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.37.0.tgz","fileCount":93,"integrity":"sha512-/euHDaNg7LcwFYuWnK37uK73xy85rPl8oqWAsobikg1qH9Ze3ng9MsbVr7OS4G/WxN6jT3BNHPXjrB5+zSoDQQ==","signatures":[{"sig":"MEQCIFM09iT8R0lyr/zzTP0TgQnUbNKyh/P2jafCwiCi2EG5AiAxFw0wacN64p13w9/lX7GJcz0A6KrfH46Z2dz0Yn3Few==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.37.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1211169},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.37.0_1786554638297_0.3980545902429118","host":"s3://npm-registry-packages-npm-production"}},"2.37.1":{"name":"agent-sanitizer","version":"2.37.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.37.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"72a741f717a254c337ce4ff1b890ddc3861f37a7","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.37.1.tgz","fileCount":93,"integrity":"sha512-pXILx37IeFIRoR3iOBbcNSZqUPLatHm6/loHLlzF5Tk6r/I3sM2Clrvjs0KR37fZ2wIPU8oUuaOB2366WQJXhQ==","signatures":[{"sig":"MEUCIEXn4xXg40ubnD00nfUXiGBDgEamdZrsGXcrZ8074JWOAiEAr0oa2fwj3A1wmwZyOiC9XCxovrulPTSDUCW0V2oyRkA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.37.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1218004},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.37.1_1786565847446_0.8141438211262779","host":"s3://npm-registry-packages-npm-production"}},"2.37.2":{"name":"agent-sanitizer","version":"2.37.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.37.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"258e28bc4b92102016bceda99d03e7bf36def564","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.37.2.tgz","fileCount":93,"integrity":"sha512-uqErajSRsHiGuqC/kD+tYSYuaRXWT5SY0DpiUMyHbhe0q+S4lPu6/ooVcMRrboxMYSyBQ4wpf6ur8u+ESfco+g==","signatures":[{"sig":"MEUCIGSJcnDGcEr4W1vI6KUZt24Yb50sxJkQcLAQQEeUpmL1AiEA3Ysi8ZWDBzmfCpWxhS9qiTDgZLnmkKhHFXXPKRu9+I8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.37.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1231010},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.18.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.37.2_1786572545069_0.1926894436644926","host":"s3://npm-registry-packages-npm-production"}},"2.37.3":{"name":"agent-sanitizer","version":"2.37.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.37.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"b42cbc6ddd51d0f18277ee63e23142590c71429c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.37.3.tgz","fileCount":93,"integrity":"sha512-21rE6x41b3OyGC6VMI+d4RNAjqcoLeuKgN9l3wuDhu3TtIlZ4LGGpPfZX6mFXde6PUFQxGYU9QsSdGgAYsblMg==","signatures":[{"sig":"MEUCIE7sKZmPwKK+ICrFDD/68XrLM416839h+MObxhJ3I9jLAiEA2Ta2+G8Hop4EKLFFWliuoJ2bUtcccSBRra2CwDHxzVY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.37.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1231010},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.37.3_1786727514990_0.6305656207035419","host":"s3://npm-registry-packages-npm-production"}},"2.37.4":{"name":"agent-sanitizer","version":"2.37.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.37.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"7de183c5cf26aeb3ff571c3feaa9def03720b44c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.37.4.tgz","fileCount":93,"integrity":"sha512-qzu3FECUaSRz4gviwWQZuf3cCC5zDmpjeNqQk3FBk7WP8lmpY3MMMwxl1jNLnXr+18X2GKeGTCeMlmswngqH9Q==","signatures":[{"sig":"MEQCIDb2KNtYHFfZ2Nl1swzIMFvRp8jz9Vgwl6g5UyMAUHOHAiBsHTVZik6m47MqUrkjmByjxNKfBGNWeC94iLN6qe1CZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.37.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1231010},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.37.4_1786750702484_0.7422285482441726","host":"s3://npm-registry-packages-npm-production"}},"2.38.0":{"name":"agent-sanitizer","version":"2.38.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.38.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1eeb22bce39be1ab927757c8f37431f797782218","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.38.0.tgz","fileCount":93,"integrity":"sha512-CkGBgkjA/ja2FPf7LRdAT4fgZdrrqw7pEdZTQ8iSmEAnHfTTk4v4pKejmczA5TWO94TTUalbqvZ/xB8YIl4K1Q==","signatures":[{"sig":"MEYCIQD5PEiwRMB9HjUAqFkW/+MYitfck9vQWJdcoE4ePZ1c0wIhAOtnJz5jxPKf9A1USWh/OMtwBniE7FBy6B+a5MHJ2lW3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.38.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1236008},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.38.0_1786750816990_0.055202330328079974","host":"s3://npm-registry-packages-npm-production"}},"2.39.0":{"name":"agent-sanitizer","version":"2.39.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.39.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"24aedbbb8a9d8aca4244ea66427a2f7245fce18d","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.39.0.tgz","fileCount":93,"integrity":"sha512-45jhw5C4F+48STL8u5VFQm12F9qft2KWJvXEMyH/5IMHZ2DVZqJSybXNg2x7L/5zIxZnLTQpyEMcninxn00sDw==","signatures":[{"sig":"MEYCIQCqtwO6domgNWIKba3mitbx4+OZCuNI5JpD5Ob3amAtYAIhALSNEu69xGkjMjd1pBbSQFrILuBuDgf0oP9bk94NdkN/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.39.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1236008},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.39.0_1786768227380_0.05274228332102848","host":"s3://npm-registry-packages-npm-production"}},"2.40.0":{"name":"agent-sanitizer","version":"2.40.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.40.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"b2a5df89933c43dee59991140fcdf4b93d1dba66","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.40.0.tgz","fileCount":93,"integrity":"sha512-O9EojYwMVAXNo6aJ7MPVInqfSnPd2NBcI2aKnyZZol10cBOxKVZ+4mBoN9YjPfGLvTDD4NhrAvIH04sNNWkOVg==","signatures":[{"sig":"MEUCICk95F+kVoMI9zcHUZdgx7+CBCtTJZF7CWL56PuSzVmWAiEAsLJ4Js7qtOVGe6D1bKlYH3KwHxxvWF0PBtqyFaAKYLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.40.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1236008},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.40.0_1786768902295_0.2387484846728476","host":"s3://npm-registry-packages-npm-production"}},"2.40.1":{"name":"agent-sanitizer","version":"2.40.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.40.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"448ccf274450c3038a46bd56b52f488cf7ab96f6","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.40.1.tgz","fileCount":93,"integrity":"sha512-090eI3yhRYkiv6O8VOpLoi8Ul3tzPGKHJSEzzz3ek8B75B4Ph8vgEe1UJlySqJoACA6VkpUyvrx1MpTkZ3yIDg==","signatures":[{"sig":"MEUCIQC4gbnGqT7aL94Pix50AUKUmwCle/ag0PMip68xLiQwrAIgE2XbM416+SRbDUy2z0rfUvrLAOZ5vavJNauQiTMdTlM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.40.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1237044},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.40.1_1786775252379_0.7372051183833082","host":"s3://npm-registry-packages-npm-production"}},"2.40.2":{"name":"agent-sanitizer","version":"2.40.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.40.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"9fa19c32ea522ae5aa247649304aa16a294f5a70","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.40.2.tgz","fileCount":93,"integrity":"sha512-HHyGRa0/pN8iUp1Xk8GYz2bRbQtQpgp1ht/TsQWi5fpCuc9kJuVceIAOIURViE+ULcc7Xfu2jMOH9c65nX1QPA==","signatures":[{"sig":"MEUCIQC6b+pxy4w6uhP2Wpk5kg34k+bVjxESMhFllG2xbnOyNQIgDj9w+8vrQWSygxJQnZlvkxBYnNvb3JfN3ipmvBSTui8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.40.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1239607},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.40.2_1786822211740_0.6108154397942069","host":"s3://npm-registry-packages-npm-production"}},"2.40.3":{"name":"agent-sanitizer","version":"2.40.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.40.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a63813d6551fe3292757936630f58584e826fc06","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.40.3.tgz","fileCount":93,"integrity":"sha512-uqHRWgwZyzk8IXULJCkpnAKAYn4eD5moGuun3EGY+iUkoc8GpB8JvFgpKuTKKSEMJhJeQbJ5rs8/i/ueCNTNEQ==","signatures":[{"sig":"MEUCIEJxgwJMnxDzBDCTZrpY3xLWrv1RbDrm6HtZtDDfP/KlAiEA+skNNL6OWlHTbkY23Auu1IgZJyiTG+KLDUhq24Z+n6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.40.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1239610},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.40.3_1786827265187_0.5165370682644199","host":"s3://npm-registry-packages-npm-production"}},"2.40.4":{"name":"agent-sanitizer","version":"2.40.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.40.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"8671fc8f18754028a0bb535802a761b45831287c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.40.4.tgz","fileCount":93,"integrity":"sha512-EDv2mrk0YS9Pd0snfbpDheAkAZPmgrUMjh85g4OWxpF8+ZsH/vr3AhAY4PMhzjYWvcpA7BZE45RYltFsdkWicA==","signatures":[{"sig":"MEUCIExzay9Oau3umuC2I7rqlYToZA9bkAN0wjss8TjN4lqWAiEAjESZnxw3dEcL7YZG59ynuZjyxRh3T0aj8/VOP+u/wEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.40.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1239610},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.40.4_1786831098453_0.6601813511144266","host":"s3://npm-registry-packages-npm-production"}},"2.40.5":{"name":"agent-sanitizer","version":"2.40.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.40.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1d4efc4d496423f2ea462f8dbe06dcdeebf13d4e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.40.5.tgz","fileCount":93,"integrity":"sha512-qNIidWEcYuk8HfD2oyUMj1gVJrqPFZyMNeJCMdAEeGpEVzJzLddvqYlOBApa8rUoaCy/ZyT8jGa6se3e40GZ1g==","signatures":[{"sig":"MEUCIQCEQaXQ0SMP4q4N1tfvjbwcK3/9CdmBW5Dkx+x5OkfGUAIgNWKX19hywcRQmDM3Hhf5rLh3nAlaoSepdf31SFcczuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.40.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1239610},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.40.5_1786833290763_0.7210906497726608","host":"s3://npm-registry-packages-npm-production"}},"2.41.0":{"name":"agent-sanitizer","version":"2.41.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.41.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"99e2f9949d220e005134203e6785f3cb46212b40","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.41.0.tgz","fileCount":95,"integrity":"sha512-N8S3wr1acNGjILOVu95dgDCPy0gycqyIcEkIN+uyv88OvHnPloP16vtfpFo/+aZdSiy7lAHGQWaVbNE7pkrwjA==","signatures":[{"sig":"MEYCIQCLTxmWpz+vozGVkhaA9eYVyX2M4ilam8cFGSu/eiZcjgIhAIliV7qsawo5ZBucZbxoFrYSjdZ/NDpF/p98bNeSmFgr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.41.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1259920},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.41.0_1786866487744_0.24298236718880606","host":"s3://npm-registry-packages-npm-production"}},"2.41.1":{"name":"agent-sanitizer","version":"2.41.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.41.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"ae07a7fab9224b5b1320f7083afebadeaef61dc5","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.41.1.tgz","fileCount":95,"integrity":"sha512-3saV8ZVzCExwCQ8L9rar4u8ZWocNIUFMODDqWwcFoqX0pK8K16ZKNuhsHKEcJVSFmSpxweb04M8KqQOp7hLYow==","signatures":[{"sig":"MEYCIQCAbELy2A9wqVSYByirLoaIna3CwLyGcmUABr5zfyu6zgIhAKNSJlDC1PlcmnicO3hTWatChRuSW5KMYTsPbBoslVwr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.41.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1262490},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.41.1_1786897240861_0.312403077958044","host":"s3://npm-registry-packages-npm-production"}},"2.41.2":{"name":"agent-sanitizer","version":"2.41.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.41.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"db50ca78237cacdf16953ab86fbbb88771c9c2c6","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.41.2.tgz","fileCount":95,"integrity":"sha512-erY0aTS5nFxY4moOCGdaCVbhyqy1f1WyrPwKkWMxaCiiJYlQriGiOsiL6uh6juD/sH4xxlbXwfxGA4BCxYryuA==","signatures":[{"sig":"MEYCIQD5A3zFEukE6JpEX7KSrOXDjzQ0gAPEo3MUz2wkFjetvAIhAJS1L5m9/lPHGjHr8lX3phQ4WiWWK0KbvrRNmLIEm41W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.41.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1262490},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.41.2_1786901878143_0.7150126745212855","host":"s3://npm-registry-packages-npm-production"}},"2.41.3":{"name":"agent-sanitizer","version":"2.41.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.41.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1b072beb0465623ab0e64bca93de0bbe0814ce75","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.41.3.tgz","fileCount":95,"integrity":"sha512-Qn93DkkxqVKGT58SzzqYp0KdJpRfdNbYPkn4ARbDT6VYfmKxYech/MnkG7ViCVuMDWz8wN2YF14pcPGRrZvIDg==","signatures":[{"sig":"MEUCIQCACqZ3GR87egh6oR3Yp0rkV30d+YYo0ZUj1BkCUzqiugIgNk8cYkXa4aw+iinAtmT+sRGYpeQEF2j+jN+6OkWQkCA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.41.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1267571},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.41.3_1786904572096_0.6352300502314538","host":"s3://npm-registry-packages-npm-production"}},"2.41.4":{"name":"agent-sanitizer","version":"2.41.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.41.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"902a0b2264a140fce3d8432d56db97acc102b895","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.41.4.tgz","fileCount":95,"integrity":"sha512-5fzO69gJSiItXnPSdq7PS569CYkQkci9IDqEtOmMOixv5gRxlVx2vxorSisVE5/RMB8KBxAD3nIGuhvObB51RA==","signatures":[{"sig":"MEUCIQC8fD5ReixMKMXjBK3Dxz+kVEvGSdluELMD0PndeB/g7AIgTj7T5m6Pv1pdFX77v3pzoj+BkR9KJqQljoc0vsf84Ug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.41.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1267571},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.41.4_1786906256917_0.5374802953922184","host":"s3://npm-registry-packages-npm-production"}},"2.42.0":{"name":"agent-sanitizer","version":"2.42.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.42.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1a6942496854166df94a3ca6c69ca4450cc6ba2b","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.42.0.tgz","fileCount":95,"integrity":"sha512-porzwGhnMHIivarUGh67OYGJjAsZmx2w0SR4+8uN2o+ZSRGIQEQNwD0mr3FpKoBkdw31qpkQkJppHvz2MLTQTA==","signatures":[{"sig":"MEUCIQDRrxI+NTDBsWVD5f7ZG6Jr/CGp9+Qx2ONabnRJRRBOSQIgSlBXByO8WNZrmruQaTcW/ZVaSd2v0VWkJsIwAyFORxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.42.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1267571},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.42.0_1786906388014_0.08876849945366483","host":"s3://npm-registry-packages-npm-production"}},"2.43.0":{"name":"agent-sanitizer","version":"2.43.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"0651c9ce954bc419bd256ad48869710d0bd789a2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.0.tgz","fileCount":95,"integrity":"sha512-jp95zxTmpGz3/iKCsKfzrEBgUaWYiUE1t3rBNl4FvieMAcpj4wmuojnT/x1/OKHulj0USYgQctJdcaWvK2U45g==","signatures":[{"sig":"MEUCIQDFzd8osoFBySwyJZhuVyD7yl7tz+NXJfpCexwnLOLy0QIgaRgGHY/QghSQ91MAxJqeVpY/yvyLS+WHIwa0W/efSDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1271727},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.0_1786906919045_0.8178998939224644","host":"s3://npm-registry-packages-npm-production"}},"2.43.1":{"name":"agent-sanitizer","version":"2.43.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"82bdbcaae6f8307776f324891d24c329ceeff1d2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.1.tgz","fileCount":95,"integrity":"sha512-ITongjzXOG4NuJLT2eKD5/wcTJpmgS7JHizrzsvcGHC0qp+s3hl55Vl1fKUbPI3v16jOVZ+DvSoOJlMXm9OqUg==","signatures":[{"sig":"MEUCIQCl+AaMvFwC5hT60UV81lVMm5gUPehp/gAqKNeKnJb5bwIgfi3DFHyVzHOmdpA+PIAU93KVoch8waaAavze84b/kxk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1271727},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.1_1786909886213_0.5658372803059479","host":"s3://npm-registry-packages-npm-production"}},"2.43.2":{"name":"agent-sanitizer","version":"2.43.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c3fa9649f555f77592b5c56169df4045d20396ee","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.2.tgz","fileCount":95,"integrity":"sha512-imvYIMEZuMLJAZeZrrBAna4toZgwh+vmmGEqhr3YTdGJSBWXR6tMbr5HciW9lx+8qStokyutFs553GD8gmQjIA==","signatures":[{"sig":"MEUCIQDYkMvcaYYKh1imk+t0RcvSaLB2TEziRNZlEF1VlGuAOgIgAyiDfyhcg0ztJcaoc7MUh8ilxtRpxWTAOHZGLdceDZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1272041},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.2_1786911974165_0.4901642922398115","host":"s3://npm-registry-packages-npm-production"}},"2.43.3":{"name":"agent-sanitizer","version":"2.43.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"19bd1d0d873691b639f30456e0b3244a29878570","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.3.tgz","fileCount":95,"integrity":"sha512-JXD25hRyr6DslbG0ld6q9AQrvgoH314HKvMPwVmPbdTGyCG3LtYzRM2wv1OsFHa9llacX75bWZVjJOEjtmFluA==","signatures":[{"sig":"MEQCIASlNzxRs2lfHC3l3Qs9zUDcY0BZDyjFMrdSUXkx5e7rAiA3tEMPTV+a5A/gFmYTG0z/pJTQgJCnOwVsbmRkbtrdwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1272041},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.3_1786914631064_0.2181865473120681","host":"s3://npm-registry-packages-npm-production"}},"2.43.4":{"name":"agent-sanitizer","version":"2.43.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"79f89eb5dfc0956c7ae1e0ca2c4a997b5d67fbf7","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.4.tgz","fileCount":95,"integrity":"sha512-P1ZA0IcqyvfpWBHQ3rQA5dcQxfOFwzon0eRWppisfeIcdnN62XDNmaXksXebstURXEj++tv/dDsda8ZaT1tlTA==","signatures":[{"sig":"MEUCIQDjKLFIephwrglD1KqD321vI68zvHyC+8mqFOj0pYYWbwIgIjG84uhdByqwjSic16NzImIOpbtRK13H9qVT84i/TuE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1272041},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.4_1786914749262_0.15678632277690707","host":"s3://npm-registry-packages-npm-production"}},"2.43.5":{"name":"agent-sanitizer","version":"2.43.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"86f8ce398aca27e13e0b3cd3fb16614111bd5e25","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.5.tgz","fileCount":95,"integrity":"sha512-0+BLI2M739V4VqLXfg5Yv4zcOw+8j8UD+RHR+270AVrTtWSmn9fNJJay0gkb6HIK3lhos/yDwBdI9hcNIOMpYA==","signatures":[{"sig":"MEUCIBWeSK4zdI7xGiFH3brUDX/tQF/D8L7UBm9Ctxp8vJbtAiEAwcBVsCwCAxz35n50aZNDW70LyUcpmQFyDqmyb4xZ+nQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1272069},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.5_1786914824159_0.23263999444951677","host":"s3://npm-registry-packages-npm-production"}},"2.43.6":{"name":"agent-sanitizer","version":"2.43.6","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.6","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"3e0f3a52aac2ff5c0547b57c25c6dd37343489dc","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.6.tgz","fileCount":95,"integrity":"sha512-DbpValy+tfqZ6CE0Il2AyQHGm/RF6vafFehvNZqtb6ReE75rsOp4gBtqGvxa6Eflntr4OVY/WyUOWq+U1Czp2Q==","signatures":[{"sig":"MEUCIQDW09OZ7tXhvrSrAVc4nf6Yp1n3f5PbW95osxkdooWAswIgPXpM2vQnpgwzrldsro1Q+dIxAYxrACUUL/VXaKXlWxU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1272069},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.6_1786916666357_0.06210015906550703","host":"s3://npm-registry-packages-npm-production"}},"2.43.7":{"name":"agent-sanitizer","version":"2.43.7","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.7","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1f7c996d8add0c7ccc2020b5eab3d4b343838898","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.7.tgz","fileCount":95,"integrity":"sha512-Hua9AJrDkcrPfko5St9l9AmWsVqP2PT8tSzs8JGFmHslpzSAEuWK6+YDpZtJSCgKX6SqxS/Ls0mBF0ff62rPyw==","signatures":[{"sig":"MEYCIQCh0tZinOVvSvaQRmBMT1WtloJbcLTD/MfTbU6raQkQjQIhAKr3GsPkypqr3KDTQW9BMlYpKdNRq0jP2jdEyMYLDy9e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1272069},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.7_1786923678506_0.19446933981066472","host":"s3://npm-registry-packages-npm-production"}},"2.43.8":{"name":"agent-sanitizer","version":"2.43.8","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.8","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"3c573a9dbcc74306d09818ee840d97d53ca45d59","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.8.tgz","fileCount":95,"integrity":"sha512-NG56+tBbKEGufVVVjDGMew9LRcAOD3ct8NfO2FmR+s1HoyYGBSVTs4omDNJQiHxn0HM2iGujZsFIR7Pa31lFqQ==","signatures":[{"sig":"MEQCIAaS8QSHv2TbVQLaIKr9xtDeyCZFQCL9Fm8viU1F6wjEAiAaret7hexATEX3HAJaCcvfOxVBYF+t19czQ57jNMaFqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1276633},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.8_1787005807688_0.34452024185295405","host":"s3://npm-registry-packages-npm-production"}},"2.43.9":{"name":"agent-sanitizer","version":"2.43.9","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.9","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4f66bba2d36a5f46ffe4a1a4c9b16b8cd70e970f","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.9.tgz","fileCount":95,"integrity":"sha512-3oDOWa2XHpu+OfcrXHGF3+qG1jgDG+N3K6MKzof16q7sjQW/faZIgx4xzwrkCbYq2GJeUg8jLJqVPBuZjhvwpQ==","signatures":[{"sig":"MEUCIQC2mbmFljRbmZyyMqAdEz7NVDYggZq4Lmv3UghKbzbb1wIgcM4tqB9Xo9UZdDHnvQ94/qtGLL9SJUJ/D9U8noD3MUI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1277149},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.9_1787007477342_0.2098124108331565","host":"s3://npm-registry-packages-npm-production"}},"2.43.10":{"name":"agent-sanitizer","version":"2.43.10","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.10","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"5e8c375d97ecc4533c9ae82f3adc2ddd91a70fb9","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.10.tgz","fileCount":95,"integrity":"sha512-ZrmQGcro+hnN5d1e0nY7xBAyXBTuRzjAhy0VvRsXQ+WULBikBEC9FOcnQMZYSd/yF7SdUGRl/t/Tl7qchdonRQ==","signatures":[{"sig":"MEYCIQDKRvtAGU9fARH2cVXgX2aTyac4HlLS8WqSmi5s7PlLHwIhAJ1SpbgZECqMDQ58I4b/eenEe13emKAUXpt1CcICVUdg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1277150},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.10_1787010287984_0.44080933140308876","host":"s3://npm-registry-packages-npm-production"}},"2.43.11":{"name":"agent-sanitizer","version":"2.43.11","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.11","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"12a00db59f4a8404b81eb9c1eead293938a497ee","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.11.tgz","fileCount":95,"integrity":"sha512-mC3b8aZ84l45OPZm6c99M5bs6UKcfUsxezoXnllqWM4wR3T7agQvTcQf3jrzfNXj43rnaxW9MHDo+Co/PFbz0A==","signatures":[{"sig":"MEUCIQDpayYlAoU8DQ0BLndwmYx7Y2kSQJU+sIX8N8tqfTMKiQIgR0p6yB8LErcgzhxuvpLTMOYOfJV2F+ioHELRcZTz2Jk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1277466},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.11_1787013452517_0.8233627653069502","host":"s3://npm-registry-packages-npm-production"}},"2.43.12":{"name":"agent-sanitizer","version":"2.43.12","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.43.12","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"8a9cba72e7e6dc3faf4adf05f5e7a2df7f8b6274","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.43.12.tgz","fileCount":95,"integrity":"sha512-h9euD+vTT8nuZj2gQE+SzwgRbLDP/TVMlpnYLWOFFPF3EOgJtRGFpkobqz8Xca4rsSmbiOLDd6QXVfIwSCBqiQ==","signatures":[{"sig":"MEUCIFEuI9fQBt7RI84n26UtXHS0gP4g14qm0PnTOsYSULOAAiEAniT6QKjAAPgjtHi7B3WrfDhkxbKhawuREOVJ8LqXDzE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.43.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1280089},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.43.12_1787027098616_0.4706765437547","host":"s3://npm-registry-packages-npm-production"}},"2.44.0":{"name":"agent-sanitizer","version":"2.44.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.44.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"d33f6f6386874e9161718d2d44b763a62d2c3889","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.44.0.tgz","fileCount":95,"integrity":"sha512-OUPC/QMwVVa23DstzMPCFOOpDT8F8KXZgKO1xk8n9WgDG9jBwXrvavYTQzYcdoXMOuxM/9ZtzFBqv46q37+VBg==","signatures":[{"sig":"MEUCIQD9ry9JRfZHMfu4W857FUkUS8bybF3T7JiB5XJyKn2P9QIgQAAjqptTRDY9455wwvwdDK2fO/EyA7HHZHM05JV3eEY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.44.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1300021},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.44.0_1787030146916_0.9004693902367669","host":"s3://npm-registry-packages-npm-production"}},"2.44.1":{"name":"agent-sanitizer","version":"2.44.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.44.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"d2548e068f27f2d053b81fe4aa93263d1eb6d3c2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.44.1.tgz","fileCount":95,"integrity":"sha512-f3wB9Qwkrwf7O4mV4JruJqvhiXlQImZRF5JWprEMEcyONMLrYwaaMC6sdqHYUIP8bYNZXXWON+22Kj6/EV5nPQ==","signatures":[{"sig":"MEUCIQCCz/rucrcrkztwM6Qz7SZ/5eGCcOtlwTvuC5pwLYCpRAIgbD3AMq5lq6dNHYXC8kN4Sp1U+aQG/bnXFvMdd/q8kYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.44.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1305912},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.44.1_1787035670457_0.15399690524010712","host":"s3://npm-registry-packages-npm-production"}},"2.45.0":{"name":"agent-sanitizer","version":"2.45.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"ef4a173cd26ea967a6fe63e643d79f9708355848","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.0.tgz","fileCount":95,"integrity":"sha512-ubZISWkzcizS2BLs6sn7ulsTaQzzDeO43u6DfouzLtDwL7bASiJwpLri6fJLcBByzJyMhafxV9lZTtxECdvOjQ==","signatures":[{"sig":"MEUCIAGyahRgol3FHFst1Lzmovr+mMalcYyQPPWTLqGmc+MaAiEAzC32qUEkt7xHIjvwP+hxJMiFk/JPtDCYAwTKNE7Rjoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1305912},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.0_1787068071362_0.32805261678647035","host":"s3://npm-registry-packages-npm-production"}},"2.45.1":{"name":"agent-sanitizer","version":"2.45.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"403719af60e253712d5d1a271fd0b0f1205781a6","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.1.tgz","fileCount":95,"integrity":"sha512-0UCT1dhLN6hpo6v6CHP640YaFEvkaaCkFUnk/M1xZOTRZ5eeUXkxns3H6IHnQ/V9Sxfpx87K0EDVhU7avUM3qA==","signatures":[{"sig":"MEYCIQDRpMi0J8zeZh8Lozjv48ufedyLTvKk2fbQBksKBa+icAIhAOGAjJLz1kyNQSc/ZrFaHYjUvTG1iTa2lIE1Y9Lcy54h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1305912},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.1_1787074861455_0.7402001366610884","host":"s3://npm-registry-packages-npm-production"}},"2.45.2":{"name":"agent-sanitizer","version":"2.45.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"412c0875060ce8935f052688e7763fc1781461dc","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.2.tgz","fileCount":95,"integrity":"sha512-DD1cQo9Kc4rhIlOO+QA7iyl7nDmuamucYryHD3kChLJIUEswYgIX1K+8HaIn3rRPwbZgJMyWAtBNCO2kj0saDw==","signatures":[{"sig":"MEUCIQDEQ9VcoF2QsksYYcTLkxQ7uDo8RKPmGC/s9+HcSnzhkAIgBClIrMyG6ynzsAbw2OY9c0qYCQo4Aso0x6N4wxGhVWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312292},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.2_1787075978344_0.9875294109481723","host":"s3://npm-registry-packages-npm-production"}},"2.45.3":{"name":"agent-sanitizer","version":"2.45.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"eeaa76220399de25a72fdc2fe90fc1c79eaa5efb","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.3.tgz","fileCount":95,"integrity":"sha512-m2NbuKeOoKz/AoKNoicKXfIwhmhinQPP0gCbqVQOLT4TWVTvE4caaTsGfMIeMwVR2OmaBVTDu2XvTWU7XQw9PA==","signatures":[{"sig":"MEUCIEeKWQZmffVH7TyDM0x3wMyY49EvRdu42m2HY1AsvEOdAiEAsl9gE5fDD8pNXGGnTQ+NEj8iNcb+SzaE2YuG+JYfXco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312292},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.3_1787080690840_0.25165202283526766","host":"s3://npm-registry-packages-npm-production"}},"2.45.4":{"name":"agent-sanitizer","version":"2.45.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4bffd532d9334d4c3bd2e97bc9c74bdeb943b7e1","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.4.tgz","fileCount":95,"integrity":"sha512-9fcSjYhA0oDCExqs5lmUt3uPmlM3y8jXqTIUXj1Su2PaGowElOwHuue/C8NPsjq4aYrgWBOtxzieOs9tHFM6UA==","signatures":[{"sig":"MEUCIQD+uVPHmbwKa52IFpgjPomi9PkHrUETUwZSZorHtzXNrQIgW5wOHGFLKreMXJZGE+aiNwFDO3Z1vY6XICkfBT0z3NU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312292},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.4_1787088095575_0.1681143988506757","host":"s3://npm-registry-packages-npm-production"}},"2.45.5":{"name":"agent-sanitizer","version":"2.45.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4544c0f33afcedd0d14596e248b114f784b9f783","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.5.tgz","fileCount":95,"integrity":"sha512-e3q9d/cFEMntWND3ALn2ASsz5qIvE/V2PtGhXNVswRMdWw2NBId8o96O6w+czUesanl2nLR9tH7R7Mv8/KVX3w==","signatures":[{"sig":"MEQCIDazKU6/P4Sbr1d49VA6ztPcoIaHKpKH/BQL8RbR4JJkAiB3LNVdqpwpjzsS/6W/flciGd5YwR64+pUHtuPp+wNtnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312292},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.5_1787088204756_0.8248671851505345","host":"s3://npm-registry-packages-npm-production"}},"2.45.6":{"name":"agent-sanitizer","version":"2.45.6","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.6","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"88d053d19e715603a4f7fd8685a08b7cb4126984","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.6.tgz","fileCount":95,"integrity":"sha512-LHUoW1pe9nH83hPbXKmeyWhdIY2AOnl+/IxC31VkQA79WPNr1G4HcYFH3uQkKwF0W6C/aRrV+I81KiO6Jknm8g==","signatures":[{"sig":"MEQCIF2MgVixxjDrkYoKYgpnhMx49izu8M9eLsqd298+oFMrAiBkR8zdEhGb4XM+1EMAmvwGRRfjpoV7NWsNrGZ06ip7wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312292},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.6_1787101741922_0.2169083399174323","host":"s3://npm-registry-packages-npm-production"}},"2.45.7":{"name":"agent-sanitizer","version":"2.45.7","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.7","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"9a649d3322490d3c979c9f40d002deef3de3447f","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.7.tgz","fileCount":95,"integrity":"sha512-We4u4PS3b1Qr2u5u/G5N6Pvsf4QWkKrkKje710sBTtZIQaZQuXxfLTtCCxBh8k1134c1s8bUeuzBtCInZn2dFQ==","signatures":[{"sig":"MEUCIDY7K1/Qxqrf7EFe4MVGi4fd0T62y+XpNk9RPlqiSJKGAiEAvAVQxsHedTtAjJuq3FhAFPTyPWfZDD/w5KUzIkRQmXI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312292},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.7_1787105758901_0.5990042079189493","host":"s3://npm-registry-packages-npm-production"}},"2.45.8":{"name":"agent-sanitizer","version":"2.45.8","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.8","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"393b1e9439d8553d72550b885443f503d4ca03b9","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.8.tgz","fileCount":95,"integrity":"sha512-RdyPpNYsEeoIqi+JxLwTh/U5Kl89CJtnzpR/AuL/rucjv0RqIU7k0PA/I+Pn1Uh6sP9hnMyhAOjgLivUZGEHBQ==","signatures":[{"sig":"MEUCIQDvM9kYMz6pdPspEhxw0CZ+exBcL38Es6q33On8Wrp6YQIgZfsvwBOmO+GkTLHl0qcUAHY8CQ7YZVn47pPTtCyPKDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312292},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.8_1787106536522_0.94559551650066","host":"s3://npm-registry-packages-npm-production"}},"2.45.9":{"name":"agent-sanitizer","version":"2.45.9","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.45.9","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"d94d1d3614bea508e58ab8a1b7b2a0913557b0ea","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.45.9.tgz","fileCount":95,"integrity":"sha512-/a8YbVqsulttdzTpBXWkahsFY2YNNlwjhSmSQtmRH3NL+d3nSGHBaUyqa9lIsATRquplO05sXeQrpr2yMDrf4A==","signatures":[{"sig":"MEYCIQCV9qFnCGaGDWUHMODcNHhhTZUNJY7kQJIvvCOBtrItRQIhAMK3/tS5m3NC//m5AfOA9H0NXDCB7m5Y6WC/vJP08Uil","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.45.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312292},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.45.9_1787109485427_0.9917477567821424","host":"s3://npm-registry-packages-npm-production"}},"2.46.0":{"name":"agent-sanitizer","version":"2.46.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.46.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"43e297a675337500ed39684193d35c48480b0751","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.46.0.tgz","fileCount":95,"integrity":"sha512-Kcd1cptb31Kb/S6K9001tVRqkotqhm0VV7qe8tTTR9GR2NfAy3Tp7jeuaHPemSIruGBusHMktrBei7VeM6FX2A==","signatures":[{"sig":"MEYCIQCNT1RZ0BmSD6sZsx28MDgPr4Ox69YbKvvPMd5oWL74PQIhAKfNY3G3xmp+VrfzIixGAyIZLkAK3w+HSBGxr9f8saVr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.46.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1312725},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.46.0_1787113962511_0.8326665265004312","host":"s3://npm-registry-packages-npm-production"}},"2.47.0":{"name":"agent-sanitizer","version":"2.47.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"6d524975d18db367d339381f78227eb35aaffb1a","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.0.tgz","fileCount":95,"integrity":"sha512-wyxPtKdis4l0vh7ga/3LgnEOmQnDVL1/1TFcY6/dfrEsSQ7FaPHdWnnYr0vXVBoK6wnWdqwSvZ525P/Dd7WWnA==","signatures":[{"sig":"MEUCIQC4w59ZxZ7c8lQ/f7hc46S8SJ9BT1YXqOAgpCITH9KDxAIgJD1UxdvX2TYtNhybdISz22hLiFCRsCJETz9IsWkTvcM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1320892},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.0_1787118198030_0.9527239798629199","host":"s3://npm-registry-packages-npm-production"}},"2.47.1":{"name":"agent-sanitizer","version":"2.47.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"e9411902a843d25b56c034e08d326d91b5a34b16","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.1.tgz","fileCount":95,"integrity":"sha512-hOQW3EwEjK9BfA0+96miCotA4Hvq3QcIUHt4M9I+Oyl5PQmVbjvkD7vMurTBu7VPj3m+rru9sWBgQ43Ekdi0kg==","signatures":[{"sig":"MEUCIEVTEOvahX0Fy/oCTJMSGVYDCyRAPGohfCJWDx2zkTaRAiEA6s2OFMQRbl+5+QEumAbGXt6epcFq/dTkdXHCtKeo06k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1320892},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.1_1787242265824_0.1730227269007767","host":"s3://npm-registry-packages-npm-production"}},"2.47.2":{"name":"agent-sanitizer","version":"2.47.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"18e1ebbc7e22fc7b4cbdc329cb5f8ac27b53d15a","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.2.tgz","fileCount":95,"integrity":"sha512-0lc/B5er3PS+zD4f6U6w2K00WhOW6S7CBD8hWN/mCjWIpzmPRnyu2rpOR2m47T2vJHBSXnH06ND67JfUPaU4Xw==","signatures":[{"sig":"MEUCIQDuS3wuvkBpzgruHcrQMQ916ngcpWhIB9JzSjmzt2ohugIgXDY+SofVtt+p7R8sMcSFqAbbvg7co0NrjjokYVvvtYA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1322428},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.2_1787346113715_0.4770065271504367","host":"s3://npm-registry-packages-npm-production"}},"2.47.3":{"name":"agent-sanitizer","version":"2.47.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"3ef6bd1e99f58af6e3dc91604429fb9b74b923f0","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.3.tgz","fileCount":95,"integrity":"sha512-QClLFhKB9cFbgA9pCGBk20QIMs8xcYj3ts6rBuPOSLkHrN2zwR3B2q/j5KHXP5jPeU/R7Q0ddbpuhi1IgV9tvQ==","signatures":[{"sig":"MEQCIDqhzYLudBV2RfpxSOpEYrA5QS+mSVxarH1RvQia+E4iAiButKoC7qnqAlm2mMAaQQZbo2AXBCsKoba3AETyn0II3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1322756},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.3_1787505549675_0.05003151575781395","host":"s3://npm-registry-packages-npm-production"}},"2.47.4":{"name":"agent-sanitizer","version":"2.47.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"bdeaa67ab40398832524db357906ebf4a15be803","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.4.tgz","fileCount":95,"integrity":"sha512-G4E3g/5VPr1vPefgrQjQL9Yh/+DoCZCuLw4BD5Ykwh7YtfEGYQHHmu4SObNF9FBvAfvdQTFipODbSnBRDNY4Kg==","signatures":[{"sig":"MEQCIGqf03Y2U2L03Pn4LR3Xa5NziYatYQNH3Zk0yU/nwfLjAiByXmepEBmpCZuE6F2c4VmcIFH5wWM6wHHncw7nqDXc2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1323646},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.4_1787523243139_0.5019138272468024","host":"s3://npm-registry-packages-npm-production"}},"2.47.5":{"name":"agent-sanitizer","version":"2.47.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"3e55cb08169a14ebf3b45c7d13c3728971e65e06","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.5.tgz","fileCount":95,"integrity":"sha512-1E9hTg8P2usO7BvTZf53Fm0mDTMujouH4QZEq4VtXZe07MAuUHDNT7h6cYy8ceDCJFer6xWUdp14ucb5TCsx/g==","signatures":[{"sig":"MEQCIFF13k1+Prd7qiBahdNITuXQ9mJPbNVMwjLZ/3EDWqboAiBh6nSz4S723TWuRyaowg6+O2Ofcf1KZg0/XY0HHkqKFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1323646},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.5_1787539680722_0.9523682721168363","host":"s3://npm-registry-packages-npm-production"}},"2.47.6":{"name":"agent-sanitizer","version":"2.47.6","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.6","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"df8065d7cb43d90ddfe7a34fe9cf405e50473da7","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.6.tgz","fileCount":95,"integrity":"sha512-ReUyI0YvC4n7Rwbki5s39ba+izksDWZhzGUqZoG0K3Kb9VeX355Na1idQoRuyr4jajBzfxd21W1mHQ5vSLOF3A==","signatures":[{"sig":"MEUCIC2dtDWkbXzRKuE/f6itc7/cckW37kNIBD8XkemsNaT7AiEAmOVF2zCtOqOpJBSebIT2Bf9GwKGIPahX5wEPMX9gH6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1323646},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.6_1787607408664_0.5773365741482908","host":"s3://npm-registry-packages-npm-production"}},"2.47.7":{"name":"agent-sanitizer","version":"2.47.7","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.7","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c366703ce9d1584d6babcf619899a269e608822c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.7.tgz","fileCount":95,"integrity":"sha512-Am791ecYdnfOR+nDBcTZkiZXmGb88ew46A7Pq1w0JsQWdxktMt0PxhQoIR1vSzlB2/idUrM9SM4s7LPDSH888g==","signatures":[{"sig":"MEYCIQDbxNJEqqBgVudRzejlQxRrbqcPhMtKVJCBSP88lnI8EwIhAJu/2oje+6fPMqr/TBmF0UZYI+FDJ2bHjILH8LkhswQu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1323646},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.7_1787610724073_0.9805454970057659","host":"s3://npm-registry-packages-npm-production"}},"2.47.8":{"name":"agent-sanitizer","version":"2.47.8","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.8","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"acaf088b67cc36f0d28296add9274c00c50ed6df","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.8.tgz","fileCount":95,"integrity":"sha512-OZJdV4CBz5QDh9GgzXpYRi25lYKYht/eOYqhZVmyByEBT0ZBz9PjoVUv8fhvn7B6eE7RrB9o1csbfOOvI6vdzQ==","signatures":[{"sig":"MEUCIQDsRykqHfmrrZkpLavsGm+7zQPYkuvjO2RkwUszgrRNnQIgOdUD9U/0Ng1+pBHsaKWt1ROhV90n6+m1UMMKqOH2ep8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1323916},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.8_1787628121930_0.32960599993429196","host":"s3://npm-registry-packages-npm-production"}},"2.47.9":{"name":"agent-sanitizer","version":"2.47.9","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.9","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"7a8d2905ac0e8d16a6ee00f89611d618622b4fe5","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.9.tgz","fileCount":95,"integrity":"sha512-lwn/iGxk8kqGlY8OM9aJhrUAUvg449XGH3ntjlhXhOyKYXJ/UZrl08W1r7v1tssTn8/zbr7sTjfqu7ZT26oWFQ==","signatures":[{"sig":"MEUCIBO+A9ELW4jIOR7MyOBBWDsXoLkgRNjIcwLhD9s6V7LaAiEA0CDFqicLgvMocspA7/i01iTSkIMZpGVv6l+7vt50/BA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1324779},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.9_1787706382399_0.09021560971249398","host":"s3://npm-registry-packages-npm-production"}},"2.47.10":{"name":"agent-sanitizer","version":"2.47.10","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.10","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"22e22b51187605f97f7c2e419ddca8bc1fde5403","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.10.tgz","fileCount":95,"integrity":"sha512-/RdeWWzpmLi3absGL5hAU2O2TW1CIwziVzcd9jExbkXcltYsQQLIZPy2qYUYx9A04Ke7mFC9TU9anRfU42961Q==","signatures":[{"sig":"MEUCIGCJ7KVh5U3R6YyH8lzpsRl94mP1djzHQVoneseFPrdGAiEArE9pFpRJtgmqoZpHRik4vi7o5TMevUAXtQcbbgffquw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1324780},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","rehype-parse":"9.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.10_1787713595730_0.07534895242827466","host":"s3://npm-registry-packages-npm-production"}},"2.47.11":{"name":"agent-sanitizer","version":"2.47.11","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.11","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4f2a134a31d3fc2f2e08ff67cd662954883459d2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.11.tgz","fileCount":97,"integrity":"sha512-QrfjeAGGWBSRir4sTktglL8BS/Pz0jsaDq4unDZTECW1HIkqcXNrxhJ2DY0NksEp3RA3dagp4qAtX0+lKQGmEQ==","signatures":[{"sig":"MEUCIF9GoEJMlBVrlaKbdsBVI/TKjZWJHmA53E0PQqa6t4s2AiEA2Ju9osu4YBQdRTnfmEyHbJ/vOGz8EBY5DK71cLslAz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1330881},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.11_1787724686440_0.9031524645743143","host":"s3://npm-registry-packages-npm-production"}},"2.47.12":{"name":"agent-sanitizer","version":"2.47.12","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.12","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"bc824cc764e7deec7fa3a24abddf05d674448629","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.12.tgz","fileCount":97,"integrity":"sha512-RTX6TsJthUQ+qWgZA9Do4KvMDnFIs7W6uW9sQ6Pcqc2OQmK6SMBP7gC/M0Xhgg7Jq8jqptMOv1jt+EtgtadPEA==","signatures":[{"sig":"MEUCIEmZVwZqkPJc46aM2tkqVm3aVi/s9yDD+MkZ35RIUM0gAiEAlvhk52ZhphXGOsNE2jhv6kQxjS6XoxSLvjKbCf/puVE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1330881},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.12_1787753958522_0.6662442424307033","host":"s3://npm-registry-packages-npm-production"}},"2.47.13":{"name":"agent-sanitizer","version":"2.47.13","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.13","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"152d4b22606274459aaafd566b948b22948dcdfa","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.13.tgz","fileCount":97,"integrity":"sha512-ID4A/xsPwZ0j5RAg3EPWtf1z4bi+abqvAaV2de1uqkp7MCDS/CPd3zYMAIcFKZORKPykbGficpVmHr4wICAi0g==","signatures":[{"sig":"MEUCIBObqDzJUrVep6lb86WG0+twC4m2nJTVP26LG8/H+8yqAiEAlC9oJXSLwMVg1b1a4wOLDHAObVSoLyuxmfTcE2GVbn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1330482},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.13_1787762787817_0.7044264606539641","host":"s3://npm-registry-packages-npm-production"}},"2.47.14":{"name":"agent-sanitizer","version":"2.47.14","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.14","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1d30c21b8c83b6e7fdfca49346ead4f51d5f30d9","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.14.tgz","fileCount":97,"integrity":"sha512-Ge+lu1YFwFwvn9te4GdgVRT4aW9mko7zPG5dKHID8Kdq0EnVAm5FYyI9G5h59T5p8o/VgGCJ4QVCiml5U+uJXg==","signatures":[{"sig":"MEQCIC2qnuMcjbJHhiaPwOmkBvHsKZJJOrvt5Dj0pX/U7CR9AiBYpFfkWqW5yIxKFVzUfEvuYikbPaKOfFXVW51YJBV7IA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1337781},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.14_1787790657797_0.19331438417720492","host":"s3://npm-registry-packages-npm-production"}},"2.47.15":{"name":"agent-sanitizer","version":"2.47.15","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.47.15","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"2a39166b4cc5da4d72807a391444c8cfd40cd04a","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.47.15.tgz","fileCount":97,"integrity":"sha512-a7zyM9fw4njZ0uKwH0JSS2QCYj13K5cC2ysysNmFZNrUAEivvddvI64Inx58tQwplsQxGi79CURmd/epxp3lnw==","signatures":[{"sig":"MEQCIBktfC/Gfa88ebxkcp/q+KuX6UF+z5LeXoaJEvx93OKWAiAwprhVk88zWG0MkErPEJhBrPvLxCpM3dmWOlc7rHCMlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.47.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1345046},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.47.15_1787794640972_0.050592063525967124","host":"s3://npm-registry-packages-npm-production"}},"2.48.0":{"name":"agent-sanitizer","version":"2.48.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.48.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"e1179afb1080df1e8805da62197c7c65178acea9","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.48.0.tgz","fileCount":97,"integrity":"sha512-W6fEATrWHkmo8uMjEQUbgaSsItlqx5b4iRrCjB4KwUUbF7R5A0sstw1EyaoVcvwaaxs18NBf1UGNHCsj8Xjr2A==","signatures":[{"sig":"MEYCIQDYXgDH7WvTlzAkkAZ+vLyb9ZD73+UgFSNSfeImVBLlkQIhANyUBY5gbadf3K8bNBRO39RdJXg3Nu9vj/FyHjsIAqDh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.48.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1345045},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.48.0_1787866306338_0.5464894771270548","host":"s3://npm-registry-packages-npm-production"}},"2.48.1":{"name":"agent-sanitizer","version":"2.48.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.48.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"da2c225310fc12e455043ecdb0954517c5599f05","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.48.1.tgz","fileCount":97,"integrity":"sha512-O6WSWCsR8oHAFMaEe/COsJtkw1QCbCag6MPp/C1TJRNhm9iGh6ubk2r/vAYIQehpkszx2LITJLYeTzIv+xtiCg==","signatures":[{"sig":"MEUCIQCl0CiNXsK0FqJ+bCRkPrNyL7VQrB8STEyjSdoGIZwSUAIgePmnCZvFZaJnDGAMIT+nmaSxuq7F0xB8OFWQUTHxcig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.48.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1345849},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.48.1_1787904779908_0.7801984033414759","host":"s3://npm-registry-packages-npm-production"}},"2.48.2":{"name":"agent-sanitizer","version":"2.48.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.48.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"044a0267f81bc4b1b441ef4921a95568938b478e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.48.2.tgz","fileCount":97,"integrity":"sha512-RCBGZtECJwgMy4IfU/7KDEhoQEpoygBrBYNZSh2yCZK80HOrDBhX6RapJIOqu618ubDikx3jleh3bWPCFrblLg==","signatures":[{"sig":"MEUCIQCjIclt92W/9wDYZECObi33nDj1FVez8sfmkH7UzPrZDwIgM4jL2NRmaxGCNUu4BU/ZI5ackOvhJHyKDBAnAYfUZrc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.48.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1352026},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.48.2_1787962940739_0.17147671691144728","host":"s3://npm-registry-packages-npm-production"}},"2.48.3":{"name":"agent-sanitizer","version":"2.48.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.48.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"231f4fb2cfd57edf2695d92f76e4f743b84c8f73","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.48.3.tgz","fileCount":97,"integrity":"sha512-vANT54Oa/knwbdn/oELMVxv+sPt4G4LovAEuiITpkUZoN18edIGNC++Jg3sosxokFWjI5Ir0Htzk+bOs2Pz3UQ==","signatures":[{"sig":"MEUCIQCe+NvhA8Cl0GvNB1NjZEm4duFo6SCU2pYQvhygG59TYQIgERox6RqRyLFMO0El3TTa7JyoZw/PAhI1BpJcCnDbs1Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.48.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1352026},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.48.3_1787964274168_0.1367875143598316","host":"s3://npm-registry-packages-npm-production"}},"2.48.4":{"name":"agent-sanitizer","version":"2.48.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.48.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"0139b52ba734f40037bd1b02a412830422560ebf","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.48.4.tgz","fileCount":97,"integrity":"sha512-HxXxUSJHjEGFRmMqUKVw+YLc8QolsfyliUb1n0RatpeRBxfY/Qtt7NxfqioArEHfmuD/gKYT8ocI1zX9dvtFJg==","signatures":[{"sig":"MEQCIBCLxRb+46io9RQk+KPNhgt2fyqr5oW4ccU0cwbT08rEAiAEO0cQlw2V3VGkAWeG4lI79D15SQFNvxHVMc7erc3qHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.48.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1352026},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.48.4_1787964984920_0.728823840318628","host":"s3://npm-registry-packages-npm-production"}},"2.48.5":{"name":"agent-sanitizer","version":"2.48.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.48.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a7909530c5e7e92d1376bf0570998fdee1e0b61f","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.48.5.tgz","fileCount":97,"integrity":"sha512-GzBmesuQyO9PC18ZrAUWKyOovPo1SbS78CDr9syRlmMWFcE+sS/cCcQmKqJML1j+JxVi0zIE7kjEzadHWoQ2Qg==","signatures":[{"sig":"MEUCIQCmaqKvvRAaXIYl2hkfMgnzFV9zq11BXhlUp4WNzaOwXQIgVYHWFcVlfg15BuJElF+WmEFyqSqXEOSpMisoK6yZPuc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.48.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1352026},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.48.5_1787965743350_0.11521556531638089","host":"s3://npm-registry-packages-npm-production"}},"2.48.6":{"name":"agent-sanitizer","version":"2.48.6","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.48.6","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"fe5028c265d4e9be3c7cf1b3289022a58254d4ee","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.48.6.tgz","fileCount":97,"integrity":"sha512-LESjTkV2vi0O+z8FFe+ibGE1P0Qwdk0A7AqiKqb2qo2QI+DoOAHFQgPme6gu9GedmW03JGa3hpLMU8xScm/CDQ==","signatures":[{"sig":"MEQCIBUhaByy6WmBAJ/9q7oYEOnJSVmA83oysmnG+F4bZ/mvAiAgeMS7KzUqnxhd58hINs4HpV1u32DEMX145r6DG2GGGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.48.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1354547},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.48.6_1787966209994_0.9564394481032592","host":"s3://npm-registry-packages-npm-production"}},"2.49.0":{"name":"agent-sanitizer","version":"2.49.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.49.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"77554bfbf880e5295fa52ee0cc7d05f8293b6684","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.49.0.tgz","fileCount":97,"integrity":"sha512-wyt0IALTYa+FJAh5XdK62yiZwXIkRoNY7e0H01lntDOSWND7awtiGkyxrE/4ltkUngquw41ldap+6adaHNI+xQ==","signatures":[{"sig":"MEYCIQCXSa1vryBq8xGfNIaTtsxoWmv4wPDpEw4u5zEoIpTzrwIhAPxfA/AlT47Cl6HZaAi1+qf1KJK5IWY+80+Iwq3E+ScP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.49.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1354547},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.49.0_1788059879497_0.5308609152335373","host":"s3://npm-registry-packages-npm-production"}},"2.49.1":{"name":"agent-sanitizer","version":"2.49.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.49.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"0fbb22d1ab59dc2a0beb5fdffc35a6cdf0be09d3","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.49.1.tgz","fileCount":97,"integrity":"sha512-R2Cb+/wduCRy4cKXV6snzkiIoRQ2bG3luRv6TJg5gfuf3XMVW6PjaEzdJgNZfuVPrM+xRBdnfp1qaNzrjngvVg==","signatures":[{"sig":"MEUCIQDm3D9eawftMPipbRo37ctMGpwvD1B3l3x1bPDVA5BJZgIgEarQXERqymaO0FNYjTqDSfuL6D/CPLPqXvmptSw65B0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.49.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1362655},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.49.1_1788060949333_0.7176032854642826","host":"s3://npm-registry-packages-npm-production"}},"2.49.2":{"name":"agent-sanitizer","version":"2.49.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.49.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4d190c84ed9c6ad5d6f86788d4003cc52ca4f94e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.49.2.tgz","fileCount":97,"integrity":"sha512-9+SPbX46yumX9OM6LWaAPu+r/ouVFB9Chv+aVbZtrH5J1Qj6FUOPp78+LdZqepaDPqw2nTPP8Mv0Ngq6TejQZw==","signatures":[{"sig":"MEUCIQCOTLQS+COxWW6Pqu6Fe4nXyMRRhZr7pkH/hiFoGjUWxgIgMwdJOqAKqUTua9QlC8lUFUFWHYAilVr9tIVCXPKM7Ns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.49.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1362655},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.49.2_1788069984829_0.9032093851848602","host":"s3://npm-registry-packages-npm-production"}},"2.50.0":{"name":"agent-sanitizer","version":"2.50.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.50.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"83cc44ec1e2ea1365ff75943b73e34745449f7f1","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.50.0.tgz","fileCount":97,"integrity":"sha512-ZWhOw/ayoNDAFICar7GYG2EWeUEz3O46xTZ7m8CTdF+hAoXZ4FIJAWDNoUXfYLLA+tTAcMhqV+iwyKxU78z/Ag==","signatures":[{"sig":"MEYCIQCRyDbgKDfFd8iMvH1WXtdxZqMhCsmqRGOKl/RQ7R0jWAIhAOIhIydwlxYIB9ln7ziLbv+OzSXuBi8bw7D6+g9w3owH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.50.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1362655},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.50.0_1788200011865_0.41056540785733264","host":"s3://npm-registry-packages-npm-production"}},"2.51.0":{"name":"agent-sanitizer","version":"2.51.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.51.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1592436d813184bf2460221ced8fa0c2c5ad3501","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.51.0.tgz","fileCount":97,"integrity":"sha512-Djr++HaB4acwtgIMS4sdvW2aeqqwh/40RD39t6meE/gNEww7VFSU8pxhQxJ/KSVRvWTsg+C42XeHrs/MxRKKiQ==","signatures":[{"sig":"MEQCIFOCrcW/RNS+YJ8kONyWJOlSdGlS6nxhoTDFXt5qjscsAiAJlB96VZblpd9+38WDzwm7fyC3bmUH/m5cB/GfAY87sw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.51.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1375426},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.51.0_1788202838937_0.33811201400764745","host":"s3://npm-registry-packages-npm-production"}},"2.52.0":{"name":"agent-sanitizer","version":"2.52.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.52.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"4d4978bc53fa1a4668b02fad1b74e8510c1aa706","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.52.0.tgz","fileCount":97,"integrity":"sha512-YYhgi1wWxgtkv624/tVERn0R+EEQ4xxZlEXTZCVXCB4P/hA4Nf0xF6blKpsZHw0EzD6fVcajIZ1dHgxlif/5Jw==","signatures":[{"sig":"MEYCIQD4PfcJq3kAMe4ne2Q+rRnL0CJYIbgA3cKpJq8gaUr1wwIhAKUF23PyEKdbcgPhl+iS3efRSdPGxd/eQzU+5kcapFmp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.52.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1378395},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.52.0_1788237483536_0.980497197595805","host":"s3://npm-registry-packages-npm-production"}},"2.53.0":{"name":"agent-sanitizer","version":"2.53.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.53.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"7d8d1560f57e68dabc8f9d471e122f7f1c30975f","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.53.0.tgz","fileCount":97,"integrity":"sha512-dvhS1NyFTP/65dVV6rCY681W9i2NZ0Foj4ZTSMQYuv/4MqLDuc0rQceD4G14vpXpKWy9/hnbtv1HrO9Pkkf+Mg==","signatures":[{"sig":"MEQCIB9CgXoNuUAE+ZtKvLP7SNbeRG9cWk6dfCXuP+YaWuVHAiBzEtCcoSbB+UApv1HKJK9+U3CZptWlO7TpEv6fgyTIpw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.53.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1382478},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-gfm":"4.0.1","remark-parse":"11.0.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.53.0_1788247383792_0.2543272171946318","host":"s3://npm-registry-packages-npm-production"}},"2.54.0":{"name":"agent-sanitizer","version":"2.54.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.54.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"78d2cc6a3dcc7a50038382078cece8cc48799be0","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.54.0.tgz","fileCount":102,"integrity":"sha512-mPwcf1BMk6VaqyqYvjzIZHH0NyOZndEahTKz3LfcutCT+yeGzPaUwko6OfeQHT6EbTGByEcI/wPmkqbPDEcL1Q==","signatures":[{"sig":"MEUCIQDs/xIxchoBbh+tlBHrjyiuZG+9zLe2RWfQRMe1H+d+hwIgc2MJYpCLXOC3RrbAOhZhqdCStsJ5oT7xOHuScKjrsUc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.54.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1410788},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.54.0_1788283466709_0.16094379834436223","host":"s3://npm-registry-packages-npm-production"}},"2.54.1":{"name":"agent-sanitizer","version":"2.54.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.54.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"c66d8b912885c0b79883f4f44c649b680ae79e25","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.54.1.tgz","fileCount":102,"integrity":"sha512-3VEVjdzUNpA11Uo0JHItyM/BV47f2LvaiKveWZ9gQMVMibVqDoUvGCar0wePDjjuLLth5i9VS2h2pcuFdM14BQ==","signatures":[{"sig":"MEUCIQDvo6Zh7H7eHXCw60zZB1i3QZ2S68N6ZYK+c9yKO5k8ewIgB7LEbDwiVPBYYhLTdkVopXgotiTcwIOegqzOMRmtj/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.54.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1410788},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.54.1_1788297030053_0.9530839366049408","host":"s3://npm-registry-packages-npm-production"}},"2.54.2":{"name":"agent-sanitizer","version":"2.54.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.54.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"567de083388b37af08e1f91b51671cedf0367f75","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.54.2.tgz","fileCount":102,"integrity":"sha512-W6EVBsk2cak7kvFZOocnQTs7X3R2IfctX176HSELvwp7Djg0JDa2LkYDgy/XFchuGfhYVupKsv5DcsgX0O281w==","signatures":[{"sig":"MEUCIBZ4KwsSEfDgbNW6fOlQn/vvVwXMb4DpUA9/eYgYD0pgAiEA/Joc7q280OCmwzvePVrbZiFZohAqisNih7TyI7CnKjE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.54.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1410383},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.54.2_1788385449752_0.9477397085682544","host":"s3://npm-registry-packages-npm-production"}},"2.55.0":{"name":"agent-sanitizer","version":"2.55.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.55.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"2e1c61b6795e3a69a4dcdb16d4767ce0088a713e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.55.0.tgz","fileCount":102,"integrity":"sha512-/dBMsLjFgrd0Sa8VFu8M/kUQkeYVtR12kvIExgpt+N2z2U4iikk4wkq8k7uvXpklGgg6p2CILM0IAusskSDI3w==","signatures":[{"sig":"MEUCIQDZlW3G/X5vORsd3eHSRkiiZFByN6GUQVd0yaKxWgjF6QIgRgTfNX44P/hxt9D8fSZYY7EQ7k2KcvYiRqfjnuY0VMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.55.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1427152},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.55.0_1788390986673_0.0508365081538269","host":"s3://npm-registry-packages-npm-production"}},"2.56.0":{"name":"agent-sanitizer","version":"2.56.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.56.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"47e183d8ccdd70dd2447eed8ae9073db998ab158","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.56.0.tgz","fileCount":102,"integrity":"sha512-P3rPRRu/uziIi46LRe+xatJMhzv9F7a6G6gcay0W9kggEKofxVr6xcpcrSPo/aFysnvnWKOaoxXOj/rEfnesfA==","signatures":[{"sig":"MEYCIQDKhSnJ2xcRskNYMwRlevAfIQVN9DUs63z7E3jf0+6VhwIhAKpsyjo5cvCXkr0NV/FTmoM6yh8J2yQGLbV/okJhKdLX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.56.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1429246},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.56.0_1788391995517_0.260349558917891","host":"s3://npm-registry-packages-npm-production"}},"2.56.1":{"name":"agent-sanitizer","version":"2.56.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.56.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"7db07c379ce526d3ac268e9daa7b6073a8075be5","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.56.1.tgz","fileCount":102,"integrity":"sha512-DSHxJZLdma9+9sJxTfRmZS4Ka+GMLoyOl9f+ZfYT9NooqIYoxFY8fbJEe4h4I2innbWC6rxAERm5H2f9J4edgw==","signatures":[{"sig":"MEYCIQCik9LBbMNHlyT+H3XKR7RyS/bcU7MsorSvnGKEDyQYsAIhAPLiTghbRQCSfFMqlF+3xTRgZWD+92Q2QxicXIP9MkJE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.56.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1429246},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.56.1_1788393088588_0.7065165650321006","host":"s3://npm-registry-packages-npm-production"}},"2.57.0":{"name":"agent-sanitizer","version":"2.57.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.57.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"0e7db325ca5485f612ff73880de5298dcc34943e","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.57.0.tgz","fileCount":102,"integrity":"sha512-qZDo/ra1MKX6l4RdIZmLZf9/oHc7gLFG2r4duzmURcFNeBFFv/kqUlIeIcd+67QxIFqLRxjSKGPhJjE8ICDabA==","signatures":[{"sig":"MEUCIQC4S87jd5GjtGR+6+4aU8ZGx8uT6LnXEbfrEgB5zpHFjQIgBr2MaJF9fY2qaYulRBt+M/PICcAN6nQqLQLZtvHnOGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.57.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1430523},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.19.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.57.0_1788435433307_0.6513642636285883","host":"s3://npm-registry-packages-npm-production"}},"2.57.1":{"name":"agent-sanitizer","version":"2.57.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.57.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"a1f2aadce356a0304495e3993c0bb79906c5907d","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.57.1.tgz","fileCount":102,"integrity":"sha512-SEXeWcjTJmHGs2KAMw3OxAWMauVDJpWwd2ZZIwK8+/NhXaaZhqE9y8A4qFyGb+8YvV6Xn9Hv9zcgWjXVMvwU1Q==","signatures":[{"sig":"MEUCIH5uVt3Xq3Jz5IUrMPVmrvGVi7w4wtcGGZu3dTam3ctqAiEAuqgi97BYktyv9j8KpALx75awpHOKqV5APdrY4Y7Rz+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.57.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1433810},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.57.1_1788567752117_0.14337269529592978","host":"s3://npm-registry-packages-npm-production"}},"2.57.2":{"name":"agent-sanitizer","version":"2.57.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.57.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"324dc4e6b1543ecb9456387084ac2bba5ae2986d","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.57.2.tgz","fileCount":102,"integrity":"sha512-Gf0FQXZop202FCMU7b6nK3I4aLb3QppTvdaguH+hZ4rYOQNT329ou1zG3OWGArDxowdk/2efLMU1zPWY4wXeFQ==","signatures":[{"sig":"MEQCIFnlmpQmYq3/3HOQQUo99Ex8fKXmzMLHtd/XbsTn18VdAiBkQVzI3XXV8Q8c01DxppROqHf2AoeBciUnov8ari4gmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.57.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1437907},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.57.2_1788568282155_0.9363746487011009","host":"s3://npm-registry-packages-npm-production"}},"2.57.3":{"name":"agent-sanitizer","version":"2.57.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.57.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"bd757682e7c9cfd851f3ee5f71e42411ee1a6502","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.57.3.tgz","fileCount":102,"integrity":"sha512-Cx4wLvQ5CT7fmk0T65Hjt+pvtcQMRqO5y1Zowgeo6l12EKveP4wqfxrBTRnDGVStVCfKRhWFGQuRlgFcDHDu5A==","signatures":[{"sig":"MEUCIQCtU4A5s4E1gnsU4PeS/X6e9hVW+/E723IGL7pAFBBrSQIgbmIk718f1VHr/P4gC6XVsn91xZJ5rUFz0N/+xalaxvo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.57.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1442172},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.57.3_1788572194242_0.2567617143033951","host":"s3://npm-registry-packages-npm-production"}},"2.57.4":{"name":"agent-sanitizer","version":"2.57.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.57.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"1e15931d6990e6b14b0c0a9cacc0e31dbd0b2bd2","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.57.4.tgz","fileCount":102,"integrity":"sha512-nASEO51IBN40LFRFFB3/btlHBbVegwzvmS25x3vsUZL4lmEuokY5/e1yFPthjXxBaB46ITb8/3MVWCTZrMY2wQ==","signatures":[{"sig":"MEUCIQDRvCWUd7mYOolOdcxQReRkI/K+QyikIId2vHb4VaPgHQIgN+VkoQQuXVgM2It8EMrUVxUsypCsavPZGPbhetRXJo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.57.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1442738},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.57.4_1788581806132_0.5528967572587262","host":"s3://npm-registry-packages-npm-production"}},"2.57.5":{"name":"agent-sanitizer","version":"2.57.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.57.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"e09f6a0004d1d1334ec039cdd8dc29c6b270e6f0","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.57.5.tgz","fileCount":102,"integrity":"sha512-SnpA6avr3/Ginbd8Ad8QaAUw0P1iQCbzuqKx0OVoTI+nBHhRCDd37nqb/rqooZUhAJE2dFjE00Iqwjs2k92hjQ==","signatures":[{"sig":"MEUCIBV9dRxriXjJvJ71Aecky+LMcUhBHhrGXOqpPuw+KmrRAiEA/tdIePS/AEkMqGrxjyhZvKSJs8HzFISh9EO4dPDPRDk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.57.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1442738},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.57.5_1788807818747_0.74491443897943","host":"s3://npm-registry-packages-npm-production"}},"2.58.0":{"name":"agent-sanitizer","version":"2.58.0","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.58.0","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"ab0b8a7db03414c31bc24f31251acb58a4d50a40","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.58.0.tgz","fileCount":111,"integrity":"sha512-sTeKi5+rbAIni5MUVBGhysP+xys47sG8ZbvsAtH7MXPobBzfcnSvnVixdBxaJPKdj86p2ZuNr5EiaYut9Etllw==","signatures":[{"sig":"MEUCIEmS0Pg1tE/It32ayGGDfZUzStpzTM67KRVoykIrkYuGAiEA6jFOLL0cex7s5H7HR8Z/XwRwnnTw56twetcW0ixdrhE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIApqnpKyZ+PYXk4QkrhpDhRu8g5o3vXbsu9gJdigkRaJAiBb1oqbRS0cYlRClGJYUbmZZzo3h9qnSqG3Tb7Vxu82gQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.58.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1496235},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.58.0_1789404411023_0.353792110125527","host":"s3://npm-registry-packages-npm-production"}},"2.58.1":{"name":"agent-sanitizer","version":"2.58.1","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.58.1","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"47217b863940f56512af0ba9fdf78b3e6cef182d","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.58.1.tgz","fileCount":111,"integrity":"sha512-8koEX/Ie5EY9j3Z/P23qu5JwQJtAKQ77pFJjJ+LS5/suXemLJ4EIE6kk0KE6rySch12ldzfSyyPjsckBfOveCQ==","signatures":[{"sig":"MEUCIQDouGCQcKGm7CkthHVZyV9wS37C9CgHTIQ9rbE3Q3UBrwIgEyHk16xn1ihz4Y9HfutFYI9OwfiYdunynGA2ru8tTvE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDnjRvt3H8K8PzEZ+e5+U9KXyGh2xI3Bi65YF/ivQmW1gIhANIfTH94jfQ9MdSHp76IRCqXFyjkzqh6e6wUAlNvPbtX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.58.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1496235},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.58.1_1789484448547_0.8156963112882154","host":"s3://npm-registry-packages-npm-production"}},"2.58.2":{"name":"agent-sanitizer","version":"2.58.2","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.58.2","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"d5e099994da5c82a7b4c98643aabdca942ce66ff","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.58.2.tgz","fileCount":111,"integrity":"sha512-xrswWuyjSXSM25FNlg9LzNGnQW49ymvqX6X7oFe2iluPcsWAJKgLtVWEIQkikWtfnyTVgoIZiDxjIxdN3NUymA==","signatures":[{"sig":"MEUCIQCjwQ+9jNchIN2lVFObNC+Pazfzfh/r+94JyvYaTzdW4QIgPUkby5fLEBxRTypI6bTuwwydsGesXEBOoa1C8BJ7QuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDrbbNspk+/Fm7HCi4axV3Hh8o6iWAV4R8JCiw8TUsxrgIhAMfU1GXGiqlBxISdBvcg2eFvjMkJyqCr6H9UBcomLRZt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.58.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1496235},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.58.2_1789507233370_0.5009891486192144","host":"s3://npm-registry-packages-npm-production"}},"2.58.3":{"name":"agent-sanitizer","version":"2.58.3","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.58.3","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"3e0e1e70fd59970a111c134de0c85ec46d80f04c","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.58.3.tgz","fileCount":111,"integrity":"sha512-6G4+evhAqZ49bM6OnNhFsegwMpAQ5TALX4/Z7h6pBnyf23TVNUOcHksDGcPnUjww6hf+wF8M76pJghbSvZZCkA==","signatures":[{"sig":"MEYCIQDNhbVIQh3DfqFvlPkNUaSzEWDmeCZ+FTjh0SeJlQOwzQIhAIyj7BNCpL3lud7kHgHf8Ght6TUJnbKUHOg7wsHEeCK5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEfA2NRTNbGpiOZMSEUgTy/mrMDbL0cT650N5KP1NF7uAiEAhEWY4PDhYt1vLJ0SrNpoh4R031weaH2ZjvRmJh+4Mw4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.58.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1505973},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.58.3_1789531552853_0.4784563298995006","host":"s3://npm-registry-packages-npm-production"}},"2.58.4":{"name":"agent-sanitizer","version":"2.58.4","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.58.4","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"558928d119d0eb6238deadb636e1d9dfcfbe8ec9","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.58.4.tgz","fileCount":111,"integrity":"sha512-ojvU+0/bbZyCOmo1y/IpLhnMG3NS6Rlv7XBB1Tra7h4o9SinzRYO4ts6+lk0au9cEZACK7UBdOPWZXdgwLZE/A==","signatures":[{"sig":"MEUCIEHFy0o32qKpkBPDntlNCXrrlKkPYo9kVXCy9vKV7kTKAiEAm+8bybf+wMGSNHgF09T+Y+GPtUbZimrlzKoPHhwORf4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDbTP/asuNsnMMTkIat/ZVxQaiilvNo5Jz3LUaWv7zXPQIgPrRsh9avjCDX5RoPKWdwqlc+i0MSOpbUH5WqGEv8UYA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.58.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1505973},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.58.4_1789535515758_0.5102019470057071","host":"s3://npm-registry-packages-npm-production"}},"2.58.5":{"name":"agent-sanitizer","version":"2.58.5","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"author":"Alexander Turner","license":"Apache-2.0","_id":"agent-sanitizer@2.58.5","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"dist":{"shasum":"94a35a99641ca805ad31d77d3ed0a1bbec2ed958","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.58.5.tgz","fileCount":111,"integrity":"sha512-LP5N3Vrka2mPePbgMe0/45AMV5ryG371IRBFgKbJhOg6lM/yP0qRCor3l/uKqPudU6FSxSauMaTFWAjVMg5R/Q==","signatures":[{"sig":"MEUCIEGH24A6eIt1PTrXZCDeVsNIOKnatvRbeCHvmz+GBlQcAiEA7w8XbRXwVKpkzlxXpZJyKG59H+Z2r/QKVdy9MWAQBmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDCxe61Azkt5ebFh44pjAnu5BV2Cct24bs260kXeCyIbQIgKCc/MVD2+HLRQlp6fUk7Zx1wp/fR8xDmJ6eYmbgVLyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.58.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1505973},"type":"module","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.3.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-sanitizer_2.58.5_1789575651765_0.5110811116654235","host":"s3://npm-registry-packages-npm-production"}},"2.58.6":{"_id":"agent-sanitizer@2.58.6","bin":{"sanitize-cli":"bin/sanitize-cli.mjs"},"bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"dist":{"shasum":"3e1d8b746b31a3c48d61170a6566db6511933f77","tarball":"https://registry.npmjs.org/agent-sanitizer/-/agent-sanitizer-2.58.6.tgz","fileCount":111,"integrity":"sha512-/OV/uDvd6iEhLfxfkMo8gPpmIcsm7XfRP/2QYn1zCBkncHBCwbOGpxRxw1KECw6iTjE81zvool44mcLo5UFehQ==","signatures":[{"sig":"MEYCIQCgN488cG8/N9y/tT/axw7Vp94MAd/lP1Cd4sAP6tRE5wIhAPXtO4GgPHOhj46JBFXc/1S8nQPDNqlCs1cj/mD7KxvJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFl2SDcCQsaZBiib1WeYcDRobtw2MGLU05EKzB7YtzGeAiA3+M1djvcLPaGJn3MCPFYoll1AhtVTHmSEEgu7f+eIYQ=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/agent-sanitizer@2.58.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1505973},"name":"agent-sanitizer","type":"module","author":"Alexander Turner","engines":{"node":">=22"},"exports":{".":{"types":"./types/index.d.mts","default":"./src/index.mjs"},"./html":{"types":"./types/html.d.mts","default":"./src/html.mjs"},"./layer1":{"types":"./types/layer1.d.mts","default":"./src/layer1.mjs"},"./output":{"types":"./types/output.d.mts","default":"./src/output.mjs"},"./prompt":{"types":"./types/prompt.d.mts","default":"./src/prompt.mjs"},"./view-map":{"types":"./types/view-map.d.mts","default":"./src/view-map.mjs"},"./invisible":{"types":"./types/invisible.d.mts","default":"./src/invisible.mjs"},"./rehydrate":{"types":"./types/rehydrate.d.mts","default":"./src/rehydrate.mjs"},"./confusables":{"types":"./types/confusables.d.mts","default":"./src/confusables.mjs"},"./claude-hooks":{"types":"./types/claude-hooks/plugin-hooks.d.mts","default":"./claude-hooks/plugin-hooks.mjs"},"./instructions":{"types":"./types/instructions.d.mts","default":"./src/instructions.mjs"},"./credential-names":"./python/agent_sanitizer/secrets/data/credential-names.json","./claude-hooks/lib/trace":{"types":"./types/claude-hooks/lib/trace.d.mts","default":"./claude-hooks/lib/trace.mjs"},"./claude-hooks/lib/reveal":{"types":"./types/claude-hooks/lib/reveal.d.mts","default":"./claude-hooks/lib/reveal.mjs"},"./claude-hooks/lib/hook-io":{"types":"./types/claude-hooks/lib/hook-io.d.mts","default":"./claude-hooks/lib/hook-io.mjs"},"./credential-names-matcher":{"types":"./types/credential-names.d.mts","default":"./src/credential-names.mjs"},"./claude-hooks/lib/env-config":{"types":"./types/claude-hooks/lib/env-config.d.mts","default":"./claude-hooks/lib/env-config.mjs"},"./claude-hooks/lib/hook-timing":{"types":"./types/claude-hooks/lib/hook-timing.d.mts","default":"./claude-hooks/lib/hook-timing.mjs"},"./claude-hooks/sanitize-output":{"types":"./types/claude-hooks/sanitize-output.d.mts","default":"./claude-hooks/sanitize-output.mjs"},"./claude-hooks/lib/control-plane":{"types":"./types/claude-hooks/lib/control-plane.d.mts","default":"./claude-hooks/lib/control-plane.mjs"},"./claude-hooks/lib/invisible-alert":{"types":"./types/claude-hooks/lib/invisible-alert.d.mts","default":"./claude-hooks/lib/invisible-alert.mjs"},"./claude-hooks/lib/redactor-client":{"types":"./types/claude-hooks/lib/redactor-client.d.mts","default":"./claude-hooks/lib/redactor-client.mjs"},"./claude-hooks/lib/secret-annotate":{"types":"./types/claude-hooks/lib/secret-annotate.d.mts","default":"./claude-hooks/lib/secret-annotate.mjs"},"./claude-hooks/pretooluse-sanitize":{"types":"./types/claude-hooks/pretooluse-sanitize.d.mts","default":"./claude-hooks/pretooluse-sanitize.mjs"},"./claude-hooks/lib/authored-content":{"types":"./types/claude-hooks/lib/authored-content.d.mts","default":"./claude-hooks/lib/authored-content.mjs"},"./claude-hooks/sanitize-user-prompt":{"types":"./types/claude-hooks/sanitize-user-prompt.d.mts","default":"./claude-hooks/sanitize-user-prompt.mjs"},"./claude-hooks/scan-invisible-chars":{"types":"./types/claude-hooks/scan-invisible-chars.d.mts","default":"./claude-hooks/scan-invisible-chars.mjs"},"./claude-hooks/scan-loaded-instructions":{"types":"./types/claude-hooks/scan-loaded-instructions.d.mts","default":"./claude-hooks/scan-loaded-instructions.mjs"}},"license":"Apache-2.0","scripts":{"lint":"eslint .","test":"node scripts/coverage.mjs","check":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","format":"prettier --write .","coverage":"node scripts/coverage.mjs","typecheck":"tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit","build:types":"tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json","format:check":"prettier --check .","test:mutation":"node scripts/mutate.mjs","gen:joining-type":"node scripts/gen-joining-type.mjs","gen:fail-open-lib":"node scripts/gen-fail-open-lib.mjs","gen:hook-binaries":"node plugin/scripts/build-hook-binaries.mjs","gen:node-floor-lib":"node scripts/gen-node-floor-lib.mjs"},"version":"2.58.6","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7346785e-de5e-46c7-988f-d648f534c922"}},"homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","directories":{},"lint-staged":{"*.md":["prettier --write"],"*.py":["ruff check --fix","ruff format"],"*.json":["prettier --write"],"*.{css,scss}":["prettier --write"],"*.{yaml,yml}":["prettier --write"],"*.json.example":["prettier --write --parser json"],"{*.sh,.hooks/!(*.*)}":["shfmt -i 2 -w"],"*.{js,jsx,mjs,cjs,ts,tsx}":["prettier --write"],".claude/skills/*/SKILL.md":[".hooks/lint-skills.sh"]},"maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"_nodeVersion":"24.20.0","dependencies":{"vfile":"6.0.3","parse5":"7.3.0","unified":"11.0.5","css-tree":"^3.2.1","remark-parse":"11.0.0","mdast-util-gfm":"3.1.0","namespace-guard":"0.20.0","unist-util-visit":"5.1.0","micromark-util-types":"2.0.2","hast-util-from-parse5":"8.0.3","agent-control-plane-core":"0.7.0","micromark-util-character":"2.1.1","micromark-extension-gfm-table":"2.1.1","micromark-extension-gfm-footnote":"2.1.0","micromark-util-combine-extensions":"2.0.1","micromark-extension-gfm-strikethrough":"2.1.0","micromark-extension-gfm-task-list-item":"2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","bun":"1.3.11","yaml":"^2.9.0","acorn":"^8.18.0","eslint":"10.4.0","esbuild":"0.28.1","globals":"17.6.0","prettier":"^3.0.0","smol-toml":"^1.7.1","@eslint/js":"10.0.1","acorn-walk":"^8.3.5","fast-check":"4.8.0","remark-gfm":"4.0.1","typescript":"6.0.3","@types/node":"25.9.1","lint-staged":"^17.0.5","rehype-parse":"9.0.1","@commitlint/cli":"^21.0.1","agent-sanitizer":"link:.","typescript-eslint":"8.61.0","eslint-plugin-redos":"4.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/tap-runner":"^9.6.1","@commitlint/config-conventional":"^21.0.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-sanitizer_2.58.6_1790015006347_0.6664112856324365"}}},"time":{"created":"2026-07-28T00:49:03.964Z","modified":"2026-09-21T18:23:26.818Z","2.0.0":"2026-07-28T00:49:04.202Z","2.0.1":"2026-07-28T21:11:53.103Z","2.0.2":"2026-07-28T21:25:06.080Z","2.0.3":"2026-07-28T22:30:15.418Z","2.1.0":"2026-07-29T18:27:35.620Z","2.2.0":"2026-07-30T01:05:21.580Z","2.2.1":"2026-07-30T01:53:25.752Z","2.2.2":"2026-07-30T03:47:25.314Z","2.3.0":"2026-07-30T04:45:38.045Z","2.4.0":"2026-07-30T05:24:49.465Z","2.4.1":"2026-07-30T05:33:53.854Z","2.5.0":"2026-07-30T06:08:31.970Z","2.6.0":"2026-07-30T06:42:14.443Z","2.7.0":"2026-07-30T16:09:55.968Z","2.7.1":"2026-07-30T16:11:03.354Z","2.7.2":"2026-07-30T16:33:10.048Z","2.8.0":"2026-07-30T16:49:11.608Z","2.9.0":"2026-07-31T00:50:20.626Z","2.9.1":"2026-07-31T01:30:01.517Z","2.10.0":"2026-07-31T15:39:11.910Z","2.10.1":"2026-07-31T16:15:20.620Z","2.11.0":"2026-08-01T06:48:47.727Z","2.12.0":"2026-08-01T07:50:10.461Z","2.13.0":"2026-08-01T11:56:30.108Z","2.14.0":"2026-08-01T17:55:49.397Z","2.14.1":"2026-08-01T18:31:31.214Z","2.14.2":"2026-08-03T17:29:18.587Z","2.14.3":"2026-08-03T17:54:39.445Z","2.14.4":"2026-08-03T17:58:21.914Z","2.14.5":"2026-08-05T06:27:46.989Z","2.14.6":"2026-08-05T07:27:53.987Z","2.14.7":"2026-08-05T07:29:15.974Z","2.14.8":"2026-08-05T07:30:08.415Z","2.14.9":"2026-08-05T07:35:53.367Z","2.14.10":"2026-08-05T16:26:26.863Z","2.14.11":"2026-08-05T17:42:42.820Z","2.14.12":"2026-08-05T17:44:23.109Z","2.14.13":"2026-08-05T18:57:13.072Z","2.14.14":"2026-08-05T22:48:04.926Z","2.15.0":"2026-08-07T17:09:52.386Z","2.16.0":"2026-08-07T18:55:45.341Z","2.17.0":"2026-08-07T21:05:39.994Z","2.17.1":"2026-08-07T21:20:56.605Z","2.18.0":"2026-08-07T23:48:59.836Z","2.18.1":"2026-08-08T00:37:02.519Z","2.19.0":"2026-08-08T00:41:30.531Z","2.19.1":"2026-08-08T15:57:08.619Z","2.19.2":"2026-08-08T16:03:16.974Z","2.19.3":"2026-08-08T16:10:04.449Z","2.19.4":"2026-08-08T16:14:21.554Z","2.19.5":"2026-08-08T16:18:14.135Z","2.19.6":"2026-08-08T16:33:00.069Z","2.19.7":"2026-08-08T16:38:39.237Z","2.19.8":"2026-08-08T17:55:41.423Z","2.20.0":"2026-08-08T18:06:04.934Z","2.20.1":"2026-08-08T18:36:57.176Z","2.20.2":"2026-08-08T18:42:13.256Z","2.21.0":"2026-08-08T19:16:31.835Z","2.21.1":"2026-08-08T19:18:29.963Z","2.22.0":"2026-08-08T19:20:27.288Z","2.23.0":"2026-08-08T19:24:50.843Z","2.23.1":"2026-08-08T19:28:12.526Z","2.23.2":"2026-08-08T19:38:02.150Z","2.24.0":"2026-08-08T19:43:17.859Z","2.24.1":"2026-08-08T19:49:53.203Z","2.24.2":"2026-08-08T20:11:55.784Z","2.25.0":"2026-08-08T20:19:34.411Z","2.26.0":"2026-08-08T22:45:14.272Z","2.26.1":"2026-08-08T22:51:43.928Z","2.26.2":"2026-08-08T23:20:11.668Z","2.26.3":"2026-08-08T23:50:48.295Z","2.27.0":"2026-08-08T23:53:58.795Z","2.28.0":"2026-08-09T00:46:29.728Z","2.28.1":"2026-08-09T00:49:42.085Z","2.28.2":"2026-08-09T01:13:51.674Z","2.28.3":"2026-08-09T01:36:48.826Z","2.29.0":"2026-08-09T01:58:55.031Z","2.29.1":"2026-08-09T02:31:18.681Z","2.30.0":"2026-08-09T03:01:45.751Z","2.31.0":"2026-08-09T07:39:53.854Z","2.31.1":"2026-08-09T17:04:16.358Z","2.31.2":"2026-08-09T17:24:00.660Z","2.31.3":"2026-08-09T18:01:11.375Z","2.31.4":"2026-08-09T18:10:47.168Z","2.31.5":"2026-08-09T18:43:55.878Z","2.31.6":"2026-08-09T19:44:25.883Z","2.32.0":"2026-08-09T20:30:43.446Z","2.32.1":"2026-08-09T21:15:57.289Z","2.32.2":"2026-08-09T21:38:40.868Z","2.32.3":"2026-08-09T22:14:27.315Z","2.33.0":"2026-08-09T22:44:05.017Z","2.33.1":"2026-08-10T00:04:05.407Z","2.34.0":"2026-08-10T00:50:03.655Z","2.34.1":"2026-08-10T01:58:17.940Z","2.34.2":"2026-08-10T02:03:11.168Z","2.34.3":"2026-08-10T02:27:36.010Z","2.34.4":"2026-08-10T02:58:03.213Z","2.34.5":"2026-08-10T03:40:29.537Z","2.34.6":"2026-08-10T08:10:50.873Z","2.34.7":"2026-08-10T17:42:12.805Z","2.34.8":"2026-08-10T18:27:22.629Z","2.34.9":"2026-08-10T20:09:52.580Z","2.34.10":"2026-08-10T21:21:57.038Z","2.34.11":"2026-08-10T22:02:18.793Z","2.34.12":"2026-08-10T23:01:32.478Z","2.34.13":"2026-08-11T05:32:40.934Z","2.34.14":"2026-08-11T06:21:37.630Z","2.34.15":"2026-08-11T06:46:58.587Z","2.35.0":"2026-08-11T07:17:57.099Z","2.35.1":"2026-08-11T16:07:47.927Z","2.36.0":"2026-08-12T16:05:05.002Z","2.37.0":"2026-08-12T17:10:38.493Z","2.37.1":"2026-08-12T20:17:27.652Z","2.37.2":"2026-08-12T22:09:05.273Z","2.37.3":"2026-08-14T17:11:55.344Z","2.37.4":"2026-08-14T23:38:22.633Z","2.38.0":"2026-08-14T23:40:17.144Z","2.39.0":"2026-08-15T04:30:27.559Z","2.40.0":"2026-08-15T04:41:42.435Z","2.40.1":"2026-08-15T06:27:32.528Z","2.40.2":"2026-08-15T19:30:11.896Z","2.40.3":"2026-08-15T20:54:25.348Z","2.40.4":"2026-08-15T21:58:18.606Z","2.40.5":"2026-08-15T22:34:50.931Z","2.41.0":"2026-08-16T07:48:07.894Z","2.41.1":"2026-08-16T16:20:41.010Z","2.41.2":"2026-08-16T17:37:58.296Z","2.41.3":"2026-08-16T18:22:52.263Z","2.41.4":"2026-08-16T18:50:57.068Z","2.42.0":"2026-08-16T18:53:08.219Z","2.43.0":"2026-08-16T19:01:59.218Z","2.43.1":"2026-08-16T19:51:26.356Z","2.43.2":"2026-08-16T20:26:14.310Z","2.43.3":"2026-08-16T21:10:31.222Z","2.43.4":"2026-08-16T21:12:29.439Z","2.43.5":"2026-08-16T21:13:44.297Z","2.43.6":"2026-08-16T21:44:26.523Z","2.43.7":"2026-08-16T23:41:18.656Z","2.43.8":"2026-08-17T22:30:07.851Z","2.43.9":"2026-08-17T22:57:57.494Z","2.43.10":"2026-08-17T23:44:48.144Z","2.43.11":"2026-08-18T00:37:32.685Z","2.43.12":"2026-08-18T04:24:58.775Z","2.44.0":"2026-08-18T05:15:47.076Z","2.44.1":"2026-08-18T06:47:50.607Z","2.45.0":"2026-08-18T15:47:51.512Z","2.45.1":"2026-08-18T17:41:01.629Z","2.45.2":"2026-08-18T17:59:38.499Z","2.45.3":"2026-08-18T19:18:10.972Z","2.45.4":"2026-08-18T21:21:35.734Z","2.45.5":"2026-08-18T21:23:24.886Z","2.45.6":"2026-08-19T01:09:02.081Z","2.45.7":"2026-08-19T02:15:59.048Z","2.45.8":"2026-08-19T02:28:56.657Z","2.45.9":"2026-08-19T03:18:05.599Z","2.46.0":"2026-08-19T04:32:42.652Z","2.47.0":"2026-08-19T05:43:18.182Z","2.47.1":"2026-08-20T16:11:05.983Z","2.47.2":"2026-08-21T21:01:53.890Z","2.47.3":"2026-08-23T17:19:09.911Z","2.47.4":"2026-08-23T22:14:03.290Z","2.47.5":"2026-08-24T02:48:00.920Z","2.47.6":"2026-08-24T21:36:48.820Z","2.47.7":"2026-08-24T22:32:04.245Z","2.47.8":"2026-08-25T03:22:02.152Z","2.47.9":"2026-08-26T01:06:22.796Z","2.47.10":"2026-08-26T03:06:35.880Z","2.47.11":"2026-08-26T06:11:26.641Z","2.47.12":"2026-08-26T14:19:18.667Z","2.47.13":"2026-08-26T16:46:27.994Z","2.47.14":"2026-08-27T00:30:58.036Z","2.47.15":"2026-08-27T01:37:21.139Z","2.48.0":"2026-08-27T21:31:46.485Z","2.48.1":"2026-08-28T08:13:00.065Z","2.48.2":"2026-08-29T00:22:20.911Z","2.48.3":"2026-08-29T00:44:34.325Z","2.48.4":"2026-08-29T00:56:25.075Z","2.48.5":"2026-08-29T01:09:03.539Z","2.48.6":"2026-08-29T01:16:50.184Z","2.49.0":"2026-08-30T03:17:59.666Z","2.49.1":"2026-08-30T03:35:49.485Z","2.49.2":"2026-08-30T06:06:24.994Z","2.50.0":"2026-08-31T18:13:32.063Z","2.51.0":"2026-08-31T19:00:39.093Z","2.52.0":"2026-09-01T04:38:03.688Z","2.53.0":"2026-09-01T07:23:03.937Z","2.54.0":"2026-09-01T17:24:26.854Z","2.54.1":"2026-09-01T21:10:30.199Z","2.54.2":"2026-09-02T21:44:09.911Z","2.55.0":"2026-09-02T23:16:26.875Z","2.56.0":"2026-09-02T23:33:15.670Z","2.56.1":"2026-09-02T23:51:28.750Z","2.57.0":"2026-09-03T11:37:13.453Z","2.57.1":"2026-09-05T00:22:32.253Z","2.57.2":"2026-09-05T00:31:22.326Z","2.57.3":"2026-09-05T01:36:34.441Z","2.57.4":"2026-09-05T04:16:46.348Z","2.57.5":"2026-09-07T19:03:38.888Z","2.58.0":"2026-09-14T16:46:51.160Z","2.58.1":"2026-09-15T15:00:48.663Z","2.58.2":"2026-09-15T21:20:33.487Z","2.58.3":"2026-09-16T04:05:52.973Z","2.58.4":"2026-09-16T05:11:55.872Z","2.58.5":"2026-09-16T16:20:51.926Z","2.58.6":"2026-09-21T18:23:26.443Z"},"bugs":{"url":"https://github.com/AlexanderMattTurner/agent-sanitizer/issues"},"author":"Alexander Turner","license":"Apache-2.0","homepage":"https://github.com/AlexanderMattTurner/agent-sanitizer#readme","keywords":["llm","prompt-injection","sanitize","unicode","invisible-characters","ansi","exfiltration","rag","agent","security","homoglyph","confusables","redaction","tool-output","edit-repair"],"repository":{"url":"git+https://github.com/AlexanderMattTurner/agent-sanitizer.git","type":"git"},"description":"Defend an agent against hidden-content injection: strip payload-capable invisible Unicode and ANSI, splice out human-invisible HTML, and flag data-exfil URLs in untrusted text before any model sees it.","maintainers":[{"name":"turntrout","email":"alex@turntrout.com"}],"readme":"","readmeFilename":""}