breaker-ai
Version:
CLI to scan prompts for injection risks
41 lines (40 loc) • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.scanPrompt = scanPrompt;
const riskyPatterns_1 = require("../checks/riskyPatterns");
const userInputSafety_1 = require("../checks/userInputSafety");
const lengthCheck_1 = require("../checks/lengthCheck");
const openEndedPartterns_1 = require("../checks/openEndedPartterns");
const load_1 = require("../utils/load");
async function scanPrompt(src) {
const text = await (0, load_1.load)(src);
const risky = (0, load_1.matchAny)(text, riskyPatterns_1.riskyPatterns);
const open = (0, load_1.matchAny)(text, openEndedPartterns_1.openEndedPatterns);
const safety = (0, userInputSafety_1.checkUserInputSafety)(text);
const lenWarn = (0, lengthCheck_1.lengthWarning)(text);
console.log({ risky, open, safety, lenWarn });
const score = computeScore({ risky, open, safety, lenWarn });
return {
risky,
open,
userInputSafety: safety,
lengthWarning: lenWarn,
score,
};
}
function computeScore({ risky, open, safety, lenWarn, }) {
let score = 100;
// risky patterns: 15 points each, max 60
const riskyDeduction = Math.min(60, risky.length * 15);
score -= riskyDeduction;
// open-ended patterns: 5 points each, max 30
const openDeduction = Math.min(30, open.length * 5);
score -= openDeduction;
// user-input safety warning
if (safety)
score -= 20;
// length warning
if (lenWarn)
score -= 10;
return Math.max(score, 0);
}