shroud-privacy 2.5.6 → 2.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/dist/hooks.js +5 -5
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ Shroud does not guarantee compliance — regex-based detection has limitations (
|
|
|
79
79
|
| `globalThis.__shroudStreamDeobfuscate` | LLM → Agent | Streaming event deobfuscation hook |
|
|
80
80
|
| `globalThis.__shroudDeobfuscate` | Agent → Channel | Global deobfuscation hook — called by OpenClaw before ANY channel send |
|
|
81
81
|
|
|
82
|
-
> **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
|
|
82
|
+
> **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.
|
|
83
83
|
|
|
84
84
|
> **Requires OpenClaw 2026.3.24 or later.**
|
|
85
85
|
|
|
@@ -220,6 +220,15 @@ openclaw plugins install --path .
|
|
|
220
220
|
openclaw gateway restart
|
|
221
221
|
```
|
|
222
222
|
|
|
223
|
+
For 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:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
git clone https://github.com/wkeything/shroud.git
|
|
227
|
+
cd shroud
|
|
228
|
+
npm install
|
|
229
|
+
./deploy-local.sh
|
|
230
|
+
```
|
|
231
|
+
|
|
223
232
|
## Updating
|
|
224
233
|
|
|
225
234
|
```bash
|
package/dist/hooks.js
CHANGED
|
@@ -415,7 +415,7 @@ export function registerHooks(api, obfuscator) {
|
|
|
415
415
|
texts.push(msg.content);
|
|
416
416
|
else if (Array.isArray(msg.content)) {
|
|
417
417
|
for (const b of msg.content) {
|
|
418
|
-
if (
|
|
418
|
+
if (typeof b?.text === "string")
|
|
419
419
|
texts.push(b.text);
|
|
420
420
|
}
|
|
421
421
|
}
|
|
@@ -475,7 +475,7 @@ export function registerHooks(api, obfuscator) {
|
|
|
475
475
|
if (!b || typeof b !== "object")
|
|
476
476
|
return b;
|
|
477
477
|
let newBlock = b;
|
|
478
|
-
if (
|
|
478
|
+
if (typeof b.text === "string") {
|
|
479
479
|
const cleaned = stripSlackLinksForHook(b.text);
|
|
480
480
|
const result = ob().obfuscate(cleaned, undefined, _exemptCats);
|
|
481
481
|
totalEntities += result.entities.length;
|
|
@@ -1139,7 +1139,7 @@ export function registerHooks(api, obfuscator) {
|
|
|
1139
1139
|
else if (Array.isArray(msg.content)) {
|
|
1140
1140
|
const isAssistant = msg.role === "assistant" || msg.role === "model";
|
|
1141
1141
|
for (const block of msg.content) {
|
|
1142
|
-
if (
|
|
1142
|
+
if (typeof block?.text === "string") {
|
|
1143
1143
|
const r = obfuscateText(block.text);
|
|
1144
1144
|
if (r.modified) {
|
|
1145
1145
|
block.text = r.text;
|
|
@@ -1435,7 +1435,7 @@ export function registerHooks(api, obfuscator) {
|
|
|
1435
1435
|
// Deobfuscate content blocks in message events (message_start etc)
|
|
1436
1436
|
if (Array.isArray(json.message?.content)) {
|
|
1437
1437
|
for (const block of json.message.content) {
|
|
1438
|
-
if (
|
|
1438
|
+
if (typeof block?.text === "string") {
|
|
1439
1439
|
block.text = ob().deobfuscate(block.text);
|
|
1440
1440
|
}
|
|
1441
1441
|
}
|
|
@@ -1567,7 +1567,7 @@ export function registerHooks(api, obfuscator) {
|
|
|
1567
1567
|
const json = JSON.parse(text);
|
|
1568
1568
|
if (Array.isArray(json.content)) {
|
|
1569
1569
|
for (const block of json.content) {
|
|
1570
|
-
if (
|
|
1570
|
+
if (typeof block?.text === "string") {
|
|
1571
1571
|
block.text = ob().deobfuscate(block.text);
|
|
1572
1572
|
}
|
|
1573
1573
|
}
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "shroud-privacy",
|
|
3
3
|
"name": "Shroud",
|
|
4
|
-
"version": "2.5.
|
|
4
|
+
"version": "2.5.7",
|
|
5
5
|
"description": "Privacy obfuscation with deterministic fake values and deobfuscation — PII never reaches the LLM, tool calls still work",
|
|
6
6
|
"configSchema": {
|
|
7
7
|
"type": "object",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shroud-privacy",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.7",
|
|
4
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.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|