{"_id":"@adhd/agent-plugin-sanitize","_rev":"6-b6d94c370b385325e63f8b1adf1e498c","name":"@adhd/agent-plugin-sanitize","dist-tags":{"latest":"0.1.1"},"versions":{"0.0.1":{"name":"@adhd/agent-plugin-sanitize","version":"0.0.1","_id":"@adhd/agent-plugin-sanitize@0.0.1","maintainers":[{"name":"pseudosky","email":"skywinston.sk@gmail.com"}],"dist":{"shasum":"89dc66f127e76b583079076bca6efcc3b310b2d8","tarball":"https://registry.npmjs.org/@adhd/agent-plugin-sanitize/-/agent-plugin-sanitize-0.0.1.tgz","fileCount":5,"integrity":"sha512-PQe6epiUBe8CMrrRfcVMnv3Ggc9vOAMz2Ad319MqOkDWJGso8PZK8bMxAMOSxUbzzaT2lYgvrDq4Jlgv0zZLag==","signatures":[{"sig":"MEUCIQCMg1X8b/aLE8Q7Dp8+vyAG9H7YMJMFE5Y6VcIj0YNxSQIgZG6gIDTpnu7WvRH1jIhwSBCY8JoVJ03TYVMC2ocWZdI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7853},"main":"./index.cjs","type":"module","module":"./index.js","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"gitHead":"36e7fe6e3b1dd5a9356fb1dab93d9eb1746df8b0","typings":"./index.d.ts","_npmUser":{"name":"pseudosky","email":"skywinston.sk@gmail.com"},"_npmVersion":"11.6.2","description":"Sub-agent output sanitization plugin for @adhd/agent-mcp — configurable strategies (prefix, wrap, none) to defend against prompt injection across agent boundaries","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@adhd/agent-base-types":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/agent-plugin-sanitize_0.0.1_1784686938484_0.11698259355663398","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@adhd/agent-plugin-sanitize","version":"0.0.2","_id":"@adhd/agent-plugin-sanitize@0.0.2","maintainers":[{"name":"pseudosky","email":"skywinston.sk@gmail.com"}],"dist":{"shasum":"3e20ffc53c33eac2a400d43ec554905609efb562","tarball":"https://registry.npmjs.org/@adhd/agent-plugin-sanitize/-/agent-plugin-sanitize-0.0.2.tgz","fileCount":6,"integrity":"sha512-rrHXbV9RZcXgb/Bcgdn4lXehwLaVMsO4HHgfuVCYIMzyCsX2w5w5swpRCYVKao1yHec/SoKRLc72GLihOKbguQ==","signatures":[{"sig":"MEYCIQCD70pDTSfj00TM77d8KvPhdrFL16DE6hlbMlcCY67jBQIhAOeppFtoBXeBVPmj9PGYzspJ6rH4q+/Id2Nc36+kQEOd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8460},"main":"./index.cjs","type":"module","module":"./index.js","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"gitHead":"afca4fc9097845a32a9e371ce6cd1252cbc0be6b","typings":"./index.d.ts","_npmUser":{"name":"pseudosky","email":"skywinston.sk@gmail.com"},"_npmVersion":"11.6.2","description":"Sub-agent output sanitization plugin for @adhd/agent-mcp — configurable strategies (prefix, wrap, none) to defend against prompt injection across agent boundaries","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@adhd/agent-base-types":"^2.1.2"},"_npmOperationalInternal":{"tmp":"tmp/agent-plugin-sanitize_0.0.2_1784773937377_0.3328515075004199","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@adhd/agent-plugin-sanitize","version":"0.0.3","_id":"@adhd/agent-plugin-sanitize@0.0.3","maintainers":[{"name":"pseudosky","email":"skywinston.sk@gmail.com"}],"dist":{"shasum":"9f1a8ae2a505f9ad6e18c72770a0fad61f3bed9c","tarball":"https://registry.npmjs.org/@adhd/agent-plugin-sanitize/-/agent-plugin-sanitize-0.0.3.tgz","fileCount":6,"integrity":"sha512-QnLAnq57O3SqEIZ98mquY9/MHF0Z+LJDbYhqb3s8nej5NV7VAJ5g+Ri+jvH69UkKCMJVh3NN6NRzmS8e2sS+Cg==","signatures":[{"sig":"MEUCICQkFeTMiZ6+TwPtEgUZjDeHcTKBJJzCta9zt0BvjjJLAiEAhc2/+kmLzRkJI/Ms6OsHP70MD91LyALgmU4NKxjnIU0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9069},"main":"./index.cjs","type":"module","module":"./index.js","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"gitHead":"eb0fd170825539850ae91a64393f8a8f376d8c7b","typings":"./index.d.ts","_npmUser":{"name":"pseudosky","email":"skywinston.sk@gmail.com"},"_npmVersion":"11.6.2","description":"Sub-agent output sanitization plugin for @adhd/agent-mcp — configurable strategies (prefix, wrap, none) to defend against prompt injection across agent boundaries","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@adhd/agent-base-types":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-plugin-sanitize_0.0.3_1784831147700_0.12082119355062693","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@adhd/agent-plugin-sanitize","version":"0.0.4","_id":"@adhd/agent-plugin-sanitize@0.0.4","maintainers":[{"name":"pseudosky","email":"skywinston.sk@gmail.com"}],"dist":{"shasum":"15d7eeec2455e6a04091973109d23bafe7b2a532","tarball":"https://registry.npmjs.org/@adhd/agent-plugin-sanitize/-/agent-plugin-sanitize-0.0.4.tgz","fileCount":6,"integrity":"sha512-W4n7DQz1hEhMzQYalepqkUFLDqSaVz0xuFLekNdzvtlXA+A05pwWgxQOB4Hp1QskAKaLpEeKbloNSzIaUaV9Hg==","signatures":[{"sig":"MEUCIQCHPTBP4xhDVD1pZmc1KZqbPHl56QEredN4UECi81klVAIgGfgFRiTPJwdkqiDocpAMIMaE5Hl2wBQP5gzr7+ugsCM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9209},"main":"./index.cjs","type":"module","module":"./index.js","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"gitHead":"60d30f61a52a3cb55285346e534382df02258264","typings":"./index.d.ts","_npmUser":{"name":"pseudosky","email":"skywinston.sk@gmail.com"},"_npmVersion":"11.6.2","description":"Sub-agent output sanitization plugin for @adhd/agent-mcp — configurable strategies (prefix, wrap, none) to defend against prompt injection across agent boundaries","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@adhd/agent-base-types":"^2.1.4"},"_npmOperationalInternal":{"tmp":"tmp/agent-plugin-sanitize_0.0.4_1784934787828_0.42567739743651667","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@adhd/agent-plugin-sanitize","version":"0.1.0","_id":"@adhd/agent-plugin-sanitize@0.1.0","maintainers":[{"name":"pseudosky","email":"skywinston.sk@gmail.com"}],"dist":{"shasum":"bfd5c384b24d2d556999f1f22146fad4925d986f","tarball":"https://registry.npmjs.org/@adhd/agent-plugin-sanitize/-/agent-plugin-sanitize-0.1.0.tgz","fileCount":6,"integrity":"sha512-H01xuXU8m6/R/sZj0h3vpB6PTDoc1FfRkavqj2k0k4snXbkOAX1wl/7PYmvx39h7Rir7jIXCXjeEr8ezDAGiZA==","signatures":[{"sig":"MEYCIQD9Wd778ZlRCe0G8o6HFZmfjuSLOnEOKZy+pr8YpYwyfwIhANlB4kd5awf65ye47EtzLwtS4CMsxWyvzLxCFOEtXGuI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9209},"main":"./index.cjs","type":"module","module":"./index.js","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"gitHead":"1dbc0638f8eb1b7c961bc9359def6f4425da5c15","typings":"./index.d.ts","_npmUser":{"name":"pseudosky","email":"skywinston.sk@gmail.com"},"_npmVersion":"11.6.2","description":"Sub-agent output sanitization plugin for @adhd/agent-mcp — configurable strategies (prefix, wrap, none) to defend against prompt injection across agent boundaries","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@adhd/agent-base-types":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-plugin-sanitize_0.1.0_1785136594099_0.16573873291539898","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@adhd/agent-plugin-sanitize","version":"0.1.1","description":"Sub-agent output sanitization plugin for @adhd/agent-mcp — configurable strategies (prefix, wrap, none) to defend against prompt injection across agent boundaries","type":"module","publishConfig":{"access":"public"},"main":"./index.cjs","module":"./index.js","typings":"./index.d.ts","exports":{".":{"import":"./index.js","require":"./index.cjs","types":"./index.d.ts"}},"peerDependencies":{"@adhd/agent-base-types":"^2.3.0"},"dependencies":{"zod":"*"},"gitHead":"f5b08fa2137e12a307d035eddae88af19f1dafa4","_id":"@adhd/agent-plugin-sanitize@0.1.1","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-pf579wXQMbvGAsES2/mK4xpLUAsmAOG5vSFFyQAM0xiQm3QIIhpGMEuXpahCsAQOeECVgfS5wxelOngfF5lHPQ==","shasum":"085481b55f1fa8a782b4d3ea15e4582d27198cc5","tarball":"https://registry.npmjs.org/@adhd/agent-plugin-sanitize/-/agent-plugin-sanitize-0.1.1.tgz","fileCount":6,"unpackedSize":9519,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHmvK6USFcSRdbxWoV/5MuWwWIgfCPKsrvqGA05GEC4gAiEAiThmFcHTSy7COJWmMcNbh79espHcWXQyJM4fv4PIdoM="}]},"_npmUser":{"name":"pseudosky","email":"skywinston.sk@gmail.com"},"directories":{},"maintainers":[{"name":"pseudosky","email":"skywinston.sk@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-plugin-sanitize_0.1.1_1786526654097_0.690434179919142"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-22T02:22:18.353Z","modified":"2026-08-12T09:24:14.404Z","0.0.1":"2026-07-22T02:22:18.604Z","0.0.2":"2026-07-23T02:32:17.543Z","0.0.3":"2026-07-23T18:25:47.850Z","0.0.4":"2026-07-24T23:13:07.975Z","0.1.0":"2026-07-27T07:16:34.244Z","0.1.1":"2026-08-12T09:24:14.249Z"},"description":"Sub-agent output sanitization plugin for @adhd/agent-mcp — configurable strategies (prefix, wrap, none) to defend against prompt injection across agent boundaries","maintainers":[{"name":"pseudosky","email":"skywinston.sk@gmail.com"}],"readme":"# @adhd/agent-plugin-sanitize\n\nSub-agent output sanitization plugin for [@adhd/agent-mcp](https://github.com/anomalyco/adhd/tree/main/packages/ai/agent-mcp). Defends against prompt injection across agent boundaries by modifying delegation tool results before the parent model sees them.\n\n## Installation\n\nAdd to your `agent-mcp.config.json` (project root or `~/.agent-mcp/config.json`):\n\n```json\n{\n  \"plugins\": [{ \"module\": \"@adhd/agent-plugin-sanitize\" }]\n}\n```\n\nOr via env var:\n\n```\nADHD_AGENT_PLUGINS=\"@adhd/agent-plugin-sanitize\"\n```\n\n## Configuration\n\n```json\n{\n  \"plugins\": [\n    {\n      \"module\": \"@adhd/agent-plugin-sanitize\",\n      \"config\": {\n        \"defaultStrategy\": \"prefix\",\n        \"delegationOnly\": true,\n        \"agents\": {\n          \"internal-tool\": \"none\"\n        }\n      }\n    }\n  ]\n}\n```\n\n| Option            | Type                               | Default    | Description                                                                                                            |\n| ----------------- | ---------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------- |\n| `defaultStrategy` | `\"none\"` \\| `\"prefix\"` \\| `\"wrap\"` | `\"prefix\"` | Default sanitization strategy                                                                                          |\n| `agents`          | `Record<string, strategy>`         | `{}`       | Per-agent overrides (agent name → strategy)                                                                            |\n| `delegationOnly`  | `boolean`                          | `true`     | Only sanitize delegation tool calls (`agent-mcp__task` / `agent-mcp__agent`); when `false`, sanitizes all tool results |\n\n## Strategies\n\n| Strategy   | Effect                    | Example output                                                         |\n| ---------- | ------------------------- | ---------------------------------------------------------------------- |\n| `\"none\"`   | Raw pass-through          | `\"hello world\"`                                                        |\n| `\"prefix\"` | Prepends a boundary label | `[Sub-agent output from \"researcher\"]\\nhello world`                    |\n| `\"wrap\"`   | Surrounds with delimiters | `── Agent \"researcher\" output ──\\nhello world\\n── End agent output ──` |\n\n## How it works\n\nThe plugin registers a transform handler on the `transform:tool_result` hook event.\nWhen the orchestrator receives a delegation result in Phase 3 (before appending it to\nconversation history), it emits this event. The handler mutates `payload.result` in\nplace — the orchestrator reads the sanitized value when building the tool result\nmessage.\n","readmeFilename":"README.md"}