shroud-privacy 2.2.9 → 2.2.11

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.
@@ -1,33 +1,109 @@
1
1
  {
2
2
  "id": "shroud-privacy",
3
3
  "name": "Shroud",
4
- "version": "2.2.9",
4
+ "version": "2.2.11",
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",
8
8
  "additionalProperties": false,
9
9
  "properties": {
10
- "secretKey": { "type": "string", "description": "HMAC secret for deterministic mapping. Auto-generated if empty." },
11
- "persistentSalt": { "type": "string", "description": "Fixed salt for cross-session consistency. Empty = random per session." },
12
- "minConfidence": { "type": "number", "minimum": 0, "maximum": 1, "default": 0, "description": "Minimum detector confidence to obfuscate" },
13
- "allowlist": { "type": "array", "items": { "type": "string" }, "default": [], "description": "Values to never obfuscate (supports * and ? wildcards)" },
14
- "denylist": { "type": "array", "items": { "type": "string" }, "default": [], "description": "Values to always obfuscate" },
15
- "canaryEnabled": { "type": "boolean", "default": false, "description": "Inject tracking tokens to detect data leakage" },
16
- "canaryPrefix": { "type": "string", "default": "SHROUD-CANARY", "description": "Prefix for canary tokens" },
17
- "auditEnabled": { "type": "boolean", "default": false, "description": "Track obfuscation events with tamper-evident chain hashing" },
18
- "verboseLogging": { "type": "boolean", "default": false, "description": "Alias for auditEnabled — enable verbose audit lines" },
19
- "auditLogFormat": { "type": "string", "enum": ["human", "json"], "default": "human", "description": "Audit log output format" },
20
- "auditIncludeProofHashes": { "type": "boolean", "default": false, "description": "Include salted SHA-256 proof hashes in audit lines" },
21
- "auditHashSalt": { "type": "string", "default": "", "description": "Salt for proof hashes" },
22
- "auditHashTruncate": { "type": "integer", "default": 12, "minimum": 4, "maximum": 64, "description": "Truncate proof hashes to N hex chars" },
23
- "auditMaxFakesSample": { "type": "integer", "default": 0, "minimum": 0, "maximum": 20, "description": "Include up to N fake replacement values in audit log (0 = disabled)" },
10
+ "secretKey": {
11
+ "type": "string",
12
+ "description": "HMAC secret for deterministic mapping. Auto-generated if empty."
13
+ },
14
+ "persistentSalt": {
15
+ "type": "string",
16
+ "description": "Fixed salt for cross-session consistency. Empty = random per session."
17
+ },
18
+ "minConfidence": {
19
+ "type": "number",
20
+ "minimum": 0,
21
+ "maximum": 1,
22
+ "default": 0,
23
+ "description": "Minimum detector confidence to obfuscate"
24
+ },
25
+ "allowlist": {
26
+ "type": "array",
27
+ "items": {
28
+ "type": "string"
29
+ },
30
+ "default": [],
31
+ "description": "Values to never obfuscate (supports * and ? wildcards)"
32
+ },
33
+ "denylist": {
34
+ "type": "array",
35
+ "items": {
36
+ "type": "string"
37
+ },
38
+ "default": [],
39
+ "description": "Values to always obfuscate"
40
+ },
41
+ "canaryEnabled": {
42
+ "type": "boolean",
43
+ "default": false,
44
+ "description": "Inject tracking tokens to detect data leakage"
45
+ },
46
+ "canaryPrefix": {
47
+ "type": "string",
48
+ "default": "SHROUD-CANARY",
49
+ "description": "Prefix for canary tokens"
50
+ },
51
+ "auditEnabled": {
52
+ "type": "boolean",
53
+ "default": false,
54
+ "description": "Track obfuscation events with tamper-evident chain hashing"
55
+ },
56
+ "verboseLogging": {
57
+ "type": "boolean",
58
+ "default": false,
59
+ "description": "Alias for auditEnabled — enable verbose audit lines"
60
+ },
61
+ "auditLogFormat": {
62
+ "type": "string",
63
+ "enum": [
64
+ "human",
65
+ "json"
66
+ ],
67
+ "default": "human",
68
+ "description": "Audit log output format"
69
+ },
70
+ "auditIncludeProofHashes": {
71
+ "type": "boolean",
72
+ "default": false,
73
+ "description": "Include salted SHA-256 proof hashes in audit lines"
74
+ },
75
+ "auditHashSalt": {
76
+ "type": "string",
77
+ "default": "",
78
+ "description": "Salt for proof hashes"
79
+ },
80
+ "auditHashTruncate": {
81
+ "type": "integer",
82
+ "default": 12,
83
+ "minimum": 4,
84
+ "maximum": 64,
85
+ "description": "Truncate proof hashes to N hex chars"
86
+ },
87
+ "auditMaxFakesSample": {
88
+ "type": "integer",
89
+ "default": 0,
90
+ "minimum": 0,
91
+ "maximum": 20,
92
+ "description": "Include up to N fake replacement values in audit log (0 = disabled)"
93
+ },
24
94
  "detectorOverrides": {
25
95
  "type": "object",
26
96
  "additionalProperties": {
27
97
  "type": "object",
28
98
  "properties": {
29
- "enabled": { "type": "boolean" },
30
- "confidence": { "type": "number", "minimum": 0, "maximum": 1 }
99
+ "enabled": {
100
+ "type": "boolean"
101
+ },
102
+ "confidence": {
103
+ "type": "number",
104
+ "minimum": 0,
105
+ "maximum": 1
106
+ }
31
107
  }
32
108
  },
33
109
  "default": {},
@@ -38,27 +114,76 @@
38
114
  "items": {
39
115
  "type": "object",
40
116
  "properties": {
41
- "name": { "type": "string" },
42
- "pattern": { "type": "string" },
43
- "category": { "type": "string" }
117
+ "name": {
118
+ "type": "string"
119
+ },
120
+ "pattern": {
121
+ "type": "string"
122
+ },
123
+ "category": {
124
+ "type": "string"
125
+ }
44
126
  },
45
- "required": ["name", "pattern"]
127
+ "required": [
128
+ "name",
129
+ "pattern"
130
+ ]
46
131
  },
47
132
  "default": [],
48
133
  "description": "User-defined regex patterns for custom PII detection"
49
134
  },
50
- "maxToolDepth": { "type": "integer", "default": 10, "minimum": 1, "maximum": 100, "description": "Max nested tool call depth before warning" },
51
- "redactionLevel": { "type": "string", "enum": ["full", "masked", "stats"], "default": "full", "description": "Output mode: full (fake values), masked (partial masking), stats (category placeholders)" },
52
- "dryRun": { "type": "boolean", "default": false, "description": "Detect entities but don't replace — useful for testing detection rules" },
53
- "maxStoreMappings": { "type": "integer", "default": 0, "minimum": 0, "description": "Max mapping store size; oldest entries evicted when exceeded. 0 = unlimited." }
135
+ "maxToolDepth": {
136
+ "type": "integer",
137
+ "default": 10,
138
+ "minimum": 1,
139
+ "maximum": 100,
140
+ "description": "Max nested tool call depth before warning"
141
+ },
142
+ "redactionLevel": {
143
+ "type": "string",
144
+ "enum": [
145
+ "full",
146
+ "masked",
147
+ "stats"
148
+ ],
149
+ "default": "full",
150
+ "description": "Output mode: full (fake values), masked (partial masking), stats (category placeholders)"
151
+ },
152
+ "dryRun": {
153
+ "type": "boolean",
154
+ "default": false,
155
+ "description": "Detect entities but don't replace — useful for testing detection rules"
156
+ },
157
+ "maxStoreMappings": {
158
+ "type": "integer",
159
+ "default": 0,
160
+ "minimum": 0,
161
+ "description": "Max mapping store size; oldest entries evicted when exceeded. 0 = unlimited."
162
+ }
54
163
  }
55
164
  },
56
165
  "uiHints": {
57
- "secretKey": { "label": "Secret Key", "help": "HMAC secret for deterministic mapping. Auto-generated if empty.", "sensitive": true },
58
- "persistentSalt": { "label": "Persistent Salt", "help": "Fixed salt for cross-session mapping consistency." },
59
- "minConfidence": { "label": "Min Confidence", "help": "Detection confidence threshold (0.0-1.0)" },
60
- "canaryEnabled": { "label": "Enable Canary Tokens", "help": "Inject tracking tokens to detect PII leakage" },
61
- "auditEnabled": { "label": "Enable Audit Log", "help": "Tamper-evident obfuscation event tracking" }
166
+ "secretKey": {
167
+ "label": "Secret Key",
168
+ "help": "HMAC secret for deterministic mapping. Auto-generated if empty.",
169
+ "sensitive": true
170
+ },
171
+ "persistentSalt": {
172
+ "label": "Persistent Salt",
173
+ "help": "Fixed salt for cross-session mapping consistency."
174
+ },
175
+ "minConfidence": {
176
+ "label": "Min Confidence",
177
+ "help": "Detection confidence threshold (0.0-1.0)"
178
+ },
179
+ "canaryEnabled": {
180
+ "label": "Enable Canary Tokens",
181
+ "help": "Inject tracking tokens to detect PII leakage"
182
+ },
183
+ "auditEnabled": {
184
+ "label": "Enable Audit Log",
185
+ "help": "Tamper-evident obfuscation event tracking"
186
+ }
62
187
  },
63
188
  "enterpriseAgent": {
64
189
  "adapter": "ncg_adapter.py",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shroud-privacy",
3
- "version": "2.2.9",
3
+ "version": "2.2.11",
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",
@@ -19,11 +19,11 @@
19
19
  },
20
20
  "scripts": {
21
21
  "build": "tsc",
22
- "test": "npm run test:unit && npm run test:integration; npm run test:openclaw",
22
+ "test": "npm run test:unit && npm run test:integration",
23
23
  "test:unit": "vitest run",
24
24
  "test:integration": "node tests/harness/run.mjs",
25
- "test:openclaw": "node tests/harness/run.mjs --openclaw",
26
- "test:all": "npm run test:unit && npm run test:integration && npm run test:openclaw",
25
+ "test:docker": "bash compat/run-compat.sh latest",
26
+ "test:all": "npm run test:unit && npm run test:integration && npm run test:docker",
27
27
  "test:watch": "vitest",
28
28
  "lint": "tsc --noEmit",
29
29
  "prepublishOnly": "npm run lint && npm run test:unit && npm run test:integration && npm run build"