@princeverma130104/agentguard 1.0.0 → 1.0.2
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 +115 -31
- package/dist/guard.d.ts +51 -2
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +204 -39
- package/dist/guard.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/langchain.d.ts +4 -1
- package/dist/langchain.d.ts.map +1 -1
- package/dist/langchain.js +30 -12
- package/dist/langchain.js.map +1 -1
- package/dist/mastra.d.ts.map +1 -1
- package/dist/mastra.js +4 -9
- package/dist/mastra.js.map +1 -1
- package/dist/middleware.d.ts +10 -5
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +13 -48
- package/dist/middleware.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +11 -2
- package/dist/scanner.js.map +1 -1
- package/dist/vault.d.ts +23 -3
- package/dist/vault.d.ts.map +1 -1
- package/dist/vault.js +169 -16
- package/dist/vault.js.map +1 -1
- package/package.json +5 -1
package/dist/guard.js
CHANGED
|
@@ -5,19 +5,34 @@
|
|
|
5
5
|
* Orchestrates scanning, tokenization, vault storage, and deanonymization.
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.AgentGuard = void 0;
|
|
8
|
+
exports.AgentGuard = exports.OutboundApprovalError = void 0;
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
10
|
+
const crypto_1 = require("crypto");
|
|
10
11
|
const scanner_1 = require("./scanner");
|
|
11
12
|
const vault_1 = require("./vault");
|
|
13
|
+
class OutboundApprovalError extends Error {
|
|
14
|
+
constructor() {
|
|
15
|
+
super('Outbound LLM request was not approved.');
|
|
16
|
+
this.name = 'OutboundApprovalError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.OutboundApprovalError = OutboundApprovalError;
|
|
12
20
|
class AgentGuard {
|
|
13
21
|
constructor(options = {}) {
|
|
14
22
|
this.options = options;
|
|
15
23
|
this.auditLog = [];
|
|
24
|
+
const maxTextLength = options.maxTextLength ?? 1000000;
|
|
25
|
+
if (!Number.isSafeInteger(maxTextLength) || maxTextLength <= 0) {
|
|
26
|
+
throw new RangeError('maxTextLength must be a positive safe integer.');
|
|
27
|
+
}
|
|
16
28
|
this.vault = new vault_1.TokenVault({
|
|
17
29
|
redisUrl: options.redisUrl,
|
|
18
30
|
ttlSeconds: options.ttlSeconds,
|
|
31
|
+
maxTokensPerSession: options.maxTokensPerSession,
|
|
32
|
+
vaultEncryptionKey: options.vaultEncryptionKey,
|
|
19
33
|
});
|
|
20
34
|
this.verbose = options.verbose ?? false;
|
|
35
|
+
this.maxTextLength = maxTextLength;
|
|
21
36
|
}
|
|
22
37
|
/**
|
|
23
38
|
* Scans input text, replaces all detected PII with deterministic tokens,
|
|
@@ -31,6 +46,15 @@ class AgentGuard {
|
|
|
31
46
|
* @returns Sanitized text, session ID, and a redaction summary
|
|
32
47
|
*/
|
|
33
48
|
async anonymize(text, sessionId) {
|
|
49
|
+
if (typeof text !== 'string') {
|
|
50
|
+
throw new TypeError('text must be a string.');
|
|
51
|
+
}
|
|
52
|
+
if (text.length > this.maxTextLength) {
|
|
53
|
+
throw new RangeError(`text exceeds the configured maximum of ${this.maxTextLength} characters.`);
|
|
54
|
+
}
|
|
55
|
+
if (sessionId !== undefined && (typeof sessionId !== 'string' || sessionId.length === 0 || sessionId.length > 512)) {
|
|
56
|
+
throw new TypeError('sessionId must be a non-empty string of at most 512 characters.');
|
|
57
|
+
}
|
|
34
58
|
const activeSession = sessionId ?? (0, uuid_1.v4)();
|
|
35
59
|
const scan = (0, scanner_1.scanText)(text, this.options.customPatterns);
|
|
36
60
|
if (!scan.hasSensitiveData) {
|
|
@@ -41,46 +65,32 @@ class AgentGuard {
|
|
|
41
65
|
};
|
|
42
66
|
}
|
|
43
67
|
const uniqueValues = (0, scanner_1.extractUniqueValues)(scan);
|
|
44
|
-
const typeCounters = {};
|
|
45
68
|
const redactedCounts = {};
|
|
46
|
-
const
|
|
47
|
-
for (const token of Object.keys(existingVault)) {
|
|
48
|
-
const match = /^\[([A-Z_]+)_(\d+)\]$/.exec(token);
|
|
49
|
-
if (match) {
|
|
50
|
-
typeCounters[match[1]] = Math.max(typeCounters[match[1]] ?? 0, Number(match[2]));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
let sanitizedText = text;
|
|
69
|
+
const tokenByValue = new Map();
|
|
54
70
|
for (const [rawValue, entityType] of uniqueValues.entries()) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (existingToken) {
|
|
59
|
-
token = existingToken;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
typeCounters[entityType] = (typeCounters[entityType] ?? 0) + 1;
|
|
63
|
-
token = `[${entityType}_${typeCounters[entityType]}]`;
|
|
64
|
-
while (Object.prototype.hasOwnProperty.call(existingVault, token)) {
|
|
65
|
-
typeCounters[entityType]++;
|
|
66
|
-
token = `[${entityType}_${typeCounters[entityType]}]`;
|
|
67
|
-
}
|
|
68
|
-
await this.vault.store(activeSession, token, rawValue);
|
|
69
|
-
existingVault[token] = rawValue;
|
|
71
|
+
const { token, created } = await this.vault.getOrStore(activeSession, entityType, rawValue);
|
|
72
|
+
tokenByValue.set(rawValue, token);
|
|
73
|
+
if (created) {
|
|
70
74
|
redactedCounts[entityType] = (redactedCounts[entityType] ?? 0) + 1;
|
|
71
75
|
}
|
|
72
|
-
// Replace ALL occurrences of rawValue in the text
|
|
73
|
-
sanitizedText = sanitizedText.split(rawValue).join(token);
|
|
74
76
|
}
|
|
77
|
+
let sanitizedText = '';
|
|
78
|
+
let cursor = 0;
|
|
79
|
+
for (const entity of scan.entities) {
|
|
80
|
+
sanitizedText += text.slice(cursor, entity.startIndex);
|
|
81
|
+
sanitizedText += tokenByValue.get(entity.value);
|
|
82
|
+
cursor = entity.endIndex;
|
|
83
|
+
}
|
|
84
|
+
sanitizedText += text.slice(cursor);
|
|
75
85
|
const redactionSummary = redactedCounts;
|
|
76
86
|
this.recordAudit({
|
|
77
87
|
timestamp: new Date().toISOString(),
|
|
78
|
-
|
|
88
|
+
sessionIdHash: this.hashSessionId(activeSession),
|
|
79
89
|
operation: 'anonymize',
|
|
80
90
|
entityTypesRedacted: Object.keys(redactionSummary),
|
|
81
91
|
});
|
|
82
92
|
if (this.verbose) {
|
|
83
|
-
console.log(`[AgentGuard] Anonymized |
|
|
93
|
+
console.log(`[AgentGuard] Anonymized | sessionHash=${this.hashSessionId(activeSession)} | types=${JSON.stringify(redactionSummary)}`);
|
|
84
94
|
}
|
|
85
95
|
return { sanitizedText, sessionId: activeSession, redactionSummary };
|
|
86
96
|
}
|
|
@@ -94,26 +104,122 @@ class AgentGuard {
|
|
|
94
104
|
* @returns Text with all tokens replaced by original values
|
|
95
105
|
*/
|
|
96
106
|
async deanonymize(tokenizedText, sessionId) {
|
|
107
|
+
this.validateSessionId(sessionId);
|
|
108
|
+
if (typeof tokenizedText !== 'string') {
|
|
109
|
+
throw new TypeError('tokenizedText must be a string.');
|
|
110
|
+
}
|
|
111
|
+
if (tokenizedText.length > this.maxTextLength) {
|
|
112
|
+
throw new RangeError(`tokenizedText exceeds the configured maximum of ${this.maxTextLength} characters.`);
|
|
113
|
+
}
|
|
97
114
|
const vault = await this.vault.getVault(sessionId);
|
|
98
|
-
let restoredText = tokenizedText;
|
|
99
115
|
let restoredCount = 0;
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
116
|
+
let outputLength = 0;
|
|
117
|
+
let cursor = 0;
|
|
118
|
+
const parts = [];
|
|
119
|
+
const tokenPattern = /\[[A-Z_]+_\d+\]/g;
|
|
120
|
+
let match;
|
|
121
|
+
while ((match = tokenPattern.exec(tokenizedText)) !== null) {
|
|
122
|
+
const token = match[0];
|
|
123
|
+
const replacement = Object.prototype.hasOwnProperty.call(vault, token)
|
|
124
|
+
? vault[token]
|
|
125
|
+
: token;
|
|
126
|
+
outputLength += match.index - cursor + replacement.length;
|
|
127
|
+
if (outputLength > this.maxTextLength) {
|
|
128
|
+
throw new RangeError(`restored text exceeds the configured maximum of ${this.maxTextLength} characters.`);
|
|
104
129
|
}
|
|
130
|
+
parts.push(tokenizedText.slice(cursor, match.index), replacement);
|
|
131
|
+
cursor = match.index + token.length;
|
|
132
|
+
if (Object.prototype.hasOwnProperty.call(vault, token))
|
|
133
|
+
restoredCount++;
|
|
105
134
|
}
|
|
135
|
+
const tail = tokenizedText.slice(cursor);
|
|
136
|
+
if (outputLength + tail.length > this.maxTextLength) {
|
|
137
|
+
throw new RangeError(`restored text exceeds the configured maximum of ${this.maxTextLength} characters.`);
|
|
138
|
+
}
|
|
139
|
+
parts.push(tail);
|
|
140
|
+
const restoredText = parts.join('');
|
|
106
141
|
this.recordAudit({
|
|
107
142
|
timestamp: new Date().toISOString(),
|
|
108
|
-
sessionId,
|
|
143
|
+
sessionIdHash: this.hashSessionId(sessionId),
|
|
109
144
|
operation: 'deanonymize',
|
|
110
145
|
totalTokensRestored: restoredCount,
|
|
111
146
|
});
|
|
112
147
|
if (this.verbose) {
|
|
113
|
-
console.log(`[AgentGuard] Deanonymized |
|
|
148
|
+
console.log(`[AgentGuard] Deanonymized | sessionHash=${this.hashSessionId(sessionId)} | tokensRestored=${restoredCount}`);
|
|
114
149
|
}
|
|
115
150
|
return restoredText;
|
|
116
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Anonymizes strings throughout a JSON-compatible value, including property
|
|
154
|
+
* names, and reuses one vault session for the complete structure.
|
|
155
|
+
*/
|
|
156
|
+
async anonymizeObject(value, sessionId) {
|
|
157
|
+
const initial = await this.anonymize('', sessionId);
|
|
158
|
+
const redactionSummary = {};
|
|
159
|
+
const sanitizedValue = await this.mapJsonValue(value, async (text) => {
|
|
160
|
+
const result = await this.anonymize(text, initial.sessionId);
|
|
161
|
+
for (const [entityType, count] of Object.entries(result.redactionSummary)) {
|
|
162
|
+
redactionSummary[entityType] = (redactionSummary[entityType] ?? 0) + count;
|
|
163
|
+
}
|
|
164
|
+
return result.sanitizedText;
|
|
165
|
+
}, new WeakSet(), 0, 'Request');
|
|
166
|
+
return {
|
|
167
|
+
sanitizedValue,
|
|
168
|
+
sessionId: initial.sessionId,
|
|
169
|
+
redactionSummary,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Restores tokens throughout a JSON-compatible value using one session.
|
|
174
|
+
* Only call this for a session authorized by the consuming application.
|
|
175
|
+
*/
|
|
176
|
+
async deanonymizeObject(value, sessionId) {
|
|
177
|
+
this.validateSessionId(sessionId);
|
|
178
|
+
return this.mapJsonValue(value, (text) => this.deanonymize(text, sessionId), new WeakSet(), 0, 'Response');
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Anonymizes a prompt before invoking the caller's outbound LLM function.
|
|
182
|
+
* If supplied, approval receives sanitized text only; any result other than
|
|
183
|
+
* literal true blocks the call. Sanitization or approval errors fail closed.
|
|
184
|
+
*/
|
|
185
|
+
async sendToLLM(send, prompt, options = {}) {
|
|
186
|
+
if (typeof send !== 'function') {
|
|
187
|
+
throw new TypeError('send must be a function.');
|
|
188
|
+
}
|
|
189
|
+
if (options.approve !== undefined && typeof options.approve !== 'function') {
|
|
190
|
+
throw new TypeError('approve must be a function when provided.');
|
|
191
|
+
}
|
|
192
|
+
const { sanitizedText, sessionId, redactionSummary } = await this.anonymize(prompt, options.sessionId);
|
|
193
|
+
if (options.approve) {
|
|
194
|
+
let approved;
|
|
195
|
+
try {
|
|
196
|
+
approved = await options.approve({
|
|
197
|
+
sanitizedPrompt: sanitizedText,
|
|
198
|
+
redactionSummary: { ...redactionSummary },
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
this.recordAudit({
|
|
203
|
+
timestamp: new Date().toISOString(),
|
|
204
|
+
sessionIdHash: this.hashSessionId(sessionId),
|
|
205
|
+
operation: 'outbound_rejected',
|
|
206
|
+
entityTypesRedacted: Object.keys(redactionSummary),
|
|
207
|
+
});
|
|
208
|
+
throw error;
|
|
209
|
+
}
|
|
210
|
+
this.recordAudit({
|
|
211
|
+
timestamp: new Date().toISOString(),
|
|
212
|
+
sessionIdHash: this.hashSessionId(sessionId),
|
|
213
|
+
operation: approved === true ? 'outbound_approved' : 'outbound_rejected',
|
|
214
|
+
entityTypesRedacted: Object.keys(redactionSummary),
|
|
215
|
+
});
|
|
216
|
+
if (approved !== true) {
|
|
217
|
+
throw new OutboundApprovalError();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const result = await send(sanitizedText);
|
|
221
|
+
return { result, sessionId, redactionSummary };
|
|
222
|
+
}
|
|
117
223
|
/**
|
|
118
224
|
* Wraps an async function, automatically anonymizing its string input
|
|
119
225
|
* and deanonymizing the string output. Useful for wrapping LLM calls.
|
|
@@ -139,18 +245,18 @@ class AgentGuard {
|
|
|
139
245
|
await this.vault.destroySession(sessionId);
|
|
140
246
|
this.recordAudit({
|
|
141
247
|
timestamp: new Date().toISOString(),
|
|
142
|
-
sessionId,
|
|
248
|
+
sessionIdHash: this.hashSessionId(sessionId),
|
|
143
249
|
operation: 'session_destroy',
|
|
144
250
|
});
|
|
145
251
|
if (this.verbose) {
|
|
146
|
-
console.log(`[AgentGuard] Session destroyed |
|
|
252
|
+
console.log(`[AgentGuard] Session destroyed | sessionHash=${this.hashSessionId(sessionId)}`);
|
|
147
253
|
}
|
|
148
254
|
}
|
|
149
255
|
/**
|
|
150
256
|
* Returns the in-memory audit log (no PII, only metadata).
|
|
151
257
|
*/
|
|
152
258
|
getAuditLog() {
|
|
153
|
-
return this.auditLog;
|
|
259
|
+
return this.auditLog.map((entry) => ({ ...entry }));
|
|
154
260
|
}
|
|
155
261
|
/**
|
|
156
262
|
* Checks Redis connectivity. Use in health-check endpoints.
|
|
@@ -172,6 +278,65 @@ class AgentGuard {
|
|
|
172
278
|
this.auditLog.shift();
|
|
173
279
|
}
|
|
174
280
|
}
|
|
281
|
+
hashSessionId(sessionId) {
|
|
282
|
+
return (0, crypto_1.createHash)('sha256').update(sessionId).digest('hex').slice(0, 16);
|
|
283
|
+
}
|
|
284
|
+
validateSessionId(sessionId) {
|
|
285
|
+
if (typeof sessionId !== 'string' || sessionId.length === 0 || sessionId.length > 512) {
|
|
286
|
+
throw new TypeError('sessionId must be a non-empty string of at most 512 characters.');
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
async mapJsonValue(value, mapText, ancestors, depth, label) {
|
|
290
|
+
if (depth > 100) {
|
|
291
|
+
throw new RangeError(`${label} body exceeds the maximum nesting depth of 100.`);
|
|
292
|
+
}
|
|
293
|
+
if (typeof value === 'string')
|
|
294
|
+
return mapText(value);
|
|
295
|
+
if (value === null ||
|
|
296
|
+
typeof value === 'boolean' ||
|
|
297
|
+
(typeof value === 'number' && Number.isFinite(value))) {
|
|
298
|
+
return value;
|
|
299
|
+
}
|
|
300
|
+
if (typeof value !== 'object') {
|
|
301
|
+
throw new TypeError(`${label} body must contain only JSON-compatible values.`);
|
|
302
|
+
}
|
|
303
|
+
if (ancestors.has(value)) {
|
|
304
|
+
throw new TypeError(`${label} body must not contain circular references.`);
|
|
305
|
+
}
|
|
306
|
+
if (!Array.isArray(value) &&
|
|
307
|
+
Object.getPrototypeOf(value) !== Object.prototype &&
|
|
308
|
+
Object.getPrototypeOf(value) !== null) {
|
|
309
|
+
throw new TypeError(`${label} body must contain only JSON-compatible objects.`);
|
|
310
|
+
}
|
|
311
|
+
ancestors.add(value);
|
|
312
|
+
try {
|
|
313
|
+
if (Array.isArray(value)) {
|
|
314
|
+
const result = [];
|
|
315
|
+
for (const item of value) {
|
|
316
|
+
result.push(await this.mapJsonValue(item, mapText, ancestors, depth + 1, label));
|
|
317
|
+
}
|
|
318
|
+
return result;
|
|
319
|
+
}
|
|
320
|
+
const result = {};
|
|
321
|
+
for (const [key, item] of Object.entries(value)) {
|
|
322
|
+
const mappedKey = await mapText(key);
|
|
323
|
+
const mappedValue = await this.mapJsonValue(item, mapText, ancestors, depth + 1, label);
|
|
324
|
+
if (Object.prototype.hasOwnProperty.call(result, mappedKey)) {
|
|
325
|
+
throw new TypeError(`${label} property names collide after anonymization.`);
|
|
326
|
+
}
|
|
327
|
+
Object.defineProperty(result, mappedKey, {
|
|
328
|
+
configurable: true,
|
|
329
|
+
enumerable: true,
|
|
330
|
+
value: mappedValue,
|
|
331
|
+
writable: true,
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
return result;
|
|
335
|
+
}
|
|
336
|
+
finally {
|
|
337
|
+
ancestors.delete(value);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
175
340
|
}
|
|
176
341
|
exports.AgentGuard = AgentGuard;
|
|
177
342
|
//# sourceMappingURL=guard.js.map
|
package/dist/guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,+BAAoC;AACpC,uCAA0D;AAC1D,mCAAmD;AAiCnD,MAAa,UAAU;IAKrB,YAA6B,UAAwB,EAAE;QAA1B,YAAO,GAAP,OAAO,CAAmB;QAFtC,aAAQ,GAAiB,EAAE,CAAC;QAG3C,IAAI,CAAC,KAAK,GAAG,IAAI,kBAAU,CAAC;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAC1C,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,SAAkB;QAC9C,MAAM,aAAa,GAAG,SAAS,IAAI,IAAA,SAAM,GAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAA,kBAAQ,EAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEzD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO;gBACL,aAAa,EAAE,IAAI;gBACnB,SAAS,EAAE,aAAa;gBACxB,gBAAgB,EAAE,EAAE;aACrB,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,IAAA,6BAAmB,EAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,cAAc,GAA2B,EAAE,CAAC;QAClD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAE/D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAC/B,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5D,yEAAyE;YACzE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAE5E,IAAI,KAAa,CAAC;YAClB,IAAI,aAAa,EAAE,CAAC;gBAClB,KAAK,GAAG,aAAa,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/D,KAAK,GAAG,IAAI,UAAU,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;gBACtD,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;oBAClE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC3B,KAAK,GAAG,IAAI,UAAU,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;gBACxD,CAAC;gBACD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACvD,aAAa,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;gBAChC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACrE,CAAC;YAED,kDAAkD;YAClD,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,gBAAgB,GAAG,cAAc,CAAC;QAExC,IAAI,CAAC,WAAW,CAAC;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,aAAa;YACxB,SAAS,EAAE,WAAW;YACtB,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACnD,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,qCAAqC,aAAa,YAAY,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CACjG,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;IACvE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,SAAiB;QACxD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,YAAY,GAAG,aAAa,CAAC;QACjC,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxD,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS;YACT,SAAS,EAAE,aAAa;YACxB,mBAAmB,EAAE,aAAa;SACnC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,uCAAuC,SAAS,qBAAqB,aAAa,EAAE,CACrF,CAAC;QACJ,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CACZ,EAA0C,EAC1C,QAAgB,EAChB,SAAkB,EAClB,eAAuC,EACvC,cAAmD;QAEnD,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC;QAEvC,IAAI,eAAe,IAAI,cAAc,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC9D,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAC5E,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS;YACT,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,4CAA4C,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEO,WAAW,CAAC,KAAiB;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,8CAA8C;QAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AA1MD,gCA0MC"}
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* Import from 'agentguard/langchain' for LangChain.js integration.
|
|
7
7
|
*/
|
|
8
8
|
export { AgentGuard } from './guard';
|
|
9
|
-
export type { GuardOptions, AnonymizeResult, AuditEntry } from './guard';
|
|
9
|
+
export type { GuardOptions, AnonymizeResult, AnonymizeObjectResult, AuditEntry, JsonValue, OutboundApprovalRequest, OutboundCallOptions, OutboundCallResult, } from './guard';
|
|
10
|
+
export { OutboundApprovalError } from './guard';
|
|
10
11
|
export { TokenVault } from './vault';
|
|
11
12
|
export type { VaultOptions } from './vault';
|
|
12
13
|
export { scanText, extractUniqueValues } from './scanner';
|
|
@@ -14,7 +15,7 @@ export type { DetectedEntity, ScanResult } from './scanner';
|
|
|
14
15
|
export { PATTERN_REGISTRY, PATTERN_ORDER } from './patterns';
|
|
15
16
|
export type { PatternKey } from './patterns';
|
|
16
17
|
export { createRequestMiddleware, createResponseMiddleware, createGuardMiddleware, } from './middleware';
|
|
17
|
-
export type { GuardRequest, GuardResponse } from './middleware';
|
|
18
|
+
export type { GuardRequest, GuardResponse, GuardMiddlewareStack } from './middleware';
|
|
18
19
|
export { createMastraGuard } from './mastra';
|
|
19
20
|
export type { MastraGuard, MastraStepContext, MastraStepResult } from './mastra';
|
|
20
21
|
export { createLangChainGuard } from './langchain';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,YAAY,EACV,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
* Import from 'agentguard/langchain' for LangChain.js integration.
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.createLangChainGuard = exports.createMastraGuard = exports.createGuardMiddleware = exports.createResponseMiddleware = exports.createRequestMiddleware = exports.PATTERN_ORDER = exports.PATTERN_REGISTRY = exports.extractUniqueValues = exports.scanText = exports.TokenVault = exports.AgentGuard = void 0;
|
|
10
|
+
exports.createLangChainGuard = exports.createMastraGuard = exports.createGuardMiddleware = exports.createResponseMiddleware = exports.createRequestMiddleware = exports.PATTERN_ORDER = exports.PATTERN_REGISTRY = exports.extractUniqueValues = exports.scanText = exports.TokenVault = exports.OutboundApprovalError = exports.AgentGuard = void 0;
|
|
11
11
|
// Core engine
|
|
12
12
|
var guard_1 = require("./guard");
|
|
13
13
|
Object.defineProperty(exports, "AgentGuard", { enumerable: true, get: function () { return guard_1.AgentGuard; } });
|
|
14
|
+
var guard_2 = require("./guard");
|
|
15
|
+
Object.defineProperty(exports, "OutboundApprovalError", { enumerable: true, get: function () { return guard_2.OutboundApprovalError; } });
|
|
14
16
|
// Vault
|
|
15
17
|
var vault_1 = require("./vault");
|
|
16
18
|
Object.defineProperty(exports, "TokenVault", { enumerable: true, get: function () { return vault_1.TokenVault; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,cAAc;AACd,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,cAAc;AACd,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AAWnB,iCAAgD;AAAvC,8GAAA,qBAAqB,OAAA;AAE9B,QAAQ;AACR,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AAGnB,UAAU;AACV,qCAA0D;AAAjD,mGAAA,QAAQ,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAGtC,WAAW;AACX,uCAA6D;AAApD,4GAAA,gBAAgB,OAAA;AAAE,yGAAA,aAAa,OAAA;AAGxC,aAAa;AACb,2CAIsB;AAHpB,qHAAA,uBAAuB,OAAA;AACvB,sHAAA,wBAAwB,OAAA;AACxB,mHAAA,qBAAqB,OAAA;AAIvB,yBAAyB;AACzB,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAG1B,yCAAmD;AAA1C,iHAAA,oBAAoB,OAAA"}
|
package/dist/langchain.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ export interface LangChainGuardHandler {
|
|
|
33
33
|
text: string;
|
|
34
34
|
}>>;
|
|
35
35
|
}, runId: string): Promise<void>;
|
|
36
|
+
/** Failure hook: releases the session association for a failed run. */
|
|
37
|
+
handleLLMError(error: unknown, runId: string): Promise<void>;
|
|
36
38
|
/** Chat message hook: anonymizes HumanMessages in-place */
|
|
37
39
|
handleChatModelStart(llm: Record<string, unknown>, messages: LangChainMessage[][], runId: string): Promise<void>;
|
|
38
40
|
}
|
|
@@ -41,7 +43,8 @@ export interface LangChainGuard {
|
|
|
41
43
|
guard: AgentGuard;
|
|
42
44
|
/**
|
|
43
45
|
* Manually restore tokens in any output string.
|
|
44
|
-
* Uses the
|
|
46
|
+
* Uses the latest completed/in-progress sessionId. Supply an explicit ID
|
|
47
|
+
* when multiple LLM runs may be in flight concurrently.
|
|
45
48
|
*/
|
|
46
49
|
restore(text: string, sessionId?: string): Promise<string>;
|
|
47
50
|
}
|
package/dist/langchain.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B,yDAAyD;IACzD,cAAc,CACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,wDAAwD;IACxD,YAAY,CACV,MAAM,EAAE;QAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAA;KAAE,EACvD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,2DAA2D;IAC3D,oBAAoB,CAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAC9B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B,yDAAyD;IACzD,cAAc,CACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,wDAAwD;IACxD,YAAY,CACV,MAAM,EAAE;QAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAA;KAAE,EACvD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,uEAAuE;IACvE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D,2DAA2D;IAC3D,oBAAoB,CAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAC9B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,cAAc,CA+D3E"}
|
package/dist/langchain.js
CHANGED
|
@@ -25,35 +25,53 @@ const guard_1 = require("./guard");
|
|
|
25
25
|
* the LLM call lifecycle to apply AgentGuard protection.
|
|
26
26
|
*/
|
|
27
27
|
function createLangChainGuard(options) {
|
|
28
|
-
const guard = new guard_1.AgentGuard(
|
|
28
|
+
const guard = new guard_1.AgentGuard(options);
|
|
29
|
+
const sessionsByRunId = new Map();
|
|
29
30
|
const handler = {
|
|
30
31
|
sessionId: undefined,
|
|
31
32
|
async handleLLMStart(_llm, prompts, _runId) {
|
|
33
|
+
let sessionId = sessionsByRunId.get(_runId);
|
|
32
34
|
for (let i = 0; i < prompts.length; i++) {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
+
const result = await guard.anonymize(prompts[i], sessionId);
|
|
36
|
+
sessionId = result.sessionId;
|
|
37
|
+
prompts[i] = result.sanitizedText;
|
|
38
|
+
}
|
|
39
|
+
if (sessionId) {
|
|
40
|
+
sessionsByRunId.set(_runId, sessionId);
|
|
35
41
|
handler.sessionId = sessionId;
|
|
36
42
|
}
|
|
37
43
|
},
|
|
38
44
|
async handleLLMEnd(output, _runId) {
|
|
39
|
-
|
|
45
|
+
const sessionId = sessionsByRunId.get(_runId);
|
|
46
|
+
if (!sessionId)
|
|
40
47
|
return;
|
|
41
|
-
|
|
42
|
-
for (const
|
|
43
|
-
|
|
48
|
+
try {
|
|
49
|
+
for (const generationBatch of output.generations) {
|
|
50
|
+
for (const gen of generationBatch) {
|
|
51
|
+
gen.text = await guard.deanonymize(gen.text, sessionId);
|
|
52
|
+
}
|
|
44
53
|
}
|
|
45
54
|
}
|
|
55
|
+
finally {
|
|
56
|
+
sessionsByRunId.delete(_runId);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
async handleLLMError(_error, _runId) {
|
|
60
|
+
sessionsByRunId.delete(_runId);
|
|
46
61
|
},
|
|
47
62
|
async handleChatModelStart(_llm, messages, _runId) {
|
|
63
|
+
let sessionId = sessionsByRunId.get(_runId);
|
|
48
64
|
for (const batch of messages) {
|
|
49
65
|
for (const msg of batch) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
handler.sessionId = sessionId;
|
|
54
|
-
}
|
|
66
|
+
const result = await guard.anonymize(msg.content, sessionId);
|
|
67
|
+
sessionId = result.sessionId;
|
|
68
|
+
msg.content = result.sanitizedText;
|
|
55
69
|
}
|
|
56
70
|
}
|
|
71
|
+
if (sessionId) {
|
|
72
|
+
sessionsByRunId.set(_runId, sessionId);
|
|
73
|
+
handler.sessionId = sessionId;
|
|
74
|
+
}
|
|
57
75
|
},
|
|
58
76
|
};
|
|
59
77
|
return {
|
package/dist/langchain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"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"}
|
package/dist/mastra.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mastra.d.ts","sourceRoot":"","sources":["../src/mastra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,SAAS,iBAAiB,EAAE,OAAO,SAAS,gBAAgB,EAC3E,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,GACtC,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC;;;OAGG;IACH,eAAe,CACb,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"mastra.d.ts","sourceRoot":"","sources":["../src/mastra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,SAAS,iBAAiB,EAAE,OAAO,SAAS,gBAAgB,EAC3E,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,GACtC,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC;;;OAGG;IACH,eAAe,CACb,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAkErE"}
|
package/dist/mastra.js
CHANGED
|
@@ -28,7 +28,7 @@ const guard_1 = require("./guard");
|
|
|
28
28
|
* @param options AgentGuard configuration
|
|
29
29
|
*/
|
|
30
30
|
function createMastraGuard(options) {
|
|
31
|
-
const guard = new guard_1.AgentGuard(
|
|
31
|
+
const guard = new guard_1.AgentGuard(options);
|
|
32
32
|
return {
|
|
33
33
|
guard,
|
|
34
34
|
wrapStep(fn) {
|
|
@@ -49,14 +49,9 @@ function createMastraGuard(options) {
|
|
|
49
49
|
if (ctx.messages) {
|
|
50
50
|
const sanitizedMessages = [];
|
|
51
51
|
for (const msg of ctx.messages) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
sanitizedMessages.push({ ...msg, content: sanitizedText });
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
sanitizedMessages.push(msg);
|
|
59
|
-
}
|
|
52
|
+
const { sanitizedText, sessionId: sid } = await guard.anonymize(msg.content, sessionId);
|
|
53
|
+
sessionId = sid;
|
|
54
|
+
sanitizedMessages.push({ ...msg, content: sanitizedText });
|
|
60
55
|
}
|
|
61
56
|
sanitizedCtx.messages = sanitizedMessages;
|
|
62
57
|
}
|
package/dist/mastra.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mastra.js","sourceRoot":"","sources":["../src/mastra.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;AA8CH,
|
|
1
|
+
{"version":3,"file":"mastra.js","sourceRoot":"","sources":["../src/mastra.ts"],"names":[],"mappings":"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"}
|
package/dist/middleware.d.ts
CHANGED
|
@@ -8,21 +8,26 @@ import { IncomingMessage, ServerResponse } from 'http';
|
|
|
8
8
|
import { AgentGuard, GuardOptions } from './guard';
|
|
9
9
|
export type NextFunction = (err?: unknown) => void;
|
|
10
10
|
export interface GuardRequest extends IncomingMessage {
|
|
11
|
-
agentGuardSessionId?: string;
|
|
12
11
|
body?: unknown;
|
|
13
12
|
}
|
|
14
13
|
export interface GuardResponse extends ServerResponse {
|
|
15
|
-
agentGuardSessionId?: string;
|
|
16
14
|
/** Express adds this method at runtime — typed here for middleware compatibility */
|
|
17
15
|
json?: (body: unknown) => GuardResponse;
|
|
18
16
|
}
|
|
17
|
+
export type GuardMiddlewareStack = [
|
|
18
|
+
ReturnType<typeof createRequestMiddleware>,
|
|
19
|
+
ReturnType<typeof createResponseMiddleware>
|
|
20
|
+
] & {
|
|
21
|
+
guard: AgentGuard;
|
|
22
|
+
close(): Promise<void>;
|
|
23
|
+
};
|
|
19
24
|
/**
|
|
20
25
|
* Creates an Express-compatible middleware that:
|
|
21
26
|
* 1. Reads the raw request body
|
|
22
27
|
* 2. Applies AgentGuard anonymization to any string fields
|
|
23
|
-
* 3.
|
|
28
|
+
* 3. Keeps the session ID private for paired response restoration
|
|
24
29
|
*/
|
|
25
|
-
export declare function createRequestMiddleware(guard: AgentGuard): (req: GuardRequest,
|
|
30
|
+
export declare function createRequestMiddleware(guard: AgentGuard): (req: GuardRequest, _res: GuardResponse, next: NextFunction) => Promise<void>;
|
|
26
31
|
/**
|
|
27
32
|
* Creates an Express-compatible middleware that deanonymizes response bodies
|
|
28
33
|
* before sending them to the downstream tool/browser.
|
|
@@ -32,5 +37,5 @@ export declare function createResponseMiddleware(guard: AgentGuard): (req: Guard
|
|
|
32
37
|
* Standalone factory to create a full guard middleware stack.
|
|
33
38
|
* Usage: app.use(...createGuardMiddleware({ redisUrl: '...' }));
|
|
34
39
|
*/
|
|
35
|
-
export declare function createGuardMiddleware(options?: GuardOptions):
|
|
40
|
+
export declare function createGuardMiddleware(options?: GuardOptions): GuardMiddlewareStack;
|
|
36
41
|
//# sourceMappingURL=middleware.d.ts.map
|
package/dist/middleware.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAEnD,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAEnD,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,oFAAoF;IACpF,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,aAAa,CAAC;CACzC;AAID,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,OAAO,uBAAuB,CAAC;IAC1C,UAAU,CAAC,OAAO,wBAAwB,CAAC;CAC5C,GAAG;IACF,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,IAErD,KAAK,YAAY,EACjB,MAAM,aAAa,EACnB,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAYjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,IAEtD,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAoBjB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,oBAAoB,CAYlF"}
|