{"_id":"shroud-privacy","_rev":"52-140496107d819a1fefc0672170f53d5c","name":"shroud-privacy","dist-tags":{"next":"2.2.14","latest":"2.5.7"},"versions":{"2.0.0":{"name":"shroud-privacy","version":"2.0.0","keywords":["openclaw","openclaw-plugin","ncg","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.0","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"c045531b89886bed1fea1f7e5d139195482b966a","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.0.tgz","fileCount":45,"integrity":"sha512-1ZKkCpKLr2Ylw+RkRZCZiJ5Tja+U6RZM+twLPmmphZB19kINSCeAFoWGNSW/XcMeSi7pRUrTOQRjmepFFGRmqw==","signatures":[{"sig":"MEUCIF3h7jGt3bCg8sDpcQRQRqMwMmQ9h0HvRNkeLmRQFhp+AiEArtDW50xtmX6Cf+61QyzTBzXpMB1BCzwmbzOSN7dVi7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":249151},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"5bcd989403d93d0079912551d21d36893524c3b7","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw and NCG — deterministic fake values with deobfuscation","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.0_1774264689322_0.10350704210732453","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"shroud-privacy","version":"2.0.1","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.1","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"6bf5e90d047cdf6149c91218793d4ea331c60c0a","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.1.tgz","fileCount":43,"integrity":"sha512-3CbY086DTbhiiEghJQ+Llpi5t1AptEgKgTyTAcj+gdnFzAIJrcmQvFjSMkSaXL9Ei/DgeDhXkvTLfiJAkq/epA==","signatures":[{"sig":"MEQCIGTo4vl1Y3VD+XBobIAPzZLOuTNhUYmogVkvYMlep3akAiBlI7ygw64zPDjgWLLq9CXTWuK1CTgpDaP2Fohfd2tbrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220155},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"6215018ca16a437dd9876eae449a367f6a182d53","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.1_1774266617629_0.17983298480809018","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"shroud-privacy","version":"2.0.2","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.2","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"f4627c5499d062cc33bdc6ca3a741720081ddefa","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.2.tgz","fileCount":43,"integrity":"sha512-zXfeXneBzvAFmiLbzmSz0G29U8NJqYnvp76XKnjrBZyVdr60jT394lrKR6DZxWcE2TV2qwaBIgJboRzyGgnv4Q==","signatures":[{"sig":"MEUCIBAcYrVRUz6mQh/pynC03Nr9xutq/1+VJvfxfx5u3p7eAiEApuk83IizEImy0kmCugD8n7LSZd+VebLMtBpKNxNBxlc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":217949},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"4b530ccb061a8236d312f5c5963edcb2759c2b65","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.2_1774267243698_0.37624329395704814","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"shroud-privacy","version":"2.0.3","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.3","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"956a30fc5a62c9095d96b0a9f0922091ec7307bb","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.3.tgz","fileCount":43,"integrity":"sha512-Nys+QDSZSn8wcOAaouYixxikoQHdo+6NCDm+gkiNFEnTRkh1NHnxdd8utKCE/QdQLIdJPCvHTjrQz3DRcIjg1w==","signatures":[{"sig":"MEUCIH2TcwoLc1ZYxpcBkBrVjaaImc399wWPCTUL5Wfq2mwsAiEAsTM8knVWo9qsxl5wKsBWAL6T2d8l9C/RN6UB8M3uH0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":217949},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"65ed162c6141d195f95d0a9b0f6f32cf5d5d1e23","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.3_1774267432918_0.062310139563011235","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"shroud-privacy","version":"2.0.4","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.4","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"878b7d5cee8186b418360db210f1f86a94bfa422","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.4.tgz","fileCount":43,"integrity":"sha512-a2qbIVo7mr0MIpY4cdCpG9rZxSBLJ2wTqFTmwBy/ke31GURHNJ3oIlQR9u4aJqcXct650/xb6ffThCZCG9lBuw==","signatures":[{"sig":"MEQCIDVrCwwiGnWbA4V7PffhapgL4i5LxB++8AtutJlq6vQrAiBAxKAzSL3flNoLlbED2wJQpQmxcGzv2ZGNQsufxvgO2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220126},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"c4ecbf4c72574d8fa44f8c42f3c85f978c40d709","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.4_1774267890695_0.8766157217483901","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"shroud-privacy","version":"2.0.5","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.5","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"b47a1f023f4e5c497b9eae6826d308b5c3bd46f2","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.5.tgz","fileCount":43,"integrity":"sha512-QXBdycenTg7YEaZOcEjiFFeSHG/B9ATqONpcI8F7ojmFYc4pggPOBL/ORRw0UhO+1VSKutbTb+ajxHMlDR7nMw==","signatures":[{"sig":"MEYCIQCmcCgdxn73O0+EVok5KdF4i6I+nWwKGpxfiSwjj7Cj/QIhANrFFcC9j2KBUajzl30rM/695gk5XwJcT05k8wOUoo2T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":212990},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"82e8e6e9adc160d96f05ea8fe6fb2cfbd2bff42d","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.5_1774269351968_0.3111750173379253","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"shroud-privacy","version":"2.0.6","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.6","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"c6fb85baf8b8a250e3fc08c8d99703a5356936f8","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.6.tgz","fileCount":43,"integrity":"sha512-bR2fBiZ7498B6Rs3IJlAe7Ti1hhUO2AjtY+NjkFqBoivy56yyir6HnzGKxFiREENk90Jn/l+L/KZc0DrxBNmPg==","signatures":[{"sig":"MEUCIDpgU+Ukp9Cx1FzFppyt0djDXneroy5Qy9QVbQdsXwCfAiEAuqvpRKf18jfCz69AChEYIzHgnwophystFAIZklQvtiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215904},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"2e2a6b83a48f12f11894989adde838e2ecddccdf","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.6_1774273640774_0.852940206886998","host":"s3://npm-registry-packages-npm-production"}},"2.0.7":{"name":"shroud-privacy","version":"2.0.7","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.7","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"86192d5b7ee3b5225e2519dbe9375588fdbf8226","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.7.tgz","fileCount":43,"integrity":"sha512-hcfgVzAyKFbFWik5GXmxBQO1e+b2EF9MPg8LATDp8HhKPPvoJVHU1Jv8QwFaKw1ehkQN6MBt59cktDe80brwpA==","signatures":[{"sig":"MEUCIAwXKqNgJDubZTyp9TXGqtfKJjgqyJSul/bgwHxYUvwSAiEAvPEg55fFbn4jOuEqX1VCPUqVQT4FPH06yj7SbQM0wNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":221658},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"a6b881a593f043869403c7447f51390d8413c20d","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.7_1774279081793_0.746725594876307","host":"s3://npm-registry-packages-npm-production"}},"2.0.8":{"name":"shroud-privacy","version":"2.0.8","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.8","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"d67c0d281b398d1a95a78f98b6c67e9fb5eabbbf","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.8.tgz","fileCount":43,"integrity":"sha512-oqsZe8x+cLUMenX+TEay+W0utq4PCF9ueCj1vTODzZ4SS1o92YH5xGaVbG6F0ADR3pOSQn0xqwm3NbrkrKzlow==","signatures":[{"sig":"MEYCIQC821nVcaQyca/BgC3Ml3cFqS9d3wT1M1k9ecnPCti0gwIhAKnUpTQK+bJiqKMseqiBwGVWjAz00vl00jujFpKdABSz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225997},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"056476328ec3944df1fb93ff6e49ec7bf0600aff","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.8_1774294339727_0.2520473891030637","host":"s3://npm-registry-packages-npm-production"}},"2.0.9":{"name":"shroud-privacy","version":"2.0.9","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.9","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"b3d2fd0a49b7c9a93bf52b64a1ad73acaf3f2a2d","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.9.tgz","fileCount":43,"integrity":"sha512-Dy2xBbzjOa5vbozzhpudEuuyGmsahO7eSQUrqBiPzCLs8HCSOWGo+AtLafLEXT3JsbtZn2jPJJKlr/RiQr9TMA==","signatures":[{"sig":"MEYCIQCOGJe4aL3g6E4hrvvhFR/6iEgomMNPPeseAQRGZGs0kwIhAK1wIWdcRiqEDWhuVhun2h77h4DXUQ4thjBQw/FQSWV0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225663},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"d1342f64b6cf84c65fe861493d7be86f70cd2563","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.9_1774295148240_0.9090453789581321","host":"s3://npm-registry-packages-npm-production"}},"2.0.10":{"name":"shroud-privacy","version":"2.0.10","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.10","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"521a25886156c01692b14a873c8da55bac84457e","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.10.tgz","fileCount":43,"integrity":"sha512-wbp89teYiG6SeI1PjomW+7aOKwlE/xKQr2y4D4MvwEPOdJCNynmip/V7nCQrkG5Th0BwsbuEfUpWjEX0+90CCA==","signatures":[{"sig":"MEQCIADnfS2vr2mq2Qk9IUOk2g3io1Mnd6aDHqMIcLSI55xuAiAd10Bszsnh/V5MgRezVtIXDRN7bqNVuBecLJWYYH77Bw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225619},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"3c0705e755a6ca94e819c7dffe3c6a01bf49f08d","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.10_1774296885921_0.529184702628694","host":"s3://npm-registry-packages-npm-production"}},"2.0.12":{"name":"shroud-privacy","version":"2.0.12","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.12","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"dist":{"shasum":"634d3a35894a528088af0c8c0aeccf213d698b93","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.12.tgz","fileCount":43,"integrity":"sha512-9YSSGLjd1Vs/wDocENWw3nuRLm2EGmQjtygQ/S8bX5IVaIrPFzoVtr7K7RcchFcTk4I4KXr+e/UlROitPfyYpg==","signatures":[{"sig":"MEUCIQCe6CNCv14P5zRFoxNSciXbGGpHdiKMQAbj2op16+TeFwIgD01HWVwJyoxkD0hWlYUdG4Duxw/bUS9KDaQ9UmVHTqE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225624},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"96cf052f5f2208956df3ad8790380d47b08adcdb","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.12_1774298020985_0.24343668591366585","host":"s3://npm-registry-packages-npm-production"}},"2.0.13":{"name":"shroud-privacy","version":"2.0.13","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.13","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"48400ed5ba12b59ef10443a2eac53da0a0d1cfc2","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.13.tgz","fileCount":44,"integrity":"sha512-yem64TLNesDAkgs7lXnlMr5X1sUUkjWyE6ZuBAwFQSpH9RjnBlnGtXPK6iLdgUL6vf3HdxcfGlobTpF9O2lDdg==","signatures":[{"sig":"MEYCIQDzWTbuEgU1WeTqDq5nb41tGlMtMD+OLiljjNTBmd2RNQIhAILgcVpMcL3V0lGdBs9kEh+5Jgm/e3/LZlcbLDQfEriw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231353},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"c6932844a22759dff0833314c9d47dc4a90465c9","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.13_1774298843499_0.9064965468379664","host":"s3://npm-registry-packages-npm-production"}},"2.0.14":{"name":"shroud-privacy","version":"2.0.14","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.14","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"d571b0449f3fae51fe15e09dcc6bcc57e0538c03","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.14.tgz","fileCount":44,"integrity":"sha512-xd3ZiKKUnx1kP4mNbJdk/gK2ZtS/hFh9S3rtiaPMv31GucoS3RDQD1nNs74ia2UPkaawz7BsVnbxUjWV2F8vBg==","signatures":[{"sig":"MEUCIE4DkclvY734SEgxDSibSDt/q/yf5BP8Y0GkyPWHsBOdAiEAp5VWsoBL0CjIQMs+97vN1xOMi8klTtyaerzjvvCahHU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231465},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"6157ef6f1202007e196f1a3dcebe06e65a334ffa","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.14_1774299310816_0.8131408533315114","host":"s3://npm-registry-packages-npm-production"}},"2.0.16":{"name":"shroud-privacy","version":"2.0.16","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.16","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"2902ac6ab4ca90441f84ee053f7ab2c7cba926d4","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.16.tgz","fileCount":54,"integrity":"sha512-ZrHrw6WWv0Bu8eJPlPVs1FAgGCkcw7Q3V/qKk57a4WrrZE66cMtYSBrmw+PucHG8K8DpYt0MYPEnnEaUya0BwQ==","signatures":[{"sig":"MEQCIF7k09fnOok9Cak+Pkx9IFrkWJ0o3hBwdbpDFLlym34vAiATxGkbwOpSWk+8wRDnQGzZaMboSYbJuBd6VG/cdIjDrA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":261187},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"7fc0fac3fe8345982044fd718aa21c4d9f97d8b7","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.16_1774334199543_0.8318916785105368","host":"s3://npm-registry-packages-npm-production"}},"2.0.18":{"name":"shroud-privacy","version":"2.0.18","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.18","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"12ed57cf7ec9557653ec921d43d7259e6b2dce40","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.18.tgz","fileCount":54,"integrity":"sha512-gHZlPOcfpq8ez5skoRZxwPQ7yEJOtVR/7xQIvfkgolo4YgebbupUoXKJi6iTd13sEcJa4edlLFtUvhqoNEjd3g==","signatures":[{"sig":"MEQCIBerXYCIkBNogXQqRJD3Xcuo89ePP6jkbGiTVq5KNsznAiBRpBregntE+fZ4TC9OpQl1ki2d20w9wkLQEWwqqtrPqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263904},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"7dbae843f72c8a3e9933c055213cbad8aee4acdc","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.18_1774345974727_0.4552397054176407","host":"s3://npm-registry-packages-npm-production"}},"2.0.19":{"name":"shroud-privacy","version":"2.0.19","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.19","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"38a3c0c8b96114e652a2ca7e99afdd59059c842c","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.19.tgz","fileCount":54,"integrity":"sha512-SIqRyKJnIcFStqyMew9mN0GEwwwbbbSAPLU7MvimpRq3zn8U6zG4YXP3+UqcMX/B8SGyEbWAaz3VDpGVD0sGog==","signatures":[{"sig":"MEQCIEL4iISQufcqJTxxJcXRtoxE3EeTLcG6x6H86zyL65meAiBZk79NlCFdqnWgHVfnWLmT93/tsscBizIdYmApu7VGdA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268017},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"dbb3f5fd8ec434143e2477262933baddc86968d2","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.19_1774352473856_0.4791716076107009","host":"s3://npm-registry-packages-npm-production"}},"2.0.20":{"name":"shroud-privacy","version":"2.0.20","keywords":["openclaw","openclaw-plugin","privacy","pii","obfuscation","llm","redaction"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.0.20","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"b1fe666d5c198042b8a79366cd5e70ff9f2086d8","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.0.20.tgz","fileCount":54,"integrity":"sha512-j/p6Y+wdkXEfglJ5kow4sIe7GewsdIBuz/kbFkEvRNZCK1+aCPt0tfmIvG45B18TqGjU453qbIrU8deHI/u/YA==","signatures":[{"sig":"MEQCIH5GDD4Gpw3B06ToZkH6JA4LSiYsDxPvEp73srWY3EYjAiAQx9F0LjgMZ58iVhdlPNZ5Yyb2+G9goDJDHIqWFMNa/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319599},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"a9b2ef179cf4c80c99fd632582437c68509bd6e1","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation plugin for OpenClaw — detects sensitive data and replaces with deterministic fake values","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.0.20_1774465136884_0.4872065353852457","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"shroud-privacy","version":"2.1.0","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.1.0","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"24efa87a1fc40171eb8964ac01d3b1b1299a570a","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.1.0.tgz","fileCount":56,"integrity":"sha512-1ltdg7E4v3rDW4xyrDsHSIHJVZTiTVZoOaxYCPlKvvirFohMHfpipBlZOlGYz4EciJ+9yTbd0fQd+doUofOneg==","signatures":[{"sig":"MEUCIFz+3sfUeWjuSQOrR+8Tt5Hn61N05eTDV3hYLQSiVAOlAiEA+H5x3BgjTJtAdYxpHdx5+U7t9A1WS/a9msr3mJgyUMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370756},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"90df20be06fa9cc774e6e6fe52afb41728938141","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation for AI agents — detects PII and replaces with deterministic fake values before anything reaches the LLM. Works with OpenClaw (plugin) or any agent (APP protocol).","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.1.0_1774529721580_0.789583841693287","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"shroud-privacy","version":"2.2.0","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.0","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"9ede2d95363ef9c617cb57953497287e9b61bce8","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.0.tgz","fileCount":56,"integrity":"sha512-lF89TLNO5MQZsyLI5lW0YNBlckVhUer7W8762jk+sgwuhlcR0LHyO4FjJ+E3ReixFOsjozbIrsgb7mCkxY7HOQ==","signatures":[{"sig":"MEYCIQD0DPG9Vk58FLn7kG8h9Y1bn6482FaoIq1kSNwoyzKuoAIhANgFjmhazgZSjct78IxVnn/L3s4nnF6E5a0kyaZAYHrN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":377749},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"48fe4139d97d708a022c66c11e799511941019b9","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation for AI agents — detects PII and replaces with deterministic fake values before anything reaches the LLM. Works with OpenClaw (plugin) or any agent (APP protocol).","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.0_1774551525170_0.1671002010393159","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"shroud-privacy","version":"2.2.1","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.1","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"2838634a120fd235c093ad506ae74ba548ff6bd8","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.1.tgz","fileCount":56,"integrity":"sha512-7+hFj+d5Nj8jTrX0VYfWpxP5a67Fpo1vvyOZQEAEVLcuMDR4/QObjDsX+G4kVWfF3w6SMUBnmvT2JOmdX728PA==","signatures":[{"sig":"MEUCIQDBwrdgcKA7s4Ia6d4u9Vm6/Yrv+pNdVXuqKv7mCNwpuwIgeowqOvjPAMKy2MCqoU5pZX65aKcECjGvRJ/91/zRw6s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390941},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"67c8f5f36ddff59165d9b87a4ae1abe742d04c5c","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation for AI agents — detects PII and replaces with deterministic fake values before anything reaches the LLM. Works with OpenClaw (plugin) or any agent (APP protocol).","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.1_1774566397335_0.09212183498790605","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"shroud-privacy","version":"2.2.2","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.2","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"0d4bf37b39f32c3cb7ce22f8b528b66b71fdfb90","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.2.tgz","fileCount":56,"integrity":"sha512-2gaxGXVC8fllwAQSVxM2Gn5R48c7JIhqIUTzNsKTzxPf0OSpKEtvhlDStI1oalWWz6aAjHdnW6UmxKOQqItF3Q==","signatures":[{"sig":"MEYCIQCiK7pjVy0fsdSuvOtXkisVI66LZoRSULpXyXqh4FcIJQIhAKgUrM1Hx1LexlPVSzqzjvegfiXRkPv2RbTI3fhHc840","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390470},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"50078ffd9d083303c995d42b5ff331c48e51a207","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation for AI agents — detects PII and replaces with deterministic fake values before anything reaches the LLM. Works with OpenClaw (plugin) or any agent (APP protocol).","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.2_1774568306807_0.4181540681804954","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"shroud-privacy","version":"2.2.3","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"walterkeating-stack"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.3","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/walterkeating-stack/shroud#readme","bugs":{"url":"https://github.com/walterkeating-stack/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"02f7d5f873e78f8fdb4189e69495b2fe65b66c17","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.3.tgz","fileCount":56,"integrity":"sha512-dbqQqo7dJ8KNDepjP9qCfixv83G5wNG4CU1MXBU73apALQKtA0VQMMxhQEjVj9iQMZYGNt2r6p1vyr1sJEXrPQ==","signatures":[{"sig":"MEUCIQCqNglC2ewq4YaLNd7hQo69FpV7eV4QU7i6cp/sSHGW2AIgRwYajG6GBa1bDMdtVDtRuiywz3r66SFS97qVKaROsnI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391505},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"dacff53db73da4f2a79dcf709bdac460917ae45c","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/walterkeating-stack/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation for AI agents — detects PII and replaces with deterministic fake values before anything reaches the LLM. Works with OpenClaw (plugin) or any agent (APP protocol).","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.3_1774572804240_0.6485072280111785","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"shroud-privacy","version":"2.2.4","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.4","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"110cd11d99d67e53efe32d13557710491eabd84e","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.4.tgz","fileCount":56,"integrity":"sha512-0YUnx96mi9haWeNKFVhKiAgilU3Ypl2GzAiLNWKzb8Pp8qt55EN5tlsgOLTjPM1RmeWlWfEg6pJwJT6gKiPYtw==","signatures":[{"sig":"MEUCIGQc0eKdbeQxSd4kOLqhjK0lfHIJjzAuNBL9fSqnkCTSAiEA0BMdyKzUtTO1GVatML48ib1bZJqP3xgoUuQy5zOPpAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391435},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"6d798135b6336651247cb105cf2738e827f8916e","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation for AI agents — detects PII and replaces with deterministic fake values before anything reaches the LLM. Works with OpenClaw (plugin) or any agent (APP protocol).","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.4_1774605185026_0.4512919173251395","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"shroud-privacy","version":"2.2.5","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.5","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"7bfba01d4eac1104a36c8b4f9f31947e8833a07b","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.5.tgz","fileCount":56,"integrity":"sha512-+z5pJF1PTNrJ2BzT11khpJ7VdEGgQlnJouYsxKbCMlFFTxy84Nd4t+FoJ8KOsSqkjfEBuR15Yf1GwKeMYPhV/Q==","signatures":[{"sig":"MEQCIANvHMOSD2VY2Jnh6fJlMFLPI57fgbEavPHygb0/7twVAiAz5ENaUtR6YuCjkpXY9PaKVyqGbc4Cv/EKshm6oyavPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391952},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"14daafbcacc5cf3ff7d3041c2dfb7da79b7e301f","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation for AI agents — detects PII and replaces with deterministic fake values before anything reaches the LLM. Works with OpenClaw (plugin) or any agent (APP protocol).","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.5_1774607378075_0.6713524339634502","host":"s3://npm-registry-packages-npm-production"}},"2.2.6":{"name":"shroud-privacy","version":"2.2.6","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.6","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"79a7ed90b14c69e3b3810bff59d3d536c2f7003c","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.6.tgz","fileCount":56,"integrity":"sha512-Wmkgf6WWDI0IuGGhP1H/bPGaATBurfe0ytaqy2iY83h4J3aeEwxT8JlmeYNv2cnxyyz6RfHScVtOie+Icz5CMg==","signatures":[{"sig":"MEYCIQCwg71PLshWMsmZBZO0mYDJ03xLPTujZbmL4cGrHsORgAIhAIIwRecR9ZWGI9raISASUlIGa7JMEM7haqlyJmTFWEMs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":392168},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"ea387f7b24bc4ec30bbec9bae2235c7535321a83","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy obfuscation for AI agents — detects PII and replaces with deterministic fake values before anything reaches the LLM. Works with OpenClaw (plugin) or any agent (APP protocol).","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.6_1774608062002_0.37445269942179493","host":"s3://npm-registry-packages-npm-production"}},"2.2.7":{"name":"shroud-privacy","version":"2.2.7","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.7","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"d8c0ef95f87f3f761061fc08a8ede8d113cec509","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.7.tgz","fileCount":58,"integrity":"sha512-VkLTcy4+UK7pkKhJzajOCIayUALzsyVZ0SdkR2b6ndIdbXTGP7rSzwtOMvcdtXLj9Ura1MKWn3VnLnqg9GRaHQ==","signatures":[{"sig":"MEUCIH6VZJwEjPOoOB54+6/IsMfhZh/ooHMTJ/4Ri7S9y1JkAiEAxguPAl1BIJukDuObSK0Uyqsdvz0nYI+cixEFnuwsttI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":399788},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"98073a6ebac066a006a02d101680b829cea5cdfa","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.7_1774656113414_0.4087312483374457","host":"s3://npm-registry-packages-npm-production"}},"2.2.8":{"name":"shroud-privacy","version":"2.2.8","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.8","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"85418b93c355934060bac8b67fc37ef9a4e34cd2","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.8.tgz","fileCount":58,"integrity":"sha512-TREQn7wQQqiu6m8zJNQ2Wf+B+hhc4nIwOvNNaq342mhKKfYNeUFIW9LPHYxkeBlaofR2nKfU8XOZqlYqw5of/g==","signatures":[{"sig":"MEUCIGU1BsydVXcWhhRRlHp2hC404IQ3BLH0+pR55aOQJdosAiEA1jRIQW+4loSo/7ThQRmtXdK40JQqa2phl18h1AlV5oM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404368},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"7d0f42097ad6c431f12f323f6a401a8e8bcb859f","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.8_1774660517778_0.4185232560878491","host":"s3://npm-registry-packages-npm-production"}},"2.2.9":{"name":"shroud-privacy","version":"2.2.9","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.9","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"aa49aeb1cbd3ee88337a93d1a8bb0ba364163742","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.9.tgz","fileCount":58,"integrity":"sha512-AJaKNWKsu2eu3CJrrRArTCm70IJOG/YnMFZ8/ernGatDxg9cv0GgzyKnnpkUxq9QkHN0llaZsV9Pkps4mKYQUg==","signatures":[{"sig":"MEQCIEDgKt8kDvUzDzsNTzYx5N9keonVGC/UVZkA37pPDtLxAiBjbAdyXCotuPaBGHUVGH9HVs/c7bNrdAOkeGuFBpkalg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":405782},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"dae184f5f977464281d3765c9ead86a75ff61946","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration; npm run test:openclaw","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:openclaw","test:unit":"vitest run","test:watch":"vitest","test:openclaw":"node tests/harness/run.mjs --openclaw","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"10.9.4","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.9_1774687570097_0.008888893221476568","host":"s3://npm-registry-packages-npm-production"}},"2.2.10":{"name":"shroud-privacy","version":"2.2.10","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.10","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"7fa2a74ed86142f058dd3eb24a81073d16cb3a0d","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.10.tgz","fileCount":58,"integrity":"sha512-bpn+L1dOOME2OFq67rUT10MedgVWk/rVl+WPBQzhgnc6UnObNtc4x2u3g4h5mzNm01/8PkzPVmgJ3E8j0WkQPw==","signatures":[{"sig":"MEUCIQCTD0/NG4YFbuZDkx2TXI53XQ6FWh3v0Z7w574ItGTy0QIgNb59MlUVVRUIq5mzZFNTgq9R8Mgvt/MU03BqNe0jGQY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":408552},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"c6855cd5712299557627c33510d829e1f9eb36d3","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-compat.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.10_1774818819150_0.5388792602758947","host":"s3://npm-registry-packages-npm-production"}},"2.2.11":{"name":"shroud-privacy","version":"2.2.11","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.11","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"bd6e3ef0ad370aaf137308c1b7e7ebd578d08a54","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.11.tgz","fileCount":84,"integrity":"sha512-9DmWYkCfqAjhL5aIfhOl+Gl8EnhWB7+IN3NrykGHH+VxXXmc2tuIP2kaRq9/gh2L3NrTDKCJp+/BRrV+L++Djw==","signatures":[{"sig":"MEYCIQC6NcQwUe5R2mYVKvNr7JMOF2pmnsvfDpVikLjo4TprgQIhAPV/TfU93VkK7atq26aUB3xsZkxwf1PkmlYceHuh3Hzb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":696550},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"8adbfbca07d16dd85d15505a132b7844c17f15de","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-compat.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.11_1774880533185_0.5274871726078167","host":"s3://npm-registry-packages-npm-production"}},"2.2.12":{"name":"shroud-privacy","version":"2.2.12","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.12","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"897658d117948f1ae8bef2d54224f3ffd4d466a2","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.12.tgz","fileCount":48,"integrity":"sha512-hZH+sVFbKRAck1xdRW1ILpFBsSpxv2fQhOK0XEpPBJi44Zar0ETFExhC5BE0QC7PIfW4JZSJNZKmguVzcjxMtA==","signatures":[{"sig":"MEUCIQD9Ics20l1ZEo2ITelDwO2/AWHJ7APz1cCaUq8mqUBevgIgeLt84mGVP8fTZhNpkOFEO3eDybsOjLdkwy2fSKAr2WA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":387727},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"8adbfbca07d16dd85d15505a132b7844c17f15de","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-compat.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"walterk78","email":"walter@keating.at"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.12_1775143506201_0.2627332748036033","host":"s3://npm-registry-packages-npm-production"}},"2.2.13":{"name":"shroud-privacy","version":"2.2.13","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.13","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"485dd3953b25a31c4d986f2ca13bebe81d43c694","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.13.tgz","fileCount":48,"integrity":"sha512-DmsO7bVcKJOw66riteof71E8ZdwRvBh+pyknywg8VYvFXZ5qPiuGYngLc3LK6GwgU88R2LnOV7veikZiPqDCUA==","signatures":[{"sig":"MEUCIQDTz04wbi8Hg5Dhpi7XYg0FgSm5jZbgEbUv4aPNSahoUgIgGAT7aeNRqrcAnaIVTKJtjYc+3kzI7nqcrMTQDgshgTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.2.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":404591},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"5b93b4307603b5477070e04bfc2f32c75b20148b","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs","test:docker:legacy":"bash compat/run-compat.sh latest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.13_1775405656472_0.2249219304256438","host":"s3://npm-registry-packages-npm-production"}},"2.2.14":{"name":"shroud-privacy","version":"2.2.14","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.14","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"3789a76dbedcfb63b8c7c193fa5507183376a4f8","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.14.tgz","fileCount":48,"integrity":"sha512-eIsAdmfRuA06I3Rf/5goLlVZIO8kQMKVU4+bxyiaKL5gNJGSTDf1keD0YqTnDDJTt1vQDNeDaCY6qVSWX6pbww==","signatures":[{"sig":"MEYCIQD7a1qgAMUgwY7Agcu0zD/ghsY03rViMoybhDy3rWaGcwIhAM0hzUZfUWvn/u0t0k3dEJ18/x/XHqICBgli2FUSeOXm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.2.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":404623},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"ddad6fbd8fb0de3dbc44b54173b7a34123447a6c","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs","test:docker:legacy":"bash compat/run-compat.sh latest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.14_1775420008623_0.41458766387058454","host":"s3://npm-registry-packages-npm-production"}},"2.2.15":{"name":"shroud-privacy","version":"2.2.15","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.15","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"aa40761192e1c0ece0b524e7848a38807bd4125b","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.15.tgz","fileCount":48,"integrity":"sha512-xzKWSGTuUDzXsVIY2Oi/C2tQXbujokezqxMl1sFAexf3iL34itFOUStYg+nePilABLj8WUKDFKTu0e41ajzeiA==","signatures":[{"sig":"MEUCIQDDwV5eHdnLt1Ymj/CXyyEdvz6uVupvc6LkLaLQ1zF4FwIgS4EmZdiMUQEvhv8/JiTwJbDZSQiZig8x9KW3llPlB7M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.2.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":404623},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"7bad7953f3c1e248c1ab98cc8ff5e82187e0b738","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs","test:docker:legacy":"bash compat/run-compat.sh latest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.15_1775420266025_0.3191674380742229","host":"s3://npm-registry-packages-npm-production"}},"2.2.16":{"name":"shroud-privacy","version":"2.2.16","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.16","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"ae7fb699c856e6efd475b2ad06b60ea16e96a711","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.16.tgz","fileCount":48,"integrity":"sha512-pfndZ3706JoPJvFmcwkvANK3apliDOTrz8/GPDQqZMb63/sgjNmEMl088U3506Tj52cBq+tK6DHcGHarYPtA/A==","signatures":[{"sig":"MEQCIE3hIWrh0HuSyCLM6mK/VD/M3DMN752/1zP2LyE55swFAiAUpQFYJRyzs8Rr2tVqPCxx+a0XaAKPKJiUYUlbA3MAiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.2.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":404623},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"f436ae63f8845b3ff20c221771e87ecff045a2df","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs","test:docker:legacy":"bash compat/run-compat.sh latest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.16_1775481630412_0.40058140064442593","host":"s3://npm-registry-packages-npm-production"}},"2.2.17":{"name":"shroud-privacy","version":"2.2.17","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.17","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"c33cf59b7a76e010d435f16810036204df7bc17f","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.17.tgz","fileCount":48,"integrity":"sha512-uOcqip7y1hejh7RIQ0I5Yc+uFATwfp+08s94vxlL4huhPkdc8lItmpX3w7D5Avlsm5z8xAjNTfr+Hol3PRerbw==","signatures":[{"sig":"MEYCIQDFLHMJzBVOBYV1Bo087TWThEqF4AEV7H1HvwwEbk1AXAIhAO68VnuB5Bs2PcydDbrwdpKyPS5xzvbyJudBPzMGZrKq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.2.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":406522},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"810a6cf33e5aa26dfd70aefcd792fab2146d8ca7","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs","test:docker:legacy":"bash compat/run-compat.sh latest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.17_1775548935322_0.9567525177607905","host":"s3://npm-registry-packages-npm-production"}},"2.2.18":{"name":"shroud-privacy","version":"2.2.18","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.18","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"d66cfbeec9631a129897eae13bf421c2fcfd170d","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.18.tgz","fileCount":48,"integrity":"sha512-vDY5akLWh86MkW0bH2MrAAID9SMJxcdg+shnR/NIDq0D3U90NBCPHYEPnvW3IW9ZrJPKxj/fAAPMLYmCnkFalA==","signatures":[{"sig":"MEYCIQDYnbmp0JFlHzwa4w8hdfugGVhudhaqdATuw1N1TA6TTQIhAN5Z+/8fRn2kMYI1zZPkVIMI1mTHdEv1PiwaDBeyl4qc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.2.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":406460},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"da330d886d135ca3b1535106589924a60c94733a","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.18_1775644568949_0.2401058266011058","host":"s3://npm-registry-packages-npm-production"}},"2.2.19":{"name":"shroud-privacy","version":"2.2.19","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.19","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"df157cc3936f9df1c01d5572ade85c56f0222bcc","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.19.tgz","fileCount":48,"integrity":"sha512-R+z4nWwdFLZt20NPWm2vb3tDK9LM4YVhq9CNyshMkZEzLgXQtoNK4sDFQxROCWqjT7Shj2OUnHgLeQsG+FAqlA==","signatures":[{"sig":"MEUCIBJ7bcrAcmVyO4JML4+rNUpEmjmiOyAh8gGfacvpLi8TAiEA7YoV0hk3yOChjG2eY4fPCp29ZxumCUV1npDkSoJqPsc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.2.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":406460},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"4ec3567b222af35f151cb40ad5a7514901864362","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.19_1775678925265_0.057811657804872185","host":"s3://npm-registry-packages-npm-production"}},"2.2.20":{"name":"shroud-privacy","version":"2.2.20","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.2.20","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"27aaa223d367e8eac4abac1e4db57068a875906e","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.2.20.tgz","fileCount":48,"integrity":"sha512-/cTpedNwKMe2VQHvXsberqKSPhNQEgvJAs/SLfxAX0JL9VL1kMDIlBtN2+MOR3dLaWcxY5N+CDQ/YGPay5aUtQ==","signatures":[{"sig":"MEQCIHEFh2AD+OgSBDZZktXJBHxn+BHN9hiYu9RJXSW5vcimAiBb8Rq/bd5yq1JeNTJ3PA6v0klVqLTnvJHWVRovU5dKGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.2.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":406472},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"a927fc71cc67c4f0dccb6e27f96a38130227ccb4","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.2.20_1775738337906_0.06982870000200592","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"shroud-privacy","version":"2.3.0","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.3.0","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"957576ffcfb7f7ca1dc1d9d426907b888f0ff756","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.3.0.tgz","fileCount":50,"integrity":"sha512-9o7Vylo4zdGJEMt9Rwy31DJSwTnqI91/3BQwaLDRF1ltnJ7qF/eoNLBBsVg/YOB9kVxv6hQ/yrmaM6vg4UqPlA==","signatures":[{"sig":"MEUCIHgcDTeQXmZaRlV88aYWDWsU+Jkn2BTc8C+hOWmiUXHhAiEA5cvmeXDMklcNJgNG86wsVjB+NlL3VBVe7bGl6HxNsD4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":434034},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"d6835590c40e0b15e051314b168b516bceaf4fd4","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.3.0_1775769447953_0.4661781473275639","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"shroud-privacy","version":"2.3.1","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.3.1","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"aa4f12e32642d0f8d21c116269ce2165bcd946d3","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.3.1.tgz","fileCount":50,"integrity":"sha512-XFRhxN4/2IiNYOrWsV+LEDwbAZh5UBvunOb/B15JVTdrNvwk6aySIHyTH6Cm0WgG2YNBC32qax8Rf0F+f+LJsw==","signatures":[{"sig":"MEYCIQDhQMpJsdR7zh60d6o2FtSkzYeNWzI6BDgNO24WPuDzwwIhAKvufJow1A1eLLSkmpGrplS4BMUNrgC9dXTA6pvBPw43","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":434529},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"143588e31d19f1397614fb726548b20297e35ca9","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.3.1_1775812903203_0.5444181463510982","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"shroud-privacy","version":"2.4.0","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.4.0","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"134a34494c75f919b55e2000da363bf28fda6b1d","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.4.0.tgz","fileCount":50,"integrity":"sha512-4RESjrwNEpPvNJ2HA1+E6w50iqaju+HaSwxtn8EybOd09NxnMrn18N2yfenf1teRZv3WIpLnfY0vUCgykCn/zw==","signatures":[{"sig":"MEYCIQD/fg3H9ODSRGtu8Fl/uFccCValjyE/Igbri6VoaLkFIwIhALsDmQyytz2/J32dppA+n+J6AcsANxWFJumtbOl3ZWuB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":467684},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"16db7afe104704c9119d50ba00cff88d33ec9a97","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.4.0_1775816831427_0.578908227728441","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"shroud-privacy","version":"2.5.0","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.5.0","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"977af6b758d5191b6d8d3cdeb5dd8ae5d9e26f39","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.5.0.tgz","fileCount":52,"integrity":"sha512-AEP5cJFG7uYWN0RYbwpEAGaEfFBluU0NqklH/BEHXt08sPyC71G9QRP/NO4tr8CQ70RnDoqzm1QcgmKjB71pwA==","signatures":[{"sig":"MEUCIHfN8bwAJXItNTfKMymunu1otkChnUYu8xIgzSLFuj/PAiEAwg/iC/MBQVgk4X/2QsYoN/EZ5P5NXNJUQm1xHj932jE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":480854},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"ee8672c229f8102bd2066f9668705658330e55fd","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.5.0_1776004979033_0.579262262152417","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"shroud-privacy","version":"2.5.1","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.5.1","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"1ee3aae5aedd408cd0ffad2444cc519796cdcceb","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.5.1.tgz","fileCount":52,"integrity":"sha512-PVZkKRk0ioEXQowf55pSUBhb/bt8TWfB0KR3g+qGSYWSwbx8lhiWZ0wdJkmIGMiFY0SdpNFVIenxAsy7RyCWhA==","signatures":[{"sig":"MEYCIQDj+ulcHhgk0JwgvFHhXApVoZH1QZ/8flRpEV4b9ksUlQIhAJTfgTUiE7n0Dqp1u5Vx7lfHkVmX6tGlnXLRBbuwp1YZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":481344},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"1274c05ea0a584b5a9017cc073dc872a5aaa64ff","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.5.1_1776134840748_0.9393735363178528","host":"s3://npm-registry-packages-npm-production"}},"2.5.2":{"name":"shroud-privacy","version":"2.5.2","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.5.2","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"85bcf9cd7f931a2137b0a571dc440bc9142cef76","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.5.2.tgz","fileCount":52,"integrity":"sha512-kgAGqC77flBakM3/pv4Ps3sQPOxxrVH7ndkHkYiwuNwEZq0XowYPuZHlzf13vJYheeZ6B0fm68dV9knqKngdxA==","signatures":[{"sig":"MEUCIQDMcaafswH3KLI+qyIplAUdrqCz/by35VJ8OztNHEpNLQIgSXvm8l58SGHZdYN8IjbwxwZnSs/TMmkrv6ryUdApub0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":481344},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"45892fed6d1578b337f4bd93d20855ad74ffaa16","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.5.2_1776135840964_0.8628992085264686","host":"s3://npm-registry-packages-npm-production"}},"2.5.3":{"name":"shroud-privacy","version":"2.5.3","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.5.3","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"8ec0352a46379a81377c0d629bdb2db4d69642b8","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.5.3.tgz","fileCount":52,"integrity":"sha512-mACFHJJ6fJ0Ve7z3Jebfr96/keFNa6U2OAUcQY1sHJ4Ltg6ft4bkCqHuYTdDBAdvJXALZYGnVoHJx5x1X+3Z5Q==","signatures":[{"sig":"MEQCIE2udRL5Vc72zsRiXVZZ/xUC0xsQMNWHIQzK44QmC0nGAiBfyEVKYAtt6K/QS47igE0zGnH9ajXoDekApbPKKoKung==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":481344},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"8e5f155d3e8da7fa098742b96087d39c67cc61df","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.5.3_1776136933103_0.9633795199239741","host":"s3://npm-registry-packages-npm-production"}},"2.5.4":{"name":"shroud-privacy","version":"2.5.4","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.5.4","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"a656f93de67a5db807f9506ebcd81cc5c70afe71","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.5.4.tgz","fileCount":52,"integrity":"sha512-bYnJClztqDDoC63yTj0GxhiHLjrKG6FZS1Tcf3L0Bb2kKeg1QCHniTB3JRxVAT/EWGWNKTwrUzI0yOgJ7wMpRQ==","signatures":[{"sig":"MEQCIEoldecoQcgrFIit3xcJqIX5QOkhfl4H5NTeXMsPdYdpAiBF6peIU6B7d0x+lgxFZBjn96oaz3q89mTJ13UC5o9hVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.5.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":481344},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"54c9f32ea8e162385fb94302c81297d096b10563","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.5.4_1776137608543_0.04967263415585643","host":"s3://npm-registry-packages-npm-production"}},"2.5.5":{"name":"shroud-privacy","version":"2.5.5","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.5.5","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"a1b4a04bf53a752a38737a91b2f059bc4fb366b7","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.5.5.tgz","fileCount":52,"integrity":"sha512-ENE3DB4nodY8R/d9xYJnEi0mPVNx8DSQA7DGMhIPaXixQsQyrQ1hgB7v6LbFyNXHp1TDcpYNASaYOd9WAhJNFA==","signatures":[{"sig":"MEUCIQCMfq7Z1zv9c4Uf5vccrkNpy+0+5rdHMofNZFKuX+N3BAIgSs3W3p4230/mSyTXl4eT9+9R4G/0KIoy0oB7bSHv4kI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.5.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":490340},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"a2c92c020c28163651cd03a6b3c7ea82a3855d4c","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.5.5_1776177717617_0.5237741198176717","host":"s3://npm-registry-packages-npm-production"}},"2.5.6":{"name":"shroud-privacy","version":"2.5.6","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","_id":"shroud-privacy@2.5.6","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"dist":{"shasum":"545b92e43069c7ded108c2fbd09396ad3f8d8906","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.5.6.tgz","fileCount":63,"integrity":"sha512-ypRoirqM+Ul0vXi9qp+Ofbuexj8/r6B8I+qtMbp1DoVfm+JA4uwgWaFPfqVbiw5rIFbUSVvBph4yFNp7PV/VKQ==","signatures":[{"sig":"MEYCIQCWvuR2q7ZKgRAOFfmf8vy/R+ainoSmVd0rvVvIKpP9iAIhAMOFTZjH3wZGVUqXegDrLPeAEU7+j8gQR8hRpB7yGszz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.5.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":543856},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"2426b48a552627fddbcdd354c5f925a3cecc789f","scripts":{"lint":"tsc --noEmit","test":"npm run test:unit && npm run test:integration","build":"tsc","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:unit":"vitest run","test:watch":"vitest","test:docker":"bash compat/run-e2e.sh latest","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build","test:integration":"node tests/harness/run.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/wkeything/shroud.git","type":"git"},"_npmVersion":"11.12.1","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0","typescript":"^5.4","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/shroud-privacy_2.5.6_1776284684275_0.46878037517704807","host":"s3://npm-registry-packages-npm-production"}},"2.5.7":{"name":"shroud-privacy","version":"2.5.7","description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","bin":{"shroud-stats":"scripts/shroud-stats.mjs"},"scripts":{"build":"tsc","test":"npm run test:unit && npm run test:integration","test:unit":"vitest run","test:integration":"node tests/harness/run.mjs","test:docker":"bash compat/run-e2e.sh latest","test:all":"npm run test:unit && npm run test:integration && npm run test:docker","test:watch":"vitest","lint":"tsc --noEmit","prepublishOnly":"npm run lint && npm run test:unit && npm run test:integration && npm run build"},"keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"author":{"name":"wkeything"},"license":"Apache-2.0","publishConfig":{"access":"public"},"devDependencies":{"typescript":"^5.4","vitest":"^2.0","@types/node":"^20"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"type":"git","url":"git+https://github.com/wkeything/shroud.git"},"homepage":"https://github.com/wkeything/shroud#readme","bugs":{"url":"https://github.com/wkeything/shroud/issues"},"gitHead":"09d3e6cf95616a95793848f653598d689cf585b8","_id":"shroud-privacy@2.5.7","_nodeVersion":"24.14.1","_npmVersion":"11.12.1","dist":{"integrity":"sha512-12XlBxfVET/qJ7LaokuIJp2jSJQ9v6EW561lpjMPRPaknEp7x6/byAlrOkPlDdGZmQ1MVVm81X6KkQQKtdseKQ==","shasum":"23c40a53f14106c017aeb7c692bacd93efa70ef7","tarball":"https://registry.npmjs.org/shroud-privacy/-/shroud-privacy-2.5.7.tgz","fileCount":63,"unpackedSize":544322,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shroud-privacy@2.5.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAY59nRjxKLiKwRbnjZ1bL1qLQBJ8hKxPCJqAx5y0F7bAiADnJfe0UMTBE7TFC5fVsqjyhuJlv6iIudMY3/PHVx/gw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6054423-1e79-42a4-a0ff-32274dc96aec"}},"directories":{},"maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shroud-privacy_2.5.7_1776400339146_0.5329132040849363"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-23T11:18:09.187Z","modified":"2026-04-17T04:32:19.624Z","2.0.0":"2026-03-23T11:18:09.461Z","2.0.1":"2026-03-23T11:50:17.776Z","2.0.2":"2026-03-23T12:00:43.841Z","2.0.3":"2026-03-23T12:03:53.097Z","2.0.4":"2026-03-23T12:11:30.838Z","2.0.5":"2026-03-23T12:35:52.132Z","2.0.6":"2026-03-23T13:47:20.946Z","2.0.7":"2026-03-23T15:18:01.944Z","2.0.8":"2026-03-23T19:32:19.894Z","2.0.9":"2026-03-23T19:45:48.376Z","2.0.10":"2026-03-23T20:14:46.086Z","2.0.12":"2026-03-23T20:33:41.139Z","2.0.13":"2026-03-23T20:47:23.680Z","2.0.14":"2026-03-23T20:55:10.968Z","2.0.16":"2026-03-24T06:36:39.702Z","2.0.18":"2026-03-24T09:52:54.884Z","2.0.19":"2026-03-24T11:41:14.051Z","2.0.20":"2026-03-25T18:58:57.056Z","2.1.0":"2026-03-26T12:55:21.728Z","2.2.0":"2026-03-26T18:58:45.363Z","2.2.1":"2026-03-26T23:06:37.502Z","2.2.2":"2026-03-26T23:38:26.990Z","2.2.3":"2026-03-27T00:53:24.377Z","2.2.4":"2026-03-27T09:53:05.198Z","2.2.5":"2026-03-27T10:29:38.242Z","2.2.6":"2026-03-27T10:41:02.147Z","2.2.7":"2026-03-28T00:01:53.627Z","2.2.8":"2026-03-28T01:15:17.935Z","2.2.9":"2026-03-28T08:46:10.262Z","2.2.10":"2026-03-29T21:13:39.331Z","2.2.11":"2026-03-30T14:22:13.394Z","2.2.12":"2026-04-02T15:25:06.395Z","2.2.13":"2026-04-05T16:14:16.791Z","2.2.14":"2026-04-05T20:13:28.766Z","2.2.15":"2026-04-05T20:17:46.201Z","2.2.16":"2026-04-06T13:20:30.564Z","2.2.17":"2026-04-07T08:02:15.481Z","2.2.18":"2026-04-08T10:36:09.120Z","2.2.19":"2026-04-08T20:08:45.449Z","2.2.20":"2026-04-09T12:38:58.089Z","2.3.0":"2026-04-09T21:17:28.093Z","2.3.1":"2026-04-10T09:21:43.339Z","2.4.0":"2026-04-10T10:27:11.578Z","2.5.0":"2026-04-12T14:42:59.192Z","2.5.1":"2026-04-14T02:47:20.976Z","2.5.2":"2026-04-14T03:04:01.102Z","2.5.3":"2026-04-14T03:22:13.298Z","2.5.4":"2026-04-14T03:33:28.701Z","2.5.5":"2026-04-14T14:41:57.791Z","2.5.6":"2026-04-15T20:24:44.456Z","2.5.7":"2026-04-17T04:32:19.363Z"},"bugs":{"url":"https://github.com/wkeything/shroud/issues"},"author":{"name":"wkeything"},"license":"Apache-2.0","homepage":"https://github.com/wkeything/shroud#readme","keywords":["privacy","pii","obfuscation","llm","redaction","ai-agent","openclaw","openclaw-plugin","app-protocol"],"repository":{"type":"git","url":"git+https://github.com/wkeything/shroud.git"},"description":"Privacy and infrastructure protection for AI agents — detects sensitive data (PII, network topology, credentials, OT/SCADA) and replaces with deterministic fakes before anything reaches the LLM.","maintainers":[{"name":"walterk78","email":"walter@keating.at"}],"readme":"<p align=\"center\">\n  <img src=\"logo.png\" alt=\"Shroud\" width=\"160\" height=\"160\">\n</p>\n\n<h1 align=\"center\">Shroud</h1>\n\n<p align=\"center\">\n  <strong>Privacy and infrastructure protection for AI agents.</strong><br>\n  Prevents sensitive data from reaching LLMs — PII, network topology, credentials, OT/SCADA identifiers, and internal infrastructure details are replaced with deterministic fakes before any API call leaves the process. Responses are deobfuscated transparently so users and tools see real values.\n</p>\n\n<p align=\"center\">\n  <a href=\"#install\">Install</a> &middot;\n  <a href=\"#why-shroud\">Why Shroud</a> &middot;\n  <a href=\"#configure\">Configure</a> &middot;\n  <a href=\"docs/integrations.md\">Integrations</a> &middot;\n  <a href=\"#agent-privacy-protocol-app\">APP Protocol</a> &middot;\n  <a href=\"CHANGELOG.md\">Changelog</a>\n</p>\n\n> Apache 2.0 &middot; Zero runtime dependencies &middot; Anthropic + OpenAI + Google supported &middot; Prompt-caching friendly &middot; Works with [OpenClaw](https://openclaw.ai), [Hermes Agent](https://github.com/nousresearch/hermes-agent), or any agent via [APP](#agent-privacy-protocol-app)\n\n**Detailed integration reference:** [`docs/integrations.md`](docs/integrations.md)\n\n---\n\n## Why Shroud\n\nFrontier LLMs are transformative for infrastructure operations — network troubleshooting, incident response, change planning, compliance audits. But every prompt you send is an API call to a third party. Without protection, you're transmitting:\n\n- **Network topology** — subnets, VLANs, BGP ASNs, OSPF areas, interface descriptions, ACL names, route-maps\n- **Device identities** — hostnames, management IPs, SNMP communities, firmware versions\n- **Credentials** — API keys, connection strings, PSKs, enable secrets, TACACS/RADIUS shared keys\n- **OT/SCADA identifiers** — Modbus addresses, OPC-UA endpoints, IEC 61850 IED names, historian tags, BACnet device IDs\n- **Customer PII** — emails, phone numbers, national IDs, credit cards, physical addresses\n- **Internal URLs** — wiki pages, Jira tickets, admin portals, API endpoints\n\nShroud sits between your agent and the LLM. It detects all of the above (130+ entity types), replaces each with a deterministic format-preserving fake, and reverses the mapping on the way back. The LLM reasons over realistic-looking data. Your real infrastructure stays private.\n\n### Who needs this\n\n| Sector | What leaks without Shroud |\n|--------|--------------------------|\n| **Telecoms & ISPs** | MPLS topologies, BGP peering, customer CPE configs, circuit IDs |\n| **Energy & utilities** | SCADA/ICS endpoints, substation IPs, OPC-UA tags, DNP3 addresses |\n| **Transport & aviation** | ATC sector IDs, NAV frequencies, signalling network topology |\n| **Banking & finance** | Internal API endpoints, database connection strings, customer PII |\n| **Healthcare** | Patient identifiers, internal system hostnames, API credentials |\n| **Government & defence** | Classified network segments, device inventories, operational IPs |\n| **Any enterprise** | Internal URLs, credentials, employee PII, customer data |\n\n### Regulatory context\n\nIf you process personal data of EU residents, **GDPR Article 32** requires \"appropriate technical measures\" to protect it. Sending unredacted PII to a third-party LLM API is a data transfer — Shroud ensures detected PII never leaves your process. Similar obligations exist under CCPA, HIPAA, PCI-DSS, and sector-specific regulations (NIS2, NERC CIP, IEC 62443).\n\nShroud does not guarantee compliance — regex-based detection has limitations (see [SECURITY.md](SECURITY.md)). But it is a meaningful technical control that reduces exposure.\n\n---\n\n## What it does\n\n1. **Detects** 130+ entity types: emails, IPs, phones, API keys, hostnames, SNMP communities, BGP ASNs, credit cards, SSNs, file paths, URLs, person/org/location names, VLANs, route-maps, ACLs, OSPF IDs, IBANs, JWTs, PEM certs, GPS coordinates, ICS/SCADA identifiers, dates of birth, medical record numbers (MRN/NPI/DEA), bank accounts (routing/sort code/SWIFT), tax IDs (EIN/UTR), passport numbers, driver's licenses, court case/docket/patent numbers, cryptocurrency addresses (Ethereum/Bitcoin), AWS ARNs, vendor-specific secrets (Cisco, Juniper, Palo Alto, Check Point, Fortinet, F5, Arista), and custom regex patterns.\n2. **Replaces** each value with a deterministic fake (same input + key = same fake every time). Fakes are format-preserving: IPv4 stays in CGNAT range (`100.64.0.0/10`), IPv6 uses ULA range (`fd00::/8`), emails keep `@domain` structure, credit cards pass Luhn, etc.\n3. **Passes through public URLs** — external URLs (arxiv.org, docs.stripe.com, etc.) are not obfuscated. Shroud resolves FQDNs via DNS: public IPs pass through, RFC 1918 / NXDOMAIN / internal IPs are obfuscated. Well-known platforms (GitHub, YouTube, Wikipedia, etc.) are always passed through.\n4. **Deobfuscates** LLM responses and tool parameters so the user sees real values and tools receive real arguments.\n5. **Audit logs** every event with counts, categories, char deltas, and optional proof hashes — never logging raw sensitive values.\n6. **Preserves prompt caching.** Obfuscation is deterministic — same input + same key = same output every turn. The system prompt prefix stays identical across turns, so provider-side prompt caching (Anthropic, OpenAI, Bedrock) works normally. No cache-busting, no extra token costs.\n\n### Hook lifecycle\n\n| Hook | Direction | What happens |\n|------|-----------|-------------|\n| `globalThis.fetch` intercept | User → LLM | Obfuscate all outbound LLM API requests; deobfuscate SSE responses per content block |\n| `before_prompt_build` | User → LLM | Warm DNS cache for URL classification; pre-seed mapping store |\n| `before_message_write` | Any → History | Deobfuscate assistant messages for transcript; re-obfuscate on next turn |\n| `before_tool_call` | LLM → Tool | Deobfuscate tool parameters + track tool chain depth |\n| `tool_result_persist` | Tool → History | Obfuscate tool results before storing |\n| `message_sending` | Agent → User | Deobfuscate outbound messages (backup — fetch intercept handles primary deob) |\n| `globalThis.__shroudStreamDeobfuscate` | LLM → Agent | Streaming event deobfuscation hook |\n| `globalThis.__shroudDeobfuscate` | Agent → Channel | Global deobfuscation hook — called by OpenClaw before ANY channel send |\n\n> **How it works:** Shroud intercepts ALL outbound LLM API calls (Anthropic, OpenAI, Google, any provider) at the `fetch` level and obfuscates detected entities in every message — including assistant history, Slack `<mailto:>` markup, and OpenAI Responses / Codex `input_text` blocks — before it leaves the process. On the response side, SSE streaming is deobfuscated per content block with buffered flushing, and OpenAI Responses `output_text` blocks are treated the same as plain `text` blocks. Every delivery path (Slack, WhatsApp, TUI, Telegram, Discord, Signal, web) gets real text automatically. Zero host patches required.\n\n> **Requires OpenClaw 2026.3.24 or later.**\n\n### OpenClaw support policy\n\n- **Formal minimum supported version:** `2026.3.24` (from `openclaw.plugin.json` `minOpenClawVersion`).\n- **Release validation matrix (this release):**\n  - **Baseline:** `2026.3.28` (includes WhatsApp E2E path)\n  - **Latest-at-release:** `2026.4.14` (Slack E2E pass)\n- **Latest caveat:** on OpenClaw builds where WhatsApp provisioning via `channels add` is unsupported, latest-focused compat runs skip WhatsApp E2E and validate Slack E2E.\n- **Source of truth for current matrix:** `docs/ci-current-state.md` and `CHANGELOG.md`.\n\n---\n\n## Install\n\n### OpenClaw (2026.3.24+)\n\n```bash\nopenclaw --version    # ensure 2026.3.24+\nopenclaw plugins install shroud-privacy\n```\n\nConfigure in `~/.openclaw/openclaw.json` under `plugins.entries.\"shroud-privacy\".config`. No OpenClaw file modifications needed — Shroud uses runtime interception only.\n\n### Hermes Agent\n\n```bash\nhermes plugins install wkeything/shroud\n```\n\nThat's it. The plugin auto-builds on first session start (requires Node.js). All LLM traffic is obfuscated transparently — no Hermes configuration changes needed.\n\nPer-tool field scoping is enabled by default, reducing false positives on structural fields (IDs, hashes, timestamps). Works with all Hermes-supported providers (OpenRouter, Anthropic, OpenAI, z.ai, local models).\n\n**Config-as-code** is supported — edit `~/.shroud/shroud.config.json` to customize detection rules, field scoping, and confidence thresholds. Changes hot-reload within 2 seconds, no restart needed. The config file is shared with OpenClaw — edits apply to both platforms.\n\nVerify after a conversation:\n```bash\ncat ~/.hermes/shroud-stats.json | python3 -m json.tool\n```\n\n### Claude Code\n\n```bash\nnpm install shroud-privacy\n```\n\nAdd to your project's `.mcp.json` or `~/.claude/.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"shroud\": {\n      \"command\": \"node\",\n      \"args\": [\"node_modules/shroud-privacy/clients/claude-code/shroud-mcp.mjs\"]\n    }\n  }\n}\n```\n\nThat's it — the MCP server auto-starts a dedicated APP daemon on `/tmp/shroud-claude-mcp.sock` and writes Claude MCP session state under `OPENCLAW_STATE_DIR` (or `~/.openclaw`) as `shroud-claude-mcp-sessions.json`. Claude gains six tools: `shroud_obfuscate`, `shroud_deobfuscate`, `shroud_status`, `shroud_scan_tool`, `shroud_configure`, and `shroud_reset`.\n\nIf you want automatic tool-boundary obfuscation/deobfuscation instead of explicit MCP tools, use the shipped Claude hooks bridge in `clients/claude-code/shroud-bridge.mjs` together with `clients/claude-code/hooks.json`.\n\n### Codex\n\n```bash\nnpm install shroud-privacy\ncodex mcp add shroud -- node node_modules/shroud-privacy/clients/codex/shroud-mcp.mjs\n```\n\nCodex uses the same six MCP tools as Claude, but on a separate APP daemon and socket: `/tmp/shroud-codex-mcp.sock`. Its APP session file defaults to `shroud-codex-mcp-sessions.json` under `OPENCLAW_STATE_DIR` or `~/.openclaw`.\n\nThe Codex MCP wrapper also auto-starts `clients/codex/shroud-bridge.mjs` on the host. That bridge watches Codex's local `~/.codex/history.jsonl` and writes `shroud-codex-cli-sessions.json` into the shared OpenClaw state dir, so Codex call/session counters stay current even when Codex is not actively invoking Shroud MCP tools. Set `SHROUD_CODEX_BRIDGE=0` only if you explicitly want to disable that behavior.\n\n### Any agent (via APP)\n\nThe **Agent Privacy Protocol** (APP) lets any AI agent add privacy and infrastructure protection — no OpenClaw required. Shroud ships with an APP server and a Python client.\n\n```bash\nnpm install shroud-privacy\n```\n\n**Python:**\n\n```python\nfrom shroud_client import ShroudClient\n\nwith ShroudClient() as shroud:\n    # Before sending to LLM\n    result = shroud.obfuscate(\"Contact admin@acme.com about 10.1.0.1\")\n    send_to_llm(result.text)  # \"Contact user@example.net about 100.64.0.12\"\n\n    # After receiving from LLM\n    restored = shroud.deobfuscate(llm_response)\n    show_to_user(restored.text)  # original values restored\n```\n\nCopy `clients/python/shroud_client.py` into your project, or import it directly from the npm install path. Requires Node.js on the PATH.\n\nFor direct APP clients such as NCG, call `identify` first if you want per-agent session counters, then `obfuscate` / `deobfuscate`, and optionally wrap tool execution with `tool_call` / `tool_result` for telemetry.\n\n**Any language:**\n\nSpawn the APP server and talk JSON-RPC over stdin/stdout:\n\n```bash\nnode node_modules/shroud-privacy/app-server.mjs node_modules/shroud-privacy/dist\n```\n\nHandshake (server writes on startup):\n```json\n{\"app\":\"1.0\",\"engine\":\"shroud\",\"version\":\"2.2.9\",\"capabilities\":[\"obfuscate\",\"deobfuscate\",\"batch\",\"stats\",\"health\",\"configure\",\"audit\",\"partitions\"]}\n```\n\nObfuscate:\n```json\n> {\"id\":1,\"method\":\"obfuscate\",\"params\":{\"text\":\"Contact admin@acme.com\"}}\n< {\"id\":1,\"result\":{\"text\":\"Contact user@example.net\",\"entityCount\":1,\"categories\":{\"email\":1},\"modified\":true}}\n```\n\nDeobfuscate:\n```json\n> {\"id\":2,\"method\":\"deobfuscate\",\"params\":{\"text\":\"Contact user@example.net\"}}\n< {\"id\":2,\"result\":{\"text\":\"Contact admin@acme.com\",\"replacementCount\":1,\"modified\":true}}\n```\n\nOther methods: `reset`, `stats`, `health`, `configure`, `shutdown`.\n\n### From source (development)\n\n```bash\ngit clone https://github.com/wkeything/shroud.git\ncd shroud\nnpm install && npm run build\nopenclaw plugins install --path .\nopenclaw gateway restart\n```\n\nFor a local Docker-backed OpenClaw install, use the repo deploy script instead. It builds the checkout, runs the key regression tests, syncs the packaged plugin into `~/.openclaw/extensions/shroud-privacy`, clears the Node compile cache, and recreates `openclaw-primary-gateway` when `~/.openclaw/compose/docker-compose.primary.yml` is present:\n\n```bash\ngit clone https://github.com/wkeything/shroud.git\ncd shroud\nnpm install\n./deploy-local.sh\n```\n\n## Updating\n\n```bash\nopenclaw plugins remove shroud-privacy\nopenclaw plugins install shroud-privacy\nopenclaw gateway restart\n```\n\n---\n\n## Configure\n\nEdit `~/.openclaw/openclaw.json` under `plugins.entries.\"shroud-privacy\".config`:\n\n```jsonc\n\"shroud-privacy\": {\n  \"enabled\": true,\n  \"config\": {\n    \"auditEnabled\": true           // audit log on — see what Shroud is doing\n    // \"minConfidence\": 0.0              // catch everything (default)\n    // \"secretKey\": \"\"                   // auto-generated if empty\n    // \"persistentSalt\": \"\"              // set for cross-session consistency\n    // \"canaryEnabled\": false            // data leakage tracking (opt-in)\n  }\n}\n```\n\nRestart the gateway after config changes:\n\n```bash\nopenclaw gateway restart\n```\n\n### Safe defaults\n\nOut of the box, Shroud:\n- Auto-generates a secret key (per-session unless you set `secretKey`)\n- Detects all entity categories at confidence >= 0.0\n- Passes through public URLs (DNS-verified) and well-known platforms\n- Logs audit lines (counts + categories) but **not** proof hashes or fake samples\n- Never logs raw values, real-to-fake mappings, or original text\n\n### Config reference\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `secretKey` | string | auto | HMAC secret for deterministic mapping |\n| `persistentSalt` | string | `\"\"` | Fixed salt for cross-session consistency |\n| `minConfidence` | number | `0.0` | Minimum detector confidence (0.0-1.0) |\n| `allowlist` | string[] | `[]` | Values to never obfuscate |\n| `denylist` | string[] | `[]` | Values to always obfuscate |\n| `canaryEnabled` | boolean | `false` | Inject tracking tokens for leak detection |\n| `canaryPrefix` | string | `\"SHROUD-CANARY\"` | Prefix for canary tokens |\n| `auditEnabled` | boolean | `false` | Enable audit logging |\n| `verboseLogging` | boolean | `false` | Alias for `auditEnabled` |\n| `auditLogFormat` | `\"human\"` \\| `\"json\"` | `\"human\"` | Audit output format |\n| `auditIncludeProofHashes` | boolean | `false` | Include salted SHA-256 proof hashes |\n| `auditHashSalt` | string | `\"\"` | Salt for proof hashes |\n| `auditHashTruncate` | number | `12` | Truncate proof hashes to N hex chars |\n| `auditMaxFakesSample` | number | `0` | Include up to N fake values in audit (0 = off) |\n| `customPatterns` | array | `[]` | User-defined regex detection patterns |\n| `detectorOverrides` | object | `{}` | Override built-in rules: disable or change confidence per rule name |\n| `maxToolDepth` | number | `10` | Max nested tool call depth before warning |\n| `redactionLevel` | `\"full\"` \\| `\"masked\"` \\| `\"stats\"` | `\"full\"` | Output mode: fake values, partial masking, or category placeholders |\n| `dryRun` | boolean | `false` | Detect entities but don't replace (testing mode) |\n| `maxStoreMappings` | number | `0` | Max mapping store size with LRU eviction (0 = unlimited) |\n| `fieldScoping` | object | — | Per-tool field scoping and per-agent category exemptions (see below) |\n\n> **Env var overrides:** `SHROUD_SECRET_KEY` and `SHROUD_PERSISTENT_SALT` override their respective config keys (priority: env var > plugin config > default).\n\n### Per-tool field scoping\n\nBy default Shroud scans every string field in every message. This catches everything but produces false positives — file paths agents need, config values, UUIDs matching credit card patterns.\n\nField scoping narrows what gets scanned. Add a `fieldScoping` block to `shroud.config.json`:\n\n```jsonc\n{\n  \"fieldScoping\": {\n    \"toolFields\": {\n      \"Read\":     { \"scanFields\": [\"content\", \"text\"] },\n      \"Bash\":     { \"scanFields\": [\"output\", \"stdout\", \"stderr\"] },\n      \"gmail_*\":  { \"scanFields\": [\"subject\", \"body\", \"snippet\", \"from\", \"to\"] },\n      \"github_*\": { \"scanFields\": [\"title\", \"body\", \"description\", \"comment\"] }\n    },\n    \"neverScanFields\": [\"id\", \"created_at\", \"updated_at\", \"sha\", \"hash\", \"ref\", \"type\", \"status\"],\n    \"defaultScanFields\": []\n  }\n}\n```\n\n**`toolFields`** maps tool name patterns (wildcards `*` `?` supported) to the fields that should be scanned in their results. Unmatched tools fall back to `defaultScanFields` — set it to `[]` to scan everything for unknown tools (safe default).\n\n**`neverScanFields`** lists structural fields that never contain user-generated content. These are skipped regardless of tool.\n\nHot-reloadable. No config = scan everything (backward compatible).\n\n### Detection rules as code (hot-reload)\n\nShroud auto-generates a JSONC config file on first run containing every built-in detection rule:\n\n```\n~/.shroud/shroud.config.json\n```\n\nThe file is fully editable. Changes hot-reload within 2 seconds — no gateway restart needed.\n\n**Priority:** env vars > config file > plugin config > defaults.\n\n#### Override a built-in rule\n\nChange the regex, confidence, or category of any rule:\n\n```jsonc\n{\n  \"rules\": {\n    \"email\": { \"pattern\": \"\\\\b[\\\\w.+-]+@[\\\\w-]+\\\\.[a-z]{2,}\\\\b\", \"confidence\": 0.99 }\n  }\n}\n```\n\n#### Disable a rule\n\n```jsonc\n{\n  \"rules\": {\n    \"phone_us\": { \"enabled\": false },\n    \"gps_coordinate\": { \"enabled\": false }\n  }\n}\n```\n\n#### Add a custom rule\n\n```jsonc\n{\n  \"rules\": {\n    \"internal_ticket\": {\n      \"pattern\": \"\\\\bTICK-\\\\d{6}\\\\b\",\n      \"category\": \"custom\",\n      \"confidence\": 0.9\n    }\n  }\n}\n```\n\n#### Rule format\n\nEach rule in the `rules` object supports:\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `pattern` | string | Regex pattern (required for new rules, optional for overrides) |\n| `category` | string | Entity category: `email`, `ip_address`, `phone`, `hostname`, `network_credential`, `custom`, etc. |\n| `confidence` | number | Detection confidence 0.0-1.0 (filtered by `minConfidence`) |\n| `enabled` | boolean | Set to `false` to disable a rule |\n\n#### Config manager features\n\n| Feature | Detail |\n|---------|--------|\n| Format | JSONC (JSON with `//` and `/* */` comments) |\n| Auto-create | Config file generated on first run with all built-in rules |\n| Watch interval | 2 seconds |\n| History depth | 50 versions (commit/rollback via dashboard API) |\n| Restart-only fields | `secretKey`, `persistentSalt`, `dashboardEnabled`, `dashboardPort`, `maxStoreMappings` — logged as warnings, not applied until restart |\n\n> **Legacy:** `detectorOverrides` and `customPatterns` in `openclaw.json` still work. The `rules` config is the preferred way — it replaces both.\n\n---\n\n## URL handling\n\nShroud distinguishes between internal and external URLs:\n\n- **External URLs pass through.** When Shroud detects a URL, it checks the FQDN against a DNS cache populated in the `before_prompt_build` hook. If the domain resolves to a public IP, the URL is not obfuscated — the LLM needs to see real URLs for tool calls like `fetch` and `web_search`. Well-known platforms (GitHub, YouTube, Wikipedia, Stack Overflow, npm, PyPI, etc.) always pass through regardless of DNS.\n\n- **Internal URLs are obfuscated.** Domains that resolve to RFC 1918 addresses (10.x, 172.16-31.x, 192.168.x), CGNAT, link-local, loopback, or that fail DNS resolution (NXDOMAIN, timeout) are treated as internal infrastructure and obfuscated.\n\n- **DNS cache miss = obfuscate.** If the FQDN hasn't been resolved yet (first message in a session, DNS timeout), the URL is obfuscated as a safe default. The cache warms on each turn, so subsequent mentions of the same domain will pass through if it's public.\n\n| URL | Resolves to | Action |\n|-----|-------------|--------|\n| `https://arxiv.org/abs/2301.12345` | 151.101.1.42 (public) | Pass through |\n| `https://docs.stripe.com/api` | 52.x.x.x (public) | Pass through |\n| `https://wiki.internal.corp/runbooks` | 10.0.0.50 (RFC 1918) | Obfuscate |\n| `https://jira.mycompany.net/issue/123` | 172.16.1.10 (RFC 1918) | Obfuscate |\n| `https://secret.local/admin` | NXDOMAIN | Obfuscate |\n| `https://github.com/org/repo` | (PUBLIC_DOMAINS list) | Pass through |\n\n### LLM agent guidance\n\nBecause Shroud replaces URLs before they reach the LLM, the LLM may see unfamiliar or fake-looking domains in the conversation context. Tool calls (fetch, read, etc.) are deobfuscated automatically before execution, so they work correctly even when the LLM sees a fake URL.\n\n**If you are building an agent that uses Shroud, add the following to your agent's system prompt or instruction files:**\n\n> Shroud privacy is active. URLs and domains in the conversation may appear different from what the user sent — internal URLs are replaced with fake domains to protect infrastructure. If a URL looks unfamiliar or doesn't resolve, it has likely been obfuscated. The tool call pipeline deobfuscates automatically. Do NOT tell the user a URL is invalid just because you see an unfamiliar domain. If a fetch or read tool succeeded with the URL, trust the result.\n\nThis prevents the LLM from questioning obfuscated URLs or telling the user their link is broken.\n\n---\n\n## Redaction levels\n\nThree output modes for different audiences:\n\n- **`full`** (default): Replace with realistic fake values. Best for LLM interaction.\n- **`masked`**: Partial masking (`j***@***.com`, `***-**-1234`). Best for human review.\n- **`stats`**: Category placeholders (`[EMAIL-1]`, `[HOSTNAME-3]`). Best for dashboards.\n\n```jsonc\n\"redactionLevel\": \"masked\"\n```\n\n---\n\n## Detection intelligence\n\nShroud includes a `ContextDetector` that wraps the regex engine with post-detection intelligence:\n\n- **Context-aware boosting**: Text blocks containing config keywords (`interface`, `router ospf`, `hostname`) get +10% confidence for detected entities.\n- **Proximity clustering**: When a name, email, and phone appear within 200 characters, each gets a confidence boost.\n- **Hostname propagation**: `hostname CORE-RTR-01` in one place → bare `CORE-RTR-01` detected everywhere in the text.\n- **Learned entities**: Hostnames and infra identifiers seen in previous messages are remembered and detected in future messages without requiring config-line context.\n- **Documentation filtering**: RFC 3849 IPv6 doc prefix (`2001:db8::/32`), IPv6 loopback (`::1`), `example.com` emails, and well-known placeholders are automatically skipped.\n- **DNS-based URL classification**: External URLs pass through to the LLM; internal URLs are obfuscated. See [URL handling](#url-handling).\n- **Common word decay**: Words like `permit`, `deny`, `default` that happen to match patterns get 50% confidence reduction.\n- **Recursive deobfuscation**: Up to 3 passes for nested structures (fakes inside JSON-encoded strings).\n- **Subnet-aware deobfuscation**: When an LLM derives network/broadcast addresses from fake host IPs, Shroud reverse-maps them via the SubnetMapper. Works for both CGNAT (IPv4) and ULA (IPv6) fake ranges.\n\n---\n\n## Verify it works\n\nAfter restarting OpenClaw, send a message containing sensitive data (e.g. an email, IP, or config snippet). Then check the logs:\n\n```bash\ntail -f ~/.openclaw/logs/openclaw.log \\\n  | grep -a --line-buffered '\"name\":\"openclaw\"' \\\n  | grep -a --line-buffered 'shroud.*audit' \\\n  | grep -oP --line-buffered '\\[shroud\\]\\[audit\\][^\"]*'\n```\n\nYou should see:\n\n```\n[shroud][audit] OBFUSCATE req=dc5f9199cfb0d835 | entities=4 | chars=1200->1218 (delta=+18) | modified=YES | byCat=email:1,ip_address:2,hostname:1 | byRule=regex:email:1,regex:ipv4:2,regex:hostname:1\n```\n\nWith proof hashes enabled:\n\n```\n[shroud][audit] OBFUSCATE req=a3f1bc9e02d4e7f1 | entities=4 | chars=1200->1218 (delta=+18) | modified=YES | byCat=email:1,ip_address:2,hostname:1 | byRule=regex:email:1,regex:ipv4:2,regex:hostname:1 | proof_in=8a3c1f0e2b4d proof_out=f7d2a1c9e084 | fakes=[jsmith@corp.net|100.64.0.12|SW-LAB-01]\n```\n\n### Conversational tools\n\n| Tool | What it does |\n|------|-------------|\n| `shroud-stats` | Show all detection rules with status, confidence, hit counts, store size, and config summary |\n\nCLI:\n\n```bash\nshroud-stats                          # live rule table\nshroud-stats --json                   # JSON output\nshroud-stats --test \"Contact john@acme.com\"   # test detection\n```\n\n---\n\n## Entity categories\n\n`person_name`, `email`, `phone`, `ip_address`, `api_key`, `url`, `org_name`, `location`, `file_path`, `credit_card`, `ssn`, `mac_address`, `hostname`, `snmp_community`, `bgp_asn`, `network_credential`, `vlan_id`, `interface_desc`, `route_map`, `ospf_id`, `acl_name`, `iban`, `national_id`, `jwt`, `ics_identifier`, `gps_coordinate`, `certificate`, `date_of_birth`, `medical_record_number`, `bank_account_number`, `tax_id`, `passport_number`, `drivers_license`, `case_number`, `cryptocurrency_address`, `aws_arn`, `custom`\n\n---\n\n## Agent Privacy Protocol (APP)\n\nAPP is an open protocol for adding privacy and infrastructure protection to any AI agent. Shroud is the reference implementation.\n\n### Overview\n\n```\n+-------------------+     stdin/stdout     +------------------+\n|   Your Agent      | <---- JSON-RPC ----> |  APP Server      |\n|  (any language)   |                      |  (app-server.mjs)|\n+-------------------+                      +------------------+\n        |                                        |\n        | 1. identify(agent, version)            | registers agent\n        | 2. obfuscate(user_input)               | detects entities,\n        | 3. send to LLM                         | returns fakes\n        | 4. tool_call(tool, args)               | scans tool call\n        | 5. deobfuscate(llm_response)           | restores reals\n        | 6. show to user                        |\n```\n\n### Protocol specification\n\n- **Transport**: Newline-delimited JSON-RPC 2.0 over stdin/stdout\n- **Encoding**: UTF-8\n- **Process model**: Agent spawns APP server as subprocess, one per agent instance\n\n### Methods\n\n| Method | Params | Returns | Description |\n|--------|--------|---------|-------------|\n| `identify` | `{agent, version, channel?}` | `{ok, agent, buildId}` | Identify the agent (required before obfuscate/deobfuscate) |\n| `obfuscate` | `{text, partition?}` | `{text, entityCount, categories, modified, audit}` | Replace real values with fakes |\n| `deobfuscate` | `{text, partition?}` | `{text, replacementCount, modified, audit}` | Restore fakes to real values |\n| `tool_call` | `{tool, args?}` | `{allowed, blocked, tool, events?}` | Report a tool call for security scanning |\n| `tool_result` | `{tool, result}` | `{text, replacementCount}` | Obfuscate tool result before storing |\n| `reset` | `{}` | `{ok, summary}` | Clear all mappings |\n| `stats` | `{}` | `{storeMappings, ruleHits, ...}` | Engine statistics |\n| `health` | `{}` | `{uptime, requests, avgLatencyMs}` | Liveness check |\n| `configure` | `{config}` | `{ok}` | Hot-reload configuration |\n| `batch` | `{operations: [{direction, text}]}` | `{results: [...]}` | Batch obfuscate/deobfuscate |\n| `setPartition` | `{partition}` | `{ok}` | Switch mapping namespace (multi-tenant) |\n| `shutdown` | `{}` | `{ok}` | Graceful shutdown (flushes stats) |\n\nAgents should call `identify` first to register themselves. `tool_call` and `tool_result` are optional — they enable per-tool privacy scanning and mapping isolation for tool arguments.\n\n### Python client\n\n```python\nfrom shroud_client import ShroudClient\n\nclient = ShroudClient()\nclient.start()\n\nsafe = client.obfuscate(\"Contact admin@acme.com about 10.1.0.1\")\nprint(safe.text)          # fakes\nprint(safe.entity_count)  # 2\nprint(safe.categories)    # {\"email\": 1, \"ip_address\": 1}\n\nreal = client.deobfuscate(llm_response)\nprint(real.text)           # originals restored\nprint(real.residual_fakes) # any CGNAT/ULA IPs that survived\n\nclient.stop()\n```\n\n---\n\n## Development\n\n```bash\nnpm install\nnpm run build               # compile TypeScript\nnpm run lint                # type-check without emitting\nnpm test                    # unit + harness (1,238 tests, no Docker)\nnpm run test:docker         # Docker E2E — real OpenClaw, all channels (192 tests)\nnpm run test:all            # everything (1,430 tests)\n```\n\n### Test layers\n\n| Layer | Command | Tests | What it covers |\n|-------|---------|-------|---------------|\n| Unit | `npm run test:unit` | 879 | Obfuscator, detectors, generators, store, config |\n| APP Harness | `npm run test:integration` | 359 | 48 scenario files via mock LLM, no OpenClaw |\n| Docker E2E | `npm run test:docker` | 192 | Real OpenClaw gateway, Slack/WhatsApp/Cron/TUI channels, 153 regression scenarios |\n| Sandbox E2E | `run-compat.sh <ver> --sandbox` | +8 | Docker-in-Docker, sandboxed agent exec, tool call deobfuscation |\n\nDocker E2E runs inside an isolated container (`--internal` network, no external routing). Both OpenClaw and Shroud are installed from npm — the same path real users take. A single gateway process handles all tests via WebSocket RPC. Channel tests use mock servers with real SDK code paths (Slack via Bolt HTTP, WhatsApp via Baileys intercept).\n\n### OpenClaw compatibility matrix\n\n```bash\nbash compat/run-compat.sh latest           # test against latest OpenClaw\nbash compat/run-compat.sh latest --sandbox # include sandboxed agent exec tests\nbash compat/run-matrix.sh                  # interactive: current or current + last 3\nbash compat/run-matrix.sh --latest 3       # latest 3 versions\nbash compat/run-matrix.sh --parallel       # parallel execution\n```\n\nSupported versions are tracked in `compat/versions.json`. CI checks for new OpenClaw releases daily.\n\n---\n\n## Disclaimer\n\nThis software is provided \"as is\", without warranty of any kind, express or implied. Shroud uses regex-based detection which may not catch all sensitive data. It reduces exposure but does not eliminate it. See [SECURITY.md](SECURITY.md) for known limitations. The authors assume no responsibility for data leakage, compliance failures, or any damages arising from use of this software.\n\n## License\n\n[Apache 2.0](LICENSE)\n","readmeFilename":"README.md"}