import {
TealEngineV12,
TealGuard,
TealSecrets,
TealMemory,
TealAudit,
PolicyMode,
} from 'tealtiger';
// --- Initialize modules ---
const guard = new TealGuard({
promptInjection: { enabled: true, mode: PolicyMode.ENFORCE },
contentModeration: { enabled: true, mode: PolicyMode.ENFORCE },
piiDetection: {
enabled: true,
mode: PolicyMode.ENFORCE,
action: 'REDACT', // Redact PII in input before retrieval
},
});
const secrets = new TealSecrets({
patterns: 'all',
confidence: { minimum: 'MEDIUM' },
action: 'REDACT',
});
const memory = new TealMemory({
defaultScope: 'request',
classification: {
enforceReadGovernance: true,
levels: ['PUBLIC', 'INTERNAL', 'CONFIDENTIAL', 'RESTRICTED'],
},
});
const audit = new TealAudit({
enabled: true,
redactPII: true,
outputs: ['file', 'http'],
});
const engine = new TealEngineV12({
modules: [guard, secrets, memory, audit],
mode: PolicyMode.ENFORCE,
});
// --- Orchestration flow ---
async function handleRAGQuery(
userQuery: string,
userId: string,
userClearance: string
) {
const context = engine.createContext({
userId,
userClearance,
agentId: 'rag-application',
environment: 'production',
});
// Step 1: TealGuard scans input (PII + injection)
const inputScan = await guard.scan({
content: userQuery,
direction: 'input',
context,
});
if (inputScan.action === 'DENY') {
await audit.log({
type: 'input_blocked',
reason: inputScan.reasonCodes,
correlationId: context.correlationId,
});
return { blocked: true, reason: inputScan.reasonCodes };
}
// Use redacted query for retrieval (PII stripped)
const safeQuery = inputScan.redactedContent || userQuery;
// Step 2: TealEngine evaluates and classifies the request
const inputDecision = await engine.evaluate({
action: 'query',
content: safeQuery,
context,
});
const requestClassification = inputDecision.metadata?.classification || 'INTERNAL';
// Step 3: Retrieve documents from knowledge base
const retrievedDocs = await vectorStore.search(safeQuery, { topK: 10 });
// Step 4: TealMemory enforces read governance
const filteredDocs = await memory.filterByClassification({
documents: retrievedDocs,
userClearance,
requestClassification,
context,
});
const docsFiltered = retrievedDocs.length - filteredDocs.length;
if (docsFiltered > 0) {
console.log(`TealMemory filtered ${docsFiltered} documents above user clearance`);
}
// Step 5: LLM generates response from filtered context
const llmResponse = await generateResponse(safeQuery, filteredDocs);
// Step 6: TealGuard scans output
const outputScan = await guard.scan({
content: llmResponse,
direction: 'output',
context,
});
if (outputScan.action === 'DENY') {
await audit.log({
type: 'output_blocked',
reason: outputScan.reasonCodes,
correlationId: context.correlationId,
});
return { blocked: true, reason: ['OUTPUT_MODERATION_FAILED'] };
}
// Step 7: TealSecrets scans output for leaked secrets
const secretsScan = await secrets.scan({
content: llmResponse,
direction: 'output',
context,
});
const finalResponse = secretsScan.findings.length > 0
? secretsScan.redactedContent
: llmResponse;
// Step 8: TealAudit logs the full evidence chain
await audit.log({
type: 'rag_query_completed',
correlationId: context.correlationId,
metadata: {
docsRetrieved: retrievedDocs.length,
docsFiltered,
docsUsed: filteredDocs.length,
classification: requestClassification,
secretsFound: secretsScan.findings.length,
outputModeration: outputScan.action,
},
});
return {
response: finalResponse,
docsUsed: filteredDocs.length,
classification: requestClassification,
correlationId: context.correlationId,
};
}