@directive-run/ai 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anthropic.cjs.map +1 -1
- package/dist/anthropic.d.cts +1 -1
- package/dist/anthropic.d.ts +1 -1
- package/dist/anthropic.js.map +1 -1
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts +1 -1
- package/dist/gemini.d.ts +1 -1
- package/dist/gemini.js.map +1 -1
- package/dist/index.cjs +49 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -6
- package/dist/index.d.ts +17 -6
- package/dist/index.js +49 -49
- package/dist/index.js.map +1 -1
- package/dist/{multi-agent-orchestrator-CxL8ycw_.d.cts → multi-agent-orchestrator-D-WuP4jP.d.ts} +176 -101
- package/dist/{multi-agent-orchestrator-uMp8bLfV.d.ts → multi-agent-orchestrator-YFs28JsF.d.cts} +176 -101
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.d.cts +1 -1
- package/dist/ollama.d.ts +1 -1
- package/dist/ollama.js.map +1 -1
- package/dist/openai.cjs.map +1 -1
- package/dist/openai.d.cts +1 -1
- package/dist/openai.d.ts +1 -1
- package/dist/openai.js.map +1 -1
- package/dist/testing.cjs +24 -24
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +32 -7
- package/dist/testing.d.ts +32 -7
- package/dist/testing.js +24 -24
- package/dist/testing.js.map +1 -1
- package/dist/{types-Co4BzMiH.d.cts → types-D5veI9su.d.cts} +96 -13
- package/dist/{types-Co4BzMiH.d.ts → types-D5veI9su.d.ts} +96 -13
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
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??"")+`
|
|
1
|
+
'use strict';var core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils'),plugins=require('@directive-run/core/plugins');var lt=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 Xn(t){return t instanceof lt}var en="__agent",Ut="__approval",Nn="__conversation",$n="__toolCalls",Ht="__breakpoints";var pt="__scratchpad",gn={facts:{[en]:core.t.object(),[Ut]:core.t.object(),[Nn]:core.t.array(),[$n]:core.t.array(),[Ht]:core.t.object()},derivations:{},events:{},requirements:{}};var Ao=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","task_start","task_complete","task_error","task_progress","goal_step"]),Tr=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function mn(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(m){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.error("[Directive DebugTimeline] Listener threw:",m instanceof Error?m.message:m);}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 m of Object.keys(u))if(Tr.has(m))throw new Error(`[Directive DebugTimeline] Blocked key in import: ${m}`);let l=u;if(!Array.isArray(l.events))throw new Error("[Directive DebugTimeline] Missing events array");let d=[];for(let m of l.events){if(!m||typeof m!="object")continue;for(let v of Object.keys(m))if(Tr.has(v))throw new Error(`[Directive DebugTimeline] Blocked key in event: ${v}`);let h=m;typeof h.id=="number"&&typeof h.type=="string"&&Ao.has(h.type)&&typeof h.timestamp=="number"&&d.push(m);}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 fn(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 At(t,e,r){return typeof t=="function"?{name:`${r}-guardrail-${e}`,fn:t,critical:true}:t}function xo(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 Er(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 xt(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=xo(c,n??{});await Er(l,o);}}return {passed:false,reason:`Guardrail "${t.name}" failed after ${a} attempt(s): ${s.message}`}}function Co(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 hn(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 m=true;try{m=s(u);}catch{break}if(!m)break;let h=Co(l,n??{});try{c?.(l,u,h);}catch{}await Er(h,o?.signal);}else break}throw u}function ot(t){return adapterUtils.getBridgeFact(t,en)}function st(t,e){adapterUtils.setBridgeFact(t,en,e);}function kt(t){return adapterUtils.getBridgeFact(t,Ut)}function mt(t,e){adapterUtils.setBridgeFact(t,Ut,e);}function tn(t){return adapterUtils.getBridgeFact(t,Nn)}function Ct(t,e){adapterUtils.setBridgeFact(t,Nn,e);}function nn(t){return adapterUtils.getBridgeFact(t,$n)}function Mt(t,e){adapterUtils.setBridgeFact(t,$n,e);}function yt(t){return adapterUtils.getBridgeFact(t,Ht)}function bt(t,e){adapterUtils.setBridgeFact(t,Ht,e);}function gt(t){return {agent:ot(t),approval:kt(t),conversation:tn(t),toolCalls:nn(t)}}function rn(t){let e=Object.create(null);for(let[r,o]of Object.entries(t))e[r]={priority:o.priority??0,when:n=>{let a=gt(n),s={...n,...a};return o.when(s)},require:n=>{let a=gt(n),s={...n,...a};return typeof o.require=="function"?o.require(s):o.require}};return e}function Ar(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=gt(c.facts),d={facts:{...c.facts,...u},runAgent:async(m,h,v)=>e(m,h,gt(r()),v),signal:c.signal};await a.resolve(s,d);}};return o}var Dt=200,Mo=0;function vn(){return `bp_${Date.now().toString(36)}_${(++Mo).toString(36)}`}function kn(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 xr=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Pt(){let t=Date.now().toString(36),e=crypto.randomUUID().slice(0,8);return `ckpt_${t}_${e}`}function sn(t){if(!t||typeof t!="object")return false;for(let o of Object.keys(t))if(xr.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(xr.has(o))return false;let r=e.localState;return !(r.type!=="single"&&r.type!=="multi"||e.orchestratorType!=="single"&&e.orchestratorType!=="multi")}var Yn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(e){if(this.maxCheckpoints=e?.maxCheckpoints??100,this.retentionMs=e?.retentionMs??Number.POSITIVE_INFINITY,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(!sn(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}};function wn(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 m=e[d];if(l){l=false;continue}if(m==="\\"){l=true;continue}if(m==='"'){u=!u;continue}if(!u){if(m===a)c++;else if(m===s&&(c--,c===0)){let h=e.slice(n,d+1);try{return JSON.parse(h)}catch{let v=h.replace(/"(?:[^"\\]|\\.)*"/g,R=>R.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"));return JSON.parse(v)}}}}throw new Error("[Directive] No valid JSON found in output")}function Do(t){return t?t.issues&&t.issues.length>0?t.issues.map(e=>e.message).join("; "):t.message??"Validation failed":"Validation failed"}function Rn(t,e){let{schema:r,maxRetries:o=2,extractJson:n=wn,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
2
|
|
|
3
|
-
IMPORTANT: Respond with valid JSON matching `+s+". Output ONLY the JSON object, no additional text or markdown formatting."},
|
|
3
|
+
IMPORTANT: Respond with valid JSON matching `+s+". Output ONLY the JSON object, no additional text or markdown formatting."},m,h;for(let v=0;v<=o;v++){let R=v===0?u:`${u}
|
|
4
4
|
|
|
5
|
-
Your previous response was not valid JSON. Error: ${
|
|
6
|
-
Please try again with valid JSON only.`,
|
|
5
|
+
Your previous response was not valid JSON. Error: ${h}
|
|
6
|
+
Please try again with valid JSON only.`,y=await t(d,R,l);m=y;let T=typeof y.output=="string"?y.output:JSON.stringify(y.output);try{let w=n(T),k=r.safeParse(w);if(k.success)return {...y,output:k.data};h=Do(k.error);}catch(w){h=w instanceof Error?w.message:String(w);}}throw new jn(`[Directive] Failed to get valid structured output after ${o+1} attempts: ${h}`,m)}}var jn=class extends Error{lastResult;constructor(e,r){super(e),this.name="StructuredOutputError",this.lastResult=r;}};var Cr=500,Mr=200;function jo(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:m,plugins:h=[],debug:v=false,approvalTimeoutMs:R=3e5,agentRetry:y,hooks:T={},memory:w,circuitBreaker:k,selfHealing:C,outputSchema:I,maxSchemaRetries:z,checkpointStore:_,breakpoints:E,onBreakpoint:G,breakpointTimeoutMs:j}=t,W=typeof v=="object"?true:!!v,ge=5e3;if(W&&C&&!k&&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
7
|
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
8
|
-
- Provide an onApprovalRequest callback to handle approvals programmatically`);function
|
|
9
|
-
`);
|
|
8
|
+
- Provide an onApprovalRequest callback to handle approvals programmatically`);function $e(D,U){try{T[D]?.(U);}catch(ve){W&&console.debug(`[Directive] hooks.${D} threw:`,ve);}}let F=["agent","approval","conversation","toolCalls"];for(let D of Object.keys(r))if(F.includes(D))throw new Error(`[Directive] Facts schema key "${D}" conflicts with orchestrator state. Reserved keys: ${F.join(", ")}. Rename your fact to avoid the collision.`);let ue={facts:{...gn.facts,...r,__budgetWarningFired:core.t.boolean()},derivations:{},events:{},requirements:{}},ae,P,Ee=rn(n);l&&(Ee.__budgetLimit={priority:100,when:D=>ot(D).tokenUsage>l,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let Ce=Ar(a,(D,U,ve,me)=>ae(D,U,ve,me),()=>P.facts);Ce.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async(D,U)=>{let ve=ot(U.facts);st(U.facts,{...ve,status:"paused"});}};let Te=null;W&&(Te=mn({goToSnapshot:D=>{try{P.debug?.goTo?.(D);}catch{}}}));let ft=adapterUtils.createCallbackPlugin("directive-ai-callbacks",{}),Bt=core.createModule("directive-ai-orchestrator",{schema:ue,init:D=>{if(st(D,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(D,{pending:[],approved:[],rejected:[]}),Ct(D,[]),Mt(D,[]),bt(D,{pending:[],resolved:[],cancelled:[]}),adapterUtils.setBridgeFact(D,"__budgetWarningFired",false),o){let U=gt(D),ve={...D,...U};o(ve);}},constraints:Ee,resolvers:Ce}),Lt=[...h,ft];W&&Te&&Lt.push(fn(Te,()=>{try{return P.debug?.currentIndex??null}catch{return null}})),P=core.createSystem({module:Bt,plugins:Lt,debug:W?{timeTravel:true}:void 0}),P.start();async function S(D,U,ve,me,K){if(k)try{return await k.execute(()=>H(D,U,ve,me,K))}catch(Re){if(C){if(C.fallbackRunners)for(let _e of C.fallbackRunners)try{let He={originalAgent:D.name,reroutedTo:"fallback-runner",reason:Re instanceof Error?Re.message:String(Re),timestamp:Date.now()};try{C.onReroute?.(He);}catch{}return Te&&Te.record({type:"reroute",timestamp:Date.now(),agentId:D.name,snapshotId:null,from:D.name,to:"fallback-runner",reason:Re instanceof Error?Re.message:String(Re)}),await _e(D,U,me)}catch{}if(C.fallbackAgent)try{let _e={originalAgent:D.name,reroutedTo:C.fallbackAgent.name,reason:Re instanceof Error?Re.message:String(Re),timestamp:Date.now()};try{C.onReroute?.(_e);}catch{}return Te&&Te.record({type:"reroute",timestamp:Date.now(),agentId:D.name,snapshotId:null,from:D.name,to:C.fallbackAgent.name,reason:Re instanceof Error?Re.message:String(Re)}),await e(C.fallbackAgent,U,me)}catch{}if(C.degradation==="fallback-response"&&C.fallbackResponse!==void 0)return {output:C.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}throw Re}return H(D,U,ve,me,K)}async function H(D,U,ve,me,K){let Re=Date.now();if(w){let de=w.getContextMessages();if(de.length>0){let fe=de.map(Ue=>`${Ue.role}: ${Ue.content}`).join(`
|
|
9
|
+
`);D={...D,instructions:(D.instructions??"")+`
|
|
10
10
|
|
|
11
11
|
Conversation context:
|
|
12
|
-
`+
|
|
12
|
+
`+fe};}}if(E&&E.length>0){let de={agentId:D.name,agentName:D.name,input:U,state:P.facts.$store.toObject(),breakpointType:"pre_input_guardrails"},fe=await at("pre_input_guardrails",de,K?.signal??me?.signal);if(fe?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};fe?.input&&(U=fe.input);}let _e=K?.inputGuardrails!==void 0?K.inputGuardrails:s.input??[],He=K?.outputGuardrails!==void 0?K.outputGuardrails:s.output??[],it=_e.map((de,fe)=>At(de,fe,"input"));for(let de of it){let{name:fe}=de,Ue={agentName:D.name,input:U,facts:P.facts.$store.toObject()},xe=Date.now(),Oe=await xt(de,{input:U,agentName:D.name},Ue);if($e("onGuardrailCheck",{agentId:D.name,guardrailName:fe,guardrailType:"input",passed:Oe.passed,reason:Oe.reason,durationMs:Date.now()-xe,timestamp:Date.now()}),!Oe.passed)throw new lt({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${fe}" failed: ${Oe.reason}`,guardrailName:fe,guardrailType:"input",userMessage:Oe.reason??"Input validation failed",agentName:D.name,input:U});Oe.transformed!==void 0&&(U=Oe.transformed);}if($e("onAgentStart",{agentName:D.name,input:U,timestamp:Re}),Te&&Te.record({type:"agent_start",timestamp:Date.now(),agentId:D.name,snapshotId:null,inputLength:U.length,modelId:D.model??void 0,...D.instructions?{instructions:D.instructions.slice(0,ge)}:{},input:U.slice(0,ge)}),P.batch(()=>{let de=ot(P.facts);st(P.facts,{...de,status:"running",currentAgent:D.name,input:U,startedAt:Date.now()});}),E&&E.length>0){let de={agentId:D.name,agentName:D.name,input:U,state:P.facts.$store.toObject(),breakpointType:"pre_agent_run"},fe=await at("pre_agent_run",de,K?.signal??me?.signal);if(fe?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};fe?.input&&(U=fe.input);}let ut=K?.outputSchema!==void 0?K.outputSchema:I,ct=e;ut&&(ct=Rn(e,{schema:ut,maxRetries:K?.maxSchemaRetries??z??2}));let Se=await hn(ct,D,U,{...me,signal:me?.signal,onMessage:de=>{let Ue=[...tn(P.facts),de];Ct(P.facts,Ue.length>Cr?Ue.slice(-Cr):Ue),me?.onMessage?.(de);},onToolCall:async de=>{let fe=(s.toolCall??[]).map((Oe,Be)=>At(Oe,Be,"toolCall"));for(let Oe of fe){let{name:Be}=Oe,Rt={agentName:D.name,input:U,facts:P.facts.$store.toObject()},St=Date.now(),he=await xt(Oe,{toolCall:de,agentName:D.name,input:U},Rt);if($e("onGuardrailCheck",{agentId:D.name,guardrailName:Be,guardrailType:"toolCall",passed:he.passed,reason:he.reason,durationMs:Date.now()-St,timestamp:Date.now()}),!he.passed)throw new lt({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${Be}" failed: ${he.reason}`,guardrailName:Be,guardrailType:"toolCall",userMessage:he.reason??"Tool call blocked",data:{toolCall:de},agentName:D.name,input:U})}if(!u){let Oe=`tool-${de.id}`,Be={id:Oe,type:"tool_call",agentName:D.name,description:`Tool call: ${de.name}`,data:de,requestedAt:Date.now()};P.batch(()=>{let Rt=kt(P.facts);mt(P.facts,{...Rt,pending:[...Rt.pending,Be]});}),c?.(Be),await _t(Oe,K?.signal??me?.signal);}let xe=[...nn(P.facts),de];Mt(P.facts,xe.length>Mr?xe.slice(-Mr):xe),me?.onToolCall?.(de);}},y?{...y,onRetry:(de,fe,Ue)=>{y.onRetry?.(de,fe,Ue),$e("onAgentRetry",{agentName:D.name,input:U,attempt:de,error:fe,delayMs:Ue,timestamp:Date.now()});}}:void 0);if(E&&E.length>0){let de={agentId:D.name,agentName:D.name,input:U,state:P.facts.$store.toObject(),breakpointType:"pre_output_guardrails"},fe=await at("pre_output_guardrails",de,K?.signal??me?.signal);if(fe?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};fe?.input&&(U=fe.input);}let Ae=He.map((de,fe)=>At(de,fe,"output"));for(let de of Ae){let{name:fe}=de,Ue={agentName:D.name,input:U,facts:P.facts.$store.toObject()},xe=Date.now(),Oe=await xt(de,{output:Se.output,agentName:D.name,input:U,messages:Se.messages},Ue);if($e("onGuardrailCheck",{agentId:D.name,guardrailName:fe,guardrailType:"output",passed:Oe.passed,reason:Oe.reason,durationMs:Date.now()-xe,timestamp:Date.now()}),!Oe.passed)throw new lt({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${fe}" failed: ${Oe.reason}`,guardrailName:fe,guardrailType:"output",userMessage:Oe.reason??"Output validation failed",agentName:D.name,input:U});Oe.transformed!==void 0&&(Se.output=Oe.transformed);}let ht=false,De=0;if(P.batch(()=>{let de=ot(P.facts),fe=de.tokenUsage+Se.totalTokens;if(st(P.facts,{...de,status:"completed",output:Se.output,tokenUsage:fe,turnCount:de.turnCount+Se.messages.length,completedAt:Date.now()}),l&&m){De=fe/l;let Ue=adapterUtils.getBridgeFact(P.facts,"__budgetWarningFired");De>=d&&!Ue&&(adapterUtils.setBridgeFact(P.facts,"__budgetWarningFired",true),ht=true);}}),ht)try{m({currentTokens:ot(P.facts).tokenUsage,maxBudget:l,percentage:De});}catch(de){W&&console.debug("[Directive Orchestrator] onBudgetWarning threw:",de);}if(w&&Se.messages.length>0)try{w.addMessages(Se.messages);}catch(de){W&&console.debug("[Directive] Memory addMessages failed:",de);}if($e("onAgentComplete",{agentName:D.name,input:U,output:Se.output,tokenUsage:Se.totalTokens,durationMs:Date.now()-Re,timestamp:Date.now()}),Te){let de=typeof Se.output=="string"?Se.output:JSON.stringify(Se.output);Te.record({type:"agent_complete",timestamp:Date.now(),agentId:D.name,snapshotId:null,outputLength:de?.length??0,totalTokens:Se.totalTokens,inputTokens:Se.tokenUsage?.inputTokens??0,outputTokens:Se.tokenUsage?.outputTokens??0,durationMs:Date.now()-Re,modelId:D.model??void 0,output:de.slice(0,ge)});}if(E&&E.length>0){let de={agentId:D.name,agentName:D.name,input:U,state:P.facts.$store.toObject(),breakpointType:"post_run"},fe=await at("post_run",de,K?.signal??me?.signal);if(fe?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};fe?.input&&(U=fe.input);}return Se}ae=S;let te=new Map,we=new Map;function re(D,U){return U?.aborted?Promise.reject(U.reason??new Error("Aborted while waiting for breakpoint")):new Promise((ve,me)=>{let K=false,Re=null,_e=()=>{K||(K=true,Re&&(clearTimeout(Re),Re=null),U&&U.removeEventListener("abort",He),it());},He=()=>{_e(),me(U.reason??new Error(`Breakpoint wait for ${D} aborted`));};U&&U.addEventListener("abort",He,{once:true});let it=P.facts.$store.subscribe([Ht],()=>{if(K)return;let ct=yt(P.facts);if(ct.resolved.includes(D)){_e();let Se=te.get(D)??null;te.delete(D),ve(Se);}else if(ct.cancelled.includes(D)){_e(),te.delete(D);let Se=we.get(D);we.delete(D),me(new Error(Se?`Breakpoint ${D} was cancelled: ${Se}`:`Breakpoint ${D} was cancelled`));}}),ut=j??3e5;Re=setTimeout(()=>{K||(_e(),te.delete(D),we.delete(D),me(new Error(`[Directive] Breakpoint timeout: ${D} not resolved within ${Math.round(ut/1e3)}s`)));},ut);})}async function at(D,U,ve){if(!E||E.length===0)return null;let me=kn(E,D,U);if(!me)return null;let K=vn(),Re={id:K,type:D,agentId:U.agentId,input:U.input,label:me.label,requestedAt:Date.now()};P.batch(()=>{let He=yt(P.facts);bt(P.facts,{...He,pending:[...He.pending,Re]});});try{G?.(Re);}catch{}try{T.onBreakpoint?.(Re);}catch{}Te&&Te.record({type:"breakpoint_hit",timestamp:Date.now(),snapshotId:null,agentId:U.agentId,breakpointId:K,breakpointType:D,label:me.label});let _e=await re(K,ve);return Te&&Te.record({type:"breakpoint_resumed",timestamp:Date.now(),snapshotId:null,agentId:U.agentId,breakpointId:K,modified:!!_e?.input,skipped:!!_e?.skip}),_e}function _t(D,U){return U?.aborted?Promise.reject(U.reason??new Error("Aborted while waiting for approval")):new Promise((ve,me)=>{let K=false,Re=null,_e=()=>{K||(K=true,Re&&(clearTimeout(Re),Re=null),U&&U.removeEventListener("abort",He),it());},He=()=>{_e(),me(U.reason??new Error(`Approval wait for ${D} aborted`));};U&&U.addEventListener("abort",He,{once:true});let it=P.facts.$store.subscribe([Ut],()=>{if(K)return;let ut=kt(P.facts);if(ut.approved.includes(D))_e(),ve();else {let ct=ut.rejected.find(Se=>Se.id===D);if(ct){_e();let Se=ct.reason?`Request ${D} rejected: ${ct.reason}`:`Request ${D} rejected`;me(new Error(Se));}}});Re=setTimeout(()=>{if(K)return;_e();let ut=Math.round(R/1e3);me(new Error(`[Directive] Approval timeout: Request ${D} not resolved within ${ut}s.
|
|
13
13
|
Solutions:
|
|
14
14
|
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
15
15
|
2. Set autoApproveToolCalls: true to auto-approve
|
|
16
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(`
|
|
17
|
+
See: https://directive.run/docs/ai/running-agents`));},R);})}function jt(){return {...gt(P.facts)}}return {system:P,get facts(){return jt()},get totalTokens(){return ot(P.facts).tokenUsage},get timeline(){return Te},async run(D,U,ve){return S(D,U,jt(),void 0,ve)},runStream(D,U,ve={}){let me=new AbortController,K=1e4,Re=[],_e=[],He=false,it=Date.now(),ut=0,ct=1e5,Se="",Ae;ve.signal&&(Ae=()=>me.abort(),ve.signal.addEventListener("abort",Ae,{once:true}));let ht=()=>{Ae&&ve.signal&&ve.signal.removeEventListener("abort",Ae);},De=xe=>{if(He)return;let Oe=_e.shift();Oe?Oe(xe):(Re.push(xe),Re.length>K&&Re.shift());},de=()=>{He=true,ht();for(let xe of _e)xe(null);_e.length=0;},fe=(async()=>{De({type:"progress",phase:"starting",message:"Running input guardrails"});try{let xe=U,Oe=(s.input??[]).map((he,Qe)=>At(he,Qe,"input"));for(let he of Oe){let{name:Qe}=he,Gt={agentName:D.name,input:xe,facts:P.facts.$store.toObject()},Pe=await xt(he,{input:xe,agentName:D.name},Gt);if(!Pe.passed)throw De({type:"guardrail_triggered",guardrailName:Qe,reason:Pe.reason??"Input validation failed",partialOutput:Se,stopped:!0}),new lt({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${Qe}" failed: ${Pe.reason}`,guardrailName:Qe,guardrailType:"input",userMessage:Pe.reason??"Input validation failed",agentName:D.name,input:xe});Pe.transformed!==void 0&&(xe=Pe.transformed);}De({type:"progress",phase:"generating",message:"Starting agent"}),P.batch(()=>{let he=ot(P.facts);st(P.facts,{...he,status:"running",currentAgent:D.name,input:xe,startedAt:Date.now()});});let Be=await hn(e,D,xe,{signal:me.signal,onMessage:he=>{let Qe=tn(P.facts);if(Ct(P.facts,[...Qe,he]),De({type:"message",message:he}),he.role==="assistant"&&he.content){let Gt=Math.ceil(he.content.length/4);ut+=Gt,Se+=he.content,Se.length>ct&&(Se=Se.slice(-ct)),De({type:"token",data:he.content,tokenCount:ut});}},onToolCall:async he=>{De({type:"tool_start",tool:he.name,toolCallId:he.id,arguments:he.arguments});let Qe=(s.toolCall??[]).map((Pe,vt)=>At(Pe,vt,"toolCall"));for(let Pe of Qe){let{name:vt}=Pe,Tt={agentName:D.name,input:xe,facts:P.facts.$store.toObject()},Ft=await xt(Pe,{toolCall:he,agentName:D.name,input:xe},Tt);if(!Ft.passed)throw De({type:"guardrail_triggered",guardrailName:vt,reason:Ft.reason??"Tool call blocked",partialOutput:Se,stopped:!0}),new lt({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${vt}" failed: ${Ft.reason}`,guardrailName:vt,guardrailType:"toolCall",userMessage:Ft.reason??"Tool call blocked",data:{toolCall:he},agentName:D.name,input:xe})}if(!u){let Pe=`tool-${he.id}`;De({type:"approval_required",requestId:Pe,toolName:he.name});let vt={id:Pe,type:"tool_call",agentName:D.name,description:`Tool call: ${he.name}`,data:he,requestedAt:Date.now()};P.batch(()=>{let Tt=kt(P.facts);mt(P.facts,{...Tt,pending:[...Tt.pending,vt]});}),c?.(vt),await _t(Pe,me.signal),De({type:"approval_resolved",requestId:Pe,approved:!0});}let Gt=nn(P.facts);Mt(P.facts,[...Gt,he]),he.result&&De({type:"tool_end",tool:he.name,toolCallId:he.id,result:he.result});}},y);De({type:"progress",phase:"finishing",message:"Running output guardrails"});let Rt=(s.output??[]).map((he,Qe)=>At(he,Qe,"output"));for(let he of Rt){let{name:Qe}=he,Gt={agentName:D.name,input:xe,facts:P.facts.$store.toObject()},Pe=await xt(he,{output:Be.output,agentName:D.name,input:xe,messages:Be.messages},Gt);if(!Pe.passed)throw De({type:"guardrail_triggered",guardrailName:Qe,reason:Pe.reason??"Output validation failed",partialOutput:typeof Be.output=="string"?Be.output:"",stopped:!0}),new lt({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${Qe}" failed: ${Pe.reason}`,guardrailName:Qe,guardrailType:"output",userMessage:Pe.reason??"Output validation failed",agentName:D.name,input:xe});Pe.transformed!==void 0&&(Be.output=Pe.transformed);}P.batch(()=>{let he=ot(P.facts);st(P.facts,{...he,status:"completed",output:Be.output,tokenUsage:he.tokenUsage+Be.totalTokens,turnCount:he.turnCount+Be.messages.length,completedAt:Date.now()});});let St=Date.now()-it;return De({type:"done",totalTokens:Be.totalTokens,duration:St,droppedTokens:0}),de(),Be}catch(xe){throw De({type:"error",error:xe instanceof Error?xe:new Error(String(xe))}),de(),xe}})();return fe.catch(()=>{}),{stream:{[Symbol.asyncIterator](){return {async next(){return Re.length>0?{done:false,value:Re.shift()}:He?{done:true,value:void 0}:new Promise(xe=>{_e.push(Oe=>{xe(Oe===null?{done:true,value:void 0}:{done:false,value:Oe});});})}}}},result:fe,abort:()=>{me.abort(),de();}}},async waitForIdle(D){let U=()=>ot(P.facts).status!=="running";if(U())return;let ve=Date.now();for(;!U();){if(D!==void 0&&Date.now()-ve>D)throw new Error("[Directive Orchestrator] waitForIdle timed out");await new Promise(me=>setTimeout(me,50));}},approve(D){P.batch(()=>{let U=kt(P.facts);if(!U.pending.some(K=>K.id===D)){W&&console.debug(`[Directive] approve() ignored: no pending request "${D}"`);return}let ve=200,me=[...U.approved,D];mt(P.facts,{...U,pending:U.pending.filter(K=>K.id!==D),approved:me.length>ve?me.slice(-ve):me});});},reject(D,U){P.batch(()=>{let ve=kt(P.facts);if(!ve.pending.some(_e=>_e.id===D)){W&&console.debug(`[Directive] reject() ignored: no pending request "${D}"`);return}U&&W&&console.debug(`[Directive] Request ${D} rejected: ${U}`);let me={id:D,reason:U,rejectedAt:Date.now()},K=200,Re=[...ve.rejected,me];mt(P.facts,{...ve,pending:ve.pending.filter(_e=>_e.id!==D),rejected:Re.length>K?Re.slice(-K):Re});});},pause(){let D=ot(P.facts);st(P.facts,{...D,status:"paused"});},resume(){let D=ot(P.facts);D.status==="paused"&&st(P.facts,{...D,status:D.currentAgent?"running":"idle"});},reset(){P.batch(()=>{st(P.facts,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(P.facts,{pending:[],approved:[],rejected:[]}),Ct(P.facts,[]),Mt(P.facts,[]),bt(P.facts,{pending:[],resolved:[],cancelled:[]}),adapterUtils.setBridgeFact(P.facts,"__budgetWarningFired",false);}),te.clear(),we.clear();},async checkpoint(D){if(ot(P.facts).status==="running")throw new Error("[Directive] Cannot checkpoint while agent is running");if(!P.debug?.export)throw new Error("[Directive] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let ve={version:1,id:Pt(),createdAt:new Date().toISOString(),label:D?.label,systemExport:P.debug.export(),timelineExport:Te?.export()??null,localState:{type:"single"},memoryExport:w?w.export?.()??null:null,orchestratorType:"single"};return _&&await _.save(ve),ve},restore(D,U){if(!sn(D))throw new Error("[Directive] Invalid checkpoint data");if(D.orchestratorType!=="single")throw new Error("[Directive] Cannot restore multi-agent checkpoint in single-agent orchestrator");if(!P.debug?.import)throw new Error("[Directive] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");P.debug.import(D.systemExport),U?.restoreTimeline!==false&&D.timelineExport&&Te&&Te.import(D.timelineExport),D.memoryExport!==null&&w&&w.import&&w.import(D.memoryExport);},resumeBreakpoint(D,U){U&&te.set(D,U),P.batch(()=>{let ve=yt(P.facts),me=[...ve.resolved,D];bt(P.facts,{...ve,pending:ve.pending.filter(K=>K.id!==D),resolved:me.length>Dt?me.slice(-Dt):me});});},cancelBreakpoint(D,U){U&&we.set(D,U),P.batch(()=>{let ve=yt(P.facts),me=[...ve.cancelled,D];bt(P.facts,{...ve,pending:ve.pending.filter(K=>K.id!==D),cancelled:me.length>Dt?me.slice(-Dt):me});});},getPendingBreakpoints(){return [...yt(P.facts).pending]},dispose(){P.destroy();}}}var Dr=1e5;function Pr(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>Dr?r.slice(0,Dr)+"...[truncated]":r}catch{return String(t)}}function Go(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 Bo(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 Lo(t){let{maxTokensPerMinute:e=1e5,maxRequestsPerMinute:r=60}=t,o=Math.max(r,1e3),n=[],a=[],s=6e4;function c(l,d){let m=0,h=l.length;for(;m<h;){let v=m+h>>>1;(l[v]??0)<d?m=v+1:h=v;}return m}let u=(l,d)=>{let m=Date.now(),h=m-s,v=c(n,h);v>0&&(n=n.slice(v));let R=c(a,h);R>0&&(a=a.slice(R));let w=d.facts[en]?.tokenUsage??0,k=n.length,C=a.length;return k+w>e?{passed:false,reason:"Token rate limit exceeded"}:C>=r?{passed:false,reason:"Request rate limit exceeded"}:(a.length<o&&a.push(m),n.length<o&&n.push(m),{passed:true})};return u.reset=()=>{n=[],a=[];},u}function Fo(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?.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" is blocked`}:{passed:true}}}function qo(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 Uo(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 Ho(t){let{maxCharacters:e,maxTokens:r,estimateTokens:o=n=>Math.ceil(n.length/4)}=t;return n=>{let a=Pr(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 zo(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=Pr(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 Jo(t){return t.status==="running"}function Wo(t){return t.pending.length>0}function Vo(t,e){return t/1e6*e}var Ko=new Set(["http:","https:"]);function Xo(t){try{let e=new URL(t);if(!Ko.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 Yo(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 m=Date.now();a?.onBeforeCall?.({agent:u,input:l,timestamp:m});let h=[{role:"user",content:l}];try{let{url:v,init:R}=r(u,l,h),y=d?.signal?{...R,signal:d.signal}:R,T=await e(v,y);if(!T.ok){let _=await T.text().catch(()=>"");throw new Error(`[Directive] AgentRunner request failed: ${T.status} ${T.statusText}${_?` \u2013 ${_.slice(0,300)}`:""}`)}let w=await o(T,h),k={inputTokens:w.inputTokens??0,outputTokens:w.outputTokens??0},C={role:"assistant",content:w.text},I=[...h,C];d?.onMessage?.(C);let z=Date.now()-m;return a?.onAfterCall?.({agent:u,input:l,output:w.text,totalTokens:w.totalTokens,tokenUsage:k,durationMs:z,timestamp:Date.now()}),{output:c(w.text),messages:I,toolCalls:[],totalTokens:w.totalTokens,tokenUsage:k}}catch(v){let R=Date.now()-m;throw v instanceof Error&&a?.onError?.({agent:u,input:l,error:v,durationMs:R,timestamp:Date.now()}),v}}}function Qo(t,...e){let r=t;for(let o of e)r=o(r);return r}function Sn(t,e){let r=typeof t.content=="string"?t.content:JSON.stringify(t.content);return Math.ceil(r.length/4)}function Zn(t,e){return t.reduce((r,o)=>r+Sn(o),0)}function Ir(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:Zn(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),m=[...l,...s];return {keep:m,toSummarize:d.length>0?d:[],estimatedTokens:Zn(m)}}}function Or(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+Sn(R),0),d=[],m=[],h=l;for(let v=u.length-1;v>=0;v--){let R=u[v],y=!s&&R.role==="system"?0:Sn(R);if(h+y<=n)d.unshift(R),h+=y;else {m.push(...u.slice(0,v+1));break}}return {keep:[...d,...c],toSummarize:m,estimatedTokens:h}}}function Zo(t={}){let e=Ir(t),r=Or(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 es(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 h=u.messages.length,v=u.estimatedTokens,R=e(u.messages,o);if(R.toSummarize.length===0)return {messagesBefore:h,messagesAfter:h,messagesSummarized:0,estimatedTokensBefore:v,estimatedTokensAfter:R.estimatedTokens};let y;r&&R.toSummarize.length>0&&(y=await r(R.toSummarize),u.summaries.push({content:y,messagesCount:R.toSummarize.length,createdAt:Date.now()})),u.messages=R.keep,u.estimatedTokens=R.estimatedTokens;let T={messagesBefore:h,messagesAfter:u.messages.length,messagesSummarized:R.toSummarize.length,summary:y,estimatedTokensBefore:v,estimatedTokensAfter:R.estimatedTokens};return a?.(T),T}finally{l=false;}}function m(){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(h=>({...h}))}},addMessage(h){u.messages.push(h),u.totalMessagesProcessed++,u.estimatedTokens+=Sn(h),n&&m();},addMessages(h){for(let v of h)u.messages.push(v),u.totalMessagesProcessed++,u.estimatedTokens+=Sn(v);n&&m();},getContextMessages(){let h=[];if(u.summaries.length>0){let v=u.summaries.map(R=>R.content).join(`
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
-
`);
|
|
21
|
+
`);h.push({role:"system",content:`[Previous conversation summary]
|
|
22
22
|
|
|
23
|
-
${v}`});}if(
|
|
23
|
+
${v}`});}if(h.push(...u.messages),c){let v=Zn(h);v>c&&console.warn(`[Directive Memory] Context messages (${v} tokens) exceed maxContextTokens (${c}). Consider calling manage() or reducing message count.`);}return h},manage:d,isManaging(){return l},clear(){u={messages:[],summaries:[],totalMessagesProcessed:0,estimatedTokens:0};},export(){return {...u,messages:[...u.messages],summaries:u.summaries.map(h=>({...h}))}},import(h){u={...h,messages:[...h.messages],summaries:h.summaries.map(v=>({...v}))};}}}function ts(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
24
|
`);return r.length<=t?r:r.slice(0,t)+`
|
|
25
|
-
[truncated]`}}function
|
|
25
|
+
[truncated]`}}function ns(){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
26
|
${e.join(`
|
|
27
|
-
`)}`}}function
|
|
27
|
+
`)}`}}function rs(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(`
|
|
28
28
|
|
|
29
29
|
`),s=`Summarize the following conversation in ${r} characters or less.
|
|
30
30
|
${o?"Preserve key facts, decisions, and action items.":""}
|
|
@@ -33,76 +33,76 @@ Focus on information that would be useful context for continuing the conversatio
|
|
|
33
33
|
CONVERSATION:
|
|
34
34
|
${a}
|
|
35
35
|
|
|
36
|
-
SUMMARY:`;return t(s)}}var
|
|
36
|
+
SUMMARY:`;return t(s)}}var er=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 os(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 m=new er(c,u),h=new AbortController,v="",R=0,y=false,T=Date.now(),w;s&&(w=()=>h.abort(),s.addEventListener("abort",w));let k=()=>{w&&s&&s.removeEventListener("abort",w);};async function C(){for(let _ of r)try{let E=await _.check(v,R);if(!E.passed){let G=_.stopOnFail!==!1,j={type:"guardrail_triggered",guardrailName:_.name,reason:E.reason??"Guardrail check failed",partialOutput:v,stopped:G};return await m.push(j),G&&(typeof d=="function"?d:()=>d)(j)&&(y=!0,h.abort()),j}}catch{}return null}let I=(async()=>{await m.push({type:"progress",phase:"starting",message:"Starting agent"});try{let _=await t(o,n,{signal:h.signal,onToken:async j=>{y||(R++,v+=j,await m.push({type:"token",data:j,tokenCount:R}),R%l===0&&await C());},onToolStart:async(j,W,ge)=>{await m.push({type:"progress",phase:"tool_calling",message:`Calling ${j}`}),await m.push({type:"tool_start",tool:j,toolCallId:W,arguments:ge});},onToolEnd:async(j,W,ge)=>{await m.push({type:"tool_end",tool:j,toolCallId:W,result:ge}),await m.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async j=>{await m.push({type:"message",message:j});}});await C();let E=Date.now()-T,G=m.getDroppedCount();return await m.push({type:"done",totalTokens:_.totalTokens,duration:E,droppedTokens:G}),m.close(),_}catch(_){let E={type:"error",error:_ instanceof Error?_:new Error(String(_)),partialOutput:v||void 0};throw await m.push(E),m.close(),_}finally{k();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let _=await m.pull();return _===null?{done:true,value:void 0}:{done:false,value:_}}}}},result:I,abort:()=>h.abort()}}}function ss(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 as(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 is(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 us(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 cs(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 ls(t){let e="";for await(let r of t)r.type==="token"&&(e+=r.data);return e}async function*ds(t,e){for await(let r of t)await e(r),yield r;}async function*ps(t,e){let r=new Set(e);for await(let o of t)r.has(o.type)&&(yield o);}async function*gs(t,e){for await(let r of t)yield await e(r);}var ms=1e4;function tr(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<ms?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 nr={successRate:.5,latency:.3,circuitState:.2};function rr(t={}){let e=t.windowMs??6e4,r=t.maxNormalLatencyMs??5e3,o=t.maxEventsPerAgent??1e3,n={successRate:t.weights?.successRate??nr.successRate,latency:t.weights?.latency??nr.latency,circuitState:t.weights?.circuitState??nr.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[y,T]of Object.entries(n))if(T<0||T>1)throw new Error(`[Directive HealthMonitor] weight "${y}" must be between 0 and 1 (got ${T})`);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 m(y){let T=s.get(y);return T||(T=[],s.set(y,T)),T}function h(y,T){let w=T-e,k=0;for(;k<y.length&&y[k].timestamp<w;)k++;let C=y.length-k-o;C>0&&(k+=C),k>0&&y.splice(0,k);}function v(y){let T=s.get(y);if(!T||T.length===0)return 50;let w=Date.now();if(h(T,w),T.length===0)return 50;let C=T.filter(j=>j.success).length/T.length,I=T.reduce((j,W)=>j+W.latencyMs,0)/T.length,z=Math.min(I/r,1),_=c.get(y)??"CLOSED",E=_==="CLOSED"?1:_==="HALF_OPEN"?.5:0,G=C*n.successRate+(1-z)*n.latency+E*n.circuitState;return Math.round(G*100)}function R(y){let T=m(y),w=Date.now();h(T,w);let k=T.filter(E=>E.success).length,C=T.length-k,I=T.length>0?k/T.length:0,z=T.length>0?T.reduce((E,G)=>E+G.latencyMs,0)/T.length:0,_=[];for(let E=T.length-1;E>=0&&_.length<5;E--)T[E].errorMessage&&_.unshift(T[E].errorMessage);return {agentId:y,circuitState:c.get(y)??"CLOSED",successRate:I,avgLatencyMs:z,recentFailures:C,recentSuccesses:k,healthScore:v(y),lastErrors:_}}return {recordSuccess(y,T){let w=m(y);w.push({success:true,latencyMs:T,timestamp:Date.now()}),h(w,Date.now()),u++;},recordFailure(y,T,w){let k=m(y);k.push({success:false,latencyMs:T,timestamp:Date.now(),errorMessage:w?.message}),h(k,Date.now()),u++;},getMetrics(y){return R(y)},getAllMetrics(){if(u===d&&l)return l;let y=Object.create(null);for(let T of s.keys())y[T]=R(T);return l=y,d=u,y},getHealthScore(y){return v(y)},updateCircuitState(y,T){c.set(y,T),u++;},reset(){s.clear(),c.clear(),u++,l=null,d=-1;}}}var an=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 fs(t,e,r){return `${t}
|
|
37
37
|
|
|
38
38
|
Feedback on your previous response:
|
|
39
39
|
${e}
|
|
40
40
|
|
|
41
|
-
Please improve your response.`}function
|
|
41
|
+
Please improve your response.`}function hs(t,e){let r=e.maxIterations??2,o=e.buildRetryInput??fs,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,m=null;for(let h=0;h<r;h++){let v=Date.now(),R=await t(a,l,c);m=R,d+=R.totalTokens;let y={input:s,iteration:h,result:R,history:[...u]},T=await e.evaluate(R.output,y);u.push(T);let w=Date.now()-v;try{e.onIteration?.({iteration:h,passed:T.passed,feedback:T.feedback,score:T.score,durationMs:w});}catch{}if(T.passed)return {...R,totalTokens:d};if(e.budgetThreshold!==void 0&&d>=e.budgetThreshold)break;h<r-1&&T.feedback&&(l=o(s,T.feedback,h));}if(n==="throw")throw new an({iterations:r,history:u,lastResult:m,totalTokens:d});return {...m,totalTokens:d}}}function It(t){if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}function vs(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 un(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 ks(t){let e=un(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?ws(t):null}}}}function ws(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 Rs(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:un(e)-un(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 Ss(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=$r({...t,checkpointStore:e});return a.restore(n),a}var Ot=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;}},Ts=adapterUtils.requirementGuard("RUN_AGENT");function $r(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:m,maxTokenBudget:h,plugins:v=[],onApprovalRequest:R,autoApproveToolCalls:y=true,approvalTimeoutMs:T=3e5,constraints:w={},resolvers:k={},circuitBreaker:C,budgetWarningThreshold:I=.8,onBudgetWarning:z,selfHealing:_,checkpointStore:E,breakpoints:G=[],onBreakpoint:j,breakpointTimeoutMs:W=3e5,derive:ge,scratchpad:$e,tasks:F={}}=t,ue=typeof c=="object"?true:!!c,ae=5e3,P={...r},Ee={...F},Ce=Object.create(null);for(let i of Object.keys(Ee))Ce[i]={status:"idle"};let Te=new Map;if(!y&&!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
42
|
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
43
|
-
- Provide an onApprovalRequest callback to handle approvals programmatically`);if(
|
|
43
|
+
- Provide an onApprovalRequest callback to handle approvals programmatically`);if(I<0||I>1)throw new Error(`[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${I}`);let ft=new Set(["__coord","__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);for(let i of Object.keys(P))if(ft.has(i))throw new Error(`[Directive MultiAgent] Agent ID "${i}" is reserved and cannot be used`);for(let[i,p]of Object.entries(Ee)){if(!i||i.trim()!==i)throw new Error(`[Directive MultiAgent] Task ID must be a non-empty trimmed string, got "${i}"`);if(ft.has(i))throw new Error(`[Directive MultiAgent] Task ID "${i}" is reserved and cannot be used`);if(p.timeout!==void 0&&(!Number.isFinite(p.timeout)||p.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${i}" timeout must be a finite number > 0`);if(p.maxConcurrent!==void 0&&(!Number.isFinite(p.maxConcurrent)||p.maxConcurrent<1||!Number.isInteger(p.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${i}" maxConcurrent must be a finite integer >= 1`);if(p.retry){let{attempts:f,delayMs:g}=p.retry;if(!Number.isFinite(f)||f<1)throw new Error(`[Directive MultiAgent] Task "${i}" retry attempts must be a finite number >= 1`);if(g!==void 0&&(!Number.isFinite(g)||g<0))throw new Error(`[Directive MultiAgent] Task "${i}" retry delayMs must be a finite number >= 0`)}}for(let[i,p]of Object.entries(Ee))Te.set(i,new Ot(p.maxConcurrent??1));for(let i of Object.keys(Ee))if(P[i])throw new Error(`[Directive MultiAgent] ID "${i}" is registered as both an agent and a task. IDs must be unique across both registries.`);let Bt=new Set([...Object.keys(P),...Object.keys(Ee)]),Lt=[];for(let[i,p]of Object.entries(o)){let f=[];switch(p.type){case "parallel":f.push(...p.handlers);break;case "sequential":f.push(...p.handlers);break;case "supervisor":f.push(p.supervisor,...p.workers);break;case "dag":for(let g of Object.values(p.nodes))f.push(g.handler);break;case "reflect":f.push(p.handler,p.evaluator);break;case "race":f.push(...p.handlers);break;case "debate":f.push(...p.handlers,p.evaluator);break}for(let g of f)Bt.has(g)||Lt.push({patternId:i,agentId:g});}if(Lt.length>0){let i=Lt.map(({patternId:p,agentId:f})=>` - Pattern "${p}" references unknown agent "${f}"`).join(`
|
|
44
44
|
`);throw new Error(`[Directive MultiAgent] Pattern validation failed. The following agents are not registered:
|
|
45
45
|
${i}
|
|
46
46
|
|
|
47
|
-
Registered agents: ${[...
|
|
47
|
+
Registered agents: ${[...Bt].join(", ")||"(none)"}`)}for(let[i,p]of Object.entries(o))p.type==="dag"&&Ns(i,p.nodes);let S=null,H=null;ue&&(S=mn({goToSnapshot:i=>{try{K.debug?.goTo?.(i);}catch{}}}));let te=null,we=null;_&&(te=rr(_.healthMonitor),_.selectionStrategy==="round-robin"&&(we=new Map));function re(i,p){try{l[i]?.(p);}catch(f){ue&&console.debug(`[Directive MultiAgent] hooks.${i} threw:`,f);}}let at={__globalTokens:core.t.number(),__status:core.t.string(),__handoffs:core.t.array(),__handoffResults:core.t.array(),__budgetWarningFired:core.t.boolean()};$e&&(at[pt]=core.t.object()),ge&&Object.keys(ge).length>0&&(at.__derived=core.t.object());let _t={facts:at,derivations:{},events:{},requirements:{}},jt=rn(w);h&&(jt.__budgetLimit={priority:100,when:i=>adapterUtils.getBridgeFact(i,"__globalTokens")>h,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let cn=Object.create(null);for(let[i,p]of Object.entries(k))cn[i]={requirement:p.requirement,key:p.key,resolve:async(f,g)=>{let b=gt(g.facts),A={facts:{...g.facts,...b},runAgent:async(M,N,J)=>e(M,N,J),signal:g.signal};return p.resolve(f,A)}};cn.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async()=>{it="paused",ue&&console.debug("[Directive MultiAgent] Budget exceeded \u2014 all agents paused");}},cn.__runAgent={requirement:Ts,resolve:async i=>{await Xe(i.agent,i.input);}};let D=core.createModule("__coord",{schema:_t,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),$e&&adapterUtils.setBridgeFact(i,pt,{...$e.init});},constraints:jt,resolvers:cn}),U=Object.create(null);U.__coord=D;for(let[i,p]of Object.entries(P)){let f=p.constraints?rn(p.constraints):{},g=Object.create(null);if(p.resolvers)for(let[b,x]of Object.entries(p.resolvers))g[b]={requirement:x.requirement,key:x.key,resolve:async(A,M)=>{let N=gt(M.facts),V={facts:{...M.facts,...N},runAgent:async(ee,Z,ce)=>e(ee,Z,ce),signal:M.signal};return x.resolve(A,V)}};U[i]=core.createModule(i,{schema:gn,init:b=>{st(b,{status:"idle",currentAgent:p.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(b,{pending:[],approved:[],rejected:[]}),Ct(b,[]),Mt(b,[]),bt(b,on());},constraints:f,resolvers:Object.keys(g).length>0?g:void 0});}let ve=adapterUtils.createCallbackPlugin("directive-multi-agent-callbacks",{}),me=[...v,ve];ue&&S&&(H=fn(S,()=>{try{return K.debug?.currentIndex??null}catch{return null}}),me.push(H));let K=core.createSystem({modules:U,plugins:me,debug:ue?{timeTravel:true}:void 0});K.start();let Re=500,_e=200,He=0,it="idle",ut=false,ct=0,Se=null;function Ae(){if(ut)throw new Error("[Directive MultiAgent] Orchestrator has been disposed")}let ht=new Map;for(let[i,p]of Object.entries(P))ht.set(i,new Ot(p.maxConcurrent??1));let De=Object.create(null);for(let i of Object.keys(P))De[i]={status:"idle",runCount:0,totalTokens:0};let de=s,fe=[],Ue=[],xe=0;function Oe(i){for(Ue.push(i);Ue.length>de;)Ue.shift();}let Be=new Map,Rt=new Set;function St(){for(let i of Rt)i();}let he=Object.create(null),Qe=new Set;function Gt(){let i=Object.create(null);for(let[g,b]of Object.entries(De))i[g]={status:b.status,lastInput:b.lastInput,lastOutput:b.lastOutput,lastError:b.lastError,runCount:b.runCount,totalTokens:b.totalTokens};let p=Je("__coord"),f={agents:i,coordinator:{globalTokens:He,status:it}};return $e&&p&&(f.scratchpad=adapterUtils.getBridgeFact(p,pt)??{}),f}function Pe(){if(!ge)return;let i=Gt(),p=[],f=[];K.batch(()=>{for(let[b,x]of Object.entries(ge))try{let A=x(i),M=he[b],N=!vs(A,M);he[b]=A,N&&p.push({derivId:b,newValue:A});}catch(A){f.push({derivId:b,derivError:A});}let g=Je("__coord");g&&adapterUtils.setBridgeFact(g,"__derived",{...he});});for(let{derivId:g,newValue:b}of p){S&&S.record({type:"derivation_update",timestamp:Date.now(),snapshotId:null,derivationId:g,valueType:typeof b}),re("onDerivationUpdate",{derivationId:g,value:b,timestamp:Date.now()});for(let x of Qe)try{x(g,b);}catch{}}for(let{derivId:g,derivError:b}of f)ue&&console.warn(`[Directive MultiAgent] Derivation "${g}" threw:`,b),re("onDerivationError",{derivationId:g,error:b instanceof Error?b:new Error(String(b)),timestamp:Date.now()});}let vt=new Set,Tt=new Map,Ft=$e?{get(i){let p=Je("__coord"),f=adapterUtils.getBridgeFact(p,pt);if(!(f==null||!Object.hasOwn(f,i)))return f[i]},set(i,p){if(i==="__proto__"||i==="constructor"||i==="prototype")return;let f=Je("__coord"),g=[i];K.batch(()=>{let b=adapterUtils.getBridgeFact(f,pt)??{};adapterUtils.setBridgeFact(f,pt,{...b,[i]:p});}),Hn(g,i,p),Pe();},has(i){let p=Je("__coord"),f=adapterUtils.getBridgeFact(p,pt);return f!=null&&Object.hasOwn(f,i)},delete(i){if(i==="__proto__"||i==="constructor"||i==="prototype")return;let p=Je("__coord");K.batch(()=>{let f=adapterUtils.getBridgeFact(p,pt)??{},{[i]:g,...b}=f;adapterUtils.setBridgeFact(p,pt,b);}),Hn([i],i,void 0),Pe();},update(i){let p=Object.create(null);for(let b of Object.keys(i))b==="__proto__"||b==="constructor"||b==="prototype"||(p[b]=i[b]);let f=Je("__coord"),g=Object.keys(p);if(g.length!==0){K.batch(()=>{let b=adapterUtils.getBridgeFact(f,pt)??{};adapterUtils.setBridgeFact(f,pt,{...b,...p});});for(let[b,x]of Object.entries(p))Hn(g,b,x);Pe();}},getAll(){let i=Je("__coord");return {...adapterUtils.getBridgeFact(i,pt)??{}}},subscribe(i,p){for(let f of i)Tt.has(f)||Tt.set(f,new Set),Tt.get(f).add(p);return ()=>{for(let f of i)Tt.get(f)?.delete(p);}},onChange(i){return vt.add(i),()=>{vt.delete(i);}},reset(){if(!$e)return;let i=Je("__coord");K.batch(()=>{adapterUtils.setBridgeFact(i,pt,{...$e.init});});}}:null;function Hn(i,p,f){let g=Tt.get(p);if(g)for(let b of g)try{b(p,f);}catch{}for(let b of vt)try{b(p,f);}catch{}S&&p===i[i.length-1]&&S.record({type:"scratchpad_update",timestamp:Date.now(),snapshotId:null,keys:i}),p===i[i.length-1]&&re("onScratchpadUpdate",{keys:i,timestamp:Date.now()});}let Xt=new Map,ln=new Map;function ao(i,p,f){return new Promise((g,b)=>{let x=null,A=false,M,N=Je(i),J=()=>{A||(A=true,x&&(clearTimeout(x),x=null),M&&f&&f.removeEventListener("abort",M),V());},V=K.subscribe([`${i}.${Ht}`],()=>{let ee=yt(N);if(ee.resolved.includes(p)){J();let Z=Xt.get(p)??null;Xt.delete(p),g(Z);}else if(ee.cancelled.includes(p)){J(),Xt.delete(p);let Z=ln.get(p);ln.delete(p),b(new Error(Z?`[Directive MultiAgent] Breakpoint ${p} cancelled: ${Z}`:`[Directive MultiAgent] Breakpoint ${p} cancelled`));}});if(f){if(M=()=>{J(),b(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${p}`));},f.aborted){J(),b(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${p}`));return}f.addEventListener("abort",M,{once:true});}x=setTimeout(()=>{J(),Xt.delete(p),ln.delete(p),b(new Error(`[Directive MultiAgent] Breakpoint timeout: ${p} not resolved within ${Math.round(W/1e3)}s`));},W);})}async function zt(i,p,f,g,b,x){if(G.length===0)return {input:g,skip:false};let A=Je(p),M={agentId:p,agentName:f,input:g,state:gt(A),breakpointType:i,patternId:x?.patternId,handoff:x?.handoff},N=kn(G,i,M);if(!N)return {input:g,skip:false};let J=vn(),V={id:J,type:i,agentId:p,input:g,label:N.label,requestedAt:Date.now()};K.batch(()=>{let Z=yt(A);bt(A,{...Z,pending:[...Z.pending,V]});});try{j?.(V);}catch{}try{l.onBreakpoint?.(V);}catch{}S&&S.record({type:"breakpoint_hit",timestamp:Date.now(),agentId:p,snapshotId:null,breakpointId:J,breakpointType:i,label:N.label});let ee=await ao(p,J,b);return S&&S.record({type:"breakpoint_resumed",timestamp:Date.now(),agentId:p,snapshotId:null,breakpointId:J,modified:!!ee?.input,skipped:!!ee?.skip}),{input:ee?.input??g,skip:ee?.skip??false}}function Je(i){return K.facts[i]}function io(i,p,f){return new Promise((g,b)=>{let x=null,A=false,M,N=Je(i),J=()=>{A||(A=true,x&&(clearTimeout(x),x=null),M&&f&&f.removeEventListener("abort",M),V());},V=K.subscribe([`${i}.${Ut}`],()=>{let ee=kt(N);if(ee.approved.includes(p))J(),g();else {let Z=ee.rejected.find(ce=>ce.id===p);if(Z){J();let ce=Z.reason?`Request ${p} rejected: ${Z.reason}`:`Request ${p} rejected`;b(new Error(ce));}}});if(f){if(M=()=>{J(),b(new Error(`[Directive MultiAgent] Approval wait aborted for request ${p}`));},f.aborted){J(),b(new Error(`[Directive MultiAgent] Approval wait aborted for request ${p}`));return}f.addEventListener("abort",M,{once:true});}x=setTimeout(()=>{J();let ee=Math.round(T/1e3);b(new Error(`[Directive MultiAgent] Approval timeout: Request ${p} not resolved within ${ee}s.
|
|
48
48
|
Solutions:
|
|
49
49
|
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
50
50
|
2. Set autoApproveToolCalls: true to auto-approve
|
|
51
|
-
3. Increase approvalTimeoutMs (current: ${
|
|
52
|
-
See: https://directive.run/docs/ai/multi-agent`));},
|
|
53
|
-
`);
|
|
51
|
+
3. Increase approvalTimeoutMs (current: ${T}ms)
|
|
52
|
+
See: https://directive.run/docs/ai/multi-agent`));},T);})}async function uo(i,p,f,g){let b=p.label??i,x=Date.now(),A=Ce[i]??(Ce[i]={status:"idle"});A.status="running",A.startTime=x,A.lastError=void 0;let M=f;if(G.length>0)try{let ne=await zt("pre_agent_run",i,b,f,g?.signal);if(ne.skip)return A.status="completed",{output:void 0,messages:[],toolCalls:[],totalTokens:0};M=ne.input;}catch{}S&&S.record({type:"task_start",timestamp:x,agentId:i,snapshotId:null,taskId:i,label:b,description:p.description,inputLength:M.length,input:M.slice(0,ae)});let N=g?.patternId??"";re("onTaskStart",{patternId:N,taskId:i,label:b,timestamp:x});let J=Te.get(i),V=()=>({taskId:i,memory:d?structuredClone(d.getContextMessages?.()??[]):[],scratchpad:Object.freeze(Ft?structuredClone(Ft.getAll()):{}),readAgentState:ne=>{let ie=De[ne];if(ie)return Object.freeze({status:ie.status,lastOutput:ie.lastOutput!=null?String(ie.lastOutput):void 0,lastError:ie.lastError,totalTokens:ie.totalTokens});let le=Ce[ne];if(le)return Object.freeze({status:le.status,lastOutput:le.lastOutput!=null?String(le.lastOutput):void 0,lastError:le.lastError,totalTokens:0})},reportProgress:(ne,ie)=>{let le=Number.isFinite(ne)?Math.max(0,Math.min(100,ne)):0;S&&S.record({type:"task_progress",timestamp:Date.now(),agentId:i,snapshotId:null,taskId:i,label:b,percent:le,message:ie}),re("onTaskProgress",{patternId:N,taskId:i,label:b,percent:le,message:ie,timestamp:Date.now()});}}),ee=p.retry?.attempts??1,Z=p.retry?.backoff??"fixed",ce=p.retry?.delayMs??1e3,B,X=async ne=>{let ie=V();return p.run(M,ne,ie)},ye=null;try{J&&(ye=await J.acquire());for(let ie=1;ie<=ee;ie++){let le=new AbortController,Y,O=()=>le.abort();if(g?.signal){if(g.signal.aborted)throw new Error(`[Directive MultiAgent] Task "${i}" aborted before starting`);g.signal.addEventListener("abort",O,{once:!0});}p.timeout&&(Y=setTimeout(()=>le.abort(),p.timeout));try{let q=await X(le.signal);Y&&clearTimeout(Y);let pe=typeof q=="string"?q:It(q),be=Date.now()-x;A.status="completed",A.lastOutput=pe,A.durationMs=be,S&&S.record({type:"task_complete",timestamp:Date.now(),agentId:i,snapshotId:null,taskId:i,label:b,durationMs:be,output:pe}),re("onTaskComplete",{patternId:g?.patternId??"",taskId:i,label:b,durationMs:be,timestamp:Date.now()});try{let oe=K.read("__coord");adapterUtils.setBridgeFact(oe,"__lastTaskCompletion",{taskId:i,timestamp:Date.now()});}catch{}return {output:pe,messages:[],toolCalls:[],totalTokens:0}}catch(q){if(Y&&clearTimeout(Y),B=q instanceof Error?q:new Error(String(q)),ie<ee){S&&S.record({type:"task_error",timestamp:Date.now(),agentId:i,snapshotId:null,taskId:i,label:b,error:B.message,durationMs:Date.now()-x,attempt:ie});let pe=3e4,be=Z==="exponential"?ce*2**(ie-1):ce,oe=Math.min(be,pe);await new Promise(($,L)=>{let Q=!1,ke=()=>{Q||(Q=!0,clearTimeout(se),L(new Error(`[Directive MultiAgent] Task "${i}" aborted during retry backoff`)));},se=setTimeout(()=>{Q=!0,g?.signal?.removeEventListener("abort",ke),$();},oe);g?.signal&&g.signal.addEventListener("abort",ke,{once:!0});});}}finally{g?.signal?.removeEventListener("abort",O);}}let ne=Date.now()-x;throw A.status="error",A.lastError=B?.message,A.durationMs=ne,S&&S.record({type:"task_error",timestamp:Date.now(),agentId:i,snapshotId:null,taskId:i,label:b,error:B?.message??"Unknown error",durationMs:ne}),re("onTaskError",{patternId:N,taskId:i,label:b,error:B,durationMs:ne,timestamp:Date.now()}),B}finally{ye?.();}}async function Xe(i,p,f){if(Ae(),f?.signal?.aborted)throw new Error(`[Directive MultiAgent] Handler "${i}" run aborted before starting`);if(it==="paused")throw new Error("[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)");ct++;try{let g=Ee[i];if(g)return await uo(i,g,p,f);let b=P[i];if(!b){let A=[...Object.keys(P),...Object.keys(Ee)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${i}". Registered handlers: ${A}`)}let x=b.circuitBreaker??C;return x?await x.execute(()=>yr(i,b,p,f)):await yr(i,b,p,f)}catch(g){if(_&&!Ee[i]&&!f?.__isReroute){let x=fo(i),A=ho(x);if(A){let M={originalAgent:i,reroutedTo:A,reason:g instanceof Error?g.message:String(g),timestamp:Date.now()};try{_.onReroute?.(M);}catch{}return re("onReroute",M),S&&S.record({type:"reroute",timestamp:Date.now(),agentId:i,snapshotId:null,from:i,to:A,reason:g instanceof Error?g.message:String(g)}),Xe(A,p,{...f,__isReroute:true})}if(_.degradation==="fallback-response"&&_.fallbackResponse!==void 0)return {output:_.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}let b=De[i];throw b&&b.status!=="error"&&(b.status="error",b.lastError=g instanceof Error?g.message:String(g)),g}finally{ct--,St();}}async function yr(i,p,f,g){let b=Date.now(),x=Je(i),A=De[i],M=p.agent,N=f,J=ht.get(i);if(!J){let B=Object.keys(P).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${i}". Registered agents: ${B}`)}let V=await J.acquire(g?.signal),ee=new AbortController,Z,ce;try{p.timeout&&(Z=setTimeout(()=>ee.abort(),p.timeout)),g?.signal&&(ce=()=>ee.abort(),g.signal.addEventListener("abort",ce,{once:!0}));let B=p.memory??d;if(B){let $=B.getContextMessages();if($.length>0){let L=$.map(Q=>`${Q.role}: ${Q.content}`).join(`
|
|
53
|
+
`);M={...M,instructions:(M.instructions??"")+`
|
|
54
54
|
|
|
55
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}
|
|
56
|
+
`+L};}}{let $=await zt("pre_input_guardrails",i,M.name,N,g?.signal);if($.skip)return A.status="completed",St(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};N=$.input;}let ye=[...u.input??[],...p.guardrails?.input??[]].map(($,L)=>At($,L,"input"));for(let $ of ye){let{name:L}=$,Q={agentName:M.name,input:N,facts:gt(x)},ke=Date.now(),se=await xt($,{input:N,agentName:M.name},Q);if(re("onGuardrailCheck",{agentId:i,guardrailName:L,guardrailType:"input",passed:se.passed,reason:se.reason,durationMs:Date.now()-ke,timestamp:Date.now()}),!se.passed)throw new lt({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${L}" failed: ${se.reason}`,guardrailName:L,guardrailType:"input",userMessage:se.reason??"Input validation failed",agentName:M.name,input:N});se.transformed!==void 0&&(N=se.transformed);}re("onAgentStart",{agentId:i,agentName:M.name,input:N,timestamp:b}),S&&S.record({type:"agent_start",timestamp:Date.now(),agentId:i,snapshotId:null,inputLength:N.length,..."description"in M&&M.description?{description:String(M.description)}:{},...M.instructions?{instructions:M.instructions.slice(0,ae)}:{},input:N.slice(0,ae)}),K.batch(()=>{let $=ot(x);st(x,{...$,status:"running",input:N,startedAt:Date.now()});}),A.status="running",A.lastInput=N;{let $=await zt("pre_agent_run",i,M.name,N,g?.signal);if($.skip)return A.status="completed",St(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};N=$.input;}let ne=e,ie=g?.outputSchema!==void 0?g.outputSchema:p.outputSchema;ie&&(ne=Rn(e,{schema:ie,maxRetries:g?.maxSchemaRetries??p.maxSchemaRetries??2,extractJson:p.extractJson,schemaDescription:p.schemaDescription}));let le=p.retry??m,Y=await hn(ne,M,N,{...p.runOptions,...g,signal:ee.signal,onMessage:$=>{let Q=[...tn(x),$];Ct(x,Q.length>Re?Q.slice(-Re):Q),g?.onMessage?.($);},onToolCall:async $=>{let Q=[...u.toolCall??[],...p.guardrails?.toolCall??[]].map((We,je)=>At(We,je,"toolCall"));for(let We of Q){let{name:je}=We,Le={agentName:M.name,input:N,facts:gt(x)},Jt=Date.now(),Ye=await xt(We,{toolCall:$,agentName:M.name,input:N},Le);if(re("onGuardrailCheck",{agentId:i,guardrailName:je,guardrailType:"toolCall",passed:Ye.passed,reason:Ye.reason,durationMs:Date.now()-Jt,timestamp:Date.now()}),!Ye.passed)throw new lt({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${je}" failed: ${Ye.reason}`,guardrailName:je,guardrailType:"toolCall",userMessage:Ye.reason??"Tool call blocked",data:{toolCall:$},agentName:M.name,input:N})}if(!y){let We=`tool-${i}-${$.id}`,je={id:We,type:"tool_call",agentName:M.name,description:`Tool call: ${$.name}`,data:$,requestedAt:Date.now()};Be.set(We,i),K.batch(()=>{let Le=kt(x);mt(x,{...Le,pending:[...Le.pending,je]});}),R?.(je),await io(i,We,g?.signal);}let se=[...nn(x),$];Mt(x,se.length>_e?se.slice(-_e):se),g?.onToolCall?.($);}},le?{...le,onRetry:($,L,Q)=>{le.onRetry?.($,L,Q),re("onAgentRetry",{agentId:i,agentName:M.name,input:N,attempt:$,error:L,delayMs:Q,timestamp:Date.now()});}}:void 0);if((await zt("pre_output_guardrails",i,M.name,N,g?.signal)).skip)return A.status="completed",St(),Y;let q=[...u.output??[],...p.guardrails?.output??[]].map(($,L)=>At($,L,"output"));for(let $ of q){let{name:L}=$,Q={agentName:M.name,input:N,facts:gt(x)},ke=Date.now(),se=await xt($,{output:Y.output,agentName:M.name,input:N,messages:Y.messages},Q);if(re("onGuardrailCheck",{agentId:i,guardrailName:L,guardrailType:"output",passed:se.passed,reason:se.reason,durationMs:Date.now()-ke,timestamp:Date.now()}),!se.passed)throw new lt({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${L}" failed: ${se.reason}`,guardrailName:L,guardrailType:"output",userMessage:se.reason??"Output validation failed",agentName:M.name,input:N});se.transformed!==void 0&&(Y.output=se.transformed);}K.batch(()=>{let $=ot(x);st(x,{...$,status:"completed",output:Y.output,tokenUsage:$.tokenUsage+Y.totalTokens,turnCount:$.turnCount+Y.messages.length,completedAt:Date.now()});}),A.status="completed",A.lastOutput=Y.output,A.runCount++,A.totalTokens+=Y.totalTokens,St();let pe=Je("__coord"),be=!1,oe=0;if(K.batch(()=>{let L=adapterUtils.getBridgeFact(pe,"__globalTokens")+Y.totalTokens;if(He=L,adapterUtils.setBridgeFact(pe,"__globalTokens",L),h&&z){oe=L/h;let Q=adapterUtils.getBridgeFact(pe,"__budgetWarningFired");oe>=I&&!Q&&(adapterUtils.setBridgeFact(pe,"__budgetWarningFired",!0),be=!0);}}),be)try{z({currentTokens:He,maxBudget:h,percentage:oe});}catch($){ue&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",$);}if(B&&Y.messages.length>0)try{let Q=B.getContextMessages().some(ke=>ke.role==="user"&&ke.content===N)?Y.messages.filter(ke=>!(ke.role==="user"&&ke.content===N)):Y.messages;B.addMessages(Q);}catch($){ue&&console.debug("[Directive MultiAgent] Memory addMessages failed:",$);}if(re("onAgentComplete",{agentId:i,agentName:M.name,input:N,output:Y.output,tokenUsage:Y.totalTokens,durationMs:Date.now()-b,timestamp:Date.now()}),S){let $=typeof Y.output=="string"?Y.output:It(Y.output);S.record({type:"agent_complete",timestamp:Date.now(),agentId:i,snapshotId:null,outputLength:$.length,totalTokens:Y.totalTokens,inputTokens:Y.tokenUsage?.inputTokens??0,outputTokens:Y.tokenUsage?.outputTokens??0,durationMs:Date.now()-b,modelId:p.agent.model??void 0,output:$.slice(0,ae)});}return te&&te.recordSuccess(i,Date.now()-b),Pe(),await zt("post_run",i,M.name,N,g?.signal),Y}catch(B){if(A.status="error",A.lastError=B instanceof Error?B.message:String(B),St(),K.batch(()=>{let X=ot(x);st(x,{...X,status:"error",error:B instanceof Error?B.message:String(B),completedAt:Date.now()});}),re("onAgentError",{agentId:i,agentName:M.name,input:N,error:B instanceof Error?B:new Error(String(B)),durationMs:Date.now()-b,timestamp:Date.now()}),S){let X={type:"agent_error",timestamp:Date.now(),agentId:i,snapshotId:null,errorMessage:B instanceof Error?B.message:String(B),durationMs:Date.now()-b};Xn(B)&&(X.guardrailName=B.guardrailName,X.guardrailType=B.guardrailType,X.errorCode=B.code),S.record(X);}throw te&&te.recordFailure(i,Date.now()-b,B instanceof Error?B:new Error(String(B))),Pe(),B}finally{Z&&clearTimeout(Z),ce&&g?.signal&&g.signal.removeEventListener("abort",ce),V();}}function zn(i,p,f={}){if(Ae(),Ee[i]){let Y=[],O=[],q=false,pe=Q=>{if(q)return;let ke=O.shift();ke?ke(Q):Y.push(Q);},be=()=>{q=true;for(let Q of O)Q(null);O.length=0;},oe=new AbortController,$;f.signal&&(f.signal.aborted?oe.abort():($=()=>oe.abort(),f.signal.addEventListener("abort",$,{once:true})));let L=Xe(i,p,{signal:oe.signal}).then(Q=>{let ke=typeof Q.output=="string"?Q.output:It(Q.output);return pe({type:"token",data:ke,tokenCount:0}),pe({type:"done",totalTokens:0,duration:0,droppedTokens:0}),be(),Q},Q=>{throw pe({type:"error",error:Q}),be(),Q}).finally(()=>{$&&f.signal&&f.signal.removeEventListener("abort",$);});return L.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let Q=Y.shift();if(Q){if(yield Q,Q.type==="done"||Q.type==="error")return}else {if(q)return;{let ke=await new Promise(se=>O.push(se));if(!ke||(yield ke,ke.type==="done"||ke.type==="error"))return}}}}},result:L,abort:()=>{oe.abort();}}}if(!P[i]){let Y=[...Object.keys(P),...Object.keys(Ee)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${i}". Registered handlers: ${Y}`)}let x=1e4,A=1e5,M=new AbortController,N=[],J=[],V=false,ee=Date.now(),Z=0,ce="",B;f.signal&&(B=()=>M.abort(),f.signal.addEventListener("abort",B,{once:true}));let X=()=>{B&&f.signal&&f.signal.removeEventListener("abort",B);},ye=Y=>{if(V)return;let O=J.shift();O?O(Y):(N.length>=x&&N.shift(),N.push(Y));},ne=()=>{V=true,X();for(let Y of J)Y(null);J.length=0;},ie=(async()=>{ye({type:"progress",phase:"starting",message:"Running input guardrails"});try{let Y=await Xe(i,p,{signal:M.signal,onMessage:q=>{if(ye({type:"message",message:q}),q.role==="assistant"&&q.content){let pe=Math.ceil(q.content.length/4);Z+=pe,ce+=q.content,ce.length>A&&(ce=ce.slice(-A)),ye({type:"token",data:q.content,tokenCount:Z});}},onToolCall:async q=>{ye({type:"tool_start",tool:q.name,toolCallId:q.id,arguments:q.arguments}),q.result&&ye({type:"tool_end",tool:q.name,toolCallId:q.id,result:q.result});}}),O=Date.now()-ee;return ye({type:"done",totalTokens:Y.totalTokens,duration:O,droppedTokens:0}),ne(),Y}catch(Y){throw Y instanceof lt&&ye({type:"guardrail_triggered",guardrailName:Y.guardrailName,reason:Y.message,partialOutput:ce,stopped:true}),ye({type:"error",error:Y instanceof Error?Y:new Error(String(Y))}),ne(),Y}})(),le={[Symbol.asyncIterator](){return {async next(){return N.length>0?{done:false,value:N.shift()}:V?{done:true,value:void 0}:new Promise(Y=>{J.push(O=>{Y(O===null?{done:true,value:void 0}:{done:false,value:O});});})}}}};return ie.catch(()=>{}),{stream:le,result:ie,abort:()=>{M.abort(),ne();}}}async function co(i,p,f){let g=Date.now();f&&re("onPatternStart",{patternId:f,patternType:"parallel",input:p,timestamp:g});let b=new AbortController,x;i.timeout&&(x=setTimeout(()=>b.abort(),i.timeout));let A;try{let M=i.handlers.map(V=>Xe(V,p,{signal:b.signal,patternId:f}).catch(ee=>{if(i.minSuccess===void 0)throw ee;return null})),N=await Promise.all(M),J=N.filter(V=>V!==null);if(i.minSuccess!==void 0&&J.length<i.minSuccess){let V=N.length-J.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${J.length}/${i.handlers.length} agents succeeded (minimum required: ${i.minSuccess}, failed: ${V})`)}return i.merge(J)}catch(M){throw A=M instanceof Error?M:new Error(String(M)),M}finally{x&&clearTimeout(x),f&&re("onPatternComplete",{patternId:f,patternType:"parallel",durationMs:Date.now()-g,timestamp:Date.now(),error:A});}}async function Yt(i,p,f){let g=un(i);if(f?.when)try{if(!f.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 b={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 p.save(b),S&&S.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:i.id,patternType:i.type,step:g}),re("onCheckpointSave",{checkpointId:i.id,patternType:i.type,step:g,timestamp:Date.now()}),i.id}catch(b){let x=b instanceof Error?b:new Error(String(b));return console.error(`[Directive MultiAgent] ${i.type}: checkpoint save failed:`,x),re("onCheckpointError",{patternType:i.type,step:g,error:x,timestamp:Date.now()}),null}}async function Jn(i,p,f,g){let b=Date.now(),x=f??"__inline_sequential";f&&re("onPatternStart",{patternId:f,patternType:"sequential",input:p,timestamp:b});let A=i.checkpoint,M=A?.store??E,N=A?.everyN??5,J=A?.labelPrefix??"sequential",V=g?.currentInput??p,ee,Z=g?.results?[...g.results]:[],ce=g?.step??0,B;if(g&&Z.length>0){let X=Z[Z.length-1];ee={output:X.output,totalTokens:X.totalTokens,messages:[],toolCalls:[]};}try{for(let X=ce;X<i.handlers.length;X++){let ye=i.handlers[X];{let ne=await zt("pre_pattern_step",ye,P[ye]?.agent.name??ye,V,void 0,{patternId:f});if(ne.skip)continue;V=ne.input;}try{if(ee=await Xe(ye,V,{patternId:f}),Z.push({agentId:ye,output:ee.output,totalTokens:ee.totalTokens}),X<i.handlers.length-1&&(i.transform?V=i.transform(ee.output,ye,X):V=typeof ee.output=="string"?ee.output:It(ee.output)),A&&M&&X>ce&&(X-ce)%N===0){let ne=X<i.handlers.length-1?V:p;await Yt({type:"sequential",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${J}:step-${X+1}`,patternId:x,stepsTotal:i.handlers.length,step:X+1,currentInput:ne,results:[...Z]},M,A);}}catch(ne){if(!i.continueOnError)throw ne}}if(!ee)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return i.extract?i.extract(ee.output):ee.output}catch(X){throw B=X instanceof Error?X:new Error(String(X)),X}finally{f&&re("onPatternComplete",{patternId:f,patternType:"sequential",durationMs:Date.now()-b,timestamp:Date.now(),error:B});}}async function Wn(i,p,f,g){let b=Date.now(),x=f??"__inline_supervisor";f&&re("onPatternStart",{patternId:f,patternType:"supervisor",input:p,timestamp:b});let A=i.checkpoint,M=A?.store??E,N=A?.everyN??5,J=A?.labelPrefix??"supervisor",V=[],ee=g?.workerResults?[...g.workerResults]:[],Z=i.maxRounds??5;if(Z<1||!Number.isFinite(Z))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let ce;if(g)for(let X of g.workerResults)V.push({output:X.output,totalTokens:X.totalTokens,messages:[],toolCalls:[]});let B=g?.round??0;try{let X;g?X={output:g.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:X=await Xe(i.supervisor,p);let ye=g?.currentInput??p;for(let ne=B;ne<Z;ne++){let ie=X.output,le;if(typeof ie=="string")try{let O=ie.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();le=JSON.parse(O);}catch{try{let O=ie.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),q=wn(O);if(q&&typeof q=="object"&&"action"in q)le=q;else throw new Error("extracted value missing 'action' property")}catch{throw new Error(`[Directive MultiAgent] Supervisor "${i.supervisor}" returned unparseable output (round ${ne+1}). Expected JSON with { action, worker?, workerInput? } but got: ${ie.slice(0,200)}`)}}else if(ie&&typeof ie=="object"&&"action"in ie)le=ie;else throw new Error(`[Directive MultiAgent] Supervisor "${i.supervisor}" returned invalid output (round ${ne+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(le.action==="complete"||!le.worker)break;if(!i.workers.includes(le.worker)){let O=i.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${le.worker}". Available workers: ${O}`)}let Y=await Xe(le.worker,le.workerInput??"",{patternId:f});V.push(Y),ee.push({output:Y.output,totalTokens:Y.totalTokens}),ye=`Worker ${le.worker} completed with result: ${It(Y.output)}`,X=await Xe(i.supervisor,ye,{patternId:f}),A&&M&&ne>B&&(ne-B)%N===0&&await Yt({type:"supervisor",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${J}:round-${ne+1}`,patternId:x,stepsTotal:i.maxRounds??10,round:ne+1,supervisorOutput:X.output,workerResults:[...ee],currentInput:ye},M,A);}return i.extract?i.extract(X.output,V):X.output}catch(X){throw ce=X instanceof Error?X:new Error(String(X)),X}finally{f&&re("onPatternComplete",{patternId:f,patternType:"supervisor",durationMs:Date.now()-b,timestamp:Date.now(),error:ce});}}async function Vn(i,p,f,g){let b=Date.now(),x=f??"__inline_dag";f&&re("onPatternStart",{patternId:f,patternType:"dag",input:p,timestamp:b});let A=i.checkpoint,M=A?.store??E,N=A?.everyN??5,J=A?.labelPrefix??"dag",V=g?.completedCount??0,ee=0,Z=Promise.resolve(),ce=Object.keys(i.nodes).length,B={input:g?.input??p,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};for(let O of Object.keys(i.nodes))B.statuses[O]="pending";if(g){for(let[O,q]of Object.entries(g.statuses))B.statuses[O]=q;for(let[O,q]of Object.entries(g.outputs))B.outputs[O]=q;for(let[O,q]of Object.entries(g.errors))B.errors[O]=q;for(let[O,q]of Object.entries(g.nodeResults))B.results[O]={output:q.output,totalTokens:q.totalTokens,messages:[],toolCalls:[]};}let X=i.onNodeError??"fail",ye=i.maxConcurrent??Number.POSITIVE_INFINITY,ne=new AbortController,ie,le;i.timeout&&(ie=setTimeout(()=>ne.abort(),i.timeout));try{let pe=function(){for(let[oe,$]of Object.entries(i.nodes)){if(B.statuses[oe]!=="pending")continue;let L=X==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if(($.deps??[]).every(ke=>L.has(B.statuses[ke]))){if(X==="skip-downstream"&&($.deps??[]).some(se=>B.statuses[se]==="error"||B.statuses[se]==="skipped")){B.statuses[oe]="skipped",S&&S.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:oe,status:"skipped",deps:$.deps??[]}),re("onDagNodeSkipped",{patternId:x,nodeId:oe,agentId:$.handler,nodeType:Ee[$.handler]?"task":"agent",reason:"upstream dependency errored",timestamp:Date.now()});continue}if($.when)try{if(!$.when(B)){B.statuses[oe]="skipped",S&&S.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:oe,status:"skipped",deps:$.deps??[]}),re("onDagNodeSkipped",{patternId:x,nodeId:oe,agentId:$.handler,nodeType:Ee[$.handler]?"task":"agent",reason:"when() returned false",timestamp:Date.now()});continue}}catch{B.statuses[oe]="skipped";continue}B.statuses[oe]="ready";}}};var Y=pe;if(!g)for(let[oe,$]of Object.entries(i.nodes))(!$.deps||$.deps.length===0)&&(B.statuses[oe]="ready");let O=new Set,q=0;async function be(oe,$){let L=Date.now();B.statuses[oe]="running",S&&S.record({type:"dag_node_update",timestamp:L,snapshotId:null,nodeId:oe,status:"running",deps:$.deps??[]}),re("onDagNodeStart",{patternId:x,nodeId:oe,agentId:$.handler,nodeType:Ee[$.handler]?"task":"agent",timestamp:L});let Q;if($.transform)Q=$.transform(B);else if($.deps&&$.deps.length>0){let je=Object.create(null);for(let Le of $.deps)B.outputs[Le]!==void 0&&(je[Le]=B.outputs[Le]);Q=JSON.stringify(je);}else Q=p;let ke=new AbortController,se;$.timeout&&(se=setTimeout(()=>ke.abort(),$.timeout));let We=()=>ke.abort();ne.signal.addEventListener("abort",We,{once:!0});try{let je=await Xe($.handler,Q,{signal:ke.signal,patternId:x});if(B.outputs[oe]=je.output,B.results[oe]=je,B.statuses[oe]="completed",S&&S.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:oe,status:"completed",deps:$.deps??[]}),re("onDagNodeComplete",{patternId:x,nodeId:oe,agentId:$.handler,nodeType:Ee[$.handler]?"task":"agent",durationMs:Date.now()-L,timestamp:Date.now()}),V++,A&&M&&V>ee&&V-ee>=N){ee=V;let Le=Object.create(null);for(let[Ye,Et]of Object.entries(B.results))Le[Ye]={output:Et.output,totalTokens:Et.totalTokens};let Jt={type:"dag",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${J}:node-${V}`,patternId:x,stepsTotal:ce,statuses:{...B.statuses},outputs:{...B.outputs},errors:{...B.errors},completedCount:V,nodeResults:Le,input:B.input};Z=Z.then(()=>Yt(Jt,M,A)),await Z;}}catch(je){if(B.statuses[oe]="error",B.errors[oe]=je instanceof Error?je.message:String(je),S&&S.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:oe,status:"error",deps:$.deps??[]}),re("onDagNodeError",{patternId:x,nodeId:oe,agentId:$.handler,nodeType:Ee[$.handler]?"task":"agent",error:je instanceof Error?je:new Error(String(je)),durationMs:Date.now()-L,timestamp:Date.now()}),X==="fail")throw ne.abort(),je}finally{se&&clearTimeout(se),ne.signal.removeEventListener("abort",We),q--;}}for(;!ne.signal.aborted;){pe();let oe=Object.entries(i.nodes).filter(([L])=>B.statuses[L]==="ready").sort(([,L],[,Q])=>(Q.priority??0)-(L.priority??0));for(let[L,Q]of oe){if(q>=ye)break;q++;let ke=be(L,Q).finally(()=>{O.delete(ke);});O.add(ke);}if(!Object.values(B.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(B)}catch(O){throw le=O instanceof Error?O:new Error(String(O)),O}finally{ie&&clearTimeout(ie),f&&re("onPatternComplete",{patternId:f,patternType:"dag",durationMs:Date.now()-b,timestamp:Date.now(),error:le});}}async function Dn(i,p,f,g){let b=Date.now(),x=f??"__inline_reflect",A=i.maxIterations??2;if(A<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");ue&&A>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let M=i.signal,N,J;if(i.timeout&&!M){let O=new AbortController;N=setTimeout(()=>O.abort(),i.timeout),M=O.signal;}else if(i.timeout&&M){let O=new AbortController;N=setTimeout(()=>O.abort(),i.timeout),J=()=>O.abort(),M.addEventListener("abort",J,{once:true}),M=O.signal;}let V=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"}}),ee=i.buildRetryInput??((O,q,pe)=>`${O}
|
|
57
57
|
|
|
58
58
|
Feedback on your previous response:
|
|
59
|
-
${
|
|
59
|
+
${q}
|
|
60
60
|
|
|
61
|
-
Please improve your response.`);
|
|
61
|
+
Please improve your response.`);f&&re("onPatternStart",{patternId:x,patternType:"reflect",input:p,timestamp:b});let Z=i.checkpoint,ce=Z?.store??E,B=Z?.everyN??5,X=Z?.labelPrefix??"reflect",ye,ne,ie=g?.history?[...g.history]:[],le=g?.producerOutputs?[...g.producerOutputs]:[],Y=g?.iteration??0;g?.lastProducerOutput!=null&&(ne={output:g.lastProducerOutput,totalTokens:0,messages:[],toolCalls:[]});try{let O=g?.effectiveInput??p;for(let q=Y;q<A;q++){if(M?.aborted){if(ne)return Se=ie,i.extract?i.extract(ne.output):ne.output;throw new DOMException("Reflect pattern aborted","AbortError")}let pe=Date.now(),be=await Xe(i.handler,O,{signal:M,patternId:f});ne=be;let oe=typeof be.output=="string"?be.output:It(be.output);if(M?.aborted)return Se=ie,i.extract?i.extract(be.output):be.output;let $=await Xe(i.evaluator,oe,{signal:M,patternId:f}),L;try{L=V($.output);}catch(se){L={passed:!1,feedback:`Evaluation parse error: ${se instanceof Error?se.message:String(se)}`};}if(!L.passed&&i.threshold!=null&&L.score!=null){let se=typeof i.threshold=="function"?i.threshold(q):i.threshold;L.score>=se&&(L={...L,passed:!0});}let Q=Date.now()-pe;le.push({output:be.output,score:L.score});let ke={iteration:q,passed:L.passed,score:L.score,feedback:L.feedback,durationMs:Q,producerTokens:be.totalTokens??0,evaluatorTokens:$.totalTokens??0};if(ie.push(ke),i.onIteration)try{i.onIteration(ke);}catch(se){ue&&console.warn("[Directive MultiAgent] onIteration callback threw:",se);}if(S&&S.record({type:"reflection_iteration",timestamp:Date.now(),snapshotId:null,iteration:q,passed:L.passed,score:L.score,durationMs:Q,producerTokens:be.totalTokens,evaluatorTokens:$.totalTokens}),L.passed)return Se=ie,i.extract?i.extract(be.output):be.output;if(q<A-1&&L.feedback)try{O=ee(p,L.feedback,q);}catch(se){ue&&console.warn("[Directive MultiAgent] buildRetryInput threw, using default format:",se),O=`${p}
|
|
62
62
|
|
|
63
63
|
Feedback on your previous response:
|
|
64
64
|
${L.feedback}
|
|
65
65
|
|
|
66
|
-
Please improve your response.`;}
|
|
67
|
-
`+Object.entries(
|
|
68
|
-
`)))):
|
|
69
|
-
`+Object.entries(
|
|
70
|
-
`))));});});await Promise.all(
|
|
66
|
+
Please improve your response.`;}Z&&ce&&q>=Y&&(q-Y+1)%B===0&&await Yt({type:"reflect",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${X}:iter-${q+1}`,patternId:x,stepsTotal:A,iteration:q+1,effectiveInput:O,history:[...ie],producerOutputs:[...le],lastProducerOutput:be.output},ce,Z);}if(Se=ie,i.onExhausted==="throw")throw new an({iterations:A,history:ie.map(q=>({passed:q.passed,feedback:q.feedback,score:q.score})),lastResult:ne,totalTokens:ne.totalTokens??0});if(i.onExhausted==="accept-best"&&le.length>0){!le.some($=>$.score!=null)&&ue&&console.warn("[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.");let pe=le.length-1,be=Number.NEGATIVE_INFINITY;for(let $=0;$<le.length;$++){let L=le[$].score;L!=null&&L>be&&(be=L,pe=$);}let oe=le[pe].output;return i.extract?i.extract(oe):oe}return i.extract?i.extract(ne.output):ne.output}catch(O){throw Se=ie,ye=O instanceof Error?O:new Error(String(O)),O}finally{N&&clearTimeout(N),J&&i.signal&&i.signal.removeEventListener("abort",J),f&&re("onPatternComplete",{patternId:x,patternType:"reflect",durationMs:Date.now()-b,timestamp:Date.now(),error:ye});}}async function br(i,p,f){if(i.handlers.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.handlers.length)throw new Error(`[Directive MultiAgent] Race pattern minSuccess (${g}) exceeds agent count (${i.handlers.length})`);for(let Z of i.handlers)if(!P[Z]&&!Ee[Z])throw new Error(`[Directive MultiAgent] Race: unknown handler "${Z}"`);let b=Date.now(),x=f??"__inline_race",A=new AbortController,M,N;i.signal&&(i.signal.aborted?A.abort():(N=()=>A.abort(),i.signal.addEventListener("abort",N,{once:true}))),f&&re("onPatternStart",{patternId:x,patternType:"race",input:p,timestamp:b}),S&&S.record({type:"race_start",timestamp:b,snapshotId:null,patternId:x,agents:i.handlers}),i.timeout&&(M=setTimeout(()=>A.abort(),i.timeout));let J,V=Object.create(null),ee=[...i.handlers];try{let Z=i.handlers.map(q=>({agentId:q,promise:Xe(q,p,{signal:A.signal,patternId:f}).then(pe=>({agentId:q,result:pe}))})),ce=Z.map(q=>q.promise.catch(()=>{})),B=[],X=await new Promise((q,pe)=>{let be=0,oe=!1;for(let $ of Z)$.promise.then(L=>{be++,!oe&&(B.push(L),B.length>=g&&(oe=!0,A.abort(),q([...B])));}).catch(L=>{if(V[$.agentId]=L instanceof Error?L.message:String(L),be++,oe)return;let Q=Object.keys(V).length,ke=B.length+(Z.length-be);be===Z.length&&Q===Z.length?(oe=!0,pe(new Error(`[Directive MultiAgent] Race: all ${Z.length} agents failed.
|
|
67
|
+
`+Object.entries(V).map(([se,We])=>` - ${se}: ${We}`).join(`
|
|
68
|
+
`)))):ke<g&&(oe=!0,pe(new Error(`[Directive MultiAgent] Race: cannot reach minSuccess (${g}). ${Q} agent(s) failed.
|
|
69
|
+
`+Object.entries(V).map(([se,We])=>` - ${se}: ${We}`).join(`
|
|
70
|
+
`))));});});await Promise.all(ce).catch(()=>{});let ye=X[0],ne=ye.agentId,ie=new Set(X.map(q=>q.agentId)),le=ee.filter(q=>!ie.has(q)&&!(q in V));S&&(S.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:x,winnerId:ne,durationMs:Date.now()-b}),le.length>0&&S.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:x,cancelledIds:le,reason:"winner_found"}));let Y=i.extract?i.extract(ye.result):ye.result.output,O=g>1?X.map(q=>({agentId:q.agentId,result:i.extract?i.extract(q.result):q.result.output})):void 0;return {winnerId:ne,result:Y,allResults:O}}catch(Z){throw J=Z instanceof Error?Z:new Error(String(Z)),S&&S.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:x,cancelledIds:ee,reason:A.signal.aborted?"timeout":"all_failed"}),Z}finally{M&&clearTimeout(M),N&&i.signal&&i.signal.removeEventListener("abort",N),f&&re("onPatternComplete",{patternId:x,patternType:"race",durationMs:Date.now()-b,timestamp:Date.now(),error:J});}}async function Pn(i,p,f,g){let{handlers:b,evaluator:x,maxRounds:A=2,extract:M,parseJudgement:N}=i;if(b.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(A<1||!Number.isFinite(A))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let J=i.signal,V,ee;if(i.timeout&&!J){let L=new AbortController;V=setTimeout(()=>L.abort(),i.timeout),J=L.signal;}else if(i.timeout&&J){let L=new AbortController;V=setTimeout(()=>L.abort(),i.timeout),ee=()=>L.abort(),J.addEventListener("abort",ee,{once:true}),J=L.signal;}let ce=N??(L=>{if(typeof L=="string")try{let Q=JSON.parse(L);return Q&&typeof Q=="object"&&typeof Q.winnerId=="string"?Q:(ue&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:b[0]})}catch{return ue&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:b[0]}}return L&&typeof L=="object"&&"winnerId"in L&&typeof L.winnerId=="string"?L:(ue&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:b[0]})}),B=g?.rounds?[...g.rounds]:[],X=g?.currentInput??p,ye=g?.lastWinnerId??b[0],ne=g?.lastWinnerOutput??void 0,ie=g?.round??0,le=i.checkpoint,Y=le?.store??E,O=le?.everyN??5,q=le?.labelPrefix??"debate",pe=f??"__inline_debate",be=Date.now(),oe=g?.tokensConsumed??0;f&&re("onPatternStart",{patternId:pe,patternType:"debate",input:p,timestamp:be});let $;try{for(let Q=ie;Q<A&&!J?.aborted;Q++){let ke=b.map(async Ye=>{let Et=await Xe(Ye,X,{signal:J,patternId:pe});return oe+=Et.totalTokens,{agentId:Ye,output:Et.output}}),se=await Promise.all(ke);if(J?.aborted)break;let We=JSON.stringify({round:Q+1,totalRounds:A,proposals:se.map(Ye=>({agentId:Ye.agentId,proposal:Ye.output}))}),je=await Xe(x,We,{signal:J,patternId:pe});oe+=je.totalTokens;let Le=ce(je.output);if(b.includes(Le.winnerId)||(Le.winnerId=b[0]),B.push({proposals:se,judgement:Le}),S&&S.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:pe,round:Q+1,totalRounds:A,winnerId:Le.winnerId,score:Le.score,agentCount:b.length}),ye=Le.winnerId,ne=se.find(Ye=>Ye.agentId===Le.winnerId)?.output??se[0].output,le&&Y&&Q>ie&&(Q-ie)%O===0){let Ye={type:"debate",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${q}:round-${Q+1}`,patternId:pe,stepsTotal:A,round:Q+1,currentInput:X,rounds:[...B],lastWinnerId:ye,lastWinnerOutput:ne,tokensConsumed:oe};await Yt(Ye,Y,le);}Q<A-1&&Le.feedback&&(X=`Previous round feedback: ${Le.feedback}
|
|
71
71
|
|
|
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=`
|
|
72
|
+
Original task: ${p}`);}if(B.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let L=M?M(ne):ne;return {winnerId:ye,result:L,rounds:B}}catch(L){throw $=L instanceof Error?L:new Error(String(L)),L}finally{V&&clearTimeout(V),ee&&i.signal&&i.signal.removeEventListener("abort",ee),f&&re("onPatternComplete",{patternId:pe,patternType:"debate",durationMs:Date.now()-be,timestamp:Date.now(),error:$});}}let lo=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Qt(i,p){for(let f of Object.keys(p))lo.has(f)||(i[f]=p[f]);}function po(i,p){let f=Object.create(null);for(let[N,J]of Object.entries(p))for(let V of J.produces)f[V]||(f[V]=[]),f[V].push(N);let g=Object.keys(p),b=Object.create(null),x=Object.create(null);for(let N of g)b[N]=0,x[N]=[];for(let[N,J]of Object.entries(p))for(let V of J.requires??[]){let ee=f[V];if(ee)for(let Z of ee)Z!==N&&(x[Z].push(N),b[N]=(b[N]??0)+1);}let A=[];for(let N of g)b[N]===0&&A.push(N);let M=0;for(;A.length>0;){let N=A.shift();M++;for(let J of x[N]??[])b[J]--,b[J]===0&&A.push(J);}if(M!==g.length)throw new Error(`[Directive MultiAgent] goal pattern "${i}": cycle detected in produces/requires graph. Visited ${M}/${g.length} nodes.`)}function go(i,p){let f=Object.create(null);for(let[g,b]of Object.entries(p))for(let x of b.produces)f[x]||(f[x]=[]),f[x].push(g);for(let[g,b]of Object.entries(f))b.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${i}": fact key "${g}" is produced by multiple nodes: ${b.join(", ")}. Last writer wins.`);}function nt(i,...p){if(i)try{return i(...p)}catch(f){console.error("[Directive MultiAgent] goal: user callback threw:",f);return}}async function mo(i,...p){if(i)try{return await i(...p)}catch(f){console.error("[Directive MultiAgent] goal: user callback threw:",f);return}}function Kn(i,p,f){let g=p.slice(-3),b=g.length>0?g.reduce((M,N)=>M+N.satisfactionDelta,0)/g.length:0,x=null;b>0&&i<1&&(x=Math.ceil((1-i)/b));let A=false;if(p.length>=6){let M=p.slice(-3),N=p.slice(-6,-3),J=M.reduce((ee,Z)=>ee+Z.satisfactionDelta,0)/3,V=N.reduce((ee,Z)=>ee+Z.satisfactionDelta,0)/3;A=J<V*.5;}return {satisfaction:i,progressRate:b,estimatedStepsRemaining:x,decelerating:A}}function dn(i){return i==null||!Number.isFinite(i)?0:Math.max(0,Math.min(1,i))}async function In(i,p,f,g){let{nodes:b,when:x,satisfaction:A,maxSteps:M=50,extract:N,selectionStrategy:J,relaxation:V,onStep:ee,onStall:Z}=i,ce=Object.create(null);for(let[Ne,Ge]of Object.entries(b))ce[Ne]={...Ge};if(Object.keys(ce).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let X=f??"__goal";for(let[Ne,Ge]of Object.entries(ce))if(!P[Ge.handler]&&!Ee[Ge.handler])throw new Error(`[Directive MultiAgent] goal node "${Ne}" references unregistered handler "${Ge.handler}"`);po(X,ce),go(X,ce);for(let[Ne,Ge]of Object.entries(ce))Ge.extractOutput||console.warn(`[Directive MultiAgent] goal node "${Ne}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let ye=i.signal,ne,ie,le=i.timeout??3e5;if(le&&!ye){let Ne=new AbortController;ne=setTimeout(()=>Ne.abort(),le),ye=Ne.signal;}else if(le&&ye){let Ne=new AbortController;ne=setTimeout(()=>Ne.abort(),le),ie=()=>Ne.abort(),ye.addEventListener("abort",ie,{once:true}),ye=Ne.signal;}let Y=Date.now();if(S){let Ne=Object.values(ce).map(Ge=>Ge.handler);S.record({type:"pattern_start",timestamp:Y,snapshotId:null,patternId:X,patternType:"goal",handlers:Ne,taskIds:Ne.filter(Ge=>Ee[Ge]!=null)});}re("onPatternStart",{patternId:X,patternType:"goal",input:typeof p=="string"?p:JSON.stringify(p),timestamp:Y});let O=Object.create(null);g?Qt(O,g.facts):typeof p=="string"?O.input=p:Qt(O,p);let q=g?[...g.executionOrder]:[],pe=Object.create(null);if(g)for(let[Ne,Ge]of Object.entries(g.nodeOutputs))pe[Ne]={output:Ge.output,totalTokens:Ge.totalTokens};let be=g?[...g.stepMetrics]:[],oe=g?[...g.relaxations]:[],$=new Set(g?.completedNodes??[]),L=new Map(g?Object.entries(g.failedNodes).map(([Ne,Ge])=>[Ne,Ge]):[]),Q=new Map(g?Object.entries(g.nodeInputHashes):[]),ke=Object.create(null);if(g)for(let[Ne,Ge]of Object.entries(g.agentMetrics))ke[Ne]={runs:Ge.runs,avgSatisfactionDelta:Ge.runs>0?Ge.totalDelta/Ge.runs:0,tokens:Ge.tokens,totalDelta:Ge.totalDelta};let se=g?.stallSteps??0,We=g?.appliedRelaxationTiers??0,je=g?.lastSatisfaction??0,Le,Jt=false,Ye=g?.step??0,Et=i.checkpoint,bo=Et?.everyN??5,kr=Et?.store??E,vo=Et?.labelPrefix??"goal",wr,ko=3;try{for(let ze=Ye;ze<M;ze++){if(nt(x,O)===!0){Jt=!0;let Ie=Date.now()-Y,Me=Object.values(pe).reduce((Fe,Ze)=>Fe+Ze.totalTokens,0);return {achieved:!0,result:nt(N,O)??O,facts:{...O},executionOrder:q,nodeResults:pe,steps:ze,totalTokens:Me,durationMs:Ie,stepMetrics:be,relaxations:oe}}if(ye?.aborted){let Ie=Date.now()-Y,Me=Object.values(pe).reduce((Fe,Ze)=>Fe+Ze.totalTokens,0);return {achieved:!1,result:nt(N,O)??O,facts:{...O},executionOrder:q,nodeResults:pe,steps:ze,totalTokens:Me,durationMs:Ie,stepMetrics:be,relaxations:oe,error:"Aborted or timed out"}}let Wt=[];for(let[Ie,Me]of Object.entries(ce)){if((L.get(Ie)??0)>=ko)continue;let Fe=Me.requires??[];if(Fe.every(Ve=>O[Ve]!=null)){if($.has(Ie)){if(!Me.allowRerun)continue;let Ve=JSON.stringify(Fe.map(rt=>O[rt]));if(Q.get(Ie)===Ve)continue}Wt.push(Ie);}}let qt=Wt;if(J&&Wt.length>0){let Ie=A?nt(A,O)??0:nt(x,O)===!0?1:0,Me=dn(Ie),Fe=Kn(Me,be,ze),Ze=Object.create(null);for(let[rt,qe]of Object.entries(ke))Ze[rt]={runs:qe.runs,avgSatisfactionDelta:qe.runs>0?qe.totalDelta/qe.runs:0,tokens:qe.tokens};let Ve=J.select(Wt,Ze,Fe);qt=Ve&&Ve.length>0?Ve:Wt;}if(qt.sort((Ie,Me)=>(ce[Me].priority??0)-(ce[Ie].priority??0)),nt(ee,ze,{...O},qt),qt.length===0){se++;let Ie=!1;if(V)for(let Me=We;Me<V.length;Me++){let Fe=V[Me],Ze=Fe.afterStallSteps??3;if(se>=Ze){let Ve=Fe.strategy;switch(Ve.type){case "allow_rerun":for(let rt of Ve.nodes)$.delete(rt),Q.delete(rt);break;case "alternative_nodes":for(let rt of Ve.nodes){let qe=`__relaxation_${Me}_${rt.handler}`;ce[qe]={...rt};}break;case "inject_facts":Qt(O,Ve.facts);break;case "accept_partial":{let rt=Date.now()-Y,qe=Object.values(pe).reduce((et,Nt)=>et+Nt.totalTokens,0);return {achieved:!1,result:nt(N,O)??O,facts:{...O},executionOrder:q,nodeResults:pe,steps:ze,totalTokens:qe,durationMs:rt,stepMetrics:be,relaxations:oe,error:`Accepted partial result via relaxation tier "${Fe.label}"`}}case "custom":{let rt=nt(A,O)??0,qe={step:ze,facts:{...O},metrics:Kn(dn(rt),be,ze),completedNodes:new Set($),failedNodes:new Map(L)};await mo(Ve.apply,qe);break}}oe.push({step:ze,tierIndex:Me,label:Fe.label,strategy:Ve.type}),We=Me+1,se=0,Ie=!0;break}}if(!Ie){let Me=nt(A,O)??0,Fe=Kn(dn(Me),be,ze);if(nt(Z,ze,Fe),!V||We>=V.length){let Ze=Date.now()-Y,Ve=Object.values(pe).reduce((rt,qe)=>rt+qe.totalTokens,0);return {achieved:!1,result:nt(N,O)??O,facts:{...O},executionOrder:q,nodeResults:pe,steps:ze,totalTokens:Ve,durationMs:Ze,stepMetrics:be,relaxations:oe,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}se=0;let wo=Date.now(),Ro=A?nt(A,O)??0:nt(x,O)===!0?1:0,So=dn(Ro),Rr=0,Zt=[],To=qt.map(async Ie=>{let Me=ce[Ie],Fe=Me.requires??[],Ze=JSON.stringify(Fe.map(qe=>O[qe]));Q.set(Ie,Ze);let Ve,rt=nt(Me.buildInput,O);if(rt!=null)Ve=rt;else {let qe=Object.create(null);for(let et of Fe)O[et]!=null&&(qe[et]=O[et]);Object.keys(qe).length>0?Ve=JSON.stringify(qe):O.input!=null?Ve=String(O.input):Ve=JSON.stringify(O);}try{let qe=await Xe(Me.handler,Ve,{signal:ye??void 0,patternId:X});if(pe[Ie]=qe,q.push(Ie),$.add(Ie),L.delete(Ie),Me.extractOutput){let et=nt(Me.extractOutput,qe);et&&(Qt(O,et),Zt.push(...Object.keys(et)));}else {let et=qe.output;if(et&&typeof et=="object")Qt(O,et),Zt.push(...Object.keys(et));else if(typeof et=="string")try{let Nt=JSON.parse(et);if(Nt&&typeof Nt=="object"&&!Array.isArray(Nt))Qt(O,Nt),Zt.push(...Object.keys(Nt));else for(let Sr of Me.produces)O[Sr]=et,Zt.push(Sr);}catch{for(let Nt of Me.produces)O[Nt]=et,Zt.push(Nt);}}return Rr+=qe.totalTokens,{nodeId:Ie,success:!0}}catch(qe){let et=(L.get(Ie)??0)+1;return L.set(Ie,et),{nodeId:Ie,success:!1,error:qe}}});await Promise.allSettled(To);let Eo=A?nt(A,O)??0:nt(x,O)===!0?1:0,On=dn(Eo),_n=On-So;if(be.push({step:ze,durationMs:Date.now()-wo,nodesRun:[...qt],factsProduced:Zt,satisfaction:On,satisfactionDelta:_n,tokensConsumed:Rr}),S)for(let Ie of qt){let Me=ce[Ie];S.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:Me.handler,step:ze,nodeId:Ie,satisfaction:On,satisfactionDelta:_n});}for(let Ie of qt){let Me=ce[Ie];ke[Me.handler]||(ke[Me.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let Fe=ke[Me.handler];Fe.runs++,Fe.totalDelta+=_n,Fe.tokens+=pe[Ie]?.totalTokens??0;}if(je=On,_n<=0?se++:se=0,Et&&kr&&ze>Ye&&(ze-Ye)%bo===0){let Ie={type:"goal",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${vo}:step-${ze}`,patternId:X,stepsTotal:M,step:ze+1,facts:structuredClone(O),completedNodes:[...$],failedNodes:Object.fromEntries(L),nodeInputHashes:Object.fromEntries(Q),nodeOutputs:Object.fromEntries(Object.entries(pe).map(([Fe,Ze])=>[Fe,{output:Ze.output,totalTokens:Ze.totalTokens}])),executionOrder:[...q],stepMetrics:[...be],relaxations:[...oe],appliedRelaxationTiers:We,stallSteps:se,lastSatisfaction:je,agentMetrics:Object.fromEntries(Object.entries(ke).map(([Fe,Ze])=>[Fe,{runs:Ze.runs,totalDelta:Ze.totalDelta,tokens:Ze.tokens}]))},Me=await Yt(Ie,kr,Et);Me&&(wr=Me);}}let Ne=Date.now()-Y,Ge=Object.values(pe).reduce((ze,Wt)=>ze+Wt.totalTokens,0);return {achieved:!1,result:nt(N,O)??O,facts:{...O},executionOrder:q,nodeResults:pe,steps:M,totalTokens:Ge,durationMs:Ne,stepMetrics:be,relaxations:oe,error:`Max steps (${M}) exhausted without achieving goal`}}catch(Ne){throw Le=Ne instanceof Error?Ne:new Error(String(Ne)),Ne}finally{if(ne!=null&&clearTimeout(ne),ie&&i.signal&&i.signal.removeEventListener("abort",ie),S){let Ne=Object.values(pe).reduce((Ge,ze)=>Ge+ze.totalTokens,0);S.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:X,patternType:"goal",durationMs:Date.now()-Y,achieved:Jt,stepMetrics:be,relaxations:oe,totalTokens:Ne,...Le?{error:Le.message}:{}});}re("onPatternComplete",{patternId:X,patternType:"goal",durationMs:Date.now()-Y,timestamp:Date.now(),error:Le});}}function fo(i){if(!_)return [];let p=[],f=new Set;if(f.add(i),_.equivalencyGroups){for(let g of Object.values(_.equivalencyGroups))if(g.includes(i))for(let b of g)!f.has(b)&&P[b]&&(p.push(b),f.add(b));}if(_.useCapabilities!==false){let g=P[i];if(g?.capabilities&&g.capabilities.length>0)for(let[b,x]of Object.entries(P)){if(f.has(b))continue;let A=x.capabilities??[];g.capabilities.every(M=>A.includes(M))&&(p.push(b),f.add(b));}}if(te){let g=_.healthThreshold??30;return p.filter(b=>te.getHealthScore(b)>g)}return p}function ho(i){if(i.length===0)return null;if(!_||!te)return i[0]??null;if(_.selectionStrategy==="round-robin"&&we){let g=[...i].sort().join(","),b=we.get(g)??0,x=i[b%i.length];return we.set(g,b+1),x}let p=i[0],f=te.getHealthScore(p);for(let g=1;g<i.length;g++){let b=te.getHealthScore(i[g]);b>f&&(p=i[g],f=b);}return p}function yo(i){switch(i.type){case "parallel":return i.handlers;case "sequential":return i.handlers;case "supervisor":return [i.supervisor,...i.workers];case "dag":return Object.values(i.nodes).map(p=>p.handler);case "reflect":return [i.handler,i.evaluator];case "race":return i.handlers;case "debate":return [...i.handlers,i.evaluator];case "goal":return Object.values(i.nodes).map(p=>p.handler);default:return []}}let vr={system:K,get facts(){return K.facts},get timeline(){return S},get healthMonitor(){return te},get derived(){return Object.freeze({...he})},onDerivedChange(i){return Qe.add(i),()=>{Qe.delete(i);}},get scratchpad(){return Ft},runAgent:Xe,runAgentStream:zn,async runPattern(i,p){Ae();let f=o[i];if(!f){let x=Object.keys(o).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${i}". Available patterns: ${x}`)}let g=Date.now();if(S){let x=yo(f);S.record({type:"pattern_start",timestamp:g,snapshotId:null,patternId:i,patternType:f.type,handlers:x,taskIds:x.filter(A=>Ee[A]!=null)});}let b;try{switch(f.type){case "parallel":return await co(f,p,i);case "sequential":return await Jn(f,p,i);case "supervisor":return await Wn(f,p,i);case "dag":return await Vn(f,p,i);case "reflect":return await Dn(f,p,i);case "race":return (await br(f,p,i)).result;case "debate":return (await Pn(f,p,i)).result;case "goal":return (await In(f,p,i)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${f.type}`)}}catch(x){throw b=x instanceof Error?x:new Error(String(x)),x}finally{S&&S.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:i,patternType:f.type,durationMs:Date.now()-g,...b?{error:b.message}:{}});}},async runParallel(i,p,f,g){Ae();let b=Array.isArray(p)?p:i.map(()=>p);if(b.length!==i.length)throw new Error(`[Directive MultiAgent] Input count (${b.length}) must match agent count (${i.length})`);let x=new AbortController,A;g?.timeout&&(A=setTimeout(()=>x.abort(),g.timeout));try{let M=i.map((V,ee)=>Xe(V,b[ee],{signal:x.signal}).catch(Z=>{if(g?.minSuccess!==void 0)return null;throw Z})),N=await Promise.all(M),J=N.filter(V=>V!==null);if(g?.minSuccess!==void 0&&J.length<g.minSuccess){let V=N.length-J.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${J.length}/${i.length} agents succeeded (minimum required: ${g.minSuccess}, failed: ${V})`)}return f(J)}finally{A&&clearTimeout(A);}},async runSequential(i,p,f){Ae();let g=[],b=p;for(let x=0;x<i.length;x++){let A=i[x],M=await Xe(A,b);g.push(M),x<i.length-1&&(f?.transform?b=f.transform(M.output,A,x):b=typeof M.output=="string"?M.output:It(M.output));}return g},async handoff(i,p,f,g){if(Ae(),!P[i]){let A=Object.keys(P).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${i}" not found. Registered: ${A}`)}if(!P[p]){let A=Object.keys(P).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${p}" not found. Registered: ${A}`)}{let A=await zt("pre_handoff",i,P[i].agent.name,f,void 0,{handoff:{fromAgent:i,toAgent:p}});if(A.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};f=A.input;}let b={id:`handoff-${++xe}`,fromAgent:i,toAgent:p,input:f,context:g,requestedAt:Date.now()};fe.push(b);try{n?.(b);}catch(A){ue&&console.debug("[Directive MultiAgent] onHandoff threw:",A);}re("onHandoff",b),S&&S.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:i,toAgent:p});let x=P[p].memory??d;if(x&&g)try{let A=Object.entries(g).map(([M,N])=>`${M}: ${It(N)}`).join(", ");x.addMessages([{role:"system",content:`[Handoff from ${i}] Context: ${A}`}]);}catch(A){ue&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",A);}try{let A=await Xe(p,f),M={request:b,result:A,completedAt:Date.now()};Oe(M);try{a?.(M);}catch(J){ue&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",J);}re("onHandoffComplete",M),S&&S.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:i,toAgent:p,durationMs:M.completedAt-b.requestedAt});let N=fe.indexOf(b);return N>=0&&fe.splice(N,1),A}catch(A){let M=fe.indexOf(b);throw M>=0&&fe.splice(M,1),A}},approve(i){Ae();let p=Be.get(i);if(p){Be.delete(i);let f=Je(p);K.batch(()=>{let g=kt(f),b=200,x=[...g.approved,i];mt(f,{...g,pending:g.pending.filter(A=>A.id!==i),approved:x.length>b?x.slice(-b):x});});return}ue&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${i}"`);},reject(i,p){Ae();let f=Be.get(i);if(f){Be.delete(i);let g=Je(f);K.batch(()=>{let b=kt(g);p&&ue&&console.debug(`[Directive MultiAgent] Request ${i} rejected: ${p}`);let x={id:i,reason:p,rejectedAt:Date.now()},A=200,M=[...b.rejected,x];mt(g,{...b,pending:b.pending.filter(N=>N.id!==i),rejected:M.length>A?M.slice(-A):M});});return}ue&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${i}"`);},pause(){Ae(),it="paused",ue&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){Ae(),it==="paused"&&(it="idle",ue&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(i){let p=De[i];return p?{...p}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(De).map(([i,p])=>[i,{...p}]))},getPendingHandoffs(){return [...fe]},get totalTokens(){return He},waitForIdle(i){let p=()=>ct===0&&Object.values(De).every(f=>f.status==="idle"||f.status==="completed"||f.status==="error");return p()?Promise.resolve():new Promise((f,g)=>{let b=null,x=()=>{Rt.delete(A),b&&clearTimeout(b);},A=()=>{p()&&(x(),f());};Rt.add(A),i!==void 0&&(b=setTimeout(()=>{x(),g(new Error(`[Directive MultiAgent] waitForIdle timed out after ${i}ms`));},i));})},run(i,p,f){return Xe(i,p,f)},runStream(i,p,f){return zn(i,p,f)},registerAgent(i,p){if(Ae(),ft.has(i))throw new Error(`[Directive MultiAgent] Agent ID "${i}" is reserved and cannot be used`);if(P[i])throw new Error(`[Directive MultiAgent] Agent "${i}" is already registered. Unregister first.`);if(Ee[i])throw new Error(`[Directive MultiAgent] ID "${i}" is already registered as a task`);let f=p.constraints?rn(p.constraints):{},g=Object.create(null);if(p.resolvers)for(let[x,A]of Object.entries(p.resolvers))g[x]={requirement:A.requirement,key:A.key,resolve:async(M,N)=>{let J=gt(N.facts),ee={facts:{...N.facts,...J},runAgent:async(Z,ce,B)=>e(Z,ce,B),signal:N.signal};return A.resolve(M,ee)}};let b=core.createModule(i,{schema:gn,init:x=>{st(x,{status:"idle",currentAgent:p.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(x,{pending:[],approved:[],rejected:[]}),Ct(x,[]),Mt(x,[]),bt(x,on());},constraints:f,resolvers:Object.keys(g).length>0?g:void 0});K.registerModule(i,b),P[i]=p,ht.set(i,new Ot(p.maxConcurrent??1)),De[i]={status:"idle",runCount:0,totalTokens:0},ue&&console.debug(`[Directive MultiAgent] Registered agent "${i}" (${p.agent.name})`),Pe();},unregisterAgent(i){if(Ae(),!P[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[b,x]of Object.entries(o)){let A;switch(x.type){case "supervisor":A=[x.supervisor,...x.workers];break;case "dag":A=Object.values(x.nodes).map(M=>M.handler);break;case "reflect":A=[x.handler,x.evaluator];break;case "parallel":case "sequential":case "race":A=x.handlers;break;case "debate":A=[...x.handlers,x.evaluator];break;default:A=[];}A.includes(i)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${b}" references unregistered agent "${i}"`);}let f=ht.get(i);f&&(f.drain(),ht.delete(i));let g=Je(i);g&&K.batch(()=>{st(g,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(g,{pending:[],approved:[],rejected:[]}),Ct(g,[]),Mt(g,[]),bt(g,on());}),delete P[i],delete De[i],ue&&console.debug(`[Directive MultiAgent] Unregistered agent "${i}"`),Pe();},getAgentIds(){return Object.keys(P)},registerTask(i,p){if(Ae(),ft.has(i))throw new Error(`[Directive MultiAgent] Task ID "${i}" is reserved and cannot be used`);if(!i||typeof i!="string"||i.trim()!==i||i.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(P[i])throw new Error(`[Directive MultiAgent] ID "${i}" is already registered as an agent`);if(Ee[i])throw new Error(`[Directive MultiAgent] Task "${i}" is already registered`);if(p.timeout!==void 0&&(!Number.isFinite(p.timeout)||p.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${i}" timeout must be a finite number > 0`);if(p.maxConcurrent!==void 0&&(!Number.isFinite(p.maxConcurrent)||p.maxConcurrent<1||!Number.isInteger(p.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${i}" maxConcurrent must be a finite integer >= 1`);if(p.retry){let{attempts:f,delayMs:g}=p.retry;if(!Number.isFinite(f)||f<1)throw new Error(`[Directive MultiAgent] Task "${i}" retry attempts must be a finite number >= 1`);if(g!==void 0&&(!Number.isFinite(g)||g<0))throw new Error(`[Directive MultiAgent] Task "${i}" retry delayMs must be a finite number >= 0`)}Ee[i]=p,Ce[i]={status:"idle"},Te.set(i,new Ot(p.maxConcurrent??1)),ue&&console.debug(`[Directive MultiAgent] Registered task "${i}" (${p.label??i})`);},unregisterTask(i){if(Ae(),!Ee[i])throw new Error(`[Directive MultiAgent] Task "${i}" is not registered`);if(Ce[i]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${i}" while it is running`);let f=Te.get(i);f&&(f.drain(),Te.delete(i)),delete Ee[i],delete Ce[i],ue&&console.debug(`[Directive MultiAgent] Unregistered task "${i}"`);},getTaskIds(){return Object.keys(Ee)},getTaskRegistry(){let i=Object.create(null);for(let[p,f]of Object.entries(Ee))i[p]={label:f.label,description:f.description};return i},getTaskState(i){let p=Ce[i];return p?Object.freeze(structuredClone(p)):void 0},getAllTaskStates(){let i=Object.create(null);for(let[p,f]of Object.entries(Ce))i[p]=Object.freeze(structuredClone(f));return i},getNodeIds(){return [...Object.keys(P),...Object.keys(Ee)]},reset(){Ae();for(let p of Object.keys(P)){let f=P[p]?.maxConcurrent??1;De[p]={status:"idle",runCount:0,totalTokens:0};let g=ht.get(p);g&&g.drain(),ht.set(p,new Ot(f));let b=Je(p);K.batch(()=>{st(b,{status:"idle",currentAgent:P[p].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(b,{pending:[],approved:[],rejected:[]}),Ct(b,[]),Mt(b,[]),bt(b,on());});}for(let p of Object.keys(Ee)){Ce[p]={status:"idle"};let f=Te.get(p);f&&f.drain(),Te.set(p,new Ot(Ee[p].maxConcurrent??1));}Xt.clear(),ln.clear(),Be.clear(),fe.length=0,Ue.length=0,xe=0,He=0,it="idle",ct=0,St();let i=Je("__coord");K.batch(()=>{adapterUtils.setBridgeFact(i,"__globalTokens",0),adapterUtils.setBridgeFact(i,"__status","idle"),adapterUtils.setBridgeFact(i,"__handoffs",[]),adapterUtils.setBridgeFact(i,"__handoffResults",[]),adapterUtils.setBridgeFact(i,"__budgetWarningFired",false),$e&&adapterUtils.setBridgeFact(i,pt,{...$e.init});}),te&&te.reset(),Se=null;for(let p of Object.keys(he))delete he[p];Pe();},async checkpoint(i){Ae();for(let[f,g]of Object.entries(De))if(g.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${f}" is running`);for(let[f,g]of Object.entries(Ce))if(g.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${f}" is running`);if(!K.debug?.export)throw new Error("[Directive MultiAgent] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let p={version:1,id:Pt(),createdAt:new Date().toISOString(),label:i?.label,systemExport:K.debug.export(),timelineExport:S?.export()??null,localState:{type:"multi",globalTokenCount:He,globalStatus:it,agentStates:Object.fromEntries(Object.entries(De).map(([f,g])=>[f,structuredClone(g)])),handoffCounter:xe,pendingHandoffs:[...fe],handoffResults:[...Ue],roundRobinCounters:we?Object.fromEntries(we):null,taskStates:Object.fromEntries(Object.entries(Ce).map(([f,g])=>[f,{lastOutput:g.lastOutput!=null?String(g.lastOutput):void 0,lastError:g.lastError}]))},memoryExport:d?d.export?.()??null:null,orchestratorType:"multi"};return E&&await E.save(p),p},restore(i,p){if(Ae(),!sn(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(!K.debug?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");K.debug.import(i.systemExport),p?.restoreTimeline!==false&&i.timelineExport&&S&&S.import(i.timelineExport),i.memoryExport&&d&&d.import&&d.import(i.memoryExport);let f=i.localState;He=f.globalTokenCount,it=f.globalStatus,xe=f.handoffCounter,fe.length=0,fe.push(...f.pendingHandoffs),Ue.length=0,Ue.push(...f.handoffResults);for(let[g,b]of Object.entries(f.agentStates))De[g]&&(De[g]={...b});if(f.roundRobinCounters&&we){we.clear();for(let[g,b]of Object.entries(f.roundRobinCounters))we.set(g,b);}for(let[g,b]of Object.entries(P)){let x=ht.get(g);x&&x.drain(),ht.set(g,new Ot(b.maxConcurrent??1));}if(f.taskStates){for(let[g,b]of Object.entries(f.taskStates)){if(!Ee[g])throw new Error(`[Directive MultiAgent] Checkpoint references task "${g}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);Ce[g]={status:"idle",lastOutput:b.lastOutput,lastError:b.lastError};}for(let[g,b]of Object.entries(Ee)){let x=Te.get(g);x&&x.drain(),Te.set(g,new Ot(b.maxConcurrent??1));}}Pe();},runParallelStream(i,p,f,g){Ae();let b=Array.isArray(p)?p:i.map(()=>p);if(b.length!==i.length)throw new Error(`[Directive MultiAgent] Input count (${b.length}) must match agent count (${i.length})`);let x=new AbortController,A;g?.timeout&&(A=setTimeout(()=>x.abort(),g.timeout));let M=i.map((B,X)=>{let ye=zn(B,b[X],{signal:x.signal});return {agentId:B,streamResult:ye}}),N=M.map(({agentId:B,streamResult:X})=>({agentId:B,stream:X.stream})),{stream:J,getDroppedCount:V}=tr(N),ee;g?.signal&&(ee=()=>x.abort(),g.signal.addEventListener("abort",ee,{once:true}));let Z=Promise.allSettled(M.map(({streamResult:B})=>B.result)).then(B=>{A&&clearTimeout(A),ee&&g?.signal&&g.signal.removeEventListener("abort",ee);let X=[];for(let ye of B)ye.status==="fulfilled"&&X.push(ye.value);if(g?.minSuccess!==void 0&&X.length<g.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${X.length}/${i.length} agents succeeded (minimum required: ${g.minSuccess})`);return X}),ce=Z.then(B=>f(B));return Z.catch(()=>{}),ce.catch(()=>{}),{stream:J,results:Z,merge:ce,getDroppedCount:V,abort:()=>{x.abort(),ee&&g?.signal&&g.signal.removeEventListener("abort",ee);for(let{streamResult:B}of M)B.abort();}}},async runRace(i,p,f){Ae();let g={type:"race",handlers:i,extract:f?.extract,timeout:f?.timeout,minSuccess:f?.minSuccess,signal:f?.signal};return br(g,p,"__imperative_race")},async runReflect(i,p,f,g){Ae();let b={type:"reflect",handler:i,evaluator:p,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},x=await Dn(b,f,"__imperative_reflect"),A=Se?[...Se]:[],M=g?.maxIterations??2,N=A.length>0&&!A[A.length-1].passed&&A.length>=M;return {result:x,iterations:A.length,history:A,exhausted:N}},async runDebate(i,p,f,g){return Ae(),Pn({handlers:i,evaluator:p,maxRounds:g?.maxRounds,extract:g?.extract,parseJudgement:g?.parseJudgement,signal:g?.signal,timeout:g?.timeout},f,"__imperative_debate")},async runGoal(i,p,f,g){return Ae(),In({nodes:i,when:f,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},p,"__imperative_goal")},async resumeGoal(i,p){if(Ae(),!i||i.version!==1||i.type!=="goal"&&i.type!=="converge")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");let f=i.type==="converge"?{...i}:i;return In(p,{},f.patternId,f)},async resumeSequential(i,p){if(Ae(),!i||i.version!==1||i.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return Jn(p,i.currentInput,i.patternId,i)},async resumeSupervisor(i,p,f){if(Ae(),!i||i.version!==1||i.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let g=f?.input??i.currentInput;return Wn(p,g,i.patternId,i)},async resumeReflect(i,p,f){if(Ae(),!i||i.version!==1||i.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let g=f?.input??i.effectiveInput;return Dn(p,g,i.patternId,i)},async resumeDebate(i,p){if(Ae(),!i||i.version!==1||i.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return Pn(p,i.currentInput,i.patternId,i)},async resumeDag(i,p,f){if(Ae(),!i||i.version!==1||i.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let g=f?.input??i.input;return Vn(p,g,i.patternId,i)},async replay(i,p,f){if(Ae(),!E)throw new Error("[Directive MultiAgent] No checkpoint store configured");let g=await E.load(i);if(!g)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let b;try{let M=JSON.parse(g.systemExport);if(!M||typeof M!="object")throw new Error("Parsed checkpoint state is not an object");let N=new Set(["__proto__","constructor","prototype"]);for(let V of Object.keys(M))if(N.has(V))throw new Error(`Checkpoint state contains blocked key: ${V}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal","converge"]).has(M.type))throw new Error(`Unknown checkpoint pattern type: ${M.type}`);if(M.version!==1)throw new Error(`Unsupported checkpoint version: ${M.version}`);b=M;}catch(M){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${M instanceof Error?M.message:String(M)}`)}let x=un(b),A=f?.input??("currentInput"in b?b.currentInput:"");switch(S&&S.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:i,patternType:b.type,step:x}),b.type){case "sequential":return Jn(p,A,b.patternId,b);case "supervisor":return Wn(p,A,b.patternId,b);case "reflect":return Dn(p,A,b.patternId,b);case "debate":return Pn(p,A,b.patternId,b);case "dag":return Vn(p,A,b.patternId,b);case "goal":return In(p,b.facts,b.patternId,b)}},resumeBreakpoint(i,p){Ae(),p&&Xt.set(i,p);for(let f of Object.keys(P)){let g=Je(f);if(yt(g).pending.some(x=>x.id===i)){K.batch(()=>{let x=yt(g),A=[...x.resolved,i];bt(g,{...x,pending:x.pending.filter(M=>M.id!==i),resolved:A.length>Dt?A.slice(-Dt):A});});return}}ue&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${i}"`);},cancelBreakpoint(i,p){Ae(),p&&ln.set(i,p);for(let f of Object.keys(P)){let g=Je(f);if(yt(g).pending.some(x=>x.id===i)){K.batch(()=>{let x=yt(g),A=[...x.cancelled,i];bt(g,{...x,pending:x.pending.filter(M=>M.id!==i),cancelled:A.length>Dt?A.slice(-Dt):A});});return}}ue&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${i}"`);},getPendingBreakpoints(){let i=[];for(let p of Object.keys(P)){let f=Je(p),g=yt(f);i.push(...g.pending);}return i},getLastReflectionHistory(){return Se?[...Se]:null},dispose(){ut||(vr.reset(),vt.clear(),Tt.clear(),Qe.clear(),Rt.clear(),ut=true,K.destroy());}};return Pe(),vr}function Es(t,e,r){return {type:"parallel",handlers:t,merge:e,...r}}function As(t,e){return {type:"sequential",handlers:t,...e}}function xs(t,e,r){return {type:"supervisor",supervisor:t,workers:e,...r}}function Cs(t,e,r){return {type:"dag",nodes:t,merge:e??(o=>o.outputs),...r}}function Ms(t,e,r){return {type:"reflect",handler:t,evaluator:e,...r}}function Ds(t,e){return {type:"race",handlers:t,...e}}function Ps(t,e,r){return {type:"goal",nodes:t,when:e,...r}}function Is(){return {select:t=>t}}function Os(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 _s(){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:Number.POSITIVE_INFINITY,u=s.avgSatisfactionDelta>0?s.tokens/s.runs/s.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return c-u})}}function Ns(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 $s(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 js(t,e,r){return {type:"RUN_AGENT",agent:t,input:e,context:r}}function Gs(t,e=`
|
|
73
73
|
|
|
74
|
-
`){return t.map(r=>typeof r.output=="string"?r.output
|
|
74
|
+
`){return t.map(r=>typeof r.output=="string"?r.output:It(r.output)).join(e)}function Bs(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 Ls(t){return t.map(e=>e.output)}function Fs(t){return t.reduce((e,r)=>e+r.totalTokens,0)}function qs(...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.handlers.map(()=>o);n=await e.runParallel(s.handlers,c,s.merge,{minSuccess:s.minSuccess,timeout:s.timeout});break}case "sequential":{let s=a,c=await e.runSequential(s.handlers,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 m=l.output,h;if(typeof m=="string")try{h=JSON.parse(m);}catch{try{let R=m.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),y=wn(R);if(y&&typeof y=="object"&&"action"in y)h=y;else break}catch{break}}else if(m&&typeof m=="object"&&"action"in m)h=m;else break;if(h.action==="complete"||!h.worker||!s.workers.includes(h.worker))break;let v=await e.runAgent(h.worker,h.workerInput??"");u.push(v),l=await e.runAgent(s.supervisor,`Worker ${h.worker} completed with result: ${It(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 m=o;if(d.transform)m=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]);m=JSON.stringify(v);}let h=await e.runAgent(d.handler,m);c.outputs[l]=h.output,c.results[l]=h,c.statuses[l]="completed";}catch(m){if(c.statuses[l]="error",c.errors[l]=m instanceof Error?m.message:String(m),s.onNodeError==="fail")throw m}}n=await s.merge(c);break}case "reflect":{let s=a,c=s.maxIterations??2,u=s.parseEvaluation??(h=>{if(typeof h=="string")try{return JSON.parse(h)}catch{return {passed:false,feedback:h}}return h&&typeof h=="object"&&"passed"in h?h:{passed:false,feedback:"Invalid evaluator output"}}),l=s.buildRetryInput??((h,v)=>`${h}
|
|
75
75
|
|
|
76
76
|
Feedback on your previous response:
|
|
77
77
|
${v}
|
|
78
78
|
|
|
79
|
-
Please improve your response.`),d=o,
|
|
80
|
-
`)}var
|
|
81
|
-
`+
|
|
79
|
+
Please improve your response.`),d=o,m;for(let h=0;h<c;h++){m=(await e.runAgent(s.handler,d)).output;let R=typeof m=="string"?m:JSON.stringify(m),y=await e.runAgent(s.evaluator,R),T=u(y.output);if(T.passed)break;h<c-1&&T.feedback&&(d=l(o,T.feedback,h));}n=s.extract?s.extract(m):m;break}case "race":{let s=a;n=(await e.runRace(s.handlers,o,{extract:s.extract,timeout:s.timeout})).result;break}case "debate":{let s=a;n=(await e.runDebate(s.handlers,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:It(n));}return n}}function sr(t,e){return Object.entries(t).filter(([,r])=>{let o=r.capabilities??[];return e.every(n=>o.includes(n))}).map(([r])=>r)}function Us(t,e,r,o){let{priority:n,select:a}=o??{},s=[],c=0,u=-1;return {when:l=>{let d=e(l);return s=sr(t,d),c++,s.length>0},require:l=>{let d=c!==u&&s.length>0?(u=c,s):sr(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 _r=false;function Hs(t){let{when:e,agent:r,input:o,priority:n,context:a,options:s}=t;s&&!_r&&(_r=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 zs(t){let{handlers: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 handlers");if(o!=null&&(o<1||!Number.isFinite(o)))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");return {type:"debate",handlers:e,evaluator:r,maxRounds:o,extract:n,parseJudgement:a,signal:s,timeout:c}}async function Js(t,e,r){return t.runDebate(e.handlers,e.evaluator,r,{maxRounds:e.maxRounds,extract:e.extract,parseJudgement:e.parseJudgement,signal:e.signal,timeout:e.timeout})}function Ws(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 Vs(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 ar(t){switch(t.type){case "parallel":return {type:"parallel",handlers:t.handlers,minSuccess:t.minSuccess,timeout:t.timeout};case "sequential":return {type:"sequential",handlers:t.handlers,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]={handler:o.handler,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",handler:t.handler,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",handlers:t.handlers,timeout:t.timeout,minSuccess:t.minSuccess};case "debate":return {type:"debate",handlers:t.handlers,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]={handler:o.handler,produces:o.produces,requires:o.requires,allowRerun:o.allowRerun,priority:o.priority};return {type:"goal",nodes:e,maxSteps:t.maxSteps,timeout:t.timeout}}}}var Ks=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Xs(t,e){let r=t&&typeof t=="object"&&t.type==="converge"?{...t,type:"goal"}:t;if(!r||typeof r!="object"||!Ks.has(r.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${t?.type}"`);let o=Object.create(null);for(let[a,s]of Object.entries(r))a!=="__proto__"&&a!=="constructor"&&a!=="prototype"&&(o[a]=s);let n=o;if(!n.handler&&n.agent&&typeof n.agent=="string"&&(n.handler=n.agent,delete n.agent),!n.handlers&&n.agents&&Array.isArray(n.agents)&&(n.handlers=n.agents,delete n.agents),n.nodes&&typeof n.nodes=="object")for(let a of Object.values(n.nodes))!a.handler&&a.agent&&typeof a.agent=="string"&&(a.handler=a.agent,delete a.agent);return {...o,...e}}function wt(t){return t.replace(/[^a-zA-Z0-9]/g,"_")}function jr(t){return t.replace(/[\r\n]+/g," ").replace(/[[\](){}|<>"]/g,e=>`#${e.charCodeAt(0)};`)}var Ys={square:["[","]"],round:["(",")"],stadium:["([","])"],hexagon:["{{","}}"],circle:["((","))"]};function Ke(t,e,r,o){let n;r==="task"?n=o?.task??"hexagon":r==="agent"?n=o?.agent??"square":n=o?.virtual??"circle";let[a,s]=Ys[n];return `${t}${a}${jr(e)}${s}`}function ir(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=wt(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 Qs(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 Zs(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 ea(t,e){let r=[];return e&&r.push(`%%{init: {'theme': '${e}'}}%%`),r.push(`graph ${t}`),r.join(`
|
|
80
|
+
`)}var ta=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function na(t,e,r){let o=ir(t.handlers),n=Ke("__input","Input","virtual",e),a=Ke("__merge","Merge","virtual",e),s=[];for(let c of o){let u=r?.has(c.label)?"task":"agent",l=Ke(c.id,c.label,u,e);s.push(` ${n} --> ${l}`),s.push(` ${l} --> ${a}`);}return s}function ra(t,e,r){return t.handlers.length===0?[]:[` ${t.handlers.map(a=>({id:wt(a),label:a})).map(a=>Ke(a.id,a.label,r?.has(a.label)?"task":"agent",e)).join(" --> ")}`]}function oa(t,e){let r=wt(t.supervisor),o=Ke(r,t.supervisor,"agent",e),n=[];for(let a of t.workers){let s=wt(a),c=Ke(s,a,"agent",e);n.push(` ${o} -->|delegate| ${c}`),n.push(` ${c} -->|result| ${o}`);}return n}function sa(t,e,r){let o=Qs(t.nodes),n=[],a=new Set;for(let s of o){let c=t.nodes[s],u=wt(s),l=c.handler,d=r?.has(c.handler)?"task":"agent";(!c.deps||c.deps.length===0)&&(a.has(u)||(n.push(` ${Ke(u,l,d,e)}`),a.add(u)));let m=[...c.deps??[]].sort();for(let h of m){let v=wt(h),R=t.nodes[h],y=R.handler,T=r?.has(R.handler)?"task":"agent",w=Ke(v,y,T,e),k=Ke(u,l,d,e);n.push(` ${w} --> ${k}`),a.add(v),a.add(u);}}return n}function aa(t,e,r){let o=ir(t.handlers),n=Ke("__input","Input","virtual",e),a=Ke("__output","Output","virtual",e),s=[];for(let c of o){let u=r?.has(c.label)?"task":"agent",l=Ke(c.id,c.label,u,e);s.push(` ${n} --> ${l}`),s.push(` ${l} -.-> ${a}`);}return s}function ia(t,e,r){let o=wt(t.handler),n=wt(t.evaluator),a=r?.has(t.handler)?"task":"agent",s=Ke(o,t.handler,a,e),c=Ke(n,t.evaluator,"agent",e),u=Ke("__output","Output","virtual",e);return [` ${s} --> ${c}`,` ${c} -->|feedback| ${s}`,` ${c} -->|pass| ${u}`]}function ua(t,e,r){let o=Object.entries(t.nodes),n=[],a=new Map;for(let[l,d]of o)for(let m of d.produces)a.set(m,l);let s=new Set,c=new Set,u=[...o].sort(([l],[d])=>l.localeCompare(d));for(let[l,d]of u){let m=wt(l),h=[...d.requires??[]].sort();if(h.length===0&&!s.has(m)){let v=r?.has(d.handler)?"task":"agent";n.push(` ${Ke(m,d.handler,v,e)}`),s.add(m);}for(let v of h){let R=a.get(v);if(R&&R!==l){let y=t.nodes[R];if(!y)continue;let T=`${R}->${l}`;if(!c.has(T)){let w=wt(R),k=r?.has(y.handler)?"task":"agent",C=r?.has(d.handler)?"task":"agent",I=Ke(w,y.handler,k,e),z=Ke(m,d.handler,C,e);n.push(` ${I} -->|${jr(v)}| ${z}`),s.add(w),s.add(m),c.add(T);}}}}for(let[l,d]of u){let m=wt(l);if(!s.has(m)){let h=r?.has(d.handler)?"task":"agent";n.push(` ${Ke(m,d.handler,h,e)}`),s.add(m);}}return n}function ca(t,e,r){let o=ir(t.handlers),n=wt(t.evaluator),a=Ke(n,t.evaluator,"agent",e),s=Ke("__output","Output","virtual",e),c=[];for(let u of o){let l=r?.has(u.label)?"task":"agent",d=Ke(u.id,u.label,l,e);c.push(` ${d} --> ${a}`),c.push(` ${a} -->|next round| ${d}`);}return c.push(` ${a} --> ${s}`),c}function la(t,e){let r=e?.direction??"LR",o=e?.shapes,n=e?.taskIds,a=Zs(t)?t:ar(t);if(!ta.has(a.type))throw new Error(`[Directive] patternToMermaid: unknown pattern type "${a.type}"`);let s=ea(r,e?.theme),c=[];switch(a.type){case "parallel":c=na(a,o,n);break;case "sequential":c=ra(a,o,n);break;case "supervisor":c=oa(a,o);break;case "dag":c=sa(a,o,n);break;case "race":c=aa(a,o,n);break;case "reflect":c=ia(a,o,n);break;case "debate":c=ca(a,o,n);break;case "goal":c=ua(a,o,n);break}return s+`
|
|
81
|
+
`+c.join(`
|
|
82
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}"]
|
|
83
|
+
`}function Tn(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function da(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 m(y,T){if(T.types&&!T.types.includes(y.type)||T.from&&!(Array.isArray(T.from)?T.from:[T.from]).includes(y.from))return false;if(T.topics){let w=y.topic;if(w&&!T.topics.includes(w))return false}return !(T.priority&&y.priority&&!T.priority.includes(y.priority)||T.custom&&!T.custom(y))}function h(y){return y.ttlMs?Date.now()-y.timestamp>y.ttlMs:false}function v(y){return y.to==="*"?Array.from(c.keys()):Array.isArray(y.to)?y.to:[y.to]}async function R(y){if(h(y))return;let T=v(y),w=[],k=[];for(let C of T){let I=c.get(C)??[];if(I.length===0){let z=d.get(C)??[];for(z.push(y);z.length>o;)z.shift();d.set(C,z);continue}for(let z of I)(!z.filter||m(y,z.filter))&&k.push(Promise.resolve(z.handler(y)).then(()=>{w.push(C);},_=>{s?.(y,_ instanceof Error?_:new Error(String(_)));}));}k.length>0&&await Promise.allSettled(k),w.length>0&&a?.(y,w),n&&await n.save(y);}return {publish(y){let T={...y,id:Tn(),timestamp:Date.now(),priority:y.priority??"normal",ttlMs:y.ttlMs??r};for(u.push(T),l.set(T.id,T);u.length>e;){let w=u.shift();w&&l.delete(w.id);}return R(T).catch(w=>{let k=w instanceof Error?w:new Error(String(w));s?s(T,k):console.error("[Directive MessageBus] Delivery error:",k);}),T.id},subscribe(y,T,w){let k=Tn(),C={id:k,agentId:y,handler:T,filter:w,unsubscribe:()=>{let _=c.get(y)??[],E=_.findIndex(G=>G.id===k);E>=0&&_.splice(E,1);}},I=c.get(y)??[];I.push(C),c.set(y,I);let z=d.get(y)??[];d.delete(y);for(let _ of z)if(!w||m(_,w)){let E=T(_);E instanceof Promise&&E.catch(G=>{let j=G instanceof Error?G:new Error(String(G));s?s(_,j):console.error("[Directive MessageBus] Pending delivery error:",j);});}return C},getHistory(y,T=100){let w=u.filter(k=>!h(k));return y&&(w=w.filter(k=>m(k,y))),w.slice(-T)},getMessage(y){let T=l.get(y);if(!(T&&h(T)))return T},getPending(y){return (d.get(y)??[]).filter(w=>!h(w))},clear(){u.length=0,l.clear(),d.clear();},dispose(){u.length=0,l.clear(),d.clear(),c.clear();}}}function pa(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 m=c.get(d);m&&(clearTimeout(m.timer),c.delete(d),m.resolve(l));}return {register(l,d){let m=!s.has(l)||s.get(l)?.status==="offline";s.set(l,{...d,id:l,status:"online",lastSeen:Date.now()}),m&&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,m){let h=s.get(l);return h&&(h.lastSeen=Date.now(),h.status="online"),e.publish({...m,from:l,to:d,type:m.type??"CUSTOM"})},async request(l,d,m,h,v=o){return new Promise((R,y)=>{let T=Tn(),w=e.subscribe(l,C=>{(C.correlationId===T||C.replyTo===T)&&(w.unsubscribe(),u(C));},{types:["RESPONSE"]}),k=setTimeout(()=>{w.unsubscribe(),c.delete(T),y(new Error(`[Directive Communication] Request timeout after ${v}ms`));},v);c.set(T,{resolve:R,reject:y,timer:k}),e.publish({type:"REQUEST",from:l,to:d,action:m,payload:h,timeout:v,correlationId:T});})},async delegate(l,d,m,h){return new Promise((v,R)=>{let y=Tn(),T=e.subscribe(l,k=>{(k.correlationId===y||k.replyTo===y)&&(T.unsubscribe(),u(k));},{types:["DELEGATION_RESULT"]}),w=setTimeout(()=>{T.unsubscribe(),c.delete(y),R(new Error(`[Directive Communication] Delegation timeout after ${o}ms`));},o);c.set(y,{resolve:v,reject:R,timer:w}),e.publish({type:"DELEGATION",from:l,to:d,task:m,context:h,correlationId:y});})},async query(l,d,m,h){return new Promise((v,R)=>{let y=Tn(),T=e.subscribe(l,k=>{(k.correlationId===y||k.replyTo===y)&&(T.unsubscribe(),u(k));},{types:["RESPONSE"]}),w=setTimeout(()=>{T.unsubscribe(),c.delete(y),R(new Error(`[Directive Communication] Query timeout after ${o}ms`));},o);c.set(y,{resolve:v,reject:R,timer:w}),e.publish({type:"QUERY",from:l,to:d,question:m,context:h,correlationId:y});})},broadcast(l,d){return e.publish({...d,from:l,to:"*",type:d.type??"INFORM"})},listen(l,d,m){let h=s.get(l);return h&&(h.status="online",h.lastSeen=Date.now(),n?.(l)),e.subscribe(l,d,m)},getBus(){return e},dispose(){for(let[,l]of c)clearTimeout(l.timer);c.clear(),s.clear();}}}function ga(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 ma(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 fa(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 ha=[{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 ya(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 Gr=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function ba(t){let e=[],r=Gr.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&&Gr.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 Br=1e5,Gn={name:"regex",async detect(t,e){if(t.length>Br)throw new Error(`[Directive] Input exceeds maximum length of ${Br} characters for PII detection. Truncate input or process in chunks.`);let r=[],o=new Set(e);for(let n of ha){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(...ya(t)),o.has("name")&&r.push(...ba(t)),r}};function Bn(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:${va(a.value)}]`;break}n=n.slice(0,a.position.start)+s+n.slice(a.position.end);}return n}function va(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 Lr=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function Fr(t={}){let{types:e=Lr,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"?Gn:r,m=new Set(c.map(v=>v.toLowerCase().trim()));async function h(v,R){if(d===Gn)return d.detect(v,R);let y;try{return await Promise.race([d.detect(v,R),new Promise((T,w)=>{y=setTimeout(()=>w(new Error(`[Directive] PII detector '${d.name}' timed out after ${l}ms`)),l);})])}finally{clearTimeout(y);}}return async v=>{let y=(await h(v.input,e)).filter(T=>!(T.confidence<a||m.has(T.value.toLowerCase().trim())));if(y.length>0&&s?.(y),y.length>=u){if(o)return {passed:true,transformed:Bn(v.input,y,n)};let T={};for(let k of y)T[k.type]=(T[k.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(T).map(([k,C])=>`${k}: ${C}`).join(", ")})`}}return {passed:true}}}function ka(t={}){let e=Fr(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 ur(t,e={}){let{types:r=Lr,detector:o="regex",minConfidence:n=.7,timeout:a=5e3}=e,s=o==="regex"?Gn:o,c;if(s===Gn)c=await s.detect(t,r);else {let d;try{c=await Promise.race([s.detect(t,r),new Promise((m,h)=>{d=setTimeout(()=>h(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 wa=1e4,Ra=10080*60*1e3,Sa=6e4,qr="0".repeat(64);function Ta(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Ea(t){return new TextEncoder().encode(t)}function Aa(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function Ur(t){let e=Ea(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return Aa(new Uint8Array(r))}function Hr(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 xa(t){return JSON.parse(JSON.stringify(t))}async function Ca(t,e){let r=xa(t);async function o(n){if(typeof n=="string"){let a=await ur(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 Bn(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 Ma(t={}){let{maxEntries:e=wa,retentionMs:r=Ra,exportInterval:o=Sa,exporter:n,piiMasking:a,signing:s,sessionId:c,actorId:u,events:l={}}=t,d=[],m=0,h=0,v=0,R=true,y;function T(){return d.length===0?qr:d[d.length-1].hash}async function w(k,C,I){let z={id:Ta(),timestamp:Date.now(),eventType:k,previousHash:T(),payload:C,actorId:u,sessionId:c};a?.enabled&&(z.maskedPayload=await Ca(C,a));let _=Hr(z),E=await Ur(_),G={...z,hash:E};for(s&&(G.signature=await s.signFn(E)),d.push(G);d.length>e;)d.shift(),h++,m>0&&m--;return l.onEntryAdded?.(G),G}return n&&o>0&&(y=setInterval(async()=>{try{let k=d.slice(m);k.length>0&&(await n(k),v+=k.length,m=d.length);}catch(k){l.onExportError?.(k instanceof Error?k:new Error(String(k)),d.slice(m));}},o)),{getEntries(k){let C=[...d];if(k){if(k.eventTypes?.length){let I=new Set(k.eventTypes);C=C.filter(z=>I.has(z.eventType));}k.actorId&&(C=C.filter(I=>I.actorId===k.actorId)),k.sessionId&&(C=C.filter(I=>I.sessionId===k.sessionId)),k.since!==void 0&&(C=C.filter(I=>I.timestamp>=k.since)),k.until!==void 0&&(C=C.filter(I=>I.timestamp<=k.until)),k.offset!==void 0&&(C=C.slice(k.offset)),k.limit!==void 0&&(C=C.slice(0,k.limit));}return C},async verifyChain(){if(d.length===0)return {valid:true,entriesVerified:0,verifiedAt:Date.now()};d[0].previousHash;for(let C=0;C<d.length;C++){let I=d[C],z=Hr({id:I.id,timestamp:I.timestamp,eventType:I.eventType,previousHash:I.previousHash,payload:I.payload,actorId:I.actorId,sessionId:I.sessionId}),_=await Ur(z);if(I.hash!==_){R=false;let E={valid:false,entriesVerified:C,brokenAt:{index:C,entryId:I.id,expectedHash:_,actualHash:I.hash},verifiedAt:Date.now()};return l.onChainBroken?.(E),E}if(C>0){let E=d[C-1];if(I.previousHash!==E.hash){R=false;let G={valid:false,entriesVerified:C,brokenAt:{index:C,entryId:I.id,expectedHash:E.hash,actualHash:I.previousHash},verifiedAt:Date.now()};return l.onChainBroken?.(G),G}}if(s?.verifyFn&&I.signature&&!await s.verifyFn(I.hash,I.signature)){R=false;let G={valid:false,entriesVerified:C,brokenAt:{index:C,entryId:I.id,expectedHash:"signature-invalid",actualHash:I.signature},verifiedAt:Date.now()};return l.onChainBroken?.(G),G}}return R=true,{valid:true,entriesVerified:d.length,verifiedAt:Date.now()}},async export(k){let C=[...d];return k!==void 0&&(C=C.filter(I=>I.timestamp>=k)),n&&C.length>0&&(await n(C),v+=C.length),C},prune(){let k=Date.now()-r,C=d.length;for(;d.length>0&&d[0].timestamp<k;)d.shift(),m>0&&m--;let I=C-d.length;return h+=I,I},getStats(){let k={};for(let C of d)k[C.eventType]=(k[C.eventType]??0)+1;return {totalEntries:d.length,byEventType:k,oldestEntry:d[0]?.timestamp,newestEntry:d[d.length-1]?.timestamp,entriesPruned:h,entriesExported:v,chainIntegrity:R}},async dispose(){if(y&&(clearInterval(y),y=void 0),n)try{let k=d.slice(m);k.length>0&&(await n(k),v+=k.length);}catch(k){l.onExportError?.(k instanceof Error?k:new Error(String(k)),d.slice(m));}},addEntry(k,C){return w(k,C)},createPlugin(){return {name:"audit-trail",onFactSet:(k,C,I)=>{w("fact.set",{key:k,value:C,prev:I}).catch(console.error);},onFactsBatch:k=>{w("fact.batch",{changes:k.map(C=>({key:C.key,value:C.value,prev:C.prev}))}).catch(console.error);},onRequirementCreated:k=>{w("requirement.created",{id:k.id,type:k.requirement.type,payload:k.requirement}).catch(console.error);},onRequirementMet:(k,C)=>{w("requirement.met",{id:k.id,type:k.requirement.type,byResolver:C}).catch(console.error);},onResolverStart:(k,C)=>{w("resolver.start",{resolver:k,requirementId:C.id,requirementType:C.requirement.type}).catch(console.error);},onResolverComplete:(k,C,I)=>{w("resolver.complete",{resolver:k,requirementId:C.id,requirementType:C.requirement.type,duration:I}).catch(console.error);},onResolverError:(k,C,I)=>{w("resolver.error",{resolver:k,requirementId:C.id,requirementType:C.requirement.type,error:I instanceof Error?I.message:String(I)}).catch(console.error);},onError:k=>{w("error.occurred",{source:k.source,sourceId:k.sourceId,message:k.message,context:k.context}).catch(console.error);},onErrorRecovery:(k,C)=>{w("error.recovery",{source:k.source,message:k.message,strategy:C}).catch(console.error);}}}}}function Da(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 En=[{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"}],cr=[...En,{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"}],zr=1e5;function lr(t,e=En){if(t.length>zr)throw new Error(`[Directive] Input exceeds maximum length of ${zr} 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 m=new RegExp(s.source,s.flags).exec(t);m&&r.push({name:c,category:l,severity:u,match:m[0],position:m.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 Jr(t,e=En){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 Wr(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?[...cr]:[...En],u=[...u,...e],c.length>0){let l=new Set(c);u=u.filter(d=>!l.has(d.category));}return l=>{let d=lr(l.input,u);if(d.detected&&d.riskScore>=n){if(s?.(l.input,d),a)return {passed:true,transformed:Jr(l.input,u)};let m=d.patterns.sort((h,v)=>{let R={critical:0,high:1,medium:2,low:3};return R[h.severity]-R[v.severity]}).slice(0,3).map(h=>h.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${d.riskScore}%, patterns: ${m})`}}return {passed:true}}}function Pa(t,e){return `[UNTRUSTED_CONTENT source="${e}"]
|
|
84
84
|
${t}
|
|
85
|
-
[/UNTRUSTED_CONTENT]`}function
|
|
85
|
+
[/UNTRUSTED_CONTENT]`}function Ia(t){let{baseGuardrail:e=Wr({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 m=lr(d,[...cr,...r]);if(m.detected&&m.riskScore>=25)return {passed:false,reason:`Untrusted content from "${l}" contains potential injection (risk: ${m.riskScore}%)`}}return {passed:true}}}function Oa(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function _a(t){return new TextEncoder().encode(t)}function Na(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function Vr(t){let e=_a(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return Na(new Uint8Array(r))}function $a(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
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
|
|
87
|
+
`)}function ja(){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 Ga(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 y of R)u.push({category:v,...y});}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=$a(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 m=await Vr(d),h={success:!0,subjectId:s.subjectId,format:s.format,data:d,categories:l,recordCount:u.length,checksum:m,exportedAt:Date.now(),expiresAt:Date.now()+o};return n.onExport?.(h),h}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:Oa(),subjectId:s.subjectId,type:s.anonymize?"anonymization":"hard",scope:s.scope,categories:u,recordCount:c,deletedAt:Date.now(),reason:s.reason,hash:await Vr(l)};await e.storeDeletionCertificate(d);let m={success:!0,subjectId:s.subjectId,scope:s.scope,anonymized:s.anonymize??!1,recordsAffected:c,categoriesAffected:u,certificate:d,deletedAt:Date.now()};return n.onDelete?.(m),m}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,m=c-d,h=await e.getExpiredData(l,m);if(h.length>0){await r.onBeforeDelete?.({category:l,count:h.length});let v=await e.deleteByIds(h.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 Kt(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 Ba(t,e,r,o){let n=null;for(let a of e){if(o&&a.agentName&&a.agentName!==o)continue;let s=Kt(t,a.queryEmbedding);s>=r&&(!n||s>n.similarity)&&(n={entry:a,similarity:s});}return n}function Kr(){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 La(t){let{embedder:e,similarityThreshold:r=.9,maxCacheSize:o=1e3,ttlMs:n=36e5,namespace:a="default",storage:s=Kr(),onHit:c,onMiss:u,onError:l,perAgent:d=false}=t,m={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},h=0;function v(y){if(m.totalEntries=y.length,m.hitRate=m.totalHits+m.totalMisses>0?m.totalHits/(m.totalHits+m.totalMisses):0,m.avgSimilarityOnHit=m.totalHits>0?h/m.totalHits:0,y.length>0){let T=y.map(w=>w.createdAt);m.oldestEntry=Math.min(...T),m.newestEntry=Math.max(...T);}else m.oldestEntry=null,m.newestEntry=null;}async function R(){let y=await s.getEntries(a),T=Date.now();for(let k of y)T-k.createdAt>n&&await s.removeEntry(a,k.id);let w=await s.getEntries(a);if(w.length>o){let C=w.sort((I,z)=>I.accessedAt-z.accessedAt).slice(0,w.length-o);for(let I of C)await s.removeEntry(a,I.id);}}return {async lookup(y,T){let w=Date.now();try{let k=await e(y),C=await s.getEntries(a),I=Ba(k,C,r,d?T:void 0);return I?(await s.updateEntry(a,I.entry.id,{accessedAt:Date.now(),accessCount:I.entry.accessCount+1}),m.totalHits++,h+=I.similarity,v(C),c?.(I.entry,I.similarity),{hit:!0,entry:I.entry,similarity:I.similarity,latencyMs:Date.now()-w}):(m.totalMisses++,v(C),u?.(y),{hit:!1,latencyMs:Date.now()-w})}catch(k){return m.totalMisses++,l?.(k instanceof Error?k:new Error(String(k))),{hit:false,latencyMs:Date.now()-w}}},async store(y,T,w,k={}){let C=await e(y),I={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:y,queryEmbedding:C,response:T,metadata:k,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:d?w:void 0};await s.addEntry(a,I),await R();let z=await s.getEntries(a);v(z);},async invalidate(y){let T=await s.getEntries(a),w=0;for(let C of T)y(C)&&(await s.removeEntry(a,C.id),w++);let k=await s.getEntries(a);return v(k),w},async clear(){await s.clear(a),m={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},h=0;},getStats(){return {...m}},async export(){return s.getEntries(a)},async import(y){for(let w of y)await s.addEntry(a,w);await R();let T=await s.getEntries(a);v(T);}}}function Fa(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 qa(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 Ua(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(m=>m.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 m=0;m<u.length;m++)u[m].resolve(d[m]);}catch(l){let d=l instanceof Error?l:new Error(String(l));for(let m of u)m.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 Ha(){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=Kt(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 Xr(t,e){return 1-Kt(t,e)}function dr(t,e){if(t.length===0)return null;let r=Math.floor(e()*t.length),o=t[r],n=t.filter((d,m)=>m!==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:Xr(o.embedding,d.embedding)}));a.sort((d,m)=>d.distance-m.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:dr(u,e),right:dr(l,e)}}function An(t,e,r,o,n,a){if(!t)return;let s=Xr(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?(An(t.left,e,r,o,n,a),s+a.value>=t.mu&&An(t.right,e,r,o,n,a)):(An(t.right,e,r,o,n,a),s-a.value<=t.mu&&An(t.left,e,r,o,n,a));}function za(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 h=[];for(let[v,R]of r){let y=Kt(c,R);y>=l&&h.push({id:v,similarity:y});}return h.sort((v,R)=>R.similarity-v.similarity),h.slice(0,u)}let d=[],m={value:Number.POSITIVE_INFINITY};return An(o,c,u,l,d,m),d},rebuild(){let c=Array.from(r.entries()).map(([u,l])=>({id:u,embedding:l}));o=dr(c,e),n=false;},size(){return r.size},clear(){r.clear(),o=null,n=false,a=null;},needsRebuild(){return n}}}function pr(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 m(){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),m());},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 m(),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,m(),Promise.resolve({value:void 0,done:true})}}}}}function Ja(t){let e=pr(t),r=pr(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 Wa(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 Va(...t){return {[Symbol.asyncIterator](){let r=[],o=0,n=null,a=null,s=false,c=false,u=[];function l(d){if(n){let m=n;return n=null,m(d),true}return false}for(let d of t){let m=d[Symbol.asyncIterator]();u.push(m),(async()=>{try{for(;!s;){let h=await m.next();if(h.done||s)break;l({value:h.value,done:!1})||(r.length<1e4?r.push(h.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(h){s||(s=true,a=h instanceof Error?h:new Error(String(h)),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 Ka(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 Xa(t,e){return t.length===0?"":`Relevant documentation context:
|
|
89
89
|
|
|
90
90
|
${t.join(`
|
|
91
91
|
|
|
92
|
-
`)}`}function
|
|
92
|
+
`)}`}function Ya(t,e,r){return Math.max(e,Math.min(r,t))}function Qa(t){let{embedder:e,storage:r,topK:o=5,minSimilarity:n=.3,formatChunk:a=Ka,formatContext:s=Xa,onError:c}=t,u=Ya(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(m,h){let v=Math.max(1,Math.floor(h??o));if(r.search)return r.search(await e(m),v,u);let R=await e(m),T=(await r.getChunks()).map(w=>({...w,similarity:Kt(R,w.embedding)}));return T.sort((w,k)=>k.similarity-w.similarity),T.filter(w=>w.similarity>=u).slice(0,v)}async function d(m,h={}){let{prefix:v,history:R,topK:y,filter:T}=h,w=[];try{w=await l(m,y);}catch(z){c?.(z instanceof Error?z:new Error(String(z)));}T&&(w=w.filter(z=>T(z)));let k=w.map(z=>a(z,z.similarity)),C=s(k,m),I=[];if(v&&I.push(v),C&&I.push(C),R&&R.length>0){let z=R.map(_=>`${_.role.charAt(0).toUpperCase()+_.role.slice(1)}: ${_.content}`).join(`
|
|
93
93
|
|
|
94
|
-
`);
|
|
95
|
-
${
|
|
94
|
+
`);I.push(`Previous conversation:
|
|
95
|
+
${z}`);}return I.push(m),I.join(`
|
|
96
96
|
|
|
97
97
|
---
|
|
98
98
|
|
|
99
|
-
`)}return {retrieve:l,enrich:d}}function
|
|
99
|
+
`)}return {retrieve:l,enrich:d}}function Za(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 Yr="AI service temporarily unavailable. Please try again.";function ei(t={}){let{maxResponseChars:e=Number.POSITIVE_INFINITY,truncationMessage:r=`
|
|
100
100
|
|
|
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
|
|
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 Yr}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 Yr}function c(l,d,m,h){let v=new TextEncoder;function R(y){return v.encode(`data: ${JSON.stringify(y)}
|
|
102
102
|
|
|
103
|
-
`)}return new ReadableStream({async start(
|
|
103
|
+
`)}return new ReadableStream({async start(y){let T=null,w=null;try{o>0&&(T=setInterval(()=>{try{y.enqueue(R({type:"heartbeat",timestamp:Date.now()}));}catch{}},o)),w=l.stream(d,m,{signal:h?.signal});let k=0,C=!1;for await(let I of w){if(k+=I.length,k>e){y.enqueue(R({type:"truncated",text:r})),y.enqueue(R({type:"done"})),C=!0,w.abort();break}y.enqueue(R({type:"text",text:I}));}try{await w.result;}catch{}C||y.enqueue(R({type:"done"}));}catch(k){let C=s(k);y.enqueue(R({type:"error",message:C}));}finally{T&&clearInterval(T),y.close();}}})}let u={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive",...a};return {toResponse(l,d,m,h){let v=c(l,d,m,h);return new Response(v,{headers:u})},toStream(l,d,m,h){return c(l,d,m,h)}}}var Ln=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;}},ti=new Set([400,401,403,404,422]);function gr(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 Qr(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 ni(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 ri(t,e,r,o){if(gr(t)===429){let a=Qr(t);if(a!==null)return Math.min(a,o)}return ni(e,r,o)}function oi(t){let e=gr(t);return e===null?true:!ti.has(e)}function si(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 m=0;m<=r;m++)try{return await t(c,u,l)}catch(h){if(d=h instanceof Error?h:new Error(String(h)),m>=r)break;if(a)try{if(!a(d))break}catch{break}if(!oi(d))break;let v=ri(d,m+1,o,n);try{s?.(m+1,d,v);}catch{}let R=l?.signal;if(R?.aborted)break;await new Promise((y,T)=>{let w=setTimeout(()=>{R?.removeEventListener("abort",k),y();},v);function k(){clearTimeout(w),T(R.reason??new Error("Aborted"));}R&&R.addEventListener("abort",k,{once:true});});}throw new Ln(r,d)}}var Fn=class extends Error{errors;constructor(e){let r=e.map((o,n)=>` [${n}] ${o.message}`).join(`
|
|
104
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!
|
|
105
|
+
${r}`),this.name="AllProvidersFailedError",this.errors=Object.freeze([...e]),e.length>0&&(this.cause=e[e.length-1]);}};function ai(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 Fn(c)}}var xn=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;}},qn=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=[];}},Zr={hour:3600*1e3,day:1440*60*1e3};function ii(t,e){return Math.ceil(t.length/e)}function eo(t,e){return t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function to(t,e,r=1){let o=Math.ceil(t*r);return t/1e6*e.inputPerMillion+o/1e6*e.outputPerMillion}function ui(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 h of o)if(!Number.isFinite(h.maxCost)||h.maxCost<0)throw new Error(`[Directive] withBudget: budgets[${h.window}].maxCost must be a non-negative finite number.`);let u=new Map;for(let h of o)u.set(h.window,new qn);let l=new qn,d=async(h,v,R)=>{let y=ii(v,a);if(r!=null&&n){let w=to(y,n,s);if(w>r){let k={estimated:w,remaining:r,window:"per-call"};try{c?.(k);}catch{}throw new xn(k)}}for(let w of o){let k=Zr[w.window],I=u.get(w.window).getCostInWindow(k),z=w.maxCost-I,_=to(y,w.pricing,s);if(_>z){let E={estimated:_,remaining:Math.max(0,z),window:w.window};try{c?.(E);}catch{}throw new xn(E)}}let T=await t(h,v,R);if(T.tokenUsage){for(let w of o){let k=u.get(w.window),C=eo(T.tokenUsage,w.pricing);k.record(C);}if(n&&o.length===0){let w=eo(T.tokenUsage,n);l.record(w);}}return T};function m(h){let v=u.get(h);if(!v)return 0;let R=Zr[h];return v.getCostInWindow(R)}return d.getSpent=m,d}function ci(t,e){return {match:(r,o)=>o.length<=t,model:e}}function li(t,e){return {match:r=>r.name===t,model:e}}function di(t,e){return {match:(r,o)=>(t.lastIndex=0,t.test(o)),model:e}}function pi(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 gi(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,h().catch(()=>{});},o));}function d(){s!==null&&(clearTimeout(s),s=null);}async function m(v){let R=0;async function y(){for(;R<v.length;){let w=R++,k=v[w];try{let C=await t(k.agent,k.input,k.options);k.resolve(C);}catch(C){k.reject(C instanceof Error?C:new Error(String(C)));}}}let T=Array.from({length:Math.min(n,v.length)},()=>y());await Promise.all(T);}async function h(){if(u&&await u,a.length===0)return;d();let v=a.splice(0);u=m(v).finally(()=>{u=null,a.length>0&&l();}),await u;}return {submit(v,R,y){return c?Promise.reject(new Error("[Directive] BatchQueue has been disposed.")):new Promise((T,w)=>{a.push({agent:v,input:R,options:y,resolve:T,reject:w}),a.length>=r?(d(),h().catch(()=>{})):l();})},async flush(){await h();},get pending(){return a.length},async dispose(){c||(c=true,d(),a.length>0&&await h());}}}function no(){return {callCount:0,errorCount:0,totalCost:0,avgLatencyMs:0,lastErrorAt:null}}function mi(t,e){return !t||!e?0:t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function fi(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]=no();let l=0,d=[...o].sort((R,y)=>(y.priority??0)-(R.priority??0));function m(){let R=Date.now();for(let T of d)try{if(T.when(u)){let w=c.get(T.provider);if(w)return {provider:w,reason:"constraint"}}}catch{}let y=e.filter(T=>{let w=u.providers[T.name];return w?!(w.lastErrorAt&&R-w.lastErrorAt<a):true});if(s&&y.length>0){let T=[...y].sort((w,k)=>{let C=w.pricing?w.pricing.inputPerMillion+w.pricing.outputPerMillion:Number.POSITIVE_INFINITY,I=k.pricing?k.pricing.inputPerMillion+k.pricing.outputPerMillion:Number.POSITIVE_INFINITY;return C!==I?C-I:w.name===r?-1:k.name===r?1:0});if(T[0]!==c.get(r))return {provider:T[0],reason:"cheapest"}}return y.length>0&&!y.some(T=>T.name===r)?{provider:y[0],reason:"default"}:{provider:c.get(r),reason:"default"}}function h(R,y,T,w,k){let C=u.providers[R]??no();if(C.callCount++,u.callCount++,k)C.errorCount++,u.errorCount++,C.lastErrorAt=Date.now();else {let z=mi(T,w);C.totalCost+=z,u.totalCost+=z;}l+=y,u.avgLatencyMs=l/u.callCount;let I=C.callCount>0?(C.avgLatencyMs*(C.callCount-1)+y)/C.callCount:y;C.avgLatencyMs=I,u.providers[R]=C,u.lastProvider=R;}let v=async(R,y,T)=>{let{provider:w,reason:k}=m();try{n?.(w.name,k);}catch{}let C=Date.now();try{let I=await w.runner(R,y,T),z=Date.now()-C;return h(w.name,z,I.tokenUsage,w.pricing),I}catch(I){let z=Date.now()-C,_=I instanceof Error?I:new Error(String(I));throw h(w.name,z,void 0,w.pricing,_),_}};return Object.defineProperty(v,"facts",{get:()=>{let R=Object.create(null);for(let y of Object.keys(u.providers))R[y]={...u.providers[y]};return {...u,providers:R}},enumerable:true}),v}function ro(t){let{transport:e,timeline:r,healthMonitor:o,getSnapshot:n,getBreakpointState:a,onResumeBreakpoint:s,onCancelBreakpoint:c,getScratchpadState:u,getDerivedState:l,onForkFromSnapshot:d,batchSize:m=1,batchIntervalMs:h=50,healthPushIntervalMs:v=0,authenticate:R}=t,y=t.maxClients??50,T=`devtools_${crypto.randomUUID()}`,w=new Set,k=new Set,C=[],I=null,z=null;function _(F,ue){try{F.send(JSON.stringify(ue));}catch{w.delete(F);}}function E(F){let ue=JSON.stringify(F),ae=[...w];for(let P of ae)try{P.send(ue);}catch{w.delete(P);}}function G(){C.length!==0&&(C.length===1?E({type:"event",event:C[0]}):E({type:"event_batch",events:C}),C=[]);}let j=r.subscribe(F=>{if(w.size!==0){if(m<=1){E({type:"event",event:F});return}C.push(F),C.length>=m&&G();}});m>1&&h>0&&(I=setInterval(G,h)),v>0&&o&&(z=setInterval(()=>{w.size>0&&E({type:"health",metrics:o.getAllMetrics()});},v));function W(F,ue){let ae;try{ae=JSON.parse(ue);}catch{_(F,{type:"error",code:"INVALID_JSON",message:"Could not parse message"});return}if(!ae||typeof ae!="object"||typeof ae.type!="string"){_(F,{type:"error",code:"INVALID_MESSAGE",message:"Missing type field"});return}let P=Date.now(),Ee=ge.get(F)??0;if(P-Ee<$e){_(F,{type:"error",code:"RATE_LIMITED",message:"Too many requests"});return}if(ge.set(F,P),ae.type==="authenticate"){if(!R){_(F,{type:"error",code:"UNKNOWN_COMMAND",message:"Authentication not configured on this server"});return}if(!k.has(F)){_(F,{type:"error",code:"ALREADY_AUTHENTICATED",message:"Already authenticated"});return}if(typeof ae.token!="string"){_(F,{type:"error",code:"AUTH_FAILED",message:"Missing token"}),F.close(),k.delete(F);return}let Ce=R(ae.token),Te=ft=>{ft?(k.delete(F),w.add(F),_(F,{type:"welcome",version:1,sessionId:T,timestamp:Date.now()})):(_(F,{type:"error",code:"AUTH_FAILED",message:"Invalid token"}),k.delete(F),F.close());};Ce instanceof Promise?Ce.then(Te).catch(()=>{_(F,{type:"error",code:"AUTH_FAILED",message:"Authentication error"}),k.delete(F),F.close();}):Te(Ce);return}if(k.has(F)){_(F,{type:"error",code:"AUTH_REQUIRED",message:"Authentication required"});return}switch(ae.type){case "ping":_(F,{type:"pong",timestamp:Date.now()});break;case "request_snapshot":n?_(F,{type:"snapshot",data:n()}):_(F,{type:"error",code:"NO_SNAPSHOT",message:"Snapshot provider not configured"});break;case "request_health":o?_(F,{type:"health",metrics:o.getAllMetrics()}):_(F,{type:"error",code:"NO_HEALTH",message:"Health monitor not configured"});break;case "request_events":{let Ce=r.getEvents(),Te=ae.since,ft=Te!=null?Ce.filter(Bt=>Bt.id>Te):Ce;_(F,{type:"event_batch",events:ft});break}case "request_breakpoints":a?_(F,{type:"breakpoints",state:a()}):_(F,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint provider not configured"});break;case "resume_breakpoint":if(s&&typeof ae.breakpointId=="string"){let Ce=ae.modifications?{input:ae.modifications.input,skip:ae.modifications.skip}:void 0;s(ae.breakpointId,Ce);}else _(F,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint resume not configured"});break;case "cancel_breakpoint":if(c&&typeof ae.breakpointId=="string"){let Ce=typeof ae.reason=="string"?ae.reason:void 0;c(ae.breakpointId,Ce);}else _(F,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint cancel not configured"});break;case "export_session":_(F,{type:"event_batch",events:r.getEvents()});break;case "import_session":{if(typeof ae.data!="string")_(F,{type:"error",code:"INVALID_DATA",message:"Missing data field for import"});else if(ae.data.length>10485760)_(F,{type:"error",code:"IMPORT_TOO_LARGE",message:`Import data exceeds ${10485760/1024/1024} MB limit`});else try{r.import(ae.data),_(F,{type:"event_batch",events:r.getEvents()});}catch(Te){let ft=Te instanceof Error?Te.message:String(Te);_(F,{type:"error",code:"IMPORT_FAILED",message:ft});}break}case "request_scratchpad":u?_(F,{type:"scratchpad_state",data:u()}):_(F,{type:"error",code:"NO_SCRATCHPAD",message:"Scratchpad provider not configured"});break;case "request_derived":l?_(F,{type:"derived_state",data:l()}):_(F,{type:"error",code:"NO_DERIVED",message:"Derived state provider not configured"});break;case "fork_from_snapshot":{if(d&&typeof ae.eventId=="number")try{let Ce=d(ae.eventId);_(F,{type:"fork_complete",eventId:ae.eventId,newEventCount:Ce.newEventCount});}catch(Ce){let Te=Ce instanceof Error?Ce.message:String(Ce);_(F,{type:"error",code:"FORK_FAILED",message:Te});}else _(F,{type:"error",code:"NO_FORK",message:"Fork provider not configured"});break}default:_(F,{type:"error",code:"UNKNOWN_COMMAND",message:`Unknown message type: ${String(ae.type).slice(0,100)}`});}}let ge=new Map,$e=50;return e.onConnection((F,ue,ae)=>{if(w.size+k.size>=y){try{let P={type:"error",code:"MAX_CLIENTS",message:"Connection limit reached"};F.send(JSON.stringify(P));}catch{}F.close();return}R?k.add(F):(w.add(F),_(F,{type:"welcome",version:1,sessionId:T,timestamp:Date.now()})),ue(P=>W(F,P)),ae(()=>{w.delete(F),k.delete(F),ge.delete(F);});}),{get clientCount(){return w.size},broadcast(F){E(F);},pushHealth(){o&&w.size>0&&E({type:"health",metrics:o.getAllMetrics()});},pushBreakpoints(){a&&w.size>0&&E({type:"breakpoints",state:a()});},pushScratchpadUpdate(F,ue){w.size>0&&E({type:"scratchpad_update",key:F,value:ue});},pushDerivedUpdate(F,ue){w.size>0&&E({type:"derived_update",id:F,value:ue});},pushTokenStream(F,ue,ae){w.size>0&&E({type:"token_stream",agentId:F,tokens:ue,tokenCount:ae});},pushStreamDone(F,ue){w.size>0&&E({type:"stream_done",agentId:F,totalTokens:ue});},close(){j(),I&&(clearInterval(I),I=null),z&&(clearInterval(z),z=null),G();for(let F of w)try{F.close();}catch{}for(let F of k)try{F.close();}catch{}w.clear(),k.clear(),ge.clear(),e.close();}}}async function hi(t,e={}){if(!t.timeline)throw new Error("[Directive DevTools] Orchestrator must have debug: true to use DevTools");let r=await oo({port:e.port??4040,host:e.host??"localhost"});return ro({transport:r,timeline:t.timeline,healthMonitor:t.healthMonitor,healthPushIntervalMs:e.healthPushIntervalMs??5e3,batchSize:e.batchSize,authenticate:e.authenticate,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 oo(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 Cn(t){return Number.isFinite(t)?t:0}function mr(t){let e=Object.keys(t),r=new Map;for(let[h,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 "${h}". Each fact key must have exactly one producer.`);r.set(R,h);}let o=[],n=new Map,a=new Map;for(let h of e)n.set(h,0),a.set(h,[]);for(let[h,v]of Object.entries(t))for(let R of v.requires??[]){let y=r.get(R);y&&y!==h&&(o.push({from:y,to:h,factKey:R}),a.get(y).push(h),n.set(h,(n.get(h)??0)+1));}let s=[];for(let[h,v]of n)v===0&&s.push(h);let c=[],u=0;for(;u<s.length;){let h=s[u++];c.push(h);for(let v of a.get(h)??[]){let R=(n.get(v)??1)-1;n.set(v,R),R===0&&s.push(v);}}if(c.length!==e.length){let h=new Set(c),v=e.filter(R=>!h.has(R));throw new Error(`[Directive Goal] Circular dependency detected among agents: ${v.join(", ")}. Review their produces/requires declarations.`)}let l=c.filter(h=>(t[h].requires??[]).every(y=>!r.has(y)||r.get(y)===h)),d=new Set;for(let h of o)d.add(h.from);let m=e.filter(h=>!d.has(h));return {order:c,edges:o,roots:l,leaves:m,producers:r}}function yi(t){let e=mr(t);return {order:[...e.order],edges:[...e.edges],roots:[...e.roots],leaves:[...e.leaves],producers:new Map(e.producers)}}function bi(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{mr(t);}catch(n){e.push(n instanceof Error?n.message:String(n));}return {valid:e.length===0,errors:e,warnings:r}}function vi(t,e=[],r=50){let o=mr(t),n=new Set;for(let d of Object.values(t))for(let m of d.produces)n.add(m);let a=[];for(let d of Object.values(t))for(let m of d.requires??[])n.has(m)||a.push(m);let s=new Set(e),c=new Set,u=[];for(let d=1;d<=r;d++){let m=o.order.filter(v=>c.has(v)?false:(t[v].requires??[]).every(T=>s.has(T)));if(m.length===0)break;let h=[];for(let v of m){c.add(v);for(let R of t[v].produces)s.has(R)||(h.push(R),s.add(R));}u.push({step:d,agents:m,availableFacts:[...s],producedFacts:h});}let l=Object.keys(t).filter(d=>!c.has(d));return {steps:u,unreachableAgents:l,externalDeps:[...new Set(a)],feasible:l.length===0}}function ki(t){let e=t.stepMetrics.map(l=>{let d=Cn(l.satisfaction),m=Cn(l.satisfactionDelta),h=l.nodesRun.join(", "),v=l.factsProduced.length>0?l.factsProduced.join(", "):"none",R=+Cn(d-m).toFixed(3),y=m>=0?`+${m.toFixed(3)}`:m.toFixed(3),T=`Step ${l.step}: Ran ${h}. Produced: ${v}. Satisfaction: ${R} \u2192 ${d.toFixed(3)} (${y}). ${l.tokensConsumed} tokens, ${l.durationMs}ms.`;return {step:l.step,agents:l.nodesRun,factsProduced:l.factsProduced,satisfaction:d,satisfactionDelta:m,durationMs:l.durationMs,tokensConsumed:l.tokensConsumed,description:T}}),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?Cn(t.stepMetrics[0].satisfaction-t.stepMetrics[0].satisfactionDelta).toFixed(3):"0",n=t.stepMetrics.length>0?Cn(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 wi(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 Ri(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 Si(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!
|
|
106
106
|
The stub client returns mock data and does not connect to real MCP servers.
|
|
107
107
|
Provide a real 'clientFactory' option to connect to actual MCP servers:
|
|
108
108
|
|
|
@@ -111,13 +111,13 @@ Provide a real 'clientFactory' option to connect to actual MCP servers:
|
|
|
111
111
|
const adapter = createMCPAdapter({
|
|
112
112
|
servers: [...],
|
|
113
113
|
clientFactory: (config) => new Client(config),
|
|
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.
|
|
114
|
+
});`):c&&console.debug("[Directive MCP] Using stub client for development. Provide 'clientFactory' for production use."));let l=t.clientFactory??(E=>wi(E,c)),d=t.approvalTimeoutMs??3e5,m={servers:new Map,toolConstraints:new Map(Object.entries(r)),rateLimiters:new Map,pendingApprovals:new Map,approvedRequests:new Set,rejectedRequests:new Set},h=0,v=new Map,R=new Map;function y(E){return new Promise((G,j)=>{if(m.approvedRequests.has(E)){m.approvedRequests.delete(E),m.pendingApprovals.delete(E),n.onApprovalResolved?.(E,true),G();return}if(m.rejectedRequests.has(E)){m.rejectedRequests.delete(E),m.pendingApprovals.delete(E);let ge=R.get(E);R.delete(E),n.onApprovalResolved?.(E,false),j(new Error(`[Directive MCP] Tool call request ${E} was rejected${ge?`: ${ge}`:""}`));return}let W=setTimeout(()=>{v.delete(E),m.pendingApprovals.delete(E),j(new Error(`[Directive MCP] Approval timeout: Request ${E} was not approved or rejected within ${d}ms. Call adapter.approve("${E}") or adapter.reject("${E}") to resolve.`));},d);v.set(E,{resolve:G,reject:j,timeoutId:W});})}function T(E,G,j){let W=v.get(E);W?(clearTimeout(W.timeoutId),v.delete(E),m.pendingApprovals.delete(E),n.onApprovalResolved?.(E,G),G?W.resolve():W.reject(new Error(`[Directive MCP] Tool call request ${E} was rejected${j?`: ${j}`:""}`))):(G?m.approvedRequests.add(E):(m.rejectedRequests.add(E),j&&R.set(E,j)),setTimeout(()=>{m.approvedRequests.delete(E),m.rejectedRequests.delete(E),R.delete(E),m.pendingApprovals.delete(E);},d));}let w=new Map;for(let E of e)m.servers.set(E.name,{config:E,client:null,tools:[],resources:[],status:"disconnected"}),w.set(E.name,{timer:null,attempts:0,maxAttempts:E.retry?.maxAttempts??10,baseDelay:E.retry?.backoffMs??5e3});async function k(E){let G=m.servers.get(E);if(!G)throw new Error(`Unknown MCP server: ${E}`);if(G.status!=="connected"){G.status="connecting";try{let j=l(G.config);await j.connect(),G.client=j,G.status="connected";let W=w.get(E);W&&(W.attempts=0,W.timer&&(clearTimeout(W.timer),W.timer=null)),j.getCapabilities().tools&&(G.tools=await j.listTools()),j.getCapabilities().resources&&(G.resources=await j.listResources()),G.lastSync=Date.now(),n.onConnect?.(E);}catch(j){if(G.status="error",G.error=j instanceof Error?j:new Error(String(j)),n.onError?.(E,G.error),s){let W=w.get(E);if(W&&W.attempts<W.maxAttempts){W.attempts++;let ge=Math.min(W.baseDelay*Math.pow(2,W.attempts-1)+Math.random()*1e3,6e4);W.timer=setTimeout(()=>{W.timer=null,k(E).catch(()=>{});},ge);}else W&&console.error(`[Directive MCP] Max reconnect attempts (${W.maxAttempts}) reached for server '${E}'. Call adapter.connectServer("${E}") to retry manually.`);}throw G.error}}}async function C(E){let G=w.get(E);G?.timer&&(clearTimeout(G.timer),G.timer=null,G.attempts=0);let j=m.servers.get(E);if(!(!j||!j.client))try{await j.client.disconnect();}finally{j.status="disconnected",j.client=null,n.onDisconnect?.(E);}}async function I(E,G,j,W){let ge=m.servers.get(E);if(!ge)throw new Error(`[Directive MCP] Unknown server '${E}'. Available servers: ${Array.from(m.servers.keys()).join(", ")||"(none)"}`);if(!ge.client)throw new Error(`[Directive MCP] Server '${E}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${E}")' first.`);let $e=`${E}.${G}`,F=m.toolConstraints.get($e);if(F){if(F.rateLimit){let ae=m.rateLimiters.get($e);if(!Ri(m.rateLimiters,$e,F.rateLimit)){let P=ae?.resetTime?new Date(ae.resetTime).toISOString():"unknown";throw new Error(`[Directive MCP] Rate limit exceeded for '${$e}': ${ae?.count??0}/${F.rateLimit} requests per minute. Resets at ${P}.`)}}if(F.maxArgSize){let ae=JSON.stringify(j).length;if(ae>F.maxArgSize)throw new Error(`Arguments exceed max size (${ae} > ${F.maxArgSize})`)}if(F.when&&!await F.when(W,j))throw new Error(`Constraint not satisfied for ${$e}`);if(F.requireApproval){let ae=`approval-${++h}-${Date.now()}`,P={id:ae,server:E,tool:G,args:j,requestedAt:Date.now()};m.pendingApprovals.set(ae,P),n.onApprovalRequest?.(P),await y(ae);}}n.onToolCall?.(E,G,j);let ue=await Promise.race([ge.client.callTool(G,j),new Promise((ae,P)=>setTimeout(()=>P(new Error(`Tool call timeout: ${$e}`)),F?.timeout??3e4))]);return n.onToolResult?.(E,G,ue),ue}let z={name:"mcp-adapter",onInit:async()=>{a&&await Promise.all(Array.from(m.servers.keys()).map(E=>k(E).catch(G=>console.error(`Failed to connect to ${E}:`,G))));},onDestroy:async()=>{for(let E of w.values())E.timer&&(clearTimeout(E.timer),E.timer=null);for(let[,E]of v)clearTimeout(E.timeoutId),E.reject(new Error("[Directive MCP] Adapter destroyed while awaiting approval"));v.clear(),await Promise.all(Array.from(m.servers.keys()).map(E=>C(E).catch(G=>console.error(`Failed to disconnect from ${E}:`,G))));}};async function _(E){for(let G of o)for(let[j,W]of m.servers)if(W.client){for(let ge of W.resources)if(typeof G.pattern=="string"?Ei(ge.uri,G.pattern):G.pattern.test(ge.uri))try{let F=await W.client.readResource(ge.uri),ue=F.contents[0]?.text??"",ae=G.transform?G.transform(ue):ue;E[G.factKey]=ae,n.onResourceUpdate?.(j,ge.uri,F);}catch(F){console.error(`Failed to sync resource ${ge.uri}:`,F);}}}return {plugin:z,async connect(){await Promise.all(Array.from(m.servers.keys()).map(k));},connectServer:k,async disconnect(){await Promise.all(Array.from(m.servers.keys()).map(C));},disconnectServer:C,getTools(){let E=new Map;for(let[G,j]of m.servers)E.set(G,j.tools);return E},getResources(){let E=new Map;for(let[G,j]of m.servers)E.set(G,j.resources);return E},async callTool(E,G,j,W){return I(E,G,j,W)},async callToolDirect(E,G,j){let W=m.servers.get(E);if(!W)throw new Error(`[Directive MCP] Unknown server '${E}'. Available servers: ${Array.from(m.servers.keys()).join(", ")||"(none)"}`);if(!W.client)throw new Error(`[Directive MCP] Server '${E}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${E}")' first.`);n.onToolCall?.(E,G,j);let ge=await W.client.callTool(G,j);return n.onToolResult?.(E,G,ge),ge},async readResource(E,G){let j=m.servers.get(E);if(!j)throw new Error(`[Directive MCP] Unknown server '${E}'. Available servers: ${Array.from(m.servers.keys()).join(", ")||"(none)"}`);if(!j.client)throw new Error(`[Directive MCP] Server '${E}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${E}")' first.`);let W=await j.client.readResource(G);return n.onResourceUpdate?.(E,G,W),W},syncResources:_,getServerStatus(E){return m.servers.get(E)},getAllServerStatuses(){return new Map(m.servers)},approve(E){if(!m.pendingApprovals.get(E)&&!v.has(E))throw new Error(`[Directive MCP] No pending approval request with ID '${E}'. Pending requests: ${Array.from(m.pendingApprovals.keys()).join(", ")||"(none)"}`);T(E,true);},reject(E,G){if(!m.pendingApprovals.get(E)&&!v.has(E))throw new Error(`[Directive MCP] No pending approval request with ID '${E}'. Pending requests: ${Array.from(m.pendingApprovals.keys()).join(", ")||"(none)"}`);T(E,false,G);},getPendingApprovals(){return Array.from(m.pendingApprovals.values())},getRejectionReason(E){return R.get(E)}}}var Mn=new Map,Ti=200;function Ei(t,e){let r=Mn.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}$`),Mn.size>=Ti){let n=Mn.keys().next().value;n!==void 0&&Mn.delete(n);}Mn.set(e,r);}return r.test(t)}function Ai(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 xi(t,e,r){return {type:"MCP_CALL_TOOL",server:t,tool:e,args:r}}function Ci(t,e){return {type:"MCP_READ_RESOURCE",server:t,uri:e}}function Mi(t,e,r){return {type:"MCP_GET_PROMPT",server:t,prompt:e,args:r}}function Di(t,e){return {type:"MCP_SYNC_RESOURCES",server:t,pattern:e}}var fr=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 Pi(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 Ii(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 Oi(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 so={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 _i(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 Ni(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 $i(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??Number.POSITIVE_INFINITY,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!==Number.POSITIVE_INFINITY?Math.max(0,1-(n-s)/s):0,{score:u,passed:c,reason:`${n} chars (range: ${a}-${s===Number.POSITIVE_INFINITY?"\u221E":s})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function ji(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=so[r];o&&e.push(...o);}}else {e=[];for(let r of Object.values(so))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 Gi(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 Bi(t){let e=t.promptTemplate??`You are evaluating an AI agent's output. Score it from 0.0 to 1.0.
|
|
115
115
|
|
|
116
116
|
Input: {{input}}
|
|
117
117
|
Expected: {{expected}}
|
|
118
118
|
Actual Output: {{output}}
|
|
119
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
|
|
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 m=JSON.parse(d),h=Math.max(0,Math.min(1,m.score));return {score:h,passed:h>=.5,reason:m.reason??`Judge score: ${h}`,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 Li(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 Fi=`You are evaluating an AI agent's output for faithfulness to the provided context.
|
|
121
121
|
|
|
122
122
|
Faithfulness measures whether all claims in the output are supported by the context.
|
|
123
123
|
Score 1.0 if every claim is grounded in the context.
|
|
@@ -126,7 +126,7 @@ Score 0.0 if the output contains fabricated information not in the context.
|
|
|
126
126
|
Context: {{context}}
|
|
127
127
|
Agent Output: {{output}}
|
|
128
128
|
|
|
129
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
129
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function qi(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=Fi.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 m=JSON.parse(d),h=Math.max(0,Math.min(1,m.score));return {score:h,passed:h>=.7,reason:m.reason??`Faithfulness score: ${h}`,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 Ui=`You are evaluating an AI agent's output for relevance to the user's question.
|
|
130
130
|
|
|
131
131
|
Relevance measures whether the output directly addresses the question asked.
|
|
132
132
|
Score 1.0 if the output fully and directly answers the question.
|
|
@@ -135,7 +135,7 @@ Score 0.0 if the output is completely off-topic or irrelevant.
|
|
|
135
135
|
User Question: {{input}}
|
|
136
136
|
Agent Output: {{output}}
|
|
137
137
|
|
|
138
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
138
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function Hi(t){return {name:"relevance",fn:async e=>{let r=Date.now(),o=Ui.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),m=Math.max(0,Math.min(1,d.score));return {score:m,passed:m>=.7,reason:d.reason??`Relevance score: ${m}`,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 zi=`You are evaluating an AI agent's output for coherence and logical consistency.
|
|
139
139
|
|
|
140
140
|
Coherence measures whether the output is well-structured, logically consistent,
|
|
141
141
|
and flows naturally. Check for contradictions, non-sequiturs, and clarity.
|
|
@@ -144,7 +144,7 @@ Score 0.0 if the output is incoherent, contradictory, or disorganized.
|
|
|
144
144
|
|
|
145
145
|
Agent Output: {{output}}
|
|
146
146
|
|
|
147
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
147
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function Ji(t){return {name:"coherence",fn:async e=>{let r=Date.now(),o=zi.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),m=Math.max(0,Math.min(1,d.score));return {score:m,passed:m>=.7,reason:d.reason??`Coherence score: ${m}`,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 Wi(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 fr(a),m={};for(let[R,y]of Object.entries(t.criteria))m[R]=Pi(R,y);async function h(R,y){try{await d.acquire(l);}catch{let T={};for(let w of Object.keys(m))T[w]={score:0,passed:false,reason:"Evaluation aborted",durationMs:0};return {testCase:y,agentName:R.name,runResult:{output:"",messages:[],toolCalls:[],totalTokens:0},scores:T,overallScore:0,allPassed:false,runDurationMs:0}}try{let T=Date.now(),w;try{w=await r(R,y.input,{...n,signal:l});}catch(G){let j={output:"",messages:[],toolCalls:[],totalTokens:0},W={};for(let ge of Object.keys(m))W[ge]={score:0,passed:!1,reason:`Agent error: ${G instanceof Error?`${G.name}: ${G.message}`:String(G)}`,durationMs:0};return {testCase:y,agentName:R.name,runResult:j,scores:W,overallScore:0,allPassed:!1,runDurationMs:Date.now()-T}}let k=Date.now()-T,C={agent:R,testCase:y,result:w,runDurationMs:k},I={};for(let[G,j]of Object.entries(m))try{let W=await j.fn(C);I[G]={...W,passed:W.score>=(j.threshold??.5)};}catch(W){I[G]={score:0,passed:!1,reason:`Criterion error: ${W instanceof Error?`${W.name}: ${W.message}`:String(W)}`,durationMs:0};}let z=Ii(I,m),_=Object.values(I).every(G=>G.passed),E={testCase:y,agentName:R.name,runResult:w,scores:I,overallScore:z,allPassed:_,runDurationMs:k};return s&&s.record({type:"agent_complete",timestamp:Date.now(),agentId:`eval:${R.name}`,outputLength:String(w.output).length,totalTokens:w.totalTokens,durationMs:k,snapshotId:null}),c?.(E),E}finally{d.release();}}function v(R,y){let T={},w={},k=0,C=0,I=0;for(let j of Object.keys(m))T[j]=0,w[j]=0;for(let j of y){k+=j.runResult.totalTokens,C+=j.runDurationMs,j.allPassed&&I++;for(let[W,ge]of Object.entries(j.scores))T[W]=(T[W]??0)+ge.score,ge.passed&&(w[W]=(w[W]??0)+1);}let z=y.length,_={},E={};for(let j of Object.keys(m))_[j]=z>0?(T[j]??0)/z:0,E[j]=z>0?(w[j]??0)/z:0;let G=z>0?Oi(_,m):0;return {agentName:R,criterionAverages:_,criterionPassRates:E,overallScore:G,passRate:z>0?I/z:0,totalTokens:k,avgLatencyMs:z>0?C/z:0,totalCases:z,passedCases:I}}return {getAgents:()=>[...e],getCriteria:()=>Object.keys(m),getDataset:()=>[...o],async run(){let R=Date.now(),y=[],T={},w=e.map(async I=>{if(l?.aborted)return;let z=await Promise.all(o.map(_=>h(I,_)));return {agent:I,agentResults:z}}),k=await Promise.all(w);for(let I of k){if(!I)continue;y.push(...I.agentResults);let z=v(I.agent.name,I.agentResults);T[I.agent.name]=z,u?.(z);}let C=Date.now();return {summary:T,details:y,durationMs:C-R,totalTokens:y.reduce((I,z)=>I+z.runResult.totalTokens,0),startedAt:R,completedAt:C}},async runAgent(R){let y=e.find(k=>k.name===R);if(!y)throw new Error(`[Directive Evals] Unknown agent: "${R}"`);let T=await Promise.all(o.map(k=>h(y,k))),w=v(y.name,T);return u?.(w),w}}}function Vi(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
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
|
|
149
|
+
`)}`)}var dt={UNSET:0,OK:1,ERROR:2},Un=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:dt.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}}},hr=class{spans=[];startSpan(e,r){let o=r?.spanId??`fallback-${crypto.randomUUID()}`,n=r?.traceId??`fallback-${crypto.randomUUID()}`,a=r?.parentSpanId;return new Un(e,o,n,a,r?.attributes,s=>{this.spans.push(s.toSpanData());})}clear(){this.spans.length=0;}};function Ki(t){let e=t.spanPrefix??"directive.ai",r=t.instrumentEvents,o=t.spanTtlMs??3e5,n=!t.tracer,a=n?new hr: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,m=0,h=new Map,v=[],R=null,y=false;function T(S){return r?r.has(S):true}function w(S,H){return `${S}:${H}:${m++}`}function k(S,H){let te=`${S}:${H}`,we=h.get(te);if(we){for(let re=we.length-1;re>=0;re--){let at=d.get(we[re]);if(at)return {key:we[re],entry:at}}h.delete(te);}return null}function C(S,H,te,we){let re=`${S}:${H}`;we.indexKey=re,d.set(te,we);let at=h.get(re);at?at.push(te):h.set(re,[te]);}function I(S){let H=d.get(S);d.delete(S);let te=H?.indexKey;if(te){let we=h.get(te);if(we){let re=we.indexOf(S);re!==-1&&we.splice(re,1),we.length===0&&h.delete(te);}}}function z(){let S=Date.now();if(d.size<1e4){for(let[te,we]of d)S-we.startTime>o&&(j(we,"directive.stale",true),ge(we,{code:dt.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),E(we),I(te),true);return void 0}for(let[H,te]of d)S-te.startTime>o&&(j(te,"directive.stale",true),ge(te,{code:dt.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),E(te),I(H));}function _(S,H,te){let we=u(),re=te?.traceId??l(),at=te?.spanId,_t;n?_t=s.startSpan(S,{attributes:H,spanId:we,traceId:re,parentSpanId:at}):_t=s.startSpan(S,{attributes:H});let jt={span:_t,spanId:we,traceId:re,startTime:Date.now()};return n||(jt.shadow={span:_t,name:S,spanId:we,traceId:re,parentSpanId:at,attributes:{...H},events:[],status:{code:dt.UNSET},startTime:jt.startTime}),{span:_t,entry:jt}}function E(S){S.span.end(),t.onSpanEnd&&t.onSpanEnd(G(S));}function G(S){if(S.span instanceof Un)return S.span.toSpanData();if(S.shadow){let te=Date.now();return {name:S.shadow.name,traceId:S.shadow.traceId,spanId:S.shadow.spanId,parentSpanId:S.shadow.parentSpanId,attributes:{...S.shadow.attributes},events:[...S.shadow.events],status:{...S.shadow.status},startTime:S.shadow.startTime,endTime:te,durationMs:te-S.shadow.startTime}}let H=Date.now();return {name:"unknown",traceId:S.traceId,spanId:S.spanId,attributes:{},events:[],status:{code:dt.UNSET},startTime:S.startTime,endTime:H,durationMs:H-S.startTime}}function j(S,H,te){S.span.setAttribute(H,te),S.shadow&&(S.shadow.attributes[H]=te);}function W(S,H,te){S.span.addEvent(H,te),S.shadow&&S.shadow.events.push({name:H,attributes:te,timestamp:Date.now()});}function ge(S,H){S.span.setStatus(H),S.shadow&&(S.shadow.status={...H});}function $e(S){if(T(S.type))switch(z(),S.type){case "agent_start":F(S);break;case "agent_complete":ue(S);break;case "agent_error":ae(S);break;case "guardrail_check":P(S);break;case "constraint_evaluate":Ee(S);break;case "resolver_start":Ce(S);break;case "resolver_complete":Te(S);break;case "resolver_error":ft(S);break;case "pattern_start":Bt(S);break;case "pattern_complete":Lt(S);break;default:if(S.agentId){let H=k("agent",S.agentId);H&&W(H.entry,S.type,{"event.id":S.id,"event.timestamp":S.timestamp});}}}function F(S){let H=v.length>0?v[v.length-1]:null,{entry:te}=_(`${e}.agent.run`,{"directive.service":t.serviceName,"directive.agent.name":S.agentId,"directive.agent.input_length":S.inputLength,"gen_ai.operation.name":"agent.run","gen_ai.agent.name":S.agentId},H),we=w("agent",S.agentId);C("agent",S.agentId,we,te);}function ue(S){let H=k("agent",S.agentId);H&&(j(H.entry,"directive.agent.output_length",S.outputLength),j(H.entry,"directive.agent.total_tokens",S.totalTokens),j(H.entry,"directive.agent.duration_ms",S.durationMs),j(H.entry,"gen_ai.usage.total_tokens",S.totalTokens),ge(H.entry,{code:dt.OK}),E(H.entry),I(H.key));}function ae(S){let H=k("agent",S.agentId);H&&(j(H.entry,"directive.agent.duration_ms",S.durationMs),j(H.entry,"directive.agent.error",S.errorMessage),j(H.entry,"gen_ai.error.message",S.errorMessage),ge(H.entry,{code:dt.ERROR,message:S.errorMessage}),E(H.entry),I(H.key));}function P(S){let H=S.agentId?k("agent",S.agentId)?.entry??null:null,{entry:te}=_(`${e}.guardrail.check`,{"directive.service":t.serviceName,"directive.guardrail.name":S.guardrailName,"directive.guardrail.type":S.guardrailType,"directive.guardrail.passed":S.passed,"directive.guardrail.duration_ms":S.durationMs,"gen_ai.guardrail.name":S.guardrailName,"gen_ai.guardrail.type":S.guardrailType,"gen_ai.guardrail.passed":S.passed},H);S.reason&&j(te,"directive.guardrail.reason",S.reason),ge(te,{code:S.passed?dt.OK:dt.ERROR,message:S.passed?void 0:S.reason}),E(te);}function Ee(S){if(S.agentId){let te=k("agent",S.agentId);if(te){W(te.entry,"constraint_evaluate",{"directive.constraint.id":S.constraintId,"directive.constraint.fired":S.fired});return}}let{entry:H}=_(`${e}.constraint.evaluate`,{"directive.service":t.serviceName,"directive.constraint.id":S.constraintId,"directive.constraint.fired":S.fired},null);ge(H,{code:dt.OK}),E(H);}function Ce(S){let te=(S.agentId?k("agent",S.agentId)?.entry??null:null)??(v.length>0?v[v.length-1]:null),{entry:we}=_(`${e}.resolver.execute`,{"directive.service":t.serviceName,"directive.resolver.id":S.resolverId,"directive.resolver.requirement_type":S.requirementType},te),re=w("resolver",S.resolverId);C("resolver",S.resolverId,re,we);}function Te(S){let H=k("resolver",S.resolverId);H&&(j(H.entry,"directive.resolver.duration_ms",S.durationMs),ge(H.entry,{code:dt.OK}),E(H.entry),I(H.key));}function ft(S){let H=k("resolver",S.resolverId);H&&(j(H.entry,"directive.resolver.duration_ms",S.durationMs),j(H.entry,"directive.resolver.error",S.errorMessage),ge(H.entry,{code:dt.ERROR,message:S.errorMessage}),E(H.entry),I(H.key));}function Bt(S){let H=v.length>0?v[v.length-1]:null,{entry:te}=_(`${e}.pattern.${S.patternType}`,{"directive.service":t.serviceName,"directive.pattern.id":S.patternId,"directive.pattern.type":S.patternType},H),we=w("pattern",S.patternId);C("pattern",S.patternId,we,te),v.length<100&&v.push(te);}function Lt(S){let H=k("pattern",S.patternId);if(H){j(H.entry,"directive.pattern.duration_ms",S.durationMs),S.error?(j(H.entry,"directive.pattern.error",S.error),ge(H.entry,{code:dt.ERROR,message:S.error})):ge(H.entry,{code:dt.OK}),E(H.entry),I(H.key);let te=v.indexOf(H.entry);te!==-1&&v.splice(te,1);}}return {attach(S){if(R&&R!==S)throw new Error("[Directive OTEL] Plugin already attached to a different timeline. Create a new plugin instance.");R=S;let H=S.subscribe($e),te=setInterval(z,Math.min(o,6e4));return ()=>{H(),clearInterval(te),R=null;for(let[we,re]of d)j(re,"directive.detached",true),ge(re,{code:dt.ERROR,message:"Plugin detached while span was active"}),E(re);d.clear(),h.clear(),v.length=0;}},getSpans(){return a?[...a.spans]:(y||(y=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=Fn;exports.BudgetExceededError=xn;exports.DEFAULT_INJECTION_PATTERNS=En;exports.GuardrailError=lt;exports.InMemoryCheckpointStore=Yn;exports.MAX_BREAKPOINT_HISTORY=Dt;exports.OtelStatusCode=dt;exports.ReflectionExhaustedError=an;exports.RetryExhaustedError=Ln;exports.STRICT_INJECTION_PATTERNS=cr;exports.Semaphore=Ot;exports.StructuredOutputError=jn;exports.adaptOutputGuardrail=cs;exports.aggregateTokens=Fs;exports.allReadyStrategy=Is;exports.byAgentName=li;exports.byInputLength=ci;exports.byPattern=di;exports.capabilityRoute=Us;exports.collectOutputs=Ls;exports.collectTokens=ls;exports.combineStreamingGuardrails=us;exports.composePatterns=qs;exports.concatResults=Gs;exports.connectDevTools=hi;exports.convertToolsForLLM=Ai;exports.costEfficientStrategy=_s;exports.createAgentAuditHandlers=Da;exports.createAgentMemory=es;exports.createAgentNetwork=pa;exports.createAgentOrchestrator=jo;exports.createAuditTrail=Ma;exports.createBatchQueue=gi;exports.createBatchedEmbedder=Ua;exports.createBidirectionalStream=Ja;exports.createBreakpointId=vn;exports.createBruteForceIndex=Ha;exports.createCheckpointId=Pt;exports.createCompliance=Ga;exports.createConstraintRouter=fi;exports.createContentFilterGuardrail=zo;exports.createDebugTimeline=mn;exports.createDebugTimelinePlugin=fn;exports.createDelegator=ma;exports.createDevToolsServer=ro;exports.createEnhancedPIIGuardrail=Fr;exports.createEvalSuite=Wi;exports.createHealthMonitor=rr;exports.createHybridStrategy=Zo;exports.createInMemoryComplianceStorage=ja;exports.createInMemoryStorage=Kr;exports.createInitialBreakpointState=on;exports.createJSONFileStore=Za;exports.createKeyPointsSummarizer=ns;exports.createLLMSummarizer=rs;exports.createLengthGuardrail=Ho;exports.createLengthStreamingGuardrail=as;exports.createMCPAdapter=Si;exports.createMessageBus=da;exports.createModerationGuardrail=Bo;exports.createMultiAgentOrchestrator=$r;exports.createOtelPlugin=Ki;exports.createOutputPIIGuardrail=ka;exports.createOutputSchemaGuardrail=qo;exports.createOutputTypeGuardrail=Uo;exports.createPIIGuardrail=Go;exports.createPatternStreamingGuardrail=is;exports.createPromptInjectionGuardrail=Wr;exports.createPubSub=fa;exports.createRAGEnricher=Qa;exports.createRateLimitGuardrail=Lo;exports.createResponder=ga;exports.createRunner=Yo;exports.createSSETransport=ei;exports.createSemanticCache=La;exports.createSemanticCacheGuardrail=Fa;exports.createSlidingWindowStrategy=Ir;exports.createStreamChannel=pr;exports.createStreamingRunner=os;exports.createTestEmbedder=qa;exports.createTokenBasedStrategy=Or;exports.createToolGuardrail=Fo;exports.createToxicityStreamingGuardrail=ss;exports.createTruncationSummarizer=ts;exports.createUntrustedContentGuardrail=Ia;exports.createVPTreeIndex=za;exports.createWsTransport=oo;exports.dag=Cs;exports.debate=zs;exports.derivedConstraint=Ws;exports.detectPII=ur;exports.detectPromptInjection=lr;exports.diffCheckpoints=Rs;exports.estimateCost=Vo;exports.evalAssert=Vi;exports.evalCoherence=Ji;exports.evalCost=_i;exports.evalFaithfulness=qi;exports.evalJudge=Bi;exports.evalLatency=Ni;exports.evalMatch=Li;exports.evalOutputLength=$i;exports.evalRelevance=Hi;exports.evalSafety=ji;exports.evalStructure=Gi;exports.explainGoal=ki;exports.extractJsonFromOutput=wn;exports.filterStream=ps;exports.findAgentsByCapability=sr;exports.forkFromCheckpoint=Ss;exports.getCheckpointProgress=ks;exports.getDependencyGraph=yi;exports.getPatternStep=un;exports.goal=Ps;exports.hasPendingApprovals=Wo;exports.highestImpactStrategy=Os;exports.isAgentRunning=Jo;exports.isGuardrailError=Xn;exports.mapStream=gs;exports.markUntrustedContent=Pa;exports.matchBreakpoint=kn;exports.mcpCallTool=xi;exports.mcpGetPrompt=Mi;exports.mcpReadResource=Ci;exports.mcpSyncResources=Di;exports.mergeStreams=Va;exports.mergeTaggedStreams=tr;exports.parallel=Es;exports.parseHttpStatus=gr;exports.parseRetryAfter=Qr;exports.patternFromJSON=Xs;exports.patternToJSON=ar;exports.patternToMermaid=la;exports.pickBestResult=Bs;exports.pipe=Qo;exports.pipeThrough=Wa;exports.planGoal=vi;exports.race=Ds;exports.redactPII=Bn;exports.reflect=Ms;exports.runAgentRequirement=js;exports.runDebate=Js;exports.sanitizeInjection=Jr;exports.selectAgent=$s;exports.sequential=As;exports.spawnOnCondition=Hs;exports.spawnPool=Vs;exports.supervisor=xs;exports.tapStream=ds;exports.validateBaseURL=Xo;exports.validateCheckpoint=sn;exports.validateGoal=bi;exports.withBudget=ui;exports.withFallback=ai;exports.withModelSelection=pi;exports.withReflection=hs;exports.withRetry=si;exports.withStructuredOutput=Rn;//# sourceMappingURL=index.cjs.map
|
|
150
150
|
//# sourceMappingURL=index.cjs.map
|