@directive-run/ai 1.19.6 → 1.19.7

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,4 +1,4 @@
1
- import {c}from'./chunk-UR5BMWEN.js';import {safeStringify}from'@directive-run/core/internals';function ce(a){let{patterns:i=[/\b\d{3}-\d{2}-\d{4}\b/g,/\b\d{16}\b/g,/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi],redact:r=false,redactReplacement:t="[REDACTED]"}=a;return e=>{let n=e.input,s=false;for(let c of i)c.lastIndex=0,c.test(n)&&(s=true,r&&(c.lastIndex=0,n=n.replace(c,t)));return s&&!r?{passed:false,reason:"Input contains PII"}:{passed:true,transformed:r&&s?n:void 0}}}function de(a){let{checkFn:i,message:r="Content flagged by moderation"}=a;return async t=>{let e="output"in t?typeof t.output=="string"?t.output:JSON.stringify(t.output):t.input,n=await i(e);return {passed:!n,reason:n?r:void 0}}}function le(a){let{maxTokensPerMinute:i=1e5,maxRequestsPerMinute:r=60}=a,t=Math.max(r,1e3),e=[],n=[],s=6e4;function c$1(d,m){let u=0,y=d.length;for(;u<y;){let g=u+y>>>1;(d[g]??0)<m?u=g+1:y=g;}return u}let o=(d,m)=>{let u=Date.now(),y=u-s,g=c$1(e,y);g>0&&(e=e.slice(g));let x=c$1(n,y);x>0&&(n=n.slice(x));let P=m.facts[c]?.tokenUsage??0,I=e.length,l=n.length;return I+P>i?{passed:false,reason:"Token rate limit exceeded"}:l>=r?{passed:false,reason:"Request rate limit exceeded"}:(n.length<t&&n.push(u),e.length<t&&e.push(u),{passed:true})};return o.reset=()=>{e=[],n=[];},o}function ue(a){let{allowlist:i,denylist:r,caseSensitive:t=false}=a,e=i?.map(s=>t?s:s.toLowerCase()),n=r?.map(s=>t?s:s.toLowerCase());return s=>{let c=t?s.toolCall.name:s.toolCall.name.toLowerCase();return e&&!e.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" not in allowlist`}:n?.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" is blocked`}:{passed:true}}}function me(a){let{validate:i,errorPrefix:r="Output schema validation failed"}=a;return t=>{let e=i(t.output);return typeof e=="boolean"?{passed:e,reason:e?void 0:r}:e.valid?{passed:true}:{passed:false,reason:e.errors?.length?`${r}: ${e.errors.join("; ")}`:r}}}function pe(a){let{type:i,requiredFields:r=[],minLength:t,maxLength:e,minStringLength:n,maxStringLength:s}=a;return c=>{let o=c.output;switch(i){case "string":return typeof o!="string"?{passed:false,reason:`Expected string, got ${typeof o}`}:n!==void 0&&o.length<n?{passed:false,reason:`String too short: ${o.length} < ${n}`}:s!==void 0&&o.length>s?{passed:false,reason:`String too long: ${o.length} > ${s}`}:{passed:true};case "number":return typeof o!="number"||Number.isNaN(o)?{passed:false,reason:`Expected number, got ${typeof o}`}:{passed:true};case "boolean":return typeof o!="boolean"?{passed:false,reason:`Expected boolean, got ${typeof o}`}:{passed:true};case "object":if(typeof o!="object"||o===null||Array.isArray(o))return {passed:false,reason:`Expected object, got ${Array.isArray(o)?"array":typeof o}`};for(let d of r)if(!(d in o))return {passed:false,reason:`Missing required field: ${d}`};return {passed:true};case "array":return Array.isArray(o)?t!==void 0&&o.length<t?{passed:false,reason:`Array too short: ${o.length} < ${t}`}:e!==void 0&&o.length>e?{passed:false,reason:`Array too long: ${o.length} > ${e}`}:{passed:true}:{passed:false,reason:`Expected array, got ${typeof o}`};default:return {passed:false,reason:`Unknown type: ${i}`}}}}function fe(a){let{maxCharacters:i,maxTokens:r,estimateTokens:t=e=>Math.ceil(e.length/4)}=a;return e=>{let n=safeStringify(e.output);if(i!==void 0&&n.length>i)return {passed:false,reason:`Output too long: ${n.length} characters (max: ${i})`};if(r!==void 0){let s=t(n);if(s>r)return {passed:false,reason:`Output too long: ~${s} tokens (max: ${r})`}}return {passed:true}}}function ge(a){let{blockedPatterns:i,caseSensitive:r=false}=a;i.length===0&&console.warn("[Directive] createContentFilterGuardrail: blockedPatterns is empty \u2014 no content will be filtered");let t=i.map(e=>{if(e instanceof RegExp)return e;let n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(n,r?"g":"gi")});return e=>{let n=safeStringify(e.output);for(let s of t)if(s.lastIndex=0,s.test(n))return {passed:false,reason:`Output contains blocked content matching: ${s.source}`};return {passed:true}}}function H(a){let i=a.replace(/[\s-]/g,"");if(i.length<13||i.length>19||!/^\d+$/.test(i))return false;let r=0,t=false;for(let e=i.length-1;e>=0;e--){let n=i[e];if(!n)continue;let s=Number.parseInt(n,10);t&&(s*=2,s>9&&(s-=9)),r+=s,t=!t;}return r%10===0}var V=[{type:"ssn",regex:/\b\d{3}-\d{2}-\d{4}\b/g,redactionToken:"[SSN]"},{type:"credit_card",regex:/\b((?:\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4})|\d{13,19})\b/g,validate:H,redactionToken:"[CREDIT_CARD]"},{type:"email",regex:/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,redactionToken:"[EMAIL]"}];function U(a,i){let r=[];for(let t of V){if(!i.has(t.type))continue;t.regex.lastIndex=0;let e;for(;(e=t.regex.exec(a))!==null;)t.validate&&!t.validate(e[0])||r.push({type:t.type,value:e[0],start:e.index,end:e.index+e[0].length});}return r}function A(a,i){if(i.length===0)return a;let r=[...i].sort((n,s)=>s.start-n.start),t={ssn:"[SSN]",credit_card:"[CREDIT_CARD]",email:"[EMAIL]"},e=a;for(let n of r)e=e.slice(0,n.start)+t[n.type]+e.slice(n.end);return e}function he(a={}){let{mode:i="redact",types:r=["ssn","credit_card","email"],includeKeys:t=[],excludeKeys:e=[],onBlocked:n,customDetector:s,walkDepth:c=1}=a,o=new Set(r),d=new Set(t),m=new Set(e),u=Number.isFinite(c)?Math.max(1,Math.min(5,Math.floor(c))):1,y=1e4,g=false,x=null;function h(l){if(g)return;g=true,x=l;let p=l.meta?.byTag?.("pii");if(p)for(let f of p)f.type==="fact"&&f.id&&!m.has(f.id)&&d.add(f.id);}function b(l){let p=[];if(o.size>0)for(let f of U(l,o))p.push(f);if(s)for(let f of s(l))p.push(f);return p}function P(l,p=u){if(typeof l=="string"){let v=b(l);return v.length===0?{matched:false}:{matched:true,redacted:A(l,v),detected:v}}if(p<=0)return {matched:false};if(l===null||typeof l!="object")return {matched:false};let f=l;Array.isArray(l)&&l.length>y&&(console.warn(`[Directive] fact-pii walker truncated top-level array at ${y} elements before clone \u2014 pass a customDetector for larger payloads`),f=l.slice(0,y));let E;try{E=structuredClone(f);}catch(v){return console.warn("[Directive] fact-pii walker: value is not structured-cloneable \u2014 leaving it as-is and skipping inspection. Wire a customDetector for shapes containing functions, DOM nodes, cycles, or WeakMaps.",v instanceof Error?v.message:String(v)),{matched:false}}return I(E,p)}function I(l,p){if(typeof l=="string"){let f=b(l);return f.length===0?{matched:false}:{matched:true,redacted:A(l,f),detected:f}}if(p<=0)return {matched:false};if(Array.isArray(l)){l.length>y&&console.warn(`[Directive] fact-pii walker truncated array at ${y} elements \u2014 pass a customDetector for larger payloads`);let f=Math.min(l.length,y),E=null,v=[];for(let w=0;w<f;w++){let S=I(l[w],p-1);if(S.matched){E===null&&(E=[...l]),E[w]=S.redacted;for(let C of S.detected)v.push(C);}}return E===null?{matched:false}:{matched:true,redacted:E,detected:v}}if(l&&typeof l=="object"){if(l instanceof Map||l instanceof Set||l instanceof Date||l instanceof RegExp||l instanceof Error||ArrayBuffer.isView(l)||l instanceof ArrayBuffer||typeof Blob<"u"&&l instanceof Blob){if(l instanceof Error&&typeof l.message=="string"){let v=b(l.message);if(v.length>0)return {matched:true,redacted:l,detected:v}}return {matched:false}}let f=null,E=[];for(let[v,w]of Object.entries(l))if(typeof w=="string"){let S=b(w);if(S.length===0)continue;f===null&&(f={...l}),f[v]=A(w,S);for(let C of S)E.push(C);}else if(p>1&&w&&typeof w=="object"){let S=I(w,p-1);if(!S.matched)continue;f===null&&(f={...l}),f[v]=S.redacted;for(let C of S.detected)E.push(C);}return f===null?{matched:false}:{matched:true,redacted:f,detected:E}}return {matched:false}}return {name:"fact-pii-guardrail",onInit(l){h(l);},onFactSet(l,p,f){if(!g||!d.has(l)||p===f)return;let E=P(p);if(!E.matched||(n?.(l,E.detected,i),i==="alert"))return;let v=x?.facts;if(v?.$store?.set)try{v.$store.set(l,E.redacted);}catch{}},onFactsBatch(l){if(g)for(let p of l){if(p.type!=="set"||!d.has(p.key))continue;let f=P(p.value);if(!f.matched||(n?.(p.key,f.detected,i),i==="alert"))continue;try{p.value=f.redacted;}catch{}let E=x?.facts;if(E?.$store?.set)try{E.$store.set(p.key,f.redacted);}catch{}}}}}var Z=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:a=>{let i=a.replace(/[-\s]/g,"");return !(i.startsWith("000")||i.startsWith("666")||i.startsWith("9")||i.slice(3,5)==="00"||i.slice(5)==="0000")},confidence:.95},{type:"credit_card",pattern:/\b((?:\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4})|\d{13,19})\b/g,validate:a=>{let i=a.replace(/[-\s]/g,"");if(i.length<13||i.length>19)return false;let r=0,t=false;for(let e=i.length-1;e>=0;e--){let n=i[e];if(!n)continue;let s=Number.parseInt(n,10);t&&(s*=2,s>9&&(s-=9)),r+=s,t=!t;}return r%10===0},confidence:.95},{type:"email",pattern:/\b([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})\b/gi,confidence:.9},{type:"phone",pattern:/\b(\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4})\b/g,validate:a=>{let i=a.replace(/\D/g,"");return i.length>=10&&i.length<=11},confidence:.8},{type:"date_of_birth",pattern:/\b(born|dob|birth.?date|date.?of.?birth)[:.\s]+(\d{1,4}[-/]\d{1,2}[-/]\d{1,4})\b/gi,valueGroup:2,confidence:.85},{type:"ip_address",pattern:/\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/g,validate:a=>{let r=a.split(".").map(n=>Number.parseInt(n,10));if(r.some(n=>Number.isNaN(n)||n<0||n>255))return false;let[t,e]=r;return !(t===10||t===172&&e>=16&&e<=31||t===192&&e===168||t===127||t===169&&e===254||a==="0.0.0.0"||a==="255.255.255.255")},confidence:.9},{type:"bank_account",pattern:/\b(account|acct)[\s#:]+(\d{8,17})\b/gi,valueGroup:2,confidence:.7},{type:"passport",pattern:/\b(passport)[\s#:]+([A-Z0-9]{6,9})\b/gi,valueGroup:2,confidence:.75},{type:"driver_license",pattern:/\b(driver'?s?\s*licen[cs]e|dl)[\s#:]+([A-Z0-9]{5,15})\b/gi,valueGroup:2,confidence:.7},{type:"medical_id",pattern:/\b(mrn|medical.?record|patient.?id)[\s#:]+([A-Z0-9-]{6,15})\b/gi,valueGroup:2,confidence:.7},{type:"national_id",pattern:/\b(national.?id|nin|identity.?number|identity.?card|id.?number)[\s#:]+([A-Z0-9-]{6,20})\b/gi,valueGroup:2,confidence:.85}];function q(a){let i=[],r="street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|way|boulevard|blvd|circle|cir|place|pl",t=new RegExp(`\\b(\\d{1,5}\\s+(?:\\w+\\s+){1,4}(?:${r})\\b[^\\n]{0,50}\\b[A-Z]{2}\\s+\\d{5}(?:-\\d{4})?)\\b`,"gi"),e;for(;(e=t.exec(a))!==null;)i.push({type:"address",value:e[0],position:{start:e.index,end:e.index+e[0].length},confidence:.7});return i}var M=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function W(a){let i=[],r=M.join("|"),t=new RegExp(`\\b(${r})[.,:]?\\s+([A-Z][a-z]{1,20}(?:\\s[A-Z][a-z]{1,20}){0,2})\\b`,"gi"),e;for(;(e=t.exec(a))!==null;){let n=e[2],s=e[1];n&&(n.split(/\s+/).length>=2||s&&M.some(c=>s.toLowerCase().includes(c)))&&i.push({type:"name",value:n,position:{start:e.index,end:e.index+e[0].length},confidence:.6,context:e[0]});}return i}var $=1e5;function K(a,i){let r=[],t=new RegExp(a.pattern.source,a.pattern.flags),e=a.valueGroup??1,n;for(;(n=t.exec(i))!==null;){let s=n[e]??n[0],c=n.index,o=n.index+n[0].length,d=i.slice(Math.max(0,c-20),o+20);a.validate&&!a.validate(s,d)||r.push({type:a.type,value:s,position:{start:c,end:o},confidence:a.confidence,context:d});}return r}var D={name:"regex",async detect(a,i){if(a.length>$)throw new Error(`[Directive] Input exceeds maximum length of ${$} characters for PII detection. Truncate input or process in chunks.`);let r=[],t=new Set(i);for(let e of Z)t.has(e.type)&&r.push(...K(e,a));return t.has("address")&&r.push(...q(a)),t.has("name")&&r.push(...W(a)),r}},Y=new Set(["ssn","credit_card","date_of_birth","medical_id","national_id","passport","driver_license","bank_account"]);function J(a,i){let{start:r,end:t}=a.position;return Number.isInteger(r)&&Number.isInteger(t)&&r>=0&&r<t&&t<=i}function X(a,i){switch(i){case "placeholder":return "[REDACTED]";case "typed":return Y.has(a.type)?"[REDACTED]":`[${a.type.toUpperCase()}]`;case "masked":{if(a.type!=="credit_card")return "****";let r=a.value.replace(/\D/g,"");return `****${r.length>4?r.slice(-4):""}`}case "hashed":return `[HASH:${Q(a.value)}]`}}function F(a,i,r="typed"){let e=[...i.filter(o=>J(o,a.length))].sort((o,d)=>{if(d.confidence!==o.confidence)return d.confidence-o.confidence;let m=o.position.end-o.position.start,u=d.position.end-d.position.start;return u!==m?u-m:o.position.start-d.position.start}),n=[];for(let o of e)n.some(m=>o.position.start<m.position.end&&m.position.start<o.position.end)||n.push(o);let s=n.sort((o,d)=>d.position.start-o.position.start),c=a;for(let o of s){let d=X(o,r);c=c.slice(0,o.position.start)+d+c.slice(o.position.end);}return c}function Q(a){let t=2166136261;for(let e=0;e<a.length;e++)t^=a.charCodeAt(e),t=Math.imul(t,16777619);return (t>>>0).toString(16).padStart(8,"0")}var j=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function ee(a={}){let{types:i=j,detector:r="regex",redact:t=false,redactionStyle:e="typed",minConfidence:n=.7,onDetected:s,allowlist:c=[],minItemsToBlock:o=1,detectorTimeout:d=5e3}=a,m=r==="regex"?D:r,u=new Set(c.map(g=>g.toLowerCase().trim()));async function y(g,x){if(m===D)return m.detect(g,x);let h,b=m.detect(g,x),P=new Promise((I,l)=>{h=setTimeout(()=>l(new Error(`[Directive] PII detector '${m.name}' timed out after ${d}ms`)),d);});b.catch(()=>{}),P.catch(()=>{});try{return await Promise.race([b,P])}finally{clearTimeout(h);}}return async g=>{let h=(await y(g.input,i)).filter(b=>!(b.confidence<n||u.has(b.value.toLowerCase().trim())));if(h.length>0&&s?.(h),h.length>=o){if(t)return {passed:true,transformed:F(g.input,h,e)};let b={};for(let I of h)b[I.type]=(b[I.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(b).map(([I,l])=>`${I}: ${l}`).join(", ")})`}}return {passed:true}}}function Ie(a={}){let i=ee(a);return async(r,t)=>{let e=typeof r.output=="string"?r.output:JSON.stringify(r.output);return i({input:e,agentName:r.agentName},t)}}async function te(a,i={}){let{types:r=j,detector:t="regex",minConfidence:e=.7,timeout:n=5e3}=i,s=t==="regex"?D:t,c;if(s===D)c=await s.detect(a,r);else {let m,u=s.detect(a,r),y=new Promise((g,x)=>{m=setTimeout(()=>x(new Error(`[Directive] PII detector '${s.name}' timed out after ${n}ms`)),n);});u.catch(()=>{}),y.catch(()=>{});try{c=await Promise.race([u,y]);}finally{clearTimeout(m);}}let o=c.filter(m=>m.confidence>=e),d={};for(let m of o)d[m.type]=(d[m.type]||0)+1;return {detected:o.length>0,items:o,typeCounts:d}}async function Pe(a,i={}){let r=await te(a,i);return r.detected?{...r,redactedText:F(a,r.items,i.style??"typed")}:{...r}}var k=[{pattern:/ignore\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?|rules?|guidelines?)/i,name:"ignore-previous",severity:"critical",category:"instruction_override"},{pattern:/disregard\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?)/i,name:"disregard-previous",severity:"critical",category:"instruction_override"},{pattern:/forget\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?)/i,name:"forget-previous",severity:"critical",category:"instruction_override"},{pattern:/override\s+(the\s+)?(system|base)\s+(prompt|instructions?)/i,name:"override-system",severity:"critical",category:"instruction_override"},{pattern:/\bDAN\s+(mode|jailbreak)\b/i,name:"dan-mode",severity:"critical",category:"jailbreak"},{pattern:/\bjailbreak(ed)?\s*(mode)?\b/i,name:"jailbreak-keyword",severity:"high",category:"jailbreak"},{pattern:/developer\s+mode\s+(enabled|activated|on)/i,name:"developer-mode",severity:"critical",category:"jailbreak"},{pattern:/pretend\s+(you\s+)?(are|can|have)\s+(no\s+)?(restrictions?|limits?|boundaries?|ethics)/i,name:"pretend-no-restrictions",severity:"high",category:"jailbreak"},{pattern:/you\s+(now\s+)?have\s+no\s+(ethical\s+)?(restrictions?|guidelines?|boundaries?)/i,name:"no-restrictions",severity:"high",category:"jailbreak"},{pattern:/you\s+are\s+now\s+(a|an)\s+\w+\s+(that|who)\s+(can|will|must)/i,name:"role-assignment",severity:"medium",category:"role_manipulation"},{pattern:/from\s+now\s+on,?\s+(you\s+)?(will|must|should)\s+(only\s+)?/i,name:"from-now-on",severity:"medium",category:"role_manipulation"},{pattern:/^(system|assistant|user):\s*/im,name:"fake-role-marker",severity:"high",category:"context_manipulation"},{pattern:/<\|?(system|endofprompt|im_start|im_end)\|?>/i,name:"special-token-injection",severity:"critical",category:"context_manipulation"},{pattern:/```(system|assistant|instructions?)\n/i,name:"markdown-code-injection",severity:"medium",category:"delimiter_injection"},{pattern:/<system>|<\/system>|<instructions?>|<\/instructions?>/i,name:"xml-tag-injection",severity:"high",category:"delimiter_injection"},{pattern:/fetch\s+(content\s+)?(from|at)\s+(the\s+)?url/i,name:"url-fetch-instruction",severity:"medium",category:"indirect_injection"},{pattern:/execute\s+(the\s+)?(code|script|command)\s+(from|in|at)/i,name:"execute-from-source",severity:"high",category:"indirect_injection"}],L=[...k,{pattern:/act\s+as\s+(if\s+)?(you\s+)?(were|are|can)/i,name:"act-as",severity:"low",category:"role_manipulation"},{pattern:/new\s+instructions?:/i,name:"new-instructions",severity:"medium",category:"instruction_override"},{pattern:/\[system\]|\[admin\]|\[developer\]/i,name:"bracket-role-marker",severity:"medium",category:"context_manipulation"},{pattern:/base64|rot13|decode\s+(this|the)/i,name:"encoding-reference",severity:"low",category:"encoding_evasion"},{pattern:/\u200b|\u200c|\u200d|\u2060|\ufeff/,name:"zero-width-chars",severity:"medium",category:"encoding_evasion"}],O=1e5;function z(a,i=k){if(a.length>O)throw new Error(`[Directive] Input exceeds maximum length of ${O} characters for injection detection. Truncate input or process in chunks.`);let r=[];for(let{pattern:s,name:c,severity:o,category:d}of i){let u=new RegExp(s.source,s.flags).exec(a);u&&r.push({name:c,category:d,severity:o,match:u[0],position:u.index});}let t={low:10,medium:25,high:50,critical:100},e=r.reduce((s,c)=>s+t[c.severity],0),n=Math.min(100,e);return {detected:r.length>0,patterns:r,riskScore:n}}function ne(a,i=k){let r=a.replace(/\u200b|\u200c|\u200d|\u2060|\ufeff/g,""),t=i.map(d=>`(${d.pattern.source})`);if(t.length===0)return r;let e=i.some(d=>d.pattern.flags.includes("g")),n=i.some(d=>d.pattern.flags.includes("i")),s=i.some(d=>d.pattern.flags.includes("m")),c=`${e?"g":""}${n?"i":""}${s?"m":""}`,o=new RegExp(t.join("|"),c||"gi");return r=r.replace(o,"[REDACTED]"),r}function re(a={}){let{additionalPatterns:i=[],replacePatterns:r,strictMode:t=false,blockThreshold:e=50,sanitize:n=false,onBlocked:s,ignoreCategories:c=[]}=a,o;if(r?o=r:o=t?[...L]:[...k],o=[...o,...i],c.length>0){let d=new Set(c);o=o.filter(m=>!d.has(m.category));}return d=>{let m=z(d.input,o);if(m.detected&&m.riskScore>=e){if(s?.(d.input,m),n)return {passed:true,transformed:ne(d.input,o)};let u=m.patterns.sort((y,g)=>{let x={critical:0,high:1,medium:2,low:3};return x[y.severity]-x[g.severity]}).slice(0,3).map(y=>y.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${m.riskScore}%, patterns: ${u})`}}return {passed:true}}}function Ee(a,i){return `[UNTRUSTED_CONTENT source="${i}"]
1
+ import {c}from'./chunk-UR5BMWEN.js';import {safeStringify}from'@directive-run/core/internals';function ce(a){let{patterns:i=[/\b\d{3}-\d{2}-\d{4}\b/g,/\b\d{16}\b/g,/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi],redact:r=false,redactReplacement:t="[REDACTED]"}=a;return e=>{let n=e.input,s=false;for(let c of i)c.lastIndex=0,c.test(n)&&(s=true,r&&(c.lastIndex=0,n=n.replace(c,t)));return s&&!r?{passed:false,reason:"Input contains PII"}:{passed:true,transformed:r&&s?n:void 0}}}function de(a){let{checkFn:i,message:r="Content flagged by moderation"}=a;return async t=>{let e="output"in t?typeof t.output=="string"?t.output:JSON.stringify(t.output):t.input,n=await i(e);return {passed:!n,reason:n?r:void 0}}}function le(a){let{maxTokensPerMinute:i=1e5,maxRequestsPerMinute:r=60}=a,t=Math.max(r,1e3),e=[],n=[],s=6e4;function c$1(d,m){let u=0,h=d.length;for(;u<h;){let g=u+h>>>1;(d[g]??0)<m?u=g+1:h=g;}return u}let o=(d,m)=>{let u=Date.now(),h=u-s,g=c$1(e,h);g>0&&(e=e.slice(g));let v=c$1(n,h);v>0&&(n=n.slice(v));let x=m.facts[c]?.tokenUsage??0,E=e.length,l=n.length;return E+x>i?{passed:false,reason:"Token rate limit exceeded"}:l>=r?{passed:false,reason:"Request rate limit exceeded"}:(n.length<t&&n.push(u),e.length<t&&e.push(u),{passed:true})};return o.reset=()=>{e=[],n=[];},o}function ue(a){let{allowlist:i,denylist:r,caseSensitive:t=false}=a,e=i?.map(s=>t?s:s.toLowerCase()),n=r?.map(s=>t?s:s.toLowerCase());return s=>{let c=t?s.toolCall.name:s.toolCall.name.toLowerCase();return e&&!e.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" not in allowlist`}:n?.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" is blocked`}:{passed:true}}}function me(a){let{validate:i,errorPrefix:r="Output schema validation failed"}=a;return t=>{let e=i(t.output);return typeof e=="boolean"?{passed:e,reason:e?void 0:r}:e.valid?{passed:true}:{passed:false,reason:e.errors?.length?`${r}: ${e.errors.join("; ")}`:r}}}function fe(a){let{type:i,requiredFields:r=[],minLength:t,maxLength:e,minStringLength:n,maxStringLength:s}=a;return c=>{let o=c.output;switch(i){case "string":return typeof o!="string"?{passed:false,reason:`Expected string, got ${typeof o}`}:n!==void 0&&o.length<n?{passed:false,reason:`String too short: ${o.length} < ${n}`}:s!==void 0&&o.length>s?{passed:false,reason:`String too long: ${o.length} > ${s}`}:{passed:true};case "number":return typeof o!="number"||Number.isNaN(o)?{passed:false,reason:`Expected number, got ${typeof o}`}:{passed:true};case "boolean":return typeof o!="boolean"?{passed:false,reason:`Expected boolean, got ${typeof o}`}:{passed:true};case "object":if(typeof o!="object"||o===null||Array.isArray(o))return {passed:false,reason:`Expected object, got ${Array.isArray(o)?"array":typeof o}`};for(let d of r)if(!(d in o))return {passed:false,reason:`Missing required field: ${d}`};return {passed:true};case "array":return Array.isArray(o)?t!==void 0&&o.length<t?{passed:false,reason:`Array too short: ${o.length} < ${t}`}:e!==void 0&&o.length>e?{passed:false,reason:`Array too long: ${o.length} > ${e}`}:{passed:true}:{passed:false,reason:`Expected array, got ${typeof o}`};default:return {passed:false,reason:`Unknown type: ${i}`}}}}function pe(a){let{maxCharacters:i,maxTokens:r,estimateTokens:t=e=>Math.ceil(e.length/4)}=a;return e=>{let n=safeStringify(e.output);if(i!==void 0&&n.length>i)return {passed:false,reason:`Output too long: ${n.length} characters (max: ${i})`};if(r!==void 0){let s=t(n);if(s>r)return {passed:false,reason:`Output too long: ~${s} tokens (max: ${r})`}}return {passed:true}}}function ge(a){let{blockedPatterns:i,caseSensitive:r=false}=a;i.length===0&&console.warn("[Directive] createContentFilterGuardrail: blockedPatterns is empty \u2014 no content will be filtered");let t=i.map(e=>{if(e instanceof RegExp)return e;let n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(n,r?"g":"gi")});return e=>{let n=safeStringify(e.output);for(let s of t)if(s.lastIndex=0,s.test(n))return {passed:false,reason:`Output contains blocked content matching: ${s.source}`};return {passed:true}}}function H(a){let i=a.replace(/[\s-]/g,"");if(i.length<13||i.length>19||!/^\d+$/.test(i))return false;let r=0,t=false;for(let e=i.length-1;e>=0;e--){let n=i[e];if(!n)continue;let s=Number.parseInt(n,10);t&&(s*=2,s>9&&(s-=9)),r+=s,t=!t;}return r%10===0}var V=[{type:"ssn",regex:/\b\d{3}-\d{2}-\d{4}\b/g,redactionToken:"[SSN]"},{type:"credit_card",regex:/\b((?:\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4})|\d{13,19})\b/g,validate:H,redactionToken:"[CREDIT_CARD]"},{type:"email",regex:/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,redactionToken:"[EMAIL]"}];function U(a,i){let r=[];for(let t of V){if(!i.has(t.type))continue;t.regex.lastIndex=0;let e;for(;(e=t.regex.exec(a))!==null;)t.validate&&!t.validate(e[0])||r.push({type:t.type,value:e[0],start:e.index,end:e.index+e[0].length});}return r}function k(a,i){if(i.length===0)return a;let r=[...i].sort((n,s)=>s.start-n.start),t={ssn:"[SSN]",credit_card:"[CREDIT_CARD]",email:"[EMAIL]"},e=a;for(let n of r)e=e.slice(0,n.start)+t[n.type]+e.slice(n.end);return e}function he(a={}){let{mode:i="redact",types:r=["ssn","credit_card","email"],includeKeys:t=[],excludeKeys:e=[],onBlocked:n,customDetector:s,walkDepth:c=1}=a,o=new Set(r),d=new Set(t),m=new Set(e),u=Number.isFinite(c)?Math.max(1,Math.min(5,Math.floor(c))):1,h=1e4,g=false,v=null;function b(l){if(g)return;g=true,v=l;let f=l.meta?.byTag?.("pii");if(f)for(let p of f)p.type==="fact"&&p.id&&!m.has(p.id)&&d.add(p.id);}function I(l){let f=[];if(o.size>0)for(let p of U(l,o))f.push(p);if(s)for(let p of s(l))f.push(p);return f}function x(l,f=u){if(typeof l=="string"){let y=I(l);return y.length===0?{matched:false}:{matched:true,redacted:k(l,y),detected:y}}if(f<=0)return {matched:false};if(l===null||typeof l!="object")return {matched:false};let p=l;if(Array.isArray(l)){let y=l.length,P=Number.isFinite(y)&&y>0?Math.min(Math.floor(y),h):0;y>h&&console.warn(`[Directive] fact-pii walker truncated top-level array at ${h} elements before clone \u2014 pass a customDetector for larger payloads`);let S=new Array(P);for(let C=0;C<P;C++)S[C]=l[C];p=S;}let w;try{w=structuredClone(p);}catch(y){return console.warn("[Directive] fact-pii walker: value is not structured-cloneable \u2014 leaving it as-is and skipping inspection. Wire a customDetector for shapes containing functions, DOM nodes, cycles, or WeakMaps.",y instanceof Error?y.message:String(y)),{matched:false}}return E(w,f)}function E(l,f){if(typeof l=="string"){let p=I(l);return p.length===0?{matched:false}:{matched:true,redacted:k(l,p),detected:p}}if(f<=0)return {matched:false};if(Array.isArray(l)){l.length>h&&console.warn(`[Directive] fact-pii walker truncated array at ${h} elements \u2014 pass a customDetector for larger payloads`);let p=Math.min(l.length,h),w=null,y=[];for(let P=0;P<p;P++){let S=E(l[P],f-1);if(S.matched){w===null&&(w=[...l]),w[P]=S.redacted;for(let C of S.detected)y.push(C);}}return w===null?{matched:false}:{matched:true,redacted:w,detected:y}}if(l&&typeof l=="object"){if(l instanceof Map||l instanceof Set||l instanceof Date||l instanceof RegExp||l instanceof Error||ArrayBuffer.isView(l)||l instanceof ArrayBuffer||typeof Blob<"u"&&l instanceof Blob){if(l instanceof Error){let y=[];if(typeof l.message=="string")for(let P of I(l.message))y.push(P);if(typeof l.cause=="string")for(let P of I(l.cause))y.push(P);else if(l.cause instanceof Error&&f>1){let P=E(l.cause,f-1);if(P.matched)for(let S of P.detected)y.push(S);}if(typeof AggregateError<"u"&&l instanceof AggregateError&&Array.isArray(l.errors)&&f>1){for(let P of l.errors)if(typeof P=="string")for(let S of I(P))y.push(S);else if(P instanceof Error){let S=E(P,f-1);if(S.matched)for(let C of S.detected)y.push(C);}}if(y.length>0)return {matched:true,redacted:l,detected:y}}return {matched:false}}let p=null,w=[];for(let[y,P]of Object.entries(l))if(typeof P=="string"){let S=I(P);if(S.length===0)continue;p===null&&(p={...l}),p[y]=k(P,S);for(let C of S)w.push(C);}else if(f>1&&P&&typeof P=="object"){let S=E(P,f-1);if(!S.matched)continue;p===null&&(p={...l}),p[y]=S.redacted;for(let C of S.detected)w.push(C);}return p===null?{matched:false}:{matched:true,redacted:p,detected:w}}return {matched:false}}return {name:"fact-pii-guardrail",onInit(l){b(l);},onFactSet(l,f,p){if(!g||!d.has(l)||f===p&&(typeof f!="object"||f===null))return;let w=x(f);if(!w.matched||(n?.(l,w.detected,i),i==="alert")||w.redacted===f)return;let y=v?.facts;if(y?.$store?.set)try{y.$store.set(l,w.redacted);}catch{}},onFactsBatch(l){if(g)for(let f of l){if(f.type!=="set"||!d.has(f.key))continue;let p=f.prev;if(f.value===p&&(typeof f.value!="object"||f.value===null))continue;let w=x(f.value);if(!w.matched||(n?.(f.key,w.detected,i),i==="alert")||w.redacted===f.value)continue;try{f.value=w.redacted;}catch{}let y=v?.facts;if(y?.$store?.set)try{y.$store.set(f.key,w.redacted);}catch{}}}}}var Z=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:a=>{let i=a.replace(/[-\s]/g,"");return !(i.startsWith("000")||i.startsWith("666")||i.startsWith("9")||i.slice(3,5)==="00"||i.slice(5)==="0000")},confidence:.95},{type:"credit_card",pattern:/\b((?:\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4})|\d{13,19})\b/g,validate:a=>{let i=a.replace(/[-\s]/g,"");if(i.length<13||i.length>19)return false;let r=0,t=false;for(let e=i.length-1;e>=0;e--){let n=i[e];if(!n)continue;let s=Number.parseInt(n,10);t&&(s*=2,s>9&&(s-=9)),r+=s,t=!t;}return r%10===0},confidence:.95},{type:"email",pattern:/\b([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})\b/gi,confidence:.9},{type:"phone",pattern:/\b(\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4})\b/g,validate:a=>{let i=a.replace(/\D/g,"");return i.length>=10&&i.length<=11},confidence:.8},{type:"date_of_birth",pattern:/\b(born|dob|birth.?date|date.?of.?birth)[:.\s]+(\d{1,4}[-/]\d{1,2}[-/]\d{1,4})\b/gi,valueGroup:2,confidence:.85},{type:"ip_address",pattern:/\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/g,validate:a=>{let r=a.split(".").map(n=>Number.parseInt(n,10));if(r.some(n=>Number.isNaN(n)||n<0||n>255))return false;let[t,e]=r;return !(t===10||t===172&&e>=16&&e<=31||t===192&&e===168||t===127||t===169&&e===254||a==="0.0.0.0"||a==="255.255.255.255")},confidence:.9},{type:"bank_account",pattern:/\b(account|acct)[\s#:]+(\d{8,17})\b/gi,valueGroup:2,confidence:.7},{type:"passport",pattern:/\b(passport)[\s#:]+([A-Z0-9]{6,9})\b/gi,valueGroup:2,confidence:.75},{type:"driver_license",pattern:/\b(driver'?s?\s*licen[cs]e|dl)[\s#:]+([A-Z0-9]{5,15})\b/gi,valueGroup:2,confidence:.7},{type:"medical_id",pattern:/\b(mrn|medical.?record|patient.?id)[\s#:]+([A-Z0-9-]{6,15})\b/gi,valueGroup:2,confidence:.7},{type:"national_id",pattern:/\b(national.?id|nin|identity.?number|identity.?card|id.?number)[\s#:]+([A-Z0-9-]{6,20})\b/gi,valueGroup:2,confidence:.85}];function q(a){let i=[],r="street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|way|boulevard|blvd|circle|cir|place|pl",t=new RegExp(`\\b(\\d{1,5}\\s+(?:\\w+\\s+){1,4}(?:${r})\\b[^\\n]{0,50}\\b[A-Z]{2}\\s+\\d{5}(?:-\\d{4})?)\\b`,"gi"),e;for(;(e=t.exec(a))!==null;)i.push({type:"address",value:e[0],position:{start:e.index,end:e.index+e[0].length},confidence:.7});return i}var M=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function W(a){let i=[],r=M.join("|"),t=new RegExp(`\\b(${r})[.,:]?\\s+([A-Z][a-z]{1,20}(?:\\s[A-Z][a-z]{1,20}){0,2})\\b`,"gi"),e;for(;(e=t.exec(a))!==null;){let n=e[2],s=e[1];n&&(n.split(/\s+/).length>=2||s&&M.some(c=>s.toLowerCase().includes(c)))&&i.push({type:"name",value:n,position:{start:e.index,end:e.index+e[0].length},confidence:.6,context:e[0]});}return i}var $=1e5;function K(a,i){let r=[],t=new RegExp(a.pattern.source,a.pattern.flags),e=a.valueGroup??1,n;for(;(n=t.exec(i))!==null;){let s=n[e]??n[0],c=n.index,o=n.index+n[0].length,d=i.slice(Math.max(0,c-20),o+20);a.validate&&!a.validate(s,d)||r.push({type:a.type,value:s,position:{start:c,end:o},confidence:a.confidence,context:d});}return r}var D={name:"regex",async detect(a,i){if(a.length>$)throw new Error(`[Directive] Input exceeds maximum length of ${$} characters for PII detection. Truncate input or process in chunks.`);let r=[],t=new Set(i);for(let e of Z)t.has(e.type)&&r.push(...K(e,a));return t.has("address")&&r.push(...q(a)),t.has("name")&&r.push(...W(a)),r}},Y=new Set(["ssn","credit_card","date_of_birth","medical_id","national_id","passport","driver_license","bank_account"]);function J(a,i){let{start:r,end:t}=a.position;return Number.isInteger(r)&&Number.isInteger(t)&&r>=0&&r<t&&t<=i}function X(a,i){switch(i){case "placeholder":return "[REDACTED]";case "typed":return Y.has(a.type)?"[REDACTED]":`[${a.type.toUpperCase()}]`;case "masked":{if(a.type!=="credit_card")return "****";let r=a.value.replace(/\D/g,"");return `****${r.length>4?r.slice(-4):""}`}case "hashed":return `[HASH:${Q(a.value)}]`}}function F(a,i,r="typed"){let e=[...i.filter(o=>J(o,a.length))].sort((o,d)=>{if(d.confidence!==o.confidence)return d.confidence-o.confidence;let m=o.position.end-o.position.start,u=d.position.end-d.position.start;return u!==m?u-m:o.position.start-d.position.start}),n=[];for(let o of e)n.some(m=>o.position.start<m.position.end&&m.position.start<o.position.end)||n.push(o);let s=n.sort((o,d)=>d.position.start-o.position.start),c=a;for(let o of s){let d=X(o,r);c=c.slice(0,o.position.start)+d+c.slice(o.position.end);}return c}function Q(a){let t=2166136261;for(let e=0;e<a.length;e++)t^=a.charCodeAt(e),t=Math.imul(t,16777619);return (t>>>0).toString(16).padStart(8,"0")}var j=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function ee(a={}){let{types:i=j,detector:r="regex",redact:t=false,redactionStyle:e="typed",minConfidence:n=.7,onDetected:s,allowlist:c=[],minItemsToBlock:o=1,detectorTimeout:d=5e3}=a,m=r==="regex"?D:r,u=new Set(c.map(g=>g.toLowerCase().trim()));async function h(g,v){if(m===D)return m.detect(g,v);let b,I=m.detect(g,v),x=new Promise((E,l)=>{b=setTimeout(()=>l(new Error(`[Directive] PII detector '${m.name}' timed out after ${d}ms`)),d);});I.catch(()=>{}),x.catch(()=>{});try{return await Promise.race([I,x])}finally{clearTimeout(b);}}return async g=>{let b=(await h(g.input,i)).filter(I=>!(I.confidence<n||u.has(I.value.toLowerCase().trim())));if(b.length>0&&s?.(b),b.length>=o){if(t)return {passed:true,transformed:F(g.input,b,e)};let I={};for(let E of b)I[E.type]=(I[E.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(I).map(([E,l])=>`${E}: ${l}`).join(", ")})`}}return {passed:true}}}function Ie(a={}){let i=ee(a);return async(r,t)=>{let e=typeof r.output=="string"?r.output:JSON.stringify(r.output);return i({input:e,agentName:r.agentName},t)}}async function te(a,i={}){let{types:r=j,detector:t="regex",minConfidence:e=.7,timeout:n=5e3}=i,s=t==="regex"?D:t,c;if(s===D)c=await s.detect(a,r);else {let m,u=s.detect(a,r),h=new Promise((g,v)=>{m=setTimeout(()=>v(new Error(`[Directive] PII detector '${s.name}' timed out after ${n}ms`)),n);});u.catch(()=>{}),h.catch(()=>{});try{c=await Promise.race([u,h]);}finally{clearTimeout(m);}}let o=c.filter(m=>m.confidence>=e),d={};for(let m of o)d[m.type]=(d[m.type]||0)+1;return {detected:o.length>0,items:o,typeCounts:d}}async function Ee(a,i={}){let r=await te(a,i);return r.detected?{...r,redactedText:F(a,r.items,i.style??"typed")}:{...r}}var A=[{pattern:/ignore\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?|rules?|guidelines?)/i,name:"ignore-previous",severity:"critical",category:"instruction_override"},{pattern:/disregard\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?)/i,name:"disregard-previous",severity:"critical",category:"instruction_override"},{pattern:/forget\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?)/i,name:"forget-previous",severity:"critical",category:"instruction_override"},{pattern:/override\s+(the\s+)?(system|base)\s+(prompt|instructions?)/i,name:"override-system",severity:"critical",category:"instruction_override"},{pattern:/\bDAN\s+(mode|jailbreak)\b/i,name:"dan-mode",severity:"critical",category:"jailbreak"},{pattern:/\bjailbreak(ed)?\s*(mode)?\b/i,name:"jailbreak-keyword",severity:"high",category:"jailbreak"},{pattern:/developer\s+mode\s+(enabled|activated|on)/i,name:"developer-mode",severity:"critical",category:"jailbreak"},{pattern:/pretend\s+(you\s+)?(are|can|have)\s+(no\s+)?(restrictions?|limits?|boundaries?|ethics)/i,name:"pretend-no-restrictions",severity:"high",category:"jailbreak"},{pattern:/you\s+(now\s+)?have\s+no\s+(ethical\s+)?(restrictions?|guidelines?|boundaries?)/i,name:"no-restrictions",severity:"high",category:"jailbreak"},{pattern:/you\s+are\s+now\s+(a|an)\s+\w+\s+(that|who)\s+(can|will|must)/i,name:"role-assignment",severity:"medium",category:"role_manipulation"},{pattern:/from\s+now\s+on,?\s+(you\s+)?(will|must|should)\s+(only\s+)?/i,name:"from-now-on",severity:"medium",category:"role_manipulation"},{pattern:/^(system|assistant|user):\s*/im,name:"fake-role-marker",severity:"high",category:"context_manipulation"},{pattern:/<\|?(system|endofprompt|im_start|im_end)\|?>/i,name:"special-token-injection",severity:"critical",category:"context_manipulation"},{pattern:/```(system|assistant|instructions?)\n/i,name:"markdown-code-injection",severity:"medium",category:"delimiter_injection"},{pattern:/<system>|<\/system>|<instructions?>|<\/instructions?>/i,name:"xml-tag-injection",severity:"high",category:"delimiter_injection"},{pattern:/fetch\s+(content\s+)?(from|at)\s+(the\s+)?url/i,name:"url-fetch-instruction",severity:"medium",category:"indirect_injection"},{pattern:/execute\s+(the\s+)?(code|script|command)\s+(from|in|at)/i,name:"execute-from-source",severity:"high",category:"indirect_injection"}],L=[...A,{pattern:/act\s+as\s+(if\s+)?(you\s+)?(were|are|can)/i,name:"act-as",severity:"low",category:"role_manipulation"},{pattern:/new\s+instructions?:/i,name:"new-instructions",severity:"medium",category:"instruction_override"},{pattern:/\[system\]|\[admin\]|\[developer\]/i,name:"bracket-role-marker",severity:"medium",category:"context_manipulation"},{pattern:/base64|rot13|decode\s+(this|the)/i,name:"encoding-reference",severity:"low",category:"encoding_evasion"},{pattern:/\u200b|\u200c|\u200d|\u2060|\ufeff/,name:"zero-width-chars",severity:"medium",category:"encoding_evasion"}],O=1e5;function z(a,i=A){if(a.length>O)throw new Error(`[Directive] Input exceeds maximum length of ${O} characters for injection detection. Truncate input or process in chunks.`);let r=[];for(let{pattern:s,name:c,severity:o,category:d}of i){let u=new RegExp(s.source,s.flags).exec(a);u&&r.push({name:c,category:d,severity:o,match:u[0],position:u.index});}let t={low:10,medium:25,high:50,critical:100},e=r.reduce((s,c)=>s+t[c.severity],0),n=Math.min(100,e);return {detected:r.length>0,patterns:r,riskScore:n}}function ne(a,i=A){let r=a.replace(/\u200b|\u200c|\u200d|\u2060|\ufeff/g,""),t=i.map(d=>`(${d.pattern.source})`);if(t.length===0)return r;let e=i.some(d=>d.pattern.flags.includes("g")),n=i.some(d=>d.pattern.flags.includes("i")),s=i.some(d=>d.pattern.flags.includes("m")),c=`${e?"g":""}${n?"i":""}${s?"m":""}`,o=new RegExp(t.join("|"),c||"gi");return r=r.replace(o,"[REDACTED]"),r}function re(a={}){let{additionalPatterns:i=[],replacePatterns:r,strictMode:t=false,blockThreshold:e=50,sanitize:n=false,onBlocked:s,ignoreCategories:c=[]}=a,o;if(r?o=r:o=t?[...L]:[...A],o=[...o,...i],c.length>0){let d=new Set(c);o=o.filter(m=>!d.has(m.category));}return d=>{let m=z(d.input,o);if(m.detected&&m.riskScore>=e){if(s?.(d.input,m),n)return {passed:true,transformed:ne(d.input,o)};let u=m.patterns.sort((h,g)=>{let v={critical:0,high:1,medium:2,low:3};return v[h.severity]-v[g.severity]}).slice(0,3).map(h=>h.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${m.riskScore}%, patterns: ${u})`}}return {passed:true}}}function xe(a,i){return `[UNTRUSTED_CONTENT source="${i}"]
2
2
  ${a}
3
- [/UNTRUSTED_CONTENT]`}function ve(a){let{baseGuardrail:i=re({strictMode:true,blockThreshold:25}),additionalPatterns:r=[]}=a,t=/\[UNTRUSTED_CONTENT source="([^"]+)"\]([\s\S]*?)\[\/UNTRUSTED_CONTENT\]/g;return async(e,n)=>{let s=await i(e,n);if(!s.passed)return s;let c=e.input.matchAll(t);for(let o of c){let[,d,m]=o;if(!m)continue;let u=z(m,[...L,...r]);if(u.detected&&u.riskScore>=25)return {passed:false,reason:`Untrusted content from "${d}" contains potential injection (risk: ${u.riskScore}%)`}}return {passed:true}}}function T(a,i){if(a.length!==i.length)throw new Error(`Vector dimensions must match: ${a.length} vs ${i.length}`);let r=0,t=0,e=0;for(let n=0;n<a.length;n++){let s=a[n],c=i[n];r+=s*c,t+=s*s,e+=c*c;}return t=Math.sqrt(t),e=Math.sqrt(e),t===0||e===0?0:r/(t*e)}function ie(a,i,r,t){let e=null;for(let n of i){if(t&&n.agentName&&n.agentName!==t)continue;let s=T(a,n.queryEmbedding);s>=r&&(!e||s>e.similarity)&&(e={entry:n,similarity:s});}return e}function ae(){let a=new Map;function i(r){let t=a.get(r);return t||(t=new Map,a.set(r,t)),t}return {async getEntries(r){return Array.from(i(r).values())},async addEntry(r,t){i(r).set(t.id,t);},async updateEntry(r,t,e){let n=i(r),s=n.get(t);s&&n.set(t,{...s,...e});},async removeEntry(r,t){i(r).delete(t);},async clear(r){a.delete(r);}}}function Se(a){let{embedder:i,similarityThreshold:r=.9,maxCacheSize:t=1e3,ttlMs:e=36e5,namespace:n="default",storage:s=ae(),onHit:c,onMiss:o,onError:d,perAgent:m=false}=a,u={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},y=0;function g(h){if(u.totalEntries=h.length,u.hitRate=u.totalHits+u.totalMisses>0?u.totalHits/(u.totalHits+u.totalMisses):0,u.avgSimilarityOnHit=u.totalHits>0?y/u.totalHits:0,h.length>0){let b=h.map(P=>P.createdAt);u.oldestEntry=Math.min(...b),u.newestEntry=Math.max(...b);}else u.oldestEntry=null,u.newestEntry=null;}async function x(){let h=await s.getEntries(n),b=Date.now();for(let I of h)b-I.createdAt>e&&await s.removeEntry(n,I.id);let P=await s.getEntries(n);if(P.length>t){let l=P.sort((p,f)=>p.accessedAt-f.accessedAt).slice(0,P.length-t);for(let p of l)await s.removeEntry(n,p.id);}}return {async lookup(h,b){let P=Date.now();try{let I=await i(h),l=await s.getEntries(n),p=ie(I,l,r,m?b:void 0);return p?(await s.updateEntry(n,p.entry.id,{accessedAt:Date.now(),accessCount:p.entry.accessCount+1}),u.totalHits++,y+=p.similarity,g(l),c?.(p.entry,p.similarity),{hit:!0,entry:p.entry,similarity:p.similarity,latencyMs:Date.now()-P}):(u.totalMisses++,g(l),o?.(h),{hit:!1,latencyMs:Date.now()-P})}catch(I){return u.totalMisses++,d?.(I instanceof Error?I:new Error(String(I))),{hit:false,latencyMs:Date.now()-P}}},async store(h,b,P,I={}){let l=await i(h),p={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:h,queryEmbedding:l,response:b,metadata:I,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:m?P:void 0};await s.addEntry(n,p),await x();let f=await s.getEntries(n);g(f);},async invalidate(h){let b=await s.getEntries(n),P=0;for(let l of b)h(l)&&(await s.removeEntry(n,l.id),P++);let I=await s.getEntries(n);return g(I),P},async clear(){await s.clear(n),u={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},y=0;},getStats(){return {...u}},async export(){return s.getEntries(n)},async import(h){for(let P of h)await s.addEntry(n,P);await x();let b=await s.getEntries(n);g(b);}}}function Ce(a){let{cache:i}=a;return async r=>{let t=await i.lookup(r.input,r.agentName);return t.hit&&t.entry?{passed:false,cacheHit:true,reason:`Cache hit (similarity: ${(t.similarity*100).toFixed(1)}%)`,cachedResponse:t.entry.response,similarity:t.similarity}:{passed:true,cacheHit:false}}}function Te(a=128){return async i=>{let r=new Array(a).fill(0);for(let e=0;e<i.length;e++){let n=i.charCodeAt(e);r[e%a]+=n/256;}let t=Math.sqrt(r.reduce((e,n)=>e+n*n,0));if(t>0)for(let e=0;e<a;e++)r[e]/=t;return r}}function Re(a){let{batchSize:i=20,embedBatch:r,maxWaitMs:t=50}=a;if(i<1||!Number.isFinite(i))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${i}`);let e=[],n=null,s=false;async function c(){if(e.length===0)return;let o=e;e=[],n&&(clearTimeout(n),n=null);try{let d=o.map(u=>u.text),m=await r(d);if(m.length!==o.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${m.length} embeddings for ${o.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let u=0;u<o.length;u++)o[u].resolve(m[u]);}catch(d){let m=d instanceof Error?d:new Error(String(d));for(let u of o)u.reject(m);}}return {async embed(o){if(s)throw new Error("BatchedEmbedder has been destroyed");return new Promise((d,m)=>{e.push({text:o,resolve:d,reject:m}),e.length>=i?c():n||(n=setTimeout(c,t));})},async flush(){await c();},destroy(){s=true,n&&(clearTimeout(n),n=null);let o=e;e=[];let d=new Error("BatchedEmbedder destroyed");for(let m of o)m.reject(d);}}}function Ae(){let a=new Map,i=null;function r(t){if(i===null)i=t.length;else if(t.length!==i)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${i}, got ${t.length}`)}return {add(t,e){r(e),a.set(t,e);},remove(t){a.delete(t);},search(t,e,n=0){if(i!==null&&t.length!==i)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${i}, got ${t.length}`);let s=[];for(let[c,o]of a){let d=T(t,o);d>=n&&s.push({id:c,similarity:d});}return s.sort((c,o)=>o.similarity-c.similarity),s.slice(0,e)},rebuild(){},size(){return a.size},clear(){a.clear(),i=null;},needsRebuild(){return false}}}function B(a,i){return 1-T(a,i)}function N(a,i){if(a.length===0)return null;let r=Math.floor(i()*a.length),t=a[r],e=a.filter((m,u)=>u!==r);if(e.length===0)return {id:t.id,embedding:t.embedding,mu:0,left:null,right:null};let n=e.map(m=>({item:m,distance:B(t.embedding,m.embedding)}));n.sort((m,u)=>m.distance-u.distance);let s=Math.floor(n.length/2),c=n[s].distance,o=n.slice(0,s).map(m=>m.item),d=n.slice(s).map(m=>m.item);return {id:t.id,embedding:t.embedding,mu:c,left:N(o,i),right:N(d,i)}}function R(a,i,r,t,e,n){if(!a)return;let s=B(i,a.embedding),c=1-s;c>=t&&(e.push({id:a.id,similarity:c}),e.sort((o,d)=>d.similarity-o.similarity),e.length>r&&e.pop(),e.length===r&&(n.value=1-e[e.length-1].similarity)),s<a.mu?(R(a.left,i,r,t,e,n),s+n.value>=a.mu&&R(a.right,i,r,t,e,n)):(R(a.right,i,r,t,e,n),s-n.value<=a.mu&&R(a.left,i,r,t,e,n));}function Ne(a={}){let{random:i=Math.random}=a,r=new Map,t=null,e=false,n=null;function s(c){if(n===null)n=c.length;else if(c.length!==n)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${n}, got ${c.length}`)}return {add(c,o){s(o),r.set(c,o),e=true;},remove(c){r.delete(c),e=true;},search(c,o,d=0){if(n!==null&&c.length!==n)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${n}, got ${c.length}`);if(e||!t){let y=[];for(let[g,x]of r){let h=T(c,x);h>=d&&y.push({id:g,similarity:h});}return y.sort((g,x)=>x.similarity-g.similarity),y.slice(0,o)}let m=[],u={value:Number.POSITIVE_INFINITY};return R(t,c,o,d,m,u),m},rebuild(){let c=Array.from(r.entries()).map(([o,d])=>({id:o,embedding:d}));t=N(c,i),e=false;},size(){return r.size},clear(){r.clear(),t=null,e=false,n=null;},needsRebuild(){return e}}}export{Re as A,Ae as B,Ne as C,ce as a,de as b,le as c,ue as d,me as e,pe as f,fe as g,ge as h,he as i,F as j,ee as k,Ie as l,te as m,Pe as n,k as o,L as p,z as q,ne as r,re as s,Ee as t,ve as u,T as v,ae as w,Se as x,Ce as y,Te as z};//# sourceMappingURL=chunk-PHBBY34I.js.map
4
- //# sourceMappingURL=chunk-PHBBY34I.js.map
3
+ [/UNTRUSTED_CONTENT]`}function we(a){let{baseGuardrail:i=re({strictMode:true,blockThreshold:25}),additionalPatterns:r=[]}=a,t=/\[UNTRUSTED_CONTENT source="([^"]+)"\]([\s\S]*?)\[\/UNTRUSTED_CONTENT\]/g;return async(e,n)=>{let s=await i(e,n);if(!s.passed)return s;let c=e.input.matchAll(t);for(let o of c){let[,d,m]=o;if(!m)continue;let u=z(m,[...L,...r]);if(u.detected&&u.riskScore>=25)return {passed:false,reason:`Untrusted content from "${d}" contains potential injection (risk: ${u.riskScore}%)`}}return {passed:true}}}function T(a,i){if(a.length!==i.length)throw new Error(`Vector dimensions must match: ${a.length} vs ${i.length}`);let r=0,t=0,e=0;for(let n=0;n<a.length;n++){let s=a[n],c=i[n];r+=s*c,t+=s*s,e+=c*c;}return t=Math.sqrt(t),e=Math.sqrt(e),t===0||e===0?0:r/(t*e)}function ie(a,i,r,t){let e=null;for(let n of i){if(t&&n.agentName&&n.agentName!==t)continue;let s=T(a,n.queryEmbedding);s>=r&&(!e||s>e.similarity)&&(e={entry:n,similarity:s});}return e}function ae(){let a=new Map;function i(r){let t=a.get(r);return t||(t=new Map,a.set(r,t)),t}return {async getEntries(r){return Array.from(i(r).values())},async addEntry(r,t){i(r).set(t.id,t);},async updateEntry(r,t,e){let n=i(r),s=n.get(t);s&&n.set(t,{...s,...e});},async removeEntry(r,t){i(r).delete(t);},async clear(r){a.delete(r);}}}function Se(a){let{embedder:i,similarityThreshold:r=.9,maxCacheSize:t=1e3,ttlMs:e=36e5,namespace:n="default",storage:s=ae(),onHit:c,onMiss:o,onError:d,perAgent:m=false}=a,u={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},h=0;function g(b){if(u.totalEntries=b.length,u.hitRate=u.totalHits+u.totalMisses>0?u.totalHits/(u.totalHits+u.totalMisses):0,u.avgSimilarityOnHit=u.totalHits>0?h/u.totalHits:0,b.length>0){let I=b.map(x=>x.createdAt);u.oldestEntry=Math.min(...I),u.newestEntry=Math.max(...I);}else u.oldestEntry=null,u.newestEntry=null;}async function v(){let b=await s.getEntries(n),I=Date.now();for(let E of b)I-E.createdAt>e&&await s.removeEntry(n,E.id);let x=await s.getEntries(n);if(x.length>t){let l=x.sort((f,p)=>f.accessedAt-p.accessedAt).slice(0,x.length-t);for(let f of l)await s.removeEntry(n,f.id);}}return {async lookup(b,I){let x=Date.now();try{let E=await i(b),l=await s.getEntries(n),f=ie(E,l,r,m?I:void 0);return f?(await s.updateEntry(n,f.entry.id,{accessedAt:Date.now(),accessCount:f.entry.accessCount+1}),u.totalHits++,h+=f.similarity,g(l),c?.(f.entry,f.similarity),{hit:!0,entry:f.entry,similarity:f.similarity,latencyMs:Date.now()-x}):(u.totalMisses++,g(l),o?.(b),{hit:!1,latencyMs:Date.now()-x})}catch(E){return u.totalMisses++,d?.(E instanceof Error?E:new Error(String(E))),{hit:false,latencyMs:Date.now()-x}}},async store(b,I,x,E={}){let l=await i(b),f={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:b,queryEmbedding:l,response:I,metadata:E,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:m?x:void 0};await s.addEntry(n,f),await v();let p=await s.getEntries(n);g(p);},async invalidate(b){let I=await s.getEntries(n),x=0;for(let l of I)b(l)&&(await s.removeEntry(n,l.id),x++);let E=await s.getEntries(n);return g(E),x},async clear(){await s.clear(n),u={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},h=0;},getStats(){return {...u}},async export(){return s.getEntries(n)},async import(b){for(let x of b)await s.addEntry(n,x);await v();let I=await s.getEntries(n);g(I);}}}function Ce(a){let{cache:i}=a;return async r=>{let t=await i.lookup(r.input,r.agentName);return t.hit&&t.entry?{passed:false,cacheHit:true,reason:`Cache hit (similarity: ${(t.similarity*100).toFixed(1)}%)`,cachedResponse:t.entry.response,similarity:t.similarity}:{passed:true,cacheHit:false}}}function Te(a=128){return async i=>{let r=new Array(a).fill(0);for(let e=0;e<i.length;e++){let n=i.charCodeAt(e);r[e%a]+=n/256;}let t=Math.sqrt(r.reduce((e,n)=>e+n*n,0));if(t>0)for(let e=0;e<a;e++)r[e]/=t;return r}}function Re(a){let{batchSize:i=20,embedBatch:r,maxWaitMs:t=50}=a;if(i<1||!Number.isFinite(i))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${i}`);let e=[],n=null,s=false;async function c(){if(e.length===0)return;let o=e;e=[],n&&(clearTimeout(n),n=null);try{let d=o.map(u=>u.text),m=await r(d);if(m.length!==o.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${m.length} embeddings for ${o.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let u=0;u<o.length;u++)o[u].resolve(m[u]);}catch(d){let m=d instanceof Error?d:new Error(String(d));for(let u of o)u.reject(m);}}return {async embed(o){if(s)throw new Error("BatchedEmbedder has been destroyed");return new Promise((d,m)=>{e.push({text:o,resolve:d,reject:m}),e.length>=i?c():n||(n=setTimeout(c,t));})},async flush(){await c();},destroy(){s=true,n&&(clearTimeout(n),n=null);let o=e;e=[];let d=new Error("BatchedEmbedder destroyed");for(let m of o)m.reject(d);}}}function ke(){let a=new Map,i=null;function r(t){if(i===null)i=t.length;else if(t.length!==i)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${i}, got ${t.length}`)}return {add(t,e){r(e),a.set(t,e);},remove(t){a.delete(t);},search(t,e,n=0){if(i!==null&&t.length!==i)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${i}, got ${t.length}`);let s=[];for(let[c,o]of a){let d=T(t,o);d>=n&&s.push({id:c,similarity:d});}return s.sort((c,o)=>o.similarity-c.similarity),s.slice(0,e)},rebuild(){},size(){return a.size},clear(){a.clear(),i=null;},needsRebuild(){return false}}}function B(a,i){return 1-T(a,i)}function N(a,i){if(a.length===0)return null;let r=Math.floor(i()*a.length),t=a[r],e=a.filter((m,u)=>u!==r);if(e.length===0)return {id:t.id,embedding:t.embedding,mu:0,left:null,right:null};let n=e.map(m=>({item:m,distance:B(t.embedding,m.embedding)}));n.sort((m,u)=>m.distance-u.distance);let s=Math.floor(n.length/2),c=n[s].distance,o=n.slice(0,s).map(m=>m.item),d=n.slice(s).map(m=>m.item);return {id:t.id,embedding:t.embedding,mu:c,left:N(o,i),right:N(d,i)}}function R(a,i,r,t,e,n){if(!a)return;let s=B(i,a.embedding),c=1-s;c>=t&&(e.push({id:a.id,similarity:c}),e.sort((o,d)=>d.similarity-o.similarity),e.length>r&&e.pop(),e.length===r&&(n.value=1-e[e.length-1].similarity)),s<a.mu?(R(a.left,i,r,t,e,n),s+n.value>=a.mu&&R(a.right,i,r,t,e,n)):(R(a.right,i,r,t,e,n),s-n.value<=a.mu&&R(a.left,i,r,t,e,n));}function Ne(a={}){let{random:i=Math.random}=a,r=new Map,t=null,e=false,n=null;function s(c){if(n===null)n=c.length;else if(c.length!==n)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${n}, got ${c.length}`)}return {add(c,o){s(o),r.set(c,o),e=true;},remove(c){r.delete(c),e=true;},search(c,o,d=0){if(n!==null&&c.length!==n)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${n}, got ${c.length}`);if(e||!t){let h=[];for(let[g,v]of r){let b=T(c,v);b>=d&&h.push({id:g,similarity:b});}return h.sort((g,v)=>v.similarity-g.similarity),h.slice(0,o)}let m=[],u={value:Number.POSITIVE_INFINITY};return R(t,c,o,d,m,u),m},rebuild(){let c=Array.from(r.entries()).map(([o,d])=>({id:o,embedding:d}));t=N(c,i),e=false;},size(){return r.size},clear(){r.clear(),t=null,e=false,n=null;},needsRebuild(){return e}}}export{Re as A,ke as B,Ne as C,ce as a,de as b,le as c,ue as d,me as e,fe as f,pe as g,ge as h,he as i,F as j,ee as k,Ie as l,te as m,Ee as n,A as o,L as p,z as q,ne as r,re as s,xe as t,we as u,T as v,ae as w,Se as x,Ce as y,Te as z};//# sourceMappingURL=chunk-MASTXC6X.js.map
4
+ //# sourceMappingURL=chunk-MASTXC6X.js.map