{
  "name": "agent-sanitizer",
  "version": "2.58.6",
  "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.",
  "type": "module",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/AlexanderMattTurner/agent-sanitizer.git"
  },
  "bugs": {
    "url": "https://github.com/AlexanderMattTurner/agent-sanitizer/issues"
  },
  "homepage": "https://github.com/AlexanderMattTurner/agent-sanitizer#readme",
  "author": "Alexander Turner",
  "bin": {
    "sanitize-cli": "bin/sanitize-cli.mjs"
  },
  "lint-staged": {
    "*.{css,scss}": [
      "prettier --write"
    ],
    "*.json": [
      "prettier --write"
    ],
    "*.json.example": [
      "prettier --write --parser json"
    ],
    "*.{js,jsx,mjs,cjs,ts,tsx}": [
      "prettier --write"
    ],
    "*.{yaml,yml}": [
      "prettier --write"
    ],
    "*.md": [
      "prettier --write"
    ],
    ".claude/skills/*/SKILL.md": [
      ".hooks/lint-skills.sh"
    ],
    "{*.sh,.hooks/!(*.*)}": [
      "shfmt -i 2 -w"
    ],
    "*.py": [
      "ruff check --fix",
      "ruff format"
    ]
  },
  "devDependencies": {
    "@commitlint/cli": "^21.0.1",
    "@commitlint/config-conventional": "^21.0.1",
    "@eslint/js": "10.0.1",
    "@stryker-mutator/core": "^9.6.1",
    "@stryker-mutator/tap-runner": "^9.6.1",
    "@types/node": "25.9.1",
    "acorn": "^8.18.0",
    "acorn-walk": "^8.3.5",
    "agent-sanitizer": "link:.",
    "bun": "1.3.11",
    "c8": "11.0.0",
    "esbuild": "0.28.1",
    "eslint": "10.4.0",
    "eslint-plugin-redos": "4.5.0",
    "fast-check": "4.8.0",
    "globals": "17.6.0",
    "lint-staged": "^17.0.5",
    "prettier": "^3.0.0",
    "rehype-parse": "9.0.1",
    "remark-gfm": "4.0.1",
    "smol-toml": "^1.7.1",
    "typescript": "6.0.3",
    "typescript-eslint": "8.61.0",
    "yaml": "^2.9.0"
  },
  "license": "Apache-2.0",
  "engines": {
    "node": ">=22"
  },
  "keywords": [
    "llm",
    "prompt-injection",
    "sanitize",
    "unicode",
    "invisible-characters",
    "ansi",
    "exfiltration",
    "rag",
    "agent",
    "security",
    "homoglyph",
    "confusables",
    "redaction",
    "tool-output",
    "edit-repair"
  ],
  "exports": {
    ".": {
      "types": "./types/index.d.mts",
      "default": "./src/index.mjs"
    },
    "./invisible": {
      "types": "./types/invisible.d.mts",
      "default": "./src/invisible.mjs"
    },
    "./layer1": {
      "types": "./types/layer1.d.mts",
      "default": "./src/layer1.mjs"
    },
    "./html": {
      "types": "./types/html.d.mts",
      "default": "./src/html.mjs"
    },
    "./confusables": {
      "types": "./types/confusables.d.mts",
      "default": "./src/confusables.mjs"
    },
    "./instructions": {
      "types": "./types/instructions.d.mts",
      "default": "./src/instructions.mjs"
    },
    "./prompt": {
      "types": "./types/prompt.d.mts",
      "default": "./src/prompt.mjs"
    },
    "./output": {
      "types": "./types/output.d.mts",
      "default": "./src/output.mjs"
    },
    "./credential-names-matcher": {
      "types": "./types/credential-names.d.mts",
      "default": "./src/credential-names.mjs"
    },
    "./view-map": {
      "types": "./types/view-map.d.mts",
      "default": "./src/view-map.mjs"
    },
    "./rehydrate": {
      "types": "./types/rehydrate.d.mts",
      "default": "./src/rehydrate.mjs"
    },
    "./credential-names": "./python/agent_sanitizer/secrets/data/credential-names.json",
    "./claude-hooks": {
      "types": "./types/claude-hooks/plugin-hooks.d.mts",
      "default": "./claude-hooks/plugin-hooks.mjs"
    },
    "./claude-hooks/pretooluse-sanitize": {
      "types": "./types/claude-hooks/pretooluse-sanitize.d.mts",
      "default": "./claude-hooks/pretooluse-sanitize.mjs"
    },
    "./claude-hooks/sanitize-output": {
      "types": "./types/claude-hooks/sanitize-output.d.mts",
      "default": "./claude-hooks/sanitize-output.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"
    },
    "./claude-hooks/lib/hook-io": {
      "types": "./types/claude-hooks/lib/hook-io.d.mts",
      "default": "./claude-hooks/lib/hook-io.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/authored-content": {
      "types": "./types/claude-hooks/lib/authored-content.d.mts",
      "default": "./claude-hooks/lib/authored-content.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/secret-annotate": {
      "types": "./types/claude-hooks/lib/secret-annotate.d.mts",
      "default": "./claude-hooks/lib/secret-annotate.mjs"
    },
    "./claude-hooks/lib/reveal": {
      "types": "./types/claude-hooks/lib/reveal.d.mts",
      "default": "./claude-hooks/lib/reveal.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/trace": {
      "types": "./types/claude-hooks/lib/trace.d.mts",
      "default": "./claude-hooks/lib/trace.mjs"
    },
    "./claude-hooks/lib/hook-timing": {
      "types": "./types/claude-hooks/lib/hook-timing.d.mts",
      "default": "./claude-hooks/lib/hook-timing.mjs"
    }
  },
  "files": [
    "src/*.mjs",
    "src/vendor/*.mjs",
    "python/agent_sanitizer/data/invisible-charset.json",
    "python/agent_sanitizer/secrets/data/credential-names.json",
    "python/agent_sanitizer/secrets/data/redaction-floor.json",
    "claude-hooks/*.mjs",
    "claude-hooks/lib/*.mjs",
    "claude-hooks/config/*.json",
    "bin/sanitize-cli.mjs",
    "types",
    "LICENSE",
    "LICENSE-THIRD-PARTY",
    "README.md",
    "THREAT-MODEL.md",
    "SECURITY.md"
  ],
  "dependencies": {
    "agent-control-plane-core": "0.7.0",
    "css-tree": "^3.2.1",
    "hast-util-from-parse5": "8.0.3",
    "mdast-util-gfm": "3.1.0",
    "micromark-extension-gfm-footnote": "2.1.0",
    "micromark-extension-gfm-strikethrough": "2.1.0",
    "micromark-extension-gfm-table": "2.1.1",
    "micromark-extension-gfm-task-list-item": "2.1.0",
    "micromark-util-character": "2.1.1",
    "micromark-util-combine-extensions": "2.0.1",
    "micromark-util-types": "2.0.2",
    "namespace-guard": "0.20.0",
    "parse5": "7.3.0",
    "remark-parse": "11.0.0",
    "unified": "11.0.5",
    "unist-util-visit": "5.1.0",
    "vfile": "6.0.3"
  },
  "scripts": {
    "test": "node scripts/coverage.mjs",
    "coverage": "node scripts/coverage.mjs",
    "check": "tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit",
    "typecheck": "tsc --noEmit && tsc -p tsconfig.hooks.json --noEmit",
    "build:types": "tsc -p tsconfig.build.json && tsc -p tsconfig.build-hooks.json",
    "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",
    "gen:hook-binaries": "node plugin/scripts/build-hook-binaries.mjs",
    "lint": "eslint .",
    "test:mutation": "node scripts/mutate.mjs",
    "format": "prettier --write .",
    "format:check": "prettier --check ."
  }
}