@sandrobuilds/tracerney 0.9.8 → 0.9.10
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 +53 -14
- package/dist/application/ShieldApplicationService.d.ts +12 -6
- package/dist/application/ShieldApplicationService.d.ts.map +1 -1
- package/dist/application/ShieldApplicationService.js +57 -60
- package/dist/application/ShieldApplicationService.js.map +1 -1
- package/dist/application/index.d.ts +1 -1
- package/dist/application/index.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,18 +20,41 @@ Tracerney is a production-ready security middleware that sits between your appli
|
|
|
20
20
|
npm install @sandrobuilds/tracerney
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
**Setup (
|
|
23
|
+
**Simplest Setup (Free SDK — Pattern Detection):**
|
|
24
|
+
```typescript
|
|
25
|
+
import { Tracerney } from '@sandrobuilds/tracerney';
|
|
26
|
+
|
|
27
|
+
const tracer = new Tracerney({
|
|
28
|
+
allowedTools: ['search', 'calculator'],
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Check if a prompt is suspicious
|
|
32
|
+
const result = await tracer.scanPrompt(userInput);
|
|
33
|
+
|
|
34
|
+
console.log(result);
|
|
35
|
+
// {
|
|
36
|
+
// suspicious: true, // Layer 1 detected pattern match
|
|
37
|
+
// patternName: "Ignore Instructions",
|
|
38
|
+
// severity: "CRITICAL",
|
|
39
|
+
// blocked: false // No backend verification yet
|
|
40
|
+
// }
|
|
41
|
+
|
|
42
|
+
if (result.suspicious) {
|
|
43
|
+
console.log(`⚠️ Suspicious: ${result.patternName}`);
|
|
44
|
+
// Handle the suspicious prompt (log, rate-limit, etc.)
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Advanced Setup (with Backend LLM Verification):**
|
|
24
49
|
```typescript
|
|
25
50
|
import { Tracerney, ShieldBlockError } from '@sandrobuilds/tracerney';
|
|
26
51
|
|
|
27
|
-
// Just provide your domain URL — paths are auto-constructed!
|
|
28
52
|
const shield = new Tracerney({
|
|
29
|
-
baseUrl: 'http://localhost:3000', //
|
|
53
|
+
baseUrl: 'http://localhost:3000', // Backend with LLM Sentinel
|
|
30
54
|
allowedTools: ['search', 'calculator'],
|
|
31
55
|
apiKey: process.env.TRACERNY_API_KEY,
|
|
32
56
|
});
|
|
33
57
|
|
|
34
|
-
// Wrap your LLM call (detects at Layer 1 + Layer 2)
|
|
35
58
|
try {
|
|
36
59
|
const response = await shield.wrap(() =>
|
|
37
60
|
openai.chat.completions.create({
|
|
@@ -43,13 +66,12 @@ try {
|
|
|
43
66
|
} catch (error) {
|
|
44
67
|
if (error instanceof ShieldBlockError) {
|
|
45
68
|
console.error('🛡️ Attack blocked:', error.event.blockReason);
|
|
46
|
-
//
|
|
47
|
-
// Layer 2 hit: "LLM Sentinel" detected novel attack
|
|
69
|
+
// Only throws if LLM Sentinel confirms attack
|
|
48
70
|
}
|
|
49
71
|
}
|
|
50
72
|
```
|
|
51
73
|
|
|
52
|
-
|
|
74
|
+
Start with the simple setup. Add backend verification when ready!
|
|
53
75
|
|
|
54
76
|
## Philosophy
|
|
55
77
|
|
|
@@ -304,17 +326,34 @@ try {
|
|
|
304
326
|
|
|
305
327
|
### Scanning Prompts Pre-LLM
|
|
306
328
|
|
|
307
|
-
|
|
329
|
+
Check if a prompt is suspicious before calling the LLM:
|
|
308
330
|
|
|
309
331
|
```typescript
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
332
|
+
const result = await shield.scanPrompt(userInput);
|
|
333
|
+
|
|
334
|
+
if (result.suspicious) {
|
|
335
|
+
console.log(`⚠️ Suspicious: ${result.patternName}`);
|
|
336
|
+
console.log(`Severity: ${result.severity}`);
|
|
337
|
+
// Log, rate-limit, or notify security team
|
|
338
|
+
|
|
339
|
+
if (result.blocked) {
|
|
340
|
+
// Only true if LLM Sentinel confirmed (requires backend)
|
|
341
|
+
return res.status(403).json({ error: 'Request blocked' });
|
|
316
342
|
}
|
|
317
343
|
}
|
|
344
|
+
|
|
345
|
+
// Safe to call LLM
|
|
346
|
+
const response = await openai.chat.completions.create({...});
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**Result object:**
|
|
350
|
+
```typescript
|
|
351
|
+
interface ScanResult {
|
|
352
|
+
suspicious: boolean; // Layer 1 detected pattern match
|
|
353
|
+
patternName?: string; // e.g., "Ignore Instructions"
|
|
354
|
+
severity?: string; // "low" | "medium" | "high" | "critical"
|
|
355
|
+
blocked: boolean; // true only if LLM Sentinel confirmed (requires backend)
|
|
356
|
+
}
|
|
318
357
|
```
|
|
319
358
|
|
|
320
359
|
### Updating Allowed Tools
|
|
@@ -24,6 +24,12 @@ export interface WrapOptions {
|
|
|
24
24
|
modelName?: string;
|
|
25
25
|
provider?: string;
|
|
26
26
|
}
|
|
27
|
+
export interface ScanResult {
|
|
28
|
+
suspicious: boolean;
|
|
29
|
+
patternName?: string;
|
|
30
|
+
severity?: string;
|
|
31
|
+
blocked: boolean;
|
|
32
|
+
}
|
|
27
33
|
export interface ServiceStatus {
|
|
28
34
|
patternMatcher: {
|
|
29
35
|
ready: boolean;
|
|
@@ -61,15 +67,15 @@ export declare class ShieldApplicationService {
|
|
|
61
67
|
wrap<T extends LLMResponse>(llmCall: () => Promise<T>, options?: WrapOptions): Promise<T>;
|
|
62
68
|
/**
|
|
63
69
|
* Scan a raw prompt pre-LLM for inline use.
|
|
64
|
-
*
|
|
70
|
+
* Returns result object with suspicious flag and blocking decision.
|
|
71
|
+
* Only throws if Layer 2 (LLM Sentinel) confirms attack.
|
|
65
72
|
*
|
|
66
73
|
* Hardened Middleware:
|
|
67
|
-
* -
|
|
68
|
-
* - Layer
|
|
69
|
-
* -
|
|
70
|
-
* - Jitter: Add random delay to mask which layer blocked (if any)
|
|
74
|
+
* - Layer 1 (Regex): Fast, pattern-based detection (marks suspicious, doesn't block)
|
|
75
|
+
* - Layer 2 (LLM Sentinel): Verifies suspicious prompts (only this blocks)
|
|
76
|
+
* - Jitter: Add random delay to obfuscate timing
|
|
71
77
|
*/
|
|
72
|
-
scanPrompt(prompt: string, requestId?: string): Promise<
|
|
78
|
+
scanPrompt(prompt: string, requestId?: string): Promise<ScanResult>;
|
|
73
79
|
/**
|
|
74
80
|
* Update tool policy at runtime
|
|
75
81
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShieldApplicationService.d.ts","sourceRoot":"","sources":["../../src/application/ShieldApplicationService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAO/E,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE,OAAO,EAAE,iBAAiB,EAAyB,MAAM,6BAA6B,CAAC;AAIvF,MAAM,WAAW,8BAA8B;IAC7C,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE;QACd,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,SAAS,EAAE;QACT,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;KACjC,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,qBAAa,wBAAwB;IASvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAEP,MAAM,EAAE,8BAA8B;IAenE;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;;;;;OAMG;IACG,IAAI,CAAC,CAAC,SAAS,WAAW,EAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAuDb;;;;;;;;;OASG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ShieldApplicationService.d.ts","sourceRoot":"","sources":["../../src/application/ShieldApplicationService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAO/E,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE,OAAO,EAAE,iBAAiB,EAAyB,MAAM,6BAA6B,CAAC;AAIvF,MAAM,WAAW,8BAA8B;IAC7C,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE;QACd,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,SAAS,EAAE;QACT,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;KACjC,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,qBAAa,wBAAwB;IASvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAEP,MAAM,EAAE,8BAA8B;IAenE;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;;;;;OAMG;IACG,IAAI,CAAC,CAAC,SAAS,WAAW,EAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAuDb;;;;;;;;;OASG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiFzE;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAK/C;;OAEG;IACH,SAAS,IAAI,aAAa;IAgB1B;;OAEG;IACH,OAAO,CAAC,MAAM;IAMd;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAG1B"}
|
|
@@ -56,11 +56,11 @@ export class ShieldApplicationService {
|
|
|
56
56
|
const startTime = Date.now();
|
|
57
57
|
try {
|
|
58
58
|
// FIX GAP 3: Pre-LLM scan if prompt is provided
|
|
59
|
-
// Uses
|
|
59
|
+
// Uses Layer 1 (Regex) for suspicious detection + Layer 2 (LLM) for confirmation
|
|
60
60
|
if (options?.prompt) {
|
|
61
|
-
await this.scanPrompt(options.prompt, requestId);
|
|
62
|
-
// scanPrompt throws ShieldBlockError if
|
|
63
|
-
// Layer 1 just
|
|
61
|
+
const scanResult = await this.scanPrompt(options.prompt, requestId);
|
|
62
|
+
// scanPrompt throws ShieldBlockError only if Layer 2 confirms attack
|
|
63
|
+
// Layer 1 just marks suspicious=true, doesn't block
|
|
64
64
|
}
|
|
65
65
|
// Execute the LLM call
|
|
66
66
|
const response = await llmCall();
|
|
@@ -92,80 +92,77 @@ export class ShieldApplicationService {
|
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* Scan a raw prompt pre-LLM for inline use.
|
|
95
|
-
*
|
|
95
|
+
* Returns result object with suspicious flag and blocking decision.
|
|
96
|
+
* Only throws if Layer 2 (LLM Sentinel) confirms attack.
|
|
96
97
|
*
|
|
97
98
|
* Hardened Middleware:
|
|
98
|
-
* -
|
|
99
|
-
* - Layer
|
|
100
|
-
* -
|
|
101
|
-
* - Jitter: Add random delay to mask which layer blocked (if any)
|
|
99
|
+
* - Layer 1 (Regex): Fast, pattern-based detection (marks suspicious, doesn't block)
|
|
100
|
+
* - Layer 2 (LLM Sentinel): Verifies suspicious prompts (only this blocks)
|
|
101
|
+
* - Jitter: Add random delay to obfuscate timing
|
|
102
102
|
*/
|
|
103
103
|
async scanPrompt(prompt, requestId) {
|
|
104
104
|
if (!prompt) {
|
|
105
|
-
return; //
|
|
105
|
+
return { suspicious: false, blocked: false }; // Empty prompt is clean
|
|
106
106
|
}
|
|
107
107
|
const rid = requestId ?? this.generateRequestId();
|
|
108
108
|
const startTime = Date.now();
|
|
109
109
|
try {
|
|
110
110
|
// Normalize prompt to prevent Unicode/whitespace evasion
|
|
111
111
|
const normalizedPrompt = normalizePrompt(prompt);
|
|
112
|
-
// Layer 1: Regex patterns (
|
|
112
|
+
// Layer 1: Regex patterns (detection only, doesn't block)
|
|
113
113
|
const threat = this.patternMatcher.match(normalizedPrompt);
|
|
114
114
|
const isSuspicious = !!threat;
|
|
115
|
-
// If Layer 1 detects
|
|
115
|
+
// If Layer 1 detects something suspicious, check Layer 2
|
|
116
116
|
if (isSuspicious && threat) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
// latencyMs: result.latencyMs || 0,
|
|
140
|
-
// model: result.llmModel || 'unknown',
|
|
141
|
-
// timestamp: new Date().toISOString(),
|
|
142
|
-
// };
|
|
143
|
-
// this.shadowLogSink.log(shadowPayload).catch(err => {
|
|
144
|
-
// console.warn("[Tracerny] Shadow log send failed:", err);
|
|
145
|
-
// });
|
|
146
|
-
// }
|
|
147
|
-
const event = createSecurityEvent(rid, SecurityEventType.PROMPT_INJECTION, ThreatSeverity.HIGH, `LLM Sentinel detected: ${result.keywords.join(", ")} (confidence: ${result.confidence})`, {
|
|
148
|
-
patternName: "LLM Sentinel",
|
|
149
|
-
requestSnippet: prompt.substring(0, 100),
|
|
150
|
-
blockLatencyMs: (result.latencyMs || 0) + (Date.now() - startTime),
|
|
151
|
-
modelName: result.llmModel,
|
|
152
|
-
});
|
|
153
|
-
this.report(event);
|
|
154
|
-
throw new ShieldBlockError("Tracerny Block: LLM Sentinel", event);
|
|
117
|
+
// Layer 2: LLM Sentinel makes final decision
|
|
118
|
+
if (this.sentinel) {
|
|
119
|
+
try {
|
|
120
|
+
const sentinelResult = await this.sentinel.check(normalizedPrompt, rid);
|
|
121
|
+
if (sentinelResult.blocked) {
|
|
122
|
+
// Only throw if Layer 2 confirms it's an attack
|
|
123
|
+
const event = createSecurityEvent(rid, SecurityEventType.PROMPT_INJECTION, ThreatSeverity.HIGH, `LLM Sentinel confirmed: ${sentinelResult.keywords.join(", ")} (confidence: ${sentinelResult.confidence})`, {
|
|
124
|
+
patternName: threat.patternName,
|
|
125
|
+
requestSnippet: prompt.substring(0, 100),
|
|
126
|
+
blockLatencyMs: (sentinelResult.latencyMs || 0) + (Date.now() - startTime),
|
|
127
|
+
modelName: sentinelResult.llmModel,
|
|
128
|
+
});
|
|
129
|
+
this.report(event);
|
|
130
|
+
throw new ShieldBlockError("Tracerny Block: LLM Sentinel Confirmed", event);
|
|
131
|
+
}
|
|
132
|
+
// Layer 2 passed - suspicious but allowed (e.g., educational context)
|
|
133
|
+
return {
|
|
134
|
+
suspicious: true,
|
|
135
|
+
patternName: threat.patternName,
|
|
136
|
+
severity: threat.severity,
|
|
137
|
+
blocked: false,
|
|
138
|
+
};
|
|
155
139
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
140
|
+
catch (error) {
|
|
141
|
+
// If sentinel throws (network error, etc), check if it's our block or a system error
|
|
142
|
+
if (error instanceof ShieldBlockError) {
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
// Other errors: treat as suspicious but don't block (Layer 2 unavailable)
|
|
146
|
+
return {
|
|
147
|
+
suspicious: true,
|
|
148
|
+
patternName: threat.patternName,
|
|
149
|
+
severity: threat.severity,
|
|
150
|
+
blocked: false,
|
|
151
|
+
};
|
|
162
152
|
}
|
|
163
|
-
|
|
164
|
-
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// No sentinel configured - just mark as suspicious
|
|
156
|
+
return {
|
|
157
|
+
suspicious: true,
|
|
158
|
+
patternName: threat.patternName,
|
|
159
|
+
severity: threat.severity,
|
|
160
|
+
blocked: false,
|
|
161
|
+
};
|
|
165
162
|
}
|
|
166
163
|
}
|
|
167
|
-
//
|
|
168
|
-
return;
|
|
164
|
+
// Layer 1 passed - prompt is clean
|
|
165
|
+
return { suspicious: false, blocked: false };
|
|
169
166
|
}
|
|
170
167
|
finally {
|
|
171
168
|
// Jitter: Add random delay to obfuscate timing (always runs, masked from caller)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShieldApplicationService.js","sourceRoot":"","sources":["../../src/application/ShieldApplicationService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAiB,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;
|
|
1
|
+
{"version":3,"file":"ShieldApplicationService.js","sourceRoot":"","sources":["../../src/application/ShieldApplicationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Barrel export
|
|
4
4
|
*/
|
|
5
5
|
export { ShieldApplicationService } from "./ShieldApplicationService";
|
|
6
|
-
export type { ShieldApplicationServiceConfig, WrapOptions, ServiceStatus } from "./ShieldApplicationService";
|
|
6
|
+
export type { ShieldApplicationServiceConfig, WrapOptions, ServiceStatus, ScanResult } from "./ShieldApplicationService";
|
|
7
7
|
export { ShieldBlockError } from "./ShieldBlockError";
|
|
8
8
|
export * from "./ports";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,8BAA8B,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,8BAA8B,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEzH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,cAAc,SAAS,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* );
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
|
-
import { type WrapOptions, type ServiceStatus } from "./application";
|
|
19
|
+
import { type WrapOptions, type ServiceStatus, type ScanResult } from "./application";
|
|
20
20
|
import { ShieldBlockError } from "./application/ShieldBlockError";
|
|
21
21
|
import { type LLMResponse } from "./application/ports/ILLMProvider";
|
|
22
22
|
/**
|
|
@@ -132,7 +132,7 @@ export declare class Tracerny {
|
|
|
132
132
|
* }
|
|
133
133
|
* ```
|
|
134
134
|
*/
|
|
135
|
-
scanPrompt(prompt: string): Promise<
|
|
135
|
+
scanPrompt(prompt: string): Promise<ScanResult>;
|
|
136
136
|
/**
|
|
137
137
|
* Update allowed tools at runtime
|
|
138
138
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAA4B,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAA4B,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAMpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAA2B;IAE1C;;OAEG;gBACS,OAAO,GAAE,eAAoB;IAiDzC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;;;;;;;;;;;;;;;OAiBG;IACG,IAAI,CAAC,CAAC,SAAS,WAAW,EAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAIb;;;;;;;;;;;;;;;;;OAiBG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIrD;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAItC;;OAEG;IACH,SAAS,IAAI,aAAa;IAI1B;;;OAGG;IACH,OAAO,IAAI,IAAI;CAGhB;AAOD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAG5B,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AAGxD,YAAY,EACV,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEhE,YAAY,EACV,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,UAAU,EACV,cAAc,EACd,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,YAAY,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAG/E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAErF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|