@directive-run/ai 1.23.1 → 1.24.1
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 +27 -0
- package/dist/anthropic.cjs +1 -1
- package/dist/anthropic.cjs.map +1 -1
- package/dist/anthropic.d.cts +33 -1
- package/dist/anthropic.d.ts +33 -1
- package/dist/anthropic.js +1 -1
- package/dist/anthropic.js.map +1 -1
- package/dist/{chunk-QMSLWAMH.cjs → chunk-25OLDNZ3.cjs} +3 -3
- package/dist/{chunk-QMSLWAMH.cjs.map → chunk-25OLDNZ3.cjs.map} +1 -1
- package/dist/chunk-2Y4YWZDV.js +3 -0
- package/dist/chunk-2Y4YWZDV.js.map +1 -0
- package/dist/{chunk-J2Q5KKPN.js → chunk-437ADRES.js} +3 -3
- package/dist/{chunk-J2Q5KKPN.js.map → chunk-437ADRES.js.map} +1 -1
- package/dist/{chunk-2FPL5W2H.cjs → chunk-4LENWYLG.cjs} +7 -7
- package/dist/{chunk-2FPL5W2H.cjs.map → chunk-4LENWYLG.cjs.map} +1 -1
- package/dist/chunk-4TDH6ZTX.cjs +3 -0
- package/dist/chunk-4TDH6ZTX.cjs.map +1 -0
- package/dist/{chunk-K64WKZ22.cjs → chunk-AEX7HKNM.cjs} +2 -2
- package/dist/chunk-AEX7HKNM.cjs.map +1 -0
- package/dist/{chunk-4VP67W7L.js → chunk-CMH5TJGN.js} +4 -4
- package/dist/{chunk-4VP67W7L.js.map → chunk-CMH5TJGN.js.map} +1 -1
- package/dist/{chunk-XGOTVPN6.js → chunk-EUB4NVVN.js} +3 -3
- package/dist/{chunk-XGOTVPN6.js.map → chunk-EUB4NVVN.js.map} +1 -1
- package/dist/{chunk-EW77VF5K.js → chunk-H7UFBMLV.js} +3 -3
- package/dist/{chunk-EW77VF5K.js.map → chunk-H7UFBMLV.js.map} +1 -1
- package/dist/{chunk-FSSCGRAM.js → chunk-L6H6Y6IK.js} +3 -3
- package/dist/{chunk-FSSCGRAM.js.map → chunk-L6H6Y6IK.js.map} +1 -1
- package/dist/{chunk-JMG5GZAH.cjs → chunk-L7QHLH6U.cjs} +4 -4
- package/dist/{chunk-JMG5GZAH.cjs.map → chunk-L7QHLH6U.cjs.map} +1 -1
- package/dist/{chunk-F73AKFDB.cjs → chunk-LPTC3N2Z.cjs} +7 -7
- package/dist/{chunk-F73AKFDB.cjs.map → chunk-LPTC3N2Z.cjs.map} +1 -1
- package/dist/{chunk-UR5BMWEN.js → chunk-XMEJN4FA.js} +2 -2
- package/dist/chunk-XMEJN4FA.js.map +1 -0
- package/dist/{chunk-XN5LUOVS.cjs → chunk-ZUNORULG.cjs} +7 -7
- package/dist/{chunk-XN5LUOVS.cjs.map → chunk-ZUNORULG.cjs.map} +1 -1
- package/dist/{debug-timeline-Sc9cxgxV.d.cts → debug-timeline-B_bXRStF.d.cts} +1 -1
- package/dist/{debug-timeline-C5Dzs2r_.d.ts → debug-timeline-Btt-iaak.d.ts} +1 -1
- package/dist/devtools.d.cts +5 -5
- package/dist/devtools.d.ts +5 -5
- package/dist/evals.cjs +1 -1
- package/dist/evals.d.cts +2 -2
- package/dist/evals.d.ts +2 -2
- package/dist/evals.js +1 -1
- package/dist/gemini.cjs +1 -1
- package/dist/gemini.d.cts +1 -1
- package/dist/gemini.d.ts +1 -1
- package/dist/gemini.js +1 -1
- package/dist/{guardrails-export-BL8ozXSj.d.ts → guardrails-export-lvaBJlt6.d.ts} +1 -1
- package/dist/{guardrails-export-ByaYNGvG.d.cts → guardrails-export-pmpQjIKb.d.cts} +1 -1
- package/dist/guardrails.cjs +1 -1
- package/dist/guardrails.d.cts +2 -2
- package/dist/guardrails.d.ts +2 -2
- package/dist/guardrails.js +1 -1
- package/dist/{health-monitor-C9v10_tj.d.cts → health-monitor-DqAzufyM.d.cts} +1 -1
- package/dist/{health-monitor-J2eKmP--.d.ts → health-monitor-DrlBF6n9.d.ts} +1 -1
- package/dist/index.cjs +4 -4
- package/dist/index.d.cts +12 -8
- package/dist/index.d.ts +12 -8
- package/dist/index.js +1 -1
- package/dist/{multi-agent-orchestrator-ZZ63F75F.js → multi-agent-orchestrator-PI7X7ZGP.js} +2 -2
- package/dist/{multi-agent-orchestrator-ZZ63F75F.js.map → multi-agent-orchestrator-PI7X7ZGP.js.map} +1 -1
- package/dist/multi-agent-orchestrator-Z5NK4HIJ.cjs +2 -0
- package/dist/{multi-agent-orchestrator-DUMT67N5.cjs.map → multi-agent-orchestrator-Z5NK4HIJ.cjs.map} +1 -1
- package/dist/multi-agent.cjs +1 -1
- package/dist/multi-agent.d.cts +6 -6
- package/dist/multi-agent.d.ts +6 -6
- package/dist/multi-agent.js +1 -1
- package/dist/ollama.cjs +1 -1
- package/dist/ollama.d.cts +1 -1
- package/dist/ollama.d.ts +1 -1
- package/dist/ollama.js +1 -1
- package/dist/openai.cjs +1 -1
- package/dist/openai.d.cts +1 -1
- package/dist/openai.d.ts +1 -1
- package/dist/openai.js +1 -1
- package/dist/{orchestrator-types-BT-NIFOe.d.cts → orchestrator-types-B9nrJYFx.d.cts} +3 -3
- package/dist/{orchestrator-types-DMuSD8Vq.d.ts → orchestrator-types-ByqFuu3O.d.ts} +3 -3
- package/dist/predicate.d.cts +1 -1
- package/dist/predicate.d.ts +1 -1
- package/dist/testing.cjs +1 -1
- package/dist/testing.d.cts +4 -4
- package/dist/testing.d.ts +4 -4
- package/dist/testing.js +1 -1
- package/dist/{types-6NoeLyrD.d.cts → types-BzpGfUA2.d.cts} +10 -0
- package/dist/{types-6NoeLyrD.d.ts → types-BzpGfUA2.d.ts} +10 -0
- package/package.json +2 -2
- package/dist/chunk-3WO4MWJM.cjs +0 -3
- package/dist/chunk-3WO4MWJM.cjs.map +0 -1
- package/dist/chunk-K64WKZ22.cjs.map +0 -1
- package/dist/chunk-UR5BMWEN.js.map +0 -1
- package/dist/chunk-ZFLHWJ56.js +0 -3
- package/dist/chunk-ZFLHWJ56.js.map +0 -1
- package/dist/multi-agent-orchestrator-DUMT67N5.cjs +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {c}from'./chunk-UR5BMWEN.js';import {safeStringify}from'@directive-run/core/internals';function le(a){let{patterns:r=[/\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:i=false,redactReplacement:t="[REDACTED]"}=a;return e=>{let n=e.input,s=false;for(let c of r)c.lastIndex=0,c.test(n)&&(s=true,i&&(c.lastIndex=0,n=n.replace(c,t)));return s&&!i?{passed:false,reason:"Input contains PII"}:{passed:true,transformed:i&&s?n:void 0}}}function ue(a){let{checkFn:r,message:i="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 r(e);return {passed:!n,reason:n?i:void 0}}}function me(a){let{maxTokensPerMinute:r=1e5,maxRequestsPerMinute:i=60}=a,t=Math.max(i,1e3),e=[],n=[],s=6e4;function c$1(d,u){let m=0,x=d.length;for(;m<x;){let p=m+x>>>1;(d[p]??0)<u?m=p+1:x=p;}return m}let o=(d,u)=>{let m=Date.now(),x=m-s,p=c$1(e,x);p>0&&(e=e.slice(p));let S=c$1(n,x);S>0&&(n=n.slice(S));let v=u.facts[c]?.tokenUsage??0,I=e.length,T=n.length;return I+v>r?{passed:false,reason:"Token rate limit exceeded"}:T>=i?{passed:false,reason:"Request rate limit exceeded"}:(n.length<t&&n.push(m),e.length<t&&e.push(m),{passed:true})};return o.reset=()=>{e=[],n=[];},o}function fe(a){let{allowlist:r,denylist:i,caseSensitive:t=false}=a,e=r?.map(s=>t?s:s.toLowerCase()),n=i?.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 pe(a){let{validate:r,errorPrefix:i="Output schema validation failed"}=a;return t=>{let e=r(t.output);return typeof e=="boolean"?{passed:e,reason:e?void 0:i}:e.valid?{passed:true}:{passed:false,reason:e.errors?.length?`${i}: ${e.errors.join("; ")}`:i}}}function ge(a){let{type:r,requiredFields:i=[],minLength:t,maxLength:e,minStringLength:n,maxStringLength:s}=a;return c=>{let o=c.output;switch(r){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 i)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: ${r}`}}}}function ye(a){let{maxCharacters:r,maxTokens:i,estimateTokens:t=e=>Math.ceil(e.length/4)}=a;return e=>{let n=safeStringify(e.output);if(r!==void 0&&n.length>r)return {passed:false,reason:`Output too long: ${n.length} characters (max: ${r})`};if(i!==void 0){let s=t(n);if(s>i)return {passed:false,reason:`Output too long: ~${s} tokens (max: ${i})`}}return {passed:true}}}function he(a){let{blockedPatterns:r,caseSensitive:i=false}=a;r.length===0&&console.warn("[Directive] createContentFilterGuardrail: blockedPatterns is empty \u2014 no content will be filtered");let t=r.map(e=>{if(e instanceof RegExp)return e;let n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(n,i?"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 U(a){let r=a.replace(/[\s-]/g,"");if(r.length<13||r.length>19||!/^\d+$/.test(r))return false;let i=0,t=false;for(let e=r.length-1;e>=0;e--){let n=r[e];if(!n)continue;let s=Number.parseInt(n,10);t&&(s*=2,s>9&&(s-=9)),i+=s,t=!t;}return i%10===0}var Z=[{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:U,redactionToken:"[CREDIT_CARD]"},{type:"email",regex:/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,redactionToken:"[EMAIL]"}];function q(a,r){let i=[];for(let t of Z){if(!r.has(t.type))continue;t.regex.lastIndex=0;let e;for(;(e=t.regex.exec(a))!==null;)t.validate&&!t.validate(e[0])||i.push({type:t.type,value:e[0],start:e.index,end:e.index+e[0].length});}return i}function A(a,r){if(r.length===0)return a;let i=[...r].sort((n,s)=>s.start-n.start),t={ssn:"[SSN]",credit_card:"[CREDIT_CARD]",email:"[EMAIL]"},e=a;for(let n of i)e=e.slice(0,n.start)+t[n.type]+e.slice(n.end);return e}function Ie(a={}){let{mode:r="redact",types:i=["ssn","credit_card","email"],includeKeys:t=[],excludeKeys:e=[],onBlocked:n,customDetector:s,walkDepth:c=4,errorMode:o=r==="redact"?"redact":"alert-only"}=a,d=new Set(i),u=new Set(t),m=new Set(e),x=Number.isFinite(c)?Math.max(1,Math.min(5,Math.floor(c))):1,p=1e4,S=false,g=null;function w(l){if(S)return;S=true,g=l;let f=l.meta?.byTag?.("pii");if(f)for(let h of f)h.type==="fact"&&h.id&&!m.has(h.id)&&u.add(h.id);}function v(l,f){let h=typeof l.message=="string"?l.message:"",b=A(h,f),y=new Error(b);return typeof l.name=="string"&&l.name!=="Error"&&Object.defineProperty(y,"name",{value:l.name,configurable:true,writable:true}),y}function I(l){let f=[];if(d.size>0)for(let h of q(l,d))f.push(h);if(s)for(let h of s(l))f.push(h);return f}function T(l,f=x){if(typeof l=="string"){let y=I(l);return y.length===0?{matched:false}:{matched:true,redacted:A(l,y),detected:y}}if(f<=0)return {matched:false};if(l===null||typeof l!="object")return {matched:false};let h=l;if(Array.isArray(l)){let y=l.length,E=Number.isFinite(y)&&y>0?Math.min(Math.floor(y),p):0;y>p&&console.warn(`[Directive] fact-pii walker truncated top-level array at ${p} elements before clone \u2014 pass a customDetector for larger payloads`);let P=new Array(E);for(let R=0;R<E;R++)P[R]=l[R];h=P;}let b;try{b=structuredClone(h);}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 C(b,f)}function C(l,f){if(typeof l=="string"){let h=I(l);return h.length===0?{matched:false}:{matched:true,redacted:A(l,h),detected:h}}if(f<=0)return {matched:false};if(Array.isArray(l)){l.length>p&&console.warn(`[Directive] fact-pii walker truncated array at ${p} elements \u2014 pass a customDetector for larger payloads`);let h=Math.min(l.length,p),b=null,y=[];for(let E=0;E<h;E++){let P=C(l[E],f-1);if(P.matched){b===null&&(b=[...l]),b[E]=P.redacted;for(let R of P.detected)y.push(R);}}return b===null?{matched:false}:{matched:true,redacted:b,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 E of I(l.message))y.push(E);if(typeof l.cause=="string")for(let E of I(l.cause))y.push(E);else if(l.cause instanceof Error&&f>1){let E=C(l.cause,f-1);if(E.matched)for(let P of E.detected)y.push(P);}if(typeof AggregateError<"u"&&l instanceof AggregateError&&Array.isArray(l.errors)&&f>1){for(let E of l.errors)if(typeof E=="string")for(let P of I(E))y.push(P);else if(E instanceof Error){let P=C(E,f-1);if(P.matched)for(let R of P.detected)y.push(R);}}if(y.length>0)return {matched:true,redacted:o==="redact"?v(l,y):l,detected:y}}return {matched:false}}let h=null,b=[];for(let[y,E]of Object.entries(l))if(typeof E=="string"){let P=I(E);if(P.length===0)continue;h===null&&(h={...l}),h[y]=A(E,P);for(let R of P)b.push(R);}else if(f>1&&E&&typeof E=="object"){let P=C(E,f-1);if(!P.matched)continue;h===null&&(h={...l}),h[y]=P.redacted;for(let R of P.detected)b.push(R);}return h===null?{matched:false}:{matched:true,redacted:h,detected:b}}return {matched:false}}return {name:"fact-pii-guardrail",onInit(l){w(l);},onFactSet(l,f,h){if(!S||!u.has(l)||f===h&&(typeof f!="object"||f===null))return;let b=T(f);if(!b.matched)return;n?.(l,b.detected,r);let y=r==="alert"||o==="alert-only"&&f instanceof Error?"alert":b.redacted===f?"detect":"redact";if(g?.notify?.guardrailBlocked?.("fact-pii-guardrail",l,y,b.detected.length,b.detected[0]?.type),r==="alert"||b.redacted===f)return;let P=g?.facts;if(P?.$store?.set)try{P.$store.set(l,b.redacted);}catch(R){console.warn("[Directive] guardrail redact write failed",{plugin:"fact-pii-guardrail",key:l,phase:"onFactSet",error:R});}},onFactsBatch(l){if(S)for(let f of l){if(f.type!=="set"||!u.has(f.key))continue;let h=f.prev;if(f.value===h&&(typeof f.value!="object"||f.value===null))continue;let b=T(f.value);if(!b.matched)continue;n?.(f.key,b.detected,r);let y=r==="alert"||o==="alert-only"&&f.value instanceof Error?"alert":b.redacted===f.value?"detect":"redact";if(g?.notify?.guardrailBlocked?.("fact-pii-guardrail",f.key,y,b.detected.length,b.detected[0]?.type),r==="alert"||b.redacted===f.value)continue;try{f.value=b.redacted;}catch{}let P=g?.facts;if(P?.$store?.set)try{P.$store.set(f.key,b.redacted);}catch(R){console.warn("[Directive] guardrail redact write failed",{plugin:"fact-pii-guardrail",key:f.key,phase:"onFactsBatch",error:R});}}}}}var K=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:a=>{let r=a.replace(/[-\s]/g,"");return !(r.startsWith("000")||r.startsWith("666")||r.startsWith("9")||r.slice(3,5)==="00"||r.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 r=a.replace(/[-\s]/g,"");if(r.length<13||r.length>19)return false;let i=0,t=false;for(let e=r.length-1;e>=0;e--){let n=r[e];if(!n)continue;let s=Number.parseInt(n,10);t&&(s*=2,s>9&&(s-=9)),i+=s,t=!t;}return i%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 r=a.replace(/\D/g,"");return r.length>=10&&r.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 i=a.split(".").map(n=>Number.parseInt(n,10));if(i.some(n=>Number.isNaN(n)||n<0||n>255))return false;let[t,e]=i;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 W(a){let r=[],i="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}(?:${i})\\b[^\\n]{0,50}\\b[A-Z]{2}\\s+\\d{5}(?:-\\d{4})?)\\b`,"gi"),e;for(;(e=t.exec(a))!==null;)r.push({type:"address",value:e[0],position:{start:e.index,end:e.index+e[0].length},confidence:.7});return r}var $=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function Y(a){let r=[],i=$.join("|"),t=new RegExp(`\\b(${i})[.,:]?\\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&&$.some(c=>s.toLowerCase().includes(c)))&&r.push({type:"name",value:n,position:{start:e.index,end:e.index+e[0].length},confidence:.6,context:e[0]});}return r}var j=1e5;function J(a,r){let i=[],t=new RegExp(a.pattern.source,a.pattern.flags),e=a.valueGroup??1,n;for(;(n=t.exec(r))!==null;){let s=n[e]??n[0],c=n.index,o=n.index+n[0].length,d=r.slice(Math.max(0,c-20),o+20);a.validate&&!a.validate(s,d)||i.push({type:a.type,value:s,position:{start:c,end:o},confidence:a.confidence,context:d});}return i}var N={name:"regex",async detect(a,r){if(a.length>j)throw new Error(`[Directive] Input exceeds maximum length of ${j} characters for PII detection. Truncate input or process in chunks.`);let i=[],t=new Set(r);for(let e of K)t.has(e.type)&&i.push(...J(e,a));return t.has("address")&&i.push(...W(a)),t.has("name")&&i.push(...Y(a)),i}},X=new Set(["ssn","credit_card","date_of_birth","medical_id","national_id","passport","driver_license","bank_account"]);function Q(a,r){let{start:i,end:t}=a.position;return Number.isInteger(i)&&Number.isInteger(t)&&i>=0&&i<t&&t<=r}function ee(a,r){switch(r){case "placeholder":return "[REDACTED]";case "typed":return X.has(a.type)?"[REDACTED]":`[${a.type.toUpperCase()}]`;case "masked":{if(a.type!=="credit_card")return "****";let i=a.value.replace(/\D/g,"");return `****${i.length>4?i.slice(-4):""}`}case "hashed":return `[HASH:${te(a.value)}]`}}function O(a,r,i="typed"){let e=[...r.filter(o=>Q(o,a.length))].sort((o,d)=>{if(d.confidence!==o.confidence)return d.confidence-o.confidence;let u=o.position.end-o.position.start,m=d.position.end-d.position.start;return m!==u?m-u:o.position.start-d.position.start}),n=[];for(let o of e)n.some(u=>o.position.start<u.position.end&&u.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=ee(o,i);c=c.slice(0,o.position.start)+d+c.slice(o.position.end);}return c}function te(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 B=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function ne(a={}){let{types:r=B,detector:i="regex",redact:t=false,redactionStyle:e="typed",minConfidence:n=.7,onDetected:s,allowlist:c=[],minItemsToBlock:o=1,detectorTimeout:d=5e3}=a,u=i==="regex"?N:i,m=new Set(c.map(p=>p.toLowerCase().trim()));async function x(p,S){if(u===N)return u.detect(p,S);let g,w=u.detect(p,S),v=new Promise((I,T)=>{g=setTimeout(()=>T(new Error(`[Directive] PII detector '${u.name}' timed out after ${d}ms`)),d);});w.catch(()=>{}),v.catch(()=>{});try{return await Promise.race([w,v])}finally{clearTimeout(g);}}return async p=>{let g=(await x(p.input,r)).filter(w=>!(w.confidence<n||m.has(w.value.toLowerCase().trim())));if(g.length>0&&s?.(g),g.length>=o){if(t)return {passed:true,transformed:O(p.input,g,e)};let w={};for(let I of g)w[I.type]=(w[I.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(w).map(([I,T])=>`${I}: ${T}`).join(", ")})`}}return {passed:true}}}function Pe(a={}){let r=ne(a);return async(i,t)=>{let e=typeof i.output=="string"?i.output:JSON.stringify(i.output);return r({input:e,agentName:i.agentName},t)}}async function re(a,r={}){let{types:i=B,detector:t="regex",minConfidence:e=.7,timeout:n=5e3}=r,s=t==="regex"?N:t,c;if(s===N)c=await s.detect(a,i);else {let u,m=s.detect(a,i),x=new Promise((p,S)=>{u=setTimeout(()=>S(new Error(`[Directive] PII detector '${s.name}' timed out after ${n}ms`)),n);});m.catch(()=>{}),x.catch(()=>{});try{c=await Promise.race([m,x]);}finally{clearTimeout(u);}}let o=c.filter(u=>u.confidence>=e),d={};for(let u of o)d[u.type]=(d[u.type]||0)+1;return {detected:o.length>0,items:o,typeCounts:d}}async function xe(a,r={}){let i=await re(a,r);return i.detected?{...i,redactedText:O(a,i.items,r.style??"typed")}:{...i}}var M=[{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"}],z=[...M,{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"}],L=1e5;function H(a,r=M){if(a.length>L)throw new Error(`[Directive] Input exceeds maximum length of ${L} characters for injection detection. Truncate input or process in chunks.`);let i=[];for(let{pattern:s,name:c,severity:o,category:d}of r){let m=new RegExp(s.source,s.flags).exec(a);m&&i.push({name:c,category:d,severity:o,match:m[0],position:m.index});}let t={low:10,medium:25,high:50,critical:100},e=i.reduce((s,c)=>s+t[c.severity],0),n=Math.min(100,e);return {detected:i.length>0,patterns:i,riskScore:n}}function ie(a,r=M){let i=a.replace(/\u200b|\u200c|\u200d|\u2060|\ufeff/g,""),t=r.map(d=>`(${d.pattern.source})`);if(t.length===0)return i;let e=r.some(d=>d.pattern.flags.includes("g")),n=r.some(d=>d.pattern.flags.includes("i")),s=r.some(d=>d.pattern.flags.includes("m")),c=`${e?"g":""}${n?"i":""}${s?"m":""}`,o=new RegExp(t.join("|"),c||"gi");return i=i.replace(o,"[REDACTED]"),i}function ae(a={}){let{additionalPatterns:r=[],replacePatterns:i,strictMode:t=false,blockThreshold:e=50,sanitize:n=false,onBlocked:s,ignoreCategories:c=[]}=a,o;if(i?o=i:o=t?[...z]:[...M],o=[...o,...r],c.length>0){let d=new Set(c);o=o.filter(u=>!d.has(u.category));}return d=>{let u=H(d.input,o);if(u.detected&&u.riskScore>=e){if(s?.(d.input,u),n)return {passed:true,transformed:ie(d.input,o)};let m=u.patterns.sort((x,p)=>{let S={critical:0,high:1,medium:2,low:3};return S[x.severity]-S[p.severity]}).slice(0,3).map(x=>x.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${u.riskScore}%, patterns: ${m})`}}return {passed:true}}}function ve(a,r){return `[UNTRUSTED_CONTENT source="${r}"]
|
|
1
|
+
import {c}from'./chunk-XMEJN4FA.js';import {safeStringify}from'@directive-run/core/internals';function le(a){let{patterns:r=[/\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:i=false,redactReplacement:t="[REDACTED]"}=a;return e=>{let n=e.input,s=false;for(let c of r)c.lastIndex=0,c.test(n)&&(s=true,i&&(c.lastIndex=0,n=n.replace(c,t)));return s&&!i?{passed:false,reason:"Input contains PII"}:{passed:true,transformed:i&&s?n:void 0}}}function ue(a){let{checkFn:r,message:i="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 r(e);return {passed:!n,reason:n?i:void 0}}}function me(a){let{maxTokensPerMinute:r=1e5,maxRequestsPerMinute:i=60}=a,t=Math.max(i,1e3),e=[],n=[],s=6e4;function c$1(d,u){let m=0,x=d.length;for(;m<x;){let p=m+x>>>1;(d[p]??0)<u?m=p+1:x=p;}return m}let o=(d,u)=>{let m=Date.now(),x=m-s,p=c$1(e,x);p>0&&(e=e.slice(p));let S=c$1(n,x);S>0&&(n=n.slice(S));let v=u.facts[c]?.tokenUsage??0,I=e.length,T=n.length;return I+v>r?{passed:false,reason:"Token rate limit exceeded"}:T>=i?{passed:false,reason:"Request rate limit exceeded"}:(n.length<t&&n.push(m),e.length<t&&e.push(m),{passed:true})};return o.reset=()=>{e=[],n=[];},o}function fe(a){let{allowlist:r,denylist:i,caseSensitive:t=false}=a,e=r?.map(s=>t?s:s.toLowerCase()),n=i?.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 pe(a){let{validate:r,errorPrefix:i="Output schema validation failed"}=a;return t=>{let e=r(t.output);return typeof e=="boolean"?{passed:e,reason:e?void 0:i}:e.valid?{passed:true}:{passed:false,reason:e.errors?.length?`${i}: ${e.errors.join("; ")}`:i}}}function ge(a){let{type:r,requiredFields:i=[],minLength:t,maxLength:e,minStringLength:n,maxStringLength:s}=a;return c=>{let o=c.output;switch(r){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 i)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: ${r}`}}}}function ye(a){let{maxCharacters:r,maxTokens:i,estimateTokens:t=e=>Math.ceil(e.length/4)}=a;return e=>{let n=safeStringify(e.output);if(r!==void 0&&n.length>r)return {passed:false,reason:`Output too long: ${n.length} characters (max: ${r})`};if(i!==void 0){let s=t(n);if(s>i)return {passed:false,reason:`Output too long: ~${s} tokens (max: ${i})`}}return {passed:true}}}function he(a){let{blockedPatterns:r,caseSensitive:i=false}=a;r.length===0&&console.warn("[Directive] createContentFilterGuardrail: blockedPatterns is empty \u2014 no content will be filtered");let t=r.map(e=>{if(e instanceof RegExp)return e;let n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(n,i?"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 U(a){let r=a.replace(/[\s-]/g,"");if(r.length<13||r.length>19||!/^\d+$/.test(r))return false;let i=0,t=false;for(let e=r.length-1;e>=0;e--){let n=r[e];if(!n)continue;let s=Number.parseInt(n,10);t&&(s*=2,s>9&&(s-=9)),i+=s,t=!t;}return i%10===0}var Z=[{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:U,redactionToken:"[CREDIT_CARD]"},{type:"email",regex:/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,redactionToken:"[EMAIL]"}];function q(a,r){let i=[];for(let t of Z){if(!r.has(t.type))continue;t.regex.lastIndex=0;let e;for(;(e=t.regex.exec(a))!==null;)t.validate&&!t.validate(e[0])||i.push({type:t.type,value:e[0],start:e.index,end:e.index+e[0].length});}return i}function A(a,r){if(r.length===0)return a;let i=[...r].sort((n,s)=>s.start-n.start),t={ssn:"[SSN]",credit_card:"[CREDIT_CARD]",email:"[EMAIL]"},e=a;for(let n of i)e=e.slice(0,n.start)+t[n.type]+e.slice(n.end);return e}function Ie(a={}){let{mode:r="redact",types:i=["ssn","credit_card","email"],includeKeys:t=[],excludeKeys:e=[],onBlocked:n,customDetector:s,walkDepth:c=4,errorMode:o=r==="redact"?"redact":"alert-only"}=a,d=new Set(i),u=new Set(t),m=new Set(e),x=Number.isFinite(c)?Math.max(1,Math.min(5,Math.floor(c))):1,p=1e4,S=false,g=null;function w(l){if(S)return;S=true,g=l;let f=l.meta?.byTag?.("pii");if(f)for(let h of f)h.type==="fact"&&h.id&&!m.has(h.id)&&u.add(h.id);}function v(l,f){let h=typeof l.message=="string"?l.message:"",b=A(h,f),y=new Error(b);return typeof l.name=="string"&&l.name!=="Error"&&Object.defineProperty(y,"name",{value:l.name,configurable:true,writable:true}),y}function I(l){let f=[];if(d.size>0)for(let h of q(l,d))f.push(h);if(s)for(let h of s(l))f.push(h);return f}function T(l,f=x){if(typeof l=="string"){let y=I(l);return y.length===0?{matched:false}:{matched:true,redacted:A(l,y),detected:y}}if(f<=0)return {matched:false};if(l===null||typeof l!="object")return {matched:false};let h=l;if(Array.isArray(l)){let y=l.length,E=Number.isFinite(y)&&y>0?Math.min(Math.floor(y),p):0;y>p&&console.warn(`[Directive] fact-pii walker truncated top-level array at ${p} elements before clone \u2014 pass a customDetector for larger payloads`);let P=new Array(E);for(let R=0;R<E;R++)P[R]=l[R];h=P;}let b;try{b=structuredClone(h);}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 C(b,f)}function C(l,f){if(typeof l=="string"){let h=I(l);return h.length===0?{matched:false}:{matched:true,redacted:A(l,h),detected:h}}if(f<=0)return {matched:false};if(Array.isArray(l)){l.length>p&&console.warn(`[Directive] fact-pii walker truncated array at ${p} elements \u2014 pass a customDetector for larger payloads`);let h=Math.min(l.length,p),b=null,y=[];for(let E=0;E<h;E++){let P=C(l[E],f-1);if(P.matched){b===null&&(b=[...l]),b[E]=P.redacted;for(let R of P.detected)y.push(R);}}return b===null?{matched:false}:{matched:true,redacted:b,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 E of I(l.message))y.push(E);if(typeof l.cause=="string")for(let E of I(l.cause))y.push(E);else if(l.cause instanceof Error&&f>1){let E=C(l.cause,f-1);if(E.matched)for(let P of E.detected)y.push(P);}if(typeof AggregateError<"u"&&l instanceof AggregateError&&Array.isArray(l.errors)&&f>1){for(let E of l.errors)if(typeof E=="string")for(let P of I(E))y.push(P);else if(E instanceof Error){let P=C(E,f-1);if(P.matched)for(let R of P.detected)y.push(R);}}if(y.length>0)return {matched:true,redacted:o==="redact"?v(l,y):l,detected:y}}return {matched:false}}let h=null,b=[];for(let[y,E]of Object.entries(l))if(typeof E=="string"){let P=I(E);if(P.length===0)continue;h===null&&(h={...l}),h[y]=A(E,P);for(let R of P)b.push(R);}else if(f>1&&E&&typeof E=="object"){let P=C(E,f-1);if(!P.matched)continue;h===null&&(h={...l}),h[y]=P.redacted;for(let R of P.detected)b.push(R);}return h===null?{matched:false}:{matched:true,redacted:h,detected:b}}return {matched:false}}return {name:"fact-pii-guardrail",onInit(l){w(l);},onFactSet(l,f,h){if(!S||!u.has(l)||f===h&&(typeof f!="object"||f===null))return;let b=T(f);if(!b.matched)return;n?.(l,b.detected,r);let y=r==="alert"||o==="alert-only"&&f instanceof Error?"alert":b.redacted===f?"detect":"redact";if(g?.notify?.guardrailBlocked?.("fact-pii-guardrail",l,y,b.detected.length,b.detected[0]?.type),r==="alert"||b.redacted===f)return;let P=g?.facts;if(P?.$store?.set)try{P.$store.set(l,b.redacted);}catch(R){console.warn("[Directive] guardrail redact write failed",{plugin:"fact-pii-guardrail",key:l,phase:"onFactSet",error:R});}},onFactsBatch(l){if(S)for(let f of l){if(f.type!=="set"||!u.has(f.key))continue;let h=f.prev;if(f.value===h&&(typeof f.value!="object"||f.value===null))continue;let b=T(f.value);if(!b.matched)continue;n?.(f.key,b.detected,r);let y=r==="alert"||o==="alert-only"&&f.value instanceof Error?"alert":b.redacted===f.value?"detect":"redact";if(g?.notify?.guardrailBlocked?.("fact-pii-guardrail",f.key,y,b.detected.length,b.detected[0]?.type),r==="alert"||b.redacted===f.value)continue;try{f.value=b.redacted;}catch{}let P=g?.facts;if(P?.$store?.set)try{P.$store.set(f.key,b.redacted);}catch(R){console.warn("[Directive] guardrail redact write failed",{plugin:"fact-pii-guardrail",key:f.key,phase:"onFactsBatch",error:R});}}}}}var K=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:a=>{let r=a.replace(/[-\s]/g,"");return !(r.startsWith("000")||r.startsWith("666")||r.startsWith("9")||r.slice(3,5)==="00"||r.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 r=a.replace(/[-\s]/g,"");if(r.length<13||r.length>19)return false;let i=0,t=false;for(let e=r.length-1;e>=0;e--){let n=r[e];if(!n)continue;let s=Number.parseInt(n,10);t&&(s*=2,s>9&&(s-=9)),i+=s,t=!t;}return i%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 r=a.replace(/\D/g,"");return r.length>=10&&r.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 i=a.split(".").map(n=>Number.parseInt(n,10));if(i.some(n=>Number.isNaN(n)||n<0||n>255))return false;let[t,e]=i;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 W(a){let r=[],i="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}(?:${i})\\b[^\\n]{0,50}\\b[A-Z]{2}\\s+\\d{5}(?:-\\d{4})?)\\b`,"gi"),e;for(;(e=t.exec(a))!==null;)r.push({type:"address",value:e[0],position:{start:e.index,end:e.index+e[0].length},confidence:.7});return r}var $=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function Y(a){let r=[],i=$.join("|"),t=new RegExp(`\\b(${i})[.,:]?\\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&&$.some(c=>s.toLowerCase().includes(c)))&&r.push({type:"name",value:n,position:{start:e.index,end:e.index+e[0].length},confidence:.6,context:e[0]});}return r}var j=1e5;function J(a,r){let i=[],t=new RegExp(a.pattern.source,a.pattern.flags),e=a.valueGroup??1,n;for(;(n=t.exec(r))!==null;){let s=n[e]??n[0],c=n.index,o=n.index+n[0].length,d=r.slice(Math.max(0,c-20),o+20);a.validate&&!a.validate(s,d)||i.push({type:a.type,value:s,position:{start:c,end:o},confidence:a.confidence,context:d});}return i}var N={name:"regex",async detect(a,r){if(a.length>j)throw new Error(`[Directive] Input exceeds maximum length of ${j} characters for PII detection. Truncate input or process in chunks.`);let i=[],t=new Set(r);for(let e of K)t.has(e.type)&&i.push(...J(e,a));return t.has("address")&&i.push(...W(a)),t.has("name")&&i.push(...Y(a)),i}},X=new Set(["ssn","credit_card","date_of_birth","medical_id","national_id","passport","driver_license","bank_account"]);function Q(a,r){let{start:i,end:t}=a.position;return Number.isInteger(i)&&Number.isInteger(t)&&i>=0&&i<t&&t<=r}function ee(a,r){switch(r){case "placeholder":return "[REDACTED]";case "typed":return X.has(a.type)?"[REDACTED]":`[${a.type.toUpperCase()}]`;case "masked":{if(a.type!=="credit_card")return "****";let i=a.value.replace(/\D/g,"");return `****${i.length>4?i.slice(-4):""}`}case "hashed":return `[HASH:${te(a.value)}]`}}function O(a,r,i="typed"){let e=[...r.filter(o=>Q(o,a.length))].sort((o,d)=>{if(d.confidence!==o.confidence)return d.confidence-o.confidence;let u=o.position.end-o.position.start,m=d.position.end-d.position.start;return m!==u?m-u:o.position.start-d.position.start}),n=[];for(let o of e)n.some(u=>o.position.start<u.position.end&&u.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=ee(o,i);c=c.slice(0,o.position.start)+d+c.slice(o.position.end);}return c}function te(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 B=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function ne(a={}){let{types:r=B,detector:i="regex",redact:t=false,redactionStyle:e="typed",minConfidence:n=.7,onDetected:s,allowlist:c=[],minItemsToBlock:o=1,detectorTimeout:d=5e3}=a,u=i==="regex"?N:i,m=new Set(c.map(p=>p.toLowerCase().trim()));async function x(p,S){if(u===N)return u.detect(p,S);let g,w=u.detect(p,S),v=new Promise((I,T)=>{g=setTimeout(()=>T(new Error(`[Directive] PII detector '${u.name}' timed out after ${d}ms`)),d);});w.catch(()=>{}),v.catch(()=>{});try{return await Promise.race([w,v])}finally{clearTimeout(g);}}return async p=>{let g=(await x(p.input,r)).filter(w=>!(w.confidence<n||m.has(w.value.toLowerCase().trim())));if(g.length>0&&s?.(g),g.length>=o){if(t)return {passed:true,transformed:O(p.input,g,e)};let w={};for(let I of g)w[I.type]=(w[I.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(w).map(([I,T])=>`${I}: ${T}`).join(", ")})`}}return {passed:true}}}function Pe(a={}){let r=ne(a);return async(i,t)=>{let e=typeof i.output=="string"?i.output:JSON.stringify(i.output);return r({input:e,agentName:i.agentName},t)}}async function re(a,r={}){let{types:i=B,detector:t="regex",minConfidence:e=.7,timeout:n=5e3}=r,s=t==="regex"?N:t,c;if(s===N)c=await s.detect(a,i);else {let u,m=s.detect(a,i),x=new Promise((p,S)=>{u=setTimeout(()=>S(new Error(`[Directive] PII detector '${s.name}' timed out after ${n}ms`)),n);});m.catch(()=>{}),x.catch(()=>{});try{c=await Promise.race([m,x]);}finally{clearTimeout(u);}}let o=c.filter(u=>u.confidence>=e),d={};for(let u of o)d[u.type]=(d[u.type]||0)+1;return {detected:o.length>0,items:o,typeCounts:d}}async function xe(a,r={}){let i=await re(a,r);return i.detected?{...i,redactedText:O(a,i.items,r.style??"typed")}:{...i}}var M=[{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"}],z=[...M,{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"}],L=1e5;function H(a,r=M){if(a.length>L)throw new Error(`[Directive] Input exceeds maximum length of ${L} characters for injection detection. Truncate input or process in chunks.`);let i=[];for(let{pattern:s,name:c,severity:o,category:d}of r){let m=new RegExp(s.source,s.flags).exec(a);m&&i.push({name:c,category:d,severity:o,match:m[0],position:m.index});}let t={low:10,medium:25,high:50,critical:100},e=i.reduce((s,c)=>s+t[c.severity],0),n=Math.min(100,e);return {detected:i.length>0,patterns:i,riskScore:n}}function ie(a,r=M){let i=a.replace(/\u200b|\u200c|\u200d|\u2060|\ufeff/g,""),t=r.map(d=>`(${d.pattern.source})`);if(t.length===0)return i;let e=r.some(d=>d.pattern.flags.includes("g")),n=r.some(d=>d.pattern.flags.includes("i")),s=r.some(d=>d.pattern.flags.includes("m")),c=`${e?"g":""}${n?"i":""}${s?"m":""}`,o=new RegExp(t.join("|"),c||"gi");return i=i.replace(o,"[REDACTED]"),i}function ae(a={}){let{additionalPatterns:r=[],replacePatterns:i,strictMode:t=false,blockThreshold:e=50,sanitize:n=false,onBlocked:s,ignoreCategories:c=[]}=a,o;if(i?o=i:o=t?[...z]:[...M],o=[...o,...r],c.length>0){let d=new Set(c);o=o.filter(u=>!d.has(u.category));}return d=>{let u=H(d.input,o);if(u.detected&&u.riskScore>=e){if(s?.(d.input,u),n)return {passed:true,transformed:ie(d.input,o)};let m=u.patterns.sort((x,p)=>{let S={critical:0,high:1,medium:2,low:3};return S[x.severity]-S[p.severity]}).slice(0,3).map(x=>x.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${u.riskScore}%, patterns: ${m})`}}return {passed:true}}}function ve(a,r){return `[UNTRUSTED_CONTENT source="${r}"]
|
|
2
2
|
${a}
|
|
3
|
-
[/UNTRUSTED_CONTENT]`}function Se(a){let{baseGuardrail:r=ae({strictMode:true,blockThreshold:25}),additionalPatterns:i=[]}=a,t=/\[UNTRUSTED_CONTENT source="([^"]+)"\]([\s\S]*?)\[\/UNTRUSTED_CONTENT\]/g;return async(e,n)=>{let s=await r(e,n);if(!s.passed)return s;let c=e.input.matchAll(t);for(let o of c){let[,d,u]=o;if(!u)continue;let m=H(u,[...z,...i]);if(m.detected&&m.riskScore>=25)return {passed:false,reason:`Untrusted content from "${d}" contains potential injection (risk: ${m.riskScore}%)`}}return {passed:true}}}function k(a,r){if(a.length!==r.length)throw new Error(`Vector dimensions must match: ${a.length} vs ${r.length}`);let i=0,t=0,e=0;for(let n=0;n<a.length;n++){let s=a[n],c=r[n];i+=s*c,t+=s*s,e+=c*c;}return t=Math.sqrt(t),e=Math.sqrt(e),t===0||e===0?0:i/(t*e)}function se(a,r,i,t){let e=null;for(let n of r){if(t&&n.agentName&&n.agentName!==t)continue;let s=k(a,n.queryEmbedding);s>=i&&(!e||s>e.similarity)&&(e={entry:n,similarity:s});}return e}function oe(){let a=new Map;function r(i){let t=a.get(i);return t||(t=new Map,a.set(i,t)),t}return {async getEntries(i){return Array.from(r(i).values())},async addEntry(i,t){r(i).set(t.id,t);},async updateEntry(i,t,e){let n=r(i),s=n.get(t);s&&n.set(t,{...s,...e});},async removeEntry(i,t){r(i).delete(t);},async clear(i){a.delete(i);}}}function Te(a){let{embedder:r,similarityThreshold:i=.9,maxCacheSize:t=1e3,ttlMs:e=36e5,namespace:n="default",storage:s=oe(),onHit:c,onMiss:o,onError:d,perAgent:u=false}=a,m={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},x=0;function p(g){if(m.totalEntries=g.length,m.hitRate=m.totalHits+m.totalMisses>0?m.totalHits/(m.totalHits+m.totalMisses):0,m.avgSimilarityOnHit=m.totalHits>0?x/m.totalHits:0,g.length>0){let w=g.map(v=>v.createdAt);m.oldestEntry=Math.min(...w),m.newestEntry=Math.max(...w);}else m.oldestEntry=null,m.newestEntry=null;}async function S(){let g=await s.getEntries(n),w=Date.now();for(let I of g)w-I.createdAt>e&&await s.removeEntry(n,I.id);let v=await s.getEntries(n);if(v.length>t){let T=v.sort((C,l)=>C.accessedAt-l.accessedAt).slice(0,v.length-t);for(let C of T)await s.removeEntry(n,C.id);}}return {async lookup(g,w){let v=Date.now();try{let I=await r(g),T=await s.getEntries(n),C=se(I,T,i,u?w:void 0);return C?(await s.updateEntry(n,C.entry.id,{accessedAt:Date.now(),accessCount:C.entry.accessCount+1}),m.totalHits++,x+=C.similarity,p(T),c?.(C.entry,C.similarity),{hit:!0,entry:C.entry,similarity:C.similarity,latencyMs:Date.now()-v}):(m.totalMisses++,p(T),o?.(g),{hit:!1,latencyMs:Date.now()-v})}catch(I){return m.totalMisses++,d?.(I instanceof Error?I:new Error(String(I))),{hit:false,latencyMs:Date.now()-v}}},async store(g,w,v,I={}){let T=await r(g),C={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:g,queryEmbedding:T,response:w,metadata:I,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:u?v:void 0};await s.addEntry(n,C),await S();let l=await s.getEntries(n);p(l);},async invalidate(g){let w=await s.getEntries(n),v=0;for(let T of w)g(T)&&(await s.removeEntry(n,T.id),v++);let I=await s.getEntries(n);return p(I),v},async clear(){await s.clear(n),m={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},x=0;},getStats(){return {...m}},async export(){return s.getEntries(n)},async import(g){for(let v of g)await s.addEntry(n,v);await S();let w=await s.getEntries(n);p(w);}}}function Re(a){let{cache:r}=a;return async i=>{let t=await r.lookup(i.input,i.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 ke(a=128){return async r=>{let i=new Array(a).fill(0);for(let e=0;e<r.length;e++){let n=r.charCodeAt(e);i[e%a]+=n/256;}let t=Math.sqrt(i.reduce((e,n)=>e+n*n,0));if(t>0)for(let e=0;e<a;e++)i[e]/=t;return i}}function De(a){let{batchSize:r=20,embedBatch:i,maxWaitMs:t=50}=a;if(r<1||!Number.isFinite(r))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${r}`);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(m=>m.text),u=await i(d);if(u.length!==o.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${u.length} embeddings for ${o.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let m=0;m<o.length;m++)o[m].resolve(u[m]);}catch(d){let u=d instanceof Error?d:new Error(String(d));for(let m of o)m.reject(u);}}return {async embed(o){if(s)throw new Error("BatchedEmbedder has been destroyed");return new Promise((d,u)=>{e.push({text:o,resolve:d,reject:u}),e.length>=r?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 u of o)u.reject(d);}}}function Me(){let a=new Map,r=null;function i(t){if(r===null)r=t.length;else if(t.length!==r)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${r}, got ${t.length}`)}return {add(t,e){i(e),a.set(t,e);},remove(t){a.delete(t);},search(t,e,n=0){if(r!==null&&t.length!==r)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${r}, got ${t.length}`);let s=[];for(let[c,o]of a){let d=k(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(),r=null;},needsRebuild(){return false}}}function V(a,r){return 1-k(a,r)}function _(a,r){if(a.length===0)return null;let i=Math.floor(r()*a.length),t=a[i],e=a.filter((u,m)=>m!==i);if(e.length===0)return {id:t.id,embedding:t.embedding,mu:0,left:null,right:null};let n=e.map(u=>({item:u,distance:V(t.embedding,u.embedding)}));n.sort((u,m)=>u.distance-m.distance);let s=Math.floor(n.length/2),c=n[s].distance,o=n.slice(0,s).map(u=>u.item),d=n.slice(s).map(u=>u.item);return {id:t.id,embedding:t.embedding,mu:c,left:_(o,r),right:_(d,r)}}function D(a,r,i,t,e,n){if(!a)return;let s=V(r,a.embedding),c=1-s;c>=t&&(e.push({id:a.id,similarity:c}),e.sort((o,d)=>d.similarity-o.similarity),e.length>i&&e.pop(),e.length===i&&(n.value=1-e[e.length-1].similarity)),s<a.mu?(D(a.left,r,i,t,e,n),s+n.value>=a.mu&&D(a.right,r,i,t,e,n)):(D(a.right,r,i,t,e,n),s-n.value<=a.mu&&D(a.left,r,i,t,e,n));}function _e(a={}){let{random:r=Math.random}=a,i=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),i.set(c,o),e=true;},remove(c){i.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 x=[];for(let[p,S]of i){let g=k(c,S);g>=d&&x.push({id:p,similarity:g});}return x.sort((p,S)=>S.similarity-p.similarity),x.slice(0,o)}let u=[],m={value:Number.POSITIVE_INFINITY};return D(t,c,o,d,u,m),u},rebuild(){let c=Array.from(i.entries()).map(([o,d])=>({id:o,embedding:d}));t=_(c,r),e=false;},size(){return i.size},clear(){i.clear(),t=null,e=false,n=null;},needsRebuild(){return e}}}export{De as A,Me as B,_e as C,le as a,ue as b,me as c,fe as d,pe as e,ge as f,ye as g,he as h,Ie as i,O as j,ne as k,Pe as l,re as m,xe as n,M as o,z as p,H as q,ie as r,ae as s,ve as t,Se as u,k as v,oe as w,Te as x,Re as y,ke as z};//# sourceMappingURL=chunk-
|
|
4
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
[/UNTRUSTED_CONTENT]`}function Se(a){let{baseGuardrail:r=ae({strictMode:true,blockThreshold:25}),additionalPatterns:i=[]}=a,t=/\[UNTRUSTED_CONTENT source="([^"]+)"\]([\s\S]*?)\[\/UNTRUSTED_CONTENT\]/g;return async(e,n)=>{let s=await r(e,n);if(!s.passed)return s;let c=e.input.matchAll(t);for(let o of c){let[,d,u]=o;if(!u)continue;let m=H(u,[...z,...i]);if(m.detected&&m.riskScore>=25)return {passed:false,reason:`Untrusted content from "${d}" contains potential injection (risk: ${m.riskScore}%)`}}return {passed:true}}}function k(a,r){if(a.length!==r.length)throw new Error(`Vector dimensions must match: ${a.length} vs ${r.length}`);let i=0,t=0,e=0;for(let n=0;n<a.length;n++){let s=a[n],c=r[n];i+=s*c,t+=s*s,e+=c*c;}return t=Math.sqrt(t),e=Math.sqrt(e),t===0||e===0?0:i/(t*e)}function se(a,r,i,t){let e=null;for(let n of r){if(t&&n.agentName&&n.agentName!==t)continue;let s=k(a,n.queryEmbedding);s>=i&&(!e||s>e.similarity)&&(e={entry:n,similarity:s});}return e}function oe(){let a=new Map;function r(i){let t=a.get(i);return t||(t=new Map,a.set(i,t)),t}return {async getEntries(i){return Array.from(r(i).values())},async addEntry(i,t){r(i).set(t.id,t);},async updateEntry(i,t,e){let n=r(i),s=n.get(t);s&&n.set(t,{...s,...e});},async removeEntry(i,t){r(i).delete(t);},async clear(i){a.delete(i);}}}function Te(a){let{embedder:r,similarityThreshold:i=.9,maxCacheSize:t=1e3,ttlMs:e=36e5,namespace:n="default",storage:s=oe(),onHit:c,onMiss:o,onError:d,perAgent:u=false}=a,m={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},x=0;function p(g){if(m.totalEntries=g.length,m.hitRate=m.totalHits+m.totalMisses>0?m.totalHits/(m.totalHits+m.totalMisses):0,m.avgSimilarityOnHit=m.totalHits>0?x/m.totalHits:0,g.length>0){let w=g.map(v=>v.createdAt);m.oldestEntry=Math.min(...w),m.newestEntry=Math.max(...w);}else m.oldestEntry=null,m.newestEntry=null;}async function S(){let g=await s.getEntries(n),w=Date.now();for(let I of g)w-I.createdAt>e&&await s.removeEntry(n,I.id);let v=await s.getEntries(n);if(v.length>t){let T=v.sort((C,l)=>C.accessedAt-l.accessedAt).slice(0,v.length-t);for(let C of T)await s.removeEntry(n,C.id);}}return {async lookup(g,w){let v=Date.now();try{let I=await r(g),T=await s.getEntries(n),C=se(I,T,i,u?w:void 0);return C?(await s.updateEntry(n,C.entry.id,{accessedAt:Date.now(),accessCount:C.entry.accessCount+1}),m.totalHits++,x+=C.similarity,p(T),c?.(C.entry,C.similarity),{hit:!0,entry:C.entry,similarity:C.similarity,latencyMs:Date.now()-v}):(m.totalMisses++,p(T),o?.(g),{hit:!1,latencyMs:Date.now()-v})}catch(I){return m.totalMisses++,d?.(I instanceof Error?I:new Error(String(I))),{hit:false,latencyMs:Date.now()-v}}},async store(g,w,v,I={}){let T=await r(g),C={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:g,queryEmbedding:T,response:w,metadata:I,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:u?v:void 0};await s.addEntry(n,C),await S();let l=await s.getEntries(n);p(l);},async invalidate(g){let w=await s.getEntries(n),v=0;for(let T of w)g(T)&&(await s.removeEntry(n,T.id),v++);let I=await s.getEntries(n);return p(I),v},async clear(){await s.clear(n),m={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},x=0;},getStats(){return {...m}},async export(){return s.getEntries(n)},async import(g){for(let v of g)await s.addEntry(n,v);await S();let w=await s.getEntries(n);p(w);}}}function Re(a){let{cache:r}=a;return async i=>{let t=await r.lookup(i.input,i.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 ke(a=128){return async r=>{let i=new Array(a).fill(0);for(let e=0;e<r.length;e++){let n=r.charCodeAt(e);i[e%a]+=n/256;}let t=Math.sqrt(i.reduce((e,n)=>e+n*n,0));if(t>0)for(let e=0;e<a;e++)i[e]/=t;return i}}function De(a){let{batchSize:r=20,embedBatch:i,maxWaitMs:t=50}=a;if(r<1||!Number.isFinite(r))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${r}`);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(m=>m.text),u=await i(d);if(u.length!==o.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${u.length} embeddings for ${o.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let m=0;m<o.length;m++)o[m].resolve(u[m]);}catch(d){let u=d instanceof Error?d:new Error(String(d));for(let m of o)m.reject(u);}}return {async embed(o){if(s)throw new Error("BatchedEmbedder has been destroyed");return new Promise((d,u)=>{e.push({text:o,resolve:d,reject:u}),e.length>=r?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 u of o)u.reject(d);}}}function Me(){let a=new Map,r=null;function i(t){if(r===null)r=t.length;else if(t.length!==r)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${r}, got ${t.length}`)}return {add(t,e){i(e),a.set(t,e);},remove(t){a.delete(t);},search(t,e,n=0){if(r!==null&&t.length!==r)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${r}, got ${t.length}`);let s=[];for(let[c,o]of a){let d=k(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(),r=null;},needsRebuild(){return false}}}function V(a,r){return 1-k(a,r)}function _(a,r){if(a.length===0)return null;let i=Math.floor(r()*a.length),t=a[i],e=a.filter((u,m)=>m!==i);if(e.length===0)return {id:t.id,embedding:t.embedding,mu:0,left:null,right:null};let n=e.map(u=>({item:u,distance:V(t.embedding,u.embedding)}));n.sort((u,m)=>u.distance-m.distance);let s=Math.floor(n.length/2),c=n[s].distance,o=n.slice(0,s).map(u=>u.item),d=n.slice(s).map(u=>u.item);return {id:t.id,embedding:t.embedding,mu:c,left:_(o,r),right:_(d,r)}}function D(a,r,i,t,e,n){if(!a)return;let s=V(r,a.embedding),c=1-s;c>=t&&(e.push({id:a.id,similarity:c}),e.sort((o,d)=>d.similarity-o.similarity),e.length>i&&e.pop(),e.length===i&&(n.value=1-e[e.length-1].similarity)),s<a.mu?(D(a.left,r,i,t,e,n),s+n.value>=a.mu&&D(a.right,r,i,t,e,n)):(D(a.right,r,i,t,e,n),s-n.value<=a.mu&&D(a.left,r,i,t,e,n));}function _e(a={}){let{random:r=Math.random}=a,i=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),i.set(c,o),e=true;},remove(c){i.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 x=[];for(let[p,S]of i){let g=k(c,S);g>=d&&x.push({id:p,similarity:g});}return x.sort((p,S)=>S.similarity-p.similarity),x.slice(0,o)}let u=[],m={value:Number.POSITIVE_INFINITY};return D(t,c,o,d,u,m),u},rebuild(){let c=Array.from(i.entries()).map(([o,d])=>({id:o,embedding:d}));t=_(c,r),e=false;},size(){return i.size},clear(){i.clear(),t=null,e=false,n=null;},needsRebuild(){return e}}}export{De as A,Me as B,_e as C,le as a,ue as b,me as c,fe as d,pe as e,ge as f,ye as g,he as h,Ie as i,O as j,ne as k,Pe as l,re as m,xe as n,M as o,z as p,H as q,ie as r,ae as s,ve as t,Se as u,k as v,oe as w,Te as x,Re as y,ke as z};//# sourceMappingURL=chunk-L6H6Y6IK.js.map
|
|
4
|
+
//# sourceMappingURL=chunk-L6H6Y6IK.js.map
|