@directive-run/ai 0.2.0 → 0.3.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/README.md +26 -31
- package/dist/anthropic.cjs +1 -1
- package/dist/anthropic.cjs.map +1 -1
- package/dist/anthropic.d.cts +5 -9
- package/dist/anthropic.d.ts +5 -9
- package/dist/anthropic.js +1 -1
- package/dist/anthropic.js.map +1 -1
- package/dist/gemini.cjs +3 -0
- package/dist/gemini.cjs.map +1 -0
- package/dist/gemini.d.cts +93 -0
- package/dist/gemini.d.ts +93 -0
- package/dist/gemini.js +3 -0
- package/dist/gemini.js.map +1 -0
- package/dist/index.cjs +117 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1376 -2106
- package/dist/index.d.ts +1376 -2106
- package/dist/index.js +117 -45
- package/dist/index.js.map +1 -1
- package/dist/multi-agent-orchestrator-CxL8ycw_.d.cts +2290 -0
- package/dist/multi-agent-orchestrator-uMp8bLfV.d.ts +2290 -0
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.d.cts +3 -2
- package/dist/ollama.d.ts +3 -2
- package/dist/ollama.js.map +1 -1
- package/dist/openai.cjs +2 -2
- package/dist/openai.cjs.map +1 -1
- package/dist/openai.d.cts +4 -8
- package/dist/openai.d.ts +4 -8
- package/dist/openai.js +2 -2
- package/dist/openai.js.map +1 -1
- package/dist/semantic-cache-F0psCRuz.d.cts +271 -0
- package/dist/semantic-cache-F0psCRuz.d.ts +271 -0
- package/dist/testing.cjs +42 -7
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +365 -5
- package/dist/testing.d.ts +365 -5
- package/dist/testing.js +42 -7
- package/dist/testing.js.map +1 -1
- package/dist/types-Co4BzMiH.d.cts +1373 -0
- package/dist/types-Co4BzMiH.d.ts +1373 -0
- package/package.json +7 -2
- package/dist/types-Bbar7yKz.d.cts +0 -304
- package/dist/types-Bbar7yKz.d.ts +0 -304
package/dist/index.cjs
CHANGED
|
@@ -1,59 +1,108 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils'),plugins=require('@directive-run/core/plugins');var ct=class extends Error{code;guardrailName;guardrailType;userMessage;agentName;constructor(e){super(e.message,{cause:e.cause}),this.name="GuardrailError",this.code=e.code,this.guardrailName=e.guardrailName,this.guardrailType=e.guardrailType,this.userMessage=e.userMessage??e.message,this.agentName=e.agentName,Object.defineProperty(this,"input",{value:e.input,enumerable:false,writable:false,configurable:false}),Object.defineProperty(this,"data",{value:e.data,enumerable:false,writable:false,configurable:false});}toJSON(){return {name:this.name,code:this.code,message:this.message,guardrailName:this.guardrailName,guardrailType:this.guardrailType,userMessage:this.userMessage,agentName:this.agentName}}};function vo(t){return t instanceof ct}var Zt="__agent",Bt="__approval",Dn="__conversation",Pn="__toolCalls",Lt="__breakpoints";var gt="__scratchpad",ln={facts:{[Zt]:core.t.object(),[Bt]:core.t.object(),[Dn]:core.t.array(),[Pn]:core.t.array(),[Lt]:core.t.object()},derivations:{},events:{},requirements:{}};var ko=new Set(["agent_start","agent_complete","agent_error","agent_retry","guardrail_check","constraint_evaluate","resolver_start","resolver_complete","resolver_error","approval_request","approval_response","handoff_start","handoff_complete","pattern_start","pattern_complete","dag_node_update","breakpoint_hit","breakpoint_resumed","derivation_update","scratchpad_update","reflection_iteration","race_start","race_winner","race_cancelled","debate_round","reroute","checkpoint_save","checkpoint_restore"]),kr=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function dn(t={}){let e=t.maxEvents??2e3,r=t.goToSnapshot;if(!Number.isFinite(e)||e<1)throw new Error("[Directive DebugTimeline] maxEvents must be >= 1");let o=[],n=0,a=new Set;return {record(c){let u={...c,id:n++};o.push(u);let l=o.length-e;l>0&&o.splice(0,l);for(let d of a)try{d(u);}catch(p){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.error("[Directive DebugTimeline] Listener threw:",p instanceof Error?p.message:p);}return u},getEvents(){return [...o]},getEventsForAgent(c){return o.filter(u=>u.agentId===c)},getEventsByType(c){return o.filter(u=>u.type===c)},getEventsAtSnapshot(c){return o.filter(u=>u.snapshotId===c)},getEventsInRange(c,u){return o.filter(l=>l.timestamp>=c&&l.timestamp<=u)},forkFrom(c){let u=-1;for(let l=o.length-1;l>=0;l--)if(o[l].snapshotId!==null&&o[l].snapshotId<=c){u=o[l].id;break}if(u>=0){let l=o.length;for(let d=o.length-1;d>=0;d--)if(o[d].id<=u){l=d+1;break}o=o.slice(0,l);}else o=[];r&&r(c);},export(){return JSON.stringify({version:1,events:o,nextId:n})},import(c){let u;try{u=JSON.parse(c);}catch{throw new Error("[Directive DebugTimeline] Invalid JSON")}if(!u||typeof u!="object")throw new Error("[Directive DebugTimeline] Invalid timeline data");for(let p of Object.keys(u))if(kr.has(p))throw new Error(`[Directive DebugTimeline] Blocked key in import: ${p}`);let l=u;if(!Array.isArray(l.events))throw new Error("[Directive DebugTimeline] Missing events array");let d=[];for(let p of l.events){if(!p||typeof p!="object")continue;for(let v of Object.keys(p))if(kr.has(v))throw new Error(`[Directive DebugTimeline] Blocked key in event: ${v}`);let f=p;typeof f.id=="number"&&typeof f.type=="string"&&ko.has(f.type)&&typeof f.timestamp=="number"&&d.push(p);}o=d.length>e?d.slice(-e):d,n=typeof l.nextId=="number"?l.nextId:d.length;},clear(){o=[],n=0;},subscribe(c){return a.add(c),()=>{a.delete(c);}},get length(){return o.length}}}function pn(t,e){let r=new Map;return {name:"directive-ai-debug-timeline",onConstraintEvaluate(o,n){t.record({type:"constraint_evaluate",timestamp:Date.now(),snapshotId:e(),constraintId:o,fired:n});},onResolverStart(o,n){r.set(o,Date.now()),t.record({type:"resolver_start",timestamp:Date.now(),snapshotId:e(),resolverId:o,requirementType:n.requirement.type});},onResolverComplete(o){let n=r.get(o);r.delete(o),t.record({type:"resolver_complete",timestamp:Date.now(),snapshotId:e(),resolverId:o,durationMs:n?Date.now()-n:0});},onResolverError(o,n,a){let s=r.get(o);r.delete(o);let c=a instanceof Error?a.message:String(a);t.record({type:"resolver_error",timestamp:Date.now(),snapshotId:e(),resolverId:o,errorMessage:c,durationMs:s?Date.now()-s:0});}}}function Tt(t,e,r){return typeof t=="function"?{name:`${r}-guardrail-${e}`,fn:t,critical:true}:t}function wo(t,e){let{backoff:r="exponential",baseDelayMs:o=100,maxDelayMs:n=5e3}=e,a;switch(r){case "exponential":a=o*Math.pow(2,t-1);break;case "linear":a=o*t;break;default:a=o;}return Math.min(a,n)}function wr(t,e){return e?.aborted?Promise.reject(e.reason??new Error("Aborted")):new Promise((r,o)=>{if(!e){setTimeout(r,t);return}let n=()=>{clearTimeout(a),o(e.reason??new Error("Aborted"));},a=setTimeout(()=>{e.removeEventListener("abort",n),r();},t);e.addEventListener("abort",n,{once:true});})}async function Et(t,e,r,o){let{retry:n}=t,a=Math.max(n?.attempts??1,1),s;for(let c=1;c<=a;c++)try{return await t.fn(e,r)}catch(u){if(s=u instanceof Error?u:new Error(String(u)),c<a){let l=wo(c,n??{});await wr(l,o);}}return {passed:false,reason:`Guardrail "${t.name}" failed after ${a} attempt(s): ${s.message}`}}function Ro(t,e){let{backoff:r="exponential",baseDelayMs:o=1e3,maxDelayMs:n=3e4}=e,a;switch(r){case "exponential":a=o*Math.pow(2,t-1);break;case "linear":a=o*t;break;default:a=o;}return Math.min(a,n)}async function gn(t,e,r,o,n){let a=Math.max(n?.attempts??1,1),s=n?.isRetryable??(()=>true),c=n?.onRetry,u;for(let l=1;l<=a;l++)try{return await t(e,r,o)}catch(d){if(u=d instanceof Error?d:new Error(String(d)),l<a){let p=true;try{p=s(u);}catch{break}if(!p)break;let f=Ro(l,n??{});try{c?.(l,u,f);}catch{}await wr(f,o?.signal);}else break}throw u}function st(t){return adapterUtils.getBridgeFact(t,Zt)}function at(t,e){adapterUtils.setBridgeFact(t,Zt,e);}function wt(t){return adapterUtils.getBridgeFact(t,Bt)}function ft(t,e){adapterUtils.setBridgeFact(t,Bt,e);}function en(t){return adapterUtils.getBridgeFact(t,Dn)}function xt(t,e){adapterUtils.setBridgeFact(t,Dn,e);}function tn(t){return adapterUtils.getBridgeFact(t,Pn)}function At(t,e){adapterUtils.setBridgeFact(t,Pn,e);}function yt(t){return adapterUtils.getBridgeFact(t,Lt)}function bt(t,e){adapterUtils.setBridgeFact(t,Lt,e);}function mt(t){return {agent:st(t),approval:wt(t),conversation:en(t),toolCalls:tn(t)}}function nn(t){let e=Object.create(null);for(let[r,o]of Object.entries(t))e[r]={priority:o.priority??0,when:n=>{let a=mt(n),s={...n,...a};return o.when(s)},require:n=>{let a=mt(n),s={...n,...a};return typeof o.require=="function"?o.require(s):o.require}};return e}function Rr(t,e,r){let o=Object.create(null);for(let[n,a]of Object.entries(t))o[n]={requirement:a.requirement,key:a.key,resolve:async(s,c)=>{let u=mt(c.facts),d={facts:{...c.facts,...u},runAgent:async(p,f,v)=>e(p,f,mt(r()),v),signal:c.signal};await a.resolve(s,d);}};return o}function Sr(t){if(t.length>1048576)throw new Error(`[Directive] Output too large for JSON extraction (${t.length} chars, max 1048576).`);let e=t.trim();try{return JSON.parse(e)}catch{}let r=e.indexOf("{"),o=e.indexOf("["),n,a,s;if(r===-1&&o===-1)throw new Error("[Directive] No JSON object or array found in output");r===-1?(n=o,a="[",s="]"):o===-1?(n=r,a="{",s="}"):(n=Math.min(r,o),a=n===r?"{":"[",s=n===r?"}":"]");let c=0,u=false,l=false;for(let d=n;d<e.length;d++){let p=e[d];if(l){l=false;continue}if(p==="\\"){l=true;continue}if(p==='"'){u=!u;continue}if(!u){if(p===a)c++;else if(p===s&&(c--,c===0)){let f=e.slice(n,d+1);return JSON.parse(f)}}}throw new Error("[Directive] No valid JSON found in output")}function So(t){return t?t.issues&&t.issues.length>0?t.issues.map(e=>e.message).join("; "):t.message??"Validation failed":"Validation failed"}function hn(t,e){let{schema:r,maxRetries:o=2,extractJson:n=Sr,schemaDescription:a}=e;if(!Number.isFinite(o)||o<0)throw new Error("[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.");let s=a??r.description??"the specified JSON schema";return async(c,u,l)=>{let d={...c,instructions:(c.instructions??"")+`
|
|
2
|
+
|
|
3
|
+
IMPORTANT: Respond with valid JSON matching `+s+". Output ONLY the JSON object, no additional text or markdown formatting."},p,f;for(let v=0;v<=o;v++){let R=v===0?u:`${u}
|
|
4
|
+
|
|
5
|
+
Your previous response was not valid JSON. Error: ${f}
|
|
6
|
+
Please try again with valid JSON only.`,h=await t(d,R,l);p=h;let k=typeof h.output=="string"?h.output:JSON.stringify(h.output);try{let S=n(k),w=r.safeParse(S);if(w.success)return {...h,output:w.data};f=So(w.error);}catch(S){f=S instanceof Error?S.message:String(S);}}throw new In(`[Directive] Failed to get valid structured output after ${o+1} attempts: ${f}`,p)}}var In=class extends Error{lastResult;constructor(e,r){super(e),this.name="StructuredOutputError",this.lastResult=r;}};var Tr=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ct(){let t=Date.now().toString(36),e=crypto.randomUUID().slice(0,8);return `ckpt_${t}_${e}`}function rn(t){if(!t||typeof t!="object")return false;for(let o of Object.keys(t))if(Tr.has(o))return false;let e=t;if(e.version!==1||typeof e.id!="string"||e.id.length===0||typeof e.createdAt!="string"||typeof e.systemExport!="string"||e.timelineExport!==null&&typeof e.timelineExport!="string"||!e.localState||typeof e.localState!="object")return false;for(let o of Object.keys(e.localState))if(Tr.has(o))return false;let r=e.localState;return !(r.type!=="single"&&r.type!=="multi"||e.orchestratorType!=="single"&&e.orchestratorType!=="multi")}var Wn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(e){if(this.maxCheckpoints=e?.maxCheckpoints??100,this.retentionMs=e?.retentionMs??1/0,this.preserveLabeled=e?.preserveLabeled??false,!Number.isFinite(this.maxCheckpoints)||this.maxCheckpoints<1)throw new Error(`[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`)}async save(e){if(!rn(e))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let r=this.order.indexOf(e.id);return r>=0&&this.order.splice(r,1),this.store.set(e.id,e),this.order.push(e.id),e.id}async load(e){return this.store.get(e)??null}async list(){return this.order.map(e=>{let r=this.store.get(e);return {id:r.id,label:r.label,createdAt:r.createdAt}})}async delete(e){if(!this.store.has(e))return false;this.store.delete(e);let r=this.order.indexOf(e);return r>=0&&this.order.splice(r,1),true}async clear(){this.store.clear(),this.order.length=0;}async prune(){if(!Number.isFinite(this.retentionMs))return 0;let e=Date.now()-this.retentionMs,r=0,o=[];for(let n of this.order){let a=this.store.get(n);if(!a)continue;if(new Date(a.createdAt).getTime()>=e)break;this.preserveLabeled&&a.label||o.push(n);}for(let n of o){this.store.delete(n);let a=this.order.indexOf(n);a>=0&&this.order.splice(a,1),r++;}return r}evictOldest(){if(this.preserveLabeled)for(let r=0;r<this.order.length;r++){let o=this.order[r],n=this.store.get(o);if(n&&!n.label)return this.order.splice(r,1),this.store.delete(o),true}let e=this.order.shift();return e?(this.store.delete(e),true):false}};var Mt=200,To=0;function yn(){return `bp_${Date.now().toString(36)}_${(++To).toString(36)}`}function bn(t,e,r){for(let o of t)if(o.type===e){if(!o.when)return o;try{if(o.when(r))return o}catch{}}return null}function on(){return {pending:[],resolved:[],cancelled:[]}}var Er=500,xr=200;function Po(t){let{runner:e,factsSchema:r={},init:o,constraints:n={},resolvers:a={},guardrails:s={},onApprovalRequest:c,autoApproveToolCalls:u=true,maxTokenBudget:l,budgetWarningThreshold:d=.8,onBudgetWarning:p,plugins:f=[],debug:v=false,approvalTimeoutMs:R=3e5,agentRetry:h,hooks:k={},memory:S,circuitBreaker:w,selfHealing:x,outputSchema:M,maxSchemaRetries:q,checkpointStore:U,breakpoints:T,onBreakpoint:$,breakpointTimeoutMs:N}=t,W=typeof v=="object"?true:!!v,j=typeof v=="object"?!!v.verboseTimeline:false,be=5e3;if(W&&x&&!w&&console.warn("[Directive] selfHealing config has no effect without a circuitBreaker \u2014 fallback behavior requires the circuit breaker to detect failures."),d<0||d>1)throw new Error(`[Directive Orchestrator] budgetWarningThreshold must be between 0 and 1, got ${d}`);if(!u&&!c)throw new Error(`[Directive] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
|
|
7
|
+
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
8
|
+
- Provide an onApprovalRequest callback to handle approvals programmatically`);function z(E,H){try{k[E]?.(H);}catch(ge){W&&console.debug(`[Directive] hooks.${E} threw:`,ge);}}let Fe=["agent","approval","conversation","toolCalls"];for(let E of Object.keys(r))if(Fe.includes(E))throw new Error(`[Directive] Facts schema key "${E}" conflicts with orchestrator state. Reserved keys: ${Fe.join(", ")}. Rename your fact to avoid the collision.`);let Be={facts:{...ln.facts,...r,__budgetWarningFired:core.t.boolean()},derivations:{},events:{},requirements:{}},ee,G,St=nn(n);l&&(St.__budgetLimit={priority:100,when:E=>st(E).tokenUsage>l,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let Dt=Rr(a,(E,H,ge,ne)=>ee(E,H,ge,ne),()=>G.facts);Dt.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async(E,H)=>{let ge=st(H.facts);at(H.facts,{...ge,status:"paused"});}};let J=null;W&&(J=dn({goToSnapshot:E=>{try{G.debug?.goTo?.(E);}catch{}}}));let Wt=adapterUtils.createCallbackPlugin("directive-ai-callbacks",{}),it=core.createModule("directive-ai-orchestrator",{schema:Be,init:E=>{if(at(E,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),ft(E,{pending:[],approved:[],rejected:[]}),xt(E,[]),At(E,[]),bt(E,{pending:[],resolved:[],cancelled:[]}),adapterUtils.setBridgeFact(E,"__budgetWarningFired",false),o){let H=mt(E),ge={...E,...H};o(ge);}},constraints:St,resolvers:Dt}),D=[...f,Wt];W&&J&&D.push(pn(J,()=>{try{return G.debug?.currentIndex??null}catch{return null}})),G=core.createSystem({module:it,plugins:D,debug:W?{timeTravel:true}:void 0}),G.start();async function I(E,H,ge,ne,se){if(w)try{return await w.execute(()=>re(E,H,ge,ne,se))}catch(fe){if(x){if(x.fallbackRunners)for(let Ae of x.fallbackRunners)try{let Oe={originalAgent:E.name,reroutedTo:"fallback-runner",reason:fe instanceof Error?fe.message:String(fe),timestamp:Date.now()};try{x.onReroute?.(Oe);}catch{}return J&&J.record({type:"reroute",timestamp:Date.now(),agentId:E.name,snapshotId:null,from:E.name,to:"fallback-runner",reason:fe instanceof Error?fe.message:String(fe)}),await Ae(E,H,ne)}catch{}if(x.fallbackAgent)try{let Ae={originalAgent:E.name,reroutedTo:x.fallbackAgent.name,reason:fe instanceof Error?fe.message:String(fe),timestamp:Date.now()};try{x.onReroute?.(Ae);}catch{}return J&&J.record({type:"reroute",timestamp:Date.now(),agentId:E.name,snapshotId:null,from:E.name,to:x.fallbackAgent.name,reason:fe instanceof Error?fe.message:String(fe)}),await e(x.fallbackAgent,H,ne)}catch{}if(x.degradation==="fallback-response"&&x.fallbackResponse!==void 0)return {output:x.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}throw fe}return re(E,H,ge,ne,se)}async function re(E,H,ge,ne,se){let fe=Date.now();if(S){let ae=S.getContextMessages();if(ae.length>0){let me=ae.map(ze=>`${ze.role}: ${ze.content}`).join(`
|
|
9
|
+
`);E={...E,instructions:(E.instructions??"")+`
|
|
10
|
+
|
|
11
|
+
Conversation context:
|
|
12
|
+
`+me};}}if(T&&T.length>0){let ae={agentId:E.name,agentName:E.name,input:H,state:G.facts.$store.toObject(),breakpointType:"pre_input_guardrails"},me=await vt("pre_input_guardrails",ae,se?.signal??ne?.signal);if(me?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};me?.input&&(H=me.input);}let Ae=se?.inputGuardrails!==void 0?se.inputGuardrails:s.input??[],Oe=se?.outputGuardrails!==void 0?se.outputGuardrails:s.output??[],Se=Ae.map((ae,me)=>Tt(ae,me,"input"));for(let ae of Se){let{name:me}=ae,ze={agentName:E.name,input:H,facts:G.facts.$store.toObject()},ye=Date.now(),ke=await Et(ae,{input:H,agentName:E.name},ze);if(z("onGuardrailCheck",{agentId:E.name,guardrailName:me,guardrailType:"input",passed:ke.passed,reason:ke.reason,durationMs:Date.now()-ye,timestamp:Date.now()}),!ke.passed)throw new ct({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${me}" failed: ${ke.reason}`,guardrailName:me,guardrailType:"input",userMessage:ke.reason??"Input validation failed",agentName:E.name,input:H});ke.transformed!==void 0&&(H=ke.transformed);}if(z("onAgentStart",{agentName:E.name,input:H,timestamp:fe}),J&&J.record({type:"agent_start",timestamp:Date.now(),agentId:E.name,snapshotId:null,inputLength:H.length,modelId:E.model??void 0,...E.instructions?{instructions:E.instructions.slice(0,be)}:{},...j?{input:H.slice(0,be)}:{}}),G.batch(()=>{let ae=st(G.facts);at(G.facts,{...ae,status:"running",currentAgent:E.name,input:H,startedAt:Date.now()});}),T&&T.length>0){let ae={agentId:E.name,agentName:E.name,input:H,state:G.facts.$store.toObject(),breakpointType:"pre_agent_run"},me=await vt("pre_agent_run",ae,se?.signal??ne?.signal);if(me?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};me?.input&&(H=me.input);}let qe=se?.outputSchema!==void 0?se.outputSchema:M,De=e;qe&&(De=hn(e,{schema:qe,maxRetries:se?.maxSchemaRetries??q??2}));let Ee=await gn(De,E,H,{...ne,signal:ne?.signal,onMessage:ae=>{let ze=[...en(G.facts),ae];xt(G.facts,ze.length>Er?ze.slice(-Er):ze),ne?.onMessage?.(ae);},onToolCall:async ae=>{let me=(s.toolCall??[]).map((ke,Le)=>Tt(ke,Le,"toolCall"));for(let ke of me){let{name:Le}=ke,jt={agentName:E.name,input:H,facts:G.facts.$store.toObject()},ht=Date.now(),de=await Et(ke,{toolCall:ae,agentName:E.name,input:H},jt);if(z("onGuardrailCheck",{agentId:E.name,guardrailName:Le,guardrailType:"toolCall",passed:de.passed,reason:de.reason,durationMs:Date.now()-ht,timestamp:Date.now()}),!de.passed)throw new ct({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${Le}" failed: ${de.reason}`,guardrailName:Le,guardrailType:"toolCall",userMessage:de.reason??"Tool call blocked",data:{toolCall:ae},agentName:E.name,input:H})}if(!u){let ke=`tool-${ae.id}`,Le={id:ke,type:"tool_call",agentName:E.name,description:`Tool call: ${ae.name}`,data:ae,requestedAt:Date.now()};G.batch(()=>{let jt=wt(G.facts);ft(G.facts,{...jt,pending:[...jt.pending,Le]});}),c?.(Le),await Pt(ke,se?.signal??ne?.signal);}let ye=[...tn(G.facts),ae];At(G.facts,ye.length>xr?ye.slice(-xr):ye),ne?.onToolCall?.(ae);}},h?{...h,onRetry:(ae,me,ze)=>{h.onRetry?.(ae,me,ze),z("onAgentRetry",{agentName:E.name,input:H,attempt:ae,error:me,delayMs:ze,timestamp:Date.now()});}}:void 0);if(T&&T.length>0){let ae={agentId:E.name,agentName:E.name,input:H,state:G.facts.$store.toObject(),breakpointType:"pre_output_guardrails"},me=await vt("pre_output_guardrails",ae,se?.signal??ne?.signal);if(me?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};me?.input&&(H=me.input);}let ut=Oe.map((ae,me)=>Tt(ae,me,"output"));for(let ae of ut){let{name:me}=ae,ze={agentName:E.name,input:H,facts:G.facts.$store.toObject()},ye=Date.now(),ke=await Et(ae,{output:Ee.output,agentName:E.name,input:H,messages:Ee.messages},ze);if(z("onGuardrailCheck",{agentId:E.name,guardrailName:me,guardrailType:"output",passed:ke.passed,reason:ke.reason,durationMs:Date.now()-ye,timestamp:Date.now()}),!ke.passed)throw new ct({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${me}" failed: ${ke.reason}`,guardrailName:me,guardrailType:"output",userMessage:ke.reason??"Output validation failed",agentName:E.name,input:H});ke.transformed!==void 0&&(Ee.output=ke.transformed);}let kt=false,Ue=0;if(G.batch(()=>{let ae=st(G.facts),me=ae.tokenUsage+Ee.totalTokens;if(at(G.facts,{...ae,status:"completed",output:Ee.output,tokenUsage:me,turnCount:ae.turnCount+Ee.messages.length,completedAt:Date.now()}),l&&p){Ue=me/l;let ze=adapterUtils.getBridgeFact(G.facts,"__budgetWarningFired");Ue>=d&&!ze&&(adapterUtils.setBridgeFact(G.facts,"__budgetWarningFired",true),kt=true);}}),kt)try{p({currentTokens:st(G.facts).tokenUsage,maxBudget:l,percentage:Ue});}catch(ae){W&&console.debug("[Directive Orchestrator] onBudgetWarning threw:",ae);}if(S&&Ee.messages.length>0)try{S.addMessages(Ee.messages);}catch(ae){W&&console.debug("[Directive] Memory addMessages failed:",ae);}if(z("onAgentComplete",{agentName:E.name,input:H,output:Ee.output,tokenUsage:Ee.totalTokens,durationMs:Date.now()-fe,timestamp:Date.now()}),J){let ae=typeof Ee.output=="string"?Ee.output:JSON.stringify(Ee.output);J.record({type:"agent_complete",timestamp:Date.now(),agentId:E.name,snapshotId:null,outputLength:ae?.length??0,totalTokens:Ee.totalTokens,inputTokens:Ee.tokenUsage?.inputTokens??0,outputTokens:Ee.tokenUsage?.outputTokens??0,durationMs:Date.now()-fe,modelId:E.model??void 0,...j?{output:ae.slice(0,be)}:{}});}if(T&&T.length>0){let ae={agentId:E.name,agentName:E.name,input:H,state:G.facts.$store.toObject(),breakpointType:"post_run"},me=await vt("post_run",ae,se?.signal??ne?.signal);if(me?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};me?.input&&(H=me.input);}return Ee}ee=I;let Re=new Map,Me=new Map;function dt(E,H){return H?.aborted?Promise.reject(H.reason??new Error("Aborted while waiting for breakpoint")):new Promise((ge,ne)=>{let se=false,fe=null,Ae=()=>{se||(se=true,fe&&(clearTimeout(fe),fe=null),H&&H.removeEventListener("abort",Oe),Se());},Oe=()=>{Ae(),ne(H.reason??new Error(`Breakpoint wait for ${E} aborted`));};H&&H.addEventListener("abort",Oe,{once:true});let Se=G.facts.$store.subscribe([Lt],()=>{if(se)return;let De=yt(G.facts);if(De.resolved.includes(E)){Ae();let Ee=Re.get(E)??null;Re.delete(E),ge(Ee);}else if(De.cancelled.includes(E)){Ae(),Re.delete(E);let Ee=Me.get(E);Me.delete(E),ne(new Error(Ee?`Breakpoint ${E} was cancelled: ${Ee}`:`Breakpoint ${E} was cancelled`));}}),qe=N??3e5;fe=setTimeout(()=>{se||(Ae(),Re.delete(E),Me.delete(E),ne(new Error(`[Directive] Breakpoint timeout: ${E} not resolved within ${Math.round(qe/1e3)}s`)));},qe);})}async function vt(E,H,ge){if(!T||T.length===0)return null;let ne=bn(T,E,H);if(!ne)return null;let se=yn(),fe={id:se,type:E,agentId:H.agentId,input:H.input,label:ne.label,requestedAt:Date.now()};G.batch(()=>{let Oe=yt(G.facts);bt(G.facts,{...Oe,pending:[...Oe.pending,fe]});});try{$?.(fe);}catch{}try{k.onBreakpoint?.(fe);}catch{}J&&J.record({type:"breakpoint_hit",timestamp:Date.now(),snapshotId:null,agentId:H.agentId,breakpointId:se,breakpointType:E,label:ne.label});let Ae=await dt(se,ge);return J&&J.record({type:"breakpoint_resumed",timestamp:Date.now(),snapshotId:null,agentId:H.agentId,breakpointId:se,modified:!!Ae?.input,skipped:!!Ae?.skip}),Ae}function Pt(E,H){return H?.aborted?Promise.reject(H.reason??new Error("Aborted while waiting for approval")):new Promise((ge,ne)=>{let se=false,fe=null,Ae=()=>{se||(se=true,fe&&(clearTimeout(fe),fe=null),H&&H.removeEventListener("abort",Oe),Se());},Oe=()=>{Ae(),ne(H.reason??new Error(`Approval wait for ${E} aborted`));};H&&H.addEventListener("abort",Oe,{once:true});let Se=G.facts.$store.subscribe([Bt],()=>{if(se)return;let qe=wt(G.facts);if(qe.approved.includes(E))Ae(),ge();else {let De=qe.rejected.find(Ee=>Ee.id===E);if(De){Ae();let Ee=De.reason?`Request ${E} rejected: ${De.reason}`:`Request ${E} rejected`;ne(new Error(Ee));}}});fe=setTimeout(()=>{if(se)return;Ae();let qe=Math.round(R/1e3);ne(new Error(`[Directive] Approval timeout: Request ${E} not resolved within ${qe}s.
|
|
13
|
+
Solutions:
|
|
14
|
+
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
15
|
+
2. Set autoApproveToolCalls: true to auto-approve
|
|
16
|
+
3. Increase approvalTimeoutMs (current: ${R}ms)
|
|
17
|
+
See: https://directive.run/docs/ai/running-agents`));},R);})}function xn(){return {...mt(G.facts)}}return {system:G,get facts(){return xn()},get totalTokens(){return st(G.facts).tokenUsage},get timeline(){return J},async run(E,H,ge){return I(E,H,xn(),void 0,ge)},runStream(E,H,ge={}){let ne=new AbortController,se=1e4,fe=[],Ae=[],Oe=false,Se=Date.now(),qe=0,De=1e5,Ee="",ut;ge.signal&&(ut=()=>ne.abort(),ge.signal.addEventListener("abort",ut,{once:true}));let kt=()=>{ut&&ge.signal&&ge.signal.removeEventListener("abort",ut);},Ue=ye=>{if(Oe)return;let ke=Ae.shift();ke?ke(ye):(fe.push(ye),fe.length>se&&fe.shift());},ae=()=>{Oe=true,kt();for(let ye of Ae)ye(null);Ae.length=0;},me=(async()=>{Ue({type:"progress",phase:"starting",message:"Running input guardrails"});try{let ye=H,ke=(s.input??[]).map((de,Je)=>Tt(de,Je,"input"));for(let de of ke){let{name:Je}=de,Nt={agentName:E.name,input:ye,facts:G.facts.$store.toObject()},_e=await Et(de,{input:ye,agentName:E.name},Nt);if(!_e.passed)throw Ue({type:"guardrail_triggered",guardrailName:Je,reason:_e.reason??"Input validation failed",partialOutput:Ee,stopped:!0}),new ct({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${Je}" failed: ${_e.reason}`,guardrailName:Je,guardrailType:"input",userMessage:_e.reason??"Input validation failed",agentName:E.name,input:ye});_e.transformed!==void 0&&(ye=_e.transformed);}Ue({type:"progress",phase:"generating",message:"Starting agent"}),G.batch(()=>{let de=st(G.facts);at(G.facts,{...de,status:"running",currentAgent:E.name,input:ye,startedAt:Date.now()});});let Le=await gn(e,E,ye,{signal:ne.signal,onMessage:de=>{let Je=en(G.facts);if(xt(G.facts,[...Je,de]),Ue({type:"message",message:de}),de.role==="assistant"&&de.content){let Nt=Math.ceil(de.content.length/4);qe+=Nt,Ee+=de.content,Ee.length>De&&(Ee=Ee.slice(-De)),Ue({type:"token",data:de.content,tokenCount:qe});}},onToolCall:async de=>{Ue({type:"tool_start",tool:de.name,toolCallId:de.id,arguments:de.arguments});let Je=(s.toolCall??[]).map((_e,pt)=>Tt(_e,pt,"toolCall"));for(let _e of Je){let{name:pt}=_e,It={agentName:E.name,input:ye,facts:G.facts.$store.toObject()},Kt=await Et(_e,{toolCall:de,agentName:E.name,input:ye},It);if(!Kt.passed)throw Ue({type:"guardrail_triggered",guardrailName:pt,reason:Kt.reason??"Tool call blocked",partialOutput:Ee,stopped:!0}),new ct({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${pt}" failed: ${Kt.reason}`,guardrailName:pt,guardrailType:"toolCall",userMessage:Kt.reason??"Tool call blocked",data:{toolCall:de},agentName:E.name,input:ye})}if(!u){let _e=`tool-${de.id}`;Ue({type:"approval_required",requestId:_e,toolName:de.name});let pt={id:_e,type:"tool_call",agentName:E.name,description:`Tool call: ${de.name}`,data:de,requestedAt:Date.now()};G.batch(()=>{let It=wt(G.facts);ft(G.facts,{...It,pending:[...It.pending,pt]});}),c?.(pt),await Pt(_e,ne.signal),Ue({type:"approval_resolved",requestId:_e,approved:!0});}let Nt=tn(G.facts);At(G.facts,[...Nt,de]),de.result&&Ue({type:"tool_end",tool:de.name,toolCallId:de.id,result:de.result});}},h);Ue({type:"progress",phase:"finishing",message:"Running output guardrails"});let jt=(s.output??[]).map((de,Je)=>Tt(de,Je,"output"));for(let de of jt){let{name:Je}=de,Nt={agentName:E.name,input:ye,facts:G.facts.$store.toObject()},_e=await Et(de,{output:Le.output,agentName:E.name,input:ye,messages:Le.messages},Nt);if(!_e.passed)throw Ue({type:"guardrail_triggered",guardrailName:Je,reason:_e.reason??"Output validation failed",partialOutput:typeof Le.output=="string"?Le.output:"",stopped:!0}),new ct({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${Je}" failed: ${_e.reason}`,guardrailName:Je,guardrailType:"output",userMessage:_e.reason??"Output validation failed",agentName:E.name,input:ye});_e.transformed!==void 0&&(Le.output=_e.transformed);}G.batch(()=>{let de=st(G.facts);at(G.facts,{...de,status:"completed",output:Le.output,tokenUsage:de.tokenUsage+Le.totalTokens,turnCount:de.turnCount+Le.messages.length,completedAt:Date.now()});});let ht=Date.now()-Se;return Ue({type:"done",totalTokens:Le.totalTokens,duration:ht,droppedTokens:0}),ae(),Le}catch(ye){throw Ue({type:"error",error:ye instanceof Error?ye:new Error(String(ye))}),ae(),ye}})();return me.catch(()=>{}),{stream:{[Symbol.asyncIterator](){return {async next(){return fe.length>0?{done:false,value:fe.shift()}:Oe?{done:true,value:void 0}:new Promise(ye=>{Ae.push(ke=>{ye(ke===null?{done:true,value:void 0}:{done:false,value:ke});});})}}}},result:me,abort:()=>{ne.abort(),ae();}}},async waitForIdle(E){let H=()=>st(G.facts).status!=="running";if(H())return;let ge=Date.now();for(;!H();){if(E!==void 0&&Date.now()-ge>E)throw new Error("[Directive Orchestrator] waitForIdle timed out");await new Promise(ne=>setTimeout(ne,50));}},approve(E){G.batch(()=>{let H=wt(G.facts);if(!H.pending.some(se=>se.id===E)){W&&console.debug(`[Directive] approve() ignored: no pending request "${E}"`);return}let ge=200,ne=[...H.approved,E];ft(G.facts,{...H,pending:H.pending.filter(se=>se.id!==E),approved:ne.length>ge?ne.slice(-ge):ne});});},reject(E,H){G.batch(()=>{let ge=wt(G.facts);if(!ge.pending.some(Ae=>Ae.id===E)){W&&console.debug(`[Directive] reject() ignored: no pending request "${E}"`);return}H&&W&&console.debug(`[Directive] Request ${E} rejected: ${H}`);let ne={id:E,reason:H,rejectedAt:Date.now()},se=200,fe=[...ge.rejected,ne];ft(G.facts,{...ge,pending:ge.pending.filter(Ae=>Ae.id!==E),rejected:fe.length>se?fe.slice(-se):fe});});},pause(){let E=st(G.facts);at(G.facts,{...E,status:"paused"});},resume(){let E=st(G.facts);E.status==="paused"&&at(G.facts,{...E,status:E.currentAgent?"running":"idle"});},reset(){G.batch(()=>{at(G.facts,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),ft(G.facts,{pending:[],approved:[],rejected:[]}),xt(G.facts,[]),At(G.facts,[]),bt(G.facts,{pending:[],resolved:[],cancelled:[]}),adapterUtils.setBridgeFact(G.facts,"__budgetWarningFired",false);}),Re.clear(),Me.clear();},async checkpoint(E){if(st(G.facts).status==="running")throw new Error("[Directive] Cannot checkpoint while agent is running");if(!G.debug?.export)throw new Error("[Directive] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let ge={version:1,id:Ct(),createdAt:new Date().toISOString(),label:E?.label,systemExport:G.debug.export(),timelineExport:J?.export()??null,localState:{type:"single"},memoryExport:S?S.export?.()??null:null,orchestratorType:"single"};return U&&await U.save(ge),ge},restore(E,H){if(!rn(E))throw new Error("[Directive] Invalid checkpoint data");if(E.orchestratorType!=="single")throw new Error("[Directive] Cannot restore multi-agent checkpoint in single-agent orchestrator");if(!G.debug?.import)throw new Error("[Directive] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");G.debug.import(E.systemExport),H?.restoreTimeline!==false&&E.timelineExport&&J&&J.import(E.timelineExport),E.memoryExport!==null&&S&&S.import&&S.import(E.memoryExport);},resumeBreakpoint(E,H){H&&Re.set(E,H),G.batch(()=>{let ge=yt(G.facts),ne=[...ge.resolved,E];bt(G.facts,{...ge,pending:ge.pending.filter(se=>se.id!==E),resolved:ne.length>Mt?ne.slice(-Mt):ne});});},cancelBreakpoint(E,H){H&&Me.set(E,H),G.batch(()=>{let ge=yt(G.facts),ne=[...ge.cancelled,E];bt(G.facts,{...ge,pending:ge.pending.filter(se=>se.id!==E),cancelled:ne.length>Mt?ne.slice(-Mt):ne});});},getPendingBreakpoints(){return [...yt(G.facts).pending]},dispose(){G.destroy();}}}var Ar=1e5;function Cr(t){if(typeof t=="string")return t;try{let e=new WeakSet,r=JSON.stringify(t,(o,n)=>{if(typeof n=="object"&&n!==null){if(e.has(n))return "[Circular]";e.add(n);}return n});return r.length>Ar?r.slice(0,Ar)+"...[truncated]":r}catch{return String(t)}}function Io(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:o="[REDACTED]"}=t;return n=>{let a=n.input,s=false;for(let c of e)c.lastIndex=0,c.test(a)&&(s=true,r&&(c.lastIndex=0,a=a.replace(c,o)));return s&&!r?{passed:false,reason:"Input contains PII"}:{passed:true,transformed:r&&s?a:void 0}}}function Oo(t){let{checkFn:e,message:r="Content flagged by moderation"}=t;return async o=>{let n="output"in o?typeof o.output=="string"?o.output:JSON.stringify(o.output):o.input,a=await e(n);return {passed:!a,reason:a?r:void 0}}}function _o(t){let{maxTokensPerMinute:e=1e5,maxRequestsPerMinute:r=60}=t,o=Math.max(r,1e3),n=[],a=[],s=6e4;function c(l,d){let p=0,f=l.length;for(;p<f;){let v=p+f>>>1;(l[v]??0)<d?p=v+1:f=v;}return p}let u=(l,d)=>{let p=Date.now(),f=p-s,v=c(n,f);v>0&&(n=n.slice(v));let R=c(a,f);R>0&&(a=a.slice(R));let S=d.facts[Zt]?.tokenUsage??0,w=n.length,x=a.length;return w+S>e?{passed:false,reason:"Token rate limit exceeded"}:x>=r?{passed:false,reason:"Request rate limit exceeded"}:(a.length<o&&a.push(p),n.length<o&&n.push(p),{passed:true})};return u.reset=()=>{n=[],a=[];},u}function No(t){let{allowlist:e,denylist:r,caseSensitive:o=false}=t,n=e?.map(s=>o?s:s.toLowerCase()),a=r?.map(s=>o?s:s.toLowerCase());return s=>{let c=o?s.toolCall.name:s.toolCall.name.toLowerCase();return n&&!n.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" not in allowlist`}:a&&a.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" is blocked`}:{passed:true}}}function $o(t){let{validate:e,errorPrefix:r="Output schema validation failed"}=t;return o=>{let n=e(o.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 jo(t){let{type:e,requiredFields:r=[],minLength:o,maxLength:n,minStringLength:a,maxStringLength:s}=t;return c=>{let u=c.output;switch(e){case "string":return typeof u!="string"?{passed:false,reason:`Expected string, got ${typeof u}`}:a!==void 0&&u.length<a?{passed:false,reason:`String too short: ${u.length} < ${a}`}:s!==void 0&&u.length>s?{passed:false,reason:`String too long: ${u.length} > ${s}`}:{passed:true};case "number":return typeof u!="number"||Number.isNaN(u)?{passed:false,reason:`Expected number, got ${typeof u}`}:{passed:true};case "boolean":return typeof u!="boolean"?{passed:false,reason:`Expected boolean, got ${typeof u}`}:{passed:true};case "object":if(typeof u!="object"||u===null||Array.isArray(u))return {passed:false,reason:`Expected object, got ${Array.isArray(u)?"array":typeof u}`};for(let l of r)if(!(l in u))return {passed:false,reason:`Missing required field: ${l}`};return {passed:true};case "array":return Array.isArray(u)?o!==void 0&&u.length<o?{passed:false,reason:`Array too short: ${u.length} < ${o}`}:n!==void 0&&u.length>n?{passed:false,reason:`Array too long: ${u.length} > ${n}`}:{passed:true}:{passed:false,reason:`Expected array, got ${typeof u}`};default:return {passed:false,reason:`Unknown type: ${e}`}}}}function Go(t){let{maxCharacters:e,maxTokens:r,estimateTokens:o=n=>Math.ceil(n.length/4)}=t;return n=>{let a=Cr(n.output);if(e!==void 0&&a.length>e)return {passed:false,reason:`Output too long: ${a.length} characters (max: ${e})`};if(r!==void 0){let s=o(a);if(s>r)return {passed:false,reason:`Output too long: ~${s} tokens (max: ${r})`}}return {passed:true}}}function Bo(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 o=e.map(n=>{if(n instanceof RegExp)return n;let a=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(a,r?"g":"gi")});return n=>{let a=Cr(n.output);for(let s of o)if(s.lastIndex=0,s.test(a))return {passed:false,reason:`Output contains blocked content matching: ${s.source}`};return {passed:true}}}function Lo(t){return t.status==="running"}function Fo(t){return t.pending.length>0}function qo(t,e){return t/1e6*e}var Uo=new Set(["http:","https:"]);function Ho(t){try{let e=new URL(t);if(!Uo.has(e.protocol))throw new Error(`[Directive] Invalid baseURL protocol "${e.protocol}" \u2013 only http: and https: are allowed`)}catch(e){throw e instanceof Error&&e.message.startsWith("[Directive]")?e:new Error(`[Directive] Invalid baseURL "${t}" \u2013 must be a valid URL (e.g. "https://api.openai.com/v1")`)}}function zo(t){let{fetch:e=globalThis.fetch,buildRequest:r,parseResponse:o,parseOutput:n,hooks:a}=t,c=n??(u=>{try{return JSON.parse(u)}catch{return u}});return async(u,l,d)=>{let p=Date.now();a?.onBeforeCall?.({agent:u,input:l,timestamp:p});let f=[{role:"user",content:l}];try{let{url:v,init:R}=r(u,l,f),h=d?.signal?{...R,signal:d.signal}:R,k=await e(v,h);if(!k.ok){let U=await k.text().catch(()=>"");throw new Error(`[Directive] AgentRunner request failed: ${k.status} ${k.statusText}${U?` \u2013 ${U.slice(0,300)}`:""}`)}let S=await o(k,f),w={inputTokens:S.inputTokens??0,outputTokens:S.outputTokens??0},x={role:"assistant",content:S.text},M=[...f,x];d?.onMessage?.(x);let q=Date.now()-p;return a?.onAfterCall?.({agent:u,input:l,output:S.text,totalTokens:S.totalTokens,tokenUsage:w,durationMs:q,timestamp:Date.now()}),{output:c(S.text),messages:M,toolCalls:[],totalTokens:S.totalTokens,tokenUsage:w}}catch(v){let R=Date.now()-p;throw v instanceof Error&&a?.onError?.({agent:u,input:l,error:v,durationMs:R,timestamp:Date.now()}),v}}}function Jo(t,...e){let r=t;for(let o of e)r=o(r);return r}function vn(t,e){let r=typeof t.content=="string"?t.content:JSON.stringify(t.content);return Math.ceil(r.length/4)}function Vn(t,e){return t.reduce((r,o)=>r+vn(o),0)}function Mr(t={}){return (e,r={})=>{let o={...t,...r},n=o.maxMessages??100,a=o.preserveRecentCount??5;if(e.length<=n)return {keep:[...e],toSummarize:[],estimatedTokens:Vn(e)};let s=e.slice(-a),c=e.slice(0,-a),u=Math.max(0,n-a),l=c.slice(-u),d=c.slice(0,-u||void 0),p=[...l,...s];return {keep:p,toSummarize:d.length>0?d:[],estimatedTokens:Vn(p)}}}function Dr(t={}){return (e,r={})=>{let o={...t,...r},n=o.maxTokens??4e3,a=o.preserveRecentCount??5,s=o.countSystemMessages??true,c=e.slice(-a),u=e.slice(0,-a),l=c.reduce((v,R)=>!s&&R.role==="system"?v:v+vn(R),0),d=[],p=[],f=l;for(let v=u.length-1;v>=0;v--){let R=u[v],h=!s&&R.role==="system"?0:vn(R);if(f+h<=n)d.unshift(R),f+=h;else {p.push(...u.slice(0,v+1));break}}return {keep:[...d,...c],toSummarize:p,estimatedTokens:f}}}function Wo(t={}){let e=Mr(t),r=Dr(t);return (o,n={})=>{let a={...t,...n},s=e(o,a),c=r(o,a);return s.keep.length<=c.keep.length?s:c}}function Ko(t){let{strategy:e,summarizer:r,strategyConfig:o={},autoManage:n=false,onMemoryManaged:a,onManageError:s,maxContextTokens:c}=t,u={messages:[],summaries:[],totalMessagesProcessed:0,estimatedTokens:0},l=false;async function d(){if(l)return {messagesBefore:u.messages.length,messagesAfter:u.messages.length,messagesSummarized:0,estimatedTokensBefore:u.estimatedTokens,estimatedTokensAfter:u.estimatedTokens};l=true;try{let f=u.messages.length,v=u.estimatedTokens,R=e(u.messages,o);if(R.toSummarize.length===0)return {messagesBefore:f,messagesAfter:f,messagesSummarized:0,estimatedTokensBefore:v,estimatedTokensAfter:R.estimatedTokens};let h;r&&R.toSummarize.length>0&&(h=await r(R.toSummarize),u.summaries.push({content:h,messagesCount:R.toSummarize.length,createdAt:Date.now()})),u.messages=R.keep,u.estimatedTokens=R.estimatedTokens;let k={messagesBefore:f,messagesAfter:u.messages.length,messagesSummarized:R.toSummarize.length,summary:h,estimatedTokensBefore:v,estimatedTokensAfter:R.estimatedTokens};return a?.(k),k}finally{l=false;}}function p(){if(l)return;e(u.messages,o).toSummarize.length>0&&d().catch(v=>{let R=v instanceof Error?v:new Error(String(v));s?s(R):console.error("[Directive Memory] Auto-manage error:",R);});}return {getState(){return {...u,messages:[...u.messages],summaries:u.summaries.map(f=>({...f}))}},addMessage(f){u.messages.push(f),u.totalMessagesProcessed++,u.estimatedTokens+=vn(f),n&&p();},addMessages(f){for(let v of f)u.messages.push(v),u.totalMessagesProcessed++,u.estimatedTokens+=vn(v);n&&p();},getContextMessages(){let f=[];if(u.summaries.length>0){let v=u.summaries.map(R=>R.content).join(`
|
|
2
18
|
|
|
3
19
|
---
|
|
4
20
|
|
|
5
|
-
`);
|
|
21
|
+
`);f.push({role:"system",content:`[Previous conversation summary]
|
|
6
22
|
|
|
7
|
-
${
|
|
8
|
-
`);return r.length<=
|
|
9
|
-
[truncated]`}}function
|
|
10
|
-
${
|
|
11
|
-
`)}`}}function
|
|
23
|
+
${v}`});}if(f.push(...u.messages),c){let v=Vn(f);v>c&&console.warn(`[Directive Memory] Context messages (${v} tokens) exceed maxContextTokens (${c}). Consider calling manage() or reducing message count.`);}return f},manage:d,isManaging(){return l},clear(){u={messages:[],summaries:[],totalMessagesProcessed:0,estimatedTokens:0};},export(){return {...u,messages:[...u.messages],summaries:u.summaries.map(f=>({...f}))}},import(f){u={...f,messages:[...f.messages],summaries:f.summaries.map(v=>({...v}))};}}}function Vo(t=500){return async e=>{let r=e.filter(o=>o.role!=="system").map(o=>{let n=typeof o.content=="string"?o.content:JSON.stringify(o.content);return `${o.role}: ${n.slice(0,100)}${n.length>100?"...":""}`}).join(`
|
|
24
|
+
`);return r.length<=t?r:r.slice(0,t)+`
|
|
25
|
+
[truncated]`}}function Xo(){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(a=>`Q: ${a.trim()}`));}return e.length===0?`[${t.length} messages processed - no key questions found]`:`Key topics discussed:
|
|
26
|
+
${e.join(`
|
|
27
|
+
`)}`}}function Yo(t,e={}){let{maxSummaryLength:r=500,preserveKeyFacts:o=true}=e;return async n=>{let a=n.filter(c=>c.role!=="system").map(c=>{let u=typeof c.content=="string"?c.content:JSON.stringify(c.content);return `${c.role.toUpperCase()}: ${u}`}).join(`
|
|
12
28
|
|
|
13
|
-
`),
|
|
14
|
-
${
|
|
29
|
+
`),s=`Summarize the following conversation in ${r} characters or less.
|
|
30
|
+
${o?"Preserve key facts, decisions, and action items.":""}
|
|
15
31
|
Focus on information that would be useful context for continuing the conversation.
|
|
16
32
|
|
|
17
33
|
CONVERSATION:
|
|
18
34
|
${a}
|
|
19
35
|
|
|
20
|
-
SUMMARY:`;return
|
|
36
|
+
SUMMARY:`;return t(s)}}var Xn=class{buffer=[];maxSize;strategy;pullWaiters=[];pushWaiters=[];closed=false;droppedCount=0;constructor(e="buffer",r=1e3){this.strategy=e,this.maxSize=r;}async push(e){if(this.closed)return false;let r=this.pullWaiters.shift();if(r)return r(e),true;if(this.buffer.length>=this.maxSize)switch(this.strategy){case "drop":return this.droppedCount++,false;case "block":if(await new Promise(o=>{this.pushWaiters.push(o);}),this.closed)return false;break;}return this.buffer.push(e),true}async pull(){let e=this.pushWaiters.shift();return e&&e(),this.buffer.length>0?this.buffer.shift():this.closed?null:new Promise(r=>{this.pullWaiters.push(r);})}close(){this.closed=true;for(let e of this.pullWaiters)e(null);this.pullWaiters=[];for(let e of this.pushWaiters)e();this.pushWaiters=[];}getDroppedCount(){return this.droppedCount}};function Qo(t,e={}){let{streamingGuardrails:r=[]}=e;return (o,n,a={})=>{let{signal:s,backpressure:c="buffer",bufferSize:u=1e3,guardrailCheckInterval:l=50,stopOnGuardrail:d=true}=a;if(l<=0||!Number.isFinite(l))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${l}`);let p=new Xn(c,u),f=new AbortController,v="",R=0,h=false,k=Date.now(),S;s&&(S=()=>f.abort(),s.addEventListener("abort",S));let w=()=>{S&&s&&s.removeEventListener("abort",S);};async function x(){for(let U of r)try{let T=await U.check(v,R);if(!T.passed){let $=U.stopOnFail!==!1,N={type:"guardrail_triggered",guardrailName:U.name,reason:T.reason??"Guardrail check failed",partialOutput:v,stopped:$};return await p.push(N),$&&(typeof d=="function"?d:()=>d)(N)&&(h=!0,f.abort()),N}}catch{}return null}let M=(async()=>{await p.push({type:"progress",phase:"starting",message:"Starting agent"});try{let U=await t(o,n,{signal:f.signal,onToken:async N=>{h||(R++,v+=N,await p.push({type:"token",data:N,tokenCount:R}),R%l===0&&await x());},onToolStart:async(N,W,j)=>{await p.push({type:"progress",phase:"tool_calling",message:`Calling ${N}`}),await p.push({type:"tool_start",tool:N,toolCallId:W,arguments:j});},onToolEnd:async(N,W,j)=>{await p.push({type:"tool_end",tool:N,toolCallId:W,result:j}),await p.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async N=>{await p.push({type:"message",message:N});}});await x();let T=Date.now()-k,$=p.getDroppedCount();return await p.push({type:"done",totalTokens:U.totalTokens,duration:T,droppedTokens:$}),p.close(),U}catch(U){let T={type:"error",error:U instanceof Error?U:new Error(String(U)),partialOutput:v||void 0};throw await p.push(T),p.close(),U}finally{w();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let U=await p.pull();return U===null?{done:true,value:void 0}:{done:false,value:U}}}}},result:M,abort:()=>f.abort()}}}function Zo(t){let{checkFn:e,threshold:r=.8,stopOnFail:o=true}=t;return {name:"toxicity-streaming",stopOnFail:o,async check(n){let a=await e(n);return a>r?{passed:false,reason:`Toxicity score ${a.toFixed(2)} exceeds threshold ${r}`,severity:"critical"}:{passed:true}}}}function es(t){let{maxTokens:e,warnAt:r,stopOnFail:o=true}=t,n=false;return {name:"length-streaming",stopOnFail:o,check(a,s){return s>=e?{passed:false,reason:`Output exceeded maximum length of ${e} tokens`,severity:"error"}:r&&s>=r&&!n?(n=true,{passed:true,warning:`Approaching maximum length: ${s}/${e} tokens`,severity:"warning"}):{passed:true}}}}function ts(t){let{patterns:e,stopOnFail:r=true}=t;return {name:"pattern-streaming",stopOnFail:r,check(o){for(let{regex:n,name:a}of e)if(n.lastIndex=0,n.test(o))return {passed:false,reason:`Detected ${a} pattern in output`,severity:"error"};return {passed:true}}}}function ns(t,e={}){let{name:r="combined-streaming",stopOnFirstFail:o=true}=e;return {name:r,stopOnFail:o,async check(n,a){let s=[];for(let c of t){let u=await c.check(n,a);if(!u.passed){if(o)return {...u,reason:`[${c.name}] ${u.reason}`};s.push(`[${c.name}] ${u.reason??"failed"}`);}}return s.length>0?{passed:false,reason:s.join("; ")}:{passed:true}}}}function rs(t,e,r={}){let{minTokens:o=0,stopOnFail:n=true}=r;return {name:t,stopOnFail:n,async check(a,s){if(s<o)return {passed:true};let c=await e({output:a,agentName:"streaming",input:"",messages:[]},{agentName:"streaming",input:"",facts:{}});return {passed:c.passed,reason:c.reason,severity:c.passed?void 0:"error"}}}}async function os(t){let e="";for await(let r of t)r.type==="token"&&(e+=r.data);return e}async function*ss(t,e){for await(let r of t)await e(r),yield r;}async function*as(t,e){let r=new Set(e);for await(let o of t)r.has(o.type)&&(yield o);}async function*is(t,e){for await(let r of t)yield await e(r);}var us=1e4;function Yn(t){if(t.length===0)return {stream:{[Symbol.asyncIterator](){let d={done:true,value:void 0};return {async next(){return d},async return(){return d}}}},getDroppedCount:()=>0};let e=[],r=[],o=t.length,n=false,a=0;function s(l){if(n)return;let d=r.shift();if(d){d(l);return}e.length<us?e.push(l):a++;}function c(){if(o--,o<=0){n=true;for(let l of r)l(null);r.length=0;}}for(let l of t)(async()=>{try{for await(let d of l.stream)s({chunk:d,agentId:l.agentId});}catch(d){s({chunk:{type:"error",error:d instanceof Error?d:new Error(String(d))},agentId:l.agentId});}finally{c();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return e.length>0?{done:false,value:e.shift()}:n?{done:true,value:void 0}:new Promise(l=>{r.push(d=>{l(d===null?{done:true,value:void 0}:{done:false,value:d});});})},return(){n=true,e.length=0;for(let l of r)l(null);return r.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>a}}var sn=class extends Error{iterations;history;lastResult;totalTokens;constructor(e){super(`[Directive Reflection] Exhausted ${e.iterations} iterations without passing evaluation. Last feedback: ${e.history[e.history.length-1]?.feedback??"(none)"}`),this.name="ReflectionExhaustedError",this.iterations=e.iterations,this.history=e.history,this.lastResult=e.lastResult,this.totalTokens=e.totalTokens;}};function cs(t,e,r){return `${t}
|
|
37
|
+
|
|
38
|
+
Feedback on your previous response:
|
|
39
|
+
${e}
|
|
40
|
+
|
|
41
|
+
Please improve your response.`}function ls(t,e){let r=e.maxIterations??2,o=e.buildRetryInput??cs,n=e.onExhausted??"accept-last";if(r<1)throw new Error("[Directive Reflection] maxIterations must be >= 1");return typeof process<"u"&&process.env?.NODE_ENV!=="production"&&r>3&&console.warn("[Directive Reflection] maxIterations > 3 rarely improves quality. Consider using maxIterations <= 3 to avoid unbounded token burn."),async(a,s,c)=>{let u=[],l=s,d=0,p=null;for(let f=0;f<r;f++){let v=Date.now(),R=await t(a,l,c);p=R,d+=R.totalTokens;let h={input:s,iteration:f,result:R,history:[...u]},k=await e.evaluate(R.output,h);u.push(k);let S=Date.now()-v;try{e.onIteration?.({iteration:f,passed:k.passed,feedback:k.feedback,score:k.score,durationMs:S});}catch{}if(k.passed)return {...R,totalTokens:d};if(e.budgetThreshold!==void 0&&d>=e.budgetThreshold)break;f<r-1&&k.feedback&&(l=o(s,k.feedback,f));}if(n==="throw")throw new sn({iterations:r,history:u,lastResult:p,totalTokens:d});return {...p,totalTokens:d}}}var Qn={successRate:.5,latency:.3,circuitState:.2};function Zn(t={}){let e=t.windowMs??6e4,r=t.maxNormalLatencyMs??5e3,o=t.maxEventsPerAgent??1e3,n={successRate:t.weights?.successRate??Qn.successRate,latency:t.weights?.latency??Qn.latency,circuitState:t.weights?.circuitState??Qn.circuitState};if(!Number.isFinite(e)||e<=0)throw new Error("[Directive HealthMonitor] windowMs must be a positive number");if(!Number.isFinite(r)||r<=0)throw new Error("[Directive HealthMonitor] maxNormalLatencyMs must be a positive number");if(!Number.isFinite(o)||o<1)throw new Error("[Directive HealthMonitor] maxEventsPerAgent must be >= 1");for(let[h,k]of Object.entries(n))if(k<0||k>1)throw new Error(`[Directive HealthMonitor] weight "${h}" must be between 0 and 1 (got ${k})`);let a=n.successRate+n.latency+n.circuitState;if(Math.abs(a-1)>.01)throw new Error(`[Directive HealthMonitor] weights must sum to ~1.0 (tolerance: \xB10.01, got ${a.toFixed(4)})`);let s=new Map,c=new Map,u=0,l=null,d=-1;function p(h){let k=s.get(h);return k||(k=[],s.set(h,k)),k}function f(h,k){let S=k-e,w=0;for(;w<h.length&&h[w].timestamp<S;)w++;let x=h.length-w-o;x>0&&(w+=x),w>0&&h.splice(0,w);}function v(h){let k=s.get(h);if(!k||k.length===0)return 50;let S=Date.now();if(f(k,S),k.length===0)return 50;let x=k.filter(N=>N.success).length/k.length,M=k.reduce((N,W)=>N+W.latencyMs,0)/k.length,q=Math.min(M/r,1),U=c.get(h)??"CLOSED",T=U==="CLOSED"?1:U==="HALF_OPEN"?.5:0,$=x*n.successRate+(1-q)*n.latency+T*n.circuitState;return Math.round($*100)}function R(h){let k=p(h),S=Date.now();f(k,S);let w=k.filter(T=>T.success).length,x=k.length-w,M=k.length>0?w/k.length:0,q=k.length>0?k.reduce((T,$)=>T+$.latencyMs,0)/k.length:0,U=[];for(let T=k.length-1;T>=0&&U.length<5;T--)k[T].errorMessage&&U.unshift(k[T].errorMessage);return {agentId:h,circuitState:c.get(h)??"CLOSED",successRate:M,avgLatencyMs:q,recentFailures:x,recentSuccesses:w,healthScore:v(h),lastErrors:U}}return {recordSuccess(h,k){let S=p(h);S.push({success:true,latencyMs:k,timestamp:Date.now()}),f(S,Date.now()),u++;},recordFailure(h,k,S){let w=p(h);w.push({success:false,latencyMs:k,timestamp:Date.now(),errorMessage:S?.message}),f(w,Date.now()),u++;},getMetrics(h){return R(h)},getAllMetrics(){if(u===d&&l)return l;let h=Object.create(null);for(let k of s.keys())h[k]=R(k);return l=h,d=u,h},getHealthScore(h){return v(h)},updateCircuitState(h,k){c.set(h,k),u++;},reset(){s.clear(),c.clear(),u++,l=null,d=-1;}}}function $t(t){if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}function gs(t,e){if(Object.is(t,e))return true;if(typeof t!=typeof e||t===null||e===null||typeof t!="object")return false;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return false;for(let s=0;s<t.length;s++)if(t[s]!==e[s])return false;return true}let r=t,o=e,n=Object.keys(r),a=Object.keys(o);if(n.length!==a.length)return false;for(let s of n)if(r[s]!==o[s])return false;return true}function an(t){switch(t.type){case "sequential":return t.step;case "supervisor":return t.round;case "reflect":return t.iteration;case "debate":return t.round;case "dag":return t.completedCount;case "goal":return t.step}}function ms(t){let e=an(t),r=t.stepsTotal??null;switch(t.type){case "sequential":{let o=t.results.reduce((s,c)=>s+c.totalTokens,0),n=t.results.length>0?o/t.results.length:0,a=r!=null?r-e:null;return {percentage:r!=null&&r>0?Math.round(e/r*100):0,stepsCompleted:e,stepsTotal:r,tokensConsumed:o,estimatedTokensRemaining:n>0&&a!=null?Math.round(n*a):null,estimatedStepsRemaining:a}}case "supervisor":{let o=t.workerResults.reduce((a,s)=>a+s.totalTokens,0),n=r!=null?r-e:null;return {percentage:r!=null&&r>0?Math.round(e/r*100):0,stepsCompleted:e,stepsTotal:r,tokensConsumed:o,estimatedTokensRemaining:null,estimatedStepsRemaining:n}}case "reflect":{let o=t.history.reduce((a,s)=>a+s.producerTokens+s.evaluatorTokens,0),n=r!=null?r-e:null;return {percentage:r!=null&&r>0?Math.round(e/r*100):0,stepsCompleted:e,stepsTotal:r,tokensConsumed:o,estimatedTokensRemaining:null,estimatedStepsRemaining:n}}case "debate":{let o=t.tokensConsumed,n=r!=null?r-e:null;return {percentage:r!=null&&r>0?Math.round(e/r*100):0,stepsCompleted:e,stepsTotal:r,tokensConsumed:o,estimatedTokensRemaining:null,estimatedStepsRemaining:n}}case "dag":{let o=r??Object.keys(t.statuses).length,n=t.completedCount,a=Object.values(t.nodeResults).reduce((u,l)=>u+l.totalTokens,0),s=n>0?a/n:0,c=o-n;return {percentage:o>0?Math.round(n/o*100):0,stepsCompleted:n,stepsTotal:o,tokensConsumed:a,estimatedTokensRemaining:c>0?Math.round(s*c):0,estimatedStepsRemaining:c}}case "goal":{let o=Object.values(t.nodeOutputs).reduce((a,s)=>a+s.totalTokens,0),n=t.lastSatisfaction;return {percentage:Math.round(n*100),stepsCompleted:e,stepsTotal:r??null,tokensConsumed:o,estimatedTokensRemaining:null,estimatedStepsRemaining:t.stepMetrics.length>0?fs(t):null}}}}function fs(t){let e=t.stepMetrics;if(e.length<2)return null;let r=1-t.lastSatisfaction;if(r<=0)return 0;let n=e.reduce((a,s)=>a+Math.max(0,s.satisfactionDelta),0)/e.length;return n<=0?null:Math.ceil(r/n)}function hs(t,e){if(t.type!==e.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${t.type} vs ${e.type}`);let r=n=>{switch(n.type){case "sequential":return n.results.reduce((a,s)=>a+s.totalTokens,0);case "supervisor":return n.workerResults.reduce((a,s)=>a+s.totalTokens,0);case "reflect":return n.history.reduce((a,s)=>a+s.producerTokens+s.evaluatorTokens,0);case "debate":return n.tokensConsumed;case "dag":return Object.values(n.nodeResults).reduce((a,s)=>a+s.totalTokens,0);case "goal":return Object.values(n.nodeOutputs).reduce((a,s)=>a+s.totalTokens,0)}},o={patternType:t.type,stepDelta:an(e)-an(t),tokensDelta:r(e)-r(t)};if(t.type==="goal"&&e.type==="goal"){let n=new Set(Object.keys(t.facts)),a=new Set(Object.keys(e.facts)),s=[],c=[],u=[];for(let l of a)n.has(l)?JSON.stringify(t.facts[l])!==JSON.stringify(e.facts[l])&&u.push({key:l,before:t.facts[l],after:e.facts[l]}):s.push(l);for(let l of n)a.has(l)||c.push(l);o.facts={added:s,removed:c,changed:u};}if(t.type==="dag"&&e.type==="dag"){let n=new Set(Object.entries(t.statuses).filter(([,a])=>a==="completed").map(([a])=>a));o.nodesCompleted=Object.entries(e.statuses).filter(([a,s])=>s==="completed"&&!n.has(a)).map(([a])=>a);}if(t.type==="goal"&&e.type==="goal"){let n=new Set(t.completedNodes);o.nodesCompleted=e.completedNodes.filter(a=>!n.has(a));}return o}async function ys(t,e,r){let o=await e.load(r);if(!o)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${r}`);let n=structuredClone(o),a=Or({...t,checkpointStore:e});return a.restore(n),a}var zt=class{count;maxPermits;queue=[];constructor(e){if(e<1||!Number.isFinite(e))throw new Error(`[Directive Semaphore] Invalid max permits: ${e}. Must be a finite number >= 1.`);this.maxPermits=e,this.count=e;}createReleaseFn(){let e=false;return ()=>{e||(e=true,this.release());}}async acquire(e){if(e?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((r,o)=>{let n,a={resolve:s=>{n&&e&&e.removeEventListener("abort",n),r(s);},reject:o};this.queue.push(a),e&&(n=()=>{let s=this.queue.indexOf(a);s>=0&&(this.queue.splice(s,1),o(new Error("[Directive Semaphore] Aborted while waiting for permit")));},e.addEventListener("abort",n,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let e=this.queue.shift();e&&(this.count--,e.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let e=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),r=this.queue.splice(0,this.queue.length);for(let o of r)o.reject(e);this.count=this.maxPermits;}},bs=adapterUtils.requirementGuard("RUN_AGENT");function Or(t){let{runner:e,agents:r,patterns:o={},onHandoff:n,onHandoffComplete:a,maxHandoffHistory:s=1e3,debug:c=false,guardrails:u={},hooks:l={},memory:d,agentRetry:p,maxTokenBudget:f,plugins:v=[],onApprovalRequest:R,autoApproveToolCalls:h=true,approvalTimeoutMs:k=3e5,constraints:S={},resolvers:w={},circuitBreaker:x,budgetWarningThreshold:M=.8,onBudgetWarning:q,selfHealing:U,checkpointStore:T,breakpoints:$=[],onBreakpoint:N,breakpointTimeoutMs:W=3e5,derive:j,scratchpad:be}=t,z=typeof c=="object"?true:!!c,Fe=typeof c=="object"?!!c.verboseTimeline:false,Be=5e3,ee={...r};if(!h&&!R)throw new Error(`[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
|
|
42
|
+
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
43
|
+
- Provide an onApprovalRequest callback to handle approvals programmatically`);if(M<0||M>1)throw new Error(`[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${M}`);let G=new Set(["__coord","__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);for(let i of Object.keys(ee))if(G.has(i))throw new Error(`[Directive MultiAgent] Agent ID "${i}" is reserved and cannot be used`);let St=new Set(Object.keys(ee)),Dt=[];for(let[i,m]of Object.entries(o)){let b=[];switch(m.type){case "parallel":b.push(...m.agents);break;case "sequential":b.push(...m.agents);break;case "supervisor":b.push(m.supervisor,...m.workers);break;case "dag":for(let g of Object.values(m.nodes))b.push(g.agent);break;case "reflect":b.push(m.agent,m.evaluator);break;case "race":b.push(...m.agents);break;case "debate":b.push(...m.agents,m.evaluator);break}for(let g of b)St.has(g)||Dt.push({patternId:i,agentId:g});}if(Dt.length>0){let i=Dt.map(({patternId:m,agentId:b})=>` - Pattern "${m}" references unknown agent "${b}"`).join(`
|
|
21
44
|
`);throw new Error(`[Directive MultiAgent] Pattern validation failed. The following agents are not registered:
|
|
22
|
-
${
|
|
45
|
+
${i}
|
|
46
|
+
|
|
47
|
+
Registered agents: ${[...St].join(", ")||"(none)"}`)}for(let[i,m]of Object.entries(o))m.type==="dag"&&Ms(i,m.nodes);let J=null,Wt=null;z&&(J=dn({goToSnapshot:i=>{try{E.debug?.goTo?.(i);}catch{}}}));let it=null,D=null;U&&(it=Zn(U.healthMonitor),U.selectionStrategy==="round-robin"&&(D=new Map));function I(i,m){try{l[i]?.(m);}catch(b){z&&console.debug(`[Directive MultiAgent] hooks.${i} threw:`,b);}}let re={__globalTokens:core.t.number(),__status:core.t.string(),__handoffs:core.t.array(),__handoffResults:core.t.array(),__budgetWarningFired:core.t.boolean()};be&&(re[gt]=core.t.object()),j&&Object.keys(j).length>0&&(re.__derived=core.t.object());let Re={facts:re,derivations:{},events:{},requirements:{}},Me=nn(S);f&&(Me.__budgetLimit={priority:100,when:i=>adapterUtils.getBridgeFact(i,"__globalTokens")>f,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let dt=Object.create(null);for(let[i,m]of Object.entries(w))dt[i]={requirement:m.requirement,key:m.key,resolve:async(b,g)=>{let y=mt(g.facts),C={facts:{...g.facts,...y},runAgent:async(P,_,K)=>e(P,_,K),signal:g.signal};return m.resolve(b,C)}};dt.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async()=>{se="paused",z&&console.debug("[Directive MultiAgent] Budget exceeded \u2014 all agents paused");}},dt.__runAgent={requirement:bs,resolve:async i=>{await Ye(i.agent,i.input);}};let vt=core.createModule("__coord",{schema:Re,init:i=>{adapterUtils.setBridgeFact(i,"__globalTokens",0),adapterUtils.setBridgeFact(i,"__status","idle"),adapterUtils.setBridgeFact(i,"__handoffs",[]),adapterUtils.setBridgeFact(i,"__handoffResults",[]),adapterUtils.setBridgeFact(i,"__budgetWarningFired",false),be&&adapterUtils.setBridgeFact(i,gt,{...be.init});},constraints:Me,resolvers:dt}),Pt=Object.create(null);Pt.__coord=vt;for(let[i,m]of Object.entries(ee)){let b=m.constraints?nn(m.constraints):{},g=Object.create(null);if(m.resolvers)for(let[y,A]of Object.entries(m.resolvers))g[y]={requirement:A.requirement,key:A.key,resolve:async(C,P)=>{let _=mt(P.facts),X={facts:{...P.facts,..._},runAgent:async(Q,Y,pe)=>e(Q,Y,pe),signal:P.signal};return A.resolve(C,X)}};Pt[i]=core.createModule(i,{schema:ln,init:y=>{at(y,{status:"idle",currentAgent:m.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),ft(y,{pending:[],approved:[],rejected:[]}),xt(y,[]),At(y,[]),bt(y,on());},constraints:b,resolvers:Object.keys(g).length>0?g:void 0});}let xn=adapterUtils.createCallbackPlugin("directive-multi-agent-callbacks",{}),Bn=[...v,xn];z&&J&&(Wt=pn(J,()=>{try{return E.debug?.currentIndex??null}catch{return null}}),Bn.push(Wt));let E=core.createSystem({modules:Pt,plugins:Bn,debug:z?{timeTravel:true}:void 0});E.start();let H=500,ge=200,ne=0,se="idle",fe=false,Ae=0,Oe=null;function Se(){if(fe)throw new Error("[Directive MultiAgent] Orchestrator has been disposed")}let qe=new Map;for(let[i,m]of Object.entries(ee))qe.set(i,new zt(m.maxConcurrent??1));let De=Object.create(null);for(let i of Object.keys(ee))De[i]={status:"idle",runCount:0,totalTokens:0};let Ee=s,ut=[],kt=[],Ue=0;function ae(i){for(kt.push(i);kt.length>Ee;)kt.shift();}let me=new Map,ze=new Set;function ye(){for(let i of ze)i();}let ke=Object.create(null),Le=new Set;function jt(){let i=Object.create(null);for(let[g,y]of Object.entries(De))i[g]={status:y.status,lastInput:y.lastInput,lastOutput:y.lastOutput,lastError:y.lastError,runCount:y.runCount,totalTokens:y.totalTokens};let m=We("__coord"),b={agents:i,coordinator:{globalTokens:ne,status:se}};return be&&m&&(b.scratchpad=adapterUtils.getBridgeFact(m,gt)??{}),b}function ht(){if(!j)return;let i=jt(),m=[],b=[];E.batch(()=>{for(let[y,A]of Object.entries(j))try{let C=A(i),P=ke[y],_=!gs(C,P);ke[y]=C,_&&m.push({derivId:y,newValue:C});}catch(C){b.push({derivId:y,derivError:C});}let g=We("__coord");g&&adapterUtils.setBridgeFact(g,"__derived",{...ke});});for(let{derivId:g,newValue:y}of m){J&&J.record({type:"derivation_update",timestamp:Date.now(),snapshotId:null,derivationId:g,valueType:typeof y}),I("onDerivationUpdate",{derivationId:g,value:y,timestamp:Date.now()});for(let A of Le)try{A(g,y);}catch{}}for(let{derivId:g,derivError:y}of b)z&&console.warn(`[Directive MultiAgent] Derivation "${g}" threw:`,y),I("onDerivationError",{derivationId:g,error:y instanceof Error?y:new Error(String(y)),timestamp:Date.now()});}let de=new Set,Je=new Map,Nt=be?{get(i){let m=We("__coord"),b=adapterUtils.getBridgeFact(m,gt);if(!(b==null||!Object.hasOwn(b,i)))return b[i]},set(i,m){if(i==="__proto__"||i==="constructor"||i==="prototype")return;let b=We("__coord"),g=[i];E.batch(()=>{let y=adapterUtils.getBridgeFact(b,gt)??{};adapterUtils.setBridgeFact(b,gt,{...y,[i]:m});}),_e(g,i,m),ht();},has(i){let m=We("__coord"),b=adapterUtils.getBridgeFact(m,gt);return b!=null&&Object.hasOwn(b,i)},delete(i){if(i==="__proto__"||i==="constructor"||i==="prototype")return;let m=We("__coord");E.batch(()=>{let b=adapterUtils.getBridgeFact(m,gt)??{},{[i]:g,...y}=b;adapterUtils.setBridgeFact(m,gt,y);}),_e([i],i,void 0),ht();},update(i){let m=Object.create(null);for(let y of Object.keys(i))y==="__proto__"||y==="constructor"||y==="prototype"||(m[y]=i[y]);let b=We("__coord"),g=Object.keys(m);if(g.length!==0){E.batch(()=>{let y=adapterUtils.getBridgeFact(b,gt)??{};adapterUtils.setBridgeFact(b,gt,{...y,...m});});for(let[y,A]of Object.entries(m))_e(g,y,A);ht();}},getAll(){let i=We("__coord");return {...adapterUtils.getBridgeFact(i,gt)??{}}},subscribe(i,m){for(let b of i)Je.has(b)||Je.set(b,new Set),Je.get(b).add(m);return ()=>{for(let b of i)Je.get(b)?.delete(m);}},onChange(i){return de.add(i),()=>{de.delete(i);}},reset(){if(!be)return;let i=We("__coord");E.batch(()=>{adapterUtils.setBridgeFact(i,gt,{...be.init});});}}:null;function _e(i,m,b){let g=Je.get(m);if(g)for(let y of g)try{y(m,b);}catch{}for(let y of de)try{y(m,b);}catch{}J&&m===i[i.length-1]&&J.record({type:"scratchpad_update",timestamp:Date.now(),snapshotId:null,keys:i}),m===i[i.length-1]&&I("onScratchpadUpdate",{keys:i,timestamp:Date.now()});}let pt=new Map,It=new Map;function Kt(i,m,b){return new Promise((g,y)=>{let A=null,C=false,P,_=We(i),K=()=>{C||(C=true,A&&(clearTimeout(A),A=null),P&&b&&b.removeEventListener("abort",P),X());},X=E.subscribe([`${i}.${Lt}`],()=>{let Q=yt(_);if(Q.resolved.includes(m)){K();let Y=pt.get(m)??null;pt.delete(m),g(Y);}else if(Q.cancelled.includes(m)){K(),pt.delete(m);let Y=It.get(m);It.delete(m),y(new Error(Y?`[Directive MultiAgent] Breakpoint ${m} cancelled: ${Y}`:`[Directive MultiAgent] Breakpoint ${m} cancelled`));}});if(b){if(P=()=>{K(),y(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${m}`));},b.aborted){K(),y(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${m}`));return}b.addEventListener("abort",P,{once:true});}A=setTimeout(()=>{K(),pt.delete(m),It.delete(m),y(new Error(`[Directive MultiAgent] Breakpoint timeout: ${m} not resolved within ${Math.round(W/1e3)}s`));},W);})}async function Vt(i,m,b,g,y,A){if($.length===0)return {input:g,skip:false};let C=We(m),P={agentId:m,agentName:b,input:g,state:mt(C),breakpointType:i,patternId:A?.patternId,handoff:A?.handoff},_=bn($,i,P);if(!_)return {input:g,skip:false};let K=yn(),X={id:K,type:i,agentId:m,input:g,label:_.label,requestedAt:Date.now()};E.batch(()=>{let Y=yt(C);bt(C,{...Y,pending:[...Y.pending,X]});});try{N?.(X);}catch{}try{l.onBreakpoint?.(X);}catch{}J&&J.record({type:"breakpoint_hit",timestamp:Date.now(),agentId:m,snapshotId:null,breakpointId:K,breakpointType:i,label:_.label});let Q=await Kt(m,K,y);return J&&J.record({type:"breakpoint_resumed",timestamp:Date.now(),agentId:m,snapshotId:null,breakpointId:K,modified:!!Q?.input,skipped:!!Q?.skip}),{input:Q?.input??g,skip:Q?.skip??false}}function We(i){return E.facts[i]}function ro(i,m,b){return new Promise((g,y)=>{let A=null,C=false,P,_=We(i),K=()=>{C||(C=true,A&&(clearTimeout(A),A=null),P&&b&&b.removeEventListener("abort",P),X());},X=E.subscribe([`${i}.${Bt}`],()=>{let Q=wt(_);if(Q.approved.includes(m))K(),g();else {let Y=Q.rejected.find(pe=>pe.id===m);if(Y){K();let pe=Y.reason?`Request ${m} rejected: ${Y.reason}`:`Request ${m} rejected`;y(new Error(pe));}}});if(b){if(P=()=>{K(),y(new Error(`[Directive MultiAgent] Approval wait aborted for request ${m}`));},b.aborted){K(),y(new Error(`[Directive MultiAgent] Approval wait aborted for request ${m}`));return}b.addEventListener("abort",P,{once:true});}A=setTimeout(()=>{K();let Q=Math.round(k/1e3);y(new Error(`[Directive MultiAgent] Approval timeout: Request ${m} not resolved within ${Q}s.
|
|
48
|
+
Solutions:
|
|
49
|
+
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
50
|
+
2. Set autoApproveToolCalls: true to auto-approve
|
|
51
|
+
3. Increase approvalTimeoutMs (current: ${k}ms)
|
|
52
|
+
See: https://directive.run/docs/ai/multi-agent`));},k);})}async function Ye(i,m,b){Se();let g=ee[i];if(!g){let y=Object.keys(ee).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${i}". Registered agents: ${y}`)}if(b?.signal?.aborted)throw new Error(`[Directive MultiAgent] Agent "${i}" run aborted before starting`);if(se==="paused")throw new Error("[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)");Ae++;try{let y=g.circuitBreaker??x;return y?await y.execute(()=>gr(i,g,m,b)):await gr(i,g,m,b)}catch(y){if(U&&!b?.__isReroute){let C=co(i),P=lo(C);if(P){let _={originalAgent:i,reroutedTo:P,reason:y instanceof Error?y.message:String(y),timestamp:Date.now()};try{U.onReroute?.(_);}catch{}return I("onReroute",_),J&&J.record({type:"reroute",timestamp:Date.now(),agentId:i,snapshotId:null,from:i,to:P,reason:y instanceof Error?y.message:String(y)}),Ye(P,m,{...b,__isReroute:true})}if(U.degradation==="fallback-response"&&U.fallbackResponse!==void 0)return {output:U.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}let A=De[i];throw A&&A.status!=="error"&&(A.status="error",A.lastError=y instanceof Error?y.message:String(y)),y}finally{Ae--,ye();}}async function gr(i,m,b,g){let y=Date.now(),A=We(i),C=De[i],P=m.agent,_=b,K=qe.get(i);if(!K){let F=Object.keys(ee).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${i}". Registered agents: ${F}`)}let X=await K.acquire(g?.signal),Q=new AbortController,Y,pe;try{m.timeout&&(Y=setTimeout(()=>Q.abort(),m.timeout)),g?.signal&&(pe=()=>Q.abort(),g.signal.addEventListener("abort",pe,{once:!0}));let F=m.memory??d;if(F){let B=F.getContextMessages();if(B.length>0){let L=B.map(ue=>`${ue.role}: ${ue.content}`).join(`
|
|
53
|
+
`);P={...P,instructions:(P.instructions??"")+`
|
|
23
54
|
|
|
24
|
-
|
|
55
|
+
Conversation context:
|
|
56
|
+
`+L};}}{let B=await Vt("pre_input_guardrails",i,P.name,_,g?.signal);if(B.skip)return C.status="completed",ye(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};_=B.input;}let he=[...u.input??[],...m.guardrails?.input??[]].map((B,L)=>Tt(B,L,"input"));for(let B of he){let{name:L}=B,ue={agentName:P.name,input:_,facts:mt(A)},Pe=Date.now(),ce=await Et(B,{input:_,agentName:P.name},ue);if(I("onGuardrailCheck",{agentId:i,guardrailName:L,guardrailType:"input",passed:ce.passed,reason:ce.reason,durationMs:Date.now()-Pe,timestamp:Date.now()}),!ce.passed)throw new ct({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${L}" failed: ${ce.reason}`,guardrailName:L,guardrailType:"input",userMessage:ce.reason??"Input validation failed",agentName:P.name,input:_});ce.transformed!==void 0&&(_=ce.transformed);}I("onAgentStart",{agentId:i,agentName:P.name,input:_,timestamp:y}),J&&J.record({type:"agent_start",timestamp:Date.now(),agentId:i,snapshotId:null,inputLength:_.length,...P.instructions?{instructions:P.instructions.slice(0,Be)}:{},...Fe?{input:_.slice(0,Be)}:{}}),E.batch(()=>{let B=st(A);at(A,{...B,status:"running",input:_,startedAt:Date.now()});}),C.status="running",C.lastInput=_;{let B=await Vt("pre_agent_run",i,P.name,_,g?.signal);if(B.skip)return C.status="completed",ye(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};_=B.input;}let le=e,Te=g?.outputSchema!==void 0?g.outputSchema:m.outputSchema;Te&&(le=hn(e,{schema:Te,maxRetries:g?.maxSchemaRetries??m.maxSchemaRetries??2,extractJson:m.extractJson,schemaDescription:m.schemaDescription}));let te=m.retry??p,oe=await gn(le,P,_,{...m.runOptions,...g,signal:Q.signal,onMessage:B=>{let ue=[...en(A),B];xt(A,ue.length>H?ue.slice(-H):ue),g?.onMessage?.(B);},onToolCall:async B=>{let ue=[...u.toolCall??[],...m.guardrails?.toolCall??[]].map((Ke,Ie)=>Tt(Ke,Ie,"toolCall"));for(let Ke of ue){let{name:Ie}=Ke,Ne={agentName:P.name,input:_,facts:mt(A)},Gt=Date.now(),He=await Et(Ke,{toolCall:B,agentName:P.name,input:_},Ne);if(I("onGuardrailCheck",{agentId:i,guardrailName:Ie,guardrailType:"toolCall",passed:He.passed,reason:He.reason,durationMs:Date.now()-Gt,timestamp:Date.now()}),!He.passed)throw new ct({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${Ie}" failed: ${He.reason}`,guardrailName:Ie,guardrailType:"toolCall",userMessage:He.reason??"Tool call blocked",data:{toolCall:B},agentName:P.name,input:_})}if(!h){let Ke=`tool-${i}-${B.id}`,Ie={id:Ke,type:"tool_call",agentName:P.name,description:`Tool call: ${B.name}`,data:B,requestedAt:Date.now()};me.set(Ke,i),E.batch(()=>{let Ne=wt(A);ft(A,{...Ne,pending:[...Ne.pending,Ie]});}),R?.(Ie),await ro(i,Ke,g?.signal);}let ce=[...tn(A),B];At(A,ce.length>ge?ce.slice(-ge):ce),g?.onToolCall?.(B);}},te?{...te,onRetry:(B,L,ue)=>{te.onRetry?.(B,L,ue),I("onAgentRetry",{agentId:i,agentName:P.name,input:_,attempt:B,error:L,delayMs:ue,timestamp:Date.now()});}}:void 0);if((await Vt("pre_output_guardrails",i,P.name,_,g?.signal)).skip)return C.status="completed",ye(),oe;let Z=[...u.output??[],...m.guardrails?.output??[]].map((B,L)=>Tt(B,L,"output"));for(let B of Z){let{name:L}=B,ue={agentName:P.name,input:_,facts:mt(A)},Pe=Date.now(),ce=await Et(B,{output:oe.output,agentName:P.name,input:_,messages:oe.messages},ue);if(I("onGuardrailCheck",{agentId:i,guardrailName:L,guardrailType:"output",passed:ce.passed,reason:ce.reason,durationMs:Date.now()-Pe,timestamp:Date.now()}),!ce.passed)throw new ct({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${L}" failed: ${ce.reason}`,guardrailName:L,guardrailType:"output",userMessage:ce.reason??"Output validation failed",agentName:P.name,input:_});ce.transformed!==void 0&&(oe.output=ce.transformed);}E.batch(()=>{let B=st(A);at(A,{...B,status:"completed",output:oe.output,tokenUsage:B.tokenUsage+oe.totalTokens,turnCount:B.turnCount+oe.messages.length,completedAt:Date.now()});}),C.status="completed",C.lastOutput=oe.output,C.runCount++,C.totalTokens+=oe.totalTokens,ye();let we=We("__coord"),ve=!1,ie=0;if(E.batch(()=>{let L=adapterUtils.getBridgeFact(we,"__globalTokens")+oe.totalTokens;if(ne=L,adapterUtils.setBridgeFact(we,"__globalTokens",L),f&&q){ie=L/f;let ue=adapterUtils.getBridgeFact(we,"__budgetWarningFired");ie>=M&&!ue&&(adapterUtils.setBridgeFact(we,"__budgetWarningFired",!0),ve=!0);}}),ve)try{q({currentTokens:ne,maxBudget:f,percentage:ie});}catch(B){z&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",B);}if(F&&oe.messages.length>0)try{F.addMessages(oe.messages);}catch(B){z&&console.debug("[Directive MultiAgent] Memory addMessages failed:",B);}if(I("onAgentComplete",{agentId:i,agentName:P.name,input:_,output:oe.output,tokenUsage:oe.totalTokens,durationMs:Date.now()-y,timestamp:Date.now()}),J){let B=typeof oe.output=="string"?oe.output:$t(oe.output);J.record({type:"agent_complete",timestamp:Date.now(),agentId:i,snapshotId:null,outputLength:B.length,totalTokens:oe.totalTokens,inputTokens:oe.tokenUsage?.inputTokens??0,outputTokens:oe.tokenUsage?.outputTokens??0,durationMs:Date.now()-y,modelId:m.agent.model??void 0,...Fe?{output:B.slice(0,Be)}:{}});}return it&&it.recordSuccess(i,Date.now()-y),ht(),await Vt("post_run",i,P.name,_,g?.signal),oe}catch(F){throw C.status="error",C.lastError=F instanceof Error?F.message:String(F),ye(),E.batch(()=>{let V=st(A);at(A,{...V,status:"error",error:F instanceof Error?F.message:String(F),completedAt:Date.now()});}),I("onAgentError",{agentId:i,agentName:P.name,input:_,error:F instanceof Error?F:new Error(String(F)),durationMs:Date.now()-y,timestamp:Date.now()}),J&&J.record({type:"agent_error",timestamp:Date.now(),agentId:i,snapshotId:null,errorMessage:F instanceof Error?F.message:String(F),durationMs:Date.now()-y}),it&&it.recordFailure(i,Date.now()-y,F instanceof Error?F:new Error(String(F))),ht(),F}finally{Y&&clearTimeout(Y),pe&&g?.signal&&g.signal.removeEventListener("abort",pe),X();}}function Ln(i,m,b={}){if(Se(),!ee[i]){let te=Object.keys(ee).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${i}". Registered agents: ${te}`)}let y=1e4,A=1e5,C=new AbortController,P=[],_=[],K=false,X=Date.now(),Q=0,Y="",pe;b.signal&&(pe=()=>C.abort(),b.signal.addEventListener("abort",pe,{once:true}));let F=()=>{pe&&b.signal&&b.signal.removeEventListener("abort",pe);},V=te=>{if(K)return;let oe=_.shift();oe?oe(te):(P.length>=y&&P.shift(),P.push(te));},he=()=>{K=true,F();for(let te of _)te(null);_.length=0;},le=(async()=>{V({type:"progress",phase:"starting",message:"Running input guardrails"});try{let te=await Ye(i,m,{signal:C.signal,onMessage:O=>{if(V({type:"message",message:O}),O.role==="assistant"&&O.content){let Z=Math.ceil(O.content.length/4);Q+=Z,Y+=O.content,Y.length>A&&(Y=Y.slice(-A)),V({type:"token",data:O.content,tokenCount:Q});}},onToolCall:async O=>{V({type:"tool_start",tool:O.name,toolCallId:O.id,arguments:O.arguments}),O.result&&V({type:"tool_end",tool:O.name,toolCallId:O.id,result:O.result});}}),oe=Date.now()-X;return V({type:"done",totalTokens:te.totalTokens,duration:oe,droppedTokens:0}),he(),te}catch(te){throw te instanceof ct&&V({type:"guardrail_triggered",guardrailName:te.guardrailName,reason:te.message,partialOutput:Y,stopped:true}),V({type:"error",error:te instanceof Error?te:new Error(String(te))}),he(),te}})(),Te={[Symbol.asyncIterator](){return {async next(){return P.length>0?{done:false,value:P.shift()}:K?{done:true,value:void 0}:new Promise(te=>{_.push(oe=>{te(oe===null?{done:true,value:void 0}:{done:false,value:oe});});})}}}};return le.catch(()=>{}),{stream:Te,result:le,abort:()=>{C.abort(),he();}}}async function oo(i,m,b){let g=Date.now();b&&I("onPatternStart",{patternId:b,patternType:"parallel",input:m,timestamp:g});let y=new AbortController,A;i.timeout&&(A=setTimeout(()=>y.abort(),i.timeout));let C;try{let P=i.agents.map(X=>Ye(X,m,{signal:y.signal}).catch(Q=>{if(i.minSuccess===void 0)throw Q;return null})),_=await Promise.all(P),K=_.filter(X=>X!==null);if(i.minSuccess!==void 0&&K.length<i.minSuccess){let X=_.length-K.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${K.length}/${i.agents.length} agents succeeded (minimum required: ${i.minSuccess}, failed: ${X})`)}return i.merge(K)}catch(P){throw C=P instanceof Error?P:new Error(String(P)),P}finally{A&&clearTimeout(A),b&&I("onPatternComplete",{patternId:b,patternType:"parallel",durationMs:Date.now()-g,timestamp:Date.now(),error:C});}}async function Xt(i,m,b){let g=an(i);if(b?.when)try{if(!b.when({step:g,patternType:i.type,facts:i.type==="goal"?i.facts:void 0,satisfaction:i.type==="goal"?i.lastSatisfaction:void 0}))return null}catch{return null}try{let y={version:1,id:i.id,createdAt:i.createdAt,label:i.label,systemExport:JSON.stringify(i),timelineExport:null,localState:{type:"multi",globalTokenCount:0,globalStatus:"idle",agentStates:{},handoffCounter:0,pendingHandoffs:[],handoffResults:[],roundRobinCounters:null},memoryExport:null,orchestratorType:"multi",metadata:{patternType:i.type}};return await m.save(y),J&&J.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:i.id,patternType:i.type,step:g}),I("onCheckpointSave",{checkpointId:i.id,patternType:i.type,step:g,timestamp:Date.now()}),i.id}catch(y){let A=y instanceof Error?y:new Error(String(y));return console.error(`[Directive MultiAgent] ${i.type}: checkpoint save failed:`,A),I("onCheckpointError",{patternType:i.type,step:g,error:A,timestamp:Date.now()}),null}}async function Fn(i,m,b,g){let y=Date.now(),A=b??"__inline_sequential";b&&I("onPatternStart",{patternId:b,patternType:"sequential",input:m,timestamp:y});let C=i.checkpoint,P=C?.store??T,_=C?.everyN??5,K=C?.labelPrefix??"sequential",X=g?.currentInput??m,Q,Y=g?.results?[...g.results]:[],pe=g?.step??0,F;if(g&&Y.length>0){let V=Y[Y.length-1];Q={output:V.output,totalTokens:V.totalTokens,messages:[],toolCalls:[]};}try{for(let V=pe;V<i.agents.length;V++){let he=i.agents[V];{let le=await Vt("pre_pattern_step",he,ee[he]?.agent.name??he,X,void 0,{patternId:b});if(le.skip)continue;X=le.input;}try{if(Q=await Ye(he,X),Y.push({agentId:he,output:Q.output,totalTokens:Q.totalTokens}),V<i.agents.length-1&&(i.transform?X=i.transform(Q.output,he,V):X=typeof Q.output=="string"?Q.output:$t(Q.output)),C&&P&&V>pe&&(V-pe)%_===0){let le=V<i.agents.length-1?X:m;await Xt({type:"sequential",version:1,id:Ct(),createdAt:new Date().toISOString(),label:`${K}:step-${V+1}`,patternId:A,stepsTotal:i.agents.length,step:V+1,currentInput:le,results:[...Y]},P,C);}}catch(le){if(!i.continueOnError)throw le}}if(!Q)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return i.extract?i.extract(Q.output):Q.output}catch(V){throw F=V instanceof Error?V:new Error(String(V)),V}finally{b&&I("onPatternComplete",{patternId:b,patternType:"sequential",durationMs:Date.now()-y,timestamp:Date.now(),error:F});}}async function qn(i,m,b,g){let y=Date.now(),A=b??"__inline_supervisor";b&&I("onPatternStart",{patternId:b,patternType:"supervisor",input:m,timestamp:y});let C=i.checkpoint,P=C?.store??T,_=C?.everyN??5,K=C?.labelPrefix??"supervisor",X=[],Q=g?.workerResults?[...g.workerResults]:[],Y=i.maxRounds??5;if(Y<1||!Number.isFinite(Y))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let pe;if(g)for(let V of g.workerResults)X.push({output:V.output,totalTokens:V.totalTokens,messages:[],toolCalls:[]});let F=g?.round??0;try{let V;g?V={output:g.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:V=await Ye(i.supervisor,m);let he=g?.currentInput??m;for(let le=F;le<Y;le++){let Te=V.output,te;if(typeof Te=="string")try{te=JSON.parse(Te);}catch{throw new Error(`[Directive MultiAgent] Supervisor "${i.supervisor}" returned unparseable output (round ${le+1}). Expected JSON with { action, worker?, workerInput? } but got: ${Te.slice(0,200)}`)}else if(Te&&typeof Te=="object"&&"action"in Te)te=Te;else throw new Error(`[Directive MultiAgent] Supervisor "${i.supervisor}" returned invalid output (round ${le+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(te.action==="complete"||!te.worker)break;if(!i.workers.includes(te.worker)){let O=i.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${te.worker}". Available workers: ${O}`)}let oe=await Ye(te.worker,te.workerInput??"");X.push(oe),Q.push({output:oe.output,totalTokens:oe.totalTokens}),he=`Worker ${te.worker} completed with result: ${$t(oe.output)}`,V=await Ye(i.supervisor,he),C&&P&&le>F&&(le-F)%_===0&&await Xt({type:"supervisor",version:1,id:Ct(),createdAt:new Date().toISOString(),label:`${K}:round-${le+1}`,patternId:A,stepsTotal:i.maxRounds??10,round:le+1,supervisorOutput:V.output,workerResults:[...Q],currentInput:he},P,C);}return i.extract?i.extract(V.output,X):V.output}catch(V){throw pe=V instanceof Error?V:new Error(String(V)),V}finally{b&&I("onPatternComplete",{patternId:b,patternType:"supervisor",durationMs:Date.now()-y,timestamp:Date.now(),error:pe});}}async function Un(i,m,b,g){let y=Date.now(),A=b??"__inline_dag";b&&I("onPatternStart",{patternId:b,patternType:"dag",input:m,timestamp:y});let C=i.checkpoint,P=C?.store??T,_=C?.everyN??5,K=C?.labelPrefix??"dag",X=g?.completedCount??0,Q=0,Y=Promise.resolve(),pe=Object.keys(i.nodes).length,F={input:g?.input??m,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};for(let O of Object.keys(i.nodes))F.statuses[O]="pending";if(g){for(let[O,Z]of Object.entries(g.statuses))F.statuses[O]=Z;for(let[O,Z]of Object.entries(g.outputs))F.outputs[O]=Z;for(let[O,Z]of Object.entries(g.errors))F.errors[O]=Z;for(let[O,Z]of Object.entries(g.nodeResults))F.results[O]={output:Z.output,totalTokens:Z.totalTokens,messages:[],toolCalls:[]};}let V=i.onNodeError??"fail",he=i.maxConcurrent??1/0,le=new AbortController,Te,te;i.timeout&&(Te=setTimeout(()=>le.abort(),i.timeout));try{let we=function(){for(let[ie,B]of Object.entries(i.nodes)){if(F.statuses[ie]!=="pending")continue;let L=V==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((B.deps??[]).every(Pe=>L.has(F.statuses[Pe]))){if(V==="skip-downstream"&&(B.deps??[]).some(ce=>F.statuses[ce]==="error"||F.statuses[ce]==="skipped")){F.statuses[ie]="skipped",J&&J.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:ie,status:"skipped",deps:B.deps??[]}),I("onDagNodeSkipped",{patternId:A,nodeId:ie,agentId:B.agent,reason:"upstream dependency errored",timestamp:Date.now()});continue}if(B.when)try{if(!B.when(F)){F.statuses[ie]="skipped",J&&J.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:ie,status:"skipped",deps:B.deps??[]}),I("onDagNodeSkipped",{patternId:A,nodeId:ie,agentId:B.agent,reason:"when() returned false",timestamp:Date.now()});continue}}catch{F.statuses[ie]="skipped";continue}F.statuses[ie]="ready";}}};var oe=we;if(!g)for(let[ie,B]of Object.entries(i.nodes))(!B.deps||B.deps.length===0)&&(F.statuses[ie]="ready");let O=new Set,Z=0;async function ve(ie,B){let L=Date.now();F.statuses[ie]="running",J&&J.record({type:"dag_node_update",timestamp:L,snapshotId:null,nodeId:ie,status:"running",deps:B.deps??[]}),I("onDagNodeStart",{patternId:A,nodeId:ie,agentId:B.agent,timestamp:L});let ue;if(B.transform)ue=B.transform(F);else if(B.deps&&B.deps.length>0){let Ie=Object.create(null);for(let Ne of B.deps)F.outputs[Ne]!==void 0&&(Ie[Ne]=F.outputs[Ne]);ue=JSON.stringify(Ie);}else ue=m;let Pe=new AbortController,ce;B.timeout&&(ce=setTimeout(()=>Pe.abort(),B.timeout));let Ke=()=>Pe.abort();le.signal.addEventListener("abort",Ke,{once:!0});try{let Ie=await Ye(B.agent,ue,{signal:Pe.signal});if(F.outputs[ie]=Ie.output,F.results[ie]=Ie,F.statuses[ie]="completed",J&&J.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:ie,status:"completed",deps:B.deps??[]}),I("onDagNodeComplete",{patternId:A,nodeId:ie,agentId:B.agent,durationMs:Date.now()-L,timestamp:Date.now()}),X++,C&&P&&X>Q&&X-Q>=_){Q=X;let Ne=Object.create(null);for(let[He,Ft]of Object.entries(F.results))Ne[He]={output:Ft.output,totalTokens:Ft.totalTokens};let Gt={type:"dag",version:1,id:Ct(),createdAt:new Date().toISOString(),label:`${K}:node-${X}`,patternId:A,stepsTotal:pe,statuses:{...F.statuses},outputs:{...F.outputs},errors:{...F.errors},completedCount:X,nodeResults:Ne,input:F.input};Y=Y.then(()=>Xt(Gt,P,C)),await Y;}}catch(Ie){if(F.statuses[ie]="error",F.errors[ie]=Ie instanceof Error?Ie.message:String(Ie),J&&J.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:ie,status:"error",deps:B.deps??[]}),I("onDagNodeError",{patternId:A,nodeId:ie,agentId:B.agent,error:Ie instanceof Error?Ie:new Error(String(Ie)),durationMs:Date.now()-L,timestamp:Date.now()}),V==="fail")throw le.abort(),Ie}finally{ce&&clearTimeout(ce),le.signal.removeEventListener("abort",Ke),Z--;}}for(;!le.signal.aborted;){we();let ie=Object.entries(i.nodes).filter(([L])=>F.statuses[L]==="ready").sort(([,L],[,ue])=>(ue.priority??0)-(L.priority??0));for(let[L,ue]of ie){if(Z>=he)break;Z++;let Pe=ve(L,ue).finally(()=>{O.delete(Pe);});O.add(Pe);}if(!Object.values(F.statuses).some(L=>L==="pending"||L==="running"||L==="ready"))break;if(O.size>0)await Promise.race(O);else break}return O.size>0&&await Promise.allSettled(O),await i.merge(F)}catch(O){throw te=O instanceof Error?O:new Error(String(O)),O}finally{Te&&clearTimeout(Te),b&&I("onPatternComplete",{patternId:b,patternType:"dag",durationMs:Date.now()-y,timestamp:Date.now(),error:te});}}async function An(i,m,b,g){let y=Date.now(),A=b??"__inline_reflect",C=i.maxIterations??2;if(C<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");z&&C>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let P=i.signal,_,K;if(i.timeout&&!P){let O=new AbortController;_=setTimeout(()=>O.abort(),i.timeout),P=O.signal;}else if(i.timeout&&P){let O=new AbortController;_=setTimeout(()=>O.abort(),i.timeout),K=()=>O.abort(),P.addEventListener("abort",K,{once:true}),P=O.signal;}let X=i.parseEvaluation??(O=>{if(typeof O=="string")try{return JSON.parse(O)}catch{return {passed:false,feedback:`Evaluator returned unparseable output: ${O.slice(0,200)}`}}return O&&typeof O=="object"&&"passed"in O?O:{passed:false,feedback:"Evaluator returned invalid format"}}),Q=i.buildRetryInput??((O,Z,we)=>`${O}
|
|
25
57
|
|
|
26
|
-
`){return e.map(r=>typeof r.output=="string"?r.output:JSON.stringify(r.output)).join(t)}function pr(e,t){if(e.length===0)throw new Error("No results to pick from");return e.reduce((r,s)=>t(s)>t(r)?s:r)}function mr(e){return e.map(t=>t.output)}function fr(e){return e.reduce((t,r)=>t+r.totalTokens,0)}function fe(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function qe(e={}){let{maxHistory:t=1e3,defaultTtlMs:r=36e5,maxPendingPerAgent:s=100,persistence:n,onDelivery:a,onDeliveryError:o}=e,c=new Map,i=[],l=new Map,d=new Map;function u(b,v){if(v.types&&!v.types.includes(b.type)||v.from&&!(Array.isArray(v.from)?v.from:[v.from]).includes(b.from))return false;if(v.topics){let y=b.topic;if(y&&!v.topics.includes(y))return false}return !(v.priority&&b.priority&&!v.priority.includes(b.priority)||v.custom&&!v.custom(b))}function m(b){return b.ttlMs?Date.now()-b.timestamp>b.ttlMs:false}function f(b){return b.to==="*"?Array.from(c.keys()):Array.isArray(b.to)?b.to:[b.to]}async function R(b){if(m(b))return;let v=f(b),y=[],h=[];for(let g of v){let T=c.get(g)??[];if(T.length===0){let E=d.get(g)??[];for(E.push(b);E.length>s;)E.shift();d.set(g,E);continue}for(let E of T)(!E.filter||u(b,E.filter))&&h.push(Promise.resolve(E.handler(b)).then(()=>{y.push(g);},S=>{o?.(b,S instanceof Error?S:new Error(String(S)));}));}h.length>0&&await Promise.allSettled(h),y.length>0&&a?.(b,y),n&&await n.save(b);}return {publish(b){let v={...b,id:fe(),timestamp:Date.now(),priority:b.priority??"normal",ttlMs:b.ttlMs??r};for(i.push(v),l.set(v.id,v);i.length>t;){let y=i.shift();y&&l.delete(y.id);}return R(v).catch(y=>{let h=y instanceof Error?y:new Error(String(y));o?o(v,h):console.error("[Directive MessageBus] Delivery error:",h);}),v.id},subscribe(b,v,y){let h=fe(),g={id:h,agentId:b,handler:v,filter:y,unsubscribe:()=>{let S=c.get(b)??[],p=S.findIndex(w=>w.id===h);p>=0&&S.splice(p,1);}},T=c.get(b)??[];T.push(g),c.set(b,T);let E=d.get(b)??[];d.delete(b);for(let S of E)if(!y||u(S,y)){let p=v(S);p instanceof Promise&&p.catch(w=>{let C=w instanceof Error?w:new Error(String(w));o?o(S,C):console.error("[Directive MessageBus] Pending delivery error:",C);});}return g},getHistory(b,v=100){let y=i.filter(h=>!m(h));return b&&(y=y.filter(h=>u(h,b))),y.slice(-v)},getMessage(b){let v=l.get(b);if(!(v&&m(v)))return v},getPending(b){return (d.get(b)??[]).filter(y=>!m(y))},clear(){i.length=0,l.clear(),d.clear();},dispose(){i.length=0,l.clear(),d.clear(),c.clear();}}}function yr(e){let{bus:t,agents:r={},defaultTimeout:s=3e4,onAgentOnline:n,onAgentOffline:a}=e,o=new Map,c=new Map;for(let[l,d]of Object.entries(r))o.set(l,{...d,id:l,status:"offline",lastSeen:Date.now()});function i(l){if(l.type!=="RESPONSE"&&l.type!=="DELEGATION_RESULT")return;let d=l.correlationId??l.replyTo;if(!d)return;let u=c.get(d);u&&(clearTimeout(u.timer),c.delete(d),u.resolve(l));}return {register(l,d){let u=!o.has(l)||o.get(l)?.status==="offline";o.set(l,{...d,id:l,status:"online",lastSeen:Date.now()}),u&&n?.(l);},unregister(l){let d=o.get(l);d&&(d.status="offline",a?.(l));},getAgent(l){return o.get(l)},getAgents(){return Array.from(o.values())},findByCapability(l){return Array.from(o.values()).filter(d=>d.capabilities.includes(l)&&d.status==="online")},send(l,d,u){let m=o.get(l);return m&&(m.lastSeen=Date.now(),m.status="online"),t.publish({...u,from:l,to:d,type:u.type??"CUSTOM"})},async request(l,d,u,m,f=s){return new Promise((R,b)=>{let v=fe(),y=t.subscribe(l,g=>{(g.correlationId===v||g.replyTo===v)&&(y.unsubscribe(),i(g));},{types:["RESPONSE"]}),h=setTimeout(()=>{y.unsubscribe(),c.delete(v),b(new Error(`[Directive Communication] Request timeout after ${f}ms`));},f);c.set(v,{resolve:R,reject:b,timer:h}),t.publish({type:"REQUEST",from:l,to:d,action:u,payload:m,timeout:f,correlationId:v});})},async delegate(l,d,u,m){return new Promise((f,R)=>{let b=fe(),v=t.subscribe(l,h=>{(h.correlationId===b||h.replyTo===b)&&(v.unsubscribe(),i(h));},{types:["DELEGATION_RESULT"]}),y=setTimeout(()=>{v.unsubscribe(),c.delete(b),R(new Error(`[Directive Communication] Delegation timeout after ${s}ms`));},s);c.set(b,{resolve:f,reject:R,timer:y}),t.publish({type:"DELEGATION",from:l,to:d,task:u,context:m,correlationId:b});})},async query(l,d,u,m){return new Promise((f,R)=>{let b=fe(),v=t.subscribe(l,h=>{(h.correlationId===b||h.replyTo===b)&&(v.unsubscribe(),i(h));},{types:["RESPONSE"]}),y=setTimeout(()=>{v.unsubscribe(),c.delete(b),R(new Error(`[Directive Communication] Query timeout after ${s}ms`));},s);c.set(b,{resolve:f,reject:R,timer:y}),t.publish({type:"QUERY",from:l,to:d,question:u,context:m,correlationId:b});})},broadcast(l,d){return t.publish({...d,from:l,to:"*",type:d.type??"INFORM"})},listen(l,d,u){let m=o.get(l);return m&&(m.status="online",m.lastSeen=Date.now(),n?.(l)),t.subscribe(l,d,u)},getBus(){return t},dispose(){for(let[,l]of c)clearTimeout(l.timer);c.clear(),o.clear();}}}function hr(e,t){let r=new Map,s=e.listen(t,async n=>{if(n.type==="REQUEST"){let a=n,o=r.get(a.action),c;if(o)try{let i=await o(a.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: ${a.action}`};e.send(t,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["REQUEST"]});return {onRequest(n,a){r.set(n,a);},offRequest(n){r.delete(n);},dispose(){s.unsubscribe(),r.clear();}}}function br(e,t){let r=null,s=e.listen(t,async n=>{if(n.type==="DELEGATION"&&r){let a=n,o=Date.now(),c;try{let i=await r(a.task,a.context);c={type:"DELEGATION_RESULT",success:i.success,result:i.result,error:i.error,metrics:i.metrics??{durationMs:Date.now()-o}};}catch(i){c={type:"DELEGATION_RESULT",success:false,error:i instanceof Error?i.message:String(i),metrics:{durationMs:Date.now()-o}};}e.send(t,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["DELEGATION"]});return {onDelegation(n){r=n;},offDelegation(){r=null;},dispose(){s.unsubscribe(),r=null;}}}function Rr(e,t){let r=new Map,s=e.listen(t,n=>{if(n.type==="UPDATE"){let a=n,o=r.get(a.topic)??[];for(let c of o)c(a.content);}},{types:["UPDATE"]});return {subscribe(n,a){let o=new Map;for(let c of n){let i=r.get(c)??[],l=d=>a(c,d);o.set(c,l),i.push(l),r.set(c,i);}return e.broadcast(t,{type:"SUBSCRIBE",topics:n}),()=>{for(let[c,i]of o){let l=r.get(c);if(l){let d=l.indexOf(i);d>=0&&l.splice(d,1),l.length===0&&r.delete(c);}}o.clear(),e.broadcast(t,{type:"UNSUBSCRIBE",topics:n});}},publish(n,a){e.broadcast(t,{type:"UPDATE",topic:n,content:a});},dispose(){s.unsubscribe(),r.clear();}}}var vr=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:e=>{let t=e.replace(/[-\s]/g,"");return !(t.startsWith("000")||t.startsWith("666")||t.startsWith("9")||t.slice(3,5)==="00"||t.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:e=>{let t=e.replace(/[-\s]/g,"");if(t.length<13||t.length>19)return false;let r=0,s=false;for(let n=t.length-1;n>=0;n--){let a=t[n];if(!a)continue;let o=Number.parseInt(a,10);s&&(o*=2,o>9&&(o-=9)),r+=o,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:e=>{let t=e.replace(/\D/g,"");return t.length>=10&&t.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:e=>e.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 wr(e){let t=[],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(e))!==null;)t.push({type:"address",value:n[0],position:{start:n.index,end:n.index+n[0].length},confidence:.7});return t}var lt=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function Sr(e){let t=[],r=lt.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(e))!==null;){let a=n[2],o=n[1];a&&(a.split(/\s+/).length>=2||o&<.some(c=>o.toLowerCase().includes(c)))&&t.push({type:"name",value:a,position:{start:n.index,end:n.index+n[0].length},confidence:.6,context:n[0]});}return t}var dt=1e5,xe={name:"regex",async detect(e,t){if(e.length>dt)throw new Error(`[Directive] Input exceeds maximum length of ${dt} characters for PII detection. Truncate input or process in chunks.`);let r=[],s=new Set(t);for(let n of vr){if(!s.has(n.type))continue;let a=new RegExp(n.pattern.source,n.pattern.flags),o;for(;(o=a.exec(e))!==null;){let c=o[1]||o[0],i=e.slice(Math.max(0,o.index-20),o.index+c.length+20);n.validate&&!n.validate(c,i)||r.push({type:n.type,value:c,position:{start:o.index,end:o.index+c.length},confidence:n.confidence,context:i});}}return s.has("address")&&r.push(...wr(e)),s.has("name")&&r.push(...Sr(e)),r}};function Ee(e,t,r="typed"){let s=[...t].sort((a,o)=>o.position.start-a.position.start),n=e;for(let a of s){let o;switch(r){case "placeholder":o="[REDACTED]";break;case "typed":o=`[${a.type.toUpperCase()}]`;break;case "masked":o="*".repeat(a.value.length);break;case "hashed":o=`[HASH:${Ar(a.value)}]`;break}n=n.slice(0,a.position.start)+o+n.slice(a.position.end);}return n}function Ar(e){let s=2166136261;for(let n=0;n<e.length;n++)s^=e.charCodeAt(n),s=Math.imul(s,16777619);return (s>>>0).toString(16).padStart(8,"0")}var gt=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function pt(e={}){let{types:t=gt,detector:r="regex",redact:s=false,redactionStyle:n="typed",minConfidence:a=.7,onDetected:o,allowlist:c=[],minItemsToBlock:i=1,detectorTimeout:l=5e3}=e,d=r==="regex"?xe:r,u=new Set(c.map(f=>f.toLowerCase().trim()));async function m(f,R){if(d===xe)return d.detect(f,R);let b;try{return await Promise.race([d.detect(f,R),new Promise((v,y)=>{b=setTimeout(()=>y(new Error(`[Directive] PII detector '${d.name}' timed out after ${l}ms`)),l);})])}finally{clearTimeout(b);}}return async f=>{let b=(await m(f.input,t)).filter(v=>!(v.confidence<a||u.has(v.value.toLowerCase().trim())));if(b.length>0&&o?.(b),b.length>=i){if(s)return {passed:true,transformed:Ee(f.input,b,n)};let v={};for(let h of b)v[h.type]=(v[h.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(v).map(([h,g])=>`${h}: ${g}`).join(", ")})`}}return {passed:true}}}function Tr(e={}){let t=pt(e);return async(r,s)=>{let n=typeof r.output=="string"?r.output:JSON.stringify(r.output);return t({input:n,agentName:r.agentName},s)}}async function Ue(e,t={}){let{types:r=gt,detector:s="regex",minConfidence:n=.7,timeout:a=5e3}=t,o=s==="regex"?xe:s,c;if(o===xe)c=await o.detect(e,r);else {let d;try{c=await Promise.race([o.detect(e,r),new Promise((u,m)=>{d=setTimeout(()=>m(new Error(`[Directive] PII detector '${o.name}' timed out after ${a}ms`)),a);})]);}finally{clearTimeout(d);}}let i=c.filter(d=>d.confidence>=n),l={};for(let d of i)l[d.type]=(l[d.type]||0)+1;return {detected:i.length>0,items:i,typeCounts:l}}var Cr=1e4,kr=10080*60*1e3,xr=6e4,mt="0".repeat(64);function Er(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Mr(e){return new TextEncoder().encode(e)}function Pr(e){return Array.from(e).map(t=>t.toString(16).padStart(2,"0")).join("")}async function ft(e){let t=Mr(e),r=await globalThis.crypto.subtle.digest("SHA-256",t);return Pr(new Uint8Array(r))}function yt(e){let{id:t,timestamp:r,eventType:s,previousHash:n,payload:a,actorId:o,sessionId:c}=e;return JSON.stringify({id:t,timestamp:r,eventType:s,previousHash:n,payload:a,actorId:o,sessionId:c})}function Ir(e){return JSON.parse(JSON.stringify(e))}async function Or(e,t){let r=Ir(e);async function s(n){if(typeof n=="string"){let a=await Ue(n,{types:t.types,minConfidence:t.minConfidence??.7});if(a.detected){let o=t.allowlist?a.items.filter(c=>!t.allowlist.includes(c.value.toLowerCase())):a.items;if(o.length>0)return Ee(n,o,t.redactionStyle)}return n}if(Array.isArray(n))return Promise.all(n.map(s));if(n&&typeof n=="object"){let a={};for(let[o,c]of Object.entries(n))a[o]=await s(c);return a}return n}for(let[n,a]of Object.entries(r))r[n]=await s(a);return r}function Dr(e={}){let{maxEntries:t=Cr,retentionMs:r=kr,exportInterval:s=xr,exporter:n,piiMasking:a,signing:o,sessionId:c,actorId:i,events:l={}}=e,d=[],u=0,m=0,f=0,R=true,b;function v(){return d.length===0?mt:d[d.length-1].hash}async function y(h,g,T){let E={id:Er(),timestamp:Date.now(),eventType:h,previousHash:v(),payload:g,actorId:i,sessionId:c};a?.enabled&&(E.maskedPayload=await Or(g,a));let S=yt(E),p=await ft(S),w={...E,hash:p};for(o&&(w.signature=await o.signFn(p)),d.push(w);d.length>t;)d.shift(),m++,u>0&&u--;return l.onEntryAdded?.(w),w}return n&&s>0&&(b=setInterval(async()=>{try{let h=d.slice(u);h.length>0&&(await n(h),f+=h.length,u=d.length);}catch(h){l.onExportError?.(h instanceof Error?h:new Error(String(h)),d.slice(u));}},s)),{getEntries(h){let g=[...d];if(h){if(h.eventTypes?.length){let T=new Set(h.eventTypes);g=g.filter(E=>T.has(E.eventType));}h.actorId&&(g=g.filter(T=>T.actorId===h.actorId)),h.sessionId&&(g=g.filter(T=>T.sessionId===h.sessionId)),h.since!==void 0&&(g=g.filter(T=>T.timestamp>=h.since)),h.until!==void 0&&(g=g.filter(T=>T.timestamp<=h.until)),h.offset!==void 0&&(g=g.slice(h.offset)),h.limit!==void 0&&(g=g.slice(0,h.limit));}return g},async verifyChain(){if(d.length===0)return {valid:true,entriesVerified:0,verifiedAt:Date.now()};d[0].previousHash;for(let g=0;g<d.length;g++){let T=d[g],E=yt({id:T.id,timestamp:T.timestamp,eventType:T.eventType,previousHash:T.previousHash,payload:T.payload,actorId:T.actorId,sessionId:T.sessionId}),S=await ft(E);if(T.hash!==S){R=false;let p={valid:false,entriesVerified:g,brokenAt:{index:g,entryId:T.id,expectedHash:S,actualHash:T.hash},verifiedAt:Date.now()};return l.onChainBroken?.(p),p}if(g>0){let p=d[g-1];if(T.previousHash!==p.hash){R=false;let w={valid:false,entriesVerified:g,brokenAt:{index:g,entryId:T.id,expectedHash:p.hash,actualHash:T.previousHash},verifiedAt:Date.now()};return l.onChainBroken?.(w),w}}if(o?.verifyFn&&T.signature&&!await o.verifyFn(T.hash,T.signature)){R=false;let w={valid:false,entriesVerified:g,brokenAt:{index:g,entryId:T.id,expectedHash:"signature-invalid",actualHash:T.signature},verifiedAt:Date.now()};return l.onChainBroken?.(w),w}}return R=true,{valid:true,entriesVerified:d.length,verifiedAt:Date.now()}},async export(h){let g=[...d];return h!==void 0&&(g=g.filter(T=>T.timestamp>=h)),n&&g.length>0&&(await n(g),f+=g.length),g},prune(){let h=Date.now()-r,g=d.length;for(;d.length>0&&d[0].timestamp<h;)d.shift(),u>0&&u--;let T=g-d.length;return m+=T,T},getStats(){let h={};for(let g of d)h[g.eventType]=(h[g.eventType]??0)+1;return {totalEntries:d.length,byEventType:h,oldestEntry:d[0]?.timestamp,newestEntry:d[d.length-1]?.timestamp,entriesPruned:m,entriesExported:f,chainIntegrity:R}},async dispose(){if(b&&(clearInterval(b),b=void 0),n)try{let h=d.slice(u);h.length>0&&(await n(h),f+=h.length);}catch(h){l.onExportError?.(h instanceof Error?h:new Error(String(h)),d.slice(u));}},addEntry(h,g){return y(h,g)},createPlugin(){return {name:"audit-trail",onFactSet:(h,g,T)=>{y("fact.set",{key:h,value:g,prev:T}).catch(console.error);},onFactsBatch:h=>{y("fact.batch",{changes:h.map(g=>({key:g.key,value:g.value,prev:g.prev}))}).catch(console.error);},onRequirementCreated:h=>{y("requirement.created",{id:h.id,type:h.requirement.type,payload:h.requirement}).catch(console.error);},onRequirementMet:(h,g)=>{y("requirement.met",{id:h.id,type:h.requirement.type,byResolver:g}).catch(console.error);},onResolverStart:(h,g)=>{y("resolver.start",{resolver:h,requirementId:g.id,requirementType:g.requirement.type}).catch(console.error);},onResolverComplete:(h,g,T)=>{y("resolver.complete",{resolver:h,requirementId:g.id,requirementType:g.requirement.type,duration:T}).catch(console.error);},onResolverError:(h,g,T)=>{y("resolver.error",{resolver:h,requirementId:g.id,requirementType:g.requirement.type,error:T instanceof Error?T.message:String(T)}).catch(console.error);},onError:h=>{y("error.occurred",{source:h.source,sourceId:h.sourceId,message:h.message,context:h.context}).catch(console.error);},onErrorRecovery:(h,g)=>{y("error.recovery",{source:h.source,message:h.message,strategy:g}).catch(console.error);}}}}}function Nr(e){return {onAgentStart:(t,r)=>{e.addEntry("agent.run.start",{agentName:t,input:r});},onAgentComplete:(t,r,s,n)=>{e.addEntry("agent.run.complete",{agentName:t,output:r,tokens:s,cost:n});},onAgentError:(t,r)=>{e.addEntry("agent.run.error",{agentName:t,error:r.message,stack:r.stack});},onToolStart:(t,r,s)=>{e.addEntry("tool.call.start",{toolName:t,toolCallId:r,args:s});},onToolComplete:(t,r,s)=>{e.addEntry("tool.call.complete",{toolName:t,toolCallId:r,result:s});},onToolError:(t,r,s)=>{e.addEntry("tool.call.error",{toolName:t,toolCallId:r,error:s.message});},onApprovalRequested:(t,r,s)=>{e.addEntry("approval.requested",{toolName:t,toolCallId:r,args:s});},onApprovalGranted:(t,r)=>{e.addEntry("approval.granted",{toolName:t,toolCallId:r});},onApprovalDenied:(t,r,s)=>{e.addEntry("approval.denied",{toolName:t,toolCallId:r,reason:s});}}}var ye=[{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"}],He=[...ye,{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"}],ht=1e5;function ze(e,t=ye){if(e.length>ht)throw new Error(`[Directive] Input exceeds maximum length of ${ht} characters for injection detection. Truncate input or process in chunks.`);let r=[];for(let{pattern:o,name:c,severity:i,category:l}of t){let u=new RegExp(o.source,o.flags).exec(e);u&&r.push({name:c,category:l,severity:i,match:u[0],position:u.index});}let s={low:10,medium:25,high:50,critical:100},n=r.reduce((o,c)=>o+s[c.severity],0),a=Math.min(100,n);return {detected:r.length>0,patterns:r,riskScore:a}}function bt(e,t=ye){let r=e.replace(/[\u200b\u200c\u200d\u2060\ufeff]/g,""),s=t.map(l=>`(${l.pattern.source})`);if(s.length===0)return r;let n=t.some(l=>l.pattern.flags.includes("g")),a=t.some(l=>l.pattern.flags.includes("i")),o=t.some(l=>l.pattern.flags.includes("m")),c=`${n?"g":""}${a?"i":""}${o?"m":""}`,i=new RegExp(s.join("|"),c||"gi");return r=r.replace(i,"[REDACTED]"),r}function Rt(e={}){let{additionalPatterns:t=[],replacePatterns:r,strictMode:s=false,blockThreshold:n=50,sanitize:a=false,onBlocked:o,ignoreCategories:c=[]}=e,i;if(r?i=r:i=s?[...He]:[...ye],i=[...i,...t],c.length>0){let l=new Set(c);i=i.filter(d=>!l.has(d.category));}return l=>{let d=ze(l.input,i);if(d.detected&&d.riskScore>=n){if(o?.(l.input,d),a)return {passed:true,transformed:bt(l.input,i)};let u=d.patterns.sort((m,f)=>{let R={critical:0,high:1,medium:2,low:3};return R[m.severity]-R[f.severity]}).slice(0,3).map(m=>m.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${d.riskScore}%, patterns: ${u})`}}return {passed:true}}}function Gr(e,t){return `[UNTRUSTED_CONTENT source="${t}"]
|
|
27
|
-
${
|
|
28
|
-
[/UNTRUSTED_CONTENT]`}function Fr(e){let{baseGuardrail:t=Rt({strictMode:true,blockThreshold:25}),additionalPatterns:r=[]}=e,s=/\[UNTRUSTED_CONTENT source="([^"]+)"\]([\s\S]*?)\[\/UNTRUSTED_CONTENT\]/g;return async(n,a)=>{let o=await t(n,a);if(!o.passed)return o;let c=n.input.matchAll(s);for(let i of c){let[,l,d]=i;if(!d)continue;let u=ze(d,[...He,...r]);if(u.detected&&u.riskScore>=25)return {passed:false,reason:`Untrusted content from "${l}" contains potential injection (risk: ${u.riskScore}%)`}}return {passed:true}}}function _r(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function jr(e){return new TextEncoder().encode(e)}function $r(e){return Array.from(e).map(t=>t.toString(16).padStart(2,"0")).join("")}async function vt(e){let t=jr(e),r=await globalThis.crypto.subtle.digest("SHA-256",t);return $r(new Uint8Array(r))}function Br(e){if(e.length===0)return "";let t=new Set;for(let n of e)for(let a of Object.keys(n))t.add(a);let r=Array.from(t),s=[r.join(",")];for(let n of e){let a=r.map(o=>{let c=n[o];if(c==null)return "";if(typeof c=="object")return JSON.stringify(c).replace(/"/g,'""');let i=String(c);return i.includes(",")||i.includes(`
|
|
29
|
-
`)||i.includes('"')?`"${i.replace(/"/g,'""')}"`:i});s.push(a.join(","));}return s.join(`
|
|
30
|
-
`)}function Lr(){let e=new Map,t=new Map,r=new Map;return {async getSubjectData(s,n){let a=[];for(let[o,c]of e){if(n&&!n.includes(o))continue;let i=c.get(s);i&&i.length>0&&a.push({category:o,records:[...i]});}return a},async deleteSubjectData(s,n){let a=0;for(let[o,c]of e){if(n&&!n.includes(o))continue;let i=c.get(s);i&&(a+=i.length,c.delete(s));}return a},async anonymizeSubjectData(s,n){let a=0;for(let[o,c]of e){if(n&&!n.includes(o))continue;let i=c.get(s);if(i)for(let l of i)l.data={...l.data,_anonymized:true,_anonymizedAt:Date.now()},a++;}return a},async getExpiredData(s,n){let a=[],o=e.get(s);if(o)for(let c of o.values())for(let i of c)i.createdAt<n&&a.push({id:i.id,createdAt:i.createdAt});return a},async deleteByIds(s){let n=new Set(s),a=0;for(let o of e.values())for(let[c,i]of o){let l=i.filter(d=>!n.has(d.id));l.length!==i.length&&(a+=i.length-l.length,l.length===0?o.delete(c):o.set(c,l));}return a},async storeConsent(s){t.set(`${s.subjectId}:${s.purpose}`,s);},async getConsent(s,n){return t.get(`${s}:${n}`)??null},async getConsentsBySubject(s){let n=[];for(let[a,o]of t)a.startsWith(`${s}:`)&&n.push(o);return n},async getConsentsByPurpose(s){let n=[];for(let[a,o]of t)a.endsWith(`:${s}`)&&n.push(o);return n},async storeDeletionCertificate(s){r.set(s.subjectId,s);}}}function qr(e){let{storage:t,retention:r,exportExpirationMs:s=864e5,events:n={}}=e,a={async grant(o,c,i={}){let l={subjectId:o,purpose:c,granted:true,grantedAt:Date.now(),expiresAt:i.expiresAt,source:i.source,version:i.version};return await t.storeConsent(l),n.onConsentChange?.(l),l},async revoke(o,c){let i=await t.getConsent(o,c);if(!i)return null;let l={...i,granted:false,revokedAt:Date.now()};return await t.storeConsent(l),n.onConsentChange?.(l),l},async check(o,c){let i=await t.getConsent(o,c);return !(!i||!i.granted||i.expiresAt&&i.expiresAt<Date.now())},async getForSubject(o){return t.getConsentsBySubject(o)},async getForPurpose(o){return t.getConsentsByPurpose(o)}};return {async exportData(o){try{let c=await t.getSubjectData(o.subjectId,o.categories),i=[],l=[];for(let{category:f,records:R}of c){l.push(f);for(let b of R)i.push({category:f,...b});}if(o.includeAudit&&t.getAuditEntries){let f=await t.getAuditEntries(o.subjectId);l.push("audit");for(let R of f)i.push({category:"audit",id:R.id,data:R.payload,createdAt:R.timestamp});}let d;o.format==="csv"?d=Br(i.map(f=>({category:f.category,id:f.id,createdAt:new Date(f.createdAt).toISOString(),...f.data}))):d=JSON.stringify({subjectId:o.subjectId,exportedAt:new Date().toISOString(),recordCount:i.length,categories:l,records:i},null,2);let u=await vt(d),m={success:!0,subjectId:o.subjectId,format:o.format,data:d,categories:l,recordCount:i.length,checksum:u,exportedAt:Date.now(),expiresAt:Date.now()+s};return n.onExport?.(m),m}catch(c){return {success:false,subjectId:o.subjectId,format:o.format,data:"",categories:[],recordCount:0,checksum:"",exportedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},async deleteData(o){try{let c=0,i=[];o.anonymize?c=await t.anonymizeSubjectData(o.subjectId,o.categories):c=await t.deleteSubjectData(o.subjectId,o.categories),o.categories?i.push(...o.categories):o.scope==="all"&&i.push("all");let l=JSON.stringify({subjectId:o.subjectId,type:o.anonymize?"anonymization":"hard",scope:o.scope,categories:i,recordCount:c,deletedAt:Date.now(),reason:o.reason}),d={id:_r(),subjectId:o.subjectId,type:o.anonymize?"anonymization":"hard",scope:o.scope,categories:i,recordCount:c,deletedAt:Date.now(),reason:o.reason,hash:await vt(l)};await t.storeDeletionCertificate(d);let u={success:!0,subjectId:o.subjectId,scope:o.scope,anonymized:o.anonymize??!1,recordsAffected:c,categoriesAffected:i,certificate:d,deletedAt:Date.now()};return n.onDelete?.(u),u}catch(c){return {success:false,subjectId:o.subjectId,scope:o.scope,anonymized:o.anonymize??false,recordsAffected:0,categoriesAffected:[],certificate:{id:"error",subjectId:o.subjectId,type:"hard",scope:o.scope,categories:[],recordCount:0,deletedAt:Date.now(),hash:""},deletedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},consent:a,async enforceRetention(){if(!r)return 0;let o=0,c=Date.now(),i=new Set;if(r.categoryRetention)for(let l of Object.keys(r.categoryRetention))i.add(l);i.add("default");for(let l of i){let d=r.categoryRetention?.[l]??r.defaultRetentionMs,u=c-d,m=await t.getExpiredData(l,u);if(m.length>0){await r.onBeforeDelete?.({category:l,count:m.length});let f=await t.deleteByIds(m.map(R=>R.id));o+=f,r.onAfterDelete?.({category:l,count:f}),n.onRetentionEnforced?.(l,f);}}return o},createConsentGuardrail(o){return async c=>{let l=c.input.match(/user[_-]?id[:\s]*([a-zA-Z0-9-]+)/i)?.[1];return l?await a.check(l,o)?{passed:true}:{passed:false,reason:`No consent for '${o}' from subject ${l}`}:{passed:true}}},async getDeletionCertificate(o){return null}}}function oe(e,t){if(e.length!==t.length)throw new Error(`Vector dimensions must match: ${e.length} vs ${t.length}`);let r=0,s=0,n=0;for(let a=0;a<e.length;a++){let o=e[a],c=t[a];r+=o*c,s+=o*o,n+=c*c;}return s=Math.sqrt(s),n=Math.sqrt(n),s===0||n===0?0:r/(s*n)}function Ur(e,t,r,s){let n=null;for(let a of t){if(s&&a.agentName&&a.agentName!==s)continue;let o=oe(e,a.queryEmbedding);o>=r&&(!n||o>n.similarity)&&(n={entry:a,similarity:o});}return n}function wt(){let e=new Map;function t(r){let s=e.get(r);return s||(s=new Map,e.set(r,s)),s}return {async getEntries(r){return Array.from(t(r).values())},async addEntry(r,s){t(r).set(s.id,s);},async updateEntry(r,s,n){let a=t(r),o=a.get(s);o&&a.set(s,{...o,...n});},async removeEntry(r,s){t(r).delete(s);},async clear(r){e.delete(r);}}}function We(e){let{embedder:t,similarityThreshold:r=.9,maxCacheSize:s=1e3,ttlMs:n=36e5,namespace:a="default",storage:o=wt(),onHit:c,onMiss:i,onError:l,perAgent:d=false}=e,u={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},m=0;function f(b){if(u.totalEntries=b.length,u.hitRate=u.totalHits+u.totalMisses>0?u.totalHits/(u.totalHits+u.totalMisses):0,u.avgSimilarityOnHit=u.totalHits>0?m/u.totalHits:0,b.length>0){let v=b.map(y=>y.createdAt);u.oldestEntry=Math.min(...v),u.newestEntry=Math.max(...v);}else u.oldestEntry=null,u.newestEntry=null;}async function R(){let b=await o.getEntries(a),v=Date.now();for(let h of b)v-h.createdAt>n&&await o.removeEntry(a,h.id);let y=await o.getEntries(a);if(y.length>s){let g=y.sort((T,E)=>T.accessedAt-E.accessedAt).slice(0,y.length-s);for(let T of g)await o.removeEntry(a,T.id);}}return {async lookup(b,v){let y=Date.now();try{let h=await t(b),g=await o.getEntries(a),T=Ur(h,g,r,d?v:void 0);return T?(await o.updateEntry(a,T.entry.id,{accessedAt:Date.now(),accessCount:T.entry.accessCount+1}),u.totalHits++,m+=T.similarity,f(g),c?.(T.entry,T.similarity),{hit:!0,entry:T.entry,similarity:T.similarity,latencyMs:Date.now()-y}):(u.totalMisses++,f(g),i?.(b),{hit:!1,latencyMs:Date.now()-y})}catch(h){return u.totalMisses++,l?.(h instanceof Error?h:new Error(String(h))),{hit:false,latencyMs:Date.now()-y}}},async store(b,v,y,h={}){let g=await t(b),T={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:b,queryEmbedding:g,response:v,metadata:h,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:d?y:void 0};await o.addEntry(a,T),await R();let E=await o.getEntries(a);f(E);},async invalidate(b){let v=await o.getEntries(a),y=0;for(let g of v)b(g)&&(await o.removeEntry(a,g.id),y++);let h=await o.getEntries(a);return f(h),y},async clear(){await o.clear(a),u={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},m=0;},getStats(){return {...u}},async export(){return o.getEntries(a)},async import(b){for(let y of b)await o.addEntry(a,y);await R();let v=await o.getEntries(a);f(v);}}}function Hr(e){let{cache:t}=e;return async r=>{let s=await t.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 Ve(e=128){return async t=>{let r=new Array(e).fill(0);for(let n=0;n<t.length;n++){let a=t.charCodeAt(n);r[n%e]+=a/256;}let s=Math.sqrt(r.reduce((n,a)=>n+a*a,0));if(s>0)for(let n=0;n<e;n++)r[n]/=s;return r}}function zr(e){let{batchSize:t=20,embedBatch:r,maxWaitMs:s=50}=e;if(t<1||!Number.isFinite(t))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${t}`);let n=[],a=null,o=false;async function c(){if(n.length===0)return;let i=n;n=[],a&&(clearTimeout(a),a=null);try{let l=i.map(u=>u.text),d=await r(l);if(d.length!==i.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${d.length} embeddings for ${i.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let u=0;u<i.length;u++)i[u].resolve(d[u]);}catch(l){let d=l instanceof Error?l:new Error(String(l));for(let u of i)u.reject(d);}}return {async embed(i){if(o)throw new Error("BatchedEmbedder has been disposed");return new Promise((l,d)=>{n.push({text:i,resolve:l,reject:d}),n.length>=t?c():a||(a=setTimeout(c,s));})},async flush(){await c();},dispose(){o=true,a&&(clearTimeout(a),a=null);let i=n;n=[];let l=new Error("BatchedEmbedder disposed");for(let d of i)d.reject(l);}}}function Wr(){let e=new Map,t=null;function r(s){if(t===null)t=s.length;else if(s.length!==t)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${t}, got ${s.length}`)}return {add(s,n){r(n),e.set(s,n);},remove(s){e.delete(s);},search(s,n,a=0){if(t!==null&&s.length!==t)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${t}, got ${s.length}`);let o=[];for(let[c,i]of e){let l=oe(s,i);l>=a&&o.push({id:c,similarity:l});}return o.sort((c,i)=>i.similarity-c.similarity),o.slice(0,n)},rebuild(){},size(){return e.size},clear(){e.clear(),t=null;},needsRebuild(){return false}}}function St(e,t){return 1-oe(e,t)}function Je(e,t){if(e.length===0)return null;let r=Math.floor(t()*e.length),s=e[r],n=e.filter((d,u)=>u!==r);if(n.length===0)return {id:s.id,embedding:s.embedding,mu:0,left:null,right:null};let a=n.map(d=>({item:d,distance:St(s.embedding,d.embedding)}));a.sort((d,u)=>d.distance-u.distance);let o=Math.floor(a.length/2),c=a[o].distance,i=a.slice(0,o).map(d=>d.item),l=a.slice(o).map(d=>d.item);return {id:s.id,embedding:s.embedding,mu:c,left:Je(i,t),right:Je(l,t)}}function he(e,t,r,s,n,a){if(!e)return;let o=St(t,e.embedding),c=1-o;c>=s&&(n.push({id:e.id,similarity:c}),n.sort((i,l)=>l.similarity-i.similarity),n.length>r&&n.pop(),n.length===r&&(a.value=1-n[n.length-1].similarity)),o<e.mu?(he(e.left,t,r,s,n,a),o+a.value>=e.mu&&he(e.right,t,r,s,n,a)):(he(e.right,t,r,s,n,a),o-a.value<=e.mu&&he(e.left,t,r,s,n,a));}function Vr(e={}){let{random:t=Math.random}=e,r=new Map,s=null,n=false,a=null;function o(c){if(a===null)a=c.length;else if(c.length!==a)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${a}, got ${c.length}`)}return {add(c,i){o(i),r.set(c,i),n=true;},remove(c){r.delete(c),n=true;},search(c,i,l=0){if(a!==null&&c.length!==a)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${a}, got ${c.length}`);if(n||!s){let m=[];for(let[f,R]of r){let b=oe(c,R);b>=l&&m.push({id:f,similarity:b});}return m.sort((f,R)=>R.similarity-f.similarity),m.slice(0,i)}let d=[],u={value:Number.POSITIVE_INFINITY};return he(s,c,i,l,d,u),d},rebuild(){let c=Array.from(r.entries()).map(([i,l])=>({id:i,embedding:l}));s=Je(c,t),n=false;},size(){return r.size},clear(){r.clear(),s=null,n=false,a=null;},needsRebuild(){return n}}}function be(e={}){let{bufferSize:t=100}=e;if(t<1||!Number.isFinite(t))throw new Error(`[Directive StreamChannel] bufferSize must be >= 1, got ${t}`);let r=[],s="open",n=null,a=null,o=null,c=false;function i(f){if(a){let R=a;a=null,R.resolve({value:f,done:false});}}function l(){if(a){let f=a;a=null,f.resolve({value:void 0,done:true});}}function d(f){if(a){let R=a;a=null,c=false,R.reject(f);}}function u(){if(o){let f=o;o=null,f();}}return {async send(f){if(s!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${s} channel${e.name?` "${e.name}"`:""}`);if(a){i(f);return}if(r.length>=t){if(await new Promise(R=>{o=R;}),s!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${s} channel${e.name?` "${e.name}"`:""}`);if(a){i(f);return}}r.push(f);},end(){s==="open"&&(s="closed",l());},error(f){s==="open"&&(s="error",n=f,d(f),u());},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 f=r.shift();return u(),Promise.resolve({value:f,done:false})}return s==="closed"?(c=false,Promise.resolve({value:void 0,done:true})):new Promise((f,R)=>{a={resolve:f,reject:R};})},return(){return s="closed",r.length=0,c=false,u(),Promise.resolve({value:void 0,done:true})}}}}}function Jr(e){let t=be(e),r=be(e);return {sideA:{send:s=>t.send(s),receive:r,close(){t.end(),r.end();}},sideB:{send:s=>r.send(s),receive:t,close(){t.end(),r.end();}}}}async function Ke(e,t,r){try{for await(let s of e){let n=await r(s);await t.send(n);}t.end();}catch(s){t.error(s instanceof Error?s:new Error(String(s)));}}function Kr(...e){return {[Symbol.asyncIterator](){let r=[],s=0,n=null,a=null,o=false,c=false,i=[];function l(d){if(n){let u=n;return n=null,u(d),true}return false}for(let d of e){let u=d[Symbol.asyncIterator]();i.push(u),(async()=>{try{for(;!o;){let m=await u.next();if(m.done||o)break;l({value:m.value,done:!1})||(r.length<1e4?r.push(m.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(m){o||(o=true,a=m instanceof Error?m:new Error(String(m)),l({value:void 0,done:true}));}s++,s>=e.length&&!o&&l({value:void 0,done:true});})();}return {next(){return a?Promise.reject(a):r.length>0?Promise.resolve({value:r.shift(),done:false}):s>=e.length?Promise.resolve({value:void 0,done:true}):new Promise(d=>{n=d;})},return(){o=true,r.length=0;for(let d of i)d.return?.({value:void 0,done:true});if(n){let d=n;n=null,d({value:void 0,done:true});}return Promise.resolve({value:void 0,done:true})}}}}}var Me=class extends Error{retryCount;lastError;constructor(t,r){super(`[Directive] All ${t} retries exhausted: ${r.message}`),this.name="RetryExhaustedError",this.retryCount=t,this.lastError=r,this.cause=r;}},Xr=new Set([400,401,403,404,422]);function Xe(e){let t=e;if(typeof t.status=="number"&&t.status>=100&&t.status<=599)return t.status;if(typeof t.statusCode=="number"&&t.statusCode>=100&&t.statusCode<=599)return t.statusCode;let s=(e.message.length>1e3?e.message.slice(0,1e3):e.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 At(e){let t=e;if(typeof t.retryAfter=="number"&&t.retryAfter>0)return t.retryAfter*1e3;let s=(e.message.length>1e3?e.message.slice(0,1e3):e.message).match(/retry[- ]?after[:\s]+(\d+)/i);if(!s)return null;let n=Number(s[1]);return n>0?n*1e3:null}function Qr(e,t,r){let s=t*Math.pow(2,e-1),n=Math.random()*t*.5,a=s+n;return Math.min(a,r)}function Yr(e,t,r,s){if(Xe(e)===429){let a=At(e);if(a!==null)return Math.min(a,s)}return Qr(t,r,s)}function Zr(e){let t=Xe(e);return t===null?true:!Xr.has(t)}function Qe(e,t={}){let{maxRetries:r=3,baseDelayMs:s=1e3,maxDelayMs:n=3e4,isRetryable:a,onRetry:o}=t;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,l)=>{let d;for(let u=0;u<=r;u++)try{return await e(c,i,l)}catch(m){if(d=m instanceof Error?m:new Error(String(m)),u>=r)break;if(a)try{if(!a(d))break}catch{break}if(!Zr(d))break;let f=Yr(d,u+1,s,n);try{o?.(u+1,d,f);}catch{}let R=l?.signal;if(R?.aborted)break;await new Promise((b,v)=>{let y=setTimeout(()=>{R?.removeEventListener("abort",h),b();},f);function h(){clearTimeout(y),v(R.reason??new Error("Aborted"));}R&&R.addEventListener("abort",h,{once:true});});}throw new Me(r,d)}}var Pe=class extends Error{errors;constructor(t){let r=t.map((s,n)=>` [${n}] ${s.message}`).join(`
|
|
31
|
-
`);super(`[Directive] All ${t.length} providers failed:
|
|
32
|
-
${r}`),this.name="AllProvidersFailedError",this.errors=Object.freeze([...t]),t.length>0&&(this.cause=t[t.length-1]);}};function Ye(e,t={}){if(e.length===0)throw new Error("[Directive] withFallback requires at least one runner.");let{shouldFallback:r,onFallback:s}=t;return async(n,a,o)=>{let c=[];for(let i=0;i<e.length;i++)try{return await e[i](n,a,o)}catch(l){let d=l instanceof Error?l:new Error(String(l));if(c.push(d),i<e.length-1){if(r)try{if(!r(d))break}catch{break}try{s?.(i,i+1,d);}catch{}}}throw new Pe(c)}}var Re=class extends Error{estimated;remaining;window;constructor(t){super(`[Directive] Budget exceeded (${t.window}): estimated $${t.estimated.toFixed(4)}, remaining $${t.remaining.toFixed(4)}`),this.name="BudgetExceededError",this.estimated=t.estimated,this.remaining=t.remaining,this.window=t.window;}},Ie=class{entries=[];record(t){this.entries.push({timestamp:Date.now(),cost:t});}getCostInWindow(t){let r=Date.now()-t;this.prune(r);let s=0;for(let n of this.entries)n.timestamp>=r&&(s+=n.cost);return s}prune(t){let r=0;for(;r<this.entries.length&&this.entries[r].timestamp<t;)r++;r>0&&this.entries.splice(0,r);}clear(){this.entries=[];}},Tt={hour:3600*1e3,day:1440*60*1e3};function en(e,t){return Math.ceil(e.length/t)}function Ct(e,t){return e.inputTokens/1e6*t.inputPerMillion+e.outputTokens/1e6*t.outputPerMillion}function kt(e,t,r=1){let s=Math.ceil(e*r);return e/1e6*t.inputPerMillion+s/1e6*t.outputPerMillion}function Ze(e,t){let{maxCostPerCall:r,budgets:s=[],pricing:n,charsPerToken:a=4,estimatedOutputMultiplier:o=1,onBudgetExceeded:c}=t;if(!Number.isFinite(a)||a<=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(o)||o<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 m of s)if(!Number.isFinite(m.maxCost)||m.maxCost<0)throw new Error(`[Directive] withBudget: budgets[${m.window}].maxCost must be a non-negative finite number.`);let i=new Map;for(let m of s)i.set(m.window,new Ie);let l=new Ie,d=async(m,f,R)=>{let b=en(f,a);if(r!=null&&n){let y=kt(b,n,o);if(y>r){let h={estimated:y,remaining:r,window:"per-call"};try{c?.(h);}catch{}throw new Re(h)}}for(let y of s){let h=Tt[y.window],T=i.get(y.window).getCostInWindow(h),E=y.maxCost-T,S=kt(b,y.pricing,o);if(S>E){let p={estimated:S,remaining:Math.max(0,E),window:y.window};try{c?.(p);}catch{}throw new Re(p)}}let v=await e(m,f,R);if(v.tokenUsage){for(let y of s){let h=i.get(y.window),g=Ct(v.tokenUsage,y.pricing);h.record(g);}if(n&&s.length===0){let y=Ct(v.tokenUsage,n);l.record(y);}}return v};function u(m){let f=i.get(m);if(!f)return 0;let R=Tt[m];return f.getCostInWindow(R)}return d.getSpent=u,d}function tn(e,t){return {match:(r,s)=>s.length<=e,model:t}}function rn(e,t){return {match:r=>r.name===e,model:t}}function nn(e,t){return {match:(r,s)=>(e.lastIndex=0,e.test(s)),model:t}}function et(e,t){let r=Array.isArray(t)?{rules:t}:t,{rules:s,onModelSelected:n}=r;return async(a,o,c)=>{let i=a.model;for(let d of s)try{if(d.match(a,o)){i=d.model;break}}catch{}try{n?.(a.model,i);}catch{}let l=i!==a.model?{...a,model:i}:a;return e(l,o,c)}}function xt(e){if(e.length>1048576)throw new Error(`[Directive] Output too large for JSON extraction (${e.length} chars, max 1048576).`);let t=e.trim();try{return JSON.parse(t)}catch{}let r=t.indexOf("{"),s=t.indexOf("["),n,a,o;if(r===-1&&s===-1)throw new Error("[Directive] No JSON object or array found in output");r===-1?(n=s,a="[",o="]"):s===-1?(n=r,a="{",o="}"):(n=Math.min(r,s),a=n===r?"{":"[",o=n===r?"}":"]");let c=0,i=false,l=false;for(let d=n;d<t.length;d++){let u=t[d];if(l){l=false;continue}if(u==="\\"){l=true;continue}if(u==='"'){i=!i;continue}if(!i){if(u===a)c++;else if(u===o&&(c--,c===0)){let m=t.slice(n,d+1);return JSON.parse(m)}}}throw new Error("[Directive] No valid JSON found in output")}function sn(e){return e?e.issues&&e.issues.length>0?e.issues.map(t=>t.message).join("; "):e.message??"Validation failed":"Validation failed"}function tt(e,t){let{schema:r,maxRetries:s=2,extractJson:n=xt,schemaDescription:a}=t;if(!Number.isFinite(s)||s<0)throw new Error("[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.");let o=a??r.description??"the specified JSON schema";return async(c,i,l)=>{let d={...c,instructions:(c.instructions??"")+`
|
|
58
|
+
Feedback on your previous response:
|
|
59
|
+
${Z}
|
|
33
60
|
|
|
34
|
-
|
|
61
|
+
Please improve your response.`);b&&I("onPatternStart",{patternId:A,patternType:"reflect",input:m,timestamp:y});let Y=i.checkpoint,pe=Y?.store??T,F=Y?.everyN??5,V=Y?.labelPrefix??"reflect",he,le,Te=g?.history?[...g.history]:[],te=g?.producerOutputs?[...g.producerOutputs]:[],oe=g?.iteration??0;g?.lastProducerOutput!=null&&(le={output:g.lastProducerOutput,totalTokens:0,messages:[],toolCalls:[]});try{let O=g?.effectiveInput??m;for(let Z=oe;Z<C;Z++){if(P?.aborted){if(le)return Oe=Te,i.extract?i.extract(le.output):le.output;throw new DOMException("Reflect pattern aborted","AbortError")}let we=Date.now(),ve=await Ye(i.agent,O,{signal:P});le=ve;let ie=typeof ve.output=="string"?ve.output:$t(ve.output);if(P?.aborted)return Oe=Te,i.extract?i.extract(ve.output):ve.output;let B=await Ye(i.evaluator,ie,{signal:P}),L;try{L=X(B.output);}catch(ce){L={passed:!1,feedback:`Evaluation parse error: ${ce instanceof Error?ce.message:String(ce)}`};}if(!L.passed&&i.threshold!=null&&L.score!=null){let ce=typeof i.threshold=="function"?i.threshold(Z):i.threshold;L.score>=ce&&(L={...L,passed:!0});}let ue=Date.now()-we;te.push({output:ve.output,score:L.score});let Pe={iteration:Z,passed:L.passed,score:L.score,feedback:L.feedback,durationMs:ue,producerTokens:ve.totalTokens??0,evaluatorTokens:B.totalTokens??0};if(Te.push(Pe),i.onIteration)try{i.onIteration(Pe);}catch(ce){z&&console.warn("[Directive MultiAgent] onIteration callback threw:",ce);}if(J&&J.record({type:"reflection_iteration",timestamp:Date.now(),snapshotId:null,iteration:Z,passed:L.passed,score:L.score,durationMs:ue,producerTokens:ve.totalTokens,evaluatorTokens:B.totalTokens}),L.passed)return Oe=Te,i.extract?i.extract(ve.output):ve.output;if(Z<C-1&&L.feedback)try{O=Q(m,L.feedback,Z);}catch(ce){z&&console.warn("[Directive MultiAgent] buildRetryInput threw, using default format:",ce),O=`${m}
|
|
35
62
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
Add to config: agents: { myAgent: { agent: myAgentDef, description: '...' } }`);let B=r[k];if(!B){let F=Object.keys(r).join(", ");throw new Error(`[AgentStack] Agent "${k}" not found in registry. Available: ${F}`)}return B.agent}async function x(k,B,F={}){let U=C(k),z=F.cache===false;if(m&&!z)try{let _=await m.lookup(B,k);if(_.hit&&_.entry){u?.incrementCounter("cache.hits");try{return {output:JSON.parse(_.entry.response),messages:[],toolCalls:[],totalTokens:0,isCached:!0}}catch{o&&console.debug(`[AgentStack] Cache hit for "${k}" contained invalid JSON \u2014 falling through to fresh run.`);}}u?.incrementCounter("cache.misses");}catch{u?.incrementCounter("cache.lookup.errors");}let I=u?.startSpan(`agent.${k}`),D=Date.now();try{let _={};F.guardrails?.output?_.outputGuardrails=F.guardrails.output:r?.[k]?.guardrails?.output&&(_.outputGuardrails=[...n.output??[],...r[k].guardrails.output]),F.signal&&(_.signal=F.signal);let N=await g.run(U,B,_),$=Date.now()-D;if(w+=N.totalTokens,m&&!z&&N.output!=null)try{let G=typeof N.output=="string"?N.output:JSON.stringify(N.output);await m.store(B,G,k);}catch{u?.incrementCounter("cache.store.errors");}return f&&f.publish({type:"INFORM",from:k,to:"*",topic:`${k}.completed`,content:{tokenCount:N.totalTokens}}),R&&R.trackRun(k,{success:!0,latencyMs:$,cost:c>0?se(N.totalTokens,c):void 0}),I&&u?.endSpan(I.spanId,"ok"),N}catch(_){let N=Date.now()-D;throw I&&u?.endSpan(I.spanId,"error"),R&&R.trackRun(k,{success:false,latencyMs:N}),_}}async function M(k,B,F){let{validate:U,retries:z=1,...I}=F,D=null;for(let _=0;_<=z;_++){let N=_>0?{...I,cache:false}:I,$=await x(k,B,N),G=U($.output);if(typeof G=="boolean"?G:G.valid)return $;let H=typeof G=="object"&&G.errors?G.errors.join("; "):"Validation failed";D=new Z({message:`Output validation failed (attempt ${_+1}/${z+1}): ${H}`,code:"OUTPUT_GUARDRAIL_FAILED",guardrailName:"runStructured",guardrailType:"output",agentName:k,input:B,data:$.output}),o&&console.debug(`[AgentStack] runStructured validation failed (attempt ${_+1}):`,H);}throw D}async function L(k,B,F={}){if(!T)throw new Error("[AgentStack] No agents/patterns configured. Provide 'agents' and 'patterns' config.");let U=F.cache===false;if(m&&!U)try{let N=await m.lookup(B,k);if(N.hit&&N.entry){u?.incrementCounter("cache.hits");try{return JSON.parse(N.entry.response)}catch{o&&console.debug(`[AgentStack] Cache hit for pattern "${k}" contained invalid JSON \u2014 falling through to fresh run.`);}}u?.incrementCounter("cache.misses");}catch{u?.incrementCounter("cache.lookup.errors");}for(let N of h){let $=typeof N=="function"?N:N.fn,G=typeof N=="function"?"input-guardrail":N.name,J=await $({input:B,agentName:k},{agentName:k,input:B,facts:{}});if(J&&!J.passed)throw new Z({message:`Input guardrail "${G}" failed: ${J.reason??"unknown"}`,code:"INPUT_GUARDRAIL_FAILED",guardrailName:G,guardrailType:"input",agentName:k,input:B})}let z=u?.startSpan(`pattern.${k}`),I=Date.now(),D=T.getAllAgentStates(),_=0;for(let N of Object.values(D))_+=N.totalTokens;try{let N=await T.runPattern(k,B),$=Date.now()-I,G=T.getAllAgentStates(),J=0;for(let Y of Object.values(G))J+=Y.totalTokens;let H=J-_;if(w+=H,m&&!U&&N!=null)try{let Y=typeof N=="string"?N:JSON.stringify(N);await m.store(B,Y,k);}catch{u?.incrementCounter("cache.store.errors");}return f&&f.publish({type:"INFORM",from:k,to:"*",topic:`${k}.completed`,content:{patternTokens:H}}),R&&R.trackRun(k,{success:!0,latencyMs:$,cost:c>0?se(H,c):void 0}),z&&u?.endSpan(z.spanId,"ok"),N}catch(N){let $=Date.now()-I;throw z&&u?.endSpan(z.spanId,"error"),R&&R.trackRun(k,{success:false,latencyMs:$}),N}}function A(k,B,F={}){if(!E)throw new Error(`[AgentStack] Streaming not configured.
|
|
39
|
-
Add to config: streaming: { runner: createStreamingCallbackRunner(...) }`);if(d?.getState()==="OPEN")throw new Error("[AgentStack] Circuit breaker is OPEN. Streaming call rejected.");let U=C(k),z=be({bufferSize:100}),I=new AbortController,D=()=>I.abort();F.signal&&F.signal.addEventListener("abort",D,{once:true});let _=u?.startSpan(`stream.${k}`),N=Date.now(),{stream:$,result:G,abort:J}=E(U,B,{signal:I.signal}),H=Ke($,z,X=>X.type==="token"?X.data:""),Y=G.then(X=>{let j=Date.now()-N;return w+=X.totalTokens,F.signal?.removeEventListener("abort",D),_&&u?.endSpan(_.spanId,"ok"),f&&f.publish({type:"INFORM",from:k,to:"*",topic:`${k}.stream.completed`,content:{tokenCount:X.totalTokens}}),R&&R.trackRun(k,{success:true,latencyMs:j,cost:c>0?se(X.totalTokens,c):void 0}),X}).catch(X=>{let j=Date.now()-N;throw F.signal?.removeEventListener("abort",D),_&&u?.endSpan(_.spanId,"error"),R&&R.trackRun(k,{success:false,latencyMs:j}),X});return H.catch(X=>{o&&console.debug("[AgentStack] Pipe error:",X);}),new rt(z,Y,()=>{J(),I.abort(),F.signal?.removeEventListener("abort",D);})}function P(k,B,F={}){if(!E)throw new Error(`[AgentStack] Streaming not configured.
|
|
40
|
-
Add to config: streaming: { runner: createStreamingCallbackRunner(...) }`);if(d?.getState()==="OPEN")throw new Error("[AgentStack] Circuit breaker is OPEN. Streaming call rejected.");let U=C(k),z=new AbortController,I=()=>z.abort();F.signal&&F.signal.addEventListener("abort",I,{once:true});let D=u?.startSpan(`streamChunks.${k}`),_=Date.now(),{stream:N,result:$,abort:G}=E(U,B,{signal:z.signal}),J=$.then(Y=>{let X=Date.now()-_;return w+=Y.totalTokens,F.signal?.removeEventListener("abort",I),D&&u?.endSpan(D.spanId,"ok"),f&&f.publish({type:"INFORM",from:k,to:"*",topic:`${k}.streamChunks.completed`,content:{tokenCount:Y.totalTokens}}),R&&R.trackRun(k,{success:true,latencyMs:X,cost:c>0?se(Y.totalTokens,c):void 0}),Y}).catch(Y=>{let X=Date.now()-_;throw F.signal?.removeEventListener("abort",I),D&&u?.endSpan(D.spanId,"error"),R&&R.trackRun(k,{success:false,latencyMs:X}),Y}),H=false;return {stream:N,result:J,abort:()=>{H||(H=true,G(),z.abort(),F.signal?.removeEventListener("abort",I));}}}function O(){let k=null;if(e.rateLimit&&v){let F=Date.now()-6e4;for(;y<v.length&&v[y]<F;)y++;let U=v.length-y;k=Math.max(0,e.rateLimit.maxPerMinute-U);}return {totalTokens:w,estimatedCost:c>0?se(w,c):0,circuitState:d?.getState()??"CLOSED",cacheStats:m?.getStats()??{totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},memoryMessageCount:l?.getState()?.messages?.length??0,busMessageCount:f?.getHistory()?.length??0,rateLimitRemaining:k}}function q(){l?.clear(),d?.reset(),m?.clear(),u?.clear(),f?.clear(),T?.reset(),v&&(v.length=0,y=0),w=0;}let W=false;async function K(){if(!W){if(W=true,p&&u&&S){clearInterval(p),p=null;try{let k=u.export();k.metrics.length>0&&S.exportMetrics(k.metrics),k.traces.length>0&&S.exportTraces(k.traces);}catch{}}else p&&(clearInterval(p),p=null);g.dispose(),T?.dispose(),await u?.dispose();}}return {run:x,runStructured:M,runPattern:L,stream:A,streamChunks:P,approve:k=>g.approve(k),reject:(k,B)=>g.reject(k,B),getState:O,reset:q,dispose:K,get orchestrator(){return g},get observability(){return u},get messageBus(){return f},get coordinator(){return T},get cache(){return m},get memory(){return l},getTimeline(k=50){return {spans:u?.getTraces(k)??[],metrics:u?.getDashboard()?.metrics??{}}}}}function vn(e,t){return function(){t(e.getState());}}function wn(e,t){let r=e.metadata.title??"",s=e.metadata.section??"",n=e.metadata.url??"";return `${r&&s&&n?`[${r} \u2014 ${s}](${n})`:r||e.id}
|
|
41
|
-
${e.content}`}function Sn(e,t){return e.length===0?"":`Relevant documentation context:
|
|
63
|
+
Feedback on your previous response:
|
|
64
|
+
${L.feedback}
|
|
42
65
|
|
|
43
|
-
${
|
|
66
|
+
Please improve your response.`;}Y&&pe&&Z>=oe&&(Z-oe+1)%F===0&&await Xt({type:"reflect",version:1,id:Ct(),createdAt:new Date().toISOString(),label:`${V}:iter-${Z+1}`,patternId:A,stepsTotal:C,iteration:Z+1,effectiveInput:O,history:[...Te],producerOutputs:[...te],lastProducerOutput:ve.output},pe,Y);}if(Oe=Te,i.onExhausted==="throw")throw new sn({iterations:C,history:Te.map(Z=>({passed:Z.passed,feedback:Z.feedback,score:Z.score})),lastResult:le,totalTokens:le.totalTokens??0});if(i.onExhausted==="accept-best"&&te.length>0){!te.some(B=>B.score!=null)&&z&&console.warn("[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.");let we=te.length-1,ve=-1/0;for(let B=0;B<te.length;B++){let L=te[B].score;L!=null&&L>ve&&(ve=L,we=B);}let ie=te[we].output;return i.extract?i.extract(ie):ie}return i.extract?i.extract(le.output):le.output}catch(O){throw Oe=Te,he=O instanceof Error?O:new Error(String(O)),O}finally{_&&clearTimeout(_),K&&i.signal&&i.signal.removeEventListener("abort",K),b&&I("onPatternComplete",{patternId:A,patternType:"reflect",durationMs:Date.now()-y,timestamp:Date.now(),error:he});}}async function mr(i,m,b){if(i.agents.length===0)throw new Error("[Directive MultiAgent] Race pattern requires at least one agent");let g=i.minSuccess??1;if(!Number.isInteger(g)||g<1)throw new Error("[Directive MultiAgent] Race pattern minSuccess must be a positive integer");if(g>i.agents.length)throw new Error(`[Directive MultiAgent] Race pattern minSuccess (${g}) exceeds agent count (${i.agents.length})`);for(let Y of i.agents)if(!ee[Y])throw new Error(`[Directive MultiAgent] Race: unknown agent "${Y}"`);let y=Date.now(),A=b??"__inline_race",C=new AbortController,P,_;i.signal&&(i.signal.aborted?C.abort():(_=()=>C.abort(),i.signal.addEventListener("abort",_,{once:true}))),b&&I("onPatternStart",{patternId:A,patternType:"race",input:m,timestamp:y}),J&&J.record({type:"race_start",timestamp:y,snapshotId:null,patternId:A,agents:i.agents}),i.timeout&&(P=setTimeout(()=>C.abort(),i.timeout));let K,X=Object.create(null),Q=[...i.agents];try{let Y=i.agents.map(Z=>({agentId:Z,promise:Ye(Z,m,{signal:C.signal}).then(we=>({agentId:Z,result:we}))})),pe=Y.map(Z=>Z.promise.catch(()=>{})),F=[],V=await new Promise((Z,we)=>{let ve=0,ie=!1;for(let B of Y)B.promise.then(L=>{ve++,!ie&&(F.push(L),F.length>=g&&(ie=!0,C.abort(),Z([...F])));}).catch(L=>{if(X[B.agentId]=L instanceof Error?L.message:String(L),ve++,ie)return;let ue=Object.keys(X).length,Pe=F.length+(Y.length-ve);ve===Y.length&&ue===Y.length?(ie=!0,we(new Error(`[Directive MultiAgent] Race: all ${Y.length} agents failed.
|
|
67
|
+
`+Object.entries(X).map(([ce,Ke])=>` - ${ce}: ${Ke}`).join(`
|
|
68
|
+
`)))):Pe<g&&(ie=!0,we(new Error(`[Directive MultiAgent] Race: cannot reach minSuccess (${g}). ${ue} agent(s) failed.
|
|
69
|
+
`+Object.entries(X).map(([ce,Ke])=>` - ${ce}: ${Ke}`).join(`
|
|
70
|
+
`))));});});await Promise.all(pe).catch(()=>{});let he=V[0],le=he.agentId,Te=new Set(V.map(Z=>Z.agentId)),te=Q.filter(Z=>!Te.has(Z)&&!(Z in X));J&&(J.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:A,winnerId:le,durationMs:Date.now()-y}),te.length>0&&J.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:A,cancelledIds:te,reason:"winner_found"}));let oe=i.extract?i.extract(he.result):he.result.output,O=g>1?V.map(Z=>({agentId:Z.agentId,result:i.extract?i.extract(Z.result):Z.result.output})):void 0;return {winnerId:le,result:oe,allResults:O}}catch(Y){throw K=Y instanceof Error?Y:new Error(String(Y)),J&&J.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:A,cancelledIds:Q,reason:C.signal.aborted?"timeout":"all_failed"}),Y}finally{P&&clearTimeout(P),_&&i.signal&&i.signal.removeEventListener("abort",_),b&&I("onPatternComplete",{patternId:A,patternType:"race",durationMs:Date.now()-y,timestamp:Date.now(),error:K});}}async function Cn(i,m,b,g){let{agents:y,evaluator:A,maxRounds:C=2,extract:P,parseJudgement:_}=i;if(y.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 agents");if(C<1||!Number.isFinite(C))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let K=i.signal,X,Q;if(i.timeout&&!K){let L=new AbortController;X=setTimeout(()=>L.abort(),i.timeout),K=L.signal;}else if(i.timeout&&K){let L=new AbortController;X=setTimeout(()=>L.abort(),i.timeout),Q=()=>L.abort(),K.addEventListener("abort",Q,{once:true}),K=L.signal;}let pe=_??(L=>{if(typeof L=="string")try{let ue=JSON.parse(L);return ue&&typeof ue=="object"&&typeof ue.winnerId=="string"?ue:(z&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:y[0]})}catch{return z&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:y[0]}}return L&&typeof L=="object"&&"winnerId"in L&&typeof L.winnerId=="string"?L:(z&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:y[0]})}),F=g?.rounds?[...g.rounds]:[],V=g?.currentInput??m,he=g?.lastWinnerId??y[0],le=g?.lastWinnerOutput??void 0,Te=g?.round??0,te=i.checkpoint,oe=te?.store??T,O=te?.everyN??5,Z=te?.labelPrefix??"debate",we=b??"__inline_debate",ve=Date.now(),ie=g?.tokensConsumed??0;b&&I("onPatternStart",{patternId:we,patternType:"debate",input:m,timestamp:ve});let B;try{for(let ue=Te;ue<C&&!K?.aborted;ue++){let Pe=y.map(async He=>{let Ft=await Ye(He,V,{signal:K});return ie+=Ft.totalTokens,{agentId:He,output:Ft.output}}),ce=await Promise.all(Pe);if(K?.aborted)break;let Ke=JSON.stringify({round:ue+1,totalRounds:C,proposals:ce.map(He=>({agentId:He.agentId,proposal:He.output}))}),Ie=await Ye(A,Ke,{signal:K});ie+=Ie.totalTokens;let Ne=pe(Ie.output);if(y.includes(Ne.winnerId)||(Ne.winnerId=y[0]),F.push({proposals:ce,judgement:Ne}),J&&J.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:we,round:ue+1,totalRounds:C,winnerId:Ne.winnerId,score:Ne.score,agentCount:y.length}),he=Ne.winnerId,le=ce.find(He=>He.agentId===Ne.winnerId)?.output??ce[0].output,te&&oe&&ue>Te&&(ue-Te)%O===0){let He={type:"debate",version:1,id:Ct(),createdAt:new Date().toISOString(),label:`${Z}:round-${ue+1}`,patternId:we,stepsTotal:C,round:ue+1,currentInput:V,rounds:[...F],lastWinnerId:he,lastWinnerOutput:le,tokensConsumed:ie};await Xt(He,oe,te);}ue<C-1&&Ne.feedback&&(V=`Previous round feedback: ${Ne.feedback}
|
|
44
71
|
|
|
45
|
-
`)}`}function An(e,t,r){return Math.max(t,Math.min(r,e))}function Tn(e){let{embedder:t,storage:r,topK:s=5,minSimilarity:n=.3,formatChunk:a=wn,formatContext:o=Sn,onError:c}=e,i=An(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 l(u,m){let f=Math.max(1,Math.floor(m??s));if(r.search)return r.search(await t(u),f,i);let R=await t(u),v=(await r.getChunks()).map(y=>({...y,similarity:oe(R,y.embedding)}));return v.sort((y,h)=>h.similarity-y.similarity),v.filter(y=>y.similarity>=i).slice(0,f)}async function d(u,m={}){let{prefix:f,history:R,topK:b,filter:v}=m,y=[];try{y=await l(u,b);}catch(E){c?.(E instanceof Error?E:new Error(String(E)));}v&&(y=y.filter(E=>v(E)));let h=y.map(E=>a(E,E.similarity)),g=o(h,u),T=[];if(f&&T.push(f),g&&T.push(g),R&&R.length>0){let E=R.map(S=>`${S.role.charAt(0).toUpperCase()+S.role.slice(1)}: ${S.content}`).join(`
|
|
72
|
+
Original task: ${m}`);}if(F.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let L=P?P(le):le;return {winnerId:he,result:L,rounds:F}}catch(L){throw B=L instanceof Error?L:new Error(String(L)),L}finally{X&&clearTimeout(X),Q&&i.signal&&i.signal.removeEventListener("abort",Q),b&&I("onPatternComplete",{patternId:we,patternType:"debate",durationMs:Date.now()-ve,timestamp:Date.now(),error:B});}}let so=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Yt(i,m){for(let b of Object.keys(m))so.has(b)||(i[b]=m[b]);}function ao(i,m){let b=Object.create(null);for(let[_,K]of Object.entries(m))for(let X of K.produces)b[X]||(b[X]=[]),b[X].push(_);let g=Object.keys(m),y=Object.create(null),A=Object.create(null);for(let _ of g)y[_]=0,A[_]=[];for(let[_,K]of Object.entries(m))for(let X of K.requires??[]){let Q=b[X];if(Q)for(let Y of Q)Y!==_&&(A[Y].push(_),y[_]=(y[_]??0)+1);}let C=[];for(let _ of g)y[_]===0&&C.push(_);let P=0;for(;C.length>0;){let _=C.shift();P++;for(let K of A[_]??[])y[K]--,y[K]===0&&C.push(K);}if(P!==g.length)throw new Error(`[Directive MultiAgent] goal pattern "${i}": cycle detected in produces/requires graph. Visited ${P}/${g.length} nodes.`)}function io(i,m){let b=Object.create(null);for(let[g,y]of Object.entries(m))for(let A of y.produces)b[A]||(b[A]=[]),b[A].push(g);for(let[g,y]of Object.entries(b))y.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${i}": fact key "${g}" is produced by multiple nodes: ${y.join(", ")}. Last writer wins.`);}function rt(i,...m){if(i)try{return i(...m)}catch(b){console.error("[Directive MultiAgent] goal: user callback threw:",b);return}}async function uo(i,...m){if(i)try{return await i(...m)}catch(b){console.error("[Directive MultiAgent] goal: user callback threw:",b);return}}function Hn(i,m,b){let g=m.slice(-3),y=g.length>0?g.reduce((P,_)=>P+_.satisfactionDelta,0)/g.length:0,A=null;y>0&&i<1&&(A=Math.ceil((1-i)/y));let C=false;if(m.length>=6){let P=m.slice(-3),_=m.slice(-6,-3),K=P.reduce((Q,Y)=>Q+Y.satisfactionDelta,0)/3,X=_.reduce((Q,Y)=>Q+Y.satisfactionDelta,0)/3;C=K<X*.5;}return {satisfaction:i,progressRate:y,estimatedStepsRemaining:A,decelerating:C}}function un(i){return i==null||!Number.isFinite(i)?0:Math.max(0,Math.min(1,i))}async function Mn(i,m,b,g){let{nodes:y,when:A,satisfaction:C,maxSteps:P=50,extract:_,selectionStrategy:K,relaxation:X,onStep:Q,onStall:Y}=i,pe=Object.create(null);for(let[Ge,Qe]of Object.entries(y))pe[Ge]={...Qe};if(Object.keys(pe).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let V=b??"__goal";for(let[Ge,Qe]of Object.entries(pe))if(!ee[Qe.agent])throw new Error(`[Directive MultiAgent] goal node "${Ge}" references unregistered agent "${Qe.agent}"`);ao(V,pe),io(V,pe);for(let[Ge,Qe]of Object.entries(pe))Qe.extractOutput||console.warn(`[Directive MultiAgent] goal node "${Ge}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let he=i.signal,le,Te,te=i.timeout??3e5;if(te&&!he){let Ge=new AbortController;le=setTimeout(()=>Ge.abort(),te),he=Ge.signal;}else if(te&&he){let Ge=new AbortController;le=setTimeout(()=>Ge.abort(),te),Te=()=>Ge.abort(),he.addEventListener("abort",Te,{once:true}),he=Ge.signal;}let oe=Date.now();J&&J.record({type:"pattern_start",timestamp:oe,snapshotId:null,patternId:V,patternType:"goal"}),I("onPatternStart",{patternId:V,patternType:"goal",input:typeof m=="string"?m:JSON.stringify(m),timestamp:oe});let O=Object.create(null);g?Yt(O,g.facts):typeof m=="string"?O.input=m:Yt(O,m);let Z=g?[...g.executionOrder]:[],we=Object.create(null);if(g)for(let[Ge,Qe]of Object.entries(g.nodeOutputs))we[Ge]={output:Qe.output,totalTokens:Qe.totalTokens};let ve=g?[...g.stepMetrics]:[],ie=g?[...g.relaxations]:[],B=new Set(g?.completedNodes??[]),L=new Map(g?Object.entries(g.failedNodes).map(([Ge,Qe])=>[Ge,Qe]):[]),ue=new Map(g?Object.entries(g.nodeInputHashes):[]),Pe=Object.create(null);if(g)for(let[Ge,Qe]of Object.entries(g.agentMetrics))Pe[Ge]={runs:Qe.runs,avgSatisfactionDelta:Qe.runs>0?Qe.totalDelta/Qe.runs:0,tokens:Qe.tokens,totalDelta:Qe.totalDelta};let ce=g?.stallSteps??0,Ke=g?.appliedRelaxationTiers??0,Ie=g?.lastSatisfaction??0,Ne,Gt=g?.step??0,He=i.checkpoint,Ft=He?.everyN??5,hr=He?.store??T,po=He?.labelPrefix??"goal",yr,go=3;try{for(let Ze=Gt;Ze<P;Ze++){if(rt(A,O)===!0){let Ce=Date.now()-oe,xe=Object.values(we).reduce(($e,et)=>$e+et.totalTokens,0);return {achieved:!0,result:rt(_,O)??O,facts:{...O},executionOrder:Z,nodeResults:we,steps:Ze,totalTokens:xe,durationMs:Ce,stepMetrics:ve,relaxations:ie}}if(he?.aborted){let Ce=Date.now()-oe,xe=Object.values(we).reduce(($e,et)=>$e+et.totalTokens,0);return {achieved:!1,result:rt(_,O)??O,facts:{...O},executionOrder:Z,nodeResults:we,steps:Ze,totalTokens:xe,durationMs:Ce,stepMetrics:ve,relaxations:ie,error:"Aborted or timed out"}}let qt=[];for(let[Ce,xe]of Object.entries(pe)){if((L.get(Ce)??0)>=go)continue;let $e=xe.requires??[];if($e.every(Ve=>O[Ve]!=null)){if(B.has(Ce)){if(!xe.allowRerun)continue;let Ve=JSON.stringify($e.map(ot=>O[ot]));if(ue.get(Ce)===Ve)continue}qt.push(Ce);}}let Ut=qt;if(K&&qt.length>0){let Ce=C?rt(C,O)??0:rt(A,O)===!0?1:0,xe=un(Ce),$e=Hn(xe,ve,Ze),et=Object.create(null);for(let[ot,je]of Object.entries(Pe))et[ot]={runs:je.runs,avgSatisfactionDelta:je.runs>0?je.totalDelta/je.runs:0,tokens:je.tokens};let Ve=K.select(qt,et,$e);Ut=Ve&&Ve.length>0?Ve:qt;}if(Ut.sort((Ce,xe)=>(pe[xe].priority??0)-(pe[Ce].priority??0)),rt(Q,Ze,{...O},Ut),Ut.length===0){ce++;let Ce=!1;if(X)for(let xe=Ke;xe<X.length;xe++){let $e=X[xe],et=$e.afterStallSteps??3;if(ce>=et){let Ve=$e.strategy;switch(Ve.type){case "allow_rerun":for(let ot of Ve.nodes)B.delete(ot),ue.delete(ot);break;case "alternative_nodes":for(let ot of Ve.nodes){let je=`__relaxation_${xe}_${ot.agent}`;pe[je]={...ot};}break;case "inject_facts":Yt(O,Ve.facts);break;case "accept_partial":{let ot=Date.now()-oe,je=Object.values(we).reduce((tt,Ot)=>tt+Ot.totalTokens,0);return {achieved:!1,result:rt(_,O)??O,facts:{...O},executionOrder:Z,nodeResults:we,steps:Ze,totalTokens:je,durationMs:ot,stepMetrics:ve,relaxations:ie,error:`Accepted partial result via relaxation tier "${$e.label}"`}}case "custom":{let ot=rt(C,O)??0,je={step:Ze,facts:{...O},metrics:Hn(un(ot),ve,Ze),completedNodes:new Set(B),failedNodes:new Map(L)};await uo(Ve.apply,je);break}}ie.push({step:Ze,tierIndex:xe,label:$e.label,strategy:Ve.type}),Ke=xe+1,ce=0,Ce=!0;break}}if(!Ce){let xe=rt(C,O)??0,$e=Hn(un(xe),ve,Ze);if(rt(Y,Ze,$e),!X||Ke>=X.length){let et=Date.now()-oe,Ve=Object.values(we).reduce((ot,je)=>ot+je.totalTokens,0);return {achieved:!1,result:rt(_,O)??O,facts:{...O},executionOrder:Z,nodeResults:we,steps:Ze,totalTokens:Ve,durationMs:et,stepMetrics:ve,relaxations:ie,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}ce=0;let mo=Date.now(),fo=C?rt(C,O)??0:rt(A,O)===!0?1:0,ho=un(fo),br=0,Qt=[],yo=Ut.map(async Ce=>{let xe=pe[Ce],$e=xe.requires??[],et=JSON.stringify($e.map(je=>O[je]));ue.set(Ce,et);let Ve,ot=rt(xe.buildInput,O);if(ot!=null)Ve=ot;else {let je=Object.create(null);for(let tt of $e)O[tt]!=null&&(je[tt]=O[tt]);Object.keys(je).length>0?Ve=JSON.stringify(je):O.input!=null?Ve=String(O.input):Ve=JSON.stringify(O);}try{let je=await Ye(xe.agent,Ve,{signal:he??void 0});if(we[Ce]=je,Z.push(Ce),B.add(Ce),L.delete(Ce),xe.extractOutput){let tt=rt(xe.extractOutput,je);tt&&(Yt(O,tt),Qt.push(...Object.keys(tt)));}else {let tt=je.output;if(tt&&typeof tt=="object")Yt(O,tt),Qt.push(...Object.keys(tt));else if(typeof tt=="string")try{let Ot=JSON.parse(tt);if(Ot&&typeof Ot=="object"&&!Array.isArray(Ot))Yt(O,Ot),Qt.push(...Object.keys(Ot));else for(let vr of xe.produces)O[vr]=tt,Qt.push(vr);}catch{for(let Ot of xe.produces)O[Ot]=tt,Qt.push(Ot);}}return br+=je.totalTokens,{nodeId:Ce,success:!0}}catch(je){let tt=(L.get(Ce)??0)+1;return L.set(Ce,tt),{nodeId:Ce,success:!1,error:je}}});await Promise.allSettled(yo);let bo=C?rt(C,O)??0:rt(A,O)===!0?1:0,zn=un(bo),Jn=zn-ho;ve.push({step:Ze,durationMs:Date.now()-mo,nodesRun:[...Ut],factsProduced:Qt,satisfaction:zn,satisfactionDelta:Jn,tokensConsumed:br});for(let Ce of Ut){let xe=pe[Ce];Pe[xe.agent]||(Pe[xe.agent]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let $e=Pe[xe.agent];$e.runs++,$e.totalDelta+=Jn,$e.tokens+=we[Ce]?.totalTokens??0;}if(Ie=zn,Jn<=0?ce++:ce=0,He&&hr&&Ze>Gt&&(Ze-Gt)%Ft===0){let Ce={type:"goal",version:1,id:Ct(),createdAt:new Date().toISOString(),label:`${po}:step-${Ze}`,patternId:V,stepsTotal:P,step:Ze+1,facts:structuredClone(O),completedNodes:[...B],failedNodes:Object.fromEntries(L),nodeInputHashes:Object.fromEntries(ue),nodeOutputs:Object.fromEntries(Object.entries(we).map(([$e,et])=>[$e,{output:et.output,totalTokens:et.totalTokens}])),executionOrder:[...Z],stepMetrics:[...ve],relaxations:[...ie],appliedRelaxationTiers:Ke,stallSteps:ce,lastSatisfaction:Ie,agentMetrics:Object.fromEntries(Object.entries(Pe).map(([$e,et])=>[$e,{runs:et.runs,totalDelta:et.totalDelta,tokens:et.tokens}]))},xe=await Xt(Ce,hr,He);xe&&(yr=xe);}}let Ge=Date.now()-oe,Qe=Object.values(we).reduce((Ze,qt)=>Ze+qt.totalTokens,0);return {achieved:!1,result:rt(_,O)??O,facts:{...O},executionOrder:Z,nodeResults:we,steps:P,totalTokens:Qe,durationMs:Ge,stepMetrics:ve,relaxations:ie,error:`Max steps (${P}) exhausted without achieving goal`}}catch(Ge){throw Ne=Ge instanceof Error?Ge:new Error(String(Ge)),Ge}finally{le!=null&&clearTimeout(le),Te&&i.signal&&i.signal.removeEventListener("abort",Te),J&&J.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:V,patternType:"goal",durationMs:Date.now()-oe,...Ne?{error:Ne.message}:{}}),I("onPatternComplete",{patternId:V,patternType:"goal",durationMs:Date.now()-oe,timestamp:Date.now(),error:Ne});}}function co(i){if(!U)return [];let m=[],b=new Set;if(b.add(i),U.equivalencyGroups){for(let g of Object.values(U.equivalencyGroups))if(g.includes(i))for(let y of g)!b.has(y)&&ee[y]&&(m.push(y),b.add(y));}if(U.useCapabilities!==false){let g=ee[i];if(g?.capabilities&&g.capabilities.length>0)for(let[y,A]of Object.entries(ee)){if(b.has(y))continue;let C=A.capabilities??[];g.capabilities.every(P=>C.includes(P))&&(m.push(y),b.add(y));}}if(it){let g=U.healthThreshold??30;return m.filter(y=>it.getHealthScore(y)>g)}return m}function lo(i){if(i.length===0)return null;if(!U||!it)return i[0]??null;if(U.selectionStrategy==="round-robin"&&D){let g=[...i].sort().join(","),y=D.get(g)??0,A=i[y%i.length];return D.set(g,y+1),A}let m=i[0],b=it.getHealthScore(m);for(let g=1;g<i.length;g++){let y=it.getHealthScore(i[g]);y>b&&(m=i[g],b=y);}return m}let fr={system:E,get facts(){return E.facts},get timeline(){return J},get healthMonitor(){return it},get derived(){return Object.freeze({...ke})},onDerivedChange(i){return Le.add(i),()=>{Le.delete(i);}},get scratchpad(){return Nt},runAgent:Ye,runAgentStream:Ln,async runPattern(i,m){Se();let b=o[i];if(!b){let A=Object.keys(o).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${i}". Available patterns: ${A}`)}let g=Date.now();J&&J.record({type:"pattern_start",timestamp:g,snapshotId:null,patternId:i,patternType:b.type});let y;try{switch(b.type){case "parallel":return await oo(b,m,i);case "sequential":return await Fn(b,m,i);case "supervisor":return await qn(b,m,i);case "dag":return await Un(b,m,i);case "reflect":return await An(b,m,i);case "race":return (await mr(b,m,i)).result;case "debate":return (await Cn(b,m,i)).result;case "goal":return (await Mn(b,m,i)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${b.type}`)}}catch(A){throw y=A instanceof Error?A:new Error(String(A)),A}finally{J&&J.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:i,patternType:b.type,durationMs:Date.now()-g,...y?{error:y.message}:{}});}},async runParallel(i,m,b,g){Se();let y=Array.isArray(m)?m:i.map(()=>m);if(y.length!==i.length)throw new Error(`[Directive MultiAgent] Input count (${y.length}) must match agent count (${i.length})`);let A=new AbortController,C;g?.timeout&&(C=setTimeout(()=>A.abort(),g.timeout));try{let P=i.map((X,Q)=>Ye(X,y[Q],{signal:A.signal}).catch(Y=>{if(g?.minSuccess!==void 0)return null;throw Y})),_=await Promise.all(P),K=_.filter(X=>X!==null);if(g?.minSuccess!==void 0&&K.length<g.minSuccess){let X=_.length-K.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${K.length}/${i.length} agents succeeded (minimum required: ${g.minSuccess}, failed: ${X})`)}return b(K)}finally{C&&clearTimeout(C);}},async runSequential(i,m,b){Se();let g=[],y=m;for(let A=0;A<i.length;A++){let C=i[A],P=await Ye(C,y);g.push(P),A<i.length-1&&(b?.transform?y=b.transform(P.output,C,A):y=typeof P.output=="string"?P.output:$t(P.output));}return g},async handoff(i,m,b,g){if(Se(),!ee[i]){let C=Object.keys(ee).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${i}" not found. Registered: ${C}`)}if(!ee[m]){let C=Object.keys(ee).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${m}" not found. Registered: ${C}`)}{let C=await Vt("pre_handoff",i,ee[i].agent.name,b,void 0,{handoff:{fromAgent:i,toAgent:m}});if(C.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};b=C.input;}let y={id:`handoff-${++Ue}`,fromAgent:i,toAgent:m,input:b,context:g,requestedAt:Date.now()};ut.push(y);try{n?.(y);}catch(C){z&&console.debug("[Directive MultiAgent] onHandoff threw:",C);}I("onHandoff",y),J&&J.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:i,toAgent:m});let A=ee[m].memory??d;if(A&&g)try{let C=Object.entries(g).map(([P,_])=>`${P}: ${$t(_)}`).join(", ");A.addMessages([{role:"system",content:`[Handoff from ${i}] Context: ${C}`}]);}catch(C){z&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",C);}try{let C=await Ye(m,b),P={request:y,result:C,completedAt:Date.now()};ae(P);try{a?.(P);}catch(K){z&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",K);}I("onHandoffComplete",P),J&&J.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:i,toAgent:m,durationMs:P.completedAt-y.requestedAt});let _=ut.indexOf(y);return _>=0&&ut.splice(_,1),C}catch(C){let P=ut.indexOf(y);throw P>=0&&ut.splice(P,1),C}},approve(i){Se();let m=me.get(i);if(m){me.delete(i);let b=We(m);E.batch(()=>{let g=wt(b),y=200,A=[...g.approved,i];ft(b,{...g,pending:g.pending.filter(C=>C.id!==i),approved:A.length>y?A.slice(-y):A});});return}z&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${i}"`);},reject(i,m){Se();let b=me.get(i);if(b){me.delete(i);let g=We(b);E.batch(()=>{let y=wt(g);m&&z&&console.debug(`[Directive MultiAgent] Request ${i} rejected: ${m}`);let A={id:i,reason:m,rejectedAt:Date.now()},C=200,P=[...y.rejected,A];ft(g,{...y,pending:y.pending.filter(_=>_.id!==i),rejected:P.length>C?P.slice(-C):P});});return}z&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${i}"`);},pause(){Se(),se="paused",z&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){Se(),se==="paused"&&(se="idle",z&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(i){let m=De[i];return m?{...m}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(De).map(([i,m])=>[i,{...m}]))},getPendingHandoffs(){return [...ut]},get totalTokens(){return ne},waitForIdle(i){let m=()=>Ae===0&&Object.values(De).every(b=>b.status==="idle"||b.status==="completed"||b.status==="error");return m()?Promise.resolve():new Promise((b,g)=>{let y=null,A=()=>{ze.delete(C),y&&clearTimeout(y);},C=()=>{m()&&(A(),b());};ze.add(C),i!==void 0&&(y=setTimeout(()=>{A(),g(new Error(`[Directive MultiAgent] waitForIdle timed out after ${i}ms`));},i));})},run(i,m,b){return Ye(i,m,b)},runStream(i,m,b){return Ln(i,m,b)},registerAgent(i,m){if(Se(),G.has(i))throw new Error(`[Directive MultiAgent] Agent ID "${i}" is reserved and cannot be used`);if(ee[i])throw new Error(`[Directive MultiAgent] Agent "${i}" is already registered. Unregister first.`);let b=m.constraints?nn(m.constraints):{},g=Object.create(null);if(m.resolvers)for(let[A,C]of Object.entries(m.resolvers))g[A]={requirement:C.requirement,key:C.key,resolve:async(P,_)=>{let K=mt(_.facts),Q={facts:{..._.facts,...K},runAgent:async(Y,pe,F)=>e(Y,pe,F),signal:_.signal};return C.resolve(P,Q)}};let y=core.createModule(i,{schema:ln,init:A=>{at(A,{status:"idle",currentAgent:m.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),ft(A,{pending:[],approved:[],rejected:[]}),xt(A,[]),At(A,[]),bt(A,on());},constraints:b,resolvers:Object.keys(g).length>0?g:void 0});E.registerModule(i,y),ee[i]=m,qe.set(i,new zt(m.maxConcurrent??1)),De[i]={status:"idle",runCount:0,totalTokens:0},z&&console.debug(`[Directive MultiAgent] Registered agent "${i}" (${m.agent.name})`),ht();},unregisterAgent(i){if(Se(),!ee[i])throw new Error(`[Directive MultiAgent] Agent "${i}" is not registered`);if(De[i]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${i}" while it is running`);for(let[y,A]of Object.entries(o)){let C;switch(A.type){case "supervisor":C=[A.supervisor,...A.workers];break;case "dag":C=Object.values(A.nodes).map(P=>P.agent);break;case "reflect":C=[A.agent,A.evaluator];break;case "parallel":case "sequential":case "race":C=A.agents;break;case "debate":C=[...A.agents,A.evaluator];break;default:C=[];}C.includes(i)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${y}" references unregistered agent "${i}"`);}let b=qe.get(i);b&&(b.drain(),qe.delete(i));let g=We(i);g&&E.batch(()=>{at(g,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),ft(g,{pending:[],approved:[],rejected:[]}),xt(g,[]),At(g,[]),bt(g,on());}),delete ee[i],delete De[i],z&&console.debug(`[Directive MultiAgent] Unregistered agent "${i}"`),ht();},getAgentIds(){return Object.keys(ee)},reset(){Se();for(let m of Object.keys(ee)){let b=ee[m]?.maxConcurrent??1;De[m]={status:"idle",runCount:0,totalTokens:0};let g=qe.get(m);g&&g.drain(),qe.set(m,new zt(b));let y=We(m);E.batch(()=>{at(y,{status:"idle",currentAgent:ee[m].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),ft(y,{pending:[],approved:[],rejected:[]}),xt(y,[]),At(y,[]),bt(y,on());});}pt.clear(),It.clear(),me.clear(),ut.length=0,kt.length=0,Ue=0,ne=0,se="idle",Ae=0,ye();let i=We("__coord");E.batch(()=>{adapterUtils.setBridgeFact(i,"__globalTokens",0),adapterUtils.setBridgeFact(i,"__status","idle"),adapterUtils.setBridgeFact(i,"__handoffs",[]),adapterUtils.setBridgeFact(i,"__handoffResults",[]),adapterUtils.setBridgeFact(i,"__budgetWarningFired",false),be&&adapterUtils.setBridgeFact(i,gt,{...be.init});}),it&&it.reset(),Oe=null;for(let m of Object.keys(ke))delete ke[m];ht();},async checkpoint(i){Se();for(let[b,g]of Object.entries(De))if(g.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${b}" is running`);if(!E.debug?.export)throw new Error("[Directive MultiAgent] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let m={version:1,id:Ct(),createdAt:new Date().toISOString(),label:i?.label,systemExport:E.debug.export(),timelineExport:J?.export()??null,localState:{type:"multi",globalTokenCount:ne,globalStatus:se,agentStates:Object.fromEntries(Object.entries(De).map(([b,g])=>[b,structuredClone(g)])),handoffCounter:Ue,pendingHandoffs:[...ut],handoffResults:[...kt],roundRobinCounters:D?Object.fromEntries(D):null},memoryExport:d?d.export?.()??null:null,orchestratorType:"multi"};return T&&await T.save(m),m},restore(i,m){if(Se(),!rn(i))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(i.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${i.orchestratorType}"`);if(!E.debug?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");E.debug.import(i.systemExport),m?.restoreTimeline!==false&&i.timelineExport&&J&&J.import(i.timelineExport),i.memoryExport&&d&&d.import&&d.import(i.memoryExport);let b=i.localState;ne=b.globalTokenCount,se=b.globalStatus,Ue=b.handoffCounter,ut.length=0,ut.push(...b.pendingHandoffs),kt.length=0,kt.push(...b.handoffResults);for(let[g,y]of Object.entries(b.agentStates))De[g]&&(De[g]={...y});if(b.roundRobinCounters&&D){D.clear();for(let[g,y]of Object.entries(b.roundRobinCounters))D.set(g,y);}for(let[g,y]of Object.entries(ee)){let A=qe.get(g);A&&A.drain(),qe.set(g,new zt(y.maxConcurrent??1));}ht();},runParallelStream(i,m,b,g){Se();let y=Array.isArray(m)?m:i.map(()=>m);if(y.length!==i.length)throw new Error(`[Directive MultiAgent] Input count (${y.length}) must match agent count (${i.length})`);let A=new AbortController,C;g?.timeout&&(C=setTimeout(()=>A.abort(),g.timeout));let P=i.map((F,V)=>{let he=Ln(F,y[V],{signal:A.signal});return {agentId:F,streamResult:he}}),_=P.map(({agentId:F,streamResult:V})=>({agentId:F,stream:V.stream})),{stream:K,getDroppedCount:X}=Yn(_),Q;g?.signal&&(Q=()=>A.abort(),g.signal.addEventListener("abort",Q,{once:true}));let Y=Promise.allSettled(P.map(({streamResult:F})=>F.result)).then(F=>{C&&clearTimeout(C),Q&&g?.signal&&g.signal.removeEventListener("abort",Q);let V=[];for(let he of F)he.status==="fulfilled"&&V.push(he.value);if(g?.minSuccess!==void 0&&V.length<g.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${V.length}/${i.length} agents succeeded (minimum required: ${g.minSuccess})`);return V}),pe=Y.then(F=>b(F));return Y.catch(()=>{}),pe.catch(()=>{}),{stream:K,results:Y,merge:pe,getDroppedCount:X,abort:()=>{A.abort(),Q&&g?.signal&&g.signal.removeEventListener("abort",Q);for(let{streamResult:F}of P)F.abort();}}},async runRace(i,m,b){Se();let g={type:"race",agents:i,extract:b?.extract,timeout:b?.timeout,minSuccess:b?.minSuccess,signal:b?.signal};return mr(g,m,"__imperative_race")},async runReflect(i,m,b,g){Se();let y={type:"reflect",agent:i,evaluator:m,maxIterations:g?.maxIterations,parseEvaluation:g?.parseEvaluation,buildRetryInput:g?.buildRetryInput,extract:g?.extract,onExhausted:g?.onExhausted,onIteration:g?.onIteration,signal:g?.signal,timeout:g?.timeout,threshold:g?.threshold},A=await An(y,b,"__imperative_reflect"),C=Oe?[...Oe]:[],P=g?.maxIterations??2,_=C.length>0&&!C[C.length-1].passed&&C.length>=P;return {result:A,iterations:C.length,history:C,exhausted:_}},async runDebate(i,m,b,g){return Se(),Cn({agents:i,evaluator:m,maxRounds:g?.maxRounds,extract:g?.extract,parseJudgement:g?.parseJudgement,signal:g?.signal,timeout:g?.timeout},b,"__imperative_debate")},async runGoal(i,m,b,g){return Se(),Mn({nodes:i,when:b,satisfaction:g?.satisfaction,maxSteps:g?.maxSteps,extract:g?.extract,timeout:g?.timeout,signal:g?.signal,selectionStrategy:g?.selectionStrategy,relaxation:g?.relaxation,onStep:g?.onStep,onStall:g?.onStall,checkpoint:g?.checkpoint},m,"__imperative_goal")},async resumeGoal(i,m){if(Se(),!i||i.version!==1||i.type!=="goal"&&i.type!=="converge")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");let b=i.type==="converge"?{...i}:i;return Mn(m,{},b.patternId,b)},async resumeSequential(i,m){if(Se(),!i||i.version!==1||i.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return Fn(m,i.currentInput,i.patternId,i)},async resumeSupervisor(i,m,b){if(Se(),!i||i.version!==1||i.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let g=b?.input??i.currentInput;return qn(m,g,i.patternId,i)},async resumeReflect(i,m,b){if(Se(),!i||i.version!==1||i.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let g=b?.input??i.effectiveInput;return An(m,g,i.patternId,i)},async resumeDebate(i,m){if(Se(),!i||i.version!==1||i.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return Cn(m,i.currentInput,i.patternId,i)},async resumeDag(i,m,b){if(Se(),!i||i.version!==1||i.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let g=b?.input??i.input;return Un(m,g,i.patternId,i)},async replay(i,m,b){if(Se(),!T)throw new Error("[Directive MultiAgent] No checkpoint store configured");let g=await T.load(i);if(!g)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let y;try{let P=JSON.parse(g.systemExport);if(!P||typeof P!="object")throw new Error("Parsed checkpoint state is not an object");let _=new Set(["__proto__","constructor","prototype"]);for(let X of Object.keys(P))if(_.has(X))throw new Error(`Checkpoint state contains blocked key: ${X}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal","converge"]).has(P.type))throw new Error(`Unknown checkpoint pattern type: ${P.type}`);if(P.version!==1)throw new Error(`Unsupported checkpoint version: ${P.version}`);y=P;}catch(P){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${P instanceof Error?P.message:String(P)}`)}let A=an(y),C=b?.input??("currentInput"in y?y.currentInput:"");switch(J&&J.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:i,patternType:y.type,step:A}),y.type){case "sequential":return Fn(m,C,y.patternId,y);case "supervisor":return qn(m,C,y.patternId,y);case "reflect":return An(m,C,y.patternId,y);case "debate":return Cn(m,C,y.patternId,y);case "dag":return Un(m,C,y.patternId,y);case "goal":return Mn(m,y.facts,y.patternId,y)}},resumeBreakpoint(i,m){Se(),m&&pt.set(i,m);for(let b of Object.keys(ee)){let g=We(b);if(yt(g).pending.some(A=>A.id===i)){E.batch(()=>{let A=yt(g),C=[...A.resolved,i];bt(g,{...A,pending:A.pending.filter(P=>P.id!==i),resolved:C.length>Mt?C.slice(-Mt):C});});return}}z&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${i}"`);},cancelBreakpoint(i,m){Se(),m&&It.set(i,m);for(let b of Object.keys(ee)){let g=We(b);if(yt(g).pending.some(A=>A.id===i)){E.batch(()=>{let A=yt(g),C=[...A.cancelled,i];bt(g,{...A,pending:A.pending.filter(P=>P.id!==i),cancelled:C.length>Mt?C.slice(-Mt):C});});return}}z&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${i}"`);},getPendingBreakpoints(){let i=[];for(let m of Object.keys(ee)){let b=We(m),g=yt(b);i.push(...g.pending);}return i},getLastReflectionHistory(){return Oe?[...Oe]:null},dispose(){fe||(fr.reset(),de.clear(),Je.clear(),Le.clear(),ze.clear(),fe=true,E.destroy());}};return ht(),fr}function vs(t,e,r){return {type:"parallel",agents:t,merge:e,...r}}function ks(t,e){return {type:"sequential",agents:t,...e}}function ws(t,e,r){return {type:"supervisor",supervisor:t,workers:e,...r}}function Rs(t,e,r){return {type:"dag",nodes:t,merge:e??(o=>o.outputs),...r}}function Ss(t,e,r){return {type:"reflect",agent:t,evaluator:e,...r}}function Ts(t,e){return {type:"race",agents:t,...e}}function Es(t,e,r){return {type:"goal",nodes:t,when:e,...r}}function xs(){return {select:t=>t}}function As(t){let e=t?.topN??3;return {select:(r,o)=>[...r].sort((a,s)=>{let c=o[a]?.avgSatisfactionDelta??0;return (o[s]?.avgSatisfactionDelta??0)-c}).slice(0,e)}}function Cs(){return {select:(t,e)=>[...t].sort((o,n)=>{let a=e[o],s=e[n];if(!a||a.runs===0)return -1;if(!s||s.runs===0)return 1;let c=a.avgSatisfactionDelta>0?a.tokens/a.runs/a.avgSatisfactionDelta:1/0,u=s.avgSatisfactionDelta>0?s.tokens/s.runs/s.avgSatisfactionDelta:1/0;return c-u})}}function Ms(t,e){let r=Object.keys(e);for(let[u,l]of Object.entries(e))for(let d of l.deps??[])if(!e[d])throw new Error(`[Directive MultiAgent] DAG pattern "${t}": node "${u}" depends on unknown node "${d}"`);if(!r.some(u=>{let l=e[u]?.deps;return !l||l.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${t}": no root nodes (every node has dependencies)`);let n=Object.create(null),a=Object.create(null);for(let u of r)a[u]=[];for(let[u,l]of Object.entries(e)){n[u]=(l.deps??[]).length;for(let d of l.deps??[])a[d].push(u);}let s=[];for(let u of r)n[u]===0&&s.push(u);let c=0;for(;s.length>0;){let u=s.shift();c++;for(let l of a[u]??[])n[l]--,n[l]===0&&s.push(l);}if(c!==r.length)throw new Error(`[Directive MultiAgent] DAG pattern "${t}": cycle detected. Visited ${c}/${r.length} nodes.`)}function Ds(t,e,r,o){return {when:t,require:n=>{let a=typeof e=="function"?e(n):e,s=typeof r=="function"?r(n):r;return {type:"RUN_AGENT",agent:a,input:s}},priority:o}}function Ps(t,e,r){return {type:"RUN_AGENT",agent:t,input:e,context:r}}function Is(t,e=`
|
|
46
73
|
|
|
47
|
-
`);
|
|
48
|
-
|
|
74
|
+
`){return t.map(r=>typeof r.output=="string"?r.output:$t(r.output)).join(e)}function Os(t,e){if(t.length===0)throw new Error("[Directive MultiAgent] No results to pick from");return t.reduce((r,o)=>e(o)>e(r)?o:r)}function _s(t){return t.map(e=>e.output)}function Ns(t){return t.reduce((e,r)=>e+r.totalTokens,0)}function $s(...t){if(t.length===0)throw new Error("[Directive MultiAgent] composePatterns requires at least one pattern");return async(e,r)=>{let o=r,n;for(let a of t){switch(a.type){case "parallel":{let s=a,c=s.agents.map(()=>o);n=await e.runParallel(s.agents,c,s.merge,{minSuccess:s.minSuccess,timeout:s.timeout});break}case "sequential":{let s=a,c=await e.runSequential(s.agents,o,{transform:s.transform}),u=c[c.length-1];n=s.extract?s.extract(u?.output):u?.output;break}case "supervisor":{let s=a,c=s.maxRounds??5;if(c<1||!Number.isFinite(c))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let u=[],l=await e.runAgent(s.supervisor,o);for(let d=0;d<c;d++){let p=l.output,f;if(typeof p=="string")try{f=JSON.parse(p);}catch{break}else if(p&&typeof p=="object"&&"action"in p)f=p;else break;if(f.action==="complete"||!f.worker||!s.workers.includes(f.worker))break;let v=await e.runAgent(f.worker,f.workerInput??"");u.push(v),l=await e.runAgent(s.supervisor,`Worker ${f.worker} completed with result: ${$t(v.output)}`);}n=s.extract?s.extract(l.output,u):l.output;break}case "dag":{let s=a,c={input:o,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.debug("[Directive MultiAgent] composePatterns: DAG nodes executed sequentially \u2014 use runPattern() for full parallel DAG execution");let u=Object.keys(s.nodes);for(let l of u){let d=s.nodes[l];c.statuses[l]="running";try{let p=o;if(d.transform)p=d.transform(c);else if(d.deps&&d.deps.length>0){let v=Object.create(null);for(let R of d.deps)c.outputs[R]!==void 0&&(v[R]=c.outputs[R]);p=JSON.stringify(v);}let f=await e.runAgent(d.agent,p);c.outputs[l]=f.output,c.results[l]=f,c.statuses[l]="completed";}catch(p){if(c.statuses[l]="error",c.errors[l]=p instanceof Error?p.message:String(p),s.onNodeError==="fail")throw p}}n=await s.merge(c);break}case "reflect":{let s=a,c=s.maxIterations??2,u=s.parseEvaluation??(f=>{if(typeof f=="string")try{return JSON.parse(f)}catch{return {passed:false,feedback:f}}return f&&typeof f=="object"&&"passed"in f?f:{passed:false,feedback:"Invalid evaluator output"}}),l=s.buildRetryInput??((f,v)=>`${f}
|
|
75
|
+
|
|
76
|
+
Feedback on your previous response:
|
|
77
|
+
${v}
|
|
78
|
+
|
|
79
|
+
Please improve your response.`),d=o,p;for(let f=0;f<c;f++){p=(await e.runAgent(s.agent,d)).output;let R=typeof p=="string"?p:JSON.stringify(p),h=await e.runAgent(s.evaluator,R),k=u(h.output);if(k.passed)break;f<c-1&&k.feedback&&(d=l(o,k.feedback,f));}n=s.extract?s.extract(p):p;break}case "race":{let s=a;n=(await e.runRace(s.agents,o,{extract:s.extract,timeout:s.timeout})).result;break}case "debate":{let s=a;n=(await e.runDebate(s.agents,s.evaluator,o,{maxRounds:s.maxRounds,extract:s.extract,parseJudgement:s.parseJudgement,signal:s.signal,timeout:s.timeout})).result;break}case "goal":{let s=a,c=typeof o=="string"?{input:o}:(()=>{try{return JSON.parse(o)}catch{return {input:o}}})();n=(await e.runGoal(s.nodes,c,s.when,{satisfaction:s.satisfaction,maxSteps:s.maxSteps,extract:s.extract,timeout:s.timeout,signal:s.signal,selectionStrategy:s.selectionStrategy,relaxation:s.relaxation,onStep:s.onStep,onStall:s.onStall})).result;break}default:throw new Error(`[Directive MultiAgent] composePatterns: unknown pattern type "${a.type}"`)}n!==void 0&&(o=typeof n=="string"?n:$t(n));}return n}}function tr(t,e){return Object.entries(t).filter(([,r])=>{let o=r.capabilities??[];return e.every(n=>o.includes(n))}).map(([r])=>r)}function js(t,e,r,o){let{priority:n,select:a}=o??{},s=[],c=0,u=-1;return {when:l=>{let d=e(l);return s=tr(t,d),c++,s.length>0},require:l=>{let d=c!==u&&s.length>0?(u=c,s):tr(t,e(l));if(d.length===0)throw new Error(`[Directive MultiAgent] No agent matches capabilities: ${e(l).join(", ")}`);return {type:"RUN_AGENT",agent:a?a(d,t):d[0],input:r(l)}},priority:n}}var Pr=false;function Gs(t){let{when:e,agent:r,input:o,priority:n,context:a,options:s}=t;s&&!Pr&&(Pr=true,console.warn("[Directive MultiAgent] spawnOnCondition `options` is deprecated. Use top-level `priority` and `context` instead."));let c=n??s?.priority,u=a??s?.context;return {when:e,require:l=>({type:"RUN_AGENT",agent:r,input:o(l),context:u}),priority:c}}function Bs(t){let{agents:e,evaluator:r,maxRounds:o,extract:n,parseJudgement:a,signal:s,timeout:c}=t;if(e.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 agents");if(o!=null&&(o<1||!Number.isFinite(o)))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");return {type:"debate",agents:e,evaluator:r,maxRounds:o,extract:n,parseJudgement:a,signal:s,timeout:c}}async function Ls(t,e,r){return t.runDebate(e.agents,e.evaluator,r,{maxRounds:e.maxRounds,extract:e.extract,parseJudgement:e.parseJudgement,signal:e.signal,timeout:e.timeout})}function Fs(t,e,r){let o,n=0,a=-1;return {when:s=>{let u=s.__derived?.[t];return o=u,n++,e(u)},require:s=>{let c=n!==a?(a=n,o):s.__derived?.[t];return {type:"RUN_AGENT",agent:r.agent,input:r.input(c),context:r.context}},priority:r.priority}}function qs(t,e){let{agent:r,input:o,priority:n,context:a}=e;return {when:t,require:s=>({type:"RUN_AGENT",agent:r,input:o(s,0),context:a}),priority:n}}function nr(t){switch(t.type){case "parallel":return {type:"parallel",agents:t.agents,minSuccess:t.minSuccess,timeout:t.timeout};case "sequential":return {type:"sequential",agents:t.agents,continueOnError:t.continueOnError};case "supervisor":return {type:"supervisor",supervisor:t.supervisor,workers:t.workers,maxRounds:t.maxRounds};case "dag":{let e=Object.create(null);for(let[r,o]of Object.entries(t.nodes))e[r]={agent:o.agent,deps:o.deps,timeout:o.timeout,priority:o.priority};return {type:"dag",nodes:e,timeout:t.timeout,maxConcurrent:t.maxConcurrent,onNodeError:t.onNodeError}}case "reflect":return {type:"reflect",agent:t.agent,evaluator:t.evaluator,maxIterations:t.maxIterations,onExhausted:t.onExhausted,timeout:t.timeout,threshold:typeof t.threshold=="number"?t.threshold:void 0};case "race":return {type:"race",agents:t.agents,timeout:t.timeout,minSuccess:t.minSuccess};case "debate":return {type:"debate",agents:t.agents,evaluator:t.evaluator,maxRounds:t.maxRounds,timeout:t.timeout};case "goal":{let e=Object.create(null);for(let[r,o]of Object.entries(t.nodes))e[r]={agent:o.agent,produces:o.produces,requires:o.requires,allowRerun:o.allowRerun,priority:o.priority};return {type:"goal",nodes:e,maxSteps:t.maxSteps,timeout:t.timeout}}}}var Us=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Hs(t,e){let r=t&&typeof t=="object"&&t.type==="converge"?{...t,type:"goal"}:t;if(!r||typeof r!="object"||!Us.has(r.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${t?.type}"`);let o=Object.create(null);for(let[n,a]of Object.entries(r))n!=="__proto__"&&n!=="constructor"&&n!=="prototype"&&(o[n]=a);return {...o,...e}}function Rt(t){return t.replace(/[^a-zA-Z0-9]/g,"_")}function _r(t){return t.replace(/[\r\n]+/g," ").replace(/[[\](){}|<>"]/g,e=>`#${e.charCodeAt(0)};`)}var zs={square:["[","]"],round:["(",")"],stadium:["([","])"],hexagon:["{{","}}"],circle:["((","))"]};function Xe(t,e,r,o){let n=r==="agent"?o?.agent??"square":o?.virtual??"circle",[a,s]=zs[n];return `${t}${a}${_r(e)}${s}`}function rr(t){let e=new Map;for(let n of t)e.set(n,(e.get(n)??0)+1);let r=new Map,o=[];for(let n of t){let a=Rt(n);if(e.get(n)>1){let s=(r.get(n)??0)+1;r.set(n,s),o.push({id:`${a}_${s}`,label:`${n} #${s}`});}else o.push({id:a,label:n});}return o}function Js(t){let e=new Map,r=new Map;for(let a of Object.keys(t))e.has(a)||e.set(a,0),r.has(a)||r.set(a,[]);for(let[a,s]of Object.entries(t))for(let c of s.deps??[])r.get(c).push(a),e.set(a,(e.get(a)??0)+1);let o=[];for(let[a,s]of e)s===0&&o.push(a);o.sort();let n=[];for(;o.length>0;){let a=o.shift();n.push(a);let s=r.get(a)??[];s.sort();for(let c of s){let u=e.get(c)-1;if(e.set(c,u),u===0){let l=o.findIndex(d=>d>c);l===-1?o.push(c):o.splice(l,0,c);}}}return n}function Ws(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 o=r;if(typeof o.when=="function"||typeof o.transform=="function")return false}if(e.type==="goal"&&e.nodes)for(let r of Object.values(e.nodes)){let o=r;if(typeof o.buildInput=="function"||typeof o.extractOutput=="function")return false}return true}function Ks(t,e){let r=[];return e&&r.push(`%%{init: {'theme': '${e}'}}%%`),r.push(`graph ${t}`),r.join(`
|
|
80
|
+
`)}var Vs=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Xs(t,e){let r=rr(t.agents),o=Xe("__input","Input","virtual",e),n=Xe("__merge","Merge","virtual",e),a=[];for(let s of r){let c=Xe(s.id,s.label,"agent",e);a.push(` ${o} --> ${c}`),a.push(` ${c} --> ${n}`);}return a}function Ys(t,e){return t.agents.length===0?[]:[` ${t.agents.map(n=>({id:Rt(n),label:n})).map(n=>Xe(n.id,n.label,"agent",e)).join(" --> ")}`]}function Qs(t,e){let r=Rt(t.supervisor),o=Xe(r,t.supervisor,"agent",e),n=[];for(let a of t.workers){let s=Rt(a),c=Xe(s,a,"agent",e);n.push(` ${o} -->|delegate| ${c}`),n.push(` ${c} -->|result| ${o}`);}return n}function Zs(t,e){let r=Js(t.nodes),o=[],n=new Set;for(let a of r){let s=t.nodes[a],c=Rt(a),u=s.agent;(!s.deps||s.deps.length===0)&&(n.has(c)||(o.push(` ${Xe(c,u,"agent",e)}`),n.add(c)));let l=[...s.deps??[]].sort();for(let d of l){let p=Rt(d),v=t.nodes[d].agent,R=Xe(p,v,"agent",e),h=Xe(c,u,"agent",e);o.push(` ${R} --> ${h}`),n.add(p),n.add(c);}}return o}function ea(t,e){let r=rr(t.agents),o=Xe("__input","Input","virtual",e),n=Xe("__output","Output","virtual",e),a=[];for(let s of r){let c=Xe(s.id,s.label,"agent",e);a.push(` ${o} --> ${c}`),a.push(` ${c} -.-> ${n}`);}return a}function ta(t,e){let r=Rt(t.agent),o=Rt(t.evaluator),n=Xe(r,t.agent,"agent",e),a=Xe(o,t.evaluator,"agent",e),s=Xe("__output","Output","virtual",e);return [` ${n} --> ${a}`,` ${a} -->|feedback| ${n}`,` ${a} -->|pass| ${s}`]}function na(t,e){let r=Object.entries(t.nodes),o=[],n=new Map;for(let[u,l]of r)for(let d of l.produces)n.set(d,u);let a=new Set,s=new Set,c=[...r].sort(([u],[l])=>u.localeCompare(l));for(let[u,l]of c){let d=Rt(u),p=[...l.requires??[]].sort();p.length===0&&(a.has(d)||(o.push(` ${Xe(d,l.agent,"agent",e)}`),a.add(d)));for(let f of p){let v=n.get(f);if(v&&v!==u){let R=t.nodes[v];if(!R)continue;let h=`${v}->${u}`;if(!s.has(h)){let k=Rt(v),S=Xe(k,R.agent,"agent",e),w=Xe(d,l.agent,"agent",e);o.push(` ${S} -->|${_r(f)}| ${w}`),a.add(k),a.add(d),s.add(h);}}}}for(let[u,l]of c){let d=Rt(u);a.has(d)||(o.push(` ${Xe(d,l.agent,"agent",e)}`),a.add(d));}return o}function ra(t,e){let r=rr(t.agents),o=Rt(t.evaluator),n=Xe(o,t.evaluator,"agent",e),a=Xe("__output","Output","virtual",e),s=[];for(let c of r){let u=Xe(c.id,c.label,"agent",e);s.push(` ${u} --> ${n}`),s.push(` ${n} -->|next round| ${u}`);}return s.push(` ${n} --> ${a}`),s}function oa(t,e){let r=e?.direction??"LR",o=e?.shapes,n=Ws(t)?t:nr(t);if(!Vs.has(n.type))throw new Error(`[Directive] patternToMermaid: unknown pattern type "${n.type}"`);let a=Ks(r,e?.theme),s=[];switch(n.type){case "parallel":s=Xs(n,o);break;case "sequential":s=Ys(n,o);break;case "supervisor":s=Qs(n,o);break;case "dag":s=Zs(n,o);break;case "race":s=ea(n,o);break;case "reflect":s=ta(n,o);break;case "debate":s=ra(n,o);break;case "goal":s=na(n,o);break}return a+`
|
|
81
|
+
`+s.join(`
|
|
82
|
+
`)+`
|
|
83
|
+
`}function kn(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function sa(t={}){let{maxHistory:e=1e3,defaultTtlMs:r=36e5,maxPendingPerAgent:o=100,persistence:n,onDelivery:a,onDeliveryError:s}=t,c=new Map,u=[],l=new Map,d=new Map;function p(h,k){if(k.types&&!k.types.includes(h.type)||k.from&&!(Array.isArray(k.from)?k.from:[k.from]).includes(h.from))return false;if(k.topics){let S=h.topic;if(S&&!k.topics.includes(S))return false}return !(k.priority&&h.priority&&!k.priority.includes(h.priority)||k.custom&&!k.custom(h))}function f(h){return h.ttlMs?Date.now()-h.timestamp>h.ttlMs:false}function v(h){return h.to==="*"?Array.from(c.keys()):Array.isArray(h.to)?h.to:[h.to]}async function R(h){if(f(h))return;let k=v(h),S=[],w=[];for(let x of k){let M=c.get(x)??[];if(M.length===0){let q=d.get(x)??[];for(q.push(h);q.length>o;)q.shift();d.set(x,q);continue}for(let q of M)(!q.filter||p(h,q.filter))&&w.push(Promise.resolve(q.handler(h)).then(()=>{S.push(x);},U=>{s?.(h,U instanceof Error?U:new Error(String(U)));}));}w.length>0&&await Promise.allSettled(w),S.length>0&&a?.(h,S),n&&await n.save(h);}return {publish(h){let k={...h,id:kn(),timestamp:Date.now(),priority:h.priority??"normal",ttlMs:h.ttlMs??r};for(u.push(k),l.set(k.id,k);u.length>e;){let S=u.shift();S&&l.delete(S.id);}return R(k).catch(S=>{let w=S instanceof Error?S:new Error(String(S));s?s(k,w):console.error("[Directive MessageBus] Delivery error:",w);}),k.id},subscribe(h,k,S){let w=kn(),x={id:w,agentId:h,handler:k,filter:S,unsubscribe:()=>{let U=c.get(h)??[],T=U.findIndex($=>$.id===w);T>=0&&U.splice(T,1);}},M=c.get(h)??[];M.push(x),c.set(h,M);let q=d.get(h)??[];d.delete(h);for(let U of q)if(!S||p(U,S)){let T=k(U);T instanceof Promise&&T.catch($=>{let N=$ instanceof Error?$:new Error(String($));s?s(U,N):console.error("[Directive MessageBus] Pending delivery error:",N);});}return x},getHistory(h,k=100){let S=u.filter(w=>!f(w));return h&&(S=S.filter(w=>p(w,h))),S.slice(-k)},getMessage(h){let k=l.get(h);if(!(k&&f(k)))return k},getPending(h){return (d.get(h)??[]).filter(S=>!f(S))},clear(){u.length=0,l.clear(),d.clear();},dispose(){u.length=0,l.clear(),d.clear(),c.clear();}}}function aa(t){let{bus:e,agents:r={},defaultTimeout:o=3e4,onAgentOnline:n,onAgentOffline:a}=t,s=new Map,c=new Map;for(let[l,d]of Object.entries(r))s.set(l,{...d,id:l,status:"offline",lastSeen:Date.now()});function u(l){if(l.type!=="RESPONSE"&&l.type!=="DELEGATION_RESULT")return;let d=l.correlationId??l.replyTo;if(!d)return;let p=c.get(d);p&&(clearTimeout(p.timer),c.delete(d),p.resolve(l));}return {register(l,d){let p=!s.has(l)||s.get(l)?.status==="offline";s.set(l,{...d,id:l,status:"online",lastSeen:Date.now()}),p&&n?.(l);},unregister(l){let d=s.get(l);d&&(d.status="offline",a?.(l));},getAgent(l){return s.get(l)},getAgents(){return Array.from(s.values())},findByCapability(l){return Array.from(s.values()).filter(d=>d.capabilities.includes(l)&&d.status==="online")},send(l,d,p){let f=s.get(l);return f&&(f.lastSeen=Date.now(),f.status="online"),e.publish({...p,from:l,to:d,type:p.type??"CUSTOM"})},async request(l,d,p,f,v=o){return new Promise((R,h)=>{let k=kn(),S=e.subscribe(l,x=>{(x.correlationId===k||x.replyTo===k)&&(S.unsubscribe(),u(x));},{types:["RESPONSE"]}),w=setTimeout(()=>{S.unsubscribe(),c.delete(k),h(new Error(`[Directive Communication] Request timeout after ${v}ms`));},v);c.set(k,{resolve:R,reject:h,timer:w}),e.publish({type:"REQUEST",from:l,to:d,action:p,payload:f,timeout:v,correlationId:k});})},async delegate(l,d,p,f){return new Promise((v,R)=>{let h=kn(),k=e.subscribe(l,w=>{(w.correlationId===h||w.replyTo===h)&&(k.unsubscribe(),u(w));},{types:["DELEGATION_RESULT"]}),S=setTimeout(()=>{k.unsubscribe(),c.delete(h),R(new Error(`[Directive Communication] Delegation timeout after ${o}ms`));},o);c.set(h,{resolve:v,reject:R,timer:S}),e.publish({type:"DELEGATION",from:l,to:d,task:p,context:f,correlationId:h});})},async query(l,d,p,f){return new Promise((v,R)=>{let h=kn(),k=e.subscribe(l,w=>{(w.correlationId===h||w.replyTo===h)&&(k.unsubscribe(),u(w));},{types:["RESPONSE"]}),S=setTimeout(()=>{k.unsubscribe(),c.delete(h),R(new Error(`[Directive Communication] Query timeout after ${o}ms`));},o);c.set(h,{resolve:v,reject:R,timer:S}),e.publish({type:"QUERY",from:l,to:d,question:p,context:f,correlationId:h});})},broadcast(l,d){return e.publish({...d,from:l,to:"*",type:d.type??"INFORM"})},listen(l,d,p){let f=s.get(l);return f&&(f.status="online",f.lastSeen=Date.now(),n?.(l)),e.subscribe(l,d,p)},getBus(){return e},dispose(){for(let[,l]of c)clearTimeout(l.timer);c.clear(),s.clear();}}}function ia(t,e){let r=new Map,o=t.listen(e,async n=>{if(n.type==="REQUEST"){let a=n,s=r.get(a.action),c;if(s)try{let u=await s(a.payload);c={type:"RESPONSE",success:u.success,result:u.result,error:u.error};}catch(u){c={type:"RESPONSE",success:false,error:u instanceof Error?u.message:String(u)};}else c={type:"RESPONSE",success:false,error:`Unknown action: ${a.action}`};t.send(e,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["REQUEST"]});return {onRequest(n,a){r.set(n,a);},offRequest(n){r.delete(n);},dispose(){o.unsubscribe(),r.clear();}}}function ua(t,e){let r=null,o=t.listen(e,async n=>{if(n.type==="DELEGATION"&&r){let a=n,s=Date.now(),c;try{let u=await r(a.task,a.context);c={type:"DELEGATION_RESULT",success:u.success,result:u.result,error:u.error,metrics:u.metrics??{durationMs:Date.now()-s}};}catch(u){c={type:"DELEGATION_RESULT",success:false,error:u instanceof Error?u.message:String(u),metrics:{durationMs:Date.now()-s}};}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;},dispose(){o.unsubscribe(),r=null;}}}function ca(t,e){let r=new Map,o=t.listen(e,n=>{if(n.type==="UPDATE"){let a=n,s=r.get(a.topic)??[];for(let c of s)c(a.content);}},{types:["UPDATE"]});return {subscribe(n,a){let s=new Map;for(let c of n){let u=r.get(c)??[],l=d=>a(c,d);s.set(c,l),u.push(l),r.set(c,u);}return t.broadcast(e,{type:"SUBSCRIBE",topics:n}),()=>{for(let[c,u]of s){let l=r.get(c);if(l){let d=l.indexOf(u);d>=0&&l.splice(d,1),l.length===0&&r.delete(c);}}s.clear(),t.broadcast(e,{type:"UNSUBSCRIBE",topics:n});}},publish(n,a){t.broadcast(e,{type:"UPDATE",topic:n,content:a});},dispose(){o.unsubscribe(),r.clear();}}}var la=[{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,o=false;for(let n=e.length-1;n>=0;n--){let a=e[n];if(!a)continue;let s=Number.parseInt(a,10);o&&(s*=2,s>9&&(s-=9)),r+=s,o=!o;}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 o=Number.parseInt(r,10);return o>=0&&o<=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 da(t){let e=[],r="street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|way|boulevard|blvd|circle|cir|place|pl",o=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=o.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 Nr=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function pa(t){let e=[],r=Nr.join("|"),o=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=o.exec(t))!==null;){let a=n[2],s=n[1];a&&(a.split(/\s+/).length>=2||s&&Nr.some(c=>s.toLowerCase().includes(c)))&&e.push({type:"name",value:a,position:{start:n.index,end:n.index+n[0].length},confidence:.6,context:n[0]});}return e}var $r=1e5,On={name:"regex",async detect(t,e){if(t.length>$r)throw new Error(`[Directive] Input exceeds maximum length of ${$r} characters for PII detection. Truncate input or process in chunks.`);let r=[],o=new Set(e);for(let n of la){if(!o.has(n.type))continue;let a=new RegExp(n.pattern.source,n.pattern.flags),s;for(;(s=a.exec(t))!==null;){let c=s[1]||s[0],u=t.slice(Math.max(0,s.index-20),s.index+c.length+20);n.validate&&!n.validate(c,u)||r.push({type:n.type,value:c,position:{start:s.index,end:s.index+c.length},confidence:n.confidence,context:u});}}return o.has("address")&&r.push(...da(t)),o.has("name")&&r.push(...pa(t)),r}};function _n(t,e,r="typed"){let o=[...e].sort((a,s)=>s.position.start-a.position.start),n=t;for(let a of o){let s;switch(r){case "placeholder":s="[REDACTED]";break;case "typed":s=`[${a.type.toUpperCase()}]`;break;case "masked":s="*".repeat(a.value.length);break;case "hashed":s=`[HASH:${ga(a.value)}]`;break}n=n.slice(0,a.position.start)+s+n.slice(a.position.end);}return n}function ga(t){let o=2166136261;for(let n=0;n<t.length;n++)o^=t.charCodeAt(n),o=Math.imul(o,16777619);return (o>>>0).toString(16).padStart(8,"0")}var jr=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function Gr(t={}){let{types:e=jr,detector:r="regex",redact:o=false,redactionStyle:n="typed",minConfidence:a=.7,onDetected:s,allowlist:c=[],minItemsToBlock:u=1,detectorTimeout:l=5e3}=t,d=r==="regex"?On:r,p=new Set(c.map(v=>v.toLowerCase().trim()));async function f(v,R){if(d===On)return d.detect(v,R);let h;try{return await Promise.race([d.detect(v,R),new Promise((k,S)=>{h=setTimeout(()=>S(new Error(`[Directive] PII detector '${d.name}' timed out after ${l}ms`)),l);})])}finally{clearTimeout(h);}}return async v=>{let h=(await f(v.input,e)).filter(k=>!(k.confidence<a||p.has(k.value.toLowerCase().trim())));if(h.length>0&&s?.(h),h.length>=u){if(o)return {passed:true,transformed:_n(v.input,h,n)};let k={};for(let w of h)k[w.type]=(k[w.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(k).map(([w,x])=>`${w}: ${x}`).join(", ")})`}}return {passed:true}}}function ma(t={}){let e=Gr(t);return async(r,o)=>{let n=typeof r.output=="string"?r.output:JSON.stringify(r.output);return e({input:n,agentName:r.agentName},o)}}async function or(t,e={}){let{types:r=jr,detector:o="regex",minConfidence:n=.7,timeout:a=5e3}=e,s=o==="regex"?On:o,c;if(s===On)c=await s.detect(t,r);else {let d;try{c=await Promise.race([s.detect(t,r),new Promise((p,f)=>{d=setTimeout(()=>f(new Error(`[Directive] PII detector '${s.name}' timed out after ${a}ms`)),a);})]);}finally{clearTimeout(d);}}let u=c.filter(d=>d.confidence>=n),l={};for(let d of u)l[d.type]=(l[d.type]||0)+1;return {detected:u.length>0,items:u,typeCounts:l}}var fa=1e4,ha=10080*60*1e3,ya=6e4,Br="0".repeat(64);function ba(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function va(t){return new TextEncoder().encode(t)}function ka(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function Lr(t){let e=va(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return ka(new Uint8Array(r))}function Fr(t){let{id:e,timestamp:r,eventType:o,previousHash:n,payload:a,actorId:s,sessionId:c}=t;return JSON.stringify({id:e,timestamp:r,eventType:o,previousHash:n,payload:a,actorId:s,sessionId:c})}function wa(t){return JSON.parse(JSON.stringify(t))}async function Ra(t,e){let r=wa(t);async function o(n){if(typeof n=="string"){let a=await or(n,{types:e.types,minConfidence:e.minConfidence??.7});if(a.detected){let s=e.allowlist?a.items.filter(c=>!e.allowlist.includes(c.value.toLowerCase())):a.items;if(s.length>0)return _n(n,s,e.redactionStyle)}return n}if(Array.isArray(n))return Promise.all(n.map(o));if(n&&typeof n=="object"){let a={};for(let[s,c]of Object.entries(n))a[s]=await o(c);return a}return n}for(let[n,a]of Object.entries(r))r[n]=await o(a);return r}function Sa(t={}){let{maxEntries:e=fa,retentionMs:r=ha,exportInterval:o=ya,exporter:n,piiMasking:a,signing:s,sessionId:c,actorId:u,events:l={}}=t,d=[],p=0,f=0,v=0,R=true,h;function k(){return d.length===0?Br:d[d.length-1].hash}async function S(w,x,M){let q={id:ba(),timestamp:Date.now(),eventType:w,previousHash:k(),payload:x,actorId:u,sessionId:c};a?.enabled&&(q.maskedPayload=await Ra(x,a));let U=Fr(q),T=await Lr(U),$={...q,hash:T};for(s&&($.signature=await s.signFn(T)),d.push($);d.length>e;)d.shift(),f++,p>0&&p--;return l.onEntryAdded?.($),$}return n&&o>0&&(h=setInterval(async()=>{try{let w=d.slice(p);w.length>0&&(await n(w),v+=w.length,p=d.length);}catch(w){l.onExportError?.(w instanceof Error?w:new Error(String(w)),d.slice(p));}},o)),{getEntries(w){let x=[...d];if(w){if(w.eventTypes?.length){let M=new Set(w.eventTypes);x=x.filter(q=>M.has(q.eventType));}w.actorId&&(x=x.filter(M=>M.actorId===w.actorId)),w.sessionId&&(x=x.filter(M=>M.sessionId===w.sessionId)),w.since!==void 0&&(x=x.filter(M=>M.timestamp>=w.since)),w.until!==void 0&&(x=x.filter(M=>M.timestamp<=w.until)),w.offset!==void 0&&(x=x.slice(w.offset)),w.limit!==void 0&&(x=x.slice(0,w.limit));}return x},async verifyChain(){if(d.length===0)return {valid:true,entriesVerified:0,verifiedAt:Date.now()};d[0].previousHash;for(let x=0;x<d.length;x++){let M=d[x],q=Fr({id:M.id,timestamp:M.timestamp,eventType:M.eventType,previousHash:M.previousHash,payload:M.payload,actorId:M.actorId,sessionId:M.sessionId}),U=await Lr(q);if(M.hash!==U){R=false;let T={valid:false,entriesVerified:x,brokenAt:{index:x,entryId:M.id,expectedHash:U,actualHash:M.hash},verifiedAt:Date.now()};return l.onChainBroken?.(T),T}if(x>0){let T=d[x-1];if(M.previousHash!==T.hash){R=false;let $={valid:false,entriesVerified:x,brokenAt:{index:x,entryId:M.id,expectedHash:T.hash,actualHash:M.previousHash},verifiedAt:Date.now()};return l.onChainBroken?.($),$}}if(s?.verifyFn&&M.signature&&!await s.verifyFn(M.hash,M.signature)){R=false;let $={valid:false,entriesVerified:x,brokenAt:{index:x,entryId:M.id,expectedHash:"signature-invalid",actualHash:M.signature},verifiedAt:Date.now()};return l.onChainBroken?.($),$}}return R=true,{valid:true,entriesVerified:d.length,verifiedAt:Date.now()}},async export(w){let x=[...d];return w!==void 0&&(x=x.filter(M=>M.timestamp>=w)),n&&x.length>0&&(await n(x),v+=x.length),x},prune(){let w=Date.now()-r,x=d.length;for(;d.length>0&&d[0].timestamp<w;)d.shift(),p>0&&p--;let M=x-d.length;return f+=M,M},getStats(){let w={};for(let x of d)w[x.eventType]=(w[x.eventType]??0)+1;return {totalEntries:d.length,byEventType:w,oldestEntry:d[0]?.timestamp,newestEntry:d[d.length-1]?.timestamp,entriesPruned:f,entriesExported:v,chainIntegrity:R}},async dispose(){if(h&&(clearInterval(h),h=void 0),n)try{let w=d.slice(p);w.length>0&&(await n(w),v+=w.length);}catch(w){l.onExportError?.(w instanceof Error?w:new Error(String(w)),d.slice(p));}},addEntry(w,x){return S(w,x)},createPlugin(){return {name:"audit-trail",onFactSet:(w,x,M)=>{S("fact.set",{key:w,value:x,prev:M}).catch(console.error);},onFactsBatch:w=>{S("fact.batch",{changes:w.map(x=>({key:x.key,value:x.value,prev:x.prev}))}).catch(console.error);},onRequirementCreated:w=>{S("requirement.created",{id:w.id,type:w.requirement.type,payload:w.requirement}).catch(console.error);},onRequirementMet:(w,x)=>{S("requirement.met",{id:w.id,type:w.requirement.type,byResolver:x}).catch(console.error);},onResolverStart:(w,x)=>{S("resolver.start",{resolver:w,requirementId:x.id,requirementType:x.requirement.type}).catch(console.error);},onResolverComplete:(w,x,M)=>{S("resolver.complete",{resolver:w,requirementId:x.id,requirementType:x.requirement.type,duration:M}).catch(console.error);},onResolverError:(w,x,M)=>{S("resolver.error",{resolver:w,requirementId:x.id,requirementType:x.requirement.type,error:M instanceof Error?M.message:String(M)}).catch(console.error);},onError:w=>{S("error.occurred",{source:w.source,sourceId:w.sourceId,message:w.message,context:w.context}).catch(console.error);},onErrorRecovery:(w,x)=>{S("error.recovery",{source:w.source,message:w.message,strategy:x}).catch(console.error);}}}}}function Ta(t){return {onAgentStart:(e,r)=>{t.addEntry("agent.run.start",{agentName:e,input:r});},onAgentComplete:(e,r,o,n)=>{t.addEntry("agent.run.complete",{agentName:e,output:r,tokens:o,cost:n});},onAgentError:(e,r)=>{t.addEntry("agent.run.error",{agentName:e,error:r.message,stack:r.stack});},onToolStart:(e,r,o)=>{t.addEntry("tool.call.start",{toolName:e,toolCallId:r,args:o});},onToolComplete:(e,r,o)=>{t.addEntry("tool.call.complete",{toolName:e,toolCallId:r,result:o});},onToolError:(e,r,o)=>{t.addEntry("tool.call.error",{toolName:e,toolCallId:r,error:o.message});},onApprovalRequested:(e,r,o)=>{t.addEntry("approval.requested",{toolName:e,toolCallId:r,args:o});},onApprovalGranted:(e,r)=>{t.addEntry("approval.granted",{toolName:e,toolCallId:r});},onApprovalDenied:(e,r,o)=>{t.addEntry("approval.denied",{toolName:e,toolCallId:r,reason:o});}}}var wn=[{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"}],sr=[...wn,{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"}],qr=1e5;function ar(t,e=wn){if(t.length>qr)throw new Error(`[Directive] Input exceeds maximum length of ${qr} characters for injection detection. Truncate input or process in chunks.`);let r=[];for(let{pattern:s,name:c,severity:u,category:l}of e){let p=new RegExp(s.source,s.flags).exec(t);p&&r.push({name:c,category:l,severity:u,match:p[0],position:p.index});}let o={low:10,medium:25,high:50,critical:100},n=r.reduce((s,c)=>s+o[c.severity],0),a=Math.min(100,n);return {detected:r.length>0,patterns:r,riskScore:a}}function Ur(t,e=wn){let r=t.replace(/[\u200b\u200c\u200d\u2060\ufeff]/g,""),o=e.map(l=>`(${l.pattern.source})`);if(o.length===0)return r;let n=e.some(l=>l.pattern.flags.includes("g")),a=e.some(l=>l.pattern.flags.includes("i")),s=e.some(l=>l.pattern.flags.includes("m")),c=`${n?"g":""}${a?"i":""}${s?"m":""}`,u=new RegExp(o.join("|"),c||"gi");return r=r.replace(u,"[REDACTED]"),r}function Hr(t={}){let{additionalPatterns:e=[],replacePatterns:r,strictMode:o=false,blockThreshold:n=50,sanitize:a=false,onBlocked:s,ignoreCategories:c=[]}=t,u;if(r?u=r:u=o?[...sr]:[...wn],u=[...u,...e],c.length>0){let l=new Set(c);u=u.filter(d=>!l.has(d.category));}return l=>{let d=ar(l.input,u);if(d.detected&&d.riskScore>=n){if(s?.(l.input,d),a)return {passed:true,transformed:Ur(l.input,u)};let p=d.patterns.sort((f,v)=>{let R={critical:0,high:1,medium:2,low:3};return R[f.severity]-R[v.severity]}).slice(0,3).map(f=>f.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${d.riskScore}%, patterns: ${p})`}}return {passed:true}}}function Ea(t,e){return `[UNTRUSTED_CONTENT source="${e}"]
|
|
84
|
+
${t}
|
|
85
|
+
[/UNTRUSTED_CONTENT]`}function xa(t){let{baseGuardrail:e=Hr({strictMode:true,blockThreshold:25}),additionalPatterns:r=[]}=t,o=/\[UNTRUSTED_CONTENT source="([^"]+)"\]([\s\S]*?)\[\/UNTRUSTED_CONTENT\]/g;return async(n,a)=>{let s=await e(n,a);if(!s.passed)return s;let c=n.input.matchAll(o);for(let u of c){let[,l,d]=u;if(!d)continue;let p=ar(d,[...sr,...r]);if(p.detected&&p.riskScore>=25)return {passed:false,reason:`Untrusted content from "${l}" contains potential injection (risk: ${p.riskScore}%)`}}return {passed:true}}}function Aa(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Ca(t){return new TextEncoder().encode(t)}function Ma(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function zr(t){let e=Ca(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return Ma(new Uint8Array(r))}function Da(t){if(t.length===0)return "";let e=new Set;for(let n of t)for(let a of Object.keys(n))e.add(a);let r=Array.from(e),o=[r.join(",")];for(let n of t){let a=r.map(s=>{let c=n[s];if(c==null)return "";if(typeof c=="object")return JSON.stringify(c).replace(/"/g,'""');let u=String(c);return u.includes(",")||u.includes(`
|
|
86
|
+
`)||u.includes('"')?`"${u.replace(/"/g,'""')}"`:u});o.push(a.join(","));}return o.join(`
|
|
87
|
+
`)}function Pa(){let t=new Map,e=new Map,r=new Map;return {async getSubjectData(o,n){let a=[];for(let[s,c]of t){if(n&&!n.includes(s))continue;let u=c.get(o);u&&u.length>0&&a.push({category:s,records:[...u]});}return a},async deleteSubjectData(o,n){let a=0;for(let[s,c]of t){if(n&&!n.includes(s))continue;let u=c.get(o);u&&(a+=u.length,c.delete(o));}return a},async anonymizeSubjectData(o,n){let a=0;for(let[s,c]of t){if(n&&!n.includes(s))continue;let u=c.get(o);if(u)for(let l of u)l.data={...l.data,_anonymized:true,_anonymizedAt:Date.now()},a++;}return a},async getExpiredData(o,n){let a=[],s=t.get(o);if(s)for(let c of s.values())for(let u of c)u.createdAt<n&&a.push({id:u.id,createdAt:u.createdAt});return a},async deleteByIds(o){let n=new Set(o),a=0;for(let s of t.values())for(let[c,u]of s){let l=u.filter(d=>!n.has(d.id));l.length!==u.length&&(a+=u.length-l.length,l.length===0?s.delete(c):s.set(c,l));}return a},async storeConsent(o){e.set(`${o.subjectId}:${o.purpose}`,o);},async getConsent(o,n){return e.get(`${o}:${n}`)??null},async getConsentsBySubject(o){let n=[];for(let[a,s]of e)a.startsWith(`${o}:`)&&n.push(s);return n},async getConsentsByPurpose(o){let n=[];for(let[a,s]of e)a.endsWith(`:${o}`)&&n.push(s);return n},async storeDeletionCertificate(o){r.set(o.subjectId,o);}}}function Ia(t){let{storage:e,retention:r,exportExpirationMs:o=864e5,events:n={}}=t,a={async grant(s,c,u={}){let l={subjectId:s,purpose:c,granted:true,grantedAt:Date.now(),expiresAt:u.expiresAt,source:u.source,version:u.version};return await e.storeConsent(l),n.onConsentChange?.(l),l},async revoke(s,c){let u=await e.getConsent(s,c);if(!u)return null;let l={...u,granted:false,revokedAt:Date.now()};return await e.storeConsent(l),n.onConsentChange?.(l),l},async check(s,c){let u=await e.getConsent(s,c);return !(!u||!u.granted||u.expiresAt&&u.expiresAt<Date.now())},async getForSubject(s){return e.getConsentsBySubject(s)},async getForPurpose(s){return e.getConsentsByPurpose(s)}};return {async exportData(s){try{let c=await e.getSubjectData(s.subjectId,s.categories),u=[],l=[];for(let{category:v,records:R}of c){l.push(v);for(let h of R)u.push({category:v,...h});}if(s.includeAudit&&e.getAuditEntries){let v=await e.getAuditEntries(s.subjectId);l.push("audit");for(let R of v)u.push({category:"audit",id:R.id,data:R.payload,createdAt:R.timestamp});}let d;s.format==="csv"?d=Da(u.map(v=>({category:v.category,id:v.id,createdAt:new Date(v.createdAt).toISOString(),...v.data}))):d=JSON.stringify({subjectId:s.subjectId,exportedAt:new Date().toISOString(),recordCount:u.length,categories:l,records:u},null,2);let p=await zr(d),f={success:!0,subjectId:s.subjectId,format:s.format,data:d,categories:l,recordCount:u.length,checksum:p,exportedAt:Date.now(),expiresAt:Date.now()+o};return n.onExport?.(f),f}catch(c){return {success:false,subjectId:s.subjectId,format:s.format,data:"",categories:[],recordCount:0,checksum:"",exportedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},async deleteData(s){try{let c=0,u=[];s.anonymize?c=await e.anonymizeSubjectData(s.subjectId,s.categories):c=await e.deleteSubjectData(s.subjectId,s.categories),s.categories?u.push(...s.categories):s.scope==="all"&&u.push("all");let l=JSON.stringify({subjectId:s.subjectId,type:s.anonymize?"anonymization":"hard",scope:s.scope,categories:u,recordCount:c,deletedAt:Date.now(),reason:s.reason}),d={id:Aa(),subjectId:s.subjectId,type:s.anonymize?"anonymization":"hard",scope:s.scope,categories:u,recordCount:c,deletedAt:Date.now(),reason:s.reason,hash:await zr(l)};await e.storeDeletionCertificate(d);let p={success:!0,subjectId:s.subjectId,scope:s.scope,anonymized:s.anonymize??!1,recordsAffected:c,categoriesAffected:u,certificate:d,deletedAt:Date.now()};return n.onDelete?.(p),p}catch(c){return {success:false,subjectId:s.subjectId,scope:s.scope,anonymized:s.anonymize??false,recordsAffected:0,categoriesAffected:[],certificate:{id:"error",subjectId:s.subjectId,type:"hard",scope:s.scope,categories:[],recordCount:0,deletedAt:Date.now(),hash:""},deletedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},consent:a,async enforceRetention(){if(!r)return 0;let s=0,c=Date.now(),u=new Set;if(r.categoryRetention)for(let l of Object.keys(r.categoryRetention))u.add(l);u.add("default");for(let l of u){let d=r.categoryRetention?.[l]??r.defaultRetentionMs,p=c-d,f=await e.getExpiredData(l,p);if(f.length>0){await r.onBeforeDelete?.({category:l,count:f.length});let v=await e.deleteByIds(f.map(R=>R.id));s+=v,r.onAfterDelete?.({category:l,count:v}),n.onRetentionEnforced?.(l,v);}}return s},createConsentGuardrail(s){return async c=>{let l=c.input.match(/user[_-]?id[:\s]*([a-zA-Z0-9-]+)/i)?.[1];return l?await a.check(l,s)?{passed:true}:{passed:false,reason:`No consent for '${s}' from subject ${l}`}:{passed:true}}},async getDeletionCertificate(s){return null}}}function Jt(t,e){if(t.length!==e.length)throw new Error(`Vector dimensions must match: ${t.length} vs ${e.length}`);let r=0,o=0,n=0;for(let a=0;a<t.length;a++){let s=t[a],c=e[a];r+=s*c,o+=s*s,n+=c*c;}return o=Math.sqrt(o),n=Math.sqrt(n),o===0||n===0?0:r/(o*n)}function Oa(t,e,r,o){let n=null;for(let a of e){if(o&&a.agentName&&a.agentName!==o)continue;let s=Jt(t,a.queryEmbedding);s>=r&&(!n||s>n.similarity)&&(n={entry:a,similarity:s});}return n}function Jr(){let t=new Map;function e(r){let o=t.get(r);return o||(o=new Map,t.set(r,o)),o}return {async getEntries(r){return Array.from(e(r).values())},async addEntry(r,o){e(r).set(o.id,o);},async updateEntry(r,o,n){let a=e(r),s=a.get(o);s&&a.set(o,{...s,...n});},async removeEntry(r,o){e(r).delete(o);},async clear(r){t.delete(r);}}}function _a(t){let{embedder:e,similarityThreshold:r=.9,maxCacheSize:o=1e3,ttlMs:n=36e5,namespace:a="default",storage:s=Jr(),onHit:c,onMiss:u,onError:l,perAgent:d=false}=t,p={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},f=0;function v(h){if(p.totalEntries=h.length,p.hitRate=p.totalHits+p.totalMisses>0?p.totalHits/(p.totalHits+p.totalMisses):0,p.avgSimilarityOnHit=p.totalHits>0?f/p.totalHits:0,h.length>0){let k=h.map(S=>S.createdAt);p.oldestEntry=Math.min(...k),p.newestEntry=Math.max(...k);}else p.oldestEntry=null,p.newestEntry=null;}async function R(){let h=await s.getEntries(a),k=Date.now();for(let w of h)k-w.createdAt>n&&await s.removeEntry(a,w.id);let S=await s.getEntries(a);if(S.length>o){let x=S.sort((M,q)=>M.accessedAt-q.accessedAt).slice(0,S.length-o);for(let M of x)await s.removeEntry(a,M.id);}}return {async lookup(h,k){let S=Date.now();try{let w=await e(h),x=await s.getEntries(a),M=Oa(w,x,r,d?k:void 0);return M?(await s.updateEntry(a,M.entry.id,{accessedAt:Date.now(),accessCount:M.entry.accessCount+1}),p.totalHits++,f+=M.similarity,v(x),c?.(M.entry,M.similarity),{hit:!0,entry:M.entry,similarity:M.similarity,latencyMs:Date.now()-S}):(p.totalMisses++,v(x),u?.(h),{hit:!1,latencyMs:Date.now()-S})}catch(w){return p.totalMisses++,l?.(w instanceof Error?w:new Error(String(w))),{hit:false,latencyMs:Date.now()-S}}},async store(h,k,S,w={}){let x=await e(h),M={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:h,queryEmbedding:x,response:k,metadata:w,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:d?S:void 0};await s.addEntry(a,M),await R();let q=await s.getEntries(a);v(q);},async invalidate(h){let k=await s.getEntries(a),S=0;for(let x of k)h(x)&&(await s.removeEntry(a,x.id),S++);let w=await s.getEntries(a);return v(w),S},async clear(){await s.clear(a),p={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},f=0;},getStats(){return {...p}},async export(){return s.getEntries(a)},async import(h){for(let S of h)await s.addEntry(a,S);await R();let k=await s.getEntries(a);v(k);}}}function Na(t){let{cache:e}=t;return async r=>{let o=await e.lookup(r.input,r.agentName);return o.hit&&o.entry?{passed:false,cacheHit:true,reason:`Cache hit (similarity: ${(o.similarity*100).toFixed(1)}%)`,cachedResponse:o.entry.response,similarity:o.similarity}:{passed:true,cacheHit:false}}}function $a(t=128){return async e=>{let r=new Array(t).fill(0);for(let n=0;n<e.length;n++){let a=e.charCodeAt(n);r[n%t]+=a/256;}let o=Math.sqrt(r.reduce((n,a)=>n+a*a,0));if(o>0)for(let n=0;n<t;n++)r[n]/=o;return r}}function ja(t){let{batchSize:e=20,embedBatch:r,maxWaitMs:o=50}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${e}`);let n=[],a=null,s=false;async function c(){if(n.length===0)return;let u=n;n=[],a&&(clearTimeout(a),a=null);try{let l=u.map(p=>p.text),d=await r(l);if(d.length!==u.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${d.length} embeddings for ${u.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let p=0;p<u.length;p++)u[p].resolve(d[p]);}catch(l){let d=l instanceof Error?l:new Error(String(l));for(let p of u)p.reject(d);}}return {async embed(u){if(s)throw new Error("BatchedEmbedder has been disposed");return new Promise((l,d)=>{n.push({text:u,resolve:l,reject:d}),n.length>=e?c():a||(a=setTimeout(c,o));})},async flush(){await c();},dispose(){s=true,a&&(clearTimeout(a),a=null);let u=n;n=[];let l=new Error("BatchedEmbedder disposed");for(let d of u)d.reject(l);}}}function Ga(){let t=new Map,e=null;function r(o){if(e===null)e=o.length;else if(o.length!==e)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${e}, got ${o.length}`)}return {add(o,n){r(n),t.set(o,n);},remove(o){t.delete(o);},search(o,n,a=0){if(e!==null&&o.length!==e)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${e}, got ${o.length}`);let s=[];for(let[c,u]of t){let l=Jt(o,u);l>=a&&s.push({id:c,similarity:l});}return s.sort((c,u)=>u.similarity-c.similarity),s.slice(0,n)},rebuild(){},size(){return t.size},clear(){t.clear(),e=null;},needsRebuild(){return false}}}function Wr(t,e){return 1-Jt(t,e)}function ir(t,e){if(t.length===0)return null;let r=Math.floor(e()*t.length),o=t[r],n=t.filter((d,p)=>p!==r);if(n.length===0)return {id:o.id,embedding:o.embedding,mu:0,left:null,right:null};let a=n.map(d=>({item:d,distance:Wr(o.embedding,d.embedding)}));a.sort((d,p)=>d.distance-p.distance);let s=Math.floor(a.length/2),c=a[s].distance,u=a.slice(0,s).map(d=>d.item),l=a.slice(s).map(d=>d.item);return {id:o.id,embedding:o.embedding,mu:c,left:ir(u,e),right:ir(l,e)}}function Rn(t,e,r,o,n,a){if(!t)return;let s=Wr(e,t.embedding),c=1-s;c>=o&&(n.push({id:t.id,similarity:c}),n.sort((u,l)=>l.similarity-u.similarity),n.length>r&&n.pop(),n.length===r&&(a.value=1-n[n.length-1].similarity)),s<t.mu?(Rn(t.left,e,r,o,n,a),s+a.value>=t.mu&&Rn(t.right,e,r,o,n,a)):(Rn(t.right,e,r,o,n,a),s-a.value<=t.mu&&Rn(t.left,e,r,o,n,a));}function Ba(t={}){let{random:e=Math.random}=t,r=new Map,o=null,n=false,a=null;function s(c){if(a===null)a=c.length;else if(c.length!==a)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${a}, got ${c.length}`)}return {add(c,u){s(u),r.set(c,u),n=true;},remove(c){r.delete(c),n=true;},search(c,u,l=0){if(a!==null&&c.length!==a)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${a}, got ${c.length}`);if(n||!o){let f=[];for(let[v,R]of r){let h=Jt(c,R);h>=l&&f.push({id:v,similarity:h});}return f.sort((v,R)=>R.similarity-v.similarity),f.slice(0,u)}let d=[],p={value:Number.POSITIVE_INFINITY};return Rn(o,c,u,l,d,p),d},rebuild(){let c=Array.from(r.entries()).map(([u,l])=>({id:u,embedding:l}));o=ir(c,e),n=false;},size(){return r.size},clear(){r.clear(),o=null,n=false,a=null;},needsRebuild(){return n}}}function ur(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=[],o="open",n=null,a=null,s=null,c=false;function u(v){if(a){let R=a;a=null,R.resolve({value:v,done:false});}}function l(){if(a){let v=a;a=null,v.resolve({value:void 0,done:true});}}function d(v){if(a){let R=a;a=null,c=false,R.reject(v);}}function p(){if(s){let v=s;s=null,v();}}return {async send(v){if(o!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${o} channel${t.name?` "${t.name}"`:""}`);if(a){u(v);return}if(r.length>=e){if(await new Promise(R=>{s=R;}),o!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${o} channel${t.name?` "${t.name}"`:""}`);if(a){u(v);return}}r.push(v);},end(){o==="open"&&(o="closed",l());},error(v){o==="open"&&(o="error",n=v,d(v),p());},getState(){return o},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(o==="error"&&n)return c=false,Promise.reject(n);if(r.length>0){let v=r.shift();return p(),Promise.resolve({value:v,done:false})}return o==="closed"?(c=false,Promise.resolve({value:void 0,done:true})):new Promise((v,R)=>{a={resolve:v,reject:R};})},return(){return o="closed",r.length=0,c=false,p(),Promise.resolve({value:void 0,done:true})}}}}}function La(t){let e=ur(t),r=ur(t);return {sideA:{send:o=>e.send(o),receive:r,close(){e.end(),r.end();}},sideB:{send:o=>r.send(o),receive:e,close(){e.end(),r.end();}}}}async function Fa(t,e,r){try{for await(let o of t){let n=await r(o);await e.send(n);}e.end();}catch(o){e.error(o instanceof Error?o:new Error(String(o)));}}function qa(...t){return {[Symbol.asyncIterator](){let r=[],o=0,n=null,a=null,s=false,c=false,u=[];function l(d){if(n){let p=n;return n=null,p(d),true}return false}for(let d of t){let p=d[Symbol.asyncIterator]();u.push(p),(async()=>{try{for(;!s;){let f=await p.next();if(f.done||s)break;l({value:f.value,done:!1})||(r.length<1e4?r.push(f.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(f){s||(s=true,a=f instanceof Error?f:new Error(String(f)),l({value:void 0,done:true}));}o++,o>=t.length&&!s&&l({value:void 0,done:true});})();}return {next(){return a?Promise.reject(a):r.length>0?Promise.resolve({value:r.shift(),done:false}):o>=t.length?Promise.resolve({value:void 0,done:true}):new Promise(d=>{n=d;})},return(){s=true,r.length=0;for(let d of u)d.return?.({value:void 0,done:true});if(n){let d=n;n=null,d({value:void 0,done:true});}return Promise.resolve({value:void 0,done:true})}}}}}function Ua(t,e){let r=t.metadata.title??"",o=t.metadata.section??"",n=t.metadata.url??"";return `${r&&o&&n?`[${r} \u2014 ${o}](${n})`:r||t.id}
|
|
88
|
+
${t.content}`}function Ha(t,e){return t.length===0?"":`Relevant documentation context:
|
|
89
|
+
|
|
90
|
+
${t.join(`
|
|
91
|
+
|
|
92
|
+
`)}`}function za(t,e,r){return Math.max(e,Math.min(r,t))}function Ja(t){let{embedder:e,storage:r,topK:o=5,minSimilarity:n=.3,formatChunk:a=Ua,formatContext:s=Ha,onError:c}=t,u=za(n,0,1);typeof process<"u"&&process.env?.NODE_ENV==="development"&&n!==u&&console.warn(`[Directive] RAG: minSimilarity ${n} clamped to ${u} (valid range: 0-1)`);async function l(p,f){let v=Math.max(1,Math.floor(f??o));if(r.search)return r.search(await e(p),v,u);let R=await e(p),k=(await r.getChunks()).map(S=>({...S,similarity:Jt(R,S.embedding)}));return k.sort((S,w)=>w.similarity-S.similarity),k.filter(S=>S.similarity>=u).slice(0,v)}async function d(p,f={}){let{prefix:v,history:R,topK:h,filter:k}=f,S=[];try{S=await l(p,h);}catch(q){c?.(q instanceof Error?q:new Error(String(q)));}k&&(S=S.filter(q=>k(q)));let w=S.map(q=>a(q,q.similarity)),x=s(w,p),M=[];if(v&&M.push(v),x&&M.push(x),R&&R.length>0){let q=R.map(U=>`${U.role.charAt(0).toUpperCase()+U.role.slice(1)}: ${U.content}`).join(`
|
|
93
|
+
|
|
94
|
+
`);M.push(`Previous conversation:
|
|
95
|
+
${q}`);}return M.push(p),M.join(`
|
|
49
96
|
|
|
50
97
|
---
|
|
51
98
|
|
|
52
|
-
`)}return {retrieve:l,enrich:d}}function
|
|
99
|
+
`)}return {retrieve:l,enrich:d}}function Wa(t){let{filePath:e,mapEntry:r,ttlMs:o=0}=t,n=null,a=0;async function s(){if(n&&(o===0||Date.now()-a<o))return n;try{let u=await(await import('fs')).promises.readFile(e,"utf-8"),l=JSON.parse(u);return n=r?l.map(r):l,a=Date.now(),n}catch(c){return typeof process<"u"&&process.env?.NODE_ENV==="development"&&console.warn(`[Directive] JSONFileStore: failed to load ${e}:`,c),n=[],a=Date.now(),n}}return {async getChunks(){return s()},async size(){return (await s()).length},async reload(){n=null,a=0,await s();},dispose(){n=null,a=0;}}}var Kr="AI service temporarily unavailable. Please try again.";function Ka(t={}){let{maxResponseChars:e=Number.POSITIVE_INFINITY,truncationMessage:r=`
|
|
53
100
|
|
|
54
|
-
*[Response truncated]*`,heartbeatIntervalMs:
|
|
101
|
+
*[Response truncated]*`,heartbeatIntervalMs:o=0,errorMessages:n,headers:a}=t;if(e<0)throw new RangeError("maxResponseChars must be non-negative");if(o<0)throw new RangeError("heartbeatIntervalMs must be non-negative");function s(l){if(typeof n=="function")try{return n(l)}catch{return Kr}if(n&&typeof n=="object"){let d=l!=null&&typeof l=="object"&&"code"in l&&typeof l.code=="string"?l.code:void 0;if(d&&d in n)return n[d]}return Kr}function c(l,d,p,f){let v=new TextEncoder;function R(h){return v.encode(`data: ${JSON.stringify(h)}
|
|
55
102
|
|
|
56
|
-
`)}return new ReadableStream({async start(
|
|
103
|
+
`)}return new ReadableStream({async start(h){let k=null,S=null;try{o>0&&(k=setInterval(()=>{try{h.enqueue(R({type:"heartbeat",timestamp:Date.now()}));}catch{}},o)),S=l.stream(d,p,{signal:f?.signal});let w=0,x=!1;for await(let M of S){if(w+=M.length,w>e){h.enqueue(R({type:"truncated",text:r})),h.enqueue(R({type:"done"})),x=!0,S.abort();break}h.enqueue(R({type:"text",text:M}));}try{await S.result;}catch{}x||h.enqueue(R({type:"done"}));}catch(w){let x=s(w);h.enqueue(R({type:"error",message:x}));}finally{k&&clearInterval(k),h.close();}}})}let u={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive",...a};return {toResponse(l,d,p,f){let v=c(l,d,p,f);return new Response(v,{headers:u})},toStream(l,d,p,f){return c(l,d,p,f)}}}var Nn=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;}},Va=new Set([400,401,403,404,422]);function cr(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 o=(t.message.length>1e3?t.message.slice(0,1e3):t.message).match(/(?:failed|error|status|http)[:\s]+(\d{3})\b/i);if(!o)return null;let n=Number(o[1]);return n>=100&&n<=599?n:null}function Vr(t){let e=t;if(typeof e.retryAfter=="number"&&e.retryAfter>0)return e.retryAfter*1e3;let o=(t.message.length>1e3?t.message.slice(0,1e3):t.message).match(/retry[- ]?after[:\s]+(\d+)/i);if(!o)return null;let n=Number(o[1]);return n>0?n*1e3:null}function Xa(t,e,r){let o=e*Math.pow(2,t-1),n=Math.random()*e*.5,a=o+n;return Math.min(a,r)}function Ya(t,e,r,o){if(cr(t)===429){let a=Vr(t);if(a!==null)return Math.min(a,o)}return Xa(e,r,o)}function Qa(t){let e=cr(t);return e===null?true:!Va.has(e)}function Za(t,e={}){let{maxRetries:r=3,baseDelayMs:o=1e3,maxDelayMs:n=3e4,isRetryable:a,onRetry:s}=e;if(!Number.isFinite(r)||r<0)throw new Error("[Directive] withRetry: maxRetries must be a non-negative finite number.");if(!Number.isFinite(o)||o<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,u,l)=>{let d;for(let p=0;p<=r;p++)try{return await t(c,u,l)}catch(f){if(d=f instanceof Error?f:new Error(String(f)),p>=r)break;if(a)try{if(!a(d))break}catch{break}if(!Qa(d))break;let v=Ya(d,p+1,o,n);try{s?.(p+1,d,v);}catch{}let R=l?.signal;if(R?.aborted)break;await new Promise((h,k)=>{let S=setTimeout(()=>{R?.removeEventListener("abort",w),h();},v);function w(){clearTimeout(S),k(R.reason??new Error("Aborted"));}R&&R.addEventListener("abort",w,{once:true});});}throw new Nn(r,d)}}var $n=class extends Error{errors;constructor(e){let r=e.map((o,n)=>` [${n}] ${o.message}`).join(`
|
|
104
|
+
`);super(`[Directive] All ${e.length} providers failed:
|
|
105
|
+
${r}`),this.name="AllProvidersFailedError",this.errors=Object.freeze([...e]),e.length>0&&(this.cause=e[e.length-1]);}};function ei(t,e={}){if(t.length===0)throw new Error("[Directive] withFallback requires at least one runner.");let{shouldFallback:r,onFallback:o}=e;return async(n,a,s)=>{let c=[];for(let u=0;u<t.length;u++)try{return await t[u](n,a,s)}catch(l){let d=l instanceof Error?l:new Error(String(l));if(c.push(d),u<t.length-1){if(r)try{if(!r(d))break}catch{break}try{o?.(u,u+1,d);}catch{}}}throw new $n(c)}}var Sn=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;}},jn=class{entries=[];record(e){this.entries.push({timestamp:Date.now(),cost:e});}getCostInWindow(e){let r=Date.now()-e;this.prune(r);let o=0;for(let n of this.entries)n.timestamp>=r&&(o+=n.cost);return o}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=[];}},Xr={hour:3600*1e3,day:1440*60*1e3};function ti(t,e){return Math.ceil(t.length/e)}function Yr(t,e){return t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function Qr(t,e,r=1){let o=Math.ceil(t*r);return t/1e6*e.inputPerMillion+o/1e6*e.outputPerMillion}function ni(t,e){let{maxCostPerCall:r,budgets:o=[],pricing:n,charsPerToken:a=4,estimatedOutputMultiplier:s=1,onBudgetExceeded:c}=e;if(!Number.isFinite(a)||a<=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(s)||s<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 f of o)if(!Number.isFinite(f.maxCost)||f.maxCost<0)throw new Error(`[Directive] withBudget: budgets[${f.window}].maxCost must be a non-negative finite number.`);let u=new Map;for(let f of o)u.set(f.window,new jn);let l=new jn,d=async(f,v,R)=>{let h=ti(v,a);if(r!=null&&n){let S=Qr(h,n,s);if(S>r){let w={estimated:S,remaining:r,window:"per-call"};try{c?.(w);}catch{}throw new Sn(w)}}for(let S of o){let w=Xr[S.window],M=u.get(S.window).getCostInWindow(w),q=S.maxCost-M,U=Qr(h,S.pricing,s);if(U>q){let T={estimated:U,remaining:Math.max(0,q),window:S.window};try{c?.(T);}catch{}throw new Sn(T)}}let k=await t(f,v,R);if(k.tokenUsage){for(let S of o){let w=u.get(S.window),x=Yr(k.tokenUsage,S.pricing);w.record(x);}if(n&&o.length===0){let S=Yr(k.tokenUsage,n);l.record(S);}}return k};function p(f){let v=u.get(f);if(!v)return 0;let R=Xr[f];return v.getCostInWindow(R)}return d.getSpent=p,d}function ri(t,e){return {match:(r,o)=>o.length<=t,model:e}}function oi(t,e){return {match:r=>r.name===t,model:e}}function si(t,e){return {match:(r,o)=>(t.lastIndex=0,t.test(o)),model:e}}function ai(t,e){let r=Array.isArray(e)?{rules:e}:e,{rules:o,onModelSelected:n}=r;return async(a,s,c)=>{let u=a.model;for(let d of o)try{if(d.match(a,s)){u=d.model;break}}catch{}try{n?.(a.model,u);}catch{}let l=u!==a.model?{...a,model:u}:a;return t(l,s,c)}}function ii(t,e={}){let{maxBatchSize:r=20,maxWaitMs:o=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(o)||o<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 a=[],s=null,c=false,u=null;function l(){s===null&&(s=setTimeout(()=>{s=null,f().catch(()=>{});},o));}function d(){s!==null&&(clearTimeout(s),s=null);}async function p(v){let R=0;async function h(){for(;R<v.length;){let S=R++,w=v[S];try{let x=await t(w.agent,w.input,w.options);w.resolve(x);}catch(x){w.reject(x instanceof Error?x:new Error(String(x)));}}}let k=Array.from({length:Math.min(n,v.length)},()=>h());await Promise.all(k);}async function f(){if(u&&await u,a.length===0)return;d();let v=a.splice(0);u=p(v).finally(()=>{u=null,a.length>0&&l();}),await u;}return {submit(v,R,h){return c?Promise.reject(new Error("[Directive] BatchQueue has been disposed.")):new Promise((k,S)=>{a.push({agent:v,input:R,options:h,resolve:k,reject:S}),a.length>=r?(d(),f().catch(()=>{})):l();})},async flush(){await f();},get pending(){return a.length},async dispose(){c||(c=true,d(),a.length>0&&await f());}}}function Zr(){return {callCount:0,errorCount:0,totalCost:0,avgLatencyMs:0,lastErrorAt:null}}function ui(t,e){return !t||!e?0:t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function ci(t){let{providers:e,defaultProvider:r,constraints:o=[],onProviderSelected:n,errorCooldownMs:a=3e4,preferCheapest:s=false}=t;if(!Number.isFinite(a)||a<0)throw new Error("[Directive] createConstraintRouter: errorCooldownMs must be a non-negative finite number.");let c=new Map;for(let R of e)c.set(R.name,R);if(!c.has(r))throw new Error(`[Directive] Default provider "${r}" not found in providers list.`);let u={totalCost:0,callCount:0,errorCount:0,lastProvider:null,avgLatencyMs:0,providers:Object.create(null)};for(let R of e)u.providers[R.name]=Zr();let l=0,d=[...o].sort((R,h)=>(h.priority??0)-(R.priority??0));function p(){let R=Date.now();for(let k of d)try{if(k.when(u)){let S=c.get(k.provider);if(S)return {provider:S,reason:"constraint"}}}catch{}let h=e.filter(k=>{let S=u.providers[k.name];return S?!(S.lastErrorAt&&R-S.lastErrorAt<a):true});if(s&&h.length>0){let k=[...h].sort((S,w)=>{let x=S.pricing?S.pricing.inputPerMillion+S.pricing.outputPerMillion:1/0,M=w.pricing?w.pricing.inputPerMillion+w.pricing.outputPerMillion:1/0;return x!==M?x-M:S.name===r?-1:w.name===r?1:0});if(k[0]!==c.get(r))return {provider:k[0],reason:"cheapest"}}return h.length>0&&!h.some(k=>k.name===r)?{provider:h[0],reason:"default"}:{provider:c.get(r),reason:"default"}}function f(R,h,k,S,w){let x=u.providers[R]??Zr();if(x.callCount++,u.callCount++,w)x.errorCount++,u.errorCount++,x.lastErrorAt=Date.now();else {let q=ui(k,S);x.totalCost+=q,u.totalCost+=q;}l+=h,u.avgLatencyMs=l/u.callCount;let M=x.callCount>0?(x.avgLatencyMs*(x.callCount-1)+h)/x.callCount:h;x.avgLatencyMs=M,u.providers[R]=x,u.lastProvider=R;}let v=async(R,h,k)=>{let{provider:S,reason:w}=p();try{n?.(S.name,w);}catch{}let x=Date.now();try{let M=await S.runner(R,h,k),q=Date.now()-x;return f(S.name,q,M.tokenUsage,S.pricing),M}catch(M){let q=Date.now()-x,U=M instanceof Error?M:new Error(String(M));throw f(S.name,q,void 0,S.pricing,U),U}};return Object.defineProperty(v,"facts",{get:()=>{let R=Object.create(null);for(let h of Object.keys(u.providers))R[h]={...u.providers[h]};return {...u,providers:R}},enumerable:true}),v}function eo(t){let{transport:e,timeline:r,healthMonitor:o,getSnapshot:n,getBreakpointState:a,onResumeBreakpoint:s,onCancelBreakpoint:c,getScratchpadState:u,getDerivedState:l,onForkFromSnapshot:d,batchSize:p=1,batchIntervalMs:f=50,healthPushIntervalMs:v=0}=t,R=t.maxClients??50,h=`devtools_${crypto.randomUUID()}`,k=new Set,S=[],w=null,x=null;function M(j,be){try{j.send(JSON.stringify(be));}catch{k.delete(j);}}function q(j){let be=JSON.stringify(j),z=[...k];for(let Fe of z)try{Fe.send(be);}catch{k.delete(Fe);}}function U(){S.length!==0&&(S.length===1?q({type:"event",event:S[0]}):q({type:"event_batch",events:S}),S=[]);}let T=r.subscribe(j=>{if(k.size!==0){if(p<=1){q({type:"event",event:j});return}S.push(j),S.length>=p&&U();}});p>1&&f>0&&(w=setInterval(U,f)),v>0&&o&&(x=setInterval(()=>{k.size>0&&q({type:"health",metrics:o.getAllMetrics()});},v));function $(j,be){let z;try{z=JSON.parse(be);}catch{M(j,{type:"error",code:"INVALID_JSON",message:"Could not parse message"});return}if(!z||typeof z!="object"||typeof z.type!="string"){M(j,{type:"error",code:"INVALID_MESSAGE",message:"Missing type field"});return}let Fe=Date.now(),Be=N.get(j)??0;if(Fe-Be<W){M(j,{type:"error",code:"RATE_LIMITED",message:"Too many requests"});return}switch(N.set(j,Fe),z.type){case "ping":M(j,{type:"pong",timestamp:Date.now()});break;case "request_snapshot":n?M(j,{type:"snapshot",data:n()}):M(j,{type:"error",code:"NO_SNAPSHOT",message:"Snapshot provider not configured"});break;case "request_health":o?M(j,{type:"health",metrics:o.getAllMetrics()}):M(j,{type:"error",code:"NO_HEALTH",message:"Health monitor not configured"});break;case "request_events":{let ee=r.getEvents(),G=z.since,St=G!=null?ee.filter(Dt=>Dt.id>G):ee;M(j,{type:"event_batch",events:St});break}case "request_breakpoints":a?M(j,{type:"breakpoints",state:a()}):M(j,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint provider not configured"});break;case "resume_breakpoint":if(s&&typeof z.breakpointId=="string"){let ee=z.modifications?{input:z.modifications.input,skip:z.modifications.skip}:void 0;s(z.breakpointId,ee);}else M(j,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint resume not configured"});break;case "cancel_breakpoint":if(c&&typeof z.breakpointId=="string"){let ee=typeof z.reason=="string"?z.reason:void 0;c(z.breakpointId,ee);}else M(j,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint cancel not configured"});break;case "export_session":M(j,{type:"event_batch",events:r.getEvents()});break;case "import_session":{if(typeof z.data!="string")M(j,{type:"error",code:"INVALID_DATA",message:"Missing data field for import"});else if(z.data.length>10485760)M(j,{type:"error",code:"IMPORT_TOO_LARGE",message:`Import data exceeds ${10485760/1024/1024} MB limit`});else try{r.import(z.data),M(j,{type:"event_batch",events:r.getEvents()});}catch(G){let St=G instanceof Error?G.message:String(G);M(j,{type:"error",code:"IMPORT_FAILED",message:St});}break}case "request_scratchpad":u?M(j,{type:"scratchpad_state",data:u()}):M(j,{type:"error",code:"NO_SCRATCHPAD",message:"Scratchpad provider not configured"});break;case "request_derived":l?M(j,{type:"derived_state",data:l()}):M(j,{type:"error",code:"NO_DERIVED",message:"Derived state provider not configured"});break;case "fork_from_snapshot":{if(d&&typeof z.eventId=="number")try{let ee=d(z.eventId);M(j,{type:"fork_complete",eventId:z.eventId,newEventCount:ee.newEventCount});}catch(ee){let G=ee instanceof Error?ee.message:String(ee);M(j,{type:"error",code:"FORK_FAILED",message:G});}else M(j,{type:"error",code:"NO_FORK",message:"Fork provider not configured"});break}default:M(j,{type:"error",code:"UNKNOWN_COMMAND",message:`Unknown message type: ${String(z.type).slice(0,100)}`});}}let N=new Map,W=50;return e.onConnection((j,be,z)=>{if(k.size>=R){try{let Fe={type:"error",code:"MAX_CLIENTS",message:"Connection limit reached"};j.send(JSON.stringify(Fe));}catch{}j.close();return}k.add(j),M(j,{type:"welcome",version:1,sessionId:h,timestamp:Date.now()}),be(Fe=>$(j,Fe)),z(()=>{k.delete(j),N.delete(j);});}),{get clientCount(){return k.size},broadcast(j){q(j);},pushHealth(){o&&k.size>0&&q({type:"health",metrics:o.getAllMetrics()});},pushBreakpoints(){a&&k.size>0&&q({type:"breakpoints",state:a()});},pushScratchpadUpdate(j,be){k.size>0&&q({type:"scratchpad_update",key:j,value:be});},pushDerivedUpdate(j,be){k.size>0&&q({type:"derived_update",id:j,value:be});},pushTokenStream(j,be,z){k.size>0&&q({type:"token_stream",agentId:j,tokens:be,tokenCount:z});},pushStreamDone(j,be){k.size>0&&q({type:"stream_done",agentId:j,totalTokens:be});},close(){T(),w&&(clearInterval(w),w=null),x&&(clearInterval(x),x=null),U();for(let j of k)try{j.close();}catch{}k.clear(),N.clear(),e.close();}}}async function li(t,e={}){if(!t.timeline)throw new Error("[Directive DevTools] Orchestrator must have debug: true to use DevTools");let r=await to({port:e.port??4040,host:e.host??"localhost"});return eo({transport:r,timeline:t.timeline,healthMonitor:t.healthMonitor,healthPushIntervalMs:e.healthPushIntervalMs??5e3,batchSize:e.batchSize,getSnapshot:t.getAllAgentStates?()=>{let o=t.getAllAgentStates();return {timestamp:Date.now(),agents:o,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?o=>(t.timeline.forkFrom(o),{newEventCount:t.timeline.getEvents().length}):void 0})}async function to(t={}){let e=t.port??4040,r=t.host??"localhost",{WebSocketServer:o}=await import('ws'),n=new o({port:e,host:r,maxPayload:t.maxPayloadBytes??1048576}),a=null;return n.on("connection",s=>{let c=null,u=null,l={send(d){s.readyState===s.OPEN&&s.send(d);},close(){s.close();}};s.on("message",d=>{c&&c(d.toString());}),s.on("close",()=>{u&&u();}),a?.(l,d=>{c=d;},d=>{u=d;});}),{onConnection(s){a=s;},close(){n.close();}}}function Tn(t){return Number.isFinite(t)?t:0}function lr(t){let e=Object.keys(t),r=new Map;for(let[f,v]of Object.entries(t))for(let R of v.produces){if(r.has(R))throw new Error(`[Directive Goal] Fact key "${R}" is produced by both "${r.get(R)}" and "${f}". Each fact key must have exactly one producer.`);r.set(R,f);}let o=[],n=new Map,a=new Map;for(let f of e)n.set(f,0),a.set(f,[]);for(let[f,v]of Object.entries(t))for(let R of v.requires??[]){let h=r.get(R);h&&h!==f&&(o.push({from:h,to:f,factKey:R}),a.get(h).push(f),n.set(f,(n.get(f)??0)+1));}let s=[];for(let[f,v]of n)v===0&&s.push(f);let c=[],u=0;for(;u<s.length;){let f=s[u++];c.push(f);for(let v of a.get(f)??[]){let R=(n.get(v)??1)-1;n.set(v,R),R===0&&s.push(v);}}if(c.length!==e.length){let f=new Set(c),v=e.filter(R=>!f.has(R));throw new Error(`[Directive Goal] Circular dependency detected among agents: ${v.join(", ")}. Review their produces/requires declarations.`)}let l=c.filter(f=>(t[f].requires??[]).every(h=>!r.has(h)||r.get(h)===f)),d=new Set;for(let f of o)d.add(f.from);let p=e.filter(f=>!d.has(f));return {order:c,edges:o,roots:l,leaves:p,producers:r}}function di(t){let e=lr(t);return {order:[...e.order],edges:[...e.edges],roots:[...e.roots],leaves:[...e.leaves],producers:new Map(e.producers)}}function pi(t){let e=[],r=[];Object.keys(t).length===0&&e.push("No agents declared");for(let[n,a]of Object.entries(t))a.produces.length===0&&r.push(`Agent "${n}" has no produces \u2014 it will never contribute`);let o=new Set;for(let n of Object.values(t))for(let a of n.produces)o.add(a);for(let[n,a]of Object.entries(t))for(let s of a.requires??[])o.has(s)||r.push(`Agent "${n}" requires "${s}" which no agent produces \u2014 must be in initial facts`);try{lr(t);}catch(n){e.push(n instanceof Error?n.message:String(n));}return {valid:e.length===0,errors:e,warnings:r}}function gi(t,e=[],r=50){let o=lr(t),n=new Set;for(let d of Object.values(t))for(let p of d.produces)n.add(p);let a=[];for(let d of Object.values(t))for(let p of d.requires??[])n.has(p)||a.push(p);let s=new Set(e),c=new Set,u=[];for(let d=1;d<=r;d++){let p=o.order.filter(v=>c.has(v)?false:(t[v].requires??[]).every(k=>s.has(k)));if(p.length===0)break;let f=[];for(let v of p){c.add(v);for(let R of t[v].produces)s.has(R)||(f.push(R),s.add(R));}u.push({step:d,agents:p,availableFacts:[...s],producedFacts:f});}let l=Object.keys(t).filter(d=>!c.has(d));return {steps:u,unreachableAgents:l,externalDeps:[...new Set(a)],feasible:l.length===0}}function mi(t){let e=t.stepMetrics.map(l=>{let d=Tn(l.satisfaction),p=Tn(l.satisfactionDelta),f=l.nodesRun.join(", "),v=l.factsProduced.length>0?l.factsProduced.join(", "):"none",R=+Tn(d-p).toFixed(3),h=p>=0?`+${p.toFixed(3)}`:p.toFixed(3),k=`Step ${l.step}: Ran ${f}. Produced: ${v}. Satisfaction: ${R} \u2192 ${d.toFixed(3)} (${h}). ${l.tokensConsumed} tokens, ${l.durationMs}ms.`;return {step:l.step,agents:l.nodesRun,factsProduced:l.factsProduced,satisfaction:d,satisfactionDelta:p,durationMs:l.durationMs,tokensConsumed:l.tokensConsumed,description:k}}),r=t.relaxations.map(l=>{let d;switch(l.strategy){case "allow_rerun":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 re-enabled completed nodes for another run.`;break;case "inject_facts":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 injected fact values to unblock dependencies.`;break;case "accept_partial":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 accepted current facts as partial result.`;break;case "alternative_nodes":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 added alternative nodes to the graph.`;break;case "custom":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 ran custom recovery logic.`;break;default:d=`Step ${l.step}: Applied relaxation "${l.label}" (${l.strategy}).`;}return {step:l.step,label:l.label,strategy:l.strategy,description:d}}),o=t.stepMetrics.length>0?Tn(t.stepMetrics[0].satisfaction-t.stepMetrics[0].satisfactionDelta).toFixed(3):"0",n=t.stepMetrics.length>0?Tn(t.stepMetrics[t.stepMetrics.length-1].satisfaction).toFixed(3):"0",a=t.achieved?"Goal achieved":"Goal not achieved",s=t.relaxations.length>0?` ${t.relaxations.length} relaxation(s) applied.`:"",c=t.error?` Error: ${t.error}`:"",u=`${a} in ${t.steps} step(s) (${t.totalTokens.toLocaleString()} tokens, ${t.durationMs}ms). Satisfaction: ${o} \u2192 ${n}.`+s+c;return {achieved:t.achieved,summary:u,steps:e,relaxations:r,totalTokens:t.totalTokens,durationMs:t.durationMs}}function fi(t,e=false){let r=false,o=[],n=[],a=e?(s,...c)=>console.debug(`[MCP Stub] ${s}`,...c):()=>{};return {async connect(){a(`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 o},async callTool(s,c){return a(`Calling tool ${s}`,c),{content:[{type:"text",text:`Stub result for ${s}`}]}},async listResources(){return n},async readResource(s){return a(`Reading resource ${s}`),{contents:[{uri:s,text:`Stub content for ${s}`}]}},async listPrompts(){return []},async getPrompt(s){return {messages:[{role:"user",content:{type:"text",text:`Stub prompt ${s}`}}]}}}}function hi(t,e,r){let o=Date.now(),n=t.get(e);return !n||o>n.resetTime?(t.set(e,{count:1,resetTime:o+6e4}),true):n.count>=r?false:(n.count++,true)}function yi(t){let{servers:e,toolConstraints:r={},resourceMappings:o=[],events:n={},autoConnect:a=false,autoReconnect:s=true,debug:c=false}=t;!t.clientFactory&&(typeof process<"u"&&process.env?.NODE_ENV==="production"?console.warn(`[Directive MCP] WARNING: Using stub MCP client in production!
|
|
57
106
|
The stub client returns mock data and does not connect to real MCP servers.
|
|
58
107
|
Provide a real 'clientFactory' option to connect to actual MCP servers:
|
|
59
108
|
|
|
@@ -62,17 +111,40 @@ Provide a real 'clientFactory' option to connect to actual MCP servers:
|
|
|
62
111
|
const adapter = createMCPAdapter({
|
|
63
112
|
servers: [...],
|
|
64
113
|
clientFactory: (config) => new Client(config),
|
|
65
|
-
});`):c&&console.debug("[Directive MCP] Using stub client for development. Provide 'clientFactory' for production use."));let l=e.clientFactory??(p=>Pn(p,c)),d=e.approvalTimeoutMs??3e5,u={servers:new Map,toolConstraints:new Map(Object.entries(r)),rateLimiters:new Map,pendingApprovals:new Map,approvedRequests:new Set,rejectedRequests:new Set},m=0,f=new Map,R=new Map;function b(p){return new Promise((w,C)=>{if(u.approvedRequests.has(p)){u.approvedRequests.delete(p),u.pendingApprovals.delete(p),n.onApprovalResolved?.(p,true),w();return}if(u.rejectedRequests.has(p)){u.rejectedRequests.delete(p),u.pendingApprovals.delete(p);let M=R.get(p);R.delete(p),n.onApprovalResolved?.(p,false),C(new Error(`[Directive MCP] Tool call request ${p} was rejected${M?`: ${M}`:""}`));return}let x=setTimeout(()=>{f.delete(p),u.pendingApprovals.delete(p),C(new Error(`[Directive MCP] Approval timeout: Request ${p} was not approved or rejected within ${d}ms. Call adapter.approve("${p}") or adapter.reject("${p}") to resolve.`));},d);f.set(p,{resolve:w,reject:C,timeoutId:x});})}function v(p,w,C){let x=f.get(p);x?(clearTimeout(x.timeoutId),f.delete(p),u.pendingApprovals.delete(p),n.onApprovalResolved?.(p,w),w?x.resolve():x.reject(new Error(`[Directive MCP] Tool call request ${p} was rejected${C?`: ${C}`:""}`))):(w?u.approvedRequests.add(p):(u.rejectedRequests.add(p),C&&R.set(p,C)),setTimeout(()=>{u.approvedRequests.delete(p),u.rejectedRequests.delete(p),R.delete(p),u.pendingApprovals.delete(p);},d));}let y=new Map;for(let p of t)u.servers.set(p.name,{config:p,client:null,tools:[],resources:[],status:"disconnected"}),y.set(p.name,{timer:null,attempts:0,maxAttempts:p.retry?.maxAttempts??10,baseDelay:p.retry?.backoffMs??5e3});async function h(p){let w=u.servers.get(p);if(!w)throw new Error(`Unknown MCP server: ${p}`);if(w.status!=="connected"){w.status="connecting";try{let C=l(w.config);await C.connect(),w.client=C,w.status="connected";let x=y.get(p);x&&(x.attempts=0,x.timer&&(clearTimeout(x.timer),x.timer=null)),C.getCapabilities().tools&&(w.tools=await C.listTools()),C.getCapabilities().resources&&(w.resources=await C.listResources()),w.lastSync=Date.now(),n.onConnect?.(p);}catch(C){if(w.status="error",w.error=C instanceof Error?C:new Error(String(C)),n.onError?.(p,w.error),o){let x=y.get(p);if(x&&x.attempts<x.maxAttempts){x.attempts++;let M=Math.min(x.baseDelay*Math.pow(2,x.attempts-1)+Math.random()*1e3,6e4);x.timer=setTimeout(()=>{x.timer=null,h(p).catch(()=>{});},M);}else x&&console.error(`[Directive MCP] Max reconnect attempts (${x.maxAttempts}) reached for server '${p}'. Call adapter.connectServer("${p}") to retry manually.`);}throw w.error}}}async function g(p){let w=y.get(p);w?.timer&&(clearTimeout(w.timer),w.timer=null,w.attempts=0);let C=u.servers.get(p);if(!(!C||!C.client))try{await C.client.disconnect();}finally{C.status="disconnected",C.client=null,n.onDisconnect?.(p);}}async function T(p,w,C,x){let M=u.servers.get(p);if(!M)throw new Error(`[Directive MCP] Unknown server '${p}'. Available servers: ${Array.from(u.servers.keys()).join(", ")||"(none)"}`);if(!M.client)throw new Error(`[Directive MCP] Server '${p}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${p}")' first.`);let L=`${p}.${w}`,A=u.toolConstraints.get(L);if(A){if(A.rateLimit){let O=u.rateLimiters.get(L);if(!In(u.rateLimiters,L,A.rateLimit)){let q=O?.resetTime?new Date(O.resetTime).toISOString():"unknown";throw new Error(`[Directive MCP] Rate limit exceeded for '${L}': ${O?.count??0}/${A.rateLimit} requests per minute. Resets at ${q}.`)}}if(A.maxArgSize){let O=JSON.stringify(C).length;if(O>A.maxArgSize)throw new Error(`Arguments exceed max size (${O} > ${A.maxArgSize})`)}if(A.when&&!await A.when(x,C))throw new Error(`Constraint not satisfied for ${L}`);if(A.requireApproval){let O=`approval-${++m}-${Date.now()}`,q={id:O,server:p,tool:w,args:C,requestedAt:Date.now()};u.pendingApprovals.set(O,q),n.onApprovalRequest?.(q),await b(O);}}n.onToolCall?.(p,w,C);let P=await Promise.race([M.client.callTool(w,C),new Promise((O,q)=>setTimeout(()=>q(new Error(`Tool call timeout: ${L}`)),A?.timeout??3e4))]);return n.onToolResult?.(p,w,P),P}let E={name:"mcp-adapter",onInit:async()=>{a&&await Promise.all(Array.from(u.servers.keys()).map(p=>h(p).catch(w=>console.error(`Failed to connect to ${p}:`,w))));},onDestroy:async()=>{for(let p of y.values())p.timer&&(clearTimeout(p.timer),p.timer=null);for(let[,p]of f)clearTimeout(p.timeoutId),p.reject(new Error("[Directive MCP] Adapter destroyed while awaiting approval"));f.clear(),await Promise.all(Array.from(u.servers.keys()).map(p=>g(p).catch(w=>console.error(`Failed to disconnect from ${p}:`,w))));}};async function S(p){for(let w of s)for(let[C,x]of u.servers)if(x.client){for(let M of x.resources)if(typeof w.pattern=="string"?Nn(M.uri,w.pattern):w.pattern.test(M.uri))try{let A=await x.client.readResource(M.uri),P=A.contents[0]?.text??"",O=w.transform?w.transform(P):P;p[w.factKey]=O,n.onResourceUpdate?.(C,M.uri,A);}catch(A){console.error(`Failed to sync resource ${M.uri}:`,A);}}}return {plugin:E,async connect(){await Promise.all(Array.from(u.servers.keys()).map(h));},connectServer:h,async disconnect(){await Promise.all(Array.from(u.servers.keys()).map(g));},disconnectServer:g,getTools(){let p=new Map;for(let[w,C]of u.servers)p.set(w,C.tools);return p},getResources(){let p=new Map;for(let[w,C]of u.servers)p.set(w,C.resources);return p},async callTool(p,w,C,x){return T(p,w,C,x)},async callToolDirect(p,w,C){let x=u.servers.get(p);if(!x)throw new Error(`[Directive MCP] Unknown server '${p}'. Available servers: ${Array.from(u.servers.keys()).join(", ")||"(none)"}`);if(!x.client)throw new Error(`[Directive MCP] Server '${p}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${p}")' first.`);n.onToolCall?.(p,w,C);let M=await x.client.callTool(w,C);return n.onToolResult?.(p,w,M),M},async readResource(p,w){let C=u.servers.get(p);if(!C)throw new Error(`[Directive MCP] Unknown server '${p}'. Available servers: ${Array.from(u.servers.keys()).join(", ")||"(none)"}`);if(!C.client)throw new Error(`[Directive MCP] Server '${p}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${p}")' first.`);let x=await C.client.readResource(w);return n.onResourceUpdate?.(p,w,x),x},syncResources:S,getServerStatus(p){return u.servers.get(p)},getAllServerStatuses(){return new Map(u.servers)},approve(p){if(!u.pendingApprovals.get(p)&&!f.has(p))throw new Error(`[Directive MCP] No pending approval request with ID '${p}'. Pending requests: ${Array.from(u.pendingApprovals.keys()).join(", ")||"(none)"}`);v(p,true);},reject(p,w){if(!u.pendingApprovals.get(p)&&!f.has(p))throw new Error(`[Directive MCP] No pending approval request with ID '${p}'. Pending requests: ${Array.from(u.pendingApprovals.keys()).join(", ")||"(none)"}`);v(p,false,w);},getPendingApprovals(){return Array.from(u.pendingApprovals.values())},getRejectionReason(p){return R.get(p)}}}var ve=new Map,Dn=200;function Nn(e,t){let r=ve.get(t);if(!r){let s=t.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}$`),ve.size>=Dn){let n=ve.keys().next().value;n!==void 0&&ve.delete(n);}ve.set(t,r);}return r.test(e)}function Gn(e){let t=[];for(let[r,s]of e)for(let n of s)t.push({type:"function",function:{name:`${r}.${n.name}`,description:n.description??`Tool: ${n.name}`,parameters:n.inputSchema}});return t}function Fn(e,t,r){return {type:"MCP_CALL_TOOL",server:e,tool:t,args:r}}function _n(e,t){return {type:"MCP_READ_RESOURCE",server:e,uri:t}}function jn(e,t,r){return {type:"MCP_GET_PROMPT",server:e,prompt:t,args:r}}function $n(e,t){return {type:"MCP_SYNC_RESOURCES",server:e,pattern:t}}function te(e){return adapterUtils.getBridgeFact(e,ae)}function ee(e,t){adapterUtils.setBridgeFact(e,ae,t);}function le(e){return adapterUtils.getBridgeFact(e,ge)}function ie(e,t){adapterUtils.setBridgeFact(e,ge,t);}function st(e){return adapterUtils.getBridgeFact(e,Te)}function De(e,t){adapterUtils.setBridgeFact(e,Te,t);}function ot(e){return adapterUtils.getBridgeFact(e,Ce)}function Ne(e,t){adapterUtils.setBridgeFact(e,Ce,t);}function de(e){return {agent:te(e),approval:le(e),conversation:st(e),toolCalls:ot(e)}}function Hn(e){let t={};for(let[r,s]of Object.entries(e))t[r]={priority:s.priority??0,when:n=>{let a=de(n),o={...n,...a};return s.when(o)},require:n=>{let a=de(n),o={...n,...a};return typeof s.require=="function"?s.require(o):s.require}};return t}function zn(e,t,r){let s={};for(let[n,a]of Object.entries(e))s[n]={requirement:a.requirement,key:a.key,resolve:async(o,c)=>{let i=de(c.facts),d={facts:{...c.facts,...i},runAgent:async(u,m,f)=>t(u,m,Wn(r()),f),signal:c.signal};await a.resolve(o,d);}};return s}function Wn(e){return de(e)}function ue(e,t,r){return typeof e=="function"?{name:`${r}-guardrail-${t}`,fn:e,critical:true}:e}function Vn(e,t){let{backoff:r="exponential",baseDelayMs:s=100,maxDelayMs:n=5e3}=t,a;switch(r){case "exponential":a=s*Math.pow(2,e-1);break;case "linear":a=s*e;break;default:a=s;}return Math.min(a,n)}async function ce(e,t,r){let{retry:s}=e,n=s?.attempts??1,a;for(let o=1;o<=n;o++)try{return await e.fn(t,r)}catch(c){if(a=c instanceof Error?c:new Error(String(c)),o<n){let i=Vn(o,s??{});await new Promise(l=>setTimeout(l,i));}}throw a}function Jn(e,t){let{backoff:r="exponential",baseDelayMs:s=1e3,maxDelayMs:n=3e4}=t,a;switch(r){case "exponential":a=s*Math.pow(2,e-1);break;case "linear":a=s*e;break;default:a=s;}return Math.min(a,n)}async function It(e,t,r,s,n){let a=n?.attempts??1,o=n?.isRetryable??(()=>true),c=n?.onRetry,i;for(let l=1;l<=a;l++)try{return await e(t,r,s)}catch(d){if(i=d instanceof Error?d:new Error(String(d)),l<a&&o(i)){let u=Jn(l,n??{});c?.(l,i,u),await new Promise(m=>setTimeout(m,u));}else break}throw i}function nt(e){let{runner:t,factsSchema:r={},init:s,constraints:n={},resolvers:a={},guardrails:o={},onApprovalRequest:c,autoApproveToolCalls:i=true,maxTokenBudget:l,plugins:d=[],debug:u=false,approvalTimeoutMs:m=3e5,agentRetry:f,hooks:R={},memory:b,circuitBreaker:v}=e;if(!i&&!c)throw new Error(`[Directive] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
|
|
66
|
-
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
67
|
-
- Provide an onApprovalRequest callback to handle approvals programmatically`);let y={facts:{...at.facts,...r},derivations:{},events:{},requirements:{}},h,g,T=Hn(n);l&&(T.__budgetLimit={priority:100,when:A=>te(A).tokenUsage>l,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let E=zn(a,(A,P,O,q)=>h(A,P,O,q),()=>g.facts);E.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async(A,P)=>{let O=te(P.facts);ee(P.facts,{...O,status:"paused"});}};let S=adapterUtils.createCallbackPlugin("openai-agents-callbacks",{}),p=core.createModule("openai-agents-orchestrator",{schema:y,init:A=>{if(ee(A,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),ie(A,{pending:[],approved:[],rejected:[]}),De(A,[]),Ne(A,[]),s){let P=de(A),O={...A,...P};s(O);}},constraints:T,resolvers:E});g=core.createSystem({module:p,plugins:[...d,S],debug:u?{timeTravel:true}:void 0}),g.start();async function w(A,P,O,q,W){return v?v.execute(()=>C(A,P,O,q,W)):C(A,P,O,q,W)}async function C(A,P,O,q,W){let K=Date.now();if(b){let I=b.getContextMessages();if(I.length>0){let D=I.map(_=>`${_.role}: ${_.content}`).join(`
|
|
68
|
-
`);A={...A,instructions:(A.instructions??"")+`
|
|
114
|
+
});`):c&&console.debug("[Directive MCP] Using stub client for development. Provide 'clientFactory' for production use."));let l=t.clientFactory??(T=>fi(T,c)),d=t.approvalTimeoutMs??3e5,p={servers:new Map,toolConstraints:new Map(Object.entries(r)),rateLimiters:new Map,pendingApprovals:new Map,approvedRequests:new Set,rejectedRequests:new Set},f=0,v=new Map,R=new Map;function h(T){return new Promise(($,N)=>{if(p.approvedRequests.has(T)){p.approvedRequests.delete(T),p.pendingApprovals.delete(T),n.onApprovalResolved?.(T,true),$();return}if(p.rejectedRequests.has(T)){p.rejectedRequests.delete(T),p.pendingApprovals.delete(T);let j=R.get(T);R.delete(T),n.onApprovalResolved?.(T,false),N(new Error(`[Directive MCP] Tool call request ${T} was rejected${j?`: ${j}`:""}`));return}let W=setTimeout(()=>{v.delete(T),p.pendingApprovals.delete(T),N(new Error(`[Directive MCP] Approval timeout: Request ${T} was not approved or rejected within ${d}ms. Call adapter.approve("${T}") or adapter.reject("${T}") to resolve.`));},d);v.set(T,{resolve:$,reject:N,timeoutId:W});})}function k(T,$,N){let W=v.get(T);W?(clearTimeout(W.timeoutId),v.delete(T),p.pendingApprovals.delete(T),n.onApprovalResolved?.(T,$),$?W.resolve():W.reject(new Error(`[Directive MCP] Tool call request ${T} was rejected${N?`: ${N}`:""}`))):($?p.approvedRequests.add(T):(p.rejectedRequests.add(T),N&&R.set(T,N)),setTimeout(()=>{p.approvedRequests.delete(T),p.rejectedRequests.delete(T),R.delete(T),p.pendingApprovals.delete(T);},d));}let S=new Map;for(let T of e)p.servers.set(T.name,{config:T,client:null,tools:[],resources:[],status:"disconnected"}),S.set(T.name,{timer:null,attempts:0,maxAttempts:T.retry?.maxAttempts??10,baseDelay:T.retry?.backoffMs??5e3});async function w(T){let $=p.servers.get(T);if(!$)throw new Error(`Unknown MCP server: ${T}`);if($.status!=="connected"){$.status="connecting";try{let N=l($.config);await N.connect(),$.client=N,$.status="connected";let W=S.get(T);W&&(W.attempts=0,W.timer&&(clearTimeout(W.timer),W.timer=null)),N.getCapabilities().tools&&($.tools=await N.listTools()),N.getCapabilities().resources&&($.resources=await N.listResources()),$.lastSync=Date.now(),n.onConnect?.(T);}catch(N){if($.status="error",$.error=N instanceof Error?N:new Error(String(N)),n.onError?.(T,$.error),s){let W=S.get(T);if(W&&W.attempts<W.maxAttempts){W.attempts++;let j=Math.min(W.baseDelay*Math.pow(2,W.attempts-1)+Math.random()*1e3,6e4);W.timer=setTimeout(()=>{W.timer=null,w(T).catch(()=>{});},j);}else W&&console.error(`[Directive MCP] Max reconnect attempts (${W.maxAttempts}) reached for server '${T}'. Call adapter.connectServer("${T}") to retry manually.`);}throw $.error}}}async function x(T){let $=S.get(T);$?.timer&&(clearTimeout($.timer),$.timer=null,$.attempts=0);let N=p.servers.get(T);if(!(!N||!N.client))try{await N.client.disconnect();}finally{N.status="disconnected",N.client=null,n.onDisconnect?.(T);}}async function M(T,$,N,W){let j=p.servers.get(T);if(!j)throw new Error(`[Directive MCP] Unknown server '${T}'. Available servers: ${Array.from(p.servers.keys()).join(", ")||"(none)"}`);if(!j.client)throw new Error(`[Directive MCP] Server '${T}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${T}")' first.`);let be=`${T}.${$}`,z=p.toolConstraints.get(be);if(z){if(z.rateLimit){let Be=p.rateLimiters.get(be);if(!hi(p.rateLimiters,be,z.rateLimit)){let ee=Be?.resetTime?new Date(Be.resetTime).toISOString():"unknown";throw new Error(`[Directive MCP] Rate limit exceeded for '${be}': ${Be?.count??0}/${z.rateLimit} requests per minute. Resets at ${ee}.`)}}if(z.maxArgSize){let Be=JSON.stringify(N).length;if(Be>z.maxArgSize)throw new Error(`Arguments exceed max size (${Be} > ${z.maxArgSize})`)}if(z.when&&!await z.when(W,N))throw new Error(`Constraint not satisfied for ${be}`);if(z.requireApproval){let Be=`approval-${++f}-${Date.now()}`,ee={id:Be,server:T,tool:$,args:N,requestedAt:Date.now()};p.pendingApprovals.set(Be,ee),n.onApprovalRequest?.(ee),await h(Be);}}n.onToolCall?.(T,$,N);let Fe=await Promise.race([j.client.callTool($,N),new Promise((Be,ee)=>setTimeout(()=>ee(new Error(`Tool call timeout: ${be}`)),z?.timeout??3e4))]);return n.onToolResult?.(T,$,Fe),Fe}let q={name:"mcp-adapter",onInit:async()=>{a&&await Promise.all(Array.from(p.servers.keys()).map(T=>w(T).catch($=>console.error(`Failed to connect to ${T}:`,$))));},onDestroy:async()=>{for(let T of S.values())T.timer&&(clearTimeout(T.timer),T.timer=null);for(let[,T]of v)clearTimeout(T.timeoutId),T.reject(new Error("[Directive MCP] Adapter destroyed while awaiting approval"));v.clear(),await Promise.all(Array.from(p.servers.keys()).map(T=>x(T).catch($=>console.error(`Failed to disconnect from ${T}:`,$))));}};async function U(T){for(let $ of o)for(let[N,W]of p.servers)if(W.client){for(let j of W.resources)if(typeof $.pattern=="string"?vi(j.uri,$.pattern):$.pattern.test(j.uri))try{let z=await W.client.readResource(j.uri),Fe=z.contents[0]?.text??"",Be=$.transform?$.transform(Fe):Fe;T[$.factKey]=Be,n.onResourceUpdate?.(N,j.uri,z);}catch(z){console.error(`Failed to sync resource ${j.uri}:`,z);}}}return {plugin:q,async connect(){await Promise.all(Array.from(p.servers.keys()).map(w));},connectServer:w,async disconnect(){await Promise.all(Array.from(p.servers.keys()).map(x));},disconnectServer:x,getTools(){let T=new Map;for(let[$,N]of p.servers)T.set($,N.tools);return T},getResources(){let T=new Map;for(let[$,N]of p.servers)T.set($,N.resources);return T},async callTool(T,$,N,W){return M(T,$,N,W)},async callToolDirect(T,$,N){let W=p.servers.get(T);if(!W)throw new Error(`[Directive MCP] Unknown server '${T}'. Available servers: ${Array.from(p.servers.keys()).join(", ")||"(none)"}`);if(!W.client)throw new Error(`[Directive MCP] Server '${T}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${T}")' first.`);n.onToolCall?.(T,$,N);let j=await W.client.callTool($,N);return n.onToolResult?.(T,$,j),j},async readResource(T,$){let N=p.servers.get(T);if(!N)throw new Error(`[Directive MCP] Unknown server '${T}'. Available servers: ${Array.from(p.servers.keys()).join(", ")||"(none)"}`);if(!N.client)throw new Error(`[Directive MCP] Server '${T}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${T}")' first.`);let W=await N.client.readResource($);return n.onResourceUpdate?.(T,$,W),W},syncResources:U,getServerStatus(T){return p.servers.get(T)},getAllServerStatuses(){return new Map(p.servers)},approve(T){if(!p.pendingApprovals.get(T)&&!v.has(T))throw new Error(`[Directive MCP] No pending approval request with ID '${T}'. Pending requests: ${Array.from(p.pendingApprovals.keys()).join(", ")||"(none)"}`);k(T,true);},reject(T,$){if(!p.pendingApprovals.get(T)&&!v.has(T))throw new Error(`[Directive MCP] No pending approval request with ID '${T}'. Pending requests: ${Array.from(p.pendingApprovals.keys()).join(", ")||"(none)"}`);k(T,false,$);},getPendingApprovals(){return Array.from(p.pendingApprovals.values())},getRejectionReason(T){return R.get(T)}}}var En=new Map,bi=200;function vi(t,e){let r=En.get(e);if(!r){let o=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(`^${o}$`),En.size>=bi){let n=En.keys().next().value;n!==void 0&&En.delete(n);}En.set(e,r);}return r.test(t)}function ki(t){let e=[];for(let[r,o]of t)for(let n of o)e.push({type:"function",function:{name:`${r}.${n.name}`,description:n.description??`Tool: ${n.name}`,parameters:n.inputSchema}});return e}function wi(t,e,r){return {type:"MCP_CALL_TOOL",server:t,tool:e,args:r}}function Ri(t,e){return {type:"MCP_READ_RESOURCE",server:t,uri:e}}function Si(t,e,r){return {type:"MCP_GET_PROMPT",server:t,prompt:e,args:r}}function Ti(t,e){return {type:"MCP_SYNC_RESOURCES",server:t,pattern:e}}var dr=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,o)=>{let n={resolve:r,reject:o};this.queue.push(n),e&&e.addEventListener("abort",()=>{let a=this.queue.indexOf(n);a!==-1&&(this.queue.splice(a,1),o(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 Ei(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 xi(t,e){let r=0,o=0;for(let[n,a]of Object.entries(t)){let c=e[n]?.weight??1,u=Number.isFinite(a.score)?a.score:0;r+=u*c,o+=c;}return o===0?0:r/o}function Ai(t,e){let r=0,o=0;for(let[n,a]of Object.entries(t)){let c=e[n]?.weight??1,u=Number.isFinite(a)?a:0;r+=u*c,o+=c;}return o===0?0:r/o}var no={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 Ci(t){return {name:"cost",fn:e=>{let r=Date.now(),o=e.result.totalTokens,n=o/t.maxTokensPerRun,a;return n<=.5?a=1:n>=2?a=0:a=1-(n-.5)/1.5,{score:a,passed:o<=t.maxTokensPerRun,reason:`${o} tokens (budget: ${t.maxTokensPerRun})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function Mi(t){return {name:"latency",fn:e=>{let r=Date.now(),o=e.runDurationMs,n=o/t.maxMs,a;return n<=.5?a=1:n>=2?a=0:a=1-(n-.5)/1.5,{score:a,passed:o<=t.maxMs,reason:`${Math.round(o)}ms (max: ${t.maxMs}ms)`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function Di(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,a=t.minLength??0,s=t.maxLength??1/0,c=n>=a&&n<=s,u;return c?u=1:n<a?u=a>0?Math.max(0,n/a):0:u=s>0&&s!==1/0?Math.max(0,1-(n-s)/s):0,{score:u,passed:c,reason:`${n} chars (range: ${a}-${s===1/0?"\u221E":s})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function Pi(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 o=no[r];o&&e.push(...o);}}else {e=[];for(let r of Object.values(no))e.push(...r);}return {name:"safety",fn:r=>{let o=Date.now(),n=String(r.result.output),a=[];for(let c of e)c.test(n)&&a.push(c.source);return {score:a.length===0?1:0,passed:a.length===0,reason:a.length===0?"No unsafe patterns detected":`Matched patterns: ${a.join(", ")}`,durationMs:Date.now()-o}},threshold:1,weight:2}}function Ii(t){return {name:"structure",fn:e=>{let r=Date.now(),o=e.result.output;if(t.type==="json")try{let a=typeof o=="string"?JSON.parse(o):o;if(!a||typeof a!="object"||Array.isArray(a))return {score:0,passed:!1,reason:"Output is not a valid JSON object",durationMs:Date.now()-r};if(t.requiredKeys&&a&&typeof a=="object"){let s=t.requiredKeys.filter(c=>!Object.hasOwn(a,c));if(s.length>0)return {score:1-s.length/t.requiredKeys.length,passed:!1,reason:`Missing keys: ${s.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(o);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 Oi(t){let e=t.promptTemplate??`You are evaluating an AI agent's output. Score it from 0.0 to 1.0.
|
|
69
115
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
116
|
+
Input: {{input}}
|
|
117
|
+
Expected: {{expected}}
|
|
118
|
+
Actual Output: {{output}}
|
|
119
|
+
|
|
120
|
+
Respond with ONLY a JSON object: {"score": <number>, "reason": "<brief explanation>"}`;return {name:"judge",fn:async r=>{let o=Date.now(),n=e.replaceAll("{{input}}",r.testCase.input).replaceAll("{{expected}}",r.testCase.expected??"N/A").replaceAll("{{output}}",String(r.result.output)),a=t.timeoutMs??3e4,s=new AbortController,c=setTimeout(()=>s.abort(),a),u=t.signal?AbortSignal.any([t.signal,s.signal]):s.signal;try{let d=(await t.runner(t.judge,n,{signal:u})).output;if(typeof d!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-o};let p=JSON.parse(d),f=Math.max(0,Math.min(1,p.score));return {score:f,passed:f>=.5,reason:p.reason??`Judge score: ${f}`,durationMs:Date.now()-o}}catch(l){return {score:0,passed:false,reason:`Judge error: ${l instanceof Error?l.message:String(l)}`,durationMs:Date.now()-o}}finally{clearTimeout(c);}},threshold:.5,weight:1.5}}function _i(t={}){let e=t.mode??"contains",r=t.caseInsensitive??true;return {name:"match",fn:o=>{let n=Date.now(),a=o.testCase.expected;if(!a)return {score:1,passed:true,reason:"No expected output to match",durationMs:Date.now()-n};let s=String(o.result.output),c=r?s.toLowerCase():s,u=r?a.toLowerCase():a,l=false;if(e==="exact")l=c===u;else if(e==="contains")l=c.includes(u);else if(e==="regex"){if(a.length>500)return {score:0,passed:false,reason:`Regex pattern too long (${a.length} chars, max 500)`,durationMs:Date.now()-n};if(/([+*}])\)([+*{])/.test(a)||/([+*}])\]([+*{])/.test(a))return {score:0,passed:false,reason:"Pattern contains dangerous nested quantifiers",durationMs:Date.now()-n};try{l=new RegExp(a,r?"i":"").test(s);}catch{return {score:0,passed:false,reason:`Invalid regex pattern: ${a}`,durationMs:Date.now()-n}}}return {score:l?1:0,passed:l,reason:l?`Output ${e} match`:`Output does not ${e} match expected`,durationMs:Date.now()-n}},threshold:1,weight:1}}var Ni=`You are evaluating an AI agent's output for faithfulness to the provided context.
|
|
121
|
+
|
|
122
|
+
Faithfulness measures whether all claims in the output are supported by the context.
|
|
123
|
+
Score 1.0 if every claim is grounded in the context.
|
|
124
|
+
Score 0.0 if the output contains fabricated information not in the context.
|
|
125
|
+
|
|
126
|
+
Context: {{context}}
|
|
127
|
+
Agent Output: {{output}}
|
|
128
|
+
|
|
129
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function $i(t){return {name:"faithfulness",fn:async e=>{let r=Date.now(),o=e.testCase.context??e.testCase.expected;if(!o)return {score:1,passed:true,reason:"No context provided for faithfulness check",durationMs:Date.now()-r};let n=Ni.replaceAll("{{context}}",o).replaceAll("{{output}}",String(e.result.output)),a=t.timeoutMs??3e4,s=new AbortController,c=setTimeout(()=>s.abort(),a),u=t.signal?AbortSignal.any([t.signal,s.signal]):s.signal;try{let d=(await t.runner(t.judge,n,{signal:u})).output;if(typeof d!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let p=JSON.parse(d),f=Math.max(0,Math.min(1,p.score));return {score:f,passed:f>=.7,reason:p.reason??`Faithfulness score: ${f}`,durationMs:Date.now()-r}}catch(l){return {score:0,passed:false,reason:`Faithfulness eval error: ${l instanceof Error?l.message:String(l)}`,durationMs:Date.now()-r}}finally{clearTimeout(c);}},threshold:.7,weight:1.5}}var ji=`You are evaluating an AI agent's output for relevance to the user's question.
|
|
130
|
+
|
|
131
|
+
Relevance measures whether the output directly addresses the question asked.
|
|
132
|
+
Score 1.0 if the output fully and directly answers the question.
|
|
133
|
+
Score 0.0 if the output is completely off-topic or irrelevant.
|
|
134
|
+
|
|
135
|
+
User Question: {{input}}
|
|
136
|
+
Agent Output: {{output}}
|
|
137
|
+
|
|
138
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function Gi(t){return {name:"relevance",fn:async e=>{let r=Date.now(),o=ji.replaceAll("{{input}}",e.testCase.input).replaceAll("{{output}}",String(e.result.output)),n=t.timeoutMs??3e4,a=new AbortController,s=setTimeout(()=>a.abort(),n),c=t.signal?AbortSignal.any([t.signal,a.signal]):a.signal;try{let l=(await t.runner(t.judge,o,{signal:c})).output;if(typeof l!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let d=JSON.parse(l),p=Math.max(0,Math.min(1,d.score));return {score:p,passed:p>=.7,reason:d.reason??`Relevance score: ${p}`,durationMs:Date.now()-r}}catch(u){return {score:0,passed:false,reason:`Relevance eval error: ${u instanceof Error?u.message:String(u)}`,durationMs:Date.now()-r}}finally{clearTimeout(s);}},threshold:.7,weight:1.5}}var Bi=`You are evaluating an AI agent's output for coherence and logical consistency.
|
|
139
|
+
|
|
140
|
+
Coherence measures whether the output is well-structured, logically consistent,
|
|
141
|
+
and flows naturally. Check for contradictions, non-sequiturs, and clarity.
|
|
142
|
+
Score 1.0 if the output is perfectly coherent and well-organized.
|
|
143
|
+
Score 0.0 if the output is incoherent, contradictory, or disorganized.
|
|
144
|
+
|
|
145
|
+
Agent Output: {{output}}
|
|
146
|
+
|
|
147
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function Li(t){return {name:"coherence",fn:async e=>{let r=Date.now(),o=Bi.replaceAll("{{output}}",String(e.result.output)),n=t.timeoutMs??3e4,a=new AbortController,s=setTimeout(()=>a.abort(),n),c=t.signal?AbortSignal.any([t.signal,a.signal]):a.signal;try{let l=(await t.runner(t.judge,o,{signal:c})).output;if(typeof l!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let d=JSON.parse(l),p=Math.max(0,Math.min(1,d.score));return {score:p,passed:p>=.7,reason:d.reason??`Coherence score: ${p}`,durationMs:Date.now()-r}}catch(u){return {score:0,passed:false,reason:`Coherence eval error: ${u instanceof Error?u.message:String(u)}`,durationMs:Date.now()-r}}finally{clearTimeout(s);}},threshold:.7,weight:1}}function Fi(t){let{agents:e,runner:r,dataset:o,runOptions:n,concurrency:a=5,timeline:s,onCaseComplete:c,onAgentComplete:u,signal:l}=t;if(o.length===0)throw new Error("[Directive Evals] Dataset must contain at least one test case");let d=new dr(a),p={};for(let[R,h]of Object.entries(t.criteria))p[R]=Ei(R,h);async function f(R,h){try{await d.acquire(l);}catch{let k={};for(let S of Object.keys(p))k[S]={score:0,passed:false,reason:"Evaluation aborted",durationMs:0};return {testCase:h,agentName:R.name,runResult:{output:"",messages:[],toolCalls:[],totalTokens:0},scores:k,overallScore:0,allPassed:false,runDurationMs:0}}try{let k=Date.now(),S;try{S=await r(R,h.input,{...n,signal:l});}catch($){let N={output:"",messages:[],toolCalls:[],totalTokens:0},W={};for(let j of Object.keys(p))W[j]={score:0,passed:!1,reason:`Agent error: ${$ instanceof Error?`${$.name}: ${$.message}`:String($)}`,durationMs:0};return {testCase:h,agentName:R.name,runResult:N,scores:W,overallScore:0,allPassed:!1,runDurationMs:Date.now()-k}}let w=Date.now()-k,x={agent:R,testCase:h,result:S,runDurationMs:w},M={};for(let[$,N]of Object.entries(p))try{let W=await N.fn(x);M[$]={...W,passed:W.score>=(N.threshold??.5)};}catch(W){M[$]={score:0,passed:!1,reason:`Criterion error: ${W instanceof Error?`${W.name}: ${W.message}`:String(W)}`,durationMs:0};}let q=xi(M,p),U=Object.values(M).every($=>$.passed),T={testCase:h,agentName:R.name,runResult:S,scores:M,overallScore:q,allPassed:U,runDurationMs:w};return s&&s.record({type:"agent_complete",timestamp:Date.now(),agentId:`eval:${R.name}`,outputLength:String(S.output).length,totalTokens:S.totalTokens,durationMs:w,snapshotId:null}),c?.(T),T}finally{d.release();}}function v(R,h){let k={},S={},w=0,x=0,M=0;for(let N of Object.keys(p))k[N]=0,S[N]=0;for(let N of h){w+=N.runResult.totalTokens,x+=N.runDurationMs,N.allPassed&&M++;for(let[W,j]of Object.entries(N.scores))k[W]=(k[W]??0)+j.score,j.passed&&(S[W]=(S[W]??0)+1);}let q=h.length,U={},T={};for(let N of Object.keys(p))U[N]=q>0?(k[N]??0)/q:0,T[N]=q>0?(S[N]??0)/q:0;let $=q>0?Ai(U,p):0;return {agentName:R,criterionAverages:U,criterionPassRates:T,overallScore:$,passRate:q>0?M/q:0,totalTokens:w,avgLatencyMs:q>0?x/q:0,totalCases:q,passedCases:M}}return {getAgents:()=>[...e],getCriteria:()=>Object.keys(p),getDataset:()=>[...o],async run(){let R=Date.now(),h=[],k={},S=e.map(async M=>{if(l?.aborted)return;let q=await Promise.all(o.map(U=>f(M,U)));return {agent:M,agentResults:q}}),w=await Promise.all(S);for(let M of w){if(!M)continue;h.push(...M.agentResults);let q=v(M.agent.name,M.agentResults);k[M.agent.name]=q,u?.(q);}let x=Date.now();return {summary:k,details:h,durationMs:x-R,totalTokens:h.reduce((M,q)=>M+q.runResult.totalTokens,0),startedAt:R,completedAt:x}},async runAgent(R){let h=e.find(w=>w.name===R);if(!h)throw new Error(`[Directive Evals] Unknown agent: "${R}"`);let k=await Promise.all(o.map(w=>f(h,w))),S=v(h.name,k);return u?.(S),S}}}function qi(t,e){let r=[];for(let[o,n]of Object.entries(t.summary))if(e.minScore!==void 0&&n.overallScore<e.minScore&&r.push(`Agent "${o}" score ${n.overallScore.toFixed(3)} < minimum ${e.minScore}`),e.minPassRate!==void 0&&n.passRate<e.minPassRate&&r.push(`Agent "${o}" pass rate ${n.passRate.toFixed(3)} < minimum ${e.minPassRate}`),e.failOn)for(let a of e.failOn){let s=n.criterionPassRates[a];s!==void 0&&s<1&&r.push(`Agent "${o}" criterion "${a}" pass rate ${s.toFixed(3)} < 1.0 (failOn)`);}if(r.length>0)throw new Error(`[Directive Evals] Assertion failed:
|
|
148
|
+
${r.join(`
|
|
149
|
+
`)}`)}var lt={UNSET:0,OK:1,ERROR:2},Gn=class{constructor(e,r,o,n,a,s){this.name=e;this.spanId=r;this.traceId=o;this.parentSpanId=n;this.onEnd=s;if(this.startTime=Date.now(),a)for(let[c,u]of Object.entries(a))this.attributes[c]=u;}attributes=Object.create(null);spanEvents=[];status={code:lt.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}}},pr=class{spans=[];startSpan(e,r){let o=r?.spanId??`fallback-${crypto.randomUUID()}`,n=r?.traceId??`fallback-${crypto.randomUUID()}`,a=r?.parentSpanId;return new Gn(e,o,n,a,r?.attributes,s=>{this.spans.push(s.toSpanData());})}clear(){this.spans.length=0;}};function Ui(t){let e=t.spanPrefix??"directive.ai",r=t.instrumentEvents,o=t.spanTtlMs??3e5,n=!t.tracer,a=n?new pr:null,s=t.tracer??a,c=0;function u(){return `${Date.now().toString(36)}-${(c++).toString(36)}`}function l(){return `${Date.now().toString(36)}-${crypto.randomUUID().slice(0,8)}`}let d=new Map,p=0,f=new Map,v=[],R=null,h=false;function k(D){return r?r.has(D):true}function S(D,I){return `${D}:${I}:${p++}`}function w(D,I){let re=`${D}:${I}`,Re=f.get(re);if(Re){for(let Me=Re.length-1;Me>=0;Me--){let dt=d.get(Re[Me]);if(dt)return {key:Re[Me],entry:dt}}f.delete(re);}return null}function x(D,I,re,Re){let Me=`${D}:${I}`;Re.indexKey=Me,d.set(re,Re);let dt=f.get(Me);dt?dt.push(re):f.set(Me,[re]);}function M(D){let I=d.get(D);d.delete(D);let re=I?.indexKey;if(re){let Re=f.get(re);if(Re){let Me=Re.indexOf(D);Me!==-1&&Re.splice(Me,1),Re.length===0&&f.delete(re);}}}function q(){let D=Date.now();if(d.size<1e4){for(let[re,Re]of d)D-Re.startTime>o&&(N(Re,"directive.stale",true),j(Re,{code:lt.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),T(Re),M(re),true);return void 0}for(let[I,re]of d)D-re.startTime>o&&(N(re,"directive.stale",true),j(re,{code:lt.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),T(re),M(I));}function U(D,I,re){let Re=u(),Me=re?.traceId??l(),dt=re?.spanId,vt;n?vt=s.startSpan(D,{attributes:I,spanId:Re,traceId:Me,parentSpanId:dt}):vt=s.startSpan(D,{attributes:I});let Pt={span:vt,spanId:Re,traceId:Me,startTime:Date.now()};return n||(Pt.shadow={span:vt,name:D,spanId:Re,traceId:Me,parentSpanId:dt,attributes:{...I},events:[],status:{code:lt.UNSET},startTime:Pt.startTime}),{span:vt,entry:Pt}}function T(D){D.span.end(),t.onSpanEnd&&t.onSpanEnd($(D));}function $(D){if(D.span instanceof Gn)return D.span.toSpanData();if(D.shadow){let re=Date.now();return {name:D.shadow.name,traceId:D.shadow.traceId,spanId:D.shadow.spanId,parentSpanId:D.shadow.parentSpanId,attributes:{...D.shadow.attributes},events:[...D.shadow.events],status:{...D.shadow.status},startTime:D.shadow.startTime,endTime:re,durationMs:re-D.shadow.startTime}}let I=Date.now();return {name:"unknown",traceId:D.traceId,spanId:D.spanId,attributes:{},events:[],status:{code:lt.UNSET},startTime:D.startTime,endTime:I,durationMs:I-D.startTime}}function N(D,I,re){D.span.setAttribute(I,re),D.shadow&&(D.shadow.attributes[I]=re);}function W(D,I,re){D.span.addEvent(I,re),D.shadow&&D.shadow.events.push({name:I,attributes:re,timestamp:Date.now()});}function j(D,I){D.span.setStatus(I),D.shadow&&(D.shadow.status={...I});}function be(D){if(k(D.type))switch(q(),D.type){case "agent_start":z(D);break;case "agent_complete":Fe(D);break;case "agent_error":Be(D);break;case "guardrail_check":ee(D);break;case "constraint_evaluate":G(D);break;case "resolver_start":St(D);break;case "resolver_complete":Dt(D);break;case "resolver_error":J(D);break;case "pattern_start":Wt(D);break;case "pattern_complete":it(D);break;default:if(D.agentId){let I=w("agent",D.agentId);I&&W(I.entry,D.type,{"event.id":D.id,"event.timestamp":D.timestamp});}}}function z(D){let I=v.length>0?v[v.length-1]:null,{entry:re}=U(`${e}.agent.run`,{"directive.service":t.serviceName,"directive.agent.name":D.agentId,"directive.agent.input_length":D.inputLength,"gen_ai.operation.name":"agent.run","gen_ai.agent.name":D.agentId},I),Re=S("agent",D.agentId);x("agent",D.agentId,Re,re);}function Fe(D){let I=w("agent",D.agentId);I&&(N(I.entry,"directive.agent.output_length",D.outputLength),N(I.entry,"directive.agent.total_tokens",D.totalTokens),N(I.entry,"directive.agent.duration_ms",D.durationMs),N(I.entry,"gen_ai.usage.total_tokens",D.totalTokens),j(I.entry,{code:lt.OK}),T(I.entry),M(I.key));}function Be(D){let I=w("agent",D.agentId);I&&(N(I.entry,"directive.agent.duration_ms",D.durationMs),N(I.entry,"directive.agent.error",D.errorMessage),N(I.entry,"gen_ai.error.message",D.errorMessage),j(I.entry,{code:lt.ERROR,message:D.errorMessage}),T(I.entry),M(I.key));}function ee(D){let I=D.agentId?w("agent",D.agentId)?.entry??null:null,{entry:re}=U(`${e}.guardrail.check`,{"directive.service":t.serviceName,"directive.guardrail.name":D.guardrailName,"directive.guardrail.type":D.guardrailType,"directive.guardrail.passed":D.passed,"directive.guardrail.duration_ms":D.durationMs,"gen_ai.guardrail.name":D.guardrailName,"gen_ai.guardrail.type":D.guardrailType,"gen_ai.guardrail.passed":D.passed},I);D.reason&&N(re,"directive.guardrail.reason",D.reason),j(re,{code:D.passed?lt.OK:lt.ERROR,message:D.passed?void 0:D.reason}),T(re);}function G(D){if(D.agentId){let re=w("agent",D.agentId);if(re){W(re.entry,"constraint_evaluate",{"directive.constraint.id":D.constraintId,"directive.constraint.fired":D.fired});return}}let{entry:I}=U(`${e}.constraint.evaluate`,{"directive.service":t.serviceName,"directive.constraint.id":D.constraintId,"directive.constraint.fired":D.fired},null);j(I,{code:lt.OK}),T(I);}function St(D){let re=(D.agentId?w("agent",D.agentId)?.entry??null:null)??(v.length>0?v[v.length-1]:null),{entry:Re}=U(`${e}.resolver.execute`,{"directive.service":t.serviceName,"directive.resolver.id":D.resolverId,"directive.resolver.requirement_type":D.requirementType},re),Me=S("resolver",D.resolverId);x("resolver",D.resolverId,Me,Re);}function Dt(D){let I=w("resolver",D.resolverId);I&&(N(I.entry,"directive.resolver.duration_ms",D.durationMs),j(I.entry,{code:lt.OK}),T(I.entry),M(I.key));}function J(D){let I=w("resolver",D.resolverId);I&&(N(I.entry,"directive.resolver.duration_ms",D.durationMs),N(I.entry,"directive.resolver.error",D.errorMessage),j(I.entry,{code:lt.ERROR,message:D.errorMessage}),T(I.entry),M(I.key));}function Wt(D){let I=v.length>0?v[v.length-1]:null,{entry:re}=U(`${e}.pattern.${D.patternType}`,{"directive.service":t.serviceName,"directive.pattern.id":D.patternId,"directive.pattern.type":D.patternType},I),Re=S("pattern",D.patternId);x("pattern",D.patternId,Re,re),v.length<100&&v.push(re);}function it(D){let I=w("pattern",D.patternId);if(I){N(I.entry,"directive.pattern.duration_ms",D.durationMs),D.error?(N(I.entry,"directive.pattern.error",D.error),j(I.entry,{code:lt.ERROR,message:D.error})):j(I.entry,{code:lt.OK}),T(I.entry),M(I.key);let re=v.indexOf(I.entry);re!==-1&&v.splice(re,1);}}return {attach(D){if(R&&R!==D)throw new Error("[Directive OTEL] Plugin already attached to a different timeline. Create a new plugin instance.");R=D;let I=D.subscribe(be),re=setInterval(q,Math.min(o,6e4));return ()=>{I(),clearInterval(re),R=null;for(let[Re,Me]of d)N(Me,"directive.detached",true),j(Me,{code:lt.ERROR,message:"Plugin detached while span was active"}),T(Me);d.clear(),f.clear(),v.length=0;}},getSpans(){return a?[...a.spans]:(h||(h=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(){a?.clear();},getTracer(){return s},getActiveSpanCount(){return d.size}}}Object.defineProperty(exports,"CircuitBreakerOpenError",{enumerable:true,get:function(){return plugins.CircuitBreakerOpenError}});Object.defineProperty(exports,"createAgentMetrics",{enumerable:true,get:function(){return plugins.createAgentMetrics}});Object.defineProperty(exports,"createCircuitBreaker",{enumerable:true,get:function(){return plugins.createCircuitBreaker}});Object.defineProperty(exports,"createOTLPExporter",{enumerable:true,get:function(){return plugins.createOTLPExporter}});Object.defineProperty(exports,"createObservability",{enumerable:true,get:function(){return plugins.createObservability}});exports.AllProvidersFailedError=$n;exports.BudgetExceededError=Sn;exports.DEFAULT_INJECTION_PATTERNS=wn;exports.GuardrailError=ct;exports.InMemoryCheckpointStore=Wn;exports.MAX_BREAKPOINT_HISTORY=Mt;exports.OtelStatusCode=lt;exports.ReflectionExhaustedError=sn;exports.RetryExhaustedError=Nn;exports.STRICT_INJECTION_PATTERNS=sr;exports.Semaphore=zt;exports.StructuredOutputError=In;exports.adaptOutputGuardrail=rs;exports.aggregateTokens=Ns;exports.allReadyStrategy=xs;exports.byAgentName=oi;exports.byInputLength=ri;exports.byPattern=si;exports.capabilityRoute=js;exports.collectOutputs=_s;exports.collectTokens=os;exports.combineStreamingGuardrails=ns;exports.composePatterns=$s;exports.concatResults=Is;exports.connectDevTools=li;exports.convertToolsForLLM=ki;exports.costEfficientStrategy=Cs;exports.createAgentAuditHandlers=Ta;exports.createAgentMemory=Ko;exports.createAgentNetwork=aa;exports.createAgentOrchestrator=Po;exports.createAuditTrail=Sa;exports.createBatchQueue=ii;exports.createBatchedEmbedder=ja;exports.createBidirectionalStream=La;exports.createBreakpointId=yn;exports.createBruteForceIndex=Ga;exports.createCheckpointId=Ct;exports.createCompliance=Ia;exports.createConstraintRouter=ci;exports.createContentFilterGuardrail=Bo;exports.createDebugTimeline=dn;exports.createDebugTimelinePlugin=pn;exports.createDelegator=ua;exports.createDevToolsServer=eo;exports.createEnhancedPIIGuardrail=Gr;exports.createEvalSuite=Fi;exports.createHealthMonitor=Zn;exports.createHybridStrategy=Wo;exports.createInMemoryComplianceStorage=Pa;exports.createInMemoryStorage=Jr;exports.createInitialBreakpointState=on;exports.createJSONFileStore=Wa;exports.createKeyPointsSummarizer=Xo;exports.createLLMSummarizer=Yo;exports.createLengthGuardrail=Go;exports.createLengthStreamingGuardrail=es;exports.createMCPAdapter=yi;exports.createMessageBus=sa;exports.createModerationGuardrail=Oo;exports.createMultiAgentOrchestrator=Or;exports.createOtelPlugin=Ui;exports.createOutputPIIGuardrail=ma;exports.createOutputSchemaGuardrail=$o;exports.createOutputTypeGuardrail=jo;exports.createPIIGuardrail=Io;exports.createPatternStreamingGuardrail=ts;exports.createPromptInjectionGuardrail=Hr;exports.createPubSub=ca;exports.createRAGEnricher=Ja;exports.createRateLimitGuardrail=_o;exports.createResponder=ia;exports.createRunner=zo;exports.createSSETransport=Ka;exports.createSemanticCache=_a;exports.createSemanticCacheGuardrail=Na;exports.createSlidingWindowStrategy=Mr;exports.createStreamChannel=ur;exports.createStreamingRunner=Qo;exports.createTestEmbedder=$a;exports.createTokenBasedStrategy=Dr;exports.createToolGuardrail=No;exports.createToxicityStreamingGuardrail=Zo;exports.createTruncationSummarizer=Vo;exports.createUntrustedContentGuardrail=xa;exports.createVPTreeIndex=Ba;exports.createWsTransport=to;exports.dag=Rs;exports.debate=Bs;exports.derivedConstraint=Fs;exports.detectPII=or;exports.detectPromptInjection=ar;exports.diffCheckpoints=hs;exports.estimateCost=qo;exports.evalAssert=qi;exports.evalCoherence=Li;exports.evalCost=Ci;exports.evalFaithfulness=$i;exports.evalJudge=Oi;exports.evalLatency=Mi;exports.evalMatch=_i;exports.evalOutputLength=Di;exports.evalRelevance=Gi;exports.evalSafety=Pi;exports.evalStructure=Ii;exports.explainGoal=mi;exports.extractJsonFromOutput=Sr;exports.filterStream=as;exports.findAgentsByCapability=tr;exports.forkFromCheckpoint=ys;exports.getCheckpointProgress=ms;exports.getDependencyGraph=di;exports.getPatternStep=an;exports.goal=Es;exports.hasPendingApprovals=Fo;exports.highestImpactStrategy=As;exports.isAgentRunning=Lo;exports.isGuardrailError=vo;exports.mapStream=is;exports.markUntrustedContent=Ea;exports.matchBreakpoint=bn;exports.mcpCallTool=wi;exports.mcpGetPrompt=Si;exports.mcpReadResource=Ri;exports.mcpSyncResources=Ti;exports.mergeStreams=qa;exports.mergeTaggedStreams=Yn;exports.parallel=vs;exports.parseHttpStatus=cr;exports.parseRetryAfter=Vr;exports.patternFromJSON=Hs;exports.patternToJSON=nr;exports.patternToMermaid=oa;exports.pickBestResult=Os;exports.pipe=Jo;exports.pipeThrough=Fa;exports.planGoal=gi;exports.race=Ts;exports.redactPII=_n;exports.reflect=Ss;exports.runAgentRequirement=Ps;exports.runDebate=Ls;exports.sanitizeInjection=Ur;exports.selectAgent=Ds;exports.sequential=ks;exports.spawnOnCondition=Gs;exports.spawnPool=qs;exports.supervisor=ws;exports.tapStream=ss;exports.validateBaseURL=Ho;exports.validateCheckpoint=rn;exports.validateGoal=pi;exports.withBudget=ni;exports.withFallback=ei;exports.withModelSelection=ai;exports.withReflection=ls;exports.withRetry=Za;exports.withStructuredOutput=hn;//# sourceMappingURL=index.cjs.map
|
|
78
150
|
//# sourceMappingURL=index.cjs.map
|