@directive-run/ai 1.4.0 → 1.6.0
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/dist/anthropic.cjs +1 -1
- package/dist/anthropic.cjs.map +1 -1
- package/dist/anthropic.js +1 -1
- package/dist/anthropic.js.map +1 -1
- package/dist/{chunk-265ZKXYE.js → chunk-3PGRBK4E.js} +2 -2
- package/dist/chunk-3PGRBK4E.js.map +1 -0
- package/dist/{chunk-QXMXSHYS.cjs → chunk-KP3G32S7.cjs} +2 -2
- package/dist/chunk-KP3G32S7.cjs.map +1 -0
- package/dist/{chunk-5ERCL33C.js → chunk-Q3PQLWBR.js} +3 -3
- package/dist/chunk-Q3PQLWBR.js.map +1 -0
- package/dist/{chunk-K2LZMRLN.js → chunk-RW4R3O5P.js} +3 -3
- package/dist/{chunk-K2LZMRLN.js.map → chunk-RW4R3O5P.js.map} +1 -1
- package/dist/{chunk-KALRDVN5.cjs → chunk-X3VQ5F7D.cjs} +3 -3
- package/dist/{chunk-KALRDVN5.cjs.map → chunk-X3VQ5F7D.cjs.map} +1 -1
- package/dist/{chunk-L35IQAWD.cjs → chunk-XV2QSBBE.cjs} +7 -7
- package/dist/chunk-XV2QSBBE.cjs.map +1 -0
- package/dist/gemini.cjs +1 -1
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.js +1 -1
- package/dist/gemini.js.map +1 -1
- package/dist/index.cjs +18 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -6
- package/dist/index.d.ts +50 -6
- package/dist/index.js +18 -18
- package/dist/index.js.map +1 -1
- package/dist/{multi-agent-orchestrator-675FR2HF.js → multi-agent-orchestrator-4PXNYRHB.js} +2 -2
- package/dist/{multi-agent-orchestrator-675FR2HF.js.map → multi-agent-orchestrator-4PXNYRHB.js.map} +1 -1
- package/dist/multi-agent-orchestrator-KFGTEGE5.cjs +2 -0
- package/dist/{multi-agent-orchestrator-SH5TRRS3.cjs.map → multi-agent-orchestrator-KFGTEGE5.cjs.map} +1 -1
- package/dist/ollama.cjs +2 -2
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.js +1 -1
- package/dist/ollama.js.map +1 -1
- package/dist/openai.cjs +1 -1
- package/dist/openai.cjs.map +1 -1
- package/dist/openai.js +1 -1
- package/dist/openai.js.map +1 -1
- package/dist/{orchestrator-types-BmvoZgfO.d.cts → orchestrator-types-Bh8r3_Sq.d.cts} +1 -1
- package/dist/{orchestrator-types-D6gzobwg.d.ts → orchestrator-types-CTfIKk0W.d.ts} +1 -1
- package/dist/testing.cjs +1 -1
- package/dist/testing.d.cts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-265ZKXYE.js.map +0 -1
- package/dist/chunk-5ERCL33C.js.map +0 -1
- package/dist/chunk-L35IQAWD.cjs.map +0 -1
- package/dist/chunk-QXMXSHYS.cjs.map +0 -1
- package/dist/multi-agent-orchestrator-SH5TRRS3.cjs +0 -2
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkXV2QSBBE_cjs=require('./chunk-XV2QSBBE.cjs'),chunkW6MVJKWN_cjs=require('./chunk-W6MVJKWN.cjs'),chunkX3VQ5F7D_cjs=require('./chunk-X3VQ5F7D.cjs'),internals=require('@directive-run/core/internals'),plugins=require('@directive-run/core/plugins'),se=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var se__default=/*#__PURE__*/_interopDefault(se);function ln(t){let{patterns:e=[/\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:s="[REDACTED]"}=t;return n=>{let o=n.input,a=false;for(let c of e)c.lastIndex=0,c.test(o)&&(a=true,r&&(c.lastIndex=0,o=o.replace(c,s)));return a&&!r?{passed:false,reason:"Input contains PII"}:{passed:true,transformed:r&&a?o:void 0}}}function dn(t){let{checkFn:e,message:r="Content flagged by moderation"}=t;return async s=>{let n="output"in s?typeof s.output=="string"?s.output:JSON.stringify(s.output):s.input,o=await e(n);return {passed:!o,reason:o?r:void 0}}}function pn(t){let{maxTokensPerMinute:e=1e5,maxRequestsPerMinute:r=60}=t,s=Math.max(r,1e3),n=[],o=[],a=6e4;function c(u,l){let p=0,d=u.length;for(;p<d;){let y=p+d>>>1;(u[y]??0)<l?p=y+1:d=y;}return p}let i=(u,l)=>{let p=Date.now(),d=p-a,y=c(n,d);y>0&&(n=n.slice(y));let f=c(o,d);f>0&&(o=o.slice(f));let h=l.facts[chunkX3VQ5F7D_cjs.c]?.tokenUsage??0,g=n.length,b=o.length;return g+h>e?{passed:false,reason:"Token rate limit exceeded"}:b>=r?{passed:false,reason:"Request rate limit exceeded"}:(o.length<s&&o.push(p),n.length<s&&n.push(p),{passed:true})};return i.reset=()=>{n=[],o=[];},i}function gn(t){let{allowlist:e,denylist:r,caseSensitive:s=false}=t,n=e?.map(a=>s?a:a.toLowerCase()),o=r?.map(a=>s?a:a.toLowerCase());return a=>{let c=s?a.toolCall.name:a.toolCall.name.toLowerCase();return n&&!n.includes(c)?{passed:false,reason:`Tool "${a.toolCall.name}" not in allowlist`}:o?.includes(c)?{passed:false,reason:`Tool "${a.toolCall.name}" is blocked`}:{passed:true}}}function mn(t){let{validate:e,errorPrefix:r="Output schema validation failed"}=t;return s=>{let n=e(s.output);return typeof n=="boolean"?{passed:n,reason:n?void 0:r}:n.valid?{passed:true}:{passed:false,reason:n.errors?.length?`${r}: ${n.errors.join("; ")}`:r}}}function fn(t){let{type:e,requiredFields:r=[],minLength:s,maxLength:n,minStringLength:o,maxStringLength:a}=t;return c=>{let i=c.output;switch(e){case "string":return typeof i!="string"?{passed:false,reason:`Expected string, got ${typeof i}`}:o!==void 0&&i.length<o?{passed:false,reason:`String too short: ${i.length} < ${o}`}:a!==void 0&&i.length>a?{passed:false,reason:`String too long: ${i.length} > ${a}`}:{passed:true};case "number":return typeof i!="number"||Number.isNaN(i)?{passed:false,reason:`Expected number, got ${typeof i}`}:{passed:true};case "boolean":return typeof i!="boolean"?{passed:false,reason:`Expected boolean, got ${typeof i}`}:{passed:true};case "object":if(typeof i!="object"||i===null||Array.isArray(i))return {passed:false,reason:`Expected object, got ${Array.isArray(i)?"array":typeof i}`};for(let u of r)if(!(u in i))return {passed:false,reason:`Missing required field: ${u}`};return {passed:true};case "array":return Array.isArray(i)?s!==void 0&&i.length<s?{passed:false,reason:`Array too short: ${i.length} < ${s}`}:n!==void 0&&i.length>n?{passed:false,reason:`Array too long: ${i.length} > ${n}`}:{passed:true}:{passed:false,reason:`Expected array, got ${typeof i}`};default:return {passed:false,reason:`Unknown type: ${e}`}}}}function yn(t){let{maxCharacters:e,maxTokens:r,estimateTokens:s=n=>Math.ceil(n.length/4)}=t;return n=>{let o=internals.safeStringify(n.output);if(e!==void 0&&o.length>e)return {passed:false,reason:`Output too long: ${o.length} characters (max: ${e})`};if(r!==void 0){let a=s(o);if(a>r)return {passed:false,reason:`Output too long: ~${a} tokens (max: ${r})`}}return {passed:true}}}function hn(t){let{blockedPatterns:e,caseSensitive:r=false}=t;e.length===0&&console.warn("[Directive] createContentFilterGuardrail: blockedPatterns is empty \u2014 no content will be filtered");let s=e.map(n=>{if(n instanceof RegExp)return n;let o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(o,r?"g":"gi")});return n=>{let o=internals.safeStringify(n.output);for(let a of s)if(a.lastIndex=0,a.test(o))return {passed:false,reason:`Output contains blocked content matching: ${a.source}`};return {passed:true}}}function vn(t,...e){let r=t;for(let s of e)r=s(r);return r}function K(t,e){let r=typeof t.content=="string"?t.content:JSON.stringify(t.content);return Math.ceil(r.length/4)}function pe(t,e){return t.reduce((r,s)=>r+K(s),0)}function Ce(t={}){return (e,r={})=>{let s={...t,...r},n=s.maxMessages??100,o=s.preserveRecentCount??5;if(e.length<=n)return {keep:[...e],toSummarize:[],estimatedTokens:pe(e)};let a=e.slice(-o),c=e.slice(0,-o),i=Math.max(0,n-o),u=c.slice(-i),l=c.slice(0,-i||void 0),p=[...u,...a];return {keep:p,toSummarize:l.length>0?l:[],estimatedTokens:pe(p)}}}function Me(t={}){return (e,r={})=>{let s={...t,...r},n=s.maxTokens??4e3,o=s.preserveRecentCount??5,a=s.countSystemMessages??true,c=e.slice(-o),i=e.slice(0,-o),u=c.reduce((y,f)=>!a&&f.role==="system"?y:y+K(f),0),l=[],p=[],d=u;for(let y=i.length-1;y>=0;y--){let f=i[y],m=!a&&f.role==="system"?0:K(f);if(d+m<=n)l.unshift(f),d+=m;else {p.push(...i.slice(0,y+1));break}}return {keep:[...l,...c],toSummarize:p,estimatedTokens:d}}}function bn(t={}){let e=Ce(t),r=Me(t);return (s,n={})=>{let o={...t,...n},a=e(s,o),c=r(s,o);return a.keep.length<=c.keep.length?a:c}}function Sn(t){let{strategy:e,summarizer:r,strategyConfig:s={},autoManage:n=false,onMemoryManaged:o,onManageError:a,maxContextTokens:c}=t,i={messages:[],summaries:[],totalMessagesProcessed:0,estimatedTokens:0},u=false;async function l(){if(u)return {messagesBefore:i.messages.length,messagesAfter:i.messages.length,messagesSummarized:0,estimatedTokensBefore:i.estimatedTokens,estimatedTokensAfter:i.estimatedTokens};u=true;try{let d=i.messages.length,y=i.estimatedTokens,f=e(i.messages,s);if(f.toSummarize.length===0)return {messagesBefore:d,messagesAfter:d,messagesSummarized:0,estimatedTokensBefore:y,estimatedTokensAfter:f.estimatedTokens};let m;r&&f.toSummarize.length>0&&(m=await r(f.toSummarize),i.summaries.push({content:m,messagesCount:f.toSummarize.length,createdAt:Date.now()})),i.messages=f.keep,i.estimatedTokens=f.estimatedTokens;let S={messagesBefore:d,messagesAfter:i.messages.length,messagesSummarized:f.toSummarize.length,summary:m,estimatedTokensBefore:y,estimatedTokensAfter:f.estimatedTokens};return o?.(S),S}finally{u=false;}}function p(){if(u)return;e(i.messages,s).toSummarize.length>0&&l().catch(y=>{let f=y instanceof Error?y:new Error(String(y));a?a(f):console.error("[Directive Memory] Auto-manage error:",f);});}return {getState(){return {...i,messages:[...i.messages],summaries:i.summaries.map(d=>({...d}))}},addMessage(d){i.messages.push(d),i.totalMessagesProcessed++,i.estimatedTokens+=K(d),n&&p();},addMessages(d){for(let y of d)i.messages.push(y),i.totalMessagesProcessed++,i.estimatedTokens+=K(y);n&&p();},getContextMessages(){let d=[];if(i.summaries.length>0){let y=i.summaries.map(f=>f.content).join(`
|
|
2
2
|
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
`);d.push({role:"system",content:`[Previous conversation summary]
|
|
6
6
|
|
|
7
|
-
${y}`});}if(d.push(...i.messages),c){let y=
|
|
7
|
+
${y}`});}if(d.push(...i.messages),c){let y=pe(d);y>c&&console.warn(`[Directive Memory] Context messages (${y} tokens) exceed maxContextTokens (${c}). Consider calling manage() or reducing message count.`);}return d},manage:l,isManaging(){return u},clear(){i={messages:[],summaries:[],totalMessagesProcessed:0,estimatedTokens:0};},export(){return {...i,messages:[...i.messages],summaries:i.summaries.map(d=>({...d}))}},import(d){i={...d,messages:[...d.messages],summaries:d.summaries.map(y=>({...y}))};}}}function En(t=500){return async e=>{let r=e.filter(s=>s.role!=="system").map(s=>{let n=typeof s.content=="string"?s.content:JSON.stringify(s.content);return `${s.role}: ${n.slice(0,100)}${n.length>100?"...":""}`}).join(`
|
|
8
8
|
`);return r.length<=t?r:r.slice(0,t)+`
|
|
9
9
|
[truncated]`}}function Rn(){return async t=>{let e=[];for(let r of t)if(r.role==="user"){let n=(typeof r.content=="string"?r.content:JSON.stringify(r.content)).match(/[^.!?]*\?/g);n&&e.push(...n.map(o=>`Q: ${o.trim()}`));}return e.length===0?`[${t.length} messages processed - no key questions found]`:`Key topics discussed:
|
|
10
10
|
${e.join(`
|
|
@@ -17,33 +17,33 @@ Focus on information that would be useful context for continuing the conversatio
|
|
|
17
17
|
CONVERSATION:
|
|
18
18
|
${o}
|
|
19
19
|
|
|
20
|
-
SUMMARY:`;return t(a)}}function z(t){return t.replace(/[^a-zA-Z0-9]/g,"_")}function Ae(t){return t.replace(/[\r\n]+/g," ").replace(/[[\](){}|<>"]/g,e=>`#${e.charCodeAt(0)};`)}var Cn={square:["[","]"],round:["(",")"],stadium:["([","])"],hexagon:["{{","}}"],circle:["((","))"]};function j(t,e,r,s){let n;r==="task"?n=s?.task??"hexagon":r==="agent"?n=s?.agent??"square":n=s?.virtual??"circle";let[o,a]=Cn[n];return `${t}${o}${Ae(e)}${a}`}function
|
|
21
|
-
`)}var Tn=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Pn(t,e,r){let s=
|
|
20
|
+
SUMMARY:`;return t(a)}}function z(t){return t.replace(/[^a-zA-Z0-9]/g,"_")}function Ae(t){return t.replace(/[\r\n]+/g," ").replace(/[[\](){}|<>"]/g,e=>`#${e.charCodeAt(0)};`)}var Cn={square:["[","]"],round:["(",")"],stadium:["([","])"],hexagon:["{{","}}"],circle:["((","))"]};function j(t,e,r,s){let n;r==="task"?n=s?.task??"hexagon":r==="agent"?n=s?.agent??"square":n=s?.virtual??"circle";let[o,a]=Cn[n];return `${t}${o}${Ae(e)}${a}`}function ge(t){let e=new Map;for(let n of t)e.set(n,(e.get(n)??0)+1);let r=new Map,s=[];for(let n of t){let o=z(n);if(e.get(n)>1){let a=(r.get(n)??0)+1;r.set(n,a),s.push({id:`${o}_${a}`,label:`${n} #${a}`});}else s.push({id:o,label:n});}return s}function Mn(t){let e=new Map,r=new Map;for(let o of Object.keys(t))e.has(o)||e.set(o,0),r.has(o)||r.set(o,[]);for(let[o,a]of Object.entries(t))for(let c of a.deps??[])r.get(c).push(o),e.set(o,(e.get(o)??0)+1);let s=[];for(let[o,a]of e)a===0&&s.push(o);s.sort();let n=[];for(;s.length>0;){let o=s.shift();n.push(o);let a=r.get(o)??[];a.sort();for(let c of a){let i=e.get(c)-1;if(e.set(c,i),i===0){let u=s.findIndex(l=>l>c);u===-1?s.push(c):s.splice(u,0,c);}}}return n}function An(t){let e=t;if(e.type==="parallel"&&typeof e.merge=="function"||e.type==="sequential"&&typeof e.transform=="function"||e.type==="supervisor"&&typeof e.extract=="function"||e.type==="dag"&&typeof e.merge=="function"||e.type==="reflect"&&typeof e.parseEvaluation=="function"||e.type==="race"&&typeof e.extract=="function"||e.type==="debate"&&typeof e.extract=="function"||e.type==="goal"&&(typeof e.when=="function"||typeof e.satisfaction=="function"||typeof e.extract=="function"))return false;if(e.type==="dag"&&e.nodes)for(let r of Object.values(e.nodes)){let s=r;if(typeof s.when=="function"||typeof s.transform=="function")return false}if(e.type==="goal"&&e.nodes)for(let r of Object.values(e.nodes)){let s=r;if(typeof s.buildInput=="function"||typeof s.extractOutput=="function")return false}return true}function xn(t,e){let r=[];return e&&r.push(`%%{init: {'theme': '${e}'}}%%`),r.push(`graph ${t}`),r.join(`
|
|
21
|
+
`)}var Tn=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Pn(t,e,r){let s=ge(t.handlers),n=j("__input","Input","virtual",e),o=j("__merge","Merge","virtual",e),a=[];for(let c of s){let i=r?.has(c.label)?"task":"agent",u=j(c.id,c.label,i,e);a.push(` ${n} --> ${u}`),a.push(` ${u} --> ${o}`);}return a}function kn(t,e,r){return t.handlers.length===0?[]:[` ${t.handlers.map(o=>({id:z(o),label:o})).map(o=>j(o.id,o.label,r?.has(o.label)?"task":"agent",e)).join(" --> ")}`]}function In(t,e){let r=z(t.supervisor),s=j(r,t.supervisor,"agent",e),n=[];for(let o of t.workers){let a=z(o),c=j(a,o,"agent",e);n.push(` ${s} -->|delegate| ${c}`),n.push(` ${c} -->|result| ${s}`);}return n}function Dn(t,e,r){let s=Mn(t.nodes),n=[],o=new Set;for(let a of s){let c=t.nodes[a],i=z(a),u=c.handler,l=r?.has(c.handler)?"task":"agent";(!c.deps||c.deps.length===0)&&(o.has(i)||(n.push(` ${j(i,u,l,e)}`),o.add(i)));let p=[...c.deps??[]].sort();for(let d of p){let y=z(d),f=t.nodes[d],m=f.handler,S=r?.has(f.handler)?"task":"agent",h=j(y,m,S,e),g=j(i,u,l,e);n.push(` ${h} --> ${g}`),o.add(y),o.add(i);}}return n}function On(t,e,r){let s=ge(t.handlers),n=j("__input","Input","virtual",e),o=j("__output","Output","virtual",e),a=[];for(let c of s){let i=r?.has(c.label)?"task":"agent",u=j(c.id,c.label,i,e);a.push(` ${n} --> ${u}`),a.push(` ${u} -.-> ${o}`);}return a}function Nn(t,e,r){let s=z(t.handler),n=z(t.evaluator),o=r?.has(t.handler)?"task":"agent",a=j(s,t.handler,o,e),c=j(n,t.evaluator,"agent",e),i=j("__output","Output","virtual",e);return [` ${a} --> ${c}`,` ${c} -->|feedback| ${a}`,` ${c} -->|pass| ${i}`]}function $n(t,e,r){let s=Object.entries(t.nodes),n=[],o=new Map;for(let[u,l]of s)for(let p of l.produces)o.set(p,u);let a=new Set,c=new Set,i=[...s].sort(([u],[l])=>u.localeCompare(l));for(let[u,l]of i){let p=z(u),d=[...l.requires??[]].sort();if(d.length===0&&!a.has(p)){let y=r?.has(l.handler)?"task":"agent";n.push(` ${j(p,l.handler,y,e)}`),a.add(p);}for(let y of d){let f=o.get(y);if(f&&f!==u){let m=t.nodes[f];if(!m)continue;let S=`${f}->${u}`;if(!c.has(S)){let h=z(f),g=r?.has(m.handler)?"task":"agent",b=r?.has(l.handler)?"task":"agent",R=j(h,m.handler,g,e),A=j(p,l.handler,b,e);n.push(` ${R} -->|${Ae(y)}| ${A}`),a.add(h),a.add(p),c.add(S);}}}}for(let[u,l]of i){let p=z(u);if(!a.has(p)){let d=r?.has(l.handler)?"task":"agent";n.push(` ${j(p,l.handler,d,e)}`),a.add(p);}}return n}function _n(t,e,r){let s=ge(t.handlers),n=z(t.evaluator),o=j(n,t.evaluator,"agent",e),a=j("__output","Output","virtual",e),c=[];for(let i of s){let u=r?.has(i.label)?"task":"agent",l=j(i.id,i.label,u,e);c.push(` ${l} --> ${o}`),c.push(` ${o} -->|next round| ${l}`);}return c.push(` ${o} --> ${a}`),c}function jn(t,e){let r=e?.direction??"LR",s=e?.shapes,n=e?.taskIds,o=An(t)?t:chunkX3VQ5F7D_cjs.na(t);if(!Tn.has(o.type))throw new Error(`[Directive] patternToMermaid: unknown pattern type "${o.type}"`);let a=xn(r,e?.theme),c=[];switch(o.type){case "parallel":c=Pn(o,s,n);break;case "sequential":c=kn(o,s,n);break;case "supervisor":c=In(o,s);break;case "dag":c=Dn(o,s,n);break;case "race":c=On(o,s,n);break;case "reflect":c=Nn(o,s,n);break;case "debate":c=_n(o,s,n);break;case "goal":c=$n(o,s,n);break}return a+`
|
|
22
22
|
`+c.join(`
|
|
23
23
|
`)+`
|
|
24
|
-
`}function W(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Gn(t={}){let{maxHistory:e=1e3,defaultTtlMs:r=36e5,maxPendingPerAgent:s=100,persistence:n,onDelivery:o,onDeliveryError:a}=t,c=new Map,i=[],u=new Map,l=new Map;function p(m,E){if(E.types&&!E.types.includes(m.type)||E.from&&!(Array.isArray(E.from)?E.from:[E.from]).includes(m.from))return false;if(E.topics){let h=m.topic;if(h&&!E.topics.includes(h))return false}return !(E.priority&&m.priority&&!E.priority.includes(m.priority)||E.custom&&!E.custom(m))}function d(m){return m.ttlMs?Date.now()-m.timestamp>m.ttlMs:false}function y(m){return m.to==="*"?Array.from(c.keys()):Array.isArray(m.to)?m.to:[m.to]}async function f(m){if(d(m))return;let E=y(m),h=[],g=[];for(let b of E){let R=c.get(b)??[];if(R.length===0){let A=l.get(b)??[];for(A.push(m);A.length>s;)A.shift();l.set(b,A);continue}for(let A of R)(!A.filter||p(m,A.filter))&&g.push(Promise.resolve(A.handler(m)).then(()=>{h.push(b);},x=>{a?.(m,x instanceof Error?x:new Error(String(x)));}));}g.length>0&&await Promise.allSettled(g),h.length>0&&o?.(m,h),n&&await n.save(m);}return {publish(m){let E={...m,id:W(),timestamp:Date.now(),priority:m.priority??"normal",ttlMs:m.ttlMs??r};for(i.push(E),u.set(E.id,E);i.length>e;){let h=i.shift();h&&u.delete(h.id);}return f(E).catch(h=>{let g=h instanceof Error?h:new Error(String(h));a?a(E,g):console.error("[Directive MessageBus] Delivery error:",g);}),E.id},subscribe(m,E,h){let g=W(),b={id:g,agentId:m,handler:E,filter:h,unsubscribe:()=>{let x=c.get(m)??[],k=x.findIndex(O=>O.id===g);k>=0&&x.splice(k,1);}},R=c.get(m)??[];R.push(b),c.set(m,R);let A=l.get(m)??[];l.delete(m);for(let x of A)if(!h||p(x,h)){let k=E(x);k instanceof Promise&&k.catch(O=>{let v=O instanceof Error?O:new Error(String(O));a?a(x,v):console.error("[Directive MessageBus] Pending delivery error:",v);});}return b},getHistory(m,E=100){let h=i.filter(g=>!d(g));return m&&(h=h.filter(g=>p(g,m))),h.slice(-E)},getMessage(m){let E=u.get(m);if(!(E&&d(E)))return E},getPending(m){return (l.get(m)??[]).filter(h=>!d(h))},clear(){i.length=0,u.clear(),l.clear();},destroy(){i.length=0,u.clear(),l.clear(),c.clear();}}}function Bn(t){let{bus:e,agents:r={},defaultTimeout:s=3e4,onAgentOnline:n,onAgentOffline:o}=t,a=new Map,c=new Map;for(let[u,l]of Object.entries(r))a.set(u,{...l,id:u,status:"offline",lastSeen:Date.now()});function i(u){if(u.type!=="RESPONSE"&&u.type!=="DELEGATION_RESULT")return;let l=u.correlationId??u.replyTo;if(!l)return;let p=c.get(l);p&&(clearTimeout(p.timer),c.delete(l),p.resolve(u));}return {register(u,l){let p=!a.has(u)||a.get(u)?.status==="offline";a.set(u,{...l,id:u,status:"online",lastSeen:Date.now()}),p&&n?.(u);},unregister(u){let l=a.get(u);l&&(l.status="offline",o?.(u));},getAgent(u){return a.get(u)},getAgents(){return Array.from(a.values())},findByCapability(u){return Array.from(a.values()).filter(l=>l.capabilities.includes(u)&&l.status==="online")},send(u,l,p){let d=a.get(u);return d&&(d.lastSeen=Date.now(),d.status="online"),e.publish({...p,from:u,to:l,type:p.type??"CUSTOM"})},async request(u,l,p,d,y=s){return new Promise((f,m)=>{let E=W(),h=e.subscribe(u,b=>{(b.correlationId===E||b.replyTo===E)&&(h.unsubscribe(),i(b));},{types:["RESPONSE"]}),g=setTimeout(()=>{h.unsubscribe(),c.delete(E),m(new Error(`[Directive Communication] Request timeout after ${y}ms`));},y);c.set(E,{resolve:f,reject:m,timer:g}),e.publish({type:"REQUEST",from:u,to:l,action:p,payload:d,timeout:y,correlationId:E});})},async delegate(u,l,p,d){return new Promise((y,f)=>{let m=W(),E=e.subscribe(u,g=>{(g.correlationId===m||g.replyTo===m)&&(E.unsubscribe(),i(g));},{types:["DELEGATION_RESULT"]}),h=setTimeout(()=>{E.unsubscribe(),c.delete(m),f(new Error(`[Directive Communication] Delegation timeout after ${s}ms`));},s);c.set(m,{resolve:y,reject:f,timer:h}),e.publish({type:"DELEGATION",from:u,to:l,task:p,context:d,correlationId:m});})},async query(u,l,p,d){return new Promise((y,f)=>{let m=W(),E=e.subscribe(u,g=>{(g.correlationId===m||g.replyTo===m)&&(E.unsubscribe(),i(g));},{types:["RESPONSE"]}),h=setTimeout(()=>{E.unsubscribe(),c.delete(m),f(new Error(`[Directive Communication] Query timeout after ${s}ms`));},s);c.set(m,{resolve:y,reject:f,timer:h}),e.publish({type:"QUERY",from:u,to:l,question:p,context:d,correlationId:m});})},broadcast(u,l){return e.publish({...l,from:u,to:"*",type:l.type??"INFORM"})},listen(u,l,p){let d=a.get(u);return d&&(d.status="online",d.lastSeen=Date.now(),n?.(u)),e.subscribe(u,l,p)},getBus(){return e},destroy(){for(let[,u]of c)clearTimeout(u.timer);c.clear(),a.clear();}}}function Fn(t,e){let r=new Map,s=t.listen(e,async n=>{if(n.type==="REQUEST"){let o=n,a=r.get(o.action),c;if(a)try{let i=await a(o.payload);c={type:"RESPONSE",success:i.success,result:i.result,error:i.error};}catch(i){c={type:"RESPONSE",success:false,error:i instanceof Error?i.message:String(i)};}else c={type:"RESPONSE",success:false,error:`Unknown action: ${o.action}`};t.send(e,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["REQUEST"]});return {onRequest(n,o){r.set(n,o);},offRequest(n){r.delete(n);},destroy(){s.unsubscribe(),r.clear();}}}function Ln(t,e){let r=null,s=t.listen(e,async n=>{if(n.type==="DELEGATION"&&r){let o=n,a=Date.now(),c;try{let i=await r(o.task,o.context);c={type:"DELEGATION_RESULT",success:i.success,result:i.result,error:i.error,metrics:i.metrics??{durationMs:Date.now()-a}};}catch(i){c={type:"DELEGATION_RESULT",success:false,error:i instanceof Error?i.message:String(i),metrics:{durationMs:Date.now()-a}};}t.send(e,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["DELEGATION"]});return {onDelegation(n){r=n;},offDelegation(){r=null;},destroy(){s.unsubscribe(),r=null;}}}function Un(t,e){let r=new Map,s=t.listen(e,n=>{if(n.type==="UPDATE"){let o=n,a=r.get(o.topic)??[];for(let c of a)c(o.content);}},{types:["UPDATE"]});return {subscribe(n,o){let a=new Map;for(let c of n){let i=r.get(c)??[],u=l=>o(c,l);a.set(c,u),i.push(u),r.set(c,i);}return t.broadcast(e,{type:"SUBSCRIBE",topics:n}),()=>{for(let[c,i]of a){let u=r.get(c);if(u){let l=u.indexOf(i);l>=0&&u.splice(l,1),u.length===0&&r.delete(c);}}a.clear(),t.broadcast(e,{type:"UNSUBSCRIBE",topics:n});}},publish(n,o){t.broadcast(e,{type:"UPDATE",topic:n,content:o});},destroy(){s.unsubscribe(),r.clear();}}}var zn=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:t=>{let e=t.replace(/[-\s]/g,"");return !(e.startsWith("000")||e.startsWith("666")||e.startsWith("9")||e.slice(3,5)==="00"||e.slice(5)==="0000")},confidence:.95},{type:"credit_card",pattern:/\b(\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4})\b|\b(\d{15,16})\b/g,validate:t=>{let e=t.replace(/[-\s]/g,"");if(e.length<13||e.length>19)return false;let r=0,s=false;for(let n=e.length-1;n>=0;n--){let o=e[n];if(!o)continue;let a=Number.parseInt(o,10);s&&(a*=2,a>9&&(a-=9)),r+=a,s=!s;}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:t=>{let e=t.replace(/\D/g,"");return e.length>=10&&e.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,confidence:.85},{type:"ip_address",pattern:/\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/g,validate:t=>t.split(".").every(r=>{let s=Number.parseInt(r,10);return s>=0&&s<=255}),confidence:.9},{type:"bank_account",pattern:/\b(account|acct)[\s#:]+(\d{8,17})\b/gi,confidence:.7},{type:"passport",pattern:/\b(passport)[\s#:]+([A-Z0-9]{6,9})\b/gi,confidence:.75},{type:"driver_license",pattern:/\b(driver'?s?\s*licen[cs]e|dl)[\s#:]+([A-Z0-9]{5,15})\b/gi,confidence:.7},{type:"medical_id",pattern:/\b(mrn|medical.?record|patient.?id)[\s#:]+([A-Z0-9-]{6,15})\b/gi,confidence:.7}];function Hn(t){let e=[],r="street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|way|boulevard|blvd|circle|cir|place|pl",s=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"),n;for(;(n=s.exec(t))!==null;)e.push({type:"address",value:n[0],position:{start:n.index,end:n.index+n[0].length},confidence:.7});return e}var xe=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function qn(t){let e=[],r=xe.join("|"),s=new RegExp(`\\b(${r})[.,:]?\\s+([A-Z][a-z]{1,20}(?:\\s[A-Z][a-z]{1,20}){0,2})\\b`,"gi"),n;for(;(n=s.exec(t))!==null;){let o=n[2],a=n[1];o&&(o.split(/\s+/).length>=2||a&&xe.some(c=>a.toLowerCase().includes(c)))&&e.push({type:"name",value:o,position:{start:n.index,end:n.index+n[0].length},confidence:.6,context:n[0]});}return e}var Te=1e5,te={name:"regex",async detect(t,e){if(t.length>Te)throw new Error(`[Directive] Input exceeds maximum length of ${Te} characters for PII detection. Truncate input or process in chunks.`);let r=[],s=new Set(e);for(let n of zn){if(!s.has(n.type))continue;let o=new RegExp(n.pattern.source,n.pattern.flags),a;for(;(a=o.exec(t))!==null;){let c=a[1]||a[0],i=t.slice(Math.max(0,a.index-20),a.index+c.length+20);n.validate&&!n.validate(c,i)||r.push({type:n.type,value:c,position:{start:a.index,end:a.index+c.length},confidence:n.confidence,context:i});}}return s.has("address")&&r.push(...Hn(t)),s.has("name")&&r.push(...qn(t)),r}};function ne(t,e,r="typed"){let s=[...e].sort((o,a)=>a.position.start-o.position.start),n=t;for(let o of s){let a;switch(r){case "placeholder":a="[REDACTED]";break;case "typed":a=`[${o.type.toUpperCase()}]`;break;case "masked":a="*".repeat(o.value.length);break;case "hashed":a=`[HASH:${Vn(o.value)}]`;break}n=n.slice(0,o.position.start)+a+n.slice(o.position.end);}return n}function Vn(t){let s=2166136261;for(let n=0;n<t.length;n++)s^=t.charCodeAt(n),s=Math.imul(s,16777619);return (s>>>0).toString(16).padStart(8,"0")}var Pe=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function ke(t={}){let{types:e=Pe,detector:r="regex",redact:s=false,redactionStyle:n="typed",minConfidence:o=.7,onDetected:a,allowlist:c=[],minItemsToBlock:i=1,detectorTimeout:u=5e3}=t,l=r==="regex"?te:r,p=new Set(c.map(y=>y.toLowerCase().trim()));async function d(y,f){if(l===te)return l.detect(y,f);let m;try{return await Promise.race([l.detect(y,f),new Promise((E,h)=>{m=setTimeout(()=>h(new Error(`[Directive] PII detector '${l.name}' timed out after ${u}ms`)),u);})])}finally{clearTimeout(m);}}return async y=>{let m=(await d(y.input,e)).filter(E=>!(E.confidence<o||p.has(E.value.toLowerCase().trim())));if(m.length>0&&a?.(m),m.length>=i){if(s)return {passed:true,transformed:ne(y.input,m,n)};let E={};for(let g of m)E[g.type]=(E[g.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(E).map(([g,b])=>`${g}: ${b}`).join(", ")})`}}return {passed:true}}}function Jn(t={}){let e=ke(t);return async(r,s)=>{let n=typeof r.output=="string"?r.output:JSON.stringify(r.output);return e({input:n,agentName:r.agentName},s)}}async function ge(t,e={}){let{types:r=Pe,detector:s="regex",minConfidence:n=.7,timeout:o=5e3}=e,a=s==="regex"?te:s,c;if(a===te)c=await a.detect(t,r);else {let l;try{c=await Promise.race([a.detect(t,r),new Promise((p,d)=>{l=setTimeout(()=>d(new Error(`[Directive] PII detector '${a.name}' timed out after ${o}ms`)),o);})]);}finally{clearTimeout(l);}}let i=c.filter(l=>l.confidence>=n),u={};for(let l of i)u[l.type]=(u[l.type]||0)+1;return {detected:i.length>0,items:i,typeCounts:u}}var Kn=1e4,Wn=10080*60*1e3,Qn=6e4,Ie="0".repeat(64);function Xn(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Yn(t){return new TextEncoder().encode(t)}function Zn(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function De(t){let e=Yn(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return Zn(new Uint8Array(r))}function Oe(t){let{id:e,timestamp:r,eventType:s,previousHash:n,payload:o,actorId:a,sessionId:c}=t;return JSON.stringify({id:e,timestamp:r,eventType:s,previousHash:n,payload:o,actorId:a,sessionId:c})}function er(t){return JSON.parse(JSON.stringify(t))}async function tr(t,e){let r=er(t);async function s(n){if(typeof n=="string"){let o=await ge(n,{types:e.types,minConfidence:e.minConfidence??.7});if(o.detected){let a=e.allowlist?o.items.filter(c=>!e.allowlist.includes(c.value.toLowerCase())):o.items;if(a.length>0)return ne(n,a,e.redactionStyle)}return n}if(Array.isArray(n))return Promise.all(n.map(s));if(n&&typeof n=="object"){let o={};for(let[a,c]of Object.entries(n))o[a]=await s(c);return o}return n}for(let[n,o]of Object.entries(r))r[n]=await s(o);return r}function nr(t={}){let{maxEntries:e=Kn,retentionMs:r=Wn,exportInterval:s=Qn,exporter:n,piiMasking:o,signing:a,sessionId:c,actorId:i,events:u={}}=t,l=[],p=0,d=0,y=0,f=true,m;function E(){return l.length===0?Ie:l[l.length-1].hash}async function h(g,b,R){let A={id:Xn(),timestamp:Date.now(),eventType:g,previousHash:E(),payload:b,actorId:i,sessionId:c};o?.enabled&&(A.maskedPayload=await tr(b,o));let x=Oe(A),k=await De(x),O={...A,hash:k};for(a&&(O.signature=await a.signFn(k)),l.push(O);l.length>e;)l.shift(),d++,p>0&&p--;return u.onEntryAdded?.(O),O}return n&&s>0&&(m=setInterval(async()=>{try{let g=l.slice(p);g.length>0&&(await n(g),y+=g.length,p=l.length);}catch(g){u.onExportError?.(g instanceof Error?g:new Error(String(g)),l.slice(p));}},s)),{getEntries(g){let b=[...l];if(g){if(g.eventTypes?.length){let R=new Set(g.eventTypes);b=b.filter(A=>R.has(A.eventType));}g.actorId&&(b=b.filter(R=>R.actorId===g.actorId)),g.sessionId&&(b=b.filter(R=>R.sessionId===g.sessionId)),g.since!==void 0&&(b=b.filter(R=>R.timestamp>=g.since)),g.until!==void 0&&(b=b.filter(R=>R.timestamp<=g.until)),g.offset!==void 0&&(b=b.slice(g.offset)),g.limit!==void 0&&(b=b.slice(0,g.limit));}return b},async verifyChain(){if(l.length===0)return {valid:true,entriesVerified:0,verifiedAt:Date.now()};l[0].previousHash;for(let b=0;b<l.length;b++){let R=l[b],A=Oe({id:R.id,timestamp:R.timestamp,eventType:R.eventType,previousHash:R.previousHash,payload:R.payload,actorId:R.actorId,sessionId:R.sessionId}),x=await De(A);if(R.hash!==x){f=false;let k={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:x,actualHash:R.hash},verifiedAt:Date.now()};return u.onChainBroken?.(k),k}if(b>0){let k=l[b-1];if(R.previousHash!==k.hash){f=false;let O={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:k.hash,actualHash:R.previousHash},verifiedAt:Date.now()};return u.onChainBroken?.(O),O}}if(a?.verifyFn&&R.signature&&!await a.verifyFn(R.hash,R.signature)){f=false;let O={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:"signature-invalid",actualHash:R.signature},verifiedAt:Date.now()};return u.onChainBroken?.(O),O}}return f=true,{valid:true,entriesVerified:l.length,verifiedAt:Date.now()}},async export(g){let b=[...l];return g!==void 0&&(b=b.filter(R=>R.timestamp>=g)),n&&b.length>0&&(await n(b),y+=b.length),b},prune(){let g=Date.now()-r,b=l.length;for(;l.length>0&&l[0].timestamp<g;)l.shift(),p>0&&p--;let R=b-l.length;return d+=R,R},getStats(){let g={};for(let b of l)g[b.eventType]=(g[b.eventType]??0)+1;return {totalEntries:l.length,byEventType:g,oldestEntry:l[0]?.timestamp,newestEntry:l[l.length-1]?.timestamp,entriesPruned:d,entriesExported:y,chainIntegrity:f}},async destroy(){if(m&&(clearInterval(m),m=void 0),n)try{let g=l.slice(p);g.length>0&&(await n(g),y+=g.length);}catch(g){u.onExportError?.(g instanceof Error?g:new Error(String(g)),l.slice(p));}},addEntry(g,b){return h(g,b)},createPlugin(){return {name:"audit-trail",onFactSet:(g,b,R)=>{h("fact.set",{key:g,value:b,prev:R}).catch(console.error);},onFactsBatch:g=>{h("fact.batch",{changes:g.map(b=>({key:b.key,value:b.value,prev:b.prev}))}).catch(console.error);},onRequirementCreated:g=>{h("requirement.created",{id:g.id,type:g.requirement.type,payload:g.requirement}).catch(console.error);},onRequirementMet:(g,b)=>{h("requirement.met",{id:g.id,type:g.requirement.type,byResolver:b}).catch(console.error);},onResolverStart:(g,b)=>{h("resolver.start",{resolver:g,requirementId:b.id,requirementType:b.requirement.type}).catch(console.error);},onResolverComplete:(g,b,R)=>{h("resolver.complete",{resolver:g,requirementId:b.id,requirementType:b.requirement.type,duration:R}).catch(console.error);},onResolverError:(g,b,R)=>{h("resolver.error",{resolver:g,requirementId:b.id,requirementType:b.requirement.type,error:R instanceof Error?R.message:String(R)}).catch(console.error);},onError:g=>{h("error.occurred",{source:g.source,sourceId:g.sourceId,message:g.message,context:g.context}).catch(console.error);},onErrorRecovery:(g,b)=>{h("error.recovery",{source:g.source,message:g.message,strategy:b}).catch(console.error);}}}}}function rr(t){return {onAgentStart:(e,r)=>{t.addEntry("agent.run.start",{agentName:e,input:r});},onAgentComplete:(e,r,s,n)=>{t.addEntry("agent.run.complete",{agentName:e,output:r,tokens:s,cost:n});},onAgentError:(e,r)=>{t.addEntry("agent.run.error",{agentName:e,error:r.message,stack:r.stack});},onToolStart:(e,r,s)=>{t.addEntry("tool.call.start",{toolName:e,toolCallId:r,args:s});},onToolComplete:(e,r,s)=>{t.addEntry("tool.call.complete",{toolName:e,toolCallId:r,result:s});},onToolError:(e,r,s)=>{t.addEntry("tool.call.error",{toolName:e,toolCallId:r,error:s.message});},onApprovalRequested:(e,r,s)=>{t.addEntry("approval.requested",{toolName:e,toolCallId:r,args:s});},onApprovalGranted:(e,r)=>{t.addEntry("approval.granted",{toolName:e,toolCallId:r});},onApprovalDenied:(e,r,s)=>{t.addEntry("approval.denied",{toolName:e,toolCallId:r,reason:s});}}}var Q=[{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"}],me=[...Q,{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"}],Ne=1e5;function fe(t,e=Q){if(t.length>Ne)throw new Error(`[Directive] Input exceeds maximum length of ${Ne} characters for injection detection. Truncate input or process in chunks.`);let r=[];for(let{pattern:a,name:c,severity:i,category:u}of e){let p=new RegExp(a.source,a.flags).exec(t);p&&r.push({name:c,category:u,severity:i,match:p[0],position:p.index});}let s={low:10,medium:25,high:50,critical:100},n=r.reduce((a,c)=>a+s[c.severity],0),o=Math.min(100,n);return {detected:r.length>0,patterns:r,riskScore:o}}function $e(t,e=Q){let r=t.replace(/\u200b|\u200c|\u200d|\u2060|\ufeff/g,""),s=e.map(u=>`(${u.pattern.source})`);if(s.length===0)return r;let n=e.some(u=>u.pattern.flags.includes("g")),o=e.some(u=>u.pattern.flags.includes("i")),a=e.some(u=>u.pattern.flags.includes("m")),c=`${n?"g":""}${o?"i":""}${a?"m":""}`,i=new RegExp(s.join("|"),c||"gi");return r=r.replace(i,"[REDACTED]"),r}function _e(t={}){let{additionalPatterns:e=[],replacePatterns:r,strictMode:s=false,blockThreshold:n=50,sanitize:o=false,onBlocked:a,ignoreCategories:c=[]}=t,i;if(r?i=r:i=s?[...me]:[...Q],i=[...i,...e],c.length>0){let u=new Set(c);i=i.filter(l=>!u.has(l.category));}return u=>{let l=fe(u.input,i);if(l.detected&&l.riskScore>=n){if(a?.(u.input,l),o)return {passed:true,transformed:$e(u.input,i)};let p=l.patterns.sort((d,y)=>{let f={critical:0,high:1,medium:2,low:3};return f[d.severity]-f[y.severity]}).slice(0,3).map(d=>d.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${l.riskScore}%, patterns: ${p})`}}return {passed:true}}}function sr(t,e){return `[UNTRUSTED_CONTENT source="${e}"]
|
|
24
|
+
`}function W(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Gn(t={}){let{maxHistory:e=1e3,defaultTtlMs:r=36e5,maxPendingPerAgent:s=100,persistence:n,onDelivery:o,onDeliveryError:a}=t,c=new Map,i=[],u=new Map,l=new Map;function p(m,S){if(S.types&&!S.types.includes(m.type)||S.from&&!(Array.isArray(S.from)?S.from:[S.from]).includes(m.from))return false;if(S.topics){let h=m.topic;if(h&&!S.topics.includes(h))return false}return !(S.priority&&m.priority&&!S.priority.includes(m.priority)||S.custom&&!S.custom(m))}function d(m){return m.ttlMs?Date.now()-m.timestamp>m.ttlMs:false}function y(m){return m.to==="*"?Array.from(c.keys()):Array.isArray(m.to)?m.to:[m.to]}async function f(m){if(d(m))return;let S=y(m),h=[],g=[];for(let b of S){let R=c.get(b)??[];if(R.length===0){let A=l.get(b)??[];for(A.push(m);A.length>s;)A.shift();l.set(b,A);continue}for(let A of R)(!A.filter||p(m,A.filter))&&g.push(Promise.resolve(A.handler(m)).then(()=>{h.push(b);},x=>{a?.(m,x instanceof Error?x:new Error(String(x)));}));}g.length>0&&await Promise.allSettled(g),h.length>0&&o?.(m,h),n&&await n.save(m);}return {publish(m){let S={...m,id:W(),timestamp:Date.now(),priority:m.priority??"normal",ttlMs:m.ttlMs??r};for(i.push(S),u.set(S.id,S);i.length>e;){let h=i.shift();h&&u.delete(h.id);}return f(S).catch(h=>{let g=h instanceof Error?h:new Error(String(h));a?a(S,g):console.error("[Directive MessageBus] Delivery error:",g);}),S.id},subscribe(m,S,h){let g=W(),b={id:g,agentId:m,handler:S,filter:h,unsubscribe:()=>{let x=c.get(m)??[],k=x.findIndex(O=>O.id===g);k>=0&&x.splice(k,1);}},R=c.get(m)??[];R.push(b),c.set(m,R);let A=l.get(m)??[];l.delete(m);for(let x of A)if(!h||p(x,h)){let k=S(x);k instanceof Promise&&k.catch(O=>{let v=O instanceof Error?O:new Error(String(O));a?a(x,v):console.error("[Directive MessageBus] Pending delivery error:",v);});}return b},getHistory(m,S=100){let h=i.filter(g=>!d(g));return m&&(h=h.filter(g=>p(g,m))),h.slice(-S)},getMessage(m){let S=u.get(m);if(!(S&&d(S)))return S},getPending(m){return (l.get(m)??[]).filter(h=>!d(h))},clear(){i.length=0,u.clear(),l.clear();},destroy(){i.length=0,u.clear(),l.clear(),c.clear();}}}function Bn(t){let{bus:e,agents:r={},defaultTimeout:s=3e4,onAgentOnline:n,onAgentOffline:o}=t,a=new Map,c=new Map;for(let[u,l]of Object.entries(r))a.set(u,{...l,id:u,status:"offline",lastSeen:Date.now()});function i(u){if(u.type!=="RESPONSE"&&u.type!=="DELEGATION_RESULT")return;let l=u.correlationId??u.replyTo;if(!l)return;let p=c.get(l);p&&(clearTimeout(p.timer),c.delete(l),p.resolve(u));}return {register(u,l){let p=!a.has(u)||a.get(u)?.status==="offline";a.set(u,{...l,id:u,status:"online",lastSeen:Date.now()}),p&&n?.(u);},unregister(u){let l=a.get(u);l&&(l.status="offline",o?.(u));},getAgent(u){return a.get(u)},getAgents(){return Array.from(a.values())},findByCapability(u){return Array.from(a.values()).filter(l=>l.capabilities.includes(u)&&l.status==="online")},send(u,l,p){let d=a.get(u);return d&&(d.lastSeen=Date.now(),d.status="online"),e.publish({...p,from:u,to:l,type:p.type??"CUSTOM"})},async request(u,l,p,d,y=s){return new Promise((f,m)=>{let S=W(),h=e.subscribe(u,b=>{(b.correlationId===S||b.replyTo===S)&&(h.unsubscribe(),i(b));},{types:["RESPONSE"]}),g=setTimeout(()=>{h.unsubscribe(),c.delete(S),m(new Error(`[Directive Communication] Request timeout after ${y}ms`));},y);c.set(S,{resolve:f,reject:m,timer:g}),e.publish({type:"REQUEST",from:u,to:l,action:p,payload:d,timeout:y,correlationId:S});})},async delegate(u,l,p,d){return new Promise((y,f)=>{let m=W(),S=e.subscribe(u,g=>{(g.correlationId===m||g.replyTo===m)&&(S.unsubscribe(),i(g));},{types:["DELEGATION_RESULT"]}),h=setTimeout(()=>{S.unsubscribe(),c.delete(m),f(new Error(`[Directive Communication] Delegation timeout after ${s}ms`));},s);c.set(m,{resolve:y,reject:f,timer:h}),e.publish({type:"DELEGATION",from:u,to:l,task:p,context:d,correlationId:m});})},async query(u,l,p,d){return new Promise((y,f)=>{let m=W(),S=e.subscribe(u,g=>{(g.correlationId===m||g.replyTo===m)&&(S.unsubscribe(),i(g));},{types:["RESPONSE"]}),h=setTimeout(()=>{S.unsubscribe(),c.delete(m),f(new Error(`[Directive Communication] Query timeout after ${s}ms`));},s);c.set(m,{resolve:y,reject:f,timer:h}),e.publish({type:"QUERY",from:u,to:l,question:p,context:d,correlationId:m});})},broadcast(u,l){return e.publish({...l,from:u,to:"*",type:l.type??"INFORM"})},listen(u,l,p){let d=a.get(u);return d&&(d.status="online",d.lastSeen=Date.now(),n?.(u)),e.subscribe(u,l,p)},getBus(){return e},destroy(){for(let[,u]of c)clearTimeout(u.timer);c.clear(),a.clear();}}}function Fn(t,e){let r=new Map,s=t.listen(e,async n=>{if(n.type==="REQUEST"){let o=n,a=r.get(o.action),c;if(a)try{let i=await a(o.payload);c={type:"RESPONSE",success:i.success,result:i.result,error:i.error};}catch(i){c={type:"RESPONSE",success:false,error:i instanceof Error?i.message:String(i)};}else c={type:"RESPONSE",success:false,error:`Unknown action: ${o.action}`};t.send(e,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["REQUEST"]});return {onRequest(n,o){r.set(n,o);},offRequest(n){r.delete(n);},destroy(){s.unsubscribe(),r.clear();}}}function Ln(t,e){let r=null,s=t.listen(e,async n=>{if(n.type==="DELEGATION"&&r){let o=n,a=Date.now(),c;try{let i=await r(o.task,o.context);c={type:"DELEGATION_RESULT",success:i.success,result:i.result,error:i.error,metrics:i.metrics??{durationMs:Date.now()-a}};}catch(i){c={type:"DELEGATION_RESULT",success:false,error:i instanceof Error?i.message:String(i),metrics:{durationMs:Date.now()-a}};}t.send(e,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["DELEGATION"]});return {onDelegation(n){r=n;},offDelegation(){r=null;},destroy(){s.unsubscribe(),r=null;}}}function Un(t,e){let r=new Map,s=t.listen(e,n=>{if(n.type==="UPDATE"){let o=n,a=r.get(o.topic)??[];for(let c of a)c(o.content);}},{types:["UPDATE"]});return {subscribe(n,o){let a=new Map;for(let c of n){let i=r.get(c)??[],u=l=>o(c,l);a.set(c,u),i.push(u),r.set(c,i);}return t.broadcast(e,{type:"SUBSCRIBE",topics:n}),()=>{for(let[c,i]of a){let u=r.get(c);if(u){let l=u.indexOf(i);l>=0&&u.splice(l,1),u.length===0&&r.delete(c);}}a.clear(),t.broadcast(e,{type:"UNSUBSCRIBE",topics:n});}},publish(n,o){t.broadcast(e,{type:"UPDATE",topic:n,content:o});},destroy(){s.unsubscribe(),r.clear();}}}var zn=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:t=>{let e=t.replace(/[-\s]/g,"");return !(e.startsWith("000")||e.startsWith("666")||e.startsWith("9")||e.slice(3,5)==="00"||e.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:t=>{let e=t.replace(/[-\s]/g,"");if(e.length<13||e.length>19)return false;let r=0,s=false;for(let n=e.length-1;n>=0;n--){let o=e[n];if(!o)continue;let a=Number.parseInt(o,10);s&&(a*=2,a>9&&(a-=9)),r+=a,s=!s;}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:t=>{let e=t.replace(/\D/g,"");return e.length>=10&&e.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:t=>{let r=t.split(".").map(o=>Number.parseInt(o,10));if(r.some(o=>Number.isNaN(o)||o<0||o>255))return false;let[s,n]=r;return !(s===10||s===172&&n>=16&&n<=31||s===192&&n===168||s===127||s===169&&n===254||t==="0.0.0.0"||t==="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 Hn(t){let e=[],r="street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|way|boulevard|blvd|circle|cir|place|pl",s=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"),n;for(;(n=s.exec(t))!==null;)e.push({type:"address",value:n[0],position:{start:n.index,end:n.index+n[0].length},confidence:.7});return e}var xe=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function qn(t){let e=[],r=xe.join("|"),s=new RegExp(`\\b(${r})[.,:]?\\s+([A-Z][a-z]{1,20}(?:\\s[A-Z][a-z]{1,20}){0,2})\\b`,"gi"),n;for(;(n=s.exec(t))!==null;){let o=n[2],a=n[1];o&&(o.split(/\s+/).length>=2||a&&xe.some(c=>a.toLowerCase().includes(c)))&&e.push({type:"name",value:o,position:{start:n.index,end:n.index+n[0].length},confidence:.6,context:n[0]});}return e}var Te=1e5;function Vn(t,e){let r=[],s=new RegExp(t.pattern.source,t.pattern.flags),n=t.valueGroup??1,o;for(;(o=s.exec(e))!==null;){let a=o[n]??o[0],c=o.index,i=o.index+o[0].length,u=e.slice(Math.max(0,c-20),i+20);t.validate&&!t.validate(a,u)||r.push({type:t.type,value:a,position:{start:c,end:i},confidence:t.confidence,context:u});}return r}var ne={name:"regex",async detect(t,e){if(t.length>Te)throw new Error(`[Directive] Input exceeds maximum length of ${Te} characters for PII detection. Truncate input or process in chunks.`);let r=[],s=new Set(e);for(let n of zn)s.has(n.type)&&r.push(...Vn(n,t));return s.has("address")&&r.push(...Hn(t)),s.has("name")&&r.push(...qn(t)),r}},Jn=new Set(["ssn","credit_card","date_of_birth","medical_id","national_id","passport","driver_license","bank_account"]);function Kn(t,e){let{start:r,end:s}=t.position;return Number.isInteger(r)&&Number.isInteger(s)&&r>=0&&r<s&&s<=e}function Wn(t,e){switch(e){case "placeholder":return "[REDACTED]";case "typed":return Jn.has(t.type)?"[REDACTED]":`[${t.type.toUpperCase()}]`;case "masked":{if(t.type!=="credit_card")return "****";let r=t.value.replace(/\D/g,"");return `****${r.length>4?r.slice(-4):""}`}case "hashed":return `[HASH:${Qn(t.value)}]`}}function Q(t,e,r="typed"){let n=[...e.filter(i=>Kn(i,t.length))].sort((i,u)=>{if(u.confidence!==i.confidence)return u.confidence-i.confidence;let l=i.position.end-i.position.start,p=u.position.end-u.position.start;return p!==l?p-l:i.position.start-u.position.start}),o=[];for(let i of n)o.some(l=>i.position.start<l.position.end&&l.position.start<i.position.end)||o.push(i);let a=o.sort((i,u)=>u.position.start-i.position.start),c=t;for(let i of a){let u=Wn(i,r);c=c.slice(0,i.position.start)+u+c.slice(i.position.end);}return c}function Qn(t){let s=2166136261;for(let n=0;n<t.length;n++)s^=t.charCodeAt(n),s=Math.imul(s,16777619);return (s>>>0).toString(16).padStart(8,"0")}var Pe=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function ke(t={}){let{types:e=Pe,detector:r="regex",redact:s=false,redactionStyle:n="typed",minConfidence:o=.7,onDetected:a,allowlist:c=[],minItemsToBlock:i=1,detectorTimeout:u=5e3}=t,l=r==="regex"?ne:r,p=new Set(c.map(y=>y.toLowerCase().trim()));async function d(y,f){if(l===ne)return l.detect(y,f);let m,S=l.detect(y,f),h=new Promise((g,b)=>{m=setTimeout(()=>b(new Error(`[Directive] PII detector '${l.name}' timed out after ${u}ms`)),u);});S.catch(()=>{}),h.catch(()=>{});try{return await Promise.race([S,h])}finally{clearTimeout(m);}}return async y=>{let m=(await d(y.input,e)).filter(S=>!(S.confidence<o||p.has(S.value.toLowerCase().trim())));if(m.length>0&&a?.(m),m.length>=i){if(s)return {passed:true,transformed:Q(y.input,m,n)};let S={};for(let g of m)S[g.type]=(S[g.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(S).map(([g,b])=>`${g}: ${b}`).join(", ")})`}}return {passed:true}}}function Xn(t={}){let e=ke(t);return async(r,s)=>{let n=typeof r.output=="string"?r.output:JSON.stringify(r.output);return e({input:n,agentName:r.agentName},s)}}async function re(t,e={}){let{types:r=Pe,detector:s="regex",minConfidence:n=.7,timeout:o=5e3}=e,a=s==="regex"?ne:s,c;if(a===ne)c=await a.detect(t,r);else {let l,p=a.detect(t,r),d=new Promise((y,f)=>{l=setTimeout(()=>f(new Error(`[Directive] PII detector '${a.name}' timed out after ${o}ms`)),o);});p.catch(()=>{}),d.catch(()=>{});try{c=await Promise.race([p,d]);}finally{clearTimeout(l);}}let i=c.filter(l=>l.confidence>=n),u={};for(let l of i)u[l.type]=(u[l.type]||0)+1;return {detected:i.length>0,items:i,typeCounts:u}}async function Yn(t,e={}){let r=await re(t,e);return r.detected?{...r,redactedText:Q(t,r.items,e.style??"typed")}:{...r}}var Zn=1e4,er=10080*60*1e3,tr=6e4,Ie="0".repeat(64);function nr(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function rr(t){return new TextEncoder().encode(t)}function sr(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function De(t){let e=rr(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return sr(new Uint8Array(r))}function Oe(t){let{id:e,timestamp:r,eventType:s,previousHash:n,payload:o,actorId:a,sessionId:c}=t;return JSON.stringify({id:e,timestamp:r,eventType:s,previousHash:n,payload:o,actorId:a,sessionId:c})}function or(t){return JSON.parse(JSON.stringify(t))}async function ar(t,e){let r=or(t);async function s(n){if(typeof n=="string"){let o=await re(n,{types:e.types,minConfidence:e.minConfidence??.7});if(o.detected){let a=e.allowlist?o.items.filter(c=>!e.allowlist.includes(c.value.toLowerCase())):o.items;if(a.length>0)return Q(n,a,e.redactionStyle)}return n}if(Array.isArray(n))return Promise.all(n.map(s));if(n&&typeof n=="object"){let o={};for(let[a,c]of Object.entries(n))o[a]=await s(c);return o}return n}for(let[n,o]of Object.entries(r))r[n]=await s(o);return r}function ir(t={}){let{maxEntries:e=Zn,retentionMs:r=er,exportInterval:s=tr,exporter:n,piiMasking:o,signing:a,sessionId:c,actorId:i,events:u={}}=t,l=[],p=0,d=0,y=0,f=true,m;function S(){return l.length===0?Ie:l[l.length-1].hash}async function h(g,b,R){let A={id:nr(),timestamp:Date.now(),eventType:g,previousHash:S(),payload:b,actorId:i,sessionId:c};o?.enabled&&(A.maskedPayload=await ar(b,o));let x=Oe(A),k=await De(x),O={...A,hash:k};for(a&&(O.signature=await a.signFn(k)),l.push(O);l.length>e;)l.shift(),d++,p>0&&p--;return u.onEntryAdded?.(O),O}return n&&s>0&&(m=setInterval(async()=>{try{let g=l.slice(p);g.length>0&&(await n(g),y+=g.length,p=l.length);}catch(g){u.onExportError?.(g instanceof Error?g:new Error(String(g)),l.slice(p));}},s)),{getEntries(g){let b=[...l];if(g){if(g.eventTypes?.length){let R=new Set(g.eventTypes);b=b.filter(A=>R.has(A.eventType));}g.actorId&&(b=b.filter(R=>R.actorId===g.actorId)),g.sessionId&&(b=b.filter(R=>R.sessionId===g.sessionId)),g.since!==void 0&&(b=b.filter(R=>R.timestamp>=g.since)),g.until!==void 0&&(b=b.filter(R=>R.timestamp<=g.until)),g.offset!==void 0&&(b=b.slice(g.offset)),g.limit!==void 0&&(b=b.slice(0,g.limit));}return b},async verifyChain(){if(l.length===0)return {valid:true,entriesVerified:0,verifiedAt:Date.now()};l[0].previousHash;for(let b=0;b<l.length;b++){let R=l[b],A=Oe({id:R.id,timestamp:R.timestamp,eventType:R.eventType,previousHash:R.previousHash,payload:R.payload,actorId:R.actorId,sessionId:R.sessionId}),x=await De(A);if(R.hash!==x){f=false;let k={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:x,actualHash:R.hash},verifiedAt:Date.now()};return u.onChainBroken?.(k),k}if(b>0){let k=l[b-1];if(R.previousHash!==k.hash){f=false;let O={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:k.hash,actualHash:R.previousHash},verifiedAt:Date.now()};return u.onChainBroken?.(O),O}}if(a?.verifyFn&&R.signature&&!await a.verifyFn(R.hash,R.signature)){f=false;let O={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:"signature-invalid",actualHash:R.signature},verifiedAt:Date.now()};return u.onChainBroken?.(O),O}}return f=true,{valid:true,entriesVerified:l.length,verifiedAt:Date.now()}},async export(g){let b=[...l];return g!==void 0&&(b=b.filter(R=>R.timestamp>=g)),n&&b.length>0&&(await n(b),y+=b.length),b},prune(){let g=Date.now()-r,b=l.length;for(;l.length>0&&l[0].timestamp<g;)l.shift(),p>0&&p--;let R=b-l.length;return d+=R,R},getStats(){let g={};for(let b of l)g[b.eventType]=(g[b.eventType]??0)+1;return {totalEntries:l.length,byEventType:g,oldestEntry:l[0]?.timestamp,newestEntry:l[l.length-1]?.timestamp,entriesPruned:d,entriesExported:y,chainIntegrity:f}},async destroy(){if(m&&(clearInterval(m),m=void 0),n)try{let g=l.slice(p);g.length>0&&(await n(g),y+=g.length);}catch(g){u.onExportError?.(g instanceof Error?g:new Error(String(g)),l.slice(p));}},addEntry(g,b){return h(g,b)},createPlugin(){return {name:"audit-trail",onFactSet:(g,b,R)=>{h("fact.set",{key:g,value:b,prev:R}).catch(console.error);},onFactsBatch:g=>{h("fact.batch",{changes:g.map(b=>({key:b.key,value:b.value,prev:b.prev}))}).catch(console.error);},onRequirementCreated:g=>{h("requirement.created",{id:g.id,type:g.requirement.type,payload:g.requirement}).catch(console.error);},onRequirementMet:(g,b)=>{h("requirement.met",{id:g.id,type:g.requirement.type,byResolver:b}).catch(console.error);},onResolverStart:(g,b)=>{h("resolver.start",{resolver:g,requirementId:b.id,requirementType:b.requirement.type}).catch(console.error);},onResolverComplete:(g,b,R)=>{h("resolver.complete",{resolver:g,requirementId:b.id,requirementType:b.requirement.type,duration:R}).catch(console.error);},onResolverError:(g,b,R)=>{h("resolver.error",{resolver:g,requirementId:b.id,requirementType:b.requirement.type,error:R instanceof Error?R.message:String(R)}).catch(console.error);},onError:g=>{h("error.occurred",{source:g.source,sourceId:g.sourceId,message:g.message,context:g.context}).catch(console.error);},onErrorRecovery:(g,b)=>{h("error.recovery",{source:g.source,message:g.message,strategy:b}).catch(console.error);}}}}}function cr(t){return {onAgentStart:(e,r)=>{t.addEntry("agent.run.start",{agentName:e,input:r});},onAgentComplete:(e,r,s,n)=>{t.addEntry("agent.run.complete",{agentName:e,output:r,tokens:s,cost:n});},onAgentError:(e,r)=>{t.addEntry("agent.run.error",{agentName:e,error:r.message,stack:r.stack});},onToolStart:(e,r,s)=>{t.addEntry("tool.call.start",{toolName:e,toolCallId:r,args:s});},onToolComplete:(e,r,s)=>{t.addEntry("tool.call.complete",{toolName:e,toolCallId:r,result:s});},onToolError:(e,r,s)=>{t.addEntry("tool.call.error",{toolName:e,toolCallId:r,error:s.message});},onApprovalRequested:(e,r,s)=>{t.addEntry("approval.requested",{toolName:e,toolCallId:r,args:s});},onApprovalGranted:(e,r)=>{t.addEntry("approval.granted",{toolName:e,toolCallId:r});},onApprovalDenied:(e,r,s)=>{t.addEntry("approval.denied",{toolName:e,toolCallId:r,reason:s});}}}var X=[{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"}],me=[...X,{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"}],Ne=1e5;function fe(t,e=X){if(t.length>Ne)throw new Error(`[Directive] Input exceeds maximum length of ${Ne} characters for injection detection. Truncate input or process in chunks.`);let r=[];for(let{pattern:a,name:c,severity:i,category:u}of e){let p=new RegExp(a.source,a.flags).exec(t);p&&r.push({name:c,category:u,severity:i,match:p[0],position:p.index});}let s={low:10,medium:25,high:50,critical:100},n=r.reduce((a,c)=>a+s[c.severity],0),o=Math.min(100,n);return {detected:r.length>0,patterns:r,riskScore:o}}function $e(t,e=X){let r=t.replace(/\u200b|\u200c|\u200d|\u2060|\ufeff/g,""),s=e.map(u=>`(${u.pattern.source})`);if(s.length===0)return r;let n=e.some(u=>u.pattern.flags.includes("g")),o=e.some(u=>u.pattern.flags.includes("i")),a=e.some(u=>u.pattern.flags.includes("m")),c=`${n?"g":""}${o?"i":""}${a?"m":""}`,i=new RegExp(s.join("|"),c||"gi");return r=r.replace(i,"[REDACTED]"),r}function _e(t={}){let{additionalPatterns:e=[],replacePatterns:r,strictMode:s=false,blockThreshold:n=50,sanitize:o=false,onBlocked:a,ignoreCategories:c=[]}=t,i;if(r?i=r:i=s?[...me]:[...X],i=[...i,...e],c.length>0){let u=new Set(c);i=i.filter(l=>!u.has(l.category));}return u=>{let l=fe(u.input,i);if(l.detected&&l.riskScore>=n){if(a?.(u.input,l),o)return {passed:true,transformed:$e(u.input,i)};let p=l.patterns.sort((d,y)=>{let f={critical:0,high:1,medium:2,low:3};return f[d.severity]-f[y.severity]}).slice(0,3).map(d=>d.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${l.riskScore}%, patterns: ${p})`}}return {passed:true}}}function ur(t,e){return `[UNTRUSTED_CONTENT source="${e}"]
|
|
25
25
|
${t}
|
|
26
|
-
[/UNTRUSTED_CONTENT]`}function
|
|
26
|
+
[/UNTRUSTED_CONTENT]`}function lr(t){let{baseGuardrail:e=_e({strictMode:true,blockThreshold:25}),additionalPatterns:r=[]}=t,s=/\[UNTRUSTED_CONTENT source="([^"]+)"\]([\s\S]*?)\[\/UNTRUSTED_CONTENT\]/g;return async(n,o)=>{let a=await e(n,o);if(!a.passed)return a;let c=n.input.matchAll(s);for(let i of c){let[,u,l]=i;if(!l)continue;let p=fe(l,[...me,...r]);if(p.detected&&p.riskScore>=25)return {passed:false,reason:`Untrusted content from "${u}" contains potential injection (risk: ${p.riskScore}%)`}}return {passed:true}}}function dr(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function pr(t){return new TextEncoder().encode(t)}function gr(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function je(t){let e=pr(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return gr(new Uint8Array(r))}function mr(t){if(t.length===0)return "";let e=new Set;for(let n of t)for(let o of Object.keys(n))e.add(o);let r=Array.from(e),s=[r.join(",")];for(let n of t){let o=r.map(a=>{let c=n[a];if(c==null)return "";if(typeof c=="object")return JSON.stringify(c).replace(/"/g,'""');let i=String(c);return i.includes(",")||i.includes(`
|
|
27
27
|
`)||i.includes('"')?`"${i.replace(/"/g,'""')}"`:i});s.push(o.join(","));}return s.join(`
|
|
28
|
-
`)}function lr(){let t=new Map,e=new Map,r=new Map;return {async getSubjectData(s,n){let o=[];for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);i&&i.length>0&&o.push({category:a,records:[...i]});}return o},async deleteSubjectData(s,n){let o=0;for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);i&&(o+=i.length,c.delete(s));}return o},async anonymizeSubjectData(s,n){let o=0;for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);if(i)for(let u of i)u.data={...u.data,_anonymized:true,_anonymizedAt:Date.now()},o++;}return o},async getExpiredData(s,n){let o=[],a=t.get(s);if(a)for(let c of a.values())for(let i of c)i.createdAt<n&&o.push({id:i.id,createdAt:i.createdAt});return o},async deleteByIds(s){let n=new Set(s),o=0;for(let a of t.values())for(let[c,i]of a){let u=i.filter(l=>!n.has(l.id));u.length!==i.length&&(o+=i.length-u.length,u.length===0?a.delete(c):a.set(c,u));}return o},async storeConsent(s){e.set(`${s.subjectId}:${s.purpose}`,s);},async getConsent(s,n){return e.get(`${s}:${n}`)??null},async getConsentsBySubject(s){let n=[];for(let[o,a]of e)o.startsWith(`${s}:`)&&n.push(a);return n},async getConsentsByPurpose(s){let n=[];for(let[o,a]of e)o.endsWith(`:${s}`)&&n.push(a);return n},async storeDeletionCertificate(s){r.set(s.subjectId,s);}}}function dr(t){let{storage:e,retention:r,exportExpirationMs:s=864e5,events:n={}}=t,o={async grant(a,c,i={}){let u={subjectId:a,purpose:c,granted:true,grantedAt:Date.now(),expiresAt:i.expiresAt,source:i.source,version:i.version};return await e.storeConsent(u),n.onConsentChange?.(u),u},async revoke(a,c){let i=await e.getConsent(a,c);if(!i)return null;let u={...i,granted:false,revokedAt:Date.now()};return await e.storeConsent(u),n.onConsentChange?.(u),u},async check(a,c){let i=await e.getConsent(a,c);return !(!i||!i.granted||i.expiresAt&&i.expiresAt<Date.now())},async getForSubject(a){return e.getConsentsBySubject(a)},async getForPurpose(a){return e.getConsentsByPurpose(a)}};return {async exportData(a){try{let c=await e.getSubjectData(a.subjectId,a.categories),i=[],u=[];for(let{category:y,records:f}of c){u.push(y);for(let m of f)i.push({category:y,...m});}if(a.includeAudit&&e.getAuditEntries){let y=await e.getAuditEntries(a.subjectId);u.push("audit");for(let f of y)i.push({category:"audit",id:f.id,data:f.payload,createdAt:f.timestamp});}let l;a.format==="csv"?l=ur(i.map(y=>({category:y.category,id:y.id,createdAt:new Date(y.createdAt).toISOString(),...y.data}))):l=JSON.stringify({subjectId:a.subjectId,exportedAt:new Date().toISOString(),recordCount:i.length,categories:u,records:i},null,2);let p=await je(l),d={success:!0,subjectId:a.subjectId,format:a.format,data:l,categories:u,recordCount:i.length,checksum:p,exportedAt:Date.now(),expiresAt:Date.now()+s};return n.onExport?.(d),d}catch(c){return {success:false,subjectId:a.subjectId,format:a.format,data:"",categories:[],recordCount:0,checksum:"",exportedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},async deleteData(a){try{let c=0,i=[];a.anonymize?c=await e.anonymizeSubjectData(a.subjectId,a.categories):c=await e.deleteSubjectData(a.subjectId,a.categories),a.categories?i.push(...a.categories):a.scope==="all"&&i.push("all");let u=JSON.stringify({subjectId:a.subjectId,type:a.anonymize?"anonymization":"hard",scope:a.scope,categories:i,recordCount:c,deletedAt:Date.now(),reason:a.reason}),l={id:ar(),subjectId:a.subjectId,type:a.anonymize?"anonymization":"hard",scope:a.scope,categories:i,recordCount:c,deletedAt:Date.now(),reason:a.reason,hash:await je(u)};await e.storeDeletionCertificate(l);let p={success:!0,subjectId:a.subjectId,scope:a.scope,anonymized:a.anonymize??!1,recordsAffected:c,categoriesAffected:i,certificate:l,deletedAt:Date.now()};return n.onDelete?.(p),p}catch(c){return {success:false,subjectId:a.subjectId,scope:a.scope,anonymized:a.anonymize??false,recordsAffected:0,categoriesAffected:[],certificate:{id:"error",subjectId:a.subjectId,type:"hard",scope:a.scope,categories:[],recordCount:0,deletedAt:Date.now(),hash:""},deletedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},consent:o,async enforceRetention(){if(!r)return 0;let a=0,c=Date.now(),i=new Set;if(r.categoryRetention)for(let u of Object.keys(r.categoryRetention))i.add(u);i.add("default");for(let u of i){let l=r.categoryRetention?.[u]??r.defaultRetentionMs,p=c-l,d=await e.getExpiredData(u,p);if(d.length>0){await r.onBeforeDelete?.({category:u,count:d.length});let y=await e.deleteByIds(d.map(f=>f.id));a+=y,r.onAfterDelete?.({category:u,count:y}),n.onRetentionEnforced?.(u,y);}}return a},createConsentGuardrail(a){return async c=>{let u=c.input.match(/user[_-]?id[:\s]*([a-zA-Z0-9-]+)/i)?.[1];return u?await o.check(u,a)?{passed:true}:{passed:false,reason:`No consent for '${a}' from subject ${u}`}:{passed:true}}},async getDeletionCertificate(a){return null}}}function V(t,e){if(t.length!==e.length)throw new Error(`Vector dimensions must match: ${t.length} vs ${e.length}`);let r=0,s=0,n=0;for(let o=0;o<t.length;o++){let a=t[o],c=e[o];r+=a*c,s+=a*a,n+=c*c;}return s=Math.sqrt(s),n=Math.sqrt(n),s===0||n===0?0:r/(s*n)}function pr(t,e,r,s){let n=null;for(let o of e){if(s&&o.agentName&&o.agentName!==s)continue;let a=V(t,o.queryEmbedding);a>=r&&(!n||a>n.similarity)&&(n={entry:o,similarity:a});}return n}function Ge(){let t=new Map;function e(r){let s=t.get(r);return s||(s=new Map,t.set(r,s)),s}return {async getEntries(r){return Array.from(e(r).values())},async addEntry(r,s){e(r).set(s.id,s);},async updateEntry(r,s,n){let o=e(r),a=o.get(s);a&&o.set(s,{...a,...n});},async removeEntry(r,s){e(r).delete(s);},async clear(r){t.delete(r);}}}function gr(t){let{embedder:e,similarityThreshold:r=.9,maxCacheSize:s=1e3,ttlMs:n=36e5,namespace:o="default",storage:a=Ge(),onHit:c,onMiss:i,onError:u,perAgent:l=false}=t,p={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},d=0;function y(m){if(p.totalEntries=m.length,p.hitRate=p.totalHits+p.totalMisses>0?p.totalHits/(p.totalHits+p.totalMisses):0,p.avgSimilarityOnHit=p.totalHits>0?d/p.totalHits:0,m.length>0){let E=m.map(h=>h.createdAt);p.oldestEntry=Math.min(...E),p.newestEntry=Math.max(...E);}else p.oldestEntry=null,p.newestEntry=null;}async function f(){let m=await a.getEntries(o),E=Date.now();for(let g of m)E-g.createdAt>n&&await a.removeEntry(o,g.id);let h=await a.getEntries(o);if(h.length>s){let b=h.sort((R,A)=>R.accessedAt-A.accessedAt).slice(0,h.length-s);for(let R of b)await a.removeEntry(o,R.id);}}return {async lookup(m,E){let h=Date.now();try{let g=await e(m),b=await a.getEntries(o),R=pr(g,b,r,l?E:void 0);return R?(await a.updateEntry(o,R.entry.id,{accessedAt:Date.now(),accessCount:R.entry.accessCount+1}),p.totalHits++,d+=R.similarity,y(b),c?.(R.entry,R.similarity),{hit:!0,entry:R.entry,similarity:R.similarity,latencyMs:Date.now()-h}):(p.totalMisses++,y(b),i?.(m),{hit:!1,latencyMs:Date.now()-h})}catch(g){return p.totalMisses++,u?.(g instanceof Error?g:new Error(String(g))),{hit:false,latencyMs:Date.now()-h}}},async store(m,E,h,g={}){let b=await e(m),R={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:m,queryEmbedding:b,response:E,metadata:g,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:l?h:void 0};await a.addEntry(o,R),await f();let A=await a.getEntries(o);y(A);},async invalidate(m){let E=await a.getEntries(o),h=0;for(let b of E)m(b)&&(await a.removeEntry(o,b.id),h++);let g=await a.getEntries(o);return y(g),h},async clear(){await a.clear(o),p={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},d=0;},getStats(){return {...p}},async export(){return a.getEntries(o)},async import(m){for(let h of m)await a.addEntry(o,h);await f();let E=await a.getEntries(o);y(E);}}}function mr(t){let{cache:e}=t;return async r=>{let s=await e.lookup(r.input,r.agentName);return s.hit&&s.entry?{passed:false,cacheHit:true,reason:`Cache hit (similarity: ${(s.similarity*100).toFixed(1)}%)`,cachedResponse:s.entry.response,similarity:s.similarity}:{passed:true,cacheHit:false}}}function fr(t=128){return async e=>{let r=new Array(t).fill(0);for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r[n%t]+=o/256;}let s=Math.sqrt(r.reduce((n,o)=>n+o*o,0));if(s>0)for(let n=0;n<t;n++)r[n]/=s;return r}}function yr(t){let{batchSize:e=20,embedBatch:r,maxWaitMs:s=50}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${e}`);let n=[],o=null,a=false;async function c(){if(n.length===0)return;let i=n;n=[],o&&(clearTimeout(o),o=null);try{let u=i.map(p=>p.text),l=await r(u);if(l.length!==i.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${l.length} embeddings for ${i.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let p=0;p<i.length;p++)i[p].resolve(l[p]);}catch(u){let l=u instanceof Error?u:new Error(String(u));for(let p of i)p.reject(l);}}return {async embed(i){if(a)throw new Error("BatchedEmbedder has been destroyed");return new Promise((u,l)=>{n.push({text:i,resolve:u,reject:l}),n.length>=e?c():o||(o=setTimeout(c,s));})},async flush(){await c();},destroy(){a=true,o&&(clearTimeout(o),o=null);let i=n;n=[];let u=new Error("BatchedEmbedder destroyed");for(let l of i)l.reject(u);}}}function hr(){let t=new Map,e=null;function r(s){if(e===null)e=s.length;else if(s.length!==e)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${e}, got ${s.length}`)}return {add(s,n){r(n),t.set(s,n);},remove(s){t.delete(s);},search(s,n,o=0){if(e!==null&&s.length!==e)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${e}, got ${s.length}`);let a=[];for(let[c,i]of t){let u=V(s,i);u>=o&&a.push({id:c,similarity:u});}return a.sort((c,i)=>i.similarity-c.similarity),a.slice(0,n)},rebuild(){},size(){return t.size},clear(){t.clear(),e=null;},needsRebuild(){return false}}}function Be(t,e){return 1-V(t,e)}function ye(t,e){if(t.length===0)return null;let r=Math.floor(e()*t.length),s=t[r],n=t.filter((l,p)=>p!==r);if(n.length===0)return {id:s.id,embedding:s.embedding,mu:0,left:null,right:null};let o=n.map(l=>({item:l,distance:Be(s.embedding,l.embedding)}));o.sort((l,p)=>l.distance-p.distance);let a=Math.floor(o.length/2),c=o[a].distance,i=o.slice(0,a).map(l=>l.item),u=o.slice(a).map(l=>l.item);return {id:s.id,embedding:s.embedding,mu:c,left:ye(i,e),right:ye(u,e)}}function X(t,e,r,s,n,o){if(!t)return;let a=Be(e,t.embedding),c=1-a;c>=s&&(n.push({id:t.id,similarity:c}),n.sort((i,u)=>u.similarity-i.similarity),n.length>r&&n.pop(),n.length===r&&(o.value=1-n[n.length-1].similarity)),a<t.mu?(X(t.left,e,r,s,n,o),a+o.value>=t.mu&&X(t.right,e,r,s,n,o)):(X(t.right,e,r,s,n,o),a-o.value<=t.mu&&X(t.left,e,r,s,n,o));}function vr(t={}){let{random:e=Math.random}=t,r=new Map,s=null,n=false,o=null;function a(c){if(o===null)o=c.length;else if(c.length!==o)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${o}, got ${c.length}`)}return {add(c,i){a(i),r.set(c,i),n=true;},remove(c){r.delete(c),n=true;},search(c,i,u=0){if(o!==null&&c.length!==o)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${o}, got ${c.length}`);if(n||!s){let d=[];for(let[y,f]of r){let m=V(c,f);m>=u&&d.push({id:y,similarity:m});}return d.sort((y,f)=>f.similarity-y.similarity),d.slice(0,i)}let l=[],p={value:Number.POSITIVE_INFINITY};return X(s,c,i,u,l,p),l},rebuild(){let c=Array.from(r.entries()).map(([i,u])=>({id:i,embedding:u}));s=ye(c,e),n=false;},size(){return r.size},clear(){r.clear(),s=null,n=false,o=null;},needsRebuild(){return n}}}function he(t={}){let{bufferSize:e=100}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive StreamChannel] bufferSize must be >= 1, got ${e}`);let r=[],s="open",n=null,o=null,a=null,c=false;function i(y){if(o){let f=o;o=null,f.resolve({value:y,done:false});}}function u(){if(o){let y=o;o=null,y.resolve({value:void 0,done:true});}}function l(y){if(o){let f=o;o=null,c=false,f.reject(y);}}function p(){if(a){let y=a;a=null,y();}}return {async send(y){if(s!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${s} channel${t.name?` "${t.name}"`:""}`);if(o){i(y);return}if(r.length>=e){if(await new Promise(f=>{a=f;}),s!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${s} channel${t.name?` "${t.name}"`:""}`);if(o){i(y);return}}r.push(y);},end(){s==="open"&&(s="closed",u());},error(y){s==="open"&&(s="error",n=y,l(y),p());},getState(){return s},bufferedCount(){return r.length},[Symbol.asyncIterator](){if(c)throw new Error("[Directive StreamChannel] Channel only supports a single consumer. Create a separate channel for each consumer.");return c=true,{next(){if(s==="error"&&n)return c=false,Promise.reject(n);if(r.length>0){let y=r.shift();return p(),Promise.resolve({value:y,done:false})}return s==="closed"?(c=false,Promise.resolve({value:void 0,done:true})):new Promise((y,f)=>{o={resolve:y,reject:f};})},return(){return s="closed",r.length=0,c=false,p(),Promise.resolve({value:void 0,done:true})}}}}}function br(t){let e=he(t),r=he(t);return {sideA:{send:s=>e.send(s),receive:r,close(){e.end(),r.end();}},sideB:{send:s=>r.send(s),receive:e,close(){e.end(),r.end();}}}}async function Sr(t,e,r){try{for await(let s of t){let n=await r(s);await e.send(n);}e.end();}catch(s){e.error(s instanceof Error?s:new Error(String(s)));}}function Er(...t){return {[Symbol.asyncIterator](){let r=[],s=0,n=null,o=null,a=false,c=false,i=[];function u(l){if(n){let p=n;return n=null,p(l),true}return false}for(let l of t){let p=l[Symbol.asyncIterator]();i.push(p),(async()=>{try{for(;!a;){let d=await p.next();if(d.done||a)break;u({value:d.value,done:!1})||(r.length<1e4?r.push(d.value):c||(c=!0,console.warn("[Directive mergeStreams] Buffer exceeded 10000 items. Values are being dropped. Ensure the consumer keeps up or use bounded StreamChannel sources.")));}}catch(d){a||(a=true,o=d instanceof Error?d:new Error(String(d)),u({value:void 0,done:true}));}s++,s>=t.length&&!a&&u({value:void 0,done:true});})();}return {next(){return o?Promise.reject(o):r.length>0?Promise.resolve({value:r.shift(),done:false}):s>=t.length?Promise.resolve({value:void 0,done:true}):new Promise(l=>{n=l;})},return(){a=true,r.length=0;for(let l of i)l.return?.({value:void 0,done:true});if(n){let l=n;n=null,l({value:void 0,done:true});}return Promise.resolve({value:void 0,done:true})}}}}}function Rr(t,e){let r=t.metadata.title??"",s=t.metadata.section??"",n=t.metadata.url??"";return `${r&&s&&n?`[${r} \u2014 ${s}](${n})`:r||t.id}
|
|
29
|
-
${t.content}`}function
|
|
28
|
+
`)}function fr(){let t=new Map,e=new Map,r=new Map;return {async getSubjectData(s,n){let o=[];for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);i&&i.length>0&&o.push({category:a,records:[...i]});}return o},async deleteSubjectData(s,n){let o=0;for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);i&&(o+=i.length,c.delete(s));}return o},async anonymizeSubjectData(s,n){let o=0;for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);if(i)for(let u of i)u.data={...u.data,_anonymized:true,_anonymizedAt:Date.now()},o++;}return o},async getExpiredData(s,n){let o=[],a=t.get(s);if(a)for(let c of a.values())for(let i of c)i.createdAt<n&&o.push({id:i.id,createdAt:i.createdAt});return o},async deleteByIds(s){let n=new Set(s),o=0;for(let a of t.values())for(let[c,i]of a){let u=i.filter(l=>!n.has(l.id));u.length!==i.length&&(o+=i.length-u.length,u.length===0?a.delete(c):a.set(c,u));}return o},async storeConsent(s){e.set(`${s.subjectId}:${s.purpose}`,s);},async getConsent(s,n){return e.get(`${s}:${n}`)??null},async getConsentsBySubject(s){let n=[];for(let[o,a]of e)o.startsWith(`${s}:`)&&n.push(a);return n},async getConsentsByPurpose(s){let n=[];for(let[o,a]of e)o.endsWith(`:${s}`)&&n.push(a);return n},async storeDeletionCertificate(s){r.set(s.subjectId,s);}}}function yr(t){let{storage:e,retention:r,exportExpirationMs:s=864e5,events:n={}}=t,o={async grant(a,c,i={}){let u={subjectId:a,purpose:c,granted:true,grantedAt:Date.now(),expiresAt:i.expiresAt,source:i.source,version:i.version};return await e.storeConsent(u),n.onConsentChange?.(u),u},async revoke(a,c){let i=await e.getConsent(a,c);if(!i)return null;let u={...i,granted:false,revokedAt:Date.now()};return await e.storeConsent(u),n.onConsentChange?.(u),u},async check(a,c){let i=await e.getConsent(a,c);return !(!i||!i.granted||i.expiresAt&&i.expiresAt<Date.now())},async getForSubject(a){return e.getConsentsBySubject(a)},async getForPurpose(a){return e.getConsentsByPurpose(a)}};return {async exportData(a){try{let c=await e.getSubjectData(a.subjectId,a.categories),i=[],u=[];for(let{category:y,records:f}of c){u.push(y);for(let m of f)i.push({category:y,...m});}if(a.includeAudit&&e.getAuditEntries){let y=await e.getAuditEntries(a.subjectId);u.push("audit");for(let f of y)i.push({category:"audit",id:f.id,data:f.payload,createdAt:f.timestamp});}let l;a.format==="csv"?l=mr(i.map(y=>({category:y.category,id:y.id,createdAt:new Date(y.createdAt).toISOString(),...y.data}))):l=JSON.stringify({subjectId:a.subjectId,exportedAt:new Date().toISOString(),recordCount:i.length,categories:u,records:i},null,2);let p=await je(l),d={success:!0,subjectId:a.subjectId,format:a.format,data:l,categories:u,recordCount:i.length,checksum:p,exportedAt:Date.now(),expiresAt:Date.now()+s};return n.onExport?.(d),d}catch(c){return {success:false,subjectId:a.subjectId,format:a.format,data:"",categories:[],recordCount:0,checksum:"",exportedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},async deleteData(a){try{let c=0,i=[];a.anonymize?c=await e.anonymizeSubjectData(a.subjectId,a.categories):c=await e.deleteSubjectData(a.subjectId,a.categories),a.categories?i.push(...a.categories):a.scope==="all"&&i.push("all");let u=JSON.stringify({subjectId:a.subjectId,type:a.anonymize?"anonymization":"hard",scope:a.scope,categories:i,recordCount:c,deletedAt:Date.now(),reason:a.reason}),l={id:dr(),subjectId:a.subjectId,type:a.anonymize?"anonymization":"hard",scope:a.scope,categories:i,recordCount:c,deletedAt:Date.now(),reason:a.reason,hash:await je(u)};await e.storeDeletionCertificate(l);let p={success:!0,subjectId:a.subjectId,scope:a.scope,anonymized:a.anonymize??!1,recordsAffected:c,categoriesAffected:i,certificate:l,deletedAt:Date.now()};return n.onDelete?.(p),p}catch(c){return {success:false,subjectId:a.subjectId,scope:a.scope,anonymized:a.anonymize??false,recordsAffected:0,categoriesAffected:[],certificate:{id:"error",subjectId:a.subjectId,type:"hard",scope:a.scope,categories:[],recordCount:0,deletedAt:Date.now(),hash:""},deletedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},consent:o,async enforceRetention(){if(!r)return 0;let a=0,c=Date.now(),i=new Set;if(r.categoryRetention)for(let u of Object.keys(r.categoryRetention))i.add(u);i.add("default");for(let u of i){let l=r.categoryRetention?.[u]??r.defaultRetentionMs,p=c-l,d=await e.getExpiredData(u,p);if(d.length>0){await r.onBeforeDelete?.({category:u,count:d.length});let y=await e.deleteByIds(d.map(f=>f.id));a+=y,r.onAfterDelete?.({category:u,count:y}),n.onRetentionEnforced?.(u,y);}}return a},createConsentGuardrail(a){return async c=>{let u=c.input.match(/user[_-]?id[:\s]*([a-zA-Z0-9-]+)/i)?.[1];return u?await o.check(u,a)?{passed:true}:{passed:false,reason:`No consent for '${a}' from subject ${u}`}:{passed:true}}},async getDeletionCertificate(a){return null}}}function V(t,e){if(t.length!==e.length)throw new Error(`Vector dimensions must match: ${t.length} vs ${e.length}`);let r=0,s=0,n=0;for(let o=0;o<t.length;o++){let a=t[o],c=e[o];r+=a*c,s+=a*a,n+=c*c;}return s=Math.sqrt(s),n=Math.sqrt(n),s===0||n===0?0:r/(s*n)}function hr(t,e,r,s){let n=null;for(let o of e){if(s&&o.agentName&&o.agentName!==s)continue;let a=V(t,o.queryEmbedding);a>=r&&(!n||a>n.similarity)&&(n={entry:o,similarity:a});}return n}function Ge(){let t=new Map;function e(r){let s=t.get(r);return s||(s=new Map,t.set(r,s)),s}return {async getEntries(r){return Array.from(e(r).values())},async addEntry(r,s){e(r).set(s.id,s);},async updateEntry(r,s,n){let o=e(r),a=o.get(s);a&&o.set(s,{...a,...n});},async removeEntry(r,s){e(r).delete(s);},async clear(r){t.delete(r);}}}function vr(t){let{embedder:e,similarityThreshold:r=.9,maxCacheSize:s=1e3,ttlMs:n=36e5,namespace:o="default",storage:a=Ge(),onHit:c,onMiss:i,onError:u,perAgent:l=false}=t,p={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},d=0;function y(m){if(p.totalEntries=m.length,p.hitRate=p.totalHits+p.totalMisses>0?p.totalHits/(p.totalHits+p.totalMisses):0,p.avgSimilarityOnHit=p.totalHits>0?d/p.totalHits:0,m.length>0){let S=m.map(h=>h.createdAt);p.oldestEntry=Math.min(...S),p.newestEntry=Math.max(...S);}else p.oldestEntry=null,p.newestEntry=null;}async function f(){let m=await a.getEntries(o),S=Date.now();for(let g of m)S-g.createdAt>n&&await a.removeEntry(o,g.id);let h=await a.getEntries(o);if(h.length>s){let b=h.sort((R,A)=>R.accessedAt-A.accessedAt).slice(0,h.length-s);for(let R of b)await a.removeEntry(o,R.id);}}return {async lookup(m,S){let h=Date.now();try{let g=await e(m),b=await a.getEntries(o),R=hr(g,b,r,l?S:void 0);return R?(await a.updateEntry(o,R.entry.id,{accessedAt:Date.now(),accessCount:R.entry.accessCount+1}),p.totalHits++,d+=R.similarity,y(b),c?.(R.entry,R.similarity),{hit:!0,entry:R.entry,similarity:R.similarity,latencyMs:Date.now()-h}):(p.totalMisses++,y(b),i?.(m),{hit:!1,latencyMs:Date.now()-h})}catch(g){return p.totalMisses++,u?.(g instanceof Error?g:new Error(String(g))),{hit:false,latencyMs:Date.now()-h}}},async store(m,S,h,g={}){let b=await e(m),R={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:m,queryEmbedding:b,response:S,metadata:g,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:l?h:void 0};await a.addEntry(o,R),await f();let A=await a.getEntries(o);y(A);},async invalidate(m){let S=await a.getEntries(o),h=0;for(let b of S)m(b)&&(await a.removeEntry(o,b.id),h++);let g=await a.getEntries(o);return y(g),h},async clear(){await a.clear(o),p={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},d=0;},getStats(){return {...p}},async export(){return a.getEntries(o)},async import(m){for(let h of m)await a.addEntry(o,h);await f();let S=await a.getEntries(o);y(S);}}}function br(t){let{cache:e}=t;return async r=>{let s=await e.lookup(r.input,r.agentName);return s.hit&&s.entry?{passed:false,cacheHit:true,reason:`Cache hit (similarity: ${(s.similarity*100).toFixed(1)}%)`,cachedResponse:s.entry.response,similarity:s.similarity}:{passed:true,cacheHit:false}}}function Sr(t=128){return async e=>{let r=new Array(t).fill(0);for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r[n%t]+=o/256;}let s=Math.sqrt(r.reduce((n,o)=>n+o*o,0));if(s>0)for(let n=0;n<t;n++)r[n]/=s;return r}}function Er(t){let{batchSize:e=20,embedBatch:r,maxWaitMs:s=50}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${e}`);let n=[],o=null,a=false;async function c(){if(n.length===0)return;let i=n;n=[],o&&(clearTimeout(o),o=null);try{let u=i.map(p=>p.text),l=await r(u);if(l.length!==i.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${l.length} embeddings for ${i.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let p=0;p<i.length;p++)i[p].resolve(l[p]);}catch(u){let l=u instanceof Error?u:new Error(String(u));for(let p of i)p.reject(l);}}return {async embed(i){if(a)throw new Error("BatchedEmbedder has been destroyed");return new Promise((u,l)=>{n.push({text:i,resolve:u,reject:l}),n.length>=e?c():o||(o=setTimeout(c,s));})},async flush(){await c();},destroy(){a=true,o&&(clearTimeout(o),o=null);let i=n;n=[];let u=new Error("BatchedEmbedder destroyed");for(let l of i)l.reject(u);}}}function Rr(){let t=new Map,e=null;function r(s){if(e===null)e=s.length;else if(s.length!==e)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${e}, got ${s.length}`)}return {add(s,n){r(n),t.set(s,n);},remove(s){t.delete(s);},search(s,n,o=0){if(e!==null&&s.length!==e)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${e}, got ${s.length}`);let a=[];for(let[c,i]of t){let u=V(s,i);u>=o&&a.push({id:c,similarity:u});}return a.sort((c,i)=>i.similarity-c.similarity),a.slice(0,n)},rebuild(){},size(){return t.size},clear(){t.clear(),e=null;},needsRebuild(){return false}}}function Be(t,e){return 1-V(t,e)}function ye(t,e){if(t.length===0)return null;let r=Math.floor(e()*t.length),s=t[r],n=t.filter((l,p)=>p!==r);if(n.length===0)return {id:s.id,embedding:s.embedding,mu:0,left:null,right:null};let o=n.map(l=>({item:l,distance:Be(s.embedding,l.embedding)}));o.sort((l,p)=>l.distance-p.distance);let a=Math.floor(o.length/2),c=o[a].distance,i=o.slice(0,a).map(l=>l.item),u=o.slice(a).map(l=>l.item);return {id:s.id,embedding:s.embedding,mu:c,left:ye(i,e),right:ye(u,e)}}function Y(t,e,r,s,n,o){if(!t)return;let a=Be(e,t.embedding),c=1-a;c>=s&&(n.push({id:t.id,similarity:c}),n.sort((i,u)=>u.similarity-i.similarity),n.length>r&&n.pop(),n.length===r&&(o.value=1-n[n.length-1].similarity)),a<t.mu?(Y(t.left,e,r,s,n,o),a+o.value>=t.mu&&Y(t.right,e,r,s,n,o)):(Y(t.right,e,r,s,n,o),a-o.value<=t.mu&&Y(t.left,e,r,s,n,o));}function wr(t={}){let{random:e=Math.random}=t,r=new Map,s=null,n=false,o=null;function a(c){if(o===null)o=c.length;else if(c.length!==o)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${o}, got ${c.length}`)}return {add(c,i){a(i),r.set(c,i),n=true;},remove(c){r.delete(c),n=true;},search(c,i,u=0){if(o!==null&&c.length!==o)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${o}, got ${c.length}`);if(n||!s){let d=[];for(let[y,f]of r){let m=V(c,f);m>=u&&d.push({id:y,similarity:m});}return d.sort((y,f)=>f.similarity-y.similarity),d.slice(0,i)}let l=[],p={value:Number.POSITIVE_INFINITY};return Y(s,c,i,u,l,p),l},rebuild(){let c=Array.from(r.entries()).map(([i,u])=>({id:i,embedding:u}));s=ye(c,e),n=false;},size(){return r.size},clear(){r.clear(),s=null,n=false,o=null;},needsRebuild(){return n}}}function he(t={}){let{bufferSize:e=100}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive StreamChannel] bufferSize must be >= 1, got ${e}`);let r=[],s="open",n=null,o=null,a=null,c=false;function i(y){if(o){let f=o;o=null,f.resolve({value:y,done:false});}}function u(){if(o){let y=o;o=null,y.resolve({value:void 0,done:true});}}function l(y){if(o){let f=o;o=null,c=false,f.reject(y);}}function p(){if(a){let y=a;a=null,y();}}return {async send(y){if(s!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${s} channel${t.name?` "${t.name}"`:""}`);if(o){i(y);return}if(r.length>=e){if(await new Promise(f=>{a=f;}),s!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${s} channel${t.name?` "${t.name}"`:""}`);if(o){i(y);return}}r.push(y);},end(){s==="open"&&(s="closed",u());},error(y){s==="open"&&(s="error",n=y,l(y),p());},getState(){return s},bufferedCount(){return r.length},[Symbol.asyncIterator](){if(c)throw new Error("[Directive StreamChannel] Channel only supports a single consumer. Create a separate channel for each consumer.");return c=true,{next(){if(s==="error"&&n)return c=false,Promise.reject(n);if(r.length>0){let y=r.shift();return p(),Promise.resolve({value:y,done:false})}return s==="closed"?(c=false,Promise.resolve({value:void 0,done:true})):new Promise((y,f)=>{o={resolve:y,reject:f};})},return(){return s="closed",r.length=0,c=false,p(),Promise.resolve({value:void 0,done:true})}}}}}function Cr(t){let e=he(t),r=he(t);return {sideA:{send:s=>e.send(s),receive:r,close(){e.end(),r.end();}},sideB:{send:s=>r.send(s),receive:e,close(){e.end(),r.end();}}}}async function Mr(t,e,r){try{for await(let s of t){let n=await r(s);await e.send(n);}e.end();}catch(s){e.error(s instanceof Error?s:new Error(String(s)));}}function Ar(...t){return {[Symbol.asyncIterator](){let r=[],s=0,n=null,o=null,a=false,c=false,i=[];function u(l){if(n){let p=n;return n=null,p(l),true}return false}for(let l of t){let p=l[Symbol.asyncIterator]();i.push(p),(async()=>{try{for(;!a;){let d=await p.next();if(d.done||a)break;u({value:d.value,done:!1})||(r.length<1e4?r.push(d.value):c||(c=!0,console.warn("[Directive mergeStreams] Buffer exceeded 10000 items. Values are being dropped. Ensure the consumer keeps up or use bounded StreamChannel sources.")));}}catch(d){a||(a=true,o=d instanceof Error?d:new Error(String(d)),u({value:void 0,done:true}));}s++,s>=t.length&&!a&&u({value:void 0,done:true});})();}return {next(){return o?Promise.reject(o):r.length>0?Promise.resolve({value:r.shift(),done:false}):s>=t.length?Promise.resolve({value:void 0,done:true}):new Promise(l=>{n=l;})},return(){a=true,r.length=0;for(let l of i)l.return?.({value:void 0,done:true});if(n){let l=n;n=null,l({value:void 0,done:true});}return Promise.resolve({value:void 0,done:true})}}}}}function xr(t,e){let r=t.metadata.title??"",s=t.metadata.section??"",n=t.metadata.url??"";return `${r&&s&&n?`[${r} \u2014 ${s}](${n})`:r||t.id}
|
|
29
|
+
${t.content}`}function Tr(t,e){return t.length===0?"":`Relevant documentation context:
|
|
30
30
|
|
|
31
31
|
${t.join(`
|
|
32
32
|
|
|
33
|
-
`)}`}function
|
|
33
|
+
`)}`}function Pr(t,e,r){return Math.max(e,Math.min(r,t))}function kr(t){let{embedder:e,storage:r,topK:s=5,minSimilarity:n=.3,formatChunk:o=xr,formatContext:a=Tr,onError:c}=t,i=Pr(n,0,1);typeof process<"u"&&process.env?.NODE_ENV==="development"&&n!==i&&console.warn(`[Directive] RAG: minSimilarity ${n} clamped to ${i} (valid range: 0-1)`);async function u(p,d){let y=Math.max(1,Math.floor(d??s));if(r.search)return r.search(await e(p),y,i);let f=await e(p),S=(await r.getChunks()).map(h=>({...h,similarity:V(f,h.embedding)}));return S.sort((h,g)=>g.similarity-h.similarity),S.filter(h=>h.similarity>=i).slice(0,y)}async function l(p,d={}){let{prefix:y,history:f,topK:m,filter:S}=d,h=[];try{h=await u(p,m);}catch(A){c?.(A instanceof Error?A:new Error(String(A)));}S&&(h=h.filter(A=>S(A)));let g=h.map(A=>o(A,A.similarity)),b=a(g,p),R=[];if(y&&R.push(y),b&&R.push(b),f&&f.length>0){let A=f.map(x=>`${x.role.charAt(0).toUpperCase()+x.role.slice(1)}: ${x.content}`).join(`
|
|
34
34
|
|
|
35
35
|
`);R.push(`Previous conversation:
|
|
36
36
|
${A}`);}return R.push(p),R.join(`
|
|
37
37
|
|
|
38
38
|
---
|
|
39
39
|
|
|
40
|
-
`)}return {retrieve:u,enrich:l}}function
|
|
40
|
+
`)}return {retrieve:u,enrich:l}}function Ir(t,e){let r=se__default.default.resolve(t);if(r.split(se__default.default.sep).includes(".."))throw new Error(`[Directive] File path escapes allowed directory: ${t}`);if(e){let n=se__default.default.resolve(e)+se__default.default.sep;if(!r.startsWith(n)&&r!==n.slice(0,-1))throw new Error(`[Directive] File path escapes allowed directory: ${t}`)}return r}function Dr(t){let{filePath:e,mapEntry:r,ttlMs:s=0,baseDir:n}=t,o=Ir(e,n),a=null,c=0;async function i(){if(a&&(s===0||Date.now()-c<s))return a;try{let l=await(await import('fs')).promises.readFile(o,"utf-8"),p=JSON.parse(l);return a=r?p.map(r):p,c=Date.now(),a}catch(u){return typeof process<"u"&&process.env?.NODE_ENV==="development"&&console.warn(`[Directive] JSONFileStore: failed to load ${o}:`,u),a=[],c=Date.now(),a}}return {async getChunks(){return i()},async size(){return (await i()).length},async reload(){a=null,c=0,await i();},destroy(){a=null,c=0;}}}var Fe="AI service temporarily unavailable. Please try again.";function Or(t={}){let{maxResponseChars:e=Number.POSITIVE_INFINITY,truncationMessage:r=`
|
|
41
41
|
|
|
42
42
|
*[Response truncated]*`,heartbeatIntervalMs:s=0,errorMessages:n,headers:o}=t;if(e<0)throw new RangeError("maxResponseChars must be non-negative");if(s<0)throw new RangeError("heartbeatIntervalMs must be non-negative");function a(u){if(typeof n=="function")try{return n(u)}catch{return Fe}if(n&&typeof n=="object"){let l=u!=null&&typeof u=="object"&&"code"in u&&typeof u.code=="string"?u.code:void 0;if(l&&l in n)return n[l]}return Fe}function c(u,l,p,d){let y=new TextEncoder;function f(m){return y.encode(`data: ${JSON.stringify(m)}
|
|
43
43
|
|
|
44
|
-
`)}return new ReadableStream({async start(m){let
|
|
44
|
+
`)}return new ReadableStream({async start(m){let S=null,h=null;try{s>0&&(S=setInterval(()=>{try{m.enqueue(f({type:"heartbeat",timestamp:Date.now()}));}catch{}},s)),h=u.stream(l,p,{signal:d?.signal});let g=0,b=!1;for await(let R of h){if(g+=R.length,g>e){m.enqueue(f({type:"truncated",text:r})),m.enqueue(f({type:"done"})),b=!0,h.abort();break}m.enqueue(f({type:"text",text:R}));}try{await h.result;}catch{}b||m.enqueue(f({type:"done"}));}catch(g){let b=a(g);m.enqueue(f({type:"error",message:b}));}finally{S&&clearInterval(S),m.close();}}})}let i={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive",...o};return {toResponse(u,l,p,d){let y=c(u,l,p,d);return new Response(y,{headers:i})},toStream(u,l,p,d){return c(u,l,p,d)}}}var oe=class extends Error{retryCount;lastError;constructor(e,r){super(`[Directive] All ${e} retries exhausted: ${r.message}`),this.name="RetryExhaustedError",this.retryCount=e,this.lastError=r,this.cause=r;}},Nr=new Set([400,401,403,404,422]);function ve(t){let e=t;if(typeof e.status=="number"&&e.status>=100&&e.status<=599)return e.status;if(typeof e.statusCode=="number"&&e.statusCode>=100&&e.statusCode<=599)return e.statusCode;let s=(t.message.length>1e3?t.message.slice(0,1e3):t.message).match(/(?:failed|error|status|http)[:\s]+(\d{3})\b/i);if(!s)return null;let n=Number(s[1]);return n>=100&&n<=599?n:null}function Le(t){let e=t;if(typeof e.retryAfter=="number"&&e.retryAfter>0)return e.retryAfter*1e3;let s=(t.message.length>1e3?t.message.slice(0,1e3):t.message).match(/retry[- ]?after[:\s]+(\d+)/i);if(!s)return null;let n=Number(s[1]);return n>0?n*1e3:null}function $r(t,e,r){let s=e*2**(t-1),n=Math.random()*e*.5,o=s+n;return Math.min(o,r)}function _r(t,e,r,s){if(ve(t)===429){let o=Le(t);if(o!==null)return Math.min(o,s)}return $r(e,r,s)}function jr(t){let e=ve(t);return e===null?true:!Nr.has(e)}function Gr(t,e={}){let{maxRetries:r=3,baseDelayMs:s=1e3,maxDelayMs:n=3e4,isRetryable:o,onRetry:a}=e;if(!Number.isFinite(r)||r<0)throw new Error("[Directive] withRetry: maxRetries must be a non-negative finite number.");if(!Number.isFinite(s)||s<0)throw new Error("[Directive] withRetry: baseDelayMs must be a non-negative finite number.");if(!Number.isFinite(n)||n<0)throw new Error("[Directive] withRetry: maxDelayMs must be a non-negative finite number.");return async(c,i,u)=>{let l;for(let p=0;p<=r;p++)try{return await t(c,i,u)}catch(d){if(l=d instanceof Error?d:new Error(String(d)),p>=r)break;if(o)try{if(!o(l))break}catch{break}if(!jr(l))break;let y=_r(l,p+1,s,n);try{a?.(p+1,l,y);}catch{}let f=u?.signal;if(f?.aborted)break;await new Promise((m,S)=>{let h=setTimeout(()=>{f?.removeEventListener("abort",g),m();},y);function g(){clearTimeout(h),S(f.reason??new Error("Aborted"));}f&&f.addEventListener("abort",g,{once:true});});}throw new oe(r,l)}}var ae=class extends Error{errors;constructor(e){let r=e.map((s,n)=>` [${n}] ${s.message}`).join(`
|
|
45
45
|
`);super(`[Directive] All ${e.length} providers failed:
|
|
46
|
-
${r}`),this.name="AllProvidersFailedError",this.errors=Object.freeze([...e]),e.length>0&&(this.cause=e[e.length-1]);}};function Nr(t,e={}){if(t.length===0)throw new Error("[Directive] withFallback requires at least one runner.");let{shouldFallback:r,onFallback:s}=e;return async(n,o,a)=>{let c=[];for(let i=0;i<t.length;i++)try{return await t[i](n,o,a)}catch(u){let l=u instanceof Error?u:new Error(String(u));if(c.push(l),i<t.length-1){if(r)try{if(!r(l))break}catch{break}try{s?.(i,i+1,l);}catch{}}}throw new oe(c)}}var Y=class extends Error{estimated;remaining;window;constructor(e){super(`[Directive] Budget exceeded (${e.window}): estimated $${e.estimated.toFixed(4)}, remaining $${e.remaining.toFixed(4)}`),this.name="BudgetExceededError",this.estimated=e.estimated,this.remaining=e.remaining,this.window=e.window;}},ae=class{entries=[];record(e){this.entries.push({timestamp:Date.now(),cost:e});}getCostInWindow(e){let r=Date.now()-e;this.prune(r);let s=0;for(let n of this.entries)n.timestamp>=r&&(s+=n.cost);return s}prune(e){let r=0;for(;r<this.entries.length&&this.entries[r].timestamp<e;)r++;r>0&&this.entries.splice(0,r);}clear(){this.entries=[];}},Ue={hour:3600*1e3,day:1440*60*1e3};function $r(t,e){return Math.ceil(t.length/e)}function ze(t,e){return t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function He(t,e,r=1){let s=Math.ceil(t*r);return t/1e6*e.inputPerMillion+s/1e6*e.outputPerMillion}function _r(t,e){let{maxCostPerCall:r,budgets:s=[],pricing:n,charsPerToken:o=4,estimatedOutputMultiplier:a=1,onBudgetExceeded:c}=e;if(!Number.isFinite(o)||o<=0)throw new Error("[Directive] withBudget: charsPerToken must be a positive finite number.");if(r!=null&&(!Number.isFinite(r)||r<0))throw new Error("[Directive] withBudget: maxCostPerCall must be a non-negative finite number.");if(!Number.isFinite(a)||a<0)throw new Error("[Directive] withBudget: estimatedOutputMultiplier must be a non-negative finite number.");r!=null&&!n&&console.warn("[Directive] withBudget: maxCostPerCall has no effect without pricing. Provide a pricing config to enable per-call cost estimation.");for(let d of s)if(!Number.isFinite(d.maxCost)||d.maxCost<0)throw new Error(`[Directive] withBudget: budgets[${d.window}].maxCost must be a non-negative finite number.`);let i=new Map;for(let d of s)i.set(d.window,new ae);let u=new ae,l=async(d,y,f)=>{let m=$r(y,o);if(r!=null&&n){let h=He(m,n,a);if(h>r){let g={estimated:h,remaining:r,window:"per-call"};try{c?.(g);}catch{}throw new Y(g)}}for(let h of s){let g=Ue[h.window],R=i.get(h.window).getCostInWindow(g),A=h.maxCost-R,x=He(m,h.pricing,a);if(x>A){let k={estimated:x,remaining:Math.max(0,A),window:h.window};try{c?.(k);}catch{}throw new Y(k)}}let E=await t(d,y,f);if(E.tokenUsage){for(let h of s){let g=i.get(h.window),b=ze(E.tokenUsage,h.pricing);g.record(b);}if(n&&s.length===0){let h=ze(E.tokenUsage,n);u.record(h);}}return E};function p(d){let y=i.get(d);if(!y)return 0;let f=Ue[d];return y.getCostInWindow(f)}return l.getSpent=p,l}function jr(t,e){return {match:(r,s)=>s.length<=t,model:e}}function Gr(t,e){return {match:r=>r.name===t,model:e}}function Br(t,e){return {match:(r,s)=>(t.lastIndex=0,t.test(s)),model:e}}function Fr(t,e){let r=Array.isArray(e)?{rules:e}:e,{rules:s,onModelSelected:n}=r;return async(o,a,c)=>{let i=o.model;for(let l of s)try{if(l.match(o,a)){i=l.model;break}}catch{}try{n?.(o.model,i);}catch{}let u=i!==o.model?{...o,model:i}:o;return t(u,a,c)}}function Lr(t,e={}){let{maxBatchSize:r=20,maxWaitMs:s=5e3,concurrency:n=5}=e;if(!Number.isFinite(r)||r<1)throw new Error("[Directive] createBatchQueue: maxBatchSize must be a positive finite number (>= 1).");if(!Number.isFinite(s)||s<0)throw new Error("[Directive] createBatchQueue: maxWaitMs must be a non-negative finite number.");if(!Number.isFinite(n)||n<1)throw new Error("[Directive] createBatchQueue: concurrency must be a positive finite number (>= 1).");let o=[],a=null,c=false,i=null;function u(){a===null&&(a=setTimeout(()=>{a=null,d().catch(()=>{});},s));}function l(){a!==null&&(clearTimeout(a),a=null);}async function p(y){let f=0;async function m(){for(;f<y.length;){let h=f++,g=y[h];try{let b=await t(g.agent,g.input,g.options);g.resolve(b);}catch(b){g.reject(b instanceof Error?b:new Error(String(b)));}}}let E=Array.from({length:Math.min(n,y.length)},()=>m());await Promise.all(E);}async function d(){if(i&&await i,o.length===0)return;l();let y=o.splice(0);i=p(y).finally(()=>{i=null,o.length>0&&u();}),await i;}return {submit(y,f,m){return c?Promise.reject(new Error("[Directive] BatchQueue has been destroyed.")):new Promise((E,h)=>{o.push({agent:y,input:f,options:m,resolve:E,reject:h}),o.length>=r?(l(),d().catch(()=>{})):u();})},async flush(){await d();},get pending(){return o.length},async destroy(){c||(c=true,l(),o.length>0&&await d());}}}function qe(){return {callCount:0,errorCount:0,totalCost:0,avgLatencyMs:0,lastErrorAt:null}}function Ur(t,e){return !t||!e?0:t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function zr(t){let{providers:e,defaultProvider:r,constraints:s=[],onProviderSelected:n,errorCooldownMs:o=3e4,preferCheapest:a=false}=t;if(!Number.isFinite(o)||o<0)throw new Error("[Directive] createConstraintRouter: errorCooldownMs must be a non-negative finite number.");let c=new Map;for(let f of e)c.set(f.name,f);if(!c.has(r))throw new Error(`[Directive] Default provider "${r}" not found in providers list.`);let i={totalCost:0,callCount:0,errorCount:0,lastProvider:null,avgLatencyMs:0,providers:Object.create(null)};for(let f of e)i.providers[f.name]=qe();let u=0,l=[...s].sort((f,m)=>(m.priority??0)-(f.priority??0));function p(){let f=Date.now();for(let E of l)try{if(E.when(i)){let h=c.get(E.provider);if(h)return {provider:h,reason:"constraint"}}}catch{}let m=e.filter(E=>{let h=i.providers[E.name];return h?!(h.lastErrorAt&&f-h.lastErrorAt<o):true});if(a&&m.length>0){let E=[...m].sort((h,g)=>{let b=h.pricing?h.pricing.inputPerMillion+h.pricing.outputPerMillion:Number.POSITIVE_INFINITY,R=g.pricing?g.pricing.inputPerMillion+g.pricing.outputPerMillion:Number.POSITIVE_INFINITY;return b!==R?b-R:h.name===r?-1:g.name===r?1:0});if(E[0]!==c.get(r))return {provider:E[0],reason:"cheapest"}}return m.length>0&&!m.some(E=>E.name===r)?{provider:m[0],reason:"default"}:{provider:c.get(r),reason:"default"}}function d(f,m,E,h,g){let b=i.providers[f]??qe();if(b.callCount++,i.callCount++,g)b.errorCount++,i.errorCount++,b.lastErrorAt=Date.now();else {let A=Ur(E,h);b.totalCost+=A,i.totalCost+=A;}u+=m,i.avgLatencyMs=u/i.callCount;let R=b.callCount>0?(b.avgLatencyMs*(b.callCount-1)+m)/b.callCount:m;b.avgLatencyMs=R,i.providers[f]=b,i.lastProvider=f;}let y=async(f,m,E)=>{let{provider:h,reason:g}=p();try{n?.(h.name,g);}catch{}let b=Date.now();try{let R=await h.runner(f,m,E),A=Date.now()-b;return d(h.name,A,R.tokenUsage,h.pricing),R}catch(R){let A=Date.now()-b,x=R instanceof Error?R:new Error(String(R));throw d(h.name,A,void 0,h.pricing,x),x}};return Object.defineProperty(y,"facts",{get:()=>{let f=Object.create(null);for(let m of Object.keys(i.providers))f[m]={...i.providers[m]};return {...i,providers:f}},enumerable:true}),y}function Ve(t){let{transport:e,timeline:r,healthMonitor:s,getSnapshot:n,getBreakpointState:o,onResumeBreakpoint:a,onCancelBreakpoint:c,getScratchpadState:i,getDerivedState:u,onForkFromSnapshot:l,batchSize:p=1,batchIntervalMs:d=50,healthPushIntervalMs:y=0,authenticate:f}=t,m=t.maxClients??50,E=`devtools_${crypto.randomUUID()}`,h=new Set,g=new Set,b=[],R=null,A=null;function x(w,_){try{w.send(JSON.stringify(_));}catch{h.delete(w);}}function k(w){let _=JSON.stringify(w),P=[...h];for(let F of P)try{F.send(_);}catch{h.delete(F);}}function O(){b.length!==0&&(b.length===1?k({type:"event",event:b[0]}):k({type:"event_batch",events:b}),b=[]);}let v=r.subscribe(w=>{if(h.size!==0){if(p<=1){k({type:"event",event:w});return}b.push(w),b.length>=p&&O();}});p>1&&d>0&&(R=setInterval(O,d)),y>0&&s&&(A=setInterval(()=>{h.size>0&&k({type:"health",metrics:s.getAllMetrics()});},y));function C(w,_){let P;try{P=JSON.parse(_);}catch{x(w,{type:"error",code:"INVALID_JSON",message:"Could not parse message"});return}if(!P||typeof P!="object"||typeof P.type!="string"){x(w,{type:"error",code:"INVALID_MESSAGE",message:"Missing type field"});return}let F=Date.now(),B=T.get(w)??0;if(F-B<D){x(w,{type:"error",code:"RATE_LIMITED",message:"Too many requests"});return}if(T.set(w,F),P.type==="authenticate"){if(!f){x(w,{type:"error",code:"UNKNOWN_COMMAND",message:"Authentication not configured on this server"});return}if(!g.has(w)){x(w,{type:"error",code:"ALREADY_AUTHENTICATED",message:"Already authenticated"});return}if(typeof P.token!="string"){x(w,{type:"error",code:"AUTH_FAILED",message:"Missing token"}),w.close(),g.delete(w);return}let $=f(P.token),U=q=>{q?(g.delete(w),h.add(w),x(w,{type:"welcome",version:1,sessionId:E,timestamp:Date.now()})):(x(w,{type:"error",code:"AUTH_FAILED",message:"Invalid token"}),g.delete(w),w.close());};$ instanceof Promise?$.then(U).catch(()=>{x(w,{type:"error",code:"AUTH_FAILED",message:"Authentication error"}),g.delete(w),w.close();}):U($);return}if(g.has(w)){x(w,{type:"error",code:"AUTH_REQUIRED",message:"Authentication required"});return}switch(P.type){case "ping":x(w,{type:"pong",timestamp:Date.now()});break;case "request_snapshot":n?x(w,{type:"snapshot",data:n()}):x(w,{type:"error",code:"NO_SNAPSHOT",message:"Snapshot provider not configured"});break;case "request_health":s?x(w,{type:"health",metrics:s.getAllMetrics()}):x(w,{type:"error",code:"NO_HEALTH",message:"Health monitor not configured"});break;case "request_events":{let $=r.getEvents(),U=P.since,q=U!=null?$.filter(ce=>ce.id>U):$;x(w,{type:"event_batch",events:q});break}case "request_breakpoints":o?x(w,{type:"breakpoints",state:o()}):x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint provider not configured"});break;case "resume_breakpoint":if(a&&typeof P.breakpointId=="string"){let $=P.modifications?{input:P.modifications.input,skip:P.modifications.skip}:void 0;a(P.breakpointId,$);}else x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint resume not configured"});break;case "cancel_breakpoint":if(c&&typeof P.breakpointId=="string"){let $=typeof P.reason=="string"?P.reason:void 0;c(P.breakpointId,$);}else x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint cancel not configured"});break;case "export_session":x(w,{type:"event_batch",events:r.getEvents()});break;case "import_session":{if(typeof P.data!="string")x(w,{type:"error",code:"INVALID_DATA",message:"Missing data field for import"});else if(P.data.length>10485760)x(w,{type:"error",code:"IMPORT_TOO_LARGE",message:`Import data exceeds ${10485760/1024/1024} MB limit`});else try{r.import(P.data),x(w,{type:"event_batch",events:r.getEvents()});}catch(U){let q=U instanceof Error?U.message:String(U);x(w,{type:"error",code:"IMPORT_FAILED",message:q});}break}case "request_scratchpad":i?x(w,{type:"scratchpad_state",data:i()}):x(w,{type:"error",code:"NO_SCRATCHPAD",message:"Scratchpad provider not configured"});break;case "request_derived":u?x(w,{type:"derived_state",data:u()}):x(w,{type:"error",code:"NO_DERIVED",message:"Derived state provider not configured"});break;case "fork_from_snapshot":{if(l&&typeof P.eventId=="number")try{let $=l(P.eventId);x(w,{type:"fork_complete",eventId:P.eventId,newEventCount:$.newEventCount});}catch($){let U=$ instanceof Error?$.message:String($);x(w,{type:"error",code:"FORK_FAILED",message:U});}else x(w,{type:"error",code:"NO_FORK",message:"Fork provider not configured"});break}default:x(w,{type:"error",code:"UNKNOWN_COMMAND",message:`Unknown message type: ${String(P.type).slice(0,100)}`});}}let T=new Map,D=50;return e.onConnection((w,_,P)=>{if(h.size+g.size>=m){try{let F={type:"error",code:"MAX_CLIENTS",message:"Connection limit reached"};w.send(JSON.stringify(F));}catch{}w.close();return}f?g.add(w):(h.add(w),x(w,{type:"welcome",version:1,sessionId:E,timestamp:Date.now()})),_(F=>C(w,F)),P(()=>{h.delete(w),g.delete(w),T.delete(w);});}),{get clientCount(){return h.size},broadcast(w){k(w);},pushHealth(){s&&h.size>0&&k({type:"health",metrics:s.getAllMetrics()});},pushBreakpoints(){o&&h.size>0&&k({type:"breakpoints",state:o()});},pushScratchpadUpdate(w,_){h.size>0&&k({type:"scratchpad_update",key:w,value:_});},pushDerivedUpdate(w,_){h.size>0&&k({type:"derived_update",id:w,value:_});},pushTokenStream(w,_,P){h.size>0&&k({type:"token_stream",agentId:w,tokens:_,tokenCount:P});},pushStreamDone(w,_){h.size>0&&k({type:"stream_done",agentId:w,totalTokens:_});},close(){v(),R&&(clearInterval(R),R=null),A&&(clearInterval(A),A=null),O();for(let w of h)try{w.close();}catch{}for(let w of g)try{w.close();}catch{}h.clear(),g.clear(),T.clear(),e.close();}}}async function Hr(t,e={}){if(!t.timeline)throw new Error("[Directive DevTools] Orchestrator must have debug: true to use DevTools");let r=await Je({port:e.port??4040,host:e.host??"localhost"});return Ve({transport:r,timeline:t.timeline,healthMonitor:t.healthMonitor,healthPushIntervalMs:e.healthPushIntervalMs??5e3,batchSize:e.batchSize,authenticate:e.authenticate,getSnapshot:t.getAllAgentStates?()=>{let s=t.getAllAgentStates();return {timestamp:Date.now(),agents:s,eventCount:t.timeline.getEvents().length}}:void 0,getBreakpointState:t.getPendingBreakpoints?()=>({pending:t.getPendingBreakpoints(),resolved:[],cancelled:[]}):void 0,onResumeBreakpoint:t.resumeBreakpoint,onCancelBreakpoint:t.cancelBreakpoint,getScratchpadState:t.getScratchpadState,getDerivedState:t.getDerivedState,onForkFromSnapshot:t.timeline?.forkFrom?s=>(t.timeline.forkFrom(s),{newEventCount:t.timeline.getEvents().length}):void 0})}async function Je(t={}){let e=t.port??4040,r=t.host??"localhost",{WebSocketServer:s}=await import('ws'),n=new s({port:e,host:r,maxPayload:t.maxPayloadBytes??1048576}),o=null;return n.on("connection",a=>{let c=null,i=null,u={send(l){a.readyState===a.OPEN&&a.send(l);},close(){a.close();}};a.on("message",l=>{c&&c(l.toString());}),a.on("close",()=>{i&&i();}),o?.(u,l=>{c=l;},l=>{i=l;});}),{onConnection(a){o=a;},close(){n.close();}}}function Z(t){return Number.isFinite(t)?t:0}function be(t){let e=Object.keys(t),r=new Map;for(let[d,y]of Object.entries(t))for(let f of y.produces){if(r.has(f))throw new Error(`[Directive Goal] Fact key "${f}" is produced by both "${r.get(f)}" and "${d}". Each fact key must have exactly one producer.`);r.set(f,d);}let s=[],n=new Map,o=new Map;for(let d of e)n.set(d,0),o.set(d,[]);for(let[d,y]of Object.entries(t))for(let f of y.requires??[]){let m=r.get(f);m&&m!==d&&(s.push({from:m,to:d,factKey:f}),o.get(m).push(d),n.set(d,(n.get(d)??0)+1));}let a=[];for(let[d,y]of n)y===0&&a.push(d);let c=[],i=0;for(;i<a.length;){let d=a[i++];c.push(d);for(let y of o.get(d)??[]){let f=(n.get(y)??1)-1;n.set(y,f),f===0&&a.push(y);}}if(c.length!==e.length){let d=new Set(c),y=e.filter(f=>!d.has(f));throw new Error(`[Directive Goal] Circular dependency detected among agents: ${y.join(", ")}. Review their produces/requires declarations.`)}let u=c.filter(d=>(t[d].requires??[]).every(m=>!r.has(m)||r.get(m)===d)),l=new Set;for(let d of s)l.add(d.from);let p=e.filter(d=>!l.has(d));return {order:c,edges:s,roots:u,leaves:p,producers:r}}function qr(t){let e=be(t);return {order:[...e.order],edges:[...e.edges],roots:[...e.roots],leaves:[...e.leaves],producers:new Map(e.producers)}}function Vr(t){let e=[],r=[];Object.keys(t).length===0&&e.push("No agents declared");for(let[n,o]of Object.entries(t))o.produces.length===0&&r.push(`Agent "${n}" has no produces \u2014 it will never contribute`);let s=new Set;for(let n of Object.values(t))for(let o of n.produces)s.add(o);for(let[n,o]of Object.entries(t))for(let a of o.requires??[])s.has(a)||r.push(`Agent "${n}" requires "${a}" which no agent produces \u2014 must be in initial facts`);try{be(t);}catch(n){e.push(n instanceof Error?n.message:String(n));}return {valid:e.length===0,errors:e,warnings:r}}function Jr(t,e=[],r=50){let s=be(t),n=new Set;for(let l of Object.values(t))for(let p of l.produces)n.add(p);let o=[];for(let l of Object.values(t))for(let p of l.requires??[])n.has(p)||o.push(p);let a=new Set(e),c=new Set,i=[];for(let l=1;l<=r;l++){let p=s.order.filter(y=>c.has(y)?false:(t[y].requires??[]).every(E=>a.has(E)));if(p.length===0)break;let d=[];for(let y of p){c.add(y);for(let f of t[y].produces)a.has(f)||(d.push(f),a.add(f));}i.push({step:l,agents:p,availableFacts:[...a],producedFacts:d});}let u=Object.keys(t).filter(l=>!c.has(l));return {steps:i,unreachableAgents:u,externalDeps:[...new Set(o)],feasible:u.length===0}}function Kr(t){let e=t.stepMetrics.map(u=>{let l=Z(u.satisfaction),p=Z(u.satisfactionDelta),d=u.nodesRun.join(", "),y=u.factsProduced.length>0?u.factsProduced.join(", "):"none",f=+Z(l-p).toFixed(3),m=p>=0?`+${p.toFixed(3)}`:p.toFixed(3),E=`Step ${u.step}: Ran ${d}. Produced: ${y}. Satisfaction: ${f} \u2192 ${l.toFixed(3)} (${m}). ${u.tokensConsumed} tokens, ${u.durationMs}ms.`;return {step:u.step,agents:u.nodesRun,factsProduced:u.factsProduced,satisfaction:l,satisfactionDelta:p,durationMs:u.durationMs,tokensConsumed:u.tokensConsumed,description:E}}),r=t.relaxations.map(u=>{let l;switch(u.strategy){case "allow_rerun":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 re-enabled completed nodes for another run.`;break;case "inject_facts":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 injected fact values to unblock dependencies.`;break;case "accept_partial":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 accepted current facts as partial result.`;break;case "alternative_nodes":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 added alternative nodes to the graph.`;break;case "custom":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 ran custom recovery logic.`;break;default:l=`Step ${u.step}: Applied relaxation "${u.label}" (${u.strategy}).`;}return {step:u.step,label:u.label,strategy:u.strategy,description:l}}),s=t.stepMetrics.length>0?Z(t.stepMetrics[0].satisfaction-t.stepMetrics[0].satisfactionDelta).toFixed(3):"0",n=t.stepMetrics.length>0?Z(t.stepMetrics[t.stepMetrics.length-1].satisfaction).toFixed(3):"0",o=t.achieved?"Goal achieved":"Goal not achieved",a=t.relaxations.length>0?` ${t.relaxations.length} relaxation(s) applied.`:"",c=t.error?` Error: ${t.error}`:"",i=`${o} in ${t.steps} step(s) (${t.totalTokens.toLocaleString()} tokens, ${t.durationMs}ms). Satisfaction: ${s} \u2192 ${n}.`+a+c;return {achieved:t.achieved,summary:i,steps:e,relaxations:r,totalTokens:t.totalTokens,durationMs:t.durationMs}}function Wr(t,e=false){let r=false,s=[],n=[],o=e?(a,...c)=>console.debug(`[MCP Stub] ${a}`,...c):()=>{};return {async connect(){o(`Connecting to ${t.name} (${t.transport})`),r=true;},async disconnect(){r=false;},isConnected(){return r},getCapabilities(){return {tools:true,resources:true,prompts:true}},async listTools(){return s},async callTool(a,c){return o(`Calling tool ${a}`,c),{content:[{type:"text",text:`Stub result for ${a}`}]}},async listResources(){return n},async readResource(a){return o(`Reading resource ${a}`),{contents:[{uri:a,text:`Stub content for ${a}`}]}},async listPrompts(){return []},async getPrompt(a){return {messages:[{role:"user",content:{type:"text",text:`Stub prompt ${a}`}}]}}}}function Qr(t,e,r){let s=Date.now(),n=t.get(e);return !n||s>n.resetTime?(t.set(e,{count:1,resetTime:s+6e4}),true):n.count>=r?false:(n.count++,true)}function Xr(t){let{servers:e,toolConstraints:r={},resourceMappings:s=[],events:n={},autoConnect:o=false,autoReconnect:a=true,debug:c=false,allowDirectCalls:i=false}=t;!t.clientFactory&&(typeof process<"u"&&process.env?.NODE_ENV==="production"?console.warn(`[Directive MCP] WARNING: Using stub MCP client in production!
|
|
46
|
+
${r}`),this.name="AllProvidersFailedError",this.errors=Object.freeze([...e]),e.length>0&&(this.cause=e[e.length-1]);}};function Br(t,e={}){if(t.length===0)throw new Error("[Directive] withFallback requires at least one runner.");let{shouldFallback:r,onFallback:s}=e;return async(n,o,a)=>{let c=[];for(let i=0;i<t.length;i++)try{return await t[i](n,o,a)}catch(u){let l=u instanceof Error?u:new Error(String(u));if(c.push(l),i<t.length-1){if(r)try{if(!r(l))break}catch{break}try{s?.(i,i+1,l);}catch{}}}throw new ae(c)}}var Z=class extends Error{estimated;remaining;window;constructor(e){super(`[Directive] Budget exceeded (${e.window}): estimated $${e.estimated.toFixed(4)}, remaining $${e.remaining.toFixed(4)}`),this.name="BudgetExceededError",this.estimated=e.estimated,this.remaining=e.remaining,this.window=e.window;}},ie=class{entries=[];record(e){this.entries.push({timestamp:Date.now(),cost:e});}getCostInWindow(e){let r=Date.now()-e;this.prune(r);let s=0;for(let n of this.entries)n.timestamp>=r&&(s+=n.cost);return s}prune(e){let r=0;for(;r<this.entries.length&&this.entries[r].timestamp<e;)r++;r>0&&this.entries.splice(0,r);}clear(){this.entries=[];}},Ue={hour:3600*1e3,day:1440*60*1e3};function Fr(t,e){return Math.ceil(t.length/e)}function ze(t,e){return t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function He(t,e,r=1){let s=Math.ceil(t*r);return t/1e6*e.inputPerMillion+s/1e6*e.outputPerMillion}function Lr(t,e){let{maxCostPerCall:r,budgets:s=[],pricing:n,charsPerToken:o=4,estimatedOutputMultiplier:a=1,onBudgetExceeded:c}=e;if(!Number.isFinite(o)||o<=0)throw new Error("[Directive] withBudget: charsPerToken must be a positive finite number.");if(r!=null&&(!Number.isFinite(r)||r<0))throw new Error("[Directive] withBudget: maxCostPerCall must be a non-negative finite number.");if(!Number.isFinite(a)||a<0)throw new Error("[Directive] withBudget: estimatedOutputMultiplier must be a non-negative finite number.");r!=null&&!n&&console.warn("[Directive] withBudget: maxCostPerCall has no effect without pricing. Provide a pricing config to enable per-call cost estimation.");for(let d of s)if(!Number.isFinite(d.maxCost)||d.maxCost<0)throw new Error(`[Directive] withBudget: budgets[${d.window}].maxCost must be a non-negative finite number.`);let i=new Map;for(let d of s)i.set(d.window,new ie);let u=new ie,l=async(d,y,f)=>{let m=Fr(y,o);if(r!=null&&n){let h=He(m,n,a);if(h>r){let g={estimated:h,remaining:r,window:"per-call"};try{c?.(g);}catch{}throw new Z(g)}}for(let h of s){let g=Ue[h.window],R=i.get(h.window).getCostInWindow(g),A=h.maxCost-R,x=He(m,h.pricing,a);if(x>A){let k={estimated:x,remaining:Math.max(0,A),window:h.window};try{c?.(k);}catch{}throw new Z(k)}}let S=await t(d,y,f);if(S.tokenUsage){for(let h of s){let g=i.get(h.window),b=ze(S.tokenUsage,h.pricing);g.record(b);}if(n&&s.length===0){let h=ze(S.tokenUsage,n);u.record(h);}}return S};function p(d){let y=i.get(d);if(!y)return 0;let f=Ue[d];return y.getCostInWindow(f)}return l.getSpent=p,l}function Ur(t,e){return {match:(r,s)=>s.length<=t,model:e}}function zr(t,e){return {match:r=>r.name===t,model:e}}function Hr(t,e){return {match:(r,s)=>(t.lastIndex=0,t.test(s)),model:e}}function qr(t,e){let r=Array.isArray(e)?{rules:e}:e,{rules:s,onModelSelected:n}=r;return async(o,a,c)=>{let i=o.model;for(let l of s)try{if(l.match(o,a)){i=l.model;break}}catch{}try{n?.(o.model,i);}catch{}let u=i!==o.model?{...o,model:i}:o;return t(u,a,c)}}function Vr(t,e={}){let{maxBatchSize:r=20,maxWaitMs:s=5e3,concurrency:n=5}=e;if(!Number.isFinite(r)||r<1)throw new Error("[Directive] createBatchQueue: maxBatchSize must be a positive finite number (>= 1).");if(!Number.isFinite(s)||s<0)throw new Error("[Directive] createBatchQueue: maxWaitMs must be a non-negative finite number.");if(!Number.isFinite(n)||n<1)throw new Error("[Directive] createBatchQueue: concurrency must be a positive finite number (>= 1).");let o=[],a=null,c=false,i=null;function u(){a===null&&(a=setTimeout(()=>{a=null,d().catch(()=>{});},s));}function l(){a!==null&&(clearTimeout(a),a=null);}async function p(y){let f=0;async function m(){for(;f<y.length;){let h=f++,g=y[h];try{let b=await t(g.agent,g.input,g.options);g.resolve(b);}catch(b){g.reject(b instanceof Error?b:new Error(String(b)));}}}let S=Array.from({length:Math.min(n,y.length)},()=>m());await Promise.all(S);}async function d(){if(i&&await i,o.length===0)return;l();let y=o.splice(0);i=p(y).finally(()=>{i=null,o.length>0&&u();}),await i;}return {submit(y,f,m){return c?Promise.reject(new Error("[Directive] BatchQueue has been destroyed.")):new Promise((S,h)=>{o.push({agent:y,input:f,options:m,resolve:S,reject:h}),o.length>=r?(l(),d().catch(()=>{})):u();})},async flush(){await d();},get pending(){return o.length},async destroy(){c||(c=true,l(),o.length>0&&await d());}}}function qe(){return {callCount:0,errorCount:0,totalCost:0,avgLatencyMs:0,lastErrorAt:null}}function Jr(t,e){return !t||!e?0:t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function Kr(t){let{providers:e,defaultProvider:r,constraints:s=[],onProviderSelected:n,errorCooldownMs:o=3e4,preferCheapest:a=false}=t;if(!Number.isFinite(o)||o<0)throw new Error("[Directive] createConstraintRouter: errorCooldownMs must be a non-negative finite number.");let c=new Map;for(let f of e)c.set(f.name,f);if(!c.has(r))throw new Error(`[Directive] Default provider "${r}" not found in providers list.`);let i={totalCost:0,callCount:0,errorCount:0,lastProvider:null,avgLatencyMs:0,providers:Object.create(null)};for(let f of e)i.providers[f.name]=qe();let u=0,l=[...s].sort((f,m)=>(m.priority??0)-(f.priority??0));function p(){let f=Date.now();for(let S of l)try{if(S.when(i)){let h=c.get(S.provider);if(h)return {provider:h,reason:"constraint"}}}catch{}let m=e.filter(S=>{let h=i.providers[S.name];return h?!(h.lastErrorAt&&f-h.lastErrorAt<o):true});if(a&&m.length>0){let S=[...m].sort((h,g)=>{let b=h.pricing?h.pricing.inputPerMillion+h.pricing.outputPerMillion:Number.POSITIVE_INFINITY,R=g.pricing?g.pricing.inputPerMillion+g.pricing.outputPerMillion:Number.POSITIVE_INFINITY;return b!==R?b-R:h.name===r?-1:g.name===r?1:0});if(S[0]!==c.get(r))return {provider:S[0],reason:"cheapest"}}return m.length>0&&!m.some(S=>S.name===r)?{provider:m[0],reason:"default"}:{provider:c.get(r),reason:"default"}}function d(f,m,S,h,g){let b=i.providers[f]??qe();if(b.callCount++,i.callCount++,g)b.errorCount++,i.errorCount++,b.lastErrorAt=Date.now();else {let A=Jr(S,h);b.totalCost+=A,i.totalCost+=A;}u+=m,i.avgLatencyMs=u/i.callCount;let R=b.callCount>0?(b.avgLatencyMs*(b.callCount-1)+m)/b.callCount:m;b.avgLatencyMs=R,i.providers[f]=b,i.lastProvider=f;}let y=async(f,m,S)=>{let{provider:h,reason:g}=p();try{n?.(h.name,g);}catch{}let b=Date.now();try{let R=await h.runner(f,m,S),A=Date.now()-b;return d(h.name,A,R.tokenUsage,h.pricing),R}catch(R){let A=Date.now()-b,x=R instanceof Error?R:new Error(String(R));throw d(h.name,A,void 0,h.pricing,x),x}};return Object.defineProperty(y,"facts",{get:()=>{let f=Object.create(null);for(let m of Object.keys(i.providers))f[m]={...i.providers[m]};return {...i,providers:f}},enumerable:true}),y}function Ve(t){let{transport:e,timeline:r,healthMonitor:s,getSnapshot:n,getBreakpointState:o,onResumeBreakpoint:a,onCancelBreakpoint:c,getScratchpadState:i,getDerivedState:u,onForkFromSnapshot:l,batchSize:p=1,batchIntervalMs:d=50,healthPushIntervalMs:y=0,authenticate:f}=t,m=t.maxClients??50,S=`devtools_${crypto.randomUUID()}`,h=new Set,g=new Set,b=[],R=null,A=null;function x(w,_){try{w.send(JSON.stringify(_));}catch{h.delete(w);}}function k(w){let _=JSON.stringify(w),P=[...h];for(let F of P)try{F.send(_);}catch{h.delete(F);}}function O(){b.length!==0&&(b.length===1?k({type:"event",event:b[0]}):k({type:"event_batch",events:b}),b=[]);}let v=r.subscribe(w=>{if(h.size!==0){if(p<=1){k({type:"event",event:w});return}b.push(w),b.length>=p&&O();}});p>1&&d>0&&(R=setInterval(O,d)),y>0&&s&&(A=setInterval(()=>{h.size>0&&k({type:"health",metrics:s.getAllMetrics()});},y));function C(w,_){let P;try{P=JSON.parse(_);}catch{x(w,{type:"error",code:"INVALID_JSON",message:"Could not parse message"});return}if(!P||typeof P!="object"||typeof P.type!="string"){x(w,{type:"error",code:"INVALID_MESSAGE",message:"Missing type field"});return}let F=Date.now(),B=T.get(w)??0;if(F-B<D){x(w,{type:"error",code:"RATE_LIMITED",message:"Too many requests"});return}if(T.set(w,F),P.type==="authenticate"){if(!f){x(w,{type:"error",code:"UNKNOWN_COMMAND",message:"Authentication not configured on this server"});return}if(!g.has(w)){x(w,{type:"error",code:"ALREADY_AUTHENTICATED",message:"Already authenticated"});return}if(typeof P.token!="string"){x(w,{type:"error",code:"AUTH_FAILED",message:"Missing token"}),w.close(),g.delete(w);return}let $=f(P.token),U=q=>{q?(g.delete(w),h.add(w),x(w,{type:"welcome",version:1,sessionId:S,timestamp:Date.now()})):(x(w,{type:"error",code:"AUTH_FAILED",message:"Invalid token"}),g.delete(w),w.close());};$ instanceof Promise?$.then(U).catch(()=>{x(w,{type:"error",code:"AUTH_FAILED",message:"Authentication error"}),g.delete(w),w.close();}):U($);return}if(g.has(w)){x(w,{type:"error",code:"AUTH_REQUIRED",message:"Authentication required"});return}switch(P.type){case "ping":x(w,{type:"pong",timestamp:Date.now()});break;case "request_snapshot":n?x(w,{type:"snapshot",data:n()}):x(w,{type:"error",code:"NO_SNAPSHOT",message:"Snapshot provider not configured"});break;case "request_health":s?x(w,{type:"health",metrics:s.getAllMetrics()}):x(w,{type:"error",code:"NO_HEALTH",message:"Health monitor not configured"});break;case "request_events":{let $=r.getEvents(),U=P.since,q=U!=null?$.filter(ue=>ue.id>U):$;x(w,{type:"event_batch",events:q});break}case "request_breakpoints":o?x(w,{type:"breakpoints",state:o()}):x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint provider not configured"});break;case "resume_breakpoint":if(a&&typeof P.breakpointId=="string"){let $=P.modifications?{input:P.modifications.input,skip:P.modifications.skip}:void 0;a(P.breakpointId,$);}else x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint resume not configured"});break;case "cancel_breakpoint":if(c&&typeof P.breakpointId=="string"){let $=typeof P.reason=="string"?P.reason:void 0;c(P.breakpointId,$);}else x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint cancel not configured"});break;case "export_session":x(w,{type:"event_batch",events:r.getEvents()});break;case "import_session":{if(typeof P.data!="string")x(w,{type:"error",code:"INVALID_DATA",message:"Missing data field for import"});else if(P.data.length>10485760)x(w,{type:"error",code:"IMPORT_TOO_LARGE",message:`Import data exceeds ${10485760/1024/1024} MB limit`});else try{r.import(P.data),x(w,{type:"event_batch",events:r.getEvents()});}catch(U){let q=U instanceof Error?U.message:String(U);x(w,{type:"error",code:"IMPORT_FAILED",message:q});}break}case "request_scratchpad":i?x(w,{type:"scratchpad_state",data:i()}):x(w,{type:"error",code:"NO_SCRATCHPAD",message:"Scratchpad provider not configured"});break;case "request_derived":u?x(w,{type:"derived_state",data:u()}):x(w,{type:"error",code:"NO_DERIVED",message:"Derived state provider not configured"});break;case "fork_from_snapshot":{if(l&&typeof P.eventId=="number")try{let $=l(P.eventId);x(w,{type:"fork_complete",eventId:P.eventId,newEventCount:$.newEventCount});}catch($){let U=$ instanceof Error?$.message:String($);x(w,{type:"error",code:"FORK_FAILED",message:U});}else x(w,{type:"error",code:"NO_FORK",message:"Fork provider not configured"});break}default:x(w,{type:"error",code:"UNKNOWN_COMMAND",message:`Unknown message type: ${String(P.type).slice(0,100)}`});}}let T=new Map,D=50;return e.onConnection((w,_,P)=>{if(h.size+g.size>=m){try{let F={type:"error",code:"MAX_CLIENTS",message:"Connection limit reached"};w.send(JSON.stringify(F));}catch{}w.close();return}f?g.add(w):(h.add(w),x(w,{type:"welcome",version:1,sessionId:S,timestamp:Date.now()})),_(F=>C(w,F)),P(()=>{h.delete(w),g.delete(w),T.delete(w);});}),{get clientCount(){return h.size},broadcast(w){k(w);},pushHealth(){s&&h.size>0&&k({type:"health",metrics:s.getAllMetrics()});},pushBreakpoints(){o&&h.size>0&&k({type:"breakpoints",state:o()});},pushScratchpadUpdate(w,_){h.size>0&&k({type:"scratchpad_update",key:w,value:_});},pushDerivedUpdate(w,_){h.size>0&&k({type:"derived_update",id:w,value:_});},pushTokenStream(w,_,P){h.size>0&&k({type:"token_stream",agentId:w,tokens:_,tokenCount:P});},pushStreamDone(w,_){h.size>0&&k({type:"stream_done",agentId:w,totalTokens:_});},close(){v(),R&&(clearInterval(R),R=null),A&&(clearInterval(A),A=null),O();for(let w of h)try{w.close();}catch{}for(let w of g)try{w.close();}catch{}h.clear(),g.clear(),T.clear(),e.close();}}}async function Wr(t,e={}){if(!t.timeline)throw new Error("[Directive DevTools] Orchestrator must have debug: true to use DevTools");let r=await Je({port:e.port??4040,host:e.host??"localhost"});return Ve({transport:r,timeline:t.timeline,healthMonitor:t.healthMonitor,healthPushIntervalMs:e.healthPushIntervalMs??5e3,batchSize:e.batchSize,authenticate:e.authenticate,getSnapshot:t.getAllAgentStates?()=>{let s=t.getAllAgentStates();return {timestamp:Date.now(),agents:s,eventCount:t.timeline.getEvents().length}}:void 0,getBreakpointState:t.getPendingBreakpoints?()=>({pending:t.getPendingBreakpoints(),resolved:[],cancelled:[]}):void 0,onResumeBreakpoint:t.resumeBreakpoint,onCancelBreakpoint:t.cancelBreakpoint,getScratchpadState:t.getScratchpadState,getDerivedState:t.getDerivedState,onForkFromSnapshot:t.timeline?.forkFrom?s=>(t.timeline.forkFrom(s),{newEventCount:t.timeline.getEvents().length}):void 0})}async function Je(t={}){let e=t.port??4040,r=t.host??"localhost",{WebSocketServer:s}=await import('ws'),n=new s({port:e,host:r,maxPayload:t.maxPayloadBytes??1048576}),o=null;return n.on("connection",a=>{let c=null,i=null,u={send(l){a.readyState===a.OPEN&&a.send(l);},close(){a.close();}};a.on("message",l=>{c&&c(l.toString());}),a.on("close",()=>{i&&i();}),o?.(u,l=>{c=l;},l=>{i=l;});}),{onConnection(a){o=a;},close(){n.close();}}}function ee(t){return Number.isFinite(t)?t:0}function be(t){let e=Object.keys(t),r=new Map;for(let[d,y]of Object.entries(t))for(let f of y.produces){if(r.has(f))throw new Error(`[Directive Goal] Fact key "${f}" is produced by both "${r.get(f)}" and "${d}". Each fact key must have exactly one producer.`);r.set(f,d);}let s=[],n=new Map,o=new Map;for(let d of e)n.set(d,0),o.set(d,[]);for(let[d,y]of Object.entries(t))for(let f of y.requires??[]){let m=r.get(f);m&&m!==d&&(s.push({from:m,to:d,factKey:f}),o.get(m).push(d),n.set(d,(n.get(d)??0)+1));}let a=[];for(let[d,y]of n)y===0&&a.push(d);let c=[],i=0;for(;i<a.length;){let d=a[i++];c.push(d);for(let y of o.get(d)??[]){let f=(n.get(y)??1)-1;n.set(y,f),f===0&&a.push(y);}}if(c.length!==e.length){let d=new Set(c),y=e.filter(f=>!d.has(f));throw new Error(`[Directive Goal] Circular dependency detected among agents: ${y.join(", ")}. Review their produces/requires declarations.`)}let u=c.filter(d=>(t[d].requires??[]).every(m=>!r.has(m)||r.get(m)===d)),l=new Set;for(let d of s)l.add(d.from);let p=e.filter(d=>!l.has(d));return {order:c,edges:s,roots:u,leaves:p,producers:r}}function Qr(t){let e=be(t);return {order:[...e.order],edges:[...e.edges],roots:[...e.roots],leaves:[...e.leaves],producers:new Map(e.producers)}}function Xr(t){let e=[],r=[];Object.keys(t).length===0&&e.push("No agents declared");for(let[n,o]of Object.entries(t))o.produces.length===0&&r.push(`Agent "${n}" has no produces \u2014 it will never contribute`);let s=new Set;for(let n of Object.values(t))for(let o of n.produces)s.add(o);for(let[n,o]of Object.entries(t))for(let a of o.requires??[])s.has(a)||r.push(`Agent "${n}" requires "${a}" which no agent produces \u2014 must be in initial facts`);try{be(t);}catch(n){e.push(n instanceof Error?n.message:String(n));}return {valid:e.length===0,errors:e,warnings:r}}function Yr(t,e=[],r=50){let s=be(t),n=new Set;for(let l of Object.values(t))for(let p of l.produces)n.add(p);let o=[];for(let l of Object.values(t))for(let p of l.requires??[])n.has(p)||o.push(p);let a=new Set(e),c=new Set,i=[];for(let l=1;l<=r;l++){let p=s.order.filter(y=>c.has(y)?false:(t[y].requires??[]).every(S=>a.has(S)));if(p.length===0)break;let d=[];for(let y of p){c.add(y);for(let f of t[y].produces)a.has(f)||(d.push(f),a.add(f));}i.push({step:l,agents:p,availableFacts:[...a],producedFacts:d});}let u=Object.keys(t).filter(l=>!c.has(l));return {steps:i,unreachableAgents:u,externalDeps:[...new Set(o)],feasible:u.length===0}}function Zr(t){let e=t.stepMetrics.map(u=>{let l=ee(u.satisfaction),p=ee(u.satisfactionDelta),d=u.nodesRun.join(", "),y=u.factsProduced.length>0?u.factsProduced.join(", "):"none",f=+ee(l-p).toFixed(3),m=p>=0?`+${p.toFixed(3)}`:p.toFixed(3),S=`Step ${u.step}: Ran ${d}. Produced: ${y}. Satisfaction: ${f} \u2192 ${l.toFixed(3)} (${m}). ${u.tokensConsumed} tokens, ${u.durationMs}ms.`;return {step:u.step,agents:u.nodesRun,factsProduced:u.factsProduced,satisfaction:l,satisfactionDelta:p,durationMs:u.durationMs,tokensConsumed:u.tokensConsumed,description:S}}),r=t.relaxations.map(u=>{let l;switch(u.strategy){case "allow_rerun":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 re-enabled completed nodes for another run.`;break;case "inject_facts":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 injected fact values to unblock dependencies.`;break;case "accept_partial":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 accepted current facts as partial result.`;break;case "alternative_nodes":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 added alternative nodes to the graph.`;break;case "custom":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 ran custom recovery logic.`;break;default:l=`Step ${u.step}: Applied relaxation "${u.label}" (${u.strategy}).`;}return {step:u.step,label:u.label,strategy:u.strategy,description:l}}),s=t.stepMetrics.length>0?ee(t.stepMetrics[0].satisfaction-t.stepMetrics[0].satisfactionDelta).toFixed(3):"0",n=t.stepMetrics.length>0?ee(t.stepMetrics[t.stepMetrics.length-1].satisfaction).toFixed(3):"0",o=t.achieved?"Goal achieved":"Goal not achieved",a=t.relaxations.length>0?` ${t.relaxations.length} relaxation(s) applied.`:"",c=t.error?` Error: ${t.error}`:"",i=`${o} in ${t.steps} step(s) (${t.totalTokens.toLocaleString()} tokens, ${t.durationMs}ms). Satisfaction: ${s} \u2192 ${n}.`+a+c;return {achieved:t.achieved,summary:i,steps:e,relaxations:r,totalTokens:t.totalTokens,durationMs:t.durationMs}}function es(t,e=false){let r=false,s=[],n=[],o=e?(a,...c)=>console.debug(`[MCP Stub] ${a}`,...c):()=>{};return {async connect(){o(`Connecting to ${t.name} (${t.transport})`),r=true;},async disconnect(){r=false;},isConnected(){return r},getCapabilities(){return {tools:true,resources:true,prompts:true}},async listTools(){return s},async callTool(a,c){return o(`Calling tool ${a}`,c),{content:[{type:"text",text:`Stub result for ${a}`}]}},async listResources(){return n},async readResource(a){return o(`Reading resource ${a}`),{contents:[{uri:a,text:`Stub content for ${a}`}]}},async listPrompts(){return []},async getPrompt(a){return {messages:[{role:"user",content:{type:"text",text:`Stub prompt ${a}`}}]}}}}function ts(t,e,r){let s=Date.now(),n=t.get(e);return !n||s>n.resetTime?(t.set(e,{count:1,resetTime:s+6e4}),true):n.count>=r?false:(n.count++,true)}function ns(t){let{servers:e,toolConstraints:r={},resourceMappings:s=[],events:n={},autoConnect:o=false,autoReconnect:a=true,debug:c=false,allowDirectCalls:i=false}=t;!t.clientFactory&&(typeof process<"u"&&process.env?.NODE_ENV==="production"?console.warn(`[Directive MCP] WARNING: Using stub MCP client in production!
|
|
47
47
|
The stub client returns mock data and does not connect to real MCP servers.
|
|
48
48
|
Provide a real 'clientFactory' option to connect to actual MCP servers:
|
|
49
49
|
|
|
@@ -52,13 +52,13 @@ Provide a real 'clientFactory' option to connect to actual MCP servers:
|
|
|
52
52
|
const adapter = createMCPAdapter({
|
|
53
53
|
servers: [...],
|
|
54
54
|
clientFactory: (config) => new Client(config),
|
|
55
|
-
});`):c&&console.debug("[Directive MCP] Using stub client for development. Provide 'clientFactory' for production use."));let l=t.clientFactory??(v=>Wr(v,c)),p=t.approvalTimeoutMs??3e5,d={servers:new Map,toolConstraints:new Map(Object.entries(r)),rateLimiters:new Map,pendingApprovals:new Map,approvedRequests:new Set,rejectedRequests:new Set},y=0,f=new Map,m=new Map;function E(v){return new Promise((C,T)=>{if(d.approvedRequests.has(v)){d.approvedRequests.delete(v),d.pendingApprovals.delete(v),n.onApprovalResolved?.(v,true),C();return}if(d.rejectedRequests.has(v)){d.rejectedRequests.delete(v),d.pendingApprovals.delete(v);let w=m.get(v);m.delete(v),n.onApprovalResolved?.(v,false),T(new Error(`[Directive MCP] Tool call request ${v} was rejected${w?`: ${w}`:""}`));return}let D=setTimeout(()=>{f.delete(v),d.pendingApprovals.delete(v),T(new Error(`[Directive MCP] Approval timeout: Request ${v} was not approved or rejected within ${p}ms. Call adapter.approve("${v}") or adapter.reject("${v}") to resolve.`));},p);f.set(v,{resolve:C,reject:T,timeoutId:D});})}function h(v,C,T){let D=f.get(v);D?(clearTimeout(D.timeoutId),f.delete(v),d.pendingApprovals.delete(v),n.onApprovalResolved?.(v,C),C?D.resolve():D.reject(new Error(`[Directive MCP] Tool call request ${v} was rejected${T?`: ${T}`:""}`))):(C?d.approvedRequests.add(v):(d.rejectedRequests.add(v),T&&m.set(v,T)),setTimeout(()=>{d.approvedRequests.delete(v),d.rejectedRequests.delete(v),m.delete(v),d.pendingApprovals.delete(v);},p));}let g=new Map;for(let v of e)d.servers.set(v.name,{config:v,client:null,tools:[],resources:[],status:"disconnected"}),g.set(v.name,{timer:null,attempts:0,maxAttempts:v.retry?.maxAttempts??10,baseDelay:v.retry?.backoffMs??5e3});function b(v){let C=/[;|&$`><]/;if(v.command&&C.test(v.command))throw new Error(`[Directive MCP] Stdio command for server '${v.name}' contains shell metacharacters: '${v.command}'. This may indicate a command injection vulnerability. Use 'args' for command arguments instead.`);if(v.args){for(let T of v.args)if(C.test(T))throw new Error(`[Directive MCP] Stdio argument for server '${v.name}' contains shell metacharacters: '${T}'. This may indicate a command injection vulnerability.`)}}async function R(v){let C=d.servers.get(v);if(!C)throw new Error(`Unknown MCP server: ${v}`);if(C.status!=="connected"){C.config.transport==="stdio"&&b(C.config),C.status="connecting";try{let T=l(C.config);await T.connect(),C.client=T,C.status="connected";let D=g.get(v);D&&(D.attempts=0,D.timer&&(clearTimeout(D.timer),D.timer=null)),T.getCapabilities().tools&&(C.tools=await T.listTools()),T.getCapabilities().resources&&(C.resources=await T.listResources()),C.lastSync=Date.now(),n.onConnect?.(v);}catch(T){if(C.status="error",C.error=T instanceof Error?T:new Error(String(T)),n.onError?.(v,C.error),a){let D=g.get(v);if(D&&D.attempts<D.maxAttempts){D.attempts++;let w=Math.min(D.baseDelay*2**(D.attempts-1)+Math.random()*1e3,6e4);D.timer=setTimeout(()=>{D.timer=null,R(v).catch(()=>{});},w);}else D&&console.error(`[Directive MCP] Max reconnect attempts (${D.maxAttempts}) reached for server '${v}'. Call adapter.connectServer("${v}") to retry manually.`);}throw C.error}}}async function A(v){let C=g.get(v);C?.timer&&(clearTimeout(C.timer),C.timer=null,C.attempts=0);let T=d.servers.get(v);if(!(!T||!T.client))try{await T.client.disconnect();}finally{T.status="disconnected",T.client=null,n.onDisconnect?.(v);}}async function x(v,C,T,D){let w=d.servers.get(v);if(!w)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!w.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);let _=`${v}.${C}`,P=d.toolConstraints.get(_);if(P){if(P.rateLimit){let B=d.rateLimiters.get(_);if(!Qr(d.rateLimiters,_,P.rateLimit)){let $=B?.resetTime?new Date(B.resetTime).toISOString():"unknown";throw new Error(`[Directive MCP] Rate limit exceeded for '${_}': ${B?.count??0}/${P.rateLimit} requests per minute. Resets at ${$}.`)}}if(P.maxArgSize){let B=JSON.stringify(T).length;if(B>P.maxArgSize)throw new Error(`Arguments exceed max size (${B} > ${P.maxArgSize})`)}if(P.when&&!await P.when(D,T))throw new Error(`Constraint not satisfied for ${_}`);if(P.requireApproval){let B=`approval-${++y}-${Date.now()}`,$={id:B,server:v,tool:C,args:T,requestedAt:Date.now()};d.pendingApprovals.set(B,$),n.onApprovalRequest?.($),await E(B);}}n.onToolCall?.(v,C,T);let F=await Promise.race([w.client.callTool(C,T),new Promise((B,$)=>setTimeout(()=>$(new Error(`Tool call timeout: ${_}`)),P?.timeout??3e4))]);return n.onToolResult?.(v,C,F),F}let k={name:"mcp-adapter",onInit:async()=>{o&&await Promise.all(Array.from(d.servers.keys()).map(v=>R(v).catch(C=>console.error(`Failed to connect to ${v}:`,C))));},onDestroy:async()=>{for(let v of g.values())v.timer&&(clearTimeout(v.timer),v.timer=null);for(let[,v]of f)clearTimeout(v.timeoutId),v.reject(new Error("[Directive MCP] Adapter destroyed while awaiting approval"));f.clear(),await Promise.all(Array.from(d.servers.keys()).map(v=>A(v).catch(C=>console.error(`Failed to disconnect from ${v}:`,C))));}};async function O(v){for(let C of s)for(let[T,D]of d.servers)if(D.client){for(let w of D.resources)if(typeof C.pattern=="string"?Zr(w.uri,C.pattern):C.pattern.test(w.uri))try{let P=await D.client.readResource(w.uri),F=P.contents[0]?.text??"",B=C.transform?C.transform(F):F;v[C.factKey]=B,n.onResourceUpdate?.(T,w.uri,P);}catch(P){console.error(`Failed to sync resource ${w.uri}:`,P);}}}return {plugin:k,async connect(){await Promise.all(Array.from(d.servers.keys()).map(R));},connectServer:R,async disconnect(){await Promise.all(Array.from(d.servers.keys()).map(A));},disconnectServer:A,getTools(){let v=new Map;for(let[C,T]of d.servers)v.set(C,T.tools);return v},getResources(){let v=new Map;for(let[C,T]of d.servers)v.set(C,T.resources);return v},async callTool(v,C,T,D){return x(v,C,T,D)},async callToolDirect(v,C,T){if(!i)throw new Error("[Directive] callToolDirect is disabled by default. Pass { allowDirectCalls: true } to enable unconstrained tool calls.");process.env.NODE_ENV!=="production"&&console.warn("[Directive] callToolDirect bypasses all constraints (rate limits, approvals, timeouts).");let D=d.servers.get(v);if(!D)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!D.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);n.onToolCall?.(v,C,T);let w=await D.client.callTool(C,T);return n.onToolResult?.(v,C,w),w},async readResource(v,C){let T=d.servers.get(v);if(!T)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!T.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);let D=await T.client.readResource(C);return n.onResourceUpdate?.(v,C,D),D},syncResources:O,getServerStatus(v){return d.servers.get(v)},getAllServerStatuses(){return new Map(d.servers)},approve(v){if(!d.pendingApprovals.get(v)&&!f.has(v))throw new Error(`[Directive MCP] No pending approval request with ID '${v}'. Pending requests: ${Array.from(d.pendingApprovals.keys()).join(", ")||"(none)"}`);h(v,true);},reject(v,C){if(!d.pendingApprovals.get(v)&&!f.has(v))throw new Error(`[Directive MCP] No pending approval request with ID '${v}'. Pending requests: ${Array.from(d.pendingApprovals.keys()).join(", ")||"(none)"}`);h(v,false,C);},getPendingApprovals(){return Array.from(d.pendingApprovals.values())},getRejectionReason(v){return m.get(v)}}}var ee=new Map,Yr=200;function Zr(t,e){let r=ee.get(e);if(!r){let s=e.replace(/\*\*/g,"\0GLOBSTAR\0").replace(/\*/g,"\0STAR\0").replace(/\?/g,"\0QUESTION\0").replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\0GLOBSTAR\0/g,".*").replace(/\0STAR\0/g,"[^/]*").replace(/\0QUESTION\0/g,".");if(r=new RegExp(`^${s}$`),ee.size>=Yr){let n=ee.keys().next().value;n!==void 0&&ee.delete(n);}ee.set(e,r);}return r.test(t)}function es(t){let e=[];for(let[r,s]of t)for(let n of s)e.push({type:"function",function:{name:`${r}.${n.name}`,description:n.description??`Tool: ${n.name}`,parameters:n.inputSchema}});return e}function ts(t,e,r){return {type:"MCP_CALL_TOOL",server:t,tool:e,args:r}}function ns(t,e){return {type:"MCP_READ_RESOURCE",server:t,uri:e}}function rs(t,e,r){return {type:"MCP_GET_PROMPT",server:t,prompt:e,args:r}}function ss(t,e){return {type:"MCP_SYNC_RESOURCES",server:t,pattern:e}}var Se=class{constructor(e){this.max=e;if(e<1)throw new Error(`[Directive Evals] concurrency must be >= 1, got ${e}`)}queue=[];active=0;async acquire(e){if(this.active<this.max){this.active++;return}return new Promise((r,s)=>{let n={resolve:r,reject:s};this.queue.push(n),e&&e.addEventListener("abort",()=>{let o=this.queue.indexOf(n);o!==-1&&(this.queue.splice(o,1),s(new Error("Semaphore acquire aborted")));},{once:true});})}release(){if(this.active<=0)return;this.active--;let e=this.queue.shift();e&&(this.active++,e.resolve());}};function os(t,e){return typeof e=="function"?{name:t,fn:e,threshold:.5,weight:1}:{...e,name:t,threshold:e.threshold??.5,weight:e.weight??1}}function as(t,e){let r=0,s=0;for(let[n,o]of Object.entries(t)){let c=e[n]?.weight??1,i=Number.isFinite(o.score)?o.score:0;r+=i*c,s+=c;}return s===0?0:r/s}function is(t,e){let r=0,s=0;for(let[n,o]of Object.entries(t)){let c=e[n]?.weight??1,i=Number.isFinite(o)?o:0;r+=i*c,s+=c;}return s===0?0:r/s}var Ke={pii:[/\b\d{3}-\d{2}-\d{4}\b/,/\b(?:4\d{3}|5[1-5]\d{2}|6011)\d{12}\b/,/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/],violence:[/\b(kill|murder|attack|bomb|weapon|shoot|stab)\b/i],self_harm:[/\b(suicide|self[- ]harm|cut myself)\b/i],illegal:[/\b(hack into|break into|steal|counterfeit)\b/i]};function cs(t){return {name:"cost",fn:e=>{let r=Date.now(),s=e.result.totalTokens,n=s/t.maxTokensPerRun,o;return n<=.5?o=1:n>=2?o=0:o=1-(n-.5)/1.5,{score:o,passed:s<=t.maxTokensPerRun,reason:`${s} tokens (budget: ${t.maxTokensPerRun})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function us(t){return {name:"latency",fn:e=>{let r=Date.now(),s=e.runDurationMs,n=s/t.maxMs,o;return n<=.5?o=1:n>=2?o=0:o=1-(n-.5)/1.5,{score:o,passed:s<=t.maxMs,reason:`${Math.round(s)}ms (max: ${t.maxMs}ms)`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function ls(t){if(t.minLength!==void 0&&t.maxLength!==void 0&&t.minLength>t.maxLength)throw new Error("[Directive Evals] evalOutputLength: minLength must be <= maxLength");return {name:"outputLength",fn:e=>{let r=Date.now(),n=String(e.result.output).length,o=t.minLength??0,a=t.maxLength??Number.POSITIVE_INFINITY,c=n>=o&&n<=a,i;return c?i=1:n<o?i=o>0?Math.max(0,n/o):0:i=a>0&&a!==Number.POSITIVE_INFINITY?Math.max(0,1-(n-a)/a):0,{score:i,passed:c,reason:`${n} chars (range: ${o}-${a===Number.POSITIVE_INFINITY?"\u221E":a})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function ds(t={}){let e;if(t.blockedPatterns)e=t.blockedPatterns;else if(t.categories&&t.categories.length>0){e=[];for(let r of t.categories){let s=Ke[r];s&&e.push(...s);}}else {e=[];for(let r of Object.values(Ke))e.push(...r);}return {name:"safety",fn:r=>{let s=Date.now(),n=String(r.result.output),o=[];for(let c of e)c.test(n)&&o.push(c.source);return {score:o.length===0?1:0,passed:o.length===0,reason:o.length===0?"No unsafe patterns detected":`Matched patterns: ${o.join(", ")}`,durationMs:Date.now()-s}},threshold:1,weight:2}}function ps(t){return {name:"structure",fn:e=>{let r=Date.now(),s=e.result.output;if(t.type==="json")try{let o=typeof s=="string"?JSON.parse(s):s;if(!o||typeof o!="object"||Array.isArray(o))return {score:0,passed:!1,reason:"Output is not a valid JSON object",durationMs:Date.now()-r};if(t.requiredKeys&&o&&typeof o=="object"){let a=t.requiredKeys.filter(c=>!Object.hasOwn(o,c));if(a.length>0)return {score:1-a.length/t.requiredKeys.length,passed:!1,reason:`Missing keys: ${a.join(", ")}`,durationMs:Date.now()-r}}return {score:1,passed:!0,reason:"Valid JSON with all required keys",durationMs:Date.now()-r}}catch{return {score:0,passed:false,reason:"Output is not valid JSON",durationMs:Date.now()-r}}let n=String(s);return {score:n.length>0?1:0,passed:n.length>0,reason:n.length>0?"Non-empty output":"Empty output",durationMs:Date.now()-r}},threshold:.5,weight:1}}function gs(t){let e=t.promptTemplate??`You are evaluating an AI agent's output. Score it from 0.0 to 1.0.
|
|
55
|
+
});`):c&&console.debug("[Directive MCP] Using stub client for development. Provide 'clientFactory' for production use."));let l=t.clientFactory??(v=>es(v,c)),p=t.approvalTimeoutMs??3e5,d={servers:new Map,toolConstraints:new Map(Object.entries(r)),rateLimiters:new Map,pendingApprovals:new Map,approvedRequests:new Set,rejectedRequests:new Set},y=0,f=new Map,m=new Map;function S(v){return new Promise((C,T)=>{if(d.approvedRequests.has(v)){d.approvedRequests.delete(v),d.pendingApprovals.delete(v),n.onApprovalResolved?.(v,true),C();return}if(d.rejectedRequests.has(v)){d.rejectedRequests.delete(v),d.pendingApprovals.delete(v);let w=m.get(v);m.delete(v),n.onApprovalResolved?.(v,false),T(new Error(`[Directive MCP] Tool call request ${v} was rejected${w?`: ${w}`:""}`));return}let D=setTimeout(()=>{f.delete(v),d.pendingApprovals.delete(v),T(new Error(`[Directive MCP] Approval timeout: Request ${v} was not approved or rejected within ${p}ms. Call adapter.approve("${v}") or adapter.reject("${v}") to resolve.`));},p);f.set(v,{resolve:C,reject:T,timeoutId:D});})}function h(v,C,T){let D=f.get(v);D?(clearTimeout(D.timeoutId),f.delete(v),d.pendingApprovals.delete(v),n.onApprovalResolved?.(v,C),C?D.resolve():D.reject(new Error(`[Directive MCP] Tool call request ${v} was rejected${T?`: ${T}`:""}`))):(C?d.approvedRequests.add(v):(d.rejectedRequests.add(v),T&&m.set(v,T)),setTimeout(()=>{d.approvedRequests.delete(v),d.rejectedRequests.delete(v),m.delete(v),d.pendingApprovals.delete(v);},p));}let g=new Map;for(let v of e)d.servers.set(v.name,{config:v,client:null,tools:[],resources:[],status:"disconnected"}),g.set(v.name,{timer:null,attempts:0,maxAttempts:v.retry?.maxAttempts??10,baseDelay:v.retry?.backoffMs??5e3});function b(v){let C=/[;|&$`><]/;if(v.command&&C.test(v.command))throw new Error(`[Directive MCP] Stdio command for server '${v.name}' contains shell metacharacters: '${v.command}'. This may indicate a command injection vulnerability. Use 'args' for command arguments instead.`);if(v.args){for(let T of v.args)if(C.test(T))throw new Error(`[Directive MCP] Stdio argument for server '${v.name}' contains shell metacharacters: '${T}'. This may indicate a command injection vulnerability.`)}}async function R(v){let C=d.servers.get(v);if(!C)throw new Error(`Unknown MCP server: ${v}`);if(C.status!=="connected"){C.config.transport==="stdio"&&b(C.config),C.status="connecting";try{let T=l(C.config);await T.connect(),C.client=T,C.status="connected";let D=g.get(v);D&&(D.attempts=0,D.timer&&(clearTimeout(D.timer),D.timer=null)),T.getCapabilities().tools&&(C.tools=await T.listTools()),T.getCapabilities().resources&&(C.resources=await T.listResources()),C.lastSync=Date.now(),n.onConnect?.(v);}catch(T){if(C.status="error",C.error=T instanceof Error?T:new Error(String(T)),n.onError?.(v,C.error),a){let D=g.get(v);if(D&&D.attempts<D.maxAttempts){D.attempts++;let w=Math.min(D.baseDelay*2**(D.attempts-1)+Math.random()*1e3,6e4);D.timer=setTimeout(()=>{D.timer=null,R(v).catch(()=>{});},w);}else D&&console.error(`[Directive MCP] Max reconnect attempts (${D.maxAttempts}) reached for server '${v}'. Call adapter.connectServer("${v}") to retry manually.`);}throw C.error}}}async function A(v){let C=g.get(v);C?.timer&&(clearTimeout(C.timer),C.timer=null,C.attempts=0);let T=d.servers.get(v);if(!(!T||!T.client))try{await T.client.disconnect();}finally{T.status="disconnected",T.client=null,n.onDisconnect?.(v);}}async function x(v,C,T,D){let w=d.servers.get(v);if(!w)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!w.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);let _=`${v}.${C}`,P=d.toolConstraints.get(_);if(P){if(P.rateLimit){let B=d.rateLimiters.get(_);if(!ts(d.rateLimiters,_,P.rateLimit)){let $=B?.resetTime?new Date(B.resetTime).toISOString():"unknown";throw new Error(`[Directive MCP] Rate limit exceeded for '${_}': ${B?.count??0}/${P.rateLimit} requests per minute. Resets at ${$}.`)}}if(P.maxArgSize){let B=JSON.stringify(T).length;if(B>P.maxArgSize)throw new Error(`Arguments exceed max size (${B} > ${P.maxArgSize})`)}if(P.when&&!await P.when(D,T))throw new Error(`Constraint not satisfied for ${_}`);if(P.requireApproval){let B=`approval-${++y}-${Date.now()}`,$={id:B,server:v,tool:C,args:T,requestedAt:Date.now()};d.pendingApprovals.set(B,$),n.onApprovalRequest?.($),await S(B);}}n.onToolCall?.(v,C,T);let F=await Promise.race([w.client.callTool(C,T),new Promise((B,$)=>setTimeout(()=>$(new Error(`Tool call timeout: ${_}`)),P?.timeout??3e4))]);return n.onToolResult?.(v,C,F),F}let k={name:"mcp-adapter",onInit:async()=>{o&&await Promise.all(Array.from(d.servers.keys()).map(v=>R(v).catch(C=>console.error(`Failed to connect to ${v}:`,C))));},onDestroy:async()=>{for(let v of g.values())v.timer&&(clearTimeout(v.timer),v.timer=null);for(let[,v]of f)clearTimeout(v.timeoutId),v.reject(new Error("[Directive MCP] Adapter destroyed while awaiting approval"));f.clear(),await Promise.all(Array.from(d.servers.keys()).map(v=>A(v).catch(C=>console.error(`Failed to disconnect from ${v}:`,C))));}};async function O(v){for(let C of s)for(let[T,D]of d.servers)if(D.client){for(let w of D.resources)if(typeof C.pattern=="string"?ss(w.uri,C.pattern):C.pattern.test(w.uri))try{let P=await D.client.readResource(w.uri),F=P.contents[0]?.text??"",B=C.transform?C.transform(F):F;v[C.factKey]=B,n.onResourceUpdate?.(T,w.uri,P);}catch(P){console.error(`Failed to sync resource ${w.uri}:`,P);}}}return {plugin:k,async connect(){await Promise.all(Array.from(d.servers.keys()).map(R));},connectServer:R,async disconnect(){await Promise.all(Array.from(d.servers.keys()).map(A));},disconnectServer:A,getTools(){let v=new Map;for(let[C,T]of d.servers)v.set(C,T.tools);return v},getResources(){let v=new Map;for(let[C,T]of d.servers)v.set(C,T.resources);return v},async callTool(v,C,T,D){return x(v,C,T,D)},async callToolDirect(v,C,T){if(!i)throw new Error("[Directive] callToolDirect is disabled by default. Pass { allowDirectCalls: true } to enable unconstrained tool calls.");process.env.NODE_ENV!=="production"&&console.warn("[Directive] callToolDirect bypasses all constraints (rate limits, approvals, timeouts).");let D=d.servers.get(v);if(!D)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!D.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);n.onToolCall?.(v,C,T);let w=await D.client.callTool(C,T);return n.onToolResult?.(v,C,w),w},async readResource(v,C){let T=d.servers.get(v);if(!T)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!T.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);let D=await T.client.readResource(C);return n.onResourceUpdate?.(v,C,D),D},syncResources:O,getServerStatus(v){return d.servers.get(v)},getAllServerStatuses(){return new Map(d.servers)},approve(v){if(!d.pendingApprovals.get(v)&&!f.has(v))throw new Error(`[Directive MCP] No pending approval request with ID '${v}'. Pending requests: ${Array.from(d.pendingApprovals.keys()).join(", ")||"(none)"}`);h(v,true);},reject(v,C){if(!d.pendingApprovals.get(v)&&!f.has(v))throw new Error(`[Directive MCP] No pending approval request with ID '${v}'. Pending requests: ${Array.from(d.pendingApprovals.keys()).join(", ")||"(none)"}`);h(v,false,C);},getPendingApprovals(){return Array.from(d.pendingApprovals.values())},getRejectionReason(v){return m.get(v)}}}var te=new Map,rs=200;function ss(t,e){let r=te.get(e);if(!r){let s=e.replace(/\*\*/g,"\0GLOBSTAR\0").replace(/\*/g,"\0STAR\0").replace(/\?/g,"\0QUESTION\0").replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\0GLOBSTAR\0/g,".*").replace(/\0STAR\0/g,"[^/]*").replace(/\0QUESTION\0/g,".");if(r=new RegExp(`^${s}$`),te.size>=rs){let n=te.keys().next().value;n!==void 0&&te.delete(n);}te.set(e,r);}return r.test(t)}function os(t){let e=[];for(let[r,s]of t)for(let n of s)e.push({type:"function",function:{name:`${r}.${n.name}`,description:n.description??`Tool: ${n.name}`,parameters:n.inputSchema}});return e}function as(t,e,r){return {type:"MCP_CALL_TOOL",server:t,tool:e,args:r}}function is(t,e){return {type:"MCP_READ_RESOURCE",server:t,uri:e}}function cs(t,e,r){return {type:"MCP_GET_PROMPT",server:t,prompt:e,args:r}}function us(t,e){return {type:"MCP_SYNC_RESOURCES",server:t,pattern:e}}var Se=class{constructor(e){this.max=e;if(e<1)throw new Error(`[Directive Evals] concurrency must be >= 1, got ${e}`)}queue=[];active=0;async acquire(e){if(this.active<this.max){this.active++;return}return new Promise((r,s)=>{let n={resolve:r,reject:s};this.queue.push(n),e&&e.addEventListener("abort",()=>{let o=this.queue.indexOf(n);o!==-1&&(this.queue.splice(o,1),s(new Error("Semaphore acquire aborted")));},{once:true});})}release(){if(this.active<=0)return;this.active--;let e=this.queue.shift();e&&(this.active++,e.resolve());}};function ls(t,e){return typeof e=="function"?{name:t,fn:e,threshold:.5,weight:1}:{...e,name:t,threshold:e.threshold??.5,weight:e.weight??1}}function ds(t,e){let r=0,s=0;for(let[n,o]of Object.entries(t)){let c=e[n]?.weight??1,i=Number.isFinite(o.score)?o.score:0;r+=i*c,s+=c;}return s===0?0:r/s}function ps(t,e){let r=0,s=0;for(let[n,o]of Object.entries(t)){let c=e[n]?.weight??1,i=Number.isFinite(o)?o:0;r+=i*c,s+=c;}return s===0?0:r/s}var Ke={pii:[/\b\d{3}-\d{2}-\d{4}\b/,/\b(?:4\d{3}|5[1-5]\d{2}|6011)\d{12}\b/,/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/],violence:[/\b(kill|murder|attack|bomb|weapon|shoot|stab)\b/i],self_harm:[/\b(suicide|self[- ]harm|cut myself)\b/i],illegal:[/\b(hack into|break into|steal|counterfeit)\b/i]};function gs(t){return {name:"cost",fn:e=>{let r=Date.now(),s=e.result.totalTokens,n=s/t.maxTokensPerRun,o;return n<=.5?o=1:n>=2?o=0:o=1-(n-.5)/1.5,{score:o,passed:s<=t.maxTokensPerRun,reason:`${s} tokens (budget: ${t.maxTokensPerRun})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function ms(t){return {name:"latency",fn:e=>{let r=Date.now(),s=e.runDurationMs,n=s/t.maxMs,o;return n<=.5?o=1:n>=2?o=0:o=1-(n-.5)/1.5,{score:o,passed:s<=t.maxMs,reason:`${Math.round(s)}ms (max: ${t.maxMs}ms)`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function fs(t){if(t.minLength!==void 0&&t.maxLength!==void 0&&t.minLength>t.maxLength)throw new Error("[Directive Evals] evalOutputLength: minLength must be <= maxLength");return {name:"outputLength",fn:e=>{let r=Date.now(),n=String(e.result.output).length,o=t.minLength??0,a=t.maxLength??Number.POSITIVE_INFINITY,c=n>=o&&n<=a,i;return c?i=1:n<o?i=o>0?Math.max(0,n/o):0:i=a>0&&a!==Number.POSITIVE_INFINITY?Math.max(0,1-(n-a)/a):0,{score:i,passed:c,reason:`${n} chars (range: ${o}-${a===Number.POSITIVE_INFINITY?"\u221E":a})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function ys(t={}){let e;if(t.blockedPatterns)e=t.blockedPatterns;else if(t.categories&&t.categories.length>0){e=[];for(let r of t.categories){let s=Ke[r];s&&e.push(...s);}}else {e=[];for(let r of Object.values(Ke))e.push(...r);}return {name:"safety",fn:r=>{let s=Date.now(),n=String(r.result.output),o=[];for(let c of e)c.test(n)&&o.push(c.source);return {score:o.length===0?1:0,passed:o.length===0,reason:o.length===0?"No unsafe patterns detected":`Matched patterns: ${o.join(", ")}`,durationMs:Date.now()-s}},threshold:1,weight:2}}function hs(t){return {name:"structure",fn:e=>{let r=Date.now(),s=e.result.output;if(t.type==="json")try{let o=typeof s=="string"?JSON.parse(s):s;if(!o||typeof o!="object"||Array.isArray(o))return {score:0,passed:!1,reason:"Output is not a valid JSON object",durationMs:Date.now()-r};if(t.requiredKeys&&o&&typeof o=="object"){let a=t.requiredKeys.filter(c=>!Object.hasOwn(o,c));if(a.length>0)return {score:1-a.length/t.requiredKeys.length,passed:!1,reason:`Missing keys: ${a.join(", ")}`,durationMs:Date.now()-r}}return {score:1,passed:!0,reason:"Valid JSON with all required keys",durationMs:Date.now()-r}}catch{return {score:0,passed:false,reason:"Output is not valid JSON",durationMs:Date.now()-r}}let n=String(s);return {score:n.length>0?1:0,passed:n.length>0,reason:n.length>0?"Non-empty output":"Empty output",durationMs:Date.now()-r}},threshold:.5,weight:1}}function vs(t){let e=t.promptTemplate??`You are evaluating an AI agent's output. Score it from 0.0 to 1.0.
|
|
56
56
|
|
|
57
57
|
Input: {{input}}
|
|
58
58
|
Expected: {{expected}}
|
|
59
59
|
Actual Output: {{output}}
|
|
60
60
|
|
|
61
|
-
Respond with ONLY a JSON object: {"score": <number>, "reason": "<brief explanation>"}`;return {name:"judge",fn:async r=>{let s=Date.now(),n=e.replaceAll("{{input}}",r.testCase.input).replaceAll("{{expected}}",r.testCase.expected??"N/A").replaceAll("{{output}}",String(r.result.output)),o=t.timeoutMs??3e4,a=new AbortController,c=setTimeout(()=>a.abort(),o),i=t.signal?AbortSignal.any([t.signal,a.signal]):a.signal;try{let l=(await t.runner(t.judge,n,{signal:i})).output;if(typeof l!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-s};let p=JSON.parse(l),d=Math.max(0,Math.min(1,p.score));return {score:d,passed:d>=.5,reason:p.reason??`Judge score: ${d}`,durationMs:Date.now()-s}}catch(u){return {score:0,passed:false,reason:`Judge error: ${u instanceof Error?u.message:String(u)}`,durationMs:Date.now()-s}}finally{clearTimeout(c);}},threshold:.5,weight:1.5}}function
|
|
61
|
+
Respond with ONLY a JSON object: {"score": <number>, "reason": "<brief explanation>"}`;return {name:"judge",fn:async r=>{let s=Date.now(),n=e.replaceAll("{{input}}",r.testCase.input).replaceAll("{{expected}}",r.testCase.expected??"N/A").replaceAll("{{output}}",String(r.result.output)),o=t.timeoutMs??3e4,a=new AbortController,c=setTimeout(()=>a.abort(),o),i=t.signal?AbortSignal.any([t.signal,a.signal]):a.signal;try{let l=(await t.runner(t.judge,n,{signal:i})).output;if(typeof l!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-s};let p=JSON.parse(l),d=Math.max(0,Math.min(1,p.score));return {score:d,passed:d>=.5,reason:p.reason??`Judge score: ${d}`,durationMs:Date.now()-s}}catch(u){return {score:0,passed:false,reason:`Judge error: ${u instanceof Error?u.message:String(u)}`,durationMs:Date.now()-s}}finally{clearTimeout(c);}},threshold:.5,weight:1.5}}function bs(t={}){let e=t.mode??"contains",r=t.caseInsensitive??true;return {name:"match",fn:s=>{let n=Date.now(),o=s.testCase.expected;if(!o)return {score:1,passed:true,reason:"No expected output to match",durationMs:Date.now()-n};let a=String(s.result.output),c=r?a.toLowerCase():a,i=r?o.toLowerCase():o,u=false;if(e==="exact")u=c===i;else if(e==="contains")u=c.includes(i);else if(e==="regex"){if(o.length>500)return {score:0,passed:false,reason:`Regex pattern too long (${o.length} chars, max 500)`,durationMs:Date.now()-n};if(/([+*}])\)([+*{])/.test(o)||/([+*}])\]([+*{])/.test(o))return {score:0,passed:false,reason:"Pattern contains dangerous nested quantifiers",durationMs:Date.now()-n};try{u=new RegExp(o,r?"i":"").test(a);}catch{return {score:0,passed:false,reason:`Invalid regex pattern: ${o}`,durationMs:Date.now()-n}}}return {score:u?1:0,passed:u,reason:u?`Output ${e} match`:`Output does not ${e} match expected`,durationMs:Date.now()-n}},threshold:1,weight:1}}var Ss=`You are evaluating an AI agent's output for faithfulness to the provided context.
|
|
62
62
|
|
|
63
63
|
Faithfulness measures whether all claims in the output are supported by the context.
|
|
64
64
|
Score 1.0 if every claim is grounded in the context.
|
|
@@ -67,7 +67,7 @@ Score 0.0 if the output contains fabricated information not in the context.
|
|
|
67
67
|
Context: {{context}}
|
|
68
68
|
Agent Output: {{output}}
|
|
69
69
|
|
|
70
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
70
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function Es(t){return {name:"faithfulness",fn:async e=>{let r=Date.now(),s=e.testCase.context??e.testCase.expected;if(!s)return {score:1,passed:true,reason:"No context provided for faithfulness check",durationMs:Date.now()-r};let n=Ss.replaceAll("{{context}}",s).replaceAll("{{output}}",String(e.result.output)),o=t.timeoutMs??3e4,a=new AbortController,c=setTimeout(()=>a.abort(),o),i=t.signal?AbortSignal.any([t.signal,a.signal]):a.signal;try{let l=(await t.runner(t.judge,n,{signal:i})).output;if(typeof l!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let p=JSON.parse(l),d=Math.max(0,Math.min(1,p.score));return {score:d,passed:d>=.7,reason:p.reason??`Faithfulness score: ${d}`,durationMs:Date.now()-r}}catch(u){return {score:0,passed:false,reason:`Faithfulness eval error: ${u instanceof Error?u.message:String(u)}`,durationMs:Date.now()-r}}finally{clearTimeout(c);}},threshold:.7,weight:1.5}}var Rs=`You are evaluating an AI agent's output for relevance to the user's question.
|
|
71
71
|
|
|
72
72
|
Relevance measures whether the output directly addresses the question asked.
|
|
73
73
|
Score 1.0 if the output fully and directly answers the question.
|
|
@@ -76,7 +76,7 @@ Score 0.0 if the output is completely off-topic or irrelevant.
|
|
|
76
76
|
User Question: {{input}}
|
|
77
77
|
Agent Output: {{output}}
|
|
78
78
|
|
|
79
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
79
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function ws(t){return {name:"relevance",fn:async e=>{let r=Date.now(),s=Rs.replaceAll("{{input}}",e.testCase.input).replaceAll("{{output}}",String(e.result.output)),n=t.timeoutMs??3e4,o=new AbortController,a=setTimeout(()=>o.abort(),n),c=t.signal?AbortSignal.any([t.signal,o.signal]):o.signal;try{let u=(await t.runner(t.judge,s,{signal:c})).output;if(typeof u!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let l=JSON.parse(u),p=Math.max(0,Math.min(1,l.score));return {score:p,passed:p>=.7,reason:l.reason??`Relevance score: ${p}`,durationMs:Date.now()-r}}catch(i){return {score:0,passed:false,reason:`Relevance eval error: ${i instanceof Error?i.message:String(i)}`,durationMs:Date.now()-r}}finally{clearTimeout(a);}},threshold:.7,weight:1.5}}var Cs=`You are evaluating an AI agent's output for coherence and logical consistency.
|
|
80
80
|
|
|
81
81
|
Coherence measures whether the output is well-structured, logically consistent,
|
|
82
82
|
and flows naturally. Check for contradictions, non-sequiturs, and clarity.
|
|
@@ -85,7 +85,7 @@ Score 0.0 if the output is incoherent, contradictory, or disorganized.
|
|
|
85
85
|
|
|
86
86
|
Agent Output: {{output}}
|
|
87
87
|
|
|
88
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
88
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function Ms(t){return {name:"coherence",fn:async e=>{let r=Date.now(),s=Cs.replaceAll("{{output}}",String(e.result.output)),n=t.timeoutMs??3e4,o=new AbortController,a=setTimeout(()=>o.abort(),n),c=t.signal?AbortSignal.any([t.signal,o.signal]):o.signal;try{let u=(await t.runner(t.judge,s,{signal:c})).output;if(typeof u!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let l=JSON.parse(u),p=Math.max(0,Math.min(1,l.score));return {score:p,passed:p>=.7,reason:l.reason??`Coherence score: ${p}`,durationMs:Date.now()-r}}catch(i){return {score:0,passed:false,reason:`Coherence eval error: ${i instanceof Error?i.message:String(i)}`,durationMs:Date.now()-r}}finally{clearTimeout(a);}},threshold:.7,weight:1}}function As(t){let{agents:e,runner:r,dataset:s,runOptions:n,concurrency:o=5,timeline:a,onCaseComplete:c,onAgentComplete:i,signal:u}=t;if(s.length===0)throw new Error("[Directive Evals] Dataset must contain at least one test case");let l=new Se(o),p={};for(let[f,m]of Object.entries(t.criteria))p[f]=ls(f,m);async function d(f,m){try{await l.acquire(u);}catch{let S={};for(let h of Object.keys(p))S[h]={score:0,passed:false,reason:"Evaluation aborted",durationMs:0};return {testCase:m,agentName:f.name,runResult:{output:"",messages:[],toolCalls:[],totalTokens:0},scores:S,overallScore:0,allPassed:false,runDurationMs:0}}try{let S=Date.now(),h;try{h=await r(f,m.input,{...n,signal:u});}catch(O){let v={output:"",messages:[],toolCalls:[],totalTokens:0},C={};for(let T of Object.keys(p))C[T]={score:0,passed:!1,reason:`Agent error: ${O instanceof Error?`${O.name}: ${O.message}`:String(O)}`,durationMs:0};return {testCase:m,agentName:f.name,runResult:v,scores:C,overallScore:0,allPassed:!1,runDurationMs:Date.now()-S}}let g=Date.now()-S,b={agent:f,testCase:m,result:h,runDurationMs:g},R={};for(let[O,v]of Object.entries(p))try{let C=await v.fn(b);R[O]={...C,passed:C.score>=(v.threshold??.5)};}catch(C){R[O]={score:0,passed:!1,reason:`Criterion error: ${C instanceof Error?`${C.name}: ${C.message}`:String(C)}`,durationMs:0};}let A=ds(R,p),x=Object.values(R).every(O=>O.passed),k={testCase:m,agentName:f.name,runResult:h,scores:R,overallScore:A,allPassed:x,runDurationMs:g};return a&&a.record({type:"agent_complete",timestamp:Date.now(),agentId:`eval:${f.name}`,outputLength:String(h.output).length,totalTokens:h.totalTokens,durationMs:g,snapshotId:null}),c?.(k),k}finally{l.release();}}function y(f,m){let S={},h={},g=0,b=0,R=0;for(let v of Object.keys(p))S[v]=0,h[v]=0;for(let v of m){g+=v.runResult.totalTokens,b+=v.runDurationMs,v.allPassed&&R++;for(let[C,T]of Object.entries(v.scores))S[C]=(S[C]??0)+T.score,T.passed&&(h[C]=(h[C]??0)+1);}let A=m.length,x={},k={};for(let v of Object.keys(p))x[v]=A>0?(S[v]??0)/A:0,k[v]=A>0?(h[v]??0)/A:0;let O=A>0?ps(x,p):0;return {agentName:f,criterionAverages:x,criterionPassRates:k,overallScore:O,passRate:A>0?R/A:0,totalTokens:g,avgLatencyMs:A>0?b/A:0,totalCases:A,passedCases:R}}return {getAgents:()=>[...e],getCriteria:()=>Object.keys(p),getDataset:()=>[...s],async run(){let f=Date.now(),m=[],S={},h=e.map(async R=>{if(u?.aborted)return;let A=await Promise.all(s.map(x=>d(R,x)));return {agent:R,agentResults:A}}),g=await Promise.all(h);for(let R of g){if(!R)continue;m.push(...R.agentResults);let A=y(R.agent.name,R.agentResults);S[R.agent.name]=A,i?.(A);}let b=Date.now();return {summary:S,details:m,durationMs:b-f,totalTokens:m.reduce((R,A)=>R+A.runResult.totalTokens,0),startedAt:f,completedAt:b}},async runAgent(f){let m=e.find(g=>g.name===f);if(!m)throw new Error(`[Directive Evals] Unknown agent: "${f}"`);let S=await Promise.all(s.map(g=>d(m,g))),h=y(m.name,S);return i?.(h),h}}}function xs(t,e){let r=[];for(let[s,n]of Object.entries(t.summary))if(e.minScore!==void 0&&n.overallScore<e.minScore&&r.push(`Agent "${s}" score ${n.overallScore.toFixed(3)} < minimum ${e.minScore}`),e.minPassRate!==void 0&&n.passRate<e.minPassRate&&r.push(`Agent "${s}" pass rate ${n.passRate.toFixed(3)} < minimum ${e.minPassRate}`),e.failOn)for(let o of e.failOn){let a=n.criterionPassRates[o];a!==void 0&&a<1&&r.push(`Agent "${s}" criterion "${o}" pass rate ${a.toFixed(3)} < 1.0 (failOn)`);}if(r.length>0)throw new Error(`[Directive Evals] Assertion failed:
|
|
89
89
|
${r.join(`
|
|
90
|
-
`)}`)}var L={UNSET:0,OK:1,ERROR:2},ie=class{constructor(e,r,s,n,o,a){this.name=e;this.spanId=r;this.traceId=s;this.parentSpanId=n;this.onEnd=a;if(this.startTime=Date.now(),o)for(let[c,i]of Object.entries(o))this.attributes[c]=i;}attributes=Object.create(null);spanEvents=[];status={code:L.UNSET};startTime;endTime=0;setAttribute(e,r){this.attributes[e]=r;}addEvent(e,r){this.spanEvents.push({name:e,attributes:r,timestamp:Date.now()});}setStatus(e){this.status=e;}end(){this.endTime=Date.now(),this.onEnd?.(this);}toSpanData(){return {name:this.name,traceId:this.traceId,spanId:this.spanId,parentSpanId:this.parentSpanId,attributes:{...this.attributes},events:[...this.spanEvents],status:{...this.status},startTime:this.startTime,endTime:this.endTime,durationMs:this.endTime-this.startTime}}},Ee=class{spans=[];startSpan(e,r){let s=r?.spanId??`fallback-${crypto.randomUUID()}`,n=r?.traceId??`fallback-${crypto.randomUUID()}`,o=r?.parentSpanId;return new ie(e,s,n,o,r?.attributes,a=>{this.spans.push(a.toSpanData());})}clear(){this.spans.length=0;}};function ws(t){let e=t.spanPrefix??"directive.ai",r=t.instrumentEvents,s=t.spanTtlMs??3e5,n=!t.tracer,o=n?new Ee:null,a=t.tracer??o,c=0;function i(){return `${Date.now().toString(36)}-${(c++).toString(36)}`}function u(){return `${Date.now().toString(36)}-${crypto.randomUUID().slice(0,8)}`}let l=new Map,p=0,d=new Map,y=[],f=null,m=false;function E(S){return r?r.has(S):true}function h(S,M){return `${S}:${M}:${p++}`}function g(S,M){let I=`${S}:${M}`,N=d.get(I);if(N){for(let G=N.length-1;G>=0;G--){let H=l.get(N[G]);if(H)return {key:N[G],entry:H}}d.delete(I);}return null}function b(S,M,I,N){let G=`${S}:${M}`;N.indexKey=G,l.set(I,N);let H=d.get(G);H?H.push(I):d.set(G,[I]);}function R(S){let M=l.get(S);l.delete(S);let I=M?.indexKey;if(I){let N=d.get(I);if(N){let G=N.indexOf(S);G!==-1&&N.splice(G,1),N.length===0&&d.delete(I);}}}function A(){let S=Date.now();if(l.size<1e4){for(let[I,N]of l)S-N.startTime>s&&(v(N,"directive.stale",true),T(N,{code:L.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),k(N),R(I),true);return void 0}for(let[M,I]of l)S-I.startTime>s&&(v(I,"directive.stale",true),T(I,{code:L.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),k(I),R(M));}function x(S,M,I){let N=i(),G=I?.traceId??u(),H=I?.spanId,J;n?J=a.startSpan(S,{attributes:M,spanId:N,traceId:G,parentSpanId:H}):J=a.startSpan(S,{attributes:M});let ue={span:J,spanId:N,traceId:G,startTime:Date.now()};return n||(ue.shadow={span:J,name:S,spanId:N,traceId:G,parentSpanId:H,attributes:{...M},events:[],status:{code:L.UNSET},startTime:ue.startTime}),{span:J,entry:ue}}function k(S){S.span.end(),t.onSpanEnd&&t.onSpanEnd(O(S));}function O(S){if(S.span instanceof ie)return S.span.toSpanData();if(S.shadow){let I=Date.now();return {name:S.shadow.name,traceId:S.shadow.traceId,spanId:S.shadow.spanId,parentSpanId:S.shadow.parentSpanId,attributes:{...S.shadow.attributes},events:[...S.shadow.events],status:{...S.shadow.status},startTime:S.shadow.startTime,endTime:I,durationMs:I-S.shadow.startTime}}let M=Date.now();return {name:"unknown",traceId:S.traceId,spanId:S.spanId,attributes:{},events:[],status:{code:L.UNSET},startTime:S.startTime,endTime:M,durationMs:M-S.startTime}}function v(S,M,I){S.span.setAttribute(M,I),S.shadow&&(S.shadow.attributes[M]=I);}function C(S,M,I){S.span.addEvent(M,I),S.shadow&&S.shadow.events.push({name:M,attributes:I,timestamp:Date.now()});}function T(S,M){S.span.setStatus(M),S.shadow&&(S.shadow.status={...M});}function D(S){if(E(S.type))switch(A(),S.type){case "agent_start":w(S);break;case "agent_complete":_(S);break;case "agent_error":P(S);break;case "guardrail_check":F(S);break;case "constraint_evaluate":B(S);break;case "resolver_start":$(S);break;case "resolver_complete":U(S);break;case "resolver_error":q(S);break;case "pattern_start":ce(S);break;case "pattern_complete":We(S);break;default:if(S.agentId){let M=g("agent",S.agentId);M&&C(M.entry,S.type,{"event.id":S.id,"event.timestamp":S.timestamp});}}}function w(S){let M=y.length>0?y[y.length-1]:null,{entry:I}=x(`${e}.agent.run`,{"directive.service":t.serviceName,"directive.agent.name":S.agentId,"directive.agent.input_length":S.inputLength,"gen_ai.operation.name":"agent.run","gen_ai.agent.name":S.agentId},M),N=h("agent",S.agentId);b("agent",S.agentId,N,I);}function _(S){let M=g("agent",S.agentId);M&&(v(M.entry,"directive.agent.output_length",S.outputLength),v(M.entry,"directive.agent.total_tokens",S.totalTokens),v(M.entry,"directive.agent.duration_ms",S.durationMs),v(M.entry,"gen_ai.usage.total_tokens",S.totalTokens),T(M.entry,{code:L.OK}),k(M.entry),R(M.key));}function P(S){let M=g("agent",S.agentId);M&&(v(M.entry,"directive.agent.duration_ms",S.durationMs),v(M.entry,"directive.agent.error",S.errorMessage),v(M.entry,"gen_ai.error.message",S.errorMessage),T(M.entry,{code:L.ERROR,message:S.errorMessage}),k(M.entry),R(M.key));}function F(S){let M=S.agentId?g("agent",S.agentId)?.entry??null:null,{entry:I}=x(`${e}.guardrail.check`,{"directive.service":t.serviceName,"directive.guardrail.name":S.guardrailName,"directive.guardrail.type":S.guardrailType,"directive.guardrail.passed":S.passed,"directive.guardrail.duration_ms":S.durationMs,"gen_ai.guardrail.name":S.guardrailName,"gen_ai.guardrail.type":S.guardrailType,"gen_ai.guardrail.passed":S.passed},M);S.reason&&v(I,"directive.guardrail.reason",S.reason),T(I,{code:S.passed?L.OK:L.ERROR,message:S.passed?void 0:S.reason}),k(I);}function B(S){if(S.agentId){let I=g("agent",S.agentId);if(I){C(I.entry,"constraint_evaluate",{"directive.constraint.id":S.constraintId,"directive.constraint.fired":S.fired});return}}let{entry:M}=x(`${e}.constraint.evaluate`,{"directive.service":t.serviceName,"directive.constraint.id":S.constraintId,"directive.constraint.fired":S.fired},null);T(M,{code:L.OK}),k(M);}function $(S){let I=(S.agentId?g("agent",S.agentId)?.entry??null:null)??(y.length>0?y[y.length-1]:null),{entry:N}=x(`${e}.resolver.execute`,{"directive.service":t.serviceName,"directive.resolver.id":S.resolverId,"directive.resolver.requirement_type":S.requirementType},I),G=h("resolver",S.resolverId);b("resolver",S.resolverId,G,N);}function U(S){let M=g("resolver",S.resolverId);M&&(v(M.entry,"directive.resolver.duration_ms",S.durationMs),T(M.entry,{code:L.OK}),k(M.entry),R(M.key));}function q(S){let M=g("resolver",S.resolverId);M&&(v(M.entry,"directive.resolver.duration_ms",S.durationMs),v(M.entry,"directive.resolver.error",S.errorMessage),T(M.entry,{code:L.ERROR,message:S.errorMessage}),k(M.entry),R(M.key));}function ce(S){let M=y.length>0?y[y.length-1]:null,{entry:I}=x(`${e}.pattern.${S.patternType}`,{"directive.service":t.serviceName,"directive.pattern.id":S.patternId,"directive.pattern.type":S.patternType},M),N=h("pattern",S.patternId);b("pattern",S.patternId,N,I),y.length<100&&y.push(I);}function We(S){let M=g("pattern",S.patternId);if(M){v(M.entry,"directive.pattern.duration_ms",S.durationMs),S.error?(v(M.entry,"directive.pattern.error",S.error),T(M.entry,{code:L.ERROR,message:S.error})):T(M.entry,{code:L.OK}),k(M.entry),R(M.key);let I=y.indexOf(M.entry);I!==-1&&y.splice(I,1);}}return {attach(S){if(f&&f!==S)throw new Error("[Directive OTEL] Plugin already attached to a different timeline. Create a new plugin instance.");f=S;let M=S.subscribe(D),I=setInterval(A,Math.min(s,6e4));return ()=>{M(),clearInterval(I),f=null;for(let[N,G]of l)v(G,"directive.detached",true),T(G,{code:L.ERROR,message:"Plugin detached while span was active"}),k(G);l.clear(),d.clear(),y.length=0;}},getSpans(){return o?[...o.spans]:(m||(m=true,typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.warn("[Directive OTEL] getSpans() returns [] when using an external tracer. Use the onSpanEnd callback to collect span data instead.")),[])},clearSpans(){o?.clear();},getTracer(){return a},getActiveSpanCount(){return l.size}}}Object.defineProperty(exports,"createAgentOrchestrator",{enumerable:true,get:function(){return chunkL35IQAWD_cjs.a}});Object.defineProperty(exports,"createRunner",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.e}});Object.defineProperty(exports,"estimateCost",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.c}});Object.defineProperty(exports,"hasPendingApprovals",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.b}});Object.defineProperty(exports,"isAgentRunning",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.a}});Object.defineProperty(exports,"validateBaseURL",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.d}});Object.defineProperty(exports,"GuardrailError",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.a}});Object.defineProperty(exports,"InMemoryCheckpointStore",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.G}});Object.defineProperty(exports,"MAX_BREAKPOINT_HISTORY",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.A}});Object.defineProperty(exports,"ReflectionExhaustedError",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.W}});Object.defineProperty(exports,"Semaphore",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.Z}});Object.defineProperty(exports,"StructuredOutputError",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.J}});Object.defineProperty(exports,"adaptOutputGuardrail",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.P}});Object.defineProperty(exports,"aggregateTokens",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ua}});Object.defineProperty(exports,"allReadyStrategy",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ka}});Object.defineProperty(exports,"capabilityRoute",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.xa}});Object.defineProperty(exports,"collectOutputs",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ta}});Object.defineProperty(exports,"collectTokens",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.Q}});Object.defineProperty(exports,"combineStreamingGuardrails",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.O}});Object.defineProperty(exports,"composePatterns",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.va}});Object.defineProperty(exports,"concatResults",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ra}});Object.defineProperty(exports,"costEfficientStrategy",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ma}});Object.defineProperty(exports,"createBreakpointId",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.B}});Object.defineProperty(exports,"createCheckpointId",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.E}});Object.defineProperty(exports,"createDebugTimeline",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.i}});Object.defineProperty(exports,"createDebugTimelinePlugin",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.j}});Object.defineProperty(exports,"createHealthMonitor",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.V}});Object.defineProperty(exports,"createInitialBreakpointState",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.D}});Object.defineProperty(exports,"createLengthStreamingGuardrail",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.M}});Object.defineProperty(exports,"createMultiAgentOrchestrator",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.Da}});Object.defineProperty(exports,"createPatternStreamingGuardrail",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.N}});Object.defineProperty(exports,"createStreamingRunner",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.K}});Object.defineProperty(exports,"createToxicityStreamingGuardrail",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.L}});Object.defineProperty(exports,"dag",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ga}});Object.defineProperty(exports,"debate",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.za}});Object.defineProperty(exports,"derivedConstraint",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.Ba}});Object.defineProperty(exports,"diffCheckpoints",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.aa}});Object.defineProperty(exports,"extractJsonFromOutput",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.H}});Object.defineProperty(exports,"filterStream",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.S}});Object.defineProperty(exports,"findAgentsByCapability",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.wa}});Object.defineProperty(exports,"forkFromCheckpoint",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ba}});Object.defineProperty(exports,"formatSystemMeta",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.g}});Object.defineProperty(exports,"getCheckpointProgress",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.$}});Object.defineProperty(exports,"getPatternStep",{enumerable:true,get:function(){return chunkKALRDVN5_cjs._}});Object.defineProperty(exports,"goal",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ja}});Object.defineProperty(exports,"highestImpactStrategy",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.la}});Object.defineProperty(exports,"isGuardrailError",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.b}});Object.defineProperty(exports,"mapStream",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.T}});Object.defineProperty(exports,"matchBreakpoint",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.C}});Object.defineProperty(exports,"mergeTaggedStreams",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.U}});Object.defineProperty(exports,"parallel",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.da}});Object.defineProperty(exports,"patternFromJSON",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.oa}});Object.defineProperty(exports,"patternToJSON",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.na}});Object.defineProperty(exports,"pickBestResult",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.sa}});Object.defineProperty(exports,"race",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ia}});Object.defineProperty(exports,"reflect",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ha}});Object.defineProperty(exports,"runAgentRequirement",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.qa}});Object.defineProperty(exports,"runDebate",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.Aa}});Object.defineProperty(exports,"selectAgent",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.pa}});Object.defineProperty(exports,"sequential",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ea}});Object.defineProperty(exports,"spawnOnCondition",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.ya}});Object.defineProperty(exports,"spawnPool",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.Ca}});Object.defineProperty(exports,"supervisor",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.fa}});Object.defineProperty(exports,"tapStream",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.R}});Object.defineProperty(exports,"toAIContext",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.h}});Object.defineProperty(exports,"validateCheckpoint",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.F}});Object.defineProperty(exports,"withReflection",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.X}});Object.defineProperty(exports,"withStructuredOutput",{enumerable:true,get:function(){return chunkKALRDVN5_cjs.I}});Object.defineProperty(exports,"CircuitBreakerOpenError",{enumerable:true,get:function(){return plugins.CircuitBreakerOpenError}});Object.defineProperty(exports,"createCircuitBreaker",{enumerable:true,get:function(){return plugins.createCircuitBreaker}});Object.defineProperty(exports,"createOTLPExporter",{enumerable:true,get:function(){return plugins.createOTLPExporter}});exports.AllProvidersFailedError=oe;exports.BudgetExceededError=Y;exports.DEFAULT_INJECTION_PATTERNS=Q;exports.OtelStatusCode=L;exports.RetryExhaustedError=se;exports.STRICT_INJECTION_PATTERNS=me;exports.byAgentName=Gr;exports.byInputLength=jr;exports.byPattern=Br;exports.connectDevTools=Hr;exports.convertToolsForLLM=es;exports.createAgentAuditHandlers=rr;exports.createAgentMemory=Sn;exports.createAgentNetwork=Bn;exports.createAuditTrail=nr;exports.createBatchQueue=Lr;exports.createBatchedEmbedder=yr;exports.createBidirectionalStream=br;exports.createBruteForceIndex=hr;exports.createCompliance=dr;exports.createConstraintRouter=zr;exports.createContentFilterGuardrail=hn;exports.createDelegator=Ln;exports.createDevToolsServer=Ve;exports.createEnhancedPIIGuardrail=ke;exports.createEvalSuite=Es;exports.createHybridStrategy=bn;exports.createInMemoryComplianceStorage=lr;exports.createInMemoryStorage=Ge;exports.createJSONFileStore=xr;exports.createKeyPointsSummarizer=Rn;exports.createLLMSummarizer=wn;exports.createLengthGuardrail=yn;exports.createMCPAdapter=Xr;exports.createMessageBus=Gn;exports.createModerationGuardrail=dn;exports.createOtelPlugin=ws;exports.createOutputPIIGuardrail=Jn;exports.createOutputSchemaGuardrail=mn;exports.createOutputTypeGuardrail=fn;exports.createPIIGuardrail=ln;exports.createPromptInjectionGuardrail=_e;exports.createPubSub=Un;exports.createRAGEnricher=Mr;exports.createRateLimitGuardrail=pn;exports.createResponder=Fn;exports.createSSETransport=Tr;exports.createSemanticCache=gr;exports.createSemanticCacheGuardrail=mr;exports.createSlidingWindowStrategy=Ce;exports.createStreamChannel=he;exports.createTestEmbedder=fr;exports.createTokenBasedStrategy=Me;exports.createToolGuardrail=gn;exports.createTruncationSummarizer=En;exports.createUntrustedContentGuardrail=or;exports.createVPTreeIndex=vr;exports.createWsTransport=Je;exports.detectPII=ge;exports.detectPromptInjection=fe;exports.evalAssert=Rs;exports.evalCoherence=Ss;exports.evalCost=cs;exports.evalFaithfulness=ys;exports.evalJudge=gs;exports.evalLatency=us;exports.evalMatch=ms;exports.evalOutputLength=ls;exports.evalRelevance=vs;exports.evalSafety=ds;exports.evalStructure=ps;exports.explainGoal=Kr;exports.getDependencyGraph=qr;exports.markUntrustedContent=sr;exports.mcpCallTool=ts;exports.mcpGetPrompt=rs;exports.mcpReadResource=ns;exports.mcpSyncResources=ss;exports.mergeStreams=Er;exports.parseHttpStatus=ve;exports.parseRetryAfter=Le;exports.patternToMermaid=jn;exports.pipe=vn;exports.pipeThrough=Sr;exports.planGoal=Jr;exports.redactPII=ne;exports.sanitizeInjection=$e;exports.validateGoal=Vr;exports.withBudget=_r;exports.withFallback=Nr;exports.withModelSelection=Fr;exports.withRetry=Or;//# sourceMappingURL=index.cjs.map
|
|
90
|
+
`)}`)}var L={UNSET:0,OK:1,ERROR:2},ce=class{constructor(e,r,s,n,o,a){this.name=e;this.spanId=r;this.traceId=s;this.parentSpanId=n;this.onEnd=a;if(this.startTime=Date.now(),o)for(let[c,i]of Object.entries(o))this.attributes[c]=i;}attributes=Object.create(null);spanEvents=[];status={code:L.UNSET};startTime;endTime=0;setAttribute(e,r){this.attributes[e]=r;}addEvent(e,r){this.spanEvents.push({name:e,attributes:r,timestamp:Date.now()});}setStatus(e){this.status=e;}end(){this.endTime=Date.now(),this.onEnd?.(this);}toSpanData(){return {name:this.name,traceId:this.traceId,spanId:this.spanId,parentSpanId:this.parentSpanId,attributes:{...this.attributes},events:[...this.spanEvents],status:{...this.status},startTime:this.startTime,endTime:this.endTime,durationMs:this.endTime-this.startTime}}},Ee=class{spans=[];startSpan(e,r){let s=r?.spanId??`fallback-${crypto.randomUUID()}`,n=r?.traceId??`fallback-${crypto.randomUUID()}`,o=r?.parentSpanId;return new ce(e,s,n,o,r?.attributes,a=>{this.spans.push(a.toSpanData());})}clear(){this.spans.length=0;}};function Ts(t){let e=t.spanPrefix??"directive.ai",r=t.instrumentEvents,s=t.spanTtlMs??3e5,n=!t.tracer,o=n?new Ee:null,a=t.tracer??o,c=0;function i(){return `${Date.now().toString(36)}-${(c++).toString(36)}`}function u(){return `${Date.now().toString(36)}-${crypto.randomUUID().slice(0,8)}`}let l=new Map,p=0,d=new Map,y=[],f=null,m=false;function S(E){return r?r.has(E):true}function h(E,M){return `${E}:${M}:${p++}`}function g(E,M){let I=`${E}:${M}`,N=d.get(I);if(N){for(let G=N.length-1;G>=0;G--){let H=l.get(N[G]);if(H)return {key:N[G],entry:H}}d.delete(I);}return null}function b(E,M,I,N){let G=`${E}:${M}`;N.indexKey=G,l.set(I,N);let H=d.get(G);H?H.push(I):d.set(G,[I]);}function R(E){let M=l.get(E);l.delete(E);let I=M?.indexKey;if(I){let N=d.get(I);if(N){let G=N.indexOf(E);G!==-1&&N.splice(G,1),N.length===0&&d.delete(I);}}}function A(){let E=Date.now();if(l.size<1e4){for(let[I,N]of l)E-N.startTime>s&&(v(N,"directive.stale",true),T(N,{code:L.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),k(N),R(I),true);return void 0}for(let[M,I]of l)E-I.startTime>s&&(v(I,"directive.stale",true),T(I,{code:L.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),k(I),R(M));}function x(E,M,I){let N=i(),G=I?.traceId??u(),H=I?.spanId,J;n?J=a.startSpan(E,{attributes:M,spanId:N,traceId:G,parentSpanId:H}):J=a.startSpan(E,{attributes:M});let le={span:J,spanId:N,traceId:G,startTime:Date.now()};return n||(le.shadow={span:J,name:E,spanId:N,traceId:G,parentSpanId:H,attributes:{...M},events:[],status:{code:L.UNSET},startTime:le.startTime}),{span:J,entry:le}}function k(E){E.span.end(),t.onSpanEnd&&t.onSpanEnd(O(E));}function O(E){if(E.span instanceof ce)return E.span.toSpanData();if(E.shadow){let I=Date.now();return {name:E.shadow.name,traceId:E.shadow.traceId,spanId:E.shadow.spanId,parentSpanId:E.shadow.parentSpanId,attributes:{...E.shadow.attributes},events:[...E.shadow.events],status:{...E.shadow.status},startTime:E.shadow.startTime,endTime:I,durationMs:I-E.shadow.startTime}}let M=Date.now();return {name:"unknown",traceId:E.traceId,spanId:E.spanId,attributes:{},events:[],status:{code:L.UNSET},startTime:E.startTime,endTime:M,durationMs:M-E.startTime}}function v(E,M,I){E.span.setAttribute(M,I),E.shadow&&(E.shadow.attributes[M]=I);}function C(E,M,I){E.span.addEvent(M,I),E.shadow&&E.shadow.events.push({name:M,attributes:I,timestamp:Date.now()});}function T(E,M){E.span.setStatus(M),E.shadow&&(E.shadow.status={...M});}function D(E){if(S(E.type))switch(A(),E.type){case "agent_start":w(E);break;case "agent_complete":_(E);break;case "agent_error":P(E);break;case "guardrail_check":F(E);break;case "constraint_evaluate":B(E);break;case "resolver_start":$(E);break;case "resolver_complete":U(E);break;case "resolver_error":q(E);break;case "pattern_start":ue(E);break;case "pattern_complete":We(E);break;default:if(E.agentId){let M=g("agent",E.agentId);M&&C(M.entry,E.type,{"event.id":E.id,"event.timestamp":E.timestamp});}}}function w(E){let M=y.length>0?y[y.length-1]:null,{entry:I}=x(`${e}.agent.run`,{"directive.service":t.serviceName,"directive.agent.name":E.agentId,"directive.agent.input_length":E.inputLength,"gen_ai.operation.name":"agent.run","gen_ai.agent.name":E.agentId},M),N=h("agent",E.agentId);b("agent",E.agentId,N,I);}function _(E){let M=g("agent",E.agentId);M&&(v(M.entry,"directive.agent.output_length",E.outputLength),v(M.entry,"directive.agent.total_tokens",E.totalTokens),v(M.entry,"directive.agent.duration_ms",E.durationMs),v(M.entry,"gen_ai.usage.total_tokens",E.totalTokens),T(M.entry,{code:L.OK}),k(M.entry),R(M.key));}function P(E){let M=g("agent",E.agentId);M&&(v(M.entry,"directive.agent.duration_ms",E.durationMs),v(M.entry,"directive.agent.error",E.errorMessage),v(M.entry,"gen_ai.error.message",E.errorMessage),T(M.entry,{code:L.ERROR,message:E.errorMessage}),k(M.entry),R(M.key));}function F(E){let M=E.agentId?g("agent",E.agentId)?.entry??null:null,{entry:I}=x(`${e}.guardrail.check`,{"directive.service":t.serviceName,"directive.guardrail.name":E.guardrailName,"directive.guardrail.type":E.guardrailType,"directive.guardrail.passed":E.passed,"directive.guardrail.duration_ms":E.durationMs,"gen_ai.guardrail.name":E.guardrailName,"gen_ai.guardrail.type":E.guardrailType,"gen_ai.guardrail.passed":E.passed},M);E.reason&&v(I,"directive.guardrail.reason",E.reason),T(I,{code:E.passed?L.OK:L.ERROR,message:E.passed?void 0:E.reason}),k(I);}function B(E){if(E.agentId){let I=g("agent",E.agentId);if(I){C(I.entry,"constraint_evaluate",{"directive.constraint.id":E.constraintId,"directive.constraint.fired":E.fired});return}}let{entry:M}=x(`${e}.constraint.evaluate`,{"directive.service":t.serviceName,"directive.constraint.id":E.constraintId,"directive.constraint.fired":E.fired},null);T(M,{code:L.OK}),k(M);}function $(E){let I=(E.agentId?g("agent",E.agentId)?.entry??null:null)??(y.length>0?y[y.length-1]:null),{entry:N}=x(`${e}.resolver.execute`,{"directive.service":t.serviceName,"directive.resolver.id":E.resolverId,"directive.resolver.requirement_type":E.requirementType},I),G=h("resolver",E.resolverId);b("resolver",E.resolverId,G,N);}function U(E){let M=g("resolver",E.resolverId);M&&(v(M.entry,"directive.resolver.duration_ms",E.durationMs),T(M.entry,{code:L.OK}),k(M.entry),R(M.key));}function q(E){let M=g("resolver",E.resolverId);M&&(v(M.entry,"directive.resolver.duration_ms",E.durationMs),v(M.entry,"directive.resolver.error",E.errorMessage),T(M.entry,{code:L.ERROR,message:E.errorMessage}),k(M.entry),R(M.key));}function ue(E){let M=y.length>0?y[y.length-1]:null,{entry:I}=x(`${e}.pattern.${E.patternType}`,{"directive.service":t.serviceName,"directive.pattern.id":E.patternId,"directive.pattern.type":E.patternType},M),N=h("pattern",E.patternId);b("pattern",E.patternId,N,I),y.length<100&&y.push(I);}function We(E){let M=g("pattern",E.patternId);if(M){v(M.entry,"directive.pattern.duration_ms",E.durationMs),E.error?(v(M.entry,"directive.pattern.error",E.error),T(M.entry,{code:L.ERROR,message:E.error})):T(M.entry,{code:L.OK}),k(M.entry),R(M.key);let I=y.indexOf(M.entry);I!==-1&&y.splice(I,1);}}return {attach(E){if(f&&f!==E)throw new Error("[Directive OTEL] Plugin already attached to a different timeline. Create a new plugin instance.");f=E;let M=E.subscribe(D),I=setInterval(A,Math.min(s,6e4));return ()=>{M(),clearInterval(I),f=null;for(let[N,G]of l)v(G,"directive.detached",true),T(G,{code:L.ERROR,message:"Plugin detached while span was active"}),k(G);l.clear(),d.clear(),y.length=0;}},getSpans(){return o?[...o.spans]:(m||(m=true,typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.warn("[Directive OTEL] getSpans() returns [] when using an external tracer. Use the onSpanEnd callback to collect span data instead.")),[])},clearSpans(){o?.clear();},getTracer(){return a},getActiveSpanCount(){return l.size}}}Object.defineProperty(exports,"createAgentOrchestrator",{enumerable:true,get:function(){return chunkXV2QSBBE_cjs.a}});Object.defineProperty(exports,"createRunner",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.e}});Object.defineProperty(exports,"estimateCost",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.c}});Object.defineProperty(exports,"hasPendingApprovals",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.b}});Object.defineProperty(exports,"isAgentRunning",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.a}});Object.defineProperty(exports,"validateBaseURL",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.d}});Object.defineProperty(exports,"GuardrailError",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.a}});Object.defineProperty(exports,"InMemoryCheckpointStore",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.G}});Object.defineProperty(exports,"MAX_BREAKPOINT_HISTORY",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.A}});Object.defineProperty(exports,"ReflectionExhaustedError",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.W}});Object.defineProperty(exports,"Semaphore",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.Z}});Object.defineProperty(exports,"StructuredOutputError",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.J}});Object.defineProperty(exports,"adaptOutputGuardrail",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.P}});Object.defineProperty(exports,"aggregateTokens",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ua}});Object.defineProperty(exports,"allReadyStrategy",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ka}});Object.defineProperty(exports,"capabilityRoute",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.xa}});Object.defineProperty(exports,"collectOutputs",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ta}});Object.defineProperty(exports,"collectTokens",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.Q}});Object.defineProperty(exports,"combineStreamingGuardrails",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.O}});Object.defineProperty(exports,"composePatterns",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.va}});Object.defineProperty(exports,"concatResults",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ra}});Object.defineProperty(exports,"costEfficientStrategy",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ma}});Object.defineProperty(exports,"createBreakpointId",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.B}});Object.defineProperty(exports,"createCheckpointId",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.E}});Object.defineProperty(exports,"createDebugTimeline",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.i}});Object.defineProperty(exports,"createDebugTimelinePlugin",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.j}});Object.defineProperty(exports,"createHealthMonitor",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.V}});Object.defineProperty(exports,"createInitialBreakpointState",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.D}});Object.defineProperty(exports,"createLengthStreamingGuardrail",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.M}});Object.defineProperty(exports,"createMultiAgentOrchestrator",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.Da}});Object.defineProperty(exports,"createPatternStreamingGuardrail",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.N}});Object.defineProperty(exports,"createStreamingRunner",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.K}});Object.defineProperty(exports,"createToxicityStreamingGuardrail",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.L}});Object.defineProperty(exports,"dag",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ga}});Object.defineProperty(exports,"debate",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.za}});Object.defineProperty(exports,"derivedConstraint",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.Ba}});Object.defineProperty(exports,"diffCheckpoints",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.aa}});Object.defineProperty(exports,"extractJsonFromOutput",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.H}});Object.defineProperty(exports,"filterStream",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.S}});Object.defineProperty(exports,"findAgentsByCapability",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.wa}});Object.defineProperty(exports,"forkFromCheckpoint",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ba}});Object.defineProperty(exports,"formatSystemMeta",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.g}});Object.defineProperty(exports,"getCheckpointProgress",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.$}});Object.defineProperty(exports,"getPatternStep",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs._}});Object.defineProperty(exports,"goal",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ja}});Object.defineProperty(exports,"highestImpactStrategy",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.la}});Object.defineProperty(exports,"isGuardrailError",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.b}});Object.defineProperty(exports,"mapStream",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.T}});Object.defineProperty(exports,"matchBreakpoint",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.C}});Object.defineProperty(exports,"mergeTaggedStreams",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.U}});Object.defineProperty(exports,"parallel",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.da}});Object.defineProperty(exports,"patternFromJSON",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.oa}});Object.defineProperty(exports,"patternToJSON",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.na}});Object.defineProperty(exports,"pickBestResult",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.sa}});Object.defineProperty(exports,"race",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ia}});Object.defineProperty(exports,"reflect",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ha}});Object.defineProperty(exports,"runAgentRequirement",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.qa}});Object.defineProperty(exports,"runDebate",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.Aa}});Object.defineProperty(exports,"selectAgent",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.pa}});Object.defineProperty(exports,"sequential",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ea}});Object.defineProperty(exports,"spawnOnCondition",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.ya}});Object.defineProperty(exports,"spawnPool",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.Ca}});Object.defineProperty(exports,"supervisor",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.fa}});Object.defineProperty(exports,"tapStream",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.R}});Object.defineProperty(exports,"toAIContext",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.h}});Object.defineProperty(exports,"validateCheckpoint",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.F}});Object.defineProperty(exports,"withReflection",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.X}});Object.defineProperty(exports,"withStructuredOutput",{enumerable:true,get:function(){return chunkX3VQ5F7D_cjs.I}});Object.defineProperty(exports,"CircuitBreakerOpenError",{enumerable:true,get:function(){return plugins.CircuitBreakerOpenError}});Object.defineProperty(exports,"createCircuitBreaker",{enumerable:true,get:function(){return plugins.createCircuitBreaker}});Object.defineProperty(exports,"createOTLPExporter",{enumerable:true,get:function(){return plugins.createOTLPExporter}});exports.AllProvidersFailedError=ae;exports.BudgetExceededError=Z;exports.DEFAULT_INJECTION_PATTERNS=X;exports.OtelStatusCode=L;exports.RetryExhaustedError=oe;exports.STRICT_INJECTION_PATTERNS=me;exports.byAgentName=zr;exports.byInputLength=Ur;exports.byPattern=Hr;exports.connectDevTools=Wr;exports.convertToolsForLLM=os;exports.createAgentAuditHandlers=cr;exports.createAgentMemory=Sn;exports.createAgentNetwork=Bn;exports.createAuditTrail=ir;exports.createBatchQueue=Vr;exports.createBatchedEmbedder=Er;exports.createBidirectionalStream=Cr;exports.createBruteForceIndex=Rr;exports.createCompliance=yr;exports.createConstraintRouter=Kr;exports.createContentFilterGuardrail=hn;exports.createDelegator=Ln;exports.createDevToolsServer=Ve;exports.createEnhancedPIIGuardrail=ke;exports.createEvalSuite=As;exports.createHybridStrategy=bn;exports.createInMemoryComplianceStorage=fr;exports.createInMemoryStorage=Ge;exports.createJSONFileStore=Dr;exports.createKeyPointsSummarizer=Rn;exports.createLLMSummarizer=wn;exports.createLengthGuardrail=yn;exports.createMCPAdapter=ns;exports.createMessageBus=Gn;exports.createModerationGuardrail=dn;exports.createOtelPlugin=Ts;exports.createOutputPIIGuardrail=Xn;exports.createOutputSchemaGuardrail=mn;exports.createOutputTypeGuardrail=fn;exports.createPIIGuardrail=ln;exports.createPromptInjectionGuardrail=_e;exports.createPubSub=Un;exports.createRAGEnricher=kr;exports.createRateLimitGuardrail=pn;exports.createResponder=Fn;exports.createSSETransport=Or;exports.createSemanticCache=vr;exports.createSemanticCacheGuardrail=br;exports.createSlidingWindowStrategy=Ce;exports.createStreamChannel=he;exports.createTestEmbedder=Sr;exports.createTokenBasedStrategy=Me;exports.createToolGuardrail=gn;exports.createTruncationSummarizer=En;exports.createUntrustedContentGuardrail=lr;exports.createVPTreeIndex=wr;exports.createWsTransport=Je;exports.detectAndRedactPII=Yn;exports.detectPII=re;exports.detectPromptInjection=fe;exports.evalAssert=xs;exports.evalCoherence=Ms;exports.evalCost=gs;exports.evalFaithfulness=Es;exports.evalJudge=vs;exports.evalLatency=ms;exports.evalMatch=bs;exports.evalOutputLength=fs;exports.evalRelevance=ws;exports.evalSafety=ys;exports.evalStructure=hs;exports.explainGoal=Zr;exports.getDependencyGraph=Qr;exports.markUntrustedContent=ur;exports.mcpCallTool=as;exports.mcpGetPrompt=cs;exports.mcpReadResource=is;exports.mcpSyncResources=us;exports.mergeStreams=Ar;exports.parseHttpStatus=ve;exports.parseRetryAfter=Le;exports.patternToMermaid=jn;exports.pipe=vn;exports.pipeThrough=Mr;exports.planGoal=Yr;exports.redactPII=Q;exports.sanitizeInjection=$e;exports.validateGoal=Xr;exports.withBudget=Lr;exports.withFallback=Br;exports.withModelSelection=qr;exports.withRetry=Gr;//# sourceMappingURL=index.cjs.map
|
|
91
91
|
//# sourceMappingURL=index.cjs.map
|