@directive-run/ai 0.4.1 → 0.5.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/testing.js CHANGED
@@ -1,49 +1,49 @@
1
- import {t,createModule,createSystem}from'@directive-run/core';import {requirementGuard,createCallbackPlugin,setBridgeFact,getBridgeFact}from'@directive-run/core/adapter-utils';var et=class extends Error{code;guardrailName;guardrailType;userMessage;agentName;constructor(t){super(t.message,{cause:t.cause}),this.name="GuardrailError",this.code=t.code,this.guardrailName=t.guardrailName,this.guardrailType=t.guardrailType,this.userMessage=t.userMessage??t.message,this.agentName=t.agentName,Object.defineProperty(this,"input",{value:t.input,enumerable:false,writable:false,configurable:false}),Object.defineProperty(this,"data",{value:t.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 Hn(i){return i instanceof et}var hn="__agent",Ot="__approval",bn="__conversation",kn="__toolCalls",Mt="__breakpoints";var tt="__scratchpad",tn={facts:{[hn]:t.object(),[Ot]:t.object(),[bn]:t.array(),[kn]:t.array(),[Mt]:t.object()},derivations:{},events:{},requirements:{}};var Sr=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"]),Un=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Jt(i={}){let t=i.maxEvents??2e3,u=i.goToSnapshot;if(!Number.isFinite(t)||t<1)throw new Error("[Directive DebugTimeline] maxEvents must be >= 1");let a=[],d=0,f=new Set;return {record(S){let w={...S,id:d++};a.push(w);let v=a.length-t;v>0&&a.splice(0,v);for(let A of f)try{A(w);}catch(Q){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.error("[Directive DebugTimeline] Listener threw:",Q instanceof Error?Q.message:Q);}return w},getEvents(){return [...a]},getEventsForAgent(S){return a.filter(w=>w.agentId===S)},getEventsByType(S){return a.filter(w=>w.type===S)},getEventsAtSnapshot(S){return a.filter(w=>w.snapshotId===S)},getEventsInRange(S,w){return a.filter(v=>v.timestamp>=S&&v.timestamp<=w)},forkFrom(S){let w=-1;for(let v=a.length-1;v>=0;v--)if(a[v].snapshotId!==null&&a[v].snapshotId<=S){w=a[v].id;break}if(w>=0){let v=a.length;for(let A=a.length-1;A>=0;A--)if(a[A].id<=w){v=A+1;break}a=a.slice(0,v);}else a=[];u&&u(S);},export(){return JSON.stringify({version:1,events:a,nextId:d})},import(S){let w;try{w=JSON.parse(S);}catch{throw new Error("[Directive DebugTimeline] Invalid JSON")}if(!w||typeof w!="object")throw new Error("[Directive DebugTimeline] Invalid timeline data");for(let Q of Object.keys(w))if(Un.has(Q))throw new Error(`[Directive DebugTimeline] Blocked key in import: ${Q}`);let v=w;if(!Array.isArray(v.events))throw new Error("[Directive DebugTimeline] Missing events array");let A=[];for(let Q of v.events){if(!Q||typeof Q!="object")continue;for(let Ce of Object.keys(Q))if(Un.has(Ce))throw new Error(`[Directive DebugTimeline] Blocked key in event: ${Ce}`);let F=Q;typeof F.id=="number"&&typeof F.type=="string"&&Sr.has(F.type)&&typeof F.timestamp=="number"&&A.push(Q);}a=A.length>t?A.slice(-t):A,d=typeof v.nextId=="number"?v.nextId:A.length;},clear(){a=[],d=0;},subscribe(S){return f.add(S),()=>{f.delete(S);}},get length(){return a.length}}}function yn(i,t){let u=new Map;return {name:"directive-ai-debug-timeline",onConstraintEvaluate(a,d){i.record({type:"constraint_evaluate",timestamp:Date.now(),snapshotId:t(),constraintId:a,fired:d});},onResolverStart(a,d){u.set(a,Date.now()),i.record({type:"resolver_start",timestamp:Date.now(),snapshotId:t(),resolverId:a,requirementType:d.requirement.type});},onResolverComplete(a){let d=u.get(a);u.delete(a),i.record({type:"resolver_complete",timestamp:Date.now(),snapshotId:t(),resolverId:a,durationMs:d?Date.now()-d:0});},onResolverError(a,d,f){let k=u.get(a);u.delete(a);let S=f instanceof Error?f.message:String(f);i.record({type:"resolver_error",timestamp:Date.now(),snapshotId:t(),resolverId:a,errorMessage:S,durationMs:k?Date.now()-k:0});}}}function gt(i,t,u){return typeof i=="function"?{name:`${u}-guardrail-${t}`,fn:i,critical:true}:i}function Er(i,t){let{backoff:u="exponential",baseDelayMs:a=100,maxDelayMs:d=5e3}=t,f;switch(u){case "exponential":f=a*2**(i-1);break;case "linear":f=a*i;break;default:f=a;}return Math.min(f,d)}function Jn(i,t){return t?.aborted?Promise.reject(t.reason??new Error("Aborted")):new Promise((u,a)=>{if(!t){setTimeout(u,i);return}let d=()=>{clearTimeout(f),a(t.reason??new Error("Aborted"));},f=setTimeout(()=>{t.removeEventListener("abort",d),u();},i);t.addEventListener("abort",d,{once:true});})}async function ft(i,t,u,a){let{retry:d}=i,f=Math.max(d?.attempts??1,1),k;for(let S=1;S<=f;S++)try{return await i.fn(t,u)}catch(w){if(k=w instanceof Error?w:new Error(String(w)),S<f){let v=Er(S,d??{});await Jn(v,a);}}return {passed:false,reason:`Guardrail "${i.name}" failed after ${f} attempt(s): ${k.message}`}}function Ar(i,t){let{backoff:u="exponential",baseDelayMs:a=1e3,maxDelayMs:d=3e4}=t,f;switch(u){case "exponential":f=a*2**(i-1);break;case "linear":f=a*i;break;default:f=a;}return Math.min(f,d)}async function nn(i,t,u,a,d){let f=Math.max(d?.attempts??1,1),k=d?.isRetryable??(()=>true),S=d?.onRetry,w;for(let v=1;v<=f;v++)try{return await i(t,u,a)}catch(A){if(w=A instanceof Error?A:new Error(String(A)),v<f){let Q=true;try{Q=k(w);}catch{break}if(!Q)break;let F=Ar(v,d??{});try{S?.(v,w,F);}catch{}await Jn(F,a?.signal);}else break}throw w}function Je(i){return getBridgeFact(i,hn)}function We(i,t){setBridgeFact(i,hn,t);}function ut(i){return getBridgeFact(i,Ot)}function rt(i,t){setBridgeFact(i,Ot,t);}function Wt(i){return getBridgeFact(i,bn)}function mt(i,t){setBridgeFact(i,bn,t);}function Kt(i){return getBridgeFact(i,kn)}function ht(i,t){setBridgeFact(i,kn,t);}function st(i){return getBridgeFact(i,Mt)}function at(i,t){setBridgeFact(i,Mt,t);}function nt(i){return {agent:Je(i),approval:ut(i),conversation:Wt(i),toolCalls:Kt(i)}}function Vt(i){let t=Object.create(null);for(let[u,a]of Object.entries(i))t[u]={priority:a.priority??0,when:d=>{let f=nt(d),k={...d,...f};return a.when(k)},require:d=>{let f=nt(d),k={...d,...f};return typeof a.require=="function"?a.require(k):a.require}};return t}function Wn(i,t,u){let a=Object.create(null);for(let[d,f]of Object.entries(i))a[d]={requirement:f.requirement,key:f.key,resolve:async(k,S)=>{let w=nt(S.facts),A={facts:{...S.facts,...w},runAgent:async(Q,F,Ce)=>t(Q,F,nt(u()),Ce),signal:S.signal};await f.resolve(k,A);}};return a}var yt=200,xr=0;function vn(){return `bp_${Date.now().toString(36)}_${(++xr).toString(36)}`}function wn(i,t,u){for(let a of i)if(a.type===t){if(!a.when)return a;try{if(a.when(u))return a}catch{}}return null}function sn(){return {pending:[],resolved:[],cancelled:[]}}var Kn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function vt(){let i=Date.now().toString(36),t=crypto.randomUUID().slice(0,8);return `ckpt_${i}_${t}`}function an(i){if(!i||typeof i!="object")return false;for(let a of Object.keys(i))if(Kn.has(a))return false;let t=i;if(t.version!==1||typeof t.id!="string"||t.id.length===0||typeof t.createdAt!="string"||typeof t.systemExport!="string"||t.timelineExport!==null&&typeof t.timelineExport!="string"||!t.localState||typeof t.localState!="object")return false;for(let a of Object.keys(t.localState))if(Kn.has(a))return false;let u=t.localState;return !(u.type!=="single"&&u.type!=="multi"||t.orchestratorType!=="single"&&t.orchestratorType!=="multi")}var Rn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(t){if(this.maxCheckpoints=t?.maxCheckpoints??100,this.retentionMs=t?.retentionMs??Number.POSITIVE_INFINITY,this.preserveLabeled=t?.preserveLabeled??false,!Number.isFinite(this.maxCheckpoints)||this.maxCheckpoints<1)throw new Error(`[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`)}async save(t){if(!an(t))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let u=this.order.indexOf(t.id);return u>=0&&this.order.splice(u,1),this.store.set(t.id,t),this.order.push(t.id),t.id}async load(t){return this.store.get(t)??null}async list(){return this.order.map(t=>{let u=this.store.get(t);return {id:u.id,label:u.label,createdAt:u.createdAt}})}async delete(t){if(!this.store.has(t))return false;this.store.delete(t);let u=this.order.indexOf(t);return u>=0&&this.order.splice(u,1),true}async clear(){this.store.clear(),this.order.length=0;}async prune(){if(!Number.isFinite(this.retentionMs))return 0;let t=Date.now()-this.retentionMs,u=0,a=[];for(let d of this.order){let f=this.store.get(d);if(!f)continue;if(new Date(f.createdAt).getTime()>=t)break;this.preserveLabeled&&f.label||a.push(d);}for(let d of a){this.store.delete(d);let f=this.order.indexOf(d);f>=0&&this.order.splice(f,1),u++;}return u}evictOldest(){if(this.preserveLabeled)for(let u=0;u<this.order.length;u++){let a=this.order[u],d=this.store.get(a);if(d&&!d.label)return this.order.splice(u,1),this.store.delete(a),true}let t=this.order.shift();return t?(this.store.delete(t),true):false}};function _n(i){if(i.length>1048576)throw new Error(`[Directive] Output too large for JSON extraction (${i.length} chars, max 1048576).`);let t=i.trim();try{return JSON.parse(t)}catch{}let u=t.indexOf("{"),a=t.indexOf("["),d,f,k;if(u===-1&&a===-1)throw new Error("[Directive] No JSON object or array found in output");u===-1?(d=a,f="[",k="]"):a===-1?(d=u,f="{",k="}"):(d=Math.min(u,a),f=d===u?"{":"[",k=d===u?"}":"]");let S=0,w=false,v=false;for(let A=d;A<t.length;A++){let Q=t[A];if(v){v=false;continue}if(Q==="\\"){v=true;continue}if(Q==='"'){w=!w;continue}if(!w){if(Q===f)S++;else if(Q===k&&(S--,S===0)){let F=t.slice(d,A+1);try{return JSON.parse(F)}catch{let Ce=F.replace(/"(?:[^"\\]|\\.)*"/g,Fe=>Fe.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"));return JSON.parse(Ce)}}}}throw new Error("[Directive] No valid JSON found in output")}function Cr(i){return i?i.issues&&i.issues.length>0?i.issues.map(t=>t.message).join("; "):i.message??"Validation failed":"Validation failed"}function Tn(i,t){let{schema:u,maxRetries:a=2,extractJson:d=_n,schemaDescription:f}=t;if(!Number.isFinite(a)||a<0)throw new Error("[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.");let k=f??u.description??"the specified JSON schema";return async(S,w,v)=>{let A={...S,instructions:(S.instructions??"")+`
1
+ import {t,createModule,createSystem}from'@directive-run/core';import {requirementGuard,createCallbackPlugin,setBridgeFact,getBridgeFact}from'@directive-run/core/adapter-utils';var et=class extends Error{code;guardrailName;guardrailType;userMessage;agentName;constructor(t){super(t.message,{cause:t.cause}),this.name="GuardrailError",this.code=t.code,this.guardrailName=t.guardrailName,this.guardrailType=t.guardrailType,this.userMessage=t.userMessage??t.message,this.agentName=t.agentName,Object.defineProperty(this,"input",{value:t.input,enumerable:false,writable:false,configurable:false}),Object.defineProperty(this,"data",{value:t.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 Hn(i){return i instanceof et}var hn="__agent",Ot="__approval",bn="__conversation",kn="__toolCalls",Mt="__breakpoints";var tt="__scratchpad",tn={facts:{[hn]:t.object(),[Ot]:t.object(),[bn]:t.array(),[kn]:t.array(),[Mt]:t.object()},derivations:{},events:{},requirements:{}};var Sr=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"]),Un=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Jt(i={}){let t=i.maxEvents??2e3,u=i.goToSnapshot;if(!Number.isFinite(t)||t<1)throw new Error("[Directive DebugTimeline] maxEvents must be >= 1");let s=[],d=0,f=new Set;return {record(S){let w={...S,id:d++};s.push(w);let y=s.length-t;y>0&&s.splice(0,y);for(let A of f)try{A(w);}catch(Q){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.error("[Directive DebugTimeline] Listener threw:",Q instanceof Error?Q.message:Q);}return w},getEvents(){return [...s]},getEventsForAgent(S){return s.filter(w=>w.agentId===S)},getEventsByType(S){return s.filter(w=>w.type===S)},getEventsAtSnapshot(S){return s.filter(w=>w.snapshotId===S)},getEventsInRange(S,w){return s.filter(y=>y.timestamp>=S&&y.timestamp<=w)},forkFrom(S){let w=-1;for(let y=s.length-1;y>=0;y--)if(s[y].snapshotId!==null&&s[y].snapshotId<=S){w=s[y].id;break}if(w>=0){let y=s.length;for(let A=s.length-1;A>=0;A--)if(s[A].id<=w){y=A+1;break}s=s.slice(0,y);}else s=[];u&&u(S);},export(){return JSON.stringify({version:1,events:s,nextId:d})},import(S){let w;try{w=JSON.parse(S);}catch{throw new Error("[Directive DebugTimeline] Invalid JSON")}if(!w||typeof w!="object")throw new Error("[Directive DebugTimeline] Invalid timeline data");for(let Q of Object.keys(w))if(Un.has(Q))throw new Error(`[Directive DebugTimeline] Blocked key in import: ${Q}`);let y=w;if(!Array.isArray(y.events))throw new Error("[Directive DebugTimeline] Missing events array");let A=[];for(let Q of y.events){if(!Q||typeof Q!="object")continue;for(let Ce of Object.keys(Q))if(Un.has(Ce))throw new Error(`[Directive DebugTimeline] Blocked key in event: ${Ce}`);let F=Q;typeof F.id=="number"&&typeof F.type=="string"&&Sr.has(F.type)&&typeof F.timestamp=="number"&&A.push(Q);}s=A.length>t?A.slice(-t):A,d=typeof y.nextId=="number"?y.nextId:A.length;},clear(){s=[],d=0;},subscribe(S){return f.add(S),()=>{f.delete(S);}},get length(){return s.length}}}function vn(i,t){let u=new Map;return {name:"directive-ai-debug-timeline",onConstraintEvaluate(s,d){i.record({type:"constraint_evaluate",timestamp:Date.now(),snapshotId:t(),constraintId:s,fired:d});},onResolverStart(s,d){u.set(s,Date.now()),i.record({type:"resolver_start",timestamp:Date.now(),snapshotId:t(),resolverId:s,requirementType:d.requirement.type});},onResolverComplete(s){let d=u.get(s);u.delete(s),i.record({type:"resolver_complete",timestamp:Date.now(),snapshotId:t(),resolverId:s,durationMs:d?Date.now()-d:0});},onResolverError(s,d,f){let k=u.get(s);u.delete(s);let S=f instanceof Error?f.message:String(f);i.record({type:"resolver_error",timestamp:Date.now(),snapshotId:t(),resolverId:s,errorMessage:S,durationMs:k?Date.now()-k:0});}}}function gt(i,t,u){return typeof i=="function"?{name:`${u}-guardrail-${t}`,fn:i,critical:true}:i}function Er(i,t){let{backoff:u="exponential",baseDelayMs:s=100,maxDelayMs:d=5e3}=t,f;switch(u){case "exponential":f=s*2**(i-1);break;case "linear":f=s*i;break;default:f=s;}return Math.min(f,d)}function Jn(i,t){return t?.aborted?Promise.reject(t.reason??new Error("Aborted")):new Promise((u,s)=>{if(!t){setTimeout(u,i);return}let d=()=>{clearTimeout(f),s(t.reason??new Error("Aborted"));},f=setTimeout(()=>{t.removeEventListener("abort",d),u();},i);t.addEventListener("abort",d,{once:true});})}async function ft(i,t,u,s){let{retry:d}=i,f=Math.max(d?.attempts??1,1),k;for(let S=1;S<=f;S++)try{return await i.fn(t,u)}catch(w){if(k=w instanceof Error?w:new Error(String(w)),S<f){let y=Er(S,d??{});await Jn(y,s);}}return {passed:false,reason:`Guardrail "${i.name}" failed after ${f} attempt(s): ${k.message}`}}function Ar(i,t){let{backoff:u="exponential",baseDelayMs:s=1e3,maxDelayMs:d=3e4}=t,f;switch(u){case "exponential":f=s*2**(i-1);break;case "linear":f=s*i;break;default:f=s;}return Math.min(f,d)}async function nn(i,t,u,s,d){let f=Math.max(d?.attempts??1,1),k=d?.isRetryable??(()=>true),S=d?.onRetry,w;for(let y=1;y<=f;y++)try{return await i(t,u,s)}catch(A){if(w=A instanceof Error?A:new Error(String(A)),y<f){let Q=true;try{Q=k(w);}catch{break}if(!Q)break;let F=Ar(y,d??{});try{S?.(y,w,F);}catch{}await Jn(F,s?.signal);}else break}throw w}function Je(i){return getBridgeFact(i,hn)}function We(i,t){setBridgeFact(i,hn,t);}function ut(i){return getBridgeFact(i,Ot)}function rt(i,t){setBridgeFact(i,Ot,t);}function Wt(i){return getBridgeFact(i,bn)}function mt(i,t){setBridgeFact(i,bn,t);}function Kt(i){return getBridgeFact(i,kn)}function ht(i,t){setBridgeFact(i,kn,t);}function at(i){return getBridgeFact(i,Mt)}function st(i,t){setBridgeFact(i,Mt,t);}function nt(i){return {agent:Je(i),approval:ut(i),conversation:Wt(i),toolCalls:Kt(i)}}function Vt(i){let t=Object.create(null);for(let[u,s]of Object.entries(i))t[u]={priority:s.priority??0,when:d=>{let f=nt(d),k={...d,...f};return s.when(k)},require:d=>{let f=nt(d),k={...d,...f};return typeof s.require=="function"?s.require(k):s.require}};return t}function Wn(i,t,u){let s=Object.create(null);for(let[d,f]of Object.entries(i))s[d]={requirement:f.requirement,key:f.key,resolve:async(k,S)=>{let w=nt(S.facts),A={facts:{...S.facts,...w},runAgent:async(Q,F,Ce)=>t(Q,F,nt(u()),Ce),signal:S.signal};await f.resolve(k,A);}};return s}var vt=200,xr=0;function yn(){return `bp_${Date.now().toString(36)}_${(++xr).toString(36)}`}function wn(i,t,u){for(let s of i)if(s.type===t){if(!s.when)return s;try{if(s.when(u))return s}catch{}}return null}function an(){return {pending:[],resolved:[],cancelled:[]}}var Kn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function yt(){let i=Date.now().toString(36),t=crypto.randomUUID().slice(0,8);return `ckpt_${i}_${t}`}function sn(i){if(!i||typeof i!="object")return false;for(let s of Object.keys(i))if(Kn.has(s))return false;let t=i;if(t.version!==1||typeof t.id!="string"||t.id.length===0||typeof t.createdAt!="string"||typeof t.systemExport!="string"||t.timelineExport!==null&&typeof t.timelineExport!="string"||!t.localState||typeof t.localState!="object")return false;for(let s of Object.keys(t.localState))if(Kn.has(s))return false;let u=t.localState;return !(u.type!=="single"&&u.type!=="multi"||t.orchestratorType!=="single"&&t.orchestratorType!=="multi")}var Rn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(t){if(this.maxCheckpoints=t?.maxCheckpoints??100,this.retentionMs=t?.retentionMs??Number.POSITIVE_INFINITY,this.preserveLabeled=t?.preserveLabeled??false,!Number.isFinite(this.maxCheckpoints)||this.maxCheckpoints<1)throw new Error(`[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`)}async save(t){if(!sn(t))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let u=this.order.indexOf(t.id);return u>=0&&this.order.splice(u,1),this.store.set(t.id,t),this.order.push(t.id),t.id}async load(t){return this.store.get(t)??null}async list(){return this.order.map(t=>{let u=this.store.get(t);return {id:u.id,label:u.label,createdAt:u.createdAt}})}async delete(t){if(!this.store.has(t))return false;this.store.delete(t);let u=this.order.indexOf(t);return u>=0&&this.order.splice(u,1),true}async clear(){this.store.clear(),this.order.length=0;}async prune(){if(!Number.isFinite(this.retentionMs))return 0;let t=Date.now()-this.retentionMs,u=0,s=[];for(let d of this.order){let f=this.store.get(d);if(!f)continue;if(new Date(f.createdAt).getTime()>=t)break;this.preserveLabeled&&f.label||s.push(d);}for(let d of s){this.store.delete(d);let f=this.order.indexOf(d);f>=0&&this.order.splice(f,1),u++;}return u}evictOldest(){if(this.preserveLabeled)for(let u=0;u<this.order.length;u++){let s=this.order[u],d=this.store.get(s);if(d&&!d.label)return this.order.splice(u,1),this.store.delete(s),true}let t=this.order.shift();return t?(this.store.delete(t),true):false}};function _n(i){if(i.length>1048576)throw new Error(`[Directive] Output too large for JSON extraction (${i.length} chars, max 1048576).`);let t=i.trim();try{return JSON.parse(t)}catch{}let u=t.indexOf("{"),s=t.indexOf("["),d,f,k;if(u===-1&&s===-1)throw new Error("[Directive] No JSON object or array found in output");u===-1?(d=s,f="[",k="]"):s===-1?(d=u,f="{",k="}"):(d=Math.min(u,s),f=d===u?"{":"[",k=d===u?"}":"]");let S=0,w=false,y=false;for(let A=d;A<t.length;A++){let Q=t[A];if(y){y=false;continue}if(Q==="\\"){y=true;continue}if(Q==='"'){w=!w;continue}if(!w){if(Q===f)S++;else if(Q===k&&(S--,S===0)){let F=t.slice(d,A+1);try{return JSON.parse(F)}catch{let Ce=F.replace(/"(?:[^"\\]|\\.)*"/g,Fe=>Fe.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"));return JSON.parse(Ce)}}}}throw new Error("[Directive] No valid JSON found in output")}function Cr(i){return i?i.issues&&i.issues.length>0?i.issues.map(t=>t.message).join("; "):i.message??"Validation failed":"Validation failed"}function Tn(i,t){let{schema:u,maxRetries:s=2,extractJson:d=_n,schemaDescription:f}=t;if(!Number.isFinite(s)||s<0)throw new Error("[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.");let k=f??u.description??"the specified JSON schema";return async(S,w,y)=>{let A={...S,instructions:(S.instructions??"")+`
2
2
 
3
- IMPORTANT: Respond with valid JSON matching `+k+". Output ONLY the JSON object, no additional text or markdown formatting."},Q,F;for(let Ce=0;Ce<=a;Ce++){let Fe=Ce===0?w:`${w}
3
+ IMPORTANT: Respond with valid JSON matching `+k+". Output ONLY the JSON object, no additional text or markdown formatting."},Q,F;for(let Ce=0;Ce<=s;Ce++){let Fe=Ce===0?w:`${w}
4
4
 
5
5
  Your previous response was not valid JSON. Error: ${F}
6
- Please try again with valid JSON only.`,G=await i(A,Fe,v);Q=G;let z=typeof G.output=="string"?G.output:JSON.stringify(G.output);try{let ke=d(z),Ee=u.safeParse(ke);if(Ee.success)return {...G,output:Ee.data};F=Cr(Ee.error);}catch(ke){F=ke instanceof Error?ke.message:String(ke);}}throw new Mn(`[Directive] Failed to get valid structured output after ${a+1} attempts: ${F}`,Q)}}var Mn=class extends Error{lastResult;constructor(t,u){super(t),this.name="StructuredOutputError",this.lastResult=u;}};var Vn=500,Xn=200;function Yn(i){let{runner:t$1,factsSchema:u={},init:a,constraints:d={},resolvers:f={},guardrails:k={},onApprovalRequest:S,autoApproveToolCalls:w=true,maxTokenBudget:v,budgetWarningThreshold:A=.8,onBudgetWarning:Q,plugins:F=[],debug:Ce=false,approvalTimeoutMs:Fe=3e5,agentRetry:G,hooks:z={},memory:ke,circuitBreaker:Ee,selfHealing:Me,outputSchema:bt,maxSchemaRetries:Et,checkpointStore:Ae,breakpoints:pe,onBreakpoint:Tt,breakpointTimeoutMs:Pt}=i,Ze=typeof Ce=="object"?true:!!Ce,At=5e3;if(Ze&&Me&&!Ee&&console.warn("[Directive] selfHealing config has no effect without a circuitBreaker \u2014 fallback behavior requires the circuit breaker to detect failures."),A<0||A>1)throw new Error(`[Directive Orchestrator] budgetWarningThreshold must be between 0 and 1, got ${A}`);if(!w&&!S)throw new Error(`[Directive] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
6
+ Please try again with valid JSON only.`,q=await i(A,Fe,y);Q=q;let z=typeof q.output=="string"?q.output:JSON.stringify(q.output);try{let ke=d(z),Ee=u.safeParse(ke);if(Ee.success)return {...q,output:Ee.data};F=Cr(Ee.error);}catch(ke){F=ke instanceof Error?ke.message:String(ke);}}throw new Mn(`[Directive] Failed to get valid structured output after ${s+1} attempts: ${F}`,Q)}}var Mn=class extends Error{lastResult;constructor(t,u){super(t),this.name="StructuredOutputError",this.lastResult=u;}};var Vn=500,Xn=200;function Yn(i){let{runner:t$1,factsSchema:u={},init:s,constraints:d={},resolvers:f={},guardrails:k={},onApprovalRequest:S,autoApproveToolCalls:w=true,maxTokenBudget:y,budgetWarningThreshold:A=.8,onBudgetWarning:Q,plugins:F=[],debug:Ce=false,approvalTimeoutMs:Fe=3e5,agentRetry:q,hooks:z={},memory:ke,circuitBreaker:Ee,selfHealing:Me,outputSchema:bt,maxSchemaRetries:Et,checkpointStore:Ae,breakpoints:pe,onBreakpoint:Tt,breakpointTimeoutMs:Pt}=i,Ze=typeof Ce=="object"?true:!!Ce,At=5e3;if(Ze&&Me&&!Ee&&console.warn("[Directive] selfHealing config has no effect without a circuitBreaker \u2014 fallback behavior requires the circuit breaker to detect failures."),A<0||A>1)throw new Error(`[Directive Orchestrator] budgetWarningThreshold must be between 0 and 1, got ${A}`);if(!w&&!S)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 Ye(g,x){try{z[g]?.(x);}catch(ee){Ze&&console.debug(`[Directive] hooks.${g} threw:`,ee);}}let un=["agent","approval","conversation","toolCalls"];for(let g of Object.keys(u))if(un.includes(g))throw new Error(`[Directive] Facts schema key "${g}" conflicts with orchestrator state. Reserved keys: ${un.join(", ")}. Rename your fact to avoid the collision.`);let fe={facts:{...tn.facts,...u,__budgetWarningFired:t.boolean()},derivations:{},events:{},requirements:{}},It,m,le=Vt(d);v&&(le.__budgetLimit={priority:100,when:g=>Je(g).tokenUsage>v,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let ze=Wn(f,(g,x,ee,K)=>It(g,x,ee,K),()=>m.facts);ze.__pause={requirement:requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async(g,x)=>{let ee=Je(x.facts);We(x.facts,{...ee,status:"paused"});}};let be=null;Ze&&(be=Jt({goToSnapshot:g=>{try{m.debug?.goTo?.(g);}catch{}}}));let Gt=createCallbackPlugin("directive-ai-callbacks",{}),ln=createModule("directive-ai-orchestrator",{schema:fe,init:g=>{if(We(g,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(g,{pending:[],approved:[],rejected:[]}),mt(g,[]),ht(g,[]),at(g,{pending:[],resolved:[],cancelled:[]}),setBridgeFact(g,"__budgetWarningFired",false),a){let x=nt(g),ee={...g,...x};a(ee);}},constraints:le,resolvers:ze}),Bt=[...F,Gt];Ze&&be&&Bt.push(yn(be,()=>{try{return m.debug?.currentIndex??null}catch{return null}})),m=createSystem({module:ln,plugins:Bt,debug:Ze?{timeTravel:true}:void 0}),m.start();async function N(g,x,ee,K,O){if(Ee)try{return await Ee.execute(()=>Xt(g,x,ee,K,O))}catch(ne){if(Me){if(Me.fallbackRunners)for(let me of Me.fallbackRunners)try{let De={originalAgent:g.name,reroutedTo:"fallback-runner",reason:ne instanceof Error?ne.message:String(ne),timestamp:Date.now()};try{Me.onReroute?.(De);}catch{}return be&&be.record({type:"reroute",timestamp:Date.now(),agentId:g.name,snapshotId:null,from:g.name,to:"fallback-runner",reason:ne instanceof Error?ne.message:String(ne)}),await me(g,x,K)}catch{}if(Me.fallbackAgent)try{let me={originalAgent:g.name,reroutedTo:Me.fallbackAgent.name,reason:ne instanceof Error?ne.message:String(ne),timestamp:Date.now()};try{Me.onReroute?.(me);}catch{}return be&&be.record({type:"reroute",timestamp:Date.now(),agentId:g.name,snapshotId:null,from:g.name,to:Me.fallbackAgent.name,reason:ne instanceof Error?ne.message:String(ne)}),await t$1(Me.fallbackAgent,x,K)}catch{}if(Me.degradation==="fallback-response"&&Me.fallbackResponse!==void 0)return {output:Me.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}throw ne}return Xt(g,x,ee,K,O)}async function Xt(g,x,ee,K,O){let ne=Date.now();if(ke){let J=ke.getContextMessages();if(J.length>0){let V=J.map(xe=>`${xe.role}: ${xe.content}`).join(`
8
+ - Provide an onApprovalRequest callback to handle approvals programmatically`);function Ye(g,x){try{z[g]?.(x);}catch(ee){Ze&&console.debug(`[Directive] hooks.${g} threw:`,ee);}}let un=["agent","approval","conversation","toolCalls"];for(let g of Object.keys(u))if(un.includes(g))throw new Error(`[Directive] Facts schema key "${g}" conflicts with orchestrator state. Reserved keys: ${un.join(", ")}. Rename your fact to avoid the collision.`);let fe={facts:{...tn.facts,...u,__budgetWarningFired:t.boolean()},derivations:{},events:{},requirements:{}},It,m,le=Vt(d);y&&(le.__budgetLimit={priority:100,when:g=>Je(g).tokenUsage>y,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let ze=Wn(f,(g,x,ee,K)=>It(g,x,ee,K),()=>m.facts);ze.__pause={requirement:requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async(g,x)=>{let ee=Je(x.facts);We(x.facts,{...ee,status:"paused"});}};let be=null;Ze&&(be=Jt({goToSnapshot:g=>{try{m.debug?.goTo?.(g);}catch{}}}));let qt=createCallbackPlugin("directive-ai-callbacks",{}),ln=createModule("directive-ai-orchestrator",{schema:fe,init:g=>{if(We(g,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(g,{pending:[],approved:[],rejected:[]}),mt(g,[]),ht(g,[]),st(g,{pending:[],resolved:[],cancelled:[]}),setBridgeFact(g,"__budgetWarningFired",false),s){let x=nt(g),ee={...g,...x};s(ee);}},constraints:le,resolvers:ze}),Bt=[...F,qt];Ze&&be&&Bt.push(vn(be,()=>{try{return m.debug?.currentIndex??null}catch{return null}})),m=createSystem({module:ln,plugins:Bt,debug:Ze?{timeTravel:true}:void 0}),m.start();async function N(g,x,ee,K,O){if(Ee)try{return await Ee.execute(()=>Xt(g,x,ee,K,O))}catch(ne){if(Me){if(Me.fallbackRunners)for(let me of Me.fallbackRunners)try{let De={originalAgent:g.name,reroutedTo:"fallback-runner",reason:ne instanceof Error?ne.message:String(ne),timestamp:Date.now()};try{Me.onReroute?.(De);}catch{}return be&&be.record({type:"reroute",timestamp:Date.now(),agentId:g.name,snapshotId:null,from:g.name,to:"fallback-runner",reason:ne instanceof Error?ne.message:String(ne)}),await me(g,x,K)}catch{}if(Me.fallbackAgent)try{let me={originalAgent:g.name,reroutedTo:Me.fallbackAgent.name,reason:ne instanceof Error?ne.message:String(ne),timestamp:Date.now()};try{Me.onReroute?.(me);}catch{}return be&&be.record({type:"reroute",timestamp:Date.now(),agentId:g.name,snapshotId:null,from:g.name,to:Me.fallbackAgent.name,reason:ne instanceof Error?ne.message:String(ne)}),await t$1(Me.fallbackAgent,x,K)}catch{}if(Me.degradation==="fallback-response"&&Me.fallbackResponse!==void 0)return {output:Me.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}throw ne}return Xt(g,x,ee,K,O)}async function Xt(g,x,ee,K,O){let ne=Date.now();if(ke){let J=ke.getContextMessages();if(J.length>0){let V=J.map(xe=>`${xe.role}: ${xe.content}`).join(`
9
9
  `);g={...g,instructions:(g.instructions??"")+`
10
10
 
11
11
  Conversation context:
12
- `+V};}}if(pe&&pe.length>0){let J={agentId:g.name,agentName:g.name,input:x,state:m.facts.$store.toObject(),breakpointType:"pre_input_guardrails"},V=await xt("pre_input_guardrails",J,O?.signal??K?.signal);if(V?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};V?.input&&(x=V.input);}let me=O?.inputGuardrails!==void 0?O.inputGuardrails:k.input??[],De=O?.outputGuardrails!==void 0?O.outputGuardrails:k.output??[],Ke=me.map((J,V)=>gt(J,V,"input"));for(let J of Ke){let{name:V}=J,xe={agentName:g.name,input:x,facts:m.facts.$store.toObject()},ae=Date.now(),ge=await ft(J,{input:x,agentName:g.name},xe);if(Ye("onGuardrailCheck",{agentId:g.name,guardrailName:V,guardrailType:"input",passed:ge.passed,reason:ge.reason,durationMs:Date.now()-ae,timestamp:Date.now()}),!ge.passed)throw new et({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${V}" failed: ${ge.reason}`,guardrailName:V,guardrailType:"input",userMessage:ge.reason??"Input validation failed",agentName:g.name,input:x});ge.transformed!==void 0&&(x=ge.transformed);}if(Ye("onAgentStart",{agentName:g.name,input:x,timestamp:ne}),be&&be.record({type:"agent_start",timestamp:Date.now(),agentId:g.name,snapshotId:null,inputLength:x.length,modelId:g.model??void 0,...g.instructions?{instructions:g.instructions.slice(0,At)}:{},input:x.slice(0,At)}),m.batch(()=>{let J=Je(m.facts);We(m.facts,{...J,status:"running",currentAgent:g.name,input:x,startedAt:Date.now()});}),pe&&pe.length>0){let J={agentId:g.name,agentName:g.name,input:x,state:m.facts.$store.toObject(),breakpointType:"pre_agent_run"},V=await xt("pre_agent_run",J,O?.signal??K?.signal);if(V?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};V?.input&&(x=V.input);}let Ve=O?.outputSchema!==void 0?O.outputSchema:bt,Xe=t$1;Ve&&(Xe=Tn(t$1,{schema:Ve,maxRetries:O?.maxSchemaRetries??Et??2}));let re=await nn(Xe,g,x,{...K,signal:K?.signal,onMessage:J=>{let xe=[...Wt(m.facts),J];mt(m.facts,xe.length>Vn?xe.slice(-Vn):xe),K?.onMessage?.(J);},onToolCall:async J=>{let V=(k.toolCall??[]).map((ge,we)=>gt(ge,we,"toolCall"));for(let ge of V){let{name:we}=ge,lt={agentName:g.name,input:x,facts:m.facts.$store.toObject()},ct=Date.now(),X=await ft(ge,{toolCall:J,agentName:g.name,input:x},lt);if(Ye("onGuardrailCheck",{agentId:g.name,guardrailName:we,guardrailType:"toolCall",passed:X.passed,reason:X.reason,durationMs:Date.now()-ct,timestamp:Date.now()}),!X.passed)throw new et({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${we}" failed: ${X.reason}`,guardrailName:we,guardrailType:"toolCall",userMessage:X.reason??"Tool call blocked",data:{toolCall:J},agentName:g.name,input:x})}if(!w){let ge=`tool-${J.id}`,we={id:ge,type:"tool_call",agentName:g.name,description:`Tool call: ${J.name}`,data:J,requestedAt:Date.now()};m.batch(()=>{let lt=ut(m.facts);rt(m.facts,{...lt,pending:[...lt.pending,we]});}),S?.(we),await cn(ge,O?.signal??K?.signal);}let ae=[...Kt(m.facts),J];ht(m.facts,ae.length>Xn?ae.slice(-Xn):ae),K?.onToolCall?.(J);}},G?{...G,onRetry:(J,V,xe)=>{G.onRetry?.(J,V,xe),Ye("onAgentRetry",{agentName:g.name,input:x,attempt:J,error:V,delayMs:xe,timestamp:Date.now()});}}:void 0);if(pe&&pe.length>0){let J={agentId:g.name,agentName:g.name,input:x,state:m.facts.$store.toObject(),breakpointType:"pre_output_guardrails"},V=await xt("pre_output_guardrails",J,O?.signal??K?.signal);if(V?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};V?.input&&(x=V.input);}let se=De.map((J,V)=>gt(J,V,"output"));for(let J of se){let{name:V}=J,xe={agentName:g.name,input:x,facts:m.facts.$store.toObject()},ae=Date.now(),ge=await ft(J,{output:re.output,agentName:g.name,input:x,messages:re.messages},xe);if(Ye("onGuardrailCheck",{agentId:g.name,guardrailName:V,guardrailType:"output",passed:ge.passed,reason:ge.reason,durationMs:Date.now()-ae,timestamp:Date.now()}),!ge.passed)throw new et({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${V}" failed: ${ge.reason}`,guardrailName:V,guardrailType:"output",userMessage:ge.reason??"Output validation failed",agentName:g.name,input:x});ge.transformed!==void 0&&(re.output=ge.transformed);}let ot=false,ue=0;if(m.batch(()=>{let J=Je(m.facts),V=J.tokenUsage+re.totalTokens;if(We(m.facts,{...J,status:"completed",output:re.output,tokenUsage:V,turnCount:J.turnCount+re.messages.length,completedAt:Date.now()}),v&&Q){ue=V/v;let xe=getBridgeFact(m.facts,"__budgetWarningFired");ue>=A&&!xe&&(setBridgeFact(m.facts,"__budgetWarningFired",true),ot=true);}}),ot)try{Q({currentTokens:Je(m.facts).tokenUsage,maxBudget:v,percentage:ue});}catch(J){Ze&&console.debug("[Directive Orchestrator] onBudgetWarning threw:",J);}if(ke&&re.messages.length>0)try{ke.addMessages(re.messages);}catch(J){Ze&&console.debug("[Directive] Memory addMessages failed:",J);}if(Ye("onAgentComplete",{agentName:g.name,input:x,output:re.output,tokenUsage:re.totalTokens,durationMs:Date.now()-ne,timestamp:Date.now()}),be){let J=typeof re.output=="string"?re.output:JSON.stringify(re.output);be.record({type:"agent_complete",timestamp:Date.now(),agentId:g.name,snapshotId:null,outputLength:J?.length??0,totalTokens:re.totalTokens,inputTokens:re.tokenUsage?.inputTokens??0,outputTokens:re.tokenUsage?.outputTokens??0,durationMs:Date.now()-ne,modelId:g.model??void 0,output:J.slice(0,At)});}if(pe&&pe.length>0){let J={agentId:g.name,agentName:g.name,input:x,state:m.facts.$store.toObject(),breakpointType:"post_run"},V=await xt("post_run",J,O?.signal??K?.signal);if(V?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};V?.input&&(x=V.input);}return re}It=N;let je=new Map,Qe=new Map;function oe(g,x){return x?.aborted?Promise.reject(x.reason??new Error("Aborted while waiting for breakpoint")):new Promise((ee,K)=>{let O=false,ne=null,me=()=>{O||(O=true,ne&&(clearTimeout(ne),ne=null),x&&x.removeEventListener("abort",De),Ke());},De=()=>{me(),K(x.reason??new Error(`Breakpoint wait for ${g} aborted`));};x&&x.addEventListener("abort",De,{once:true});let Ke=m.facts.$store.subscribe([Mt],()=>{if(O)return;let Xe=st(m.facts);if(Xe.resolved.includes(g)){me();let re=je.get(g)??null;je.delete(g),ee(re);}else if(Xe.cancelled.includes(g)){me(),je.delete(g);let re=Qe.get(g);Qe.delete(g),K(new Error(re?`Breakpoint ${g} was cancelled: ${re}`:`Breakpoint ${g} was cancelled`));}}),Ve=Pt??3e5;ne=setTimeout(()=>{O||(me(),je.delete(g),Qe.delete(g),K(new Error(`[Directive] Breakpoint timeout: ${g} not resolved within ${Math.round(Ve/1e3)}s`)));},Ve);})}async function xt(g,x,ee){if(!pe||pe.length===0)return null;let K=wn(pe,g,x);if(!K)return null;let O=vn(),ne={id:O,type:g,agentId:x.agentId,input:x.input,label:K.label,requestedAt:Date.now()};m.batch(()=>{let De=st(m.facts);at(m.facts,{...De,pending:[...De.pending,ne]});});try{Tt?.(ne);}catch{}try{z.onBreakpoint?.(ne);}catch{}be&&be.record({type:"breakpoint_hit",timestamp:Date.now(),snapshotId:null,agentId:x.agentId,breakpointId:O,breakpointType:g,label:K.label});let me=await oe(O,ee);return be&&be.record({type:"breakpoint_resumed",timestamp:Date.now(),snapshotId:null,agentId:x.agentId,breakpointId:O,modified:!!me?.input,skipped:!!me?.skip}),me}function cn(g,x){return x?.aborted?Promise.reject(x.reason??new Error("Aborted while waiting for approval")):new Promise((ee,K)=>{let O=false,ne=null,me=()=>{O||(O=true,ne&&(clearTimeout(ne),ne=null),x&&x.removeEventListener("abort",De),Ke());},De=()=>{me(),K(x.reason??new Error(`Approval wait for ${g} aborted`));};x&&x.addEventListener("abort",De,{once:true});let Ke=m.facts.$store.subscribe([Ot],()=>{if(O)return;let Ve=ut(m.facts);if(Ve.approved.includes(g))me(),ee();else {let Xe=Ve.rejected.find(re=>re.id===g);if(Xe){me();let re=Xe.reason?`Request ${g} rejected: ${Xe.reason}`:`Request ${g} rejected`;K(new Error(re));}}});ne=setTimeout(()=>{if(O)return;me();let Ve=Math.round(Fe/1e3);K(new Error(`[Directive] Approval timeout: Request ${g} not resolved within ${Ve}s.
12
+ `+V};}}if(pe&&pe.length>0){let J={agentId:g.name,agentName:g.name,input:x,state:m.facts.$store.toObject(),breakpointType:"pre_input_guardrails"},V=await xt("pre_input_guardrails",J,O?.signal??K?.signal);if(V?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};V?.input&&(x=V.input);}let me=O?.inputGuardrails!==void 0?O.inputGuardrails:k.input??[],De=O?.outputGuardrails!==void 0?O.outputGuardrails:k.output??[],Ke=me.map((J,V)=>gt(J,V,"input"));for(let J of Ke){let{name:V}=J,xe={agentName:g.name,input:x,facts:m.facts.$store.toObject()},se=Date.now(),ge=await ft(J,{input:x,agentName:g.name},xe);if(Ye("onGuardrailCheck",{agentId:g.name,guardrailName:V,guardrailType:"input",passed:ge.passed,reason:ge.reason,durationMs:Date.now()-se,timestamp:Date.now()}),!ge.passed)throw new et({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${V}" failed: ${ge.reason}`,guardrailName:V,guardrailType:"input",userMessage:ge.reason??"Input validation failed",agentName:g.name,input:x});ge.transformed!==void 0&&(x=ge.transformed);}if(Ye("onAgentStart",{agentName:g.name,input:x,timestamp:ne}),be&&be.record({type:"agent_start",timestamp:Date.now(),agentId:g.name,snapshotId:null,inputLength:x.length,modelId:g.model??void 0,...g.instructions?{instructions:g.instructions.slice(0,At)}:{},input:x.slice(0,At)}),m.batch(()=>{let J=Je(m.facts);We(m.facts,{...J,status:"running",currentAgent:g.name,input:x,startedAt:Date.now()});}),pe&&pe.length>0){let J={agentId:g.name,agentName:g.name,input:x,state:m.facts.$store.toObject(),breakpointType:"pre_agent_run"},V=await xt("pre_agent_run",J,O?.signal??K?.signal);if(V?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};V?.input&&(x=V.input);}let Ve=O?.outputSchema!==void 0?O.outputSchema:bt,Xe=t$1;Ve&&(Xe=Tn(t$1,{schema:Ve,maxRetries:O?.maxSchemaRetries??Et??2}));let re=await nn(Xe,g,x,{...K,signal:K?.signal,onMessage:J=>{let xe=[...Wt(m.facts),J];mt(m.facts,xe.length>Vn?xe.slice(-Vn):xe),K?.onMessage?.(J);},onToolCall:async J=>{let V=(k.toolCall??[]).map((ge,we)=>gt(ge,we,"toolCall"));for(let ge of V){let{name:we}=ge,lt={agentName:g.name,input:x,facts:m.facts.$store.toObject()},ct=Date.now(),X=await ft(ge,{toolCall:J,agentName:g.name,input:x},lt);if(Ye("onGuardrailCheck",{agentId:g.name,guardrailName:we,guardrailType:"toolCall",passed:X.passed,reason:X.reason,durationMs:Date.now()-ct,timestamp:Date.now()}),!X.passed)throw new et({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${we}" failed: ${X.reason}`,guardrailName:we,guardrailType:"toolCall",userMessage:X.reason??"Tool call blocked",data:{toolCall:J},agentName:g.name,input:x})}if(!w){let ge=`tool-${J.id}`,we={id:ge,type:"tool_call",agentName:g.name,description:`Tool call: ${J.name}`,data:J,requestedAt:Date.now()};m.batch(()=>{let lt=ut(m.facts);rt(m.facts,{...lt,pending:[...lt.pending,we]});}),S?.(we),await cn(ge,O?.signal??K?.signal);}let se=[...Kt(m.facts),J];ht(m.facts,se.length>Xn?se.slice(-Xn):se),K?.onToolCall?.(J);}},q?{...q,onRetry:(J,V,xe)=>{q.onRetry?.(J,V,xe),Ye("onAgentRetry",{agentName:g.name,input:x,attempt:J,error:V,delayMs:xe,timestamp:Date.now()});}}:void 0);if(pe&&pe.length>0){let J={agentId:g.name,agentName:g.name,input:x,state:m.facts.$store.toObject(),breakpointType:"pre_output_guardrails"},V=await xt("pre_output_guardrails",J,O?.signal??K?.signal);if(V?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};V?.input&&(x=V.input);}let ae=De.map((J,V)=>gt(J,V,"output"));for(let J of ae){let{name:V}=J,xe={agentName:g.name,input:x,facts:m.facts.$store.toObject()},se=Date.now(),ge=await ft(J,{output:re.output,agentName:g.name,input:x,messages:re.messages},xe);if(Ye("onGuardrailCheck",{agentId:g.name,guardrailName:V,guardrailType:"output",passed:ge.passed,reason:ge.reason,durationMs:Date.now()-se,timestamp:Date.now()}),!ge.passed)throw new et({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${V}" failed: ${ge.reason}`,guardrailName:V,guardrailType:"output",userMessage:ge.reason??"Output validation failed",agentName:g.name,input:x});ge.transformed!==void 0&&(re.output=ge.transformed);}let ot=false,ue=0;if(m.batch(()=>{let J=Je(m.facts),V=J.tokenUsage+re.totalTokens;if(We(m.facts,{...J,status:"completed",output:re.output,tokenUsage:V,turnCount:J.turnCount+re.messages.length,completedAt:Date.now()}),y&&Q){ue=V/y;let xe=getBridgeFact(m.facts,"__budgetWarningFired");ue>=A&&!xe&&(setBridgeFact(m.facts,"__budgetWarningFired",true),ot=true);}}),ot)try{Q({currentTokens:Je(m.facts).tokenUsage,maxBudget:y,percentage:ue});}catch(J){Ze&&console.debug("[Directive Orchestrator] onBudgetWarning threw:",J);}if(ke&&re.messages.length>0)try{ke.addMessages(re.messages);}catch(J){Ze&&console.debug("[Directive] Memory addMessages failed:",J);}if(Ye("onAgentComplete",{agentName:g.name,input:x,output:re.output,tokenUsage:re.totalTokens,durationMs:Date.now()-ne,timestamp:Date.now()}),be){let J=typeof re.output=="string"?re.output:JSON.stringify(re.output);be.record({type:"agent_complete",timestamp:Date.now(),agentId:g.name,snapshotId:null,outputLength:J?.length??0,totalTokens:re.totalTokens,inputTokens:re.tokenUsage?.inputTokens??0,outputTokens:re.tokenUsage?.outputTokens??0,durationMs:Date.now()-ne,modelId:g.model??void 0,output:J.slice(0,At)});}if(pe&&pe.length>0){let J={agentId:g.name,agentName:g.name,input:x,state:m.facts.$store.toObject(),breakpointType:"post_run"},V=await xt("post_run",J,O?.signal??K?.signal);if(V?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};V?.input&&(x=V.input);}return re}It=N;let je=new Map,Qe=new Map;function oe(g,x){return x?.aborted?Promise.reject(x.reason??new Error("Aborted while waiting for breakpoint")):new Promise((ee,K)=>{let O=false,ne=null,me=()=>{O||(O=true,ne&&(clearTimeout(ne),ne=null),x&&x.removeEventListener("abort",De),Ke());},De=()=>{me(),K(x.reason??new Error(`Breakpoint wait for ${g} aborted`));};x&&x.addEventListener("abort",De,{once:true});let Ke=m.facts.$store.subscribe([Mt],()=>{if(O)return;let Xe=at(m.facts);if(Xe.resolved.includes(g)){me();let re=je.get(g)??null;je.delete(g),ee(re);}else if(Xe.cancelled.includes(g)){me(),je.delete(g);let re=Qe.get(g);Qe.delete(g),K(new Error(re?`Breakpoint ${g} was cancelled: ${re}`:`Breakpoint ${g} was cancelled`));}}),Ve=Pt??3e5;ne=setTimeout(()=>{O||(me(),je.delete(g),Qe.delete(g),K(new Error(`[Directive] Breakpoint timeout: ${g} not resolved within ${Math.round(Ve/1e3)}s`)));},Ve);})}async function xt(g,x,ee){if(!pe||pe.length===0)return null;let K=wn(pe,g,x);if(!K)return null;let O=yn(),ne={id:O,type:g,agentId:x.agentId,input:x.input,label:K.label,requestedAt:Date.now()};m.batch(()=>{let De=at(m.facts);st(m.facts,{...De,pending:[...De.pending,ne]});});try{Tt?.(ne);}catch{}try{z.onBreakpoint?.(ne);}catch{}be&&be.record({type:"breakpoint_hit",timestamp:Date.now(),snapshotId:null,agentId:x.agentId,breakpointId:O,breakpointType:g,label:K.label});let me=await oe(O,ee);return be&&be.record({type:"breakpoint_resumed",timestamp:Date.now(),snapshotId:null,agentId:x.agentId,breakpointId:O,modified:!!me?.input,skipped:!!me?.skip}),me}function cn(g,x){return x?.aborted?Promise.reject(x.reason??new Error("Aborted while waiting for approval")):new Promise((ee,K)=>{let O=false,ne=null,me=()=>{O||(O=true,ne&&(clearTimeout(ne),ne=null),x&&x.removeEventListener("abort",De),Ke());},De=()=>{me(),K(x.reason??new Error(`Approval wait for ${g} aborted`));};x&&x.addEventListener("abort",De,{once:true});let Ke=m.facts.$store.subscribe([Ot],()=>{if(O)return;let Ve=ut(m.facts);if(Ve.approved.includes(g))me(),ee();else {let Xe=Ve.rejected.find(re=>re.id===g);if(Xe){me();let re=Xe.reason?`Request ${g} rejected: ${Xe.reason}`:`Request ${g} rejected`;K(new Error(re));}}});ne=setTimeout(()=>{if(O)return;me();let Ve=Math.round(Fe/1e3);K(new Error(`[Directive] Approval timeout: Request ${g} not resolved within ${Ve}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: ${Fe}ms)
17
- See: https://directive.run/docs/ai/running-agents`));},Fe);})}function Yt(){return {...nt(m.facts)}}return {system:m,get facts(){return Yt()},get totalTokens(){return Je(m.facts).tokenUsage},get timeline(){return be},async run(g,x,ee){return N(g,x,Yt(),void 0,ee)},runStream(g,x,ee={}){let K=new AbortController,O=1e4,ne=[],me=[],De=false,Ke=Date.now(),Ve=0,Xe=1e5,re="",se;ee.signal&&(se=()=>K.abort(),ee.signal.addEventListener("abort",se,{once:true}));let ot=()=>{se&&ee.signal&&ee.signal.removeEventListener("abort",se);},ue=ae=>{if(De)return;let ge=me.shift();ge?ge(ae):(ne.push(ae),ne.length>O&&ne.shift());},J=()=>{De=true,ot();for(let ae of me)ae(null);me.length=0;},V=(async()=>{ue({type:"progress",phase:"starting",message:"Running input guardrails"});try{let ae=x,ge=(k.input??[]).map((X,qe)=>gt(X,qe,"input"));for(let X of ge){let{name:qe}=X,St={agentName:g.name,input:ae,facts:m.facts.$store.toObject()},ce=await ft(X,{input:ae,agentName:g.name},St);if(!ce.passed)throw ue({type:"guardrail_triggered",guardrailName:qe,reason:ce.reason??"Input validation failed",partialOutput:re,stopped:!0}),new et({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${qe}" failed: ${ce.reason}`,guardrailName:qe,guardrailType:"input",userMessage:ce.reason??"Input validation failed",agentName:g.name,input:ae});ce.transformed!==void 0&&(ae=ce.transformed);}ue({type:"progress",phase:"generating",message:"Starting agent"}),m.batch(()=>{let X=Je(m.facts);We(m.facts,{...X,status:"running",currentAgent:g.name,input:ae,startedAt:Date.now()});});let we=await nn(t$1,g,ae,{signal:K.signal,onMessage:X=>{let qe=Wt(m.facts);if(mt(m.facts,[...qe,X]),ue({type:"message",message:X}),X.role==="assistant"&&X.content){let St=Math.ceil(X.content.length/4);Ve+=St,re+=X.content,re.length>Xe&&(re=re.slice(-Xe)),ue({type:"token",data:X.content,tokenCount:Ve});}},onToolCall:async X=>{ue({type:"tool_start",tool:X.name,toolCallId:X.id,arguments:X.arguments});let qe=(k.toolCall??[]).map((ce,it)=>gt(ce,it,"toolCall"));for(let ce of qe){let{name:it}=ce,dt={agentName:g.name,input:ae,facts:m.facts.$store.toObject()},Ct=await ft(ce,{toolCall:X,agentName:g.name,input:ae},dt);if(!Ct.passed)throw ue({type:"guardrail_triggered",guardrailName:it,reason:Ct.reason??"Tool call blocked",partialOutput:re,stopped:!0}),new et({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${it}" failed: ${Ct.reason}`,guardrailName:it,guardrailType:"toolCall",userMessage:Ct.reason??"Tool call blocked",data:{toolCall:X},agentName:g.name,input:ae})}if(!w){let ce=`tool-${X.id}`;ue({type:"approval_required",requestId:ce,toolName:X.name});let it={id:ce,type:"tool_call",agentName:g.name,description:`Tool call: ${X.name}`,data:X,requestedAt:Date.now()};m.batch(()=>{let dt=ut(m.facts);rt(m.facts,{...dt,pending:[...dt.pending,it]});}),S?.(it),await cn(ce,K.signal),ue({type:"approval_resolved",requestId:ce,approved:!0});}let St=Kt(m.facts);ht(m.facts,[...St,X]),X.result&&ue({type:"tool_end",tool:X.name,toolCallId:X.id,result:X.result});}},G);ue({type:"progress",phase:"finishing",message:"Running output guardrails"});let lt=(k.output??[]).map((X,qe)=>gt(X,qe,"output"));for(let X of lt){let{name:qe}=X,St={agentName:g.name,input:ae,facts:m.facts.$store.toObject()},ce=await ft(X,{output:we.output,agentName:g.name,input:ae,messages:we.messages},St);if(!ce.passed)throw ue({type:"guardrail_triggered",guardrailName:qe,reason:ce.reason??"Output validation failed",partialOutput:typeof we.output=="string"?we.output:"",stopped:!0}),new et({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${qe}" failed: ${ce.reason}`,guardrailName:qe,guardrailType:"output",userMessage:ce.reason??"Output validation failed",agentName:g.name,input:ae});ce.transformed!==void 0&&(we.output=ce.transformed);}m.batch(()=>{let X=Je(m.facts);We(m.facts,{...X,status:"completed",output:we.output,tokenUsage:X.tokenUsage+we.totalTokens,turnCount:X.turnCount+we.messages.length,completedAt:Date.now()});});let ct=Date.now()-Ke;return ue({type:"done",totalTokens:we.totalTokens,duration:ct,droppedTokens:0}),J(),we}catch(ae){throw ue({type:"error",error:ae instanceof Error?ae:new Error(String(ae))}),J(),ae}})();return V.catch(()=>{}),{stream:{[Symbol.asyncIterator](){return {async next(){return ne.length>0?{done:false,value:ne.shift()}:De?{done:true,value:void 0}:new Promise(ae=>{me.push(ge=>{ae(ge===null?{done:true,value:void 0}:{done:false,value:ge});});})}}}},result:V,abort:()=>{K.abort(),J();}}},async waitForIdle(g){let x=()=>Je(m.facts).status!=="running";if(x())return;let ee=Date.now();for(;!x();){if(g!==void 0&&Date.now()-ee>g)throw new Error("[Directive Orchestrator] waitForIdle timed out");await new Promise(K=>setTimeout(K,50));}},approve(g){m.batch(()=>{let x=ut(m.facts);if(!x.pending.some(O=>O.id===g)){Ze&&console.debug(`[Directive] approve() ignored: no pending request "${g}"`);return}let ee=200,K=[...x.approved,g];rt(m.facts,{...x,pending:x.pending.filter(O=>O.id!==g),approved:K.length>ee?K.slice(-ee):K});});},reject(g,x){m.batch(()=>{let ee=ut(m.facts);if(!ee.pending.some(me=>me.id===g)){Ze&&console.debug(`[Directive] reject() ignored: no pending request "${g}"`);return}x&&Ze&&console.debug(`[Directive] Request ${g} rejected: ${x}`);let K={id:g,reason:x,rejectedAt:Date.now()},O=200,ne=[...ee.rejected,K];rt(m.facts,{...ee,pending:ee.pending.filter(me=>me.id!==g),rejected:ne.length>O?ne.slice(-O):ne});});},pause(){let g=Je(m.facts);We(m.facts,{...g,status:"paused"});},resume(){let g=Je(m.facts);g.status==="paused"&&We(m.facts,{...g,status:g.currentAgent?"running":"idle"});},reset(){m.batch(()=>{We(m.facts,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(m.facts,{pending:[],approved:[],rejected:[]}),mt(m.facts,[]),ht(m.facts,[]),at(m.facts,{pending:[],resolved:[],cancelled:[]}),setBridgeFact(m.facts,"__budgetWarningFired",false);}),je.clear(),Qe.clear();},async checkpoint(g){if(Je(m.facts).status==="running")throw new Error("[Directive] Cannot checkpoint while agent is running");if(!m.debug?.export)throw new Error("[Directive] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let ee={version:1,id:vt(),createdAt:new Date().toISOString(),label:g?.label,systemExport:m.debug.export(),timelineExport:be?.export()??null,localState:{type:"single"},memoryExport:ke?ke.export?.()??null:null,orchestratorType:"single"};return Ae&&await Ae.save(ee),ee},restore(g,x){if(!an(g))throw new Error("[Directive] Invalid checkpoint data");if(g.orchestratorType!=="single")throw new Error("[Directive] Cannot restore multi-agent checkpoint in single-agent orchestrator");if(!m.debug?.import)throw new Error("[Directive] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");m.debug.import(g.systemExport),x?.restoreTimeline!==false&&g.timelineExport&&be&&be.import(g.timelineExport),g.memoryExport!==null&&ke&&ke.import&&ke.import(g.memoryExport);},resumeBreakpoint(g,x){x&&je.set(g,x),m.batch(()=>{let ee=st(m.facts),K=[...ee.resolved,g];at(m.facts,{...ee,pending:ee.pending.filter(O=>O.id!==g),resolved:K.length>yt?K.slice(-yt):K});});},cancelBreakpoint(g,x){x&&Qe.set(g,x),m.batch(()=>{let ee=st(m.facts),K=[...ee.cancelled,g];at(m.facts,{...ee,pending:ee.pending.filter(O=>O.id!==g),cancelled:K.length>yt?K.slice(-yt):K});});},getPendingBreakpoints(){return [...st(m.facts).pending]},dispose(){m.destroy();}}}var In={successRate:.5,latency:.3,circuitState:.2};function zn(i={}){let t=i.windowMs??6e4,u=i.maxNormalLatencyMs??5e3,a=i.maxEventsPerAgent??1e3,d={successRate:i.weights?.successRate??In.successRate,latency:i.weights?.latency??In.latency,circuitState:i.weights?.circuitState??In.circuitState};if(!Number.isFinite(t)||t<=0)throw new Error("[Directive HealthMonitor] windowMs must be a positive number");if(!Number.isFinite(u)||u<=0)throw new Error("[Directive HealthMonitor] maxNormalLatencyMs must be a positive number");if(!Number.isFinite(a)||a<1)throw new Error("[Directive HealthMonitor] maxEventsPerAgent must be >= 1");for(let[G,z]of Object.entries(d))if(z<0||z>1)throw new Error(`[Directive HealthMonitor] weight "${G}" must be between 0 and 1 (got ${z})`);let f=d.successRate+d.latency+d.circuitState;if(Math.abs(f-1)>.01)throw new Error(`[Directive HealthMonitor] weights must sum to ~1.0 (tolerance: \xB10.01, got ${f.toFixed(4)})`);let k=new Map,S=new Map,w=0,v=null,A=-1;function Q(G){let z=k.get(G);return z||(z=[],k.set(G,z)),z}function F(G,z){let ke=z-t,Ee=0;for(;Ee<G.length&&G[Ee].timestamp<ke;)Ee++;let Me=G.length-Ee-a;Me>0&&(Ee+=Me),Ee>0&&G.splice(0,Ee);}function Ce(G){let z=k.get(G);if(!z||z.length===0)return 50;let ke=Date.now();if(F(z,ke),z.length===0)return 50;let Me=z.filter(Pt=>Pt.success).length/z.length,bt=z.reduce((Pt,Ze)=>Pt+Ze.latencyMs,0)/z.length,Et=Math.min(bt/u,1),Ae=S.get(G)??"CLOSED",pe=Ae==="CLOSED"?1:Ae==="HALF_OPEN"?.5:0,Tt=Me*d.successRate+(1-Et)*d.latency+pe*d.circuitState;return Math.round(Tt*100)}function Fe(G){let z=Q(G),ke=Date.now();F(z,ke);let Ee=z.filter(pe=>pe.success).length,Me=z.length-Ee,bt=z.length>0?Ee/z.length:0,Et=z.length>0?z.reduce((pe,Tt)=>pe+Tt.latencyMs,0)/z.length:0,Ae=[];for(let pe=z.length-1;pe>=0&&Ae.length<5;pe--)z[pe].errorMessage&&Ae.unshift(z[pe].errorMessage);return {agentId:G,circuitState:S.get(G)??"CLOSED",successRate:bt,avgLatencyMs:Et,recentFailures:Me,recentSuccesses:Ee,healthScore:Ce(G),lastErrors:Ae}}return {recordSuccess(G,z){let ke=Q(G);ke.push({success:true,latencyMs:z,timestamp:Date.now()}),F(ke,Date.now()),w++;},recordFailure(G,z,ke){let Ee=Q(G);Ee.push({success:false,latencyMs:z,timestamp:Date.now(),errorMessage:ke?.message}),F(Ee,Date.now()),w++;},getMetrics(G){return Fe(G)},getAllMetrics(){if(w===A&&v)return v;let G=Object.create(null);for(let z of k.keys())G[z]=Fe(z);return v=G,A=w,G},getHealthScore(G){return Ce(G)},updateCircuitState(G,z){S.set(G,z),w++;},reset(){k.clear(),S.clear(),w++,v=null,A=-1;}}}var Sn=class extends Error{iterations;history;lastResult;totalTokens;constructor(t){super(`[Directive Reflection] Exhausted ${t.iterations} iterations without passing evaluation. Last feedback: ${t.history[t.history.length-1]?.feedback??"(none)"}`),this.name="ReflectionExhaustedError",this.iterations=t.iterations,this.history=t.history,this.lastResult=t.lastResult,this.totalTokens=t.totalTokens;}};var Nr=1e4;function Zn(i){if(i.length===0)return {stream:{[Symbol.asyncIterator](){let A={done:true,value:void 0};return {async next(){return A},async return(){return A}}}},getDroppedCount:()=>0};let t=[],u=[],a=i.length,d=false,f=0;function k(v){if(d)return;let A=u.shift();if(A){A(v);return}t.length<Nr?t.push(v):f++;}function S(){if(a--,a<=0){d=true;for(let v of u)v(null);u.length=0;}}for(let v of i)(async()=>{try{for await(let A of v.stream)k({chunk:A,agentId:v.agentId});}catch(A){k({chunk:{type:"error",error:A instanceof Error?A:new Error(String(A))},agentId:v.agentId});}finally{S();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return t.length>0?{done:false,value:t.shift()}:d?{done:true,value:void 0}:new Promise(v=>{u.push(A=>{v(A===null?{done:true,value:void 0}:{done:false,value:A});});})},return(){d=true,t.length=0;for(let v of u)v(null);return u.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>f}}function _t(i){if(typeof i=="string")return i;try{return JSON.stringify(i)}catch{return String(i)}}function qr(i,t){if(Object.is(i,t))return true;if(typeof i!=typeof t||i===null||t===null||typeof i!="object")return false;if(Array.isArray(i)){if(!Array.isArray(t)||i.length!==t.length)return false;for(let k=0;k<i.length;k++)if(i[k]!==t[k])return false;return true}let u=i,a=t,d=Object.keys(u),f=Object.keys(a);if(d.length!==f.length)return false;for(let k of d)if(u[k]!==a[k])return false;return true}function Qn(i){switch(i.type){case "sequential":return i.step;case "supervisor":return i.round;case "reflect":return i.iteration;case "debate":return i.round;case "dag":return i.completedCount;case "goal":return i.step}}var Rt=class{count;maxPermits;queue=[];constructor(t){if(t<1||!Number.isFinite(t))throw new Error(`[Directive Semaphore] Invalid max permits: ${t}. Must be a finite number >= 1.`);this.maxPermits=t,this.count=t;}createReleaseFn(){let t=false;return ()=>{t||(t=true,this.release());}}async acquire(t){if(t?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((u,a)=>{let d,f={resolve:k=>{d&&t&&t.removeEventListener("abort",d),u(k);},reject:a};this.queue.push(f),t&&(d=()=>{let k=this.queue.indexOf(f);k>=0&&(this.queue.splice(k,1),a(new Error("[Directive Semaphore] Aborted while waiting for permit")));},t.addEventListener("abort",d,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let t=this.queue.shift();t&&(this.count--,t.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let t=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),u=this.queue.splice(0,this.queue.length);for(let a of u)a.reject(t);this.count=this.maxPermits;}},Gr=requirementGuard("RUN_AGENT");function tr(i){let{runner:t$1,agents:u,patterns:a={},onHandoff:d,onHandoffComplete:f,maxHandoffHistory:k=1e3,debug:S=false,guardrails:w={},hooks:v={},memory:A,agentRetry:Q,maxTokenBudget:F,plugins:Ce=[],onApprovalRequest:Fe,autoApproveToolCalls:G=true,approvalTimeoutMs:z=3e5,constraints:ke={},resolvers:Ee={},circuitBreaker:Me,budgetWarningThreshold:bt=.8,onBudgetWarning:Et,selfHealing:Ae,checkpointStore:pe,breakpoints:Tt=[],onBreakpoint:Pt,breakpointTimeoutMs:Ze=3e5,derive:At,scratchpad:Ye,tasks:un={}}=i,fe=typeof S=="object"?true:!!S,It=5e3,m={...u},le={...un},ze=Object.create(null);for(let e of Object.keys(le))ze[e]={status:"idle"};let be=new Map;if(!G&&!Fe)throw new Error(`[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
17
+ See: https://directive.run/docs/ai/running-agents`));},Fe);})}function Yt(){return {...nt(m.facts)}}return {system:m,get facts(){return Yt()},get totalTokens(){return Je(m.facts).tokenUsage},get timeline(){return be},async run(g,x,ee){return N(g,x,Yt(),void 0,ee)},runStream(g,x,ee={}){let K=new AbortController,O=1e4,ne=[],me=[],De=false,Ke=Date.now(),Ve=0,Xe=1e5,re="",ae;ee.signal&&(ae=()=>K.abort(),ee.signal.addEventListener("abort",ae,{once:true}));let ot=()=>{ae&&ee.signal&&ee.signal.removeEventListener("abort",ae);},ue=se=>{if(De)return;let ge=me.shift();ge?ge(se):(ne.push(se),ne.length>O&&ne.shift());},J=()=>{De=true,ot();for(let se of me)se(null);me.length=0;},V=(async()=>{ue({type:"progress",phase:"starting",message:"Running input guardrails"});try{let se=x,ge=(k.input??[]).map((X,Ge)=>gt(X,Ge,"input"));for(let X of ge){let{name:Ge}=X,St={agentName:g.name,input:se,facts:m.facts.$store.toObject()},ce=await ft(X,{input:se,agentName:g.name},St);if(!ce.passed)throw ue({type:"guardrail_triggered",guardrailName:Ge,reason:ce.reason??"Input validation failed",partialOutput:re,stopped:!0}),new et({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${Ge}" failed: ${ce.reason}`,guardrailName:Ge,guardrailType:"input",userMessage:ce.reason??"Input validation failed",agentName:g.name,input:se});ce.transformed!==void 0&&(se=ce.transformed);}ue({type:"progress",phase:"generating",message:"Starting agent"}),m.batch(()=>{let X=Je(m.facts);We(m.facts,{...X,status:"running",currentAgent:g.name,input:se,startedAt:Date.now()});});let we=await nn(t$1,g,se,{signal:K.signal,onMessage:X=>{let Ge=Wt(m.facts);if(mt(m.facts,[...Ge,X]),ue({type:"message",message:X}),X.role==="assistant"&&X.content){let St=Math.ceil(X.content.length/4);Ve+=St,re+=X.content,re.length>Xe&&(re=re.slice(-Xe)),ue({type:"token",data:X.content,tokenCount:Ve});}},onToolCall:async X=>{ue({type:"tool_start",tool:X.name,toolCallId:X.id,arguments:X.arguments});let Ge=(k.toolCall??[]).map((ce,it)=>gt(ce,it,"toolCall"));for(let ce of Ge){let{name:it}=ce,dt={agentName:g.name,input:se,facts:m.facts.$store.toObject()},Ct=await ft(ce,{toolCall:X,agentName:g.name,input:se},dt);if(!Ct.passed)throw ue({type:"guardrail_triggered",guardrailName:it,reason:Ct.reason??"Tool call blocked",partialOutput:re,stopped:!0}),new et({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${it}" failed: ${Ct.reason}`,guardrailName:it,guardrailType:"toolCall",userMessage:Ct.reason??"Tool call blocked",data:{toolCall:X},agentName:g.name,input:se})}if(!w){let ce=`tool-${X.id}`;ue({type:"approval_required",requestId:ce,toolName:X.name});let it={id:ce,type:"tool_call",agentName:g.name,description:`Tool call: ${X.name}`,data:X,requestedAt:Date.now()};m.batch(()=>{let dt=ut(m.facts);rt(m.facts,{...dt,pending:[...dt.pending,it]});}),S?.(it),await cn(ce,K.signal),ue({type:"approval_resolved",requestId:ce,approved:!0});}let St=Kt(m.facts);ht(m.facts,[...St,X]),X.result&&ue({type:"tool_end",tool:X.name,toolCallId:X.id,result:X.result});}},q);ue({type:"progress",phase:"finishing",message:"Running output guardrails"});let lt=(k.output??[]).map((X,Ge)=>gt(X,Ge,"output"));for(let X of lt){let{name:Ge}=X,St={agentName:g.name,input:se,facts:m.facts.$store.toObject()},ce=await ft(X,{output:we.output,agentName:g.name,input:se,messages:we.messages},St);if(!ce.passed)throw ue({type:"guardrail_triggered",guardrailName:Ge,reason:ce.reason??"Output validation failed",partialOutput:typeof we.output=="string"?we.output:"",stopped:!0}),new et({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${Ge}" failed: ${ce.reason}`,guardrailName:Ge,guardrailType:"output",userMessage:ce.reason??"Output validation failed",agentName:g.name,input:se});ce.transformed!==void 0&&(we.output=ce.transformed);}m.batch(()=>{let X=Je(m.facts);We(m.facts,{...X,status:"completed",output:we.output,tokenUsage:X.tokenUsage+we.totalTokens,turnCount:X.turnCount+we.messages.length,completedAt:Date.now()});});let ct=Date.now()-Ke;return ue({type:"done",totalTokens:we.totalTokens,duration:ct,droppedTokens:0}),J(),we}catch(se){throw ue({type:"error",error:se instanceof Error?se:new Error(String(se))}),J(),se}})();return V.catch(()=>{}),{stream:{[Symbol.asyncIterator](){return {async next(){return ne.length>0?{done:false,value:ne.shift()}:De?{done:true,value:void 0}:new Promise(se=>{me.push(ge=>{se(ge===null?{done:true,value:void 0}:{done:false,value:ge});});})}}}},result:V,abort:()=>{K.abort(),J();}}},async waitForIdle(g){let x=()=>Je(m.facts).status!=="running";if(x())return;let ee=Date.now();for(;!x();){if(g!==void 0&&Date.now()-ee>g)throw new Error("[Directive Orchestrator] waitForIdle timed out");await new Promise(K=>setTimeout(K,50));}},approve(g){m.batch(()=>{let x=ut(m.facts);if(!x.pending.some(O=>O.id===g)){Ze&&console.debug(`[Directive] approve() ignored: no pending request "${g}"`);return}let ee=200,K=[...x.approved,g];rt(m.facts,{...x,pending:x.pending.filter(O=>O.id!==g),approved:K.length>ee?K.slice(-ee):K});});},reject(g,x){m.batch(()=>{let ee=ut(m.facts);if(!ee.pending.some(me=>me.id===g)){Ze&&console.debug(`[Directive] reject() ignored: no pending request "${g}"`);return}x&&Ze&&console.debug(`[Directive] Request ${g} rejected: ${x}`);let K={id:g,reason:x,rejectedAt:Date.now()},O=200,ne=[...ee.rejected,K];rt(m.facts,{...ee,pending:ee.pending.filter(me=>me.id!==g),rejected:ne.length>O?ne.slice(-O):ne});});},pause(){let g=Je(m.facts);We(m.facts,{...g,status:"paused"});},resume(){let g=Je(m.facts);g.status==="paused"&&We(m.facts,{...g,status:g.currentAgent?"running":"idle"});},reset(){m.batch(()=>{We(m.facts,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(m.facts,{pending:[],approved:[],rejected:[]}),mt(m.facts,[]),ht(m.facts,[]),st(m.facts,{pending:[],resolved:[],cancelled:[]}),setBridgeFact(m.facts,"__budgetWarningFired",false);}),je.clear(),Qe.clear();},async checkpoint(g){if(Je(m.facts).status==="running")throw new Error("[Directive] Cannot checkpoint while agent is running");if(!m.debug?.export)throw new Error("[Directive] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let ee={version:1,id:yt(),createdAt:new Date().toISOString(),label:g?.label,systemExport:m.debug.export(),timelineExport:be?.export()??null,localState:{type:"single"},memoryExport:ke?ke.export?.()??null:null,orchestratorType:"single"};return Ae&&await Ae.save(ee),ee},restore(g,x){if(!sn(g))throw new Error("[Directive] Invalid checkpoint data");if(g.orchestratorType!=="single")throw new Error("[Directive] Cannot restore multi-agent checkpoint in single-agent orchestrator");if(!m.debug?.import)throw new Error("[Directive] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");m.debug.import(g.systemExport),x?.restoreTimeline!==false&&g.timelineExport&&be&&be.import(g.timelineExport),g.memoryExport!==null&&ke&&ke.import&&ke.import(g.memoryExport);},resumeBreakpoint(g,x){x&&je.set(g,x),m.batch(()=>{let ee=at(m.facts),K=[...ee.resolved,g];st(m.facts,{...ee,pending:ee.pending.filter(O=>O.id!==g),resolved:K.length>vt?K.slice(-vt):K});});},cancelBreakpoint(g,x){x&&Qe.set(g,x),m.batch(()=>{let ee=at(m.facts),K=[...ee.cancelled,g];st(m.facts,{...ee,pending:ee.pending.filter(O=>O.id!==g),cancelled:K.length>vt?K.slice(-vt):K});});},getPendingBreakpoints(){return [...at(m.facts).pending]},dispose(){m.destroy();}}}var In={successRate:.5,latency:.3,circuitState:.2};function zn(i={}){let t=i.windowMs??6e4,u=i.maxNormalLatencyMs??5e3,s=i.maxEventsPerAgent??1e3,d={successRate:i.weights?.successRate??In.successRate,latency:i.weights?.latency??In.latency,circuitState:i.weights?.circuitState??In.circuitState};if(!Number.isFinite(t)||t<=0)throw new Error("[Directive HealthMonitor] windowMs must be a positive number");if(!Number.isFinite(u)||u<=0)throw new Error("[Directive HealthMonitor] maxNormalLatencyMs must be a positive number");if(!Number.isFinite(s)||s<1)throw new Error("[Directive HealthMonitor] maxEventsPerAgent must be >= 1");for(let[q,z]of Object.entries(d))if(z<0||z>1)throw new Error(`[Directive HealthMonitor] weight "${q}" must be between 0 and 1 (got ${z})`);let f=d.successRate+d.latency+d.circuitState;if(Math.abs(f-1)>.01)throw new Error(`[Directive HealthMonitor] weights must sum to ~1.0 (tolerance: \xB10.01, got ${f.toFixed(4)})`);let k=new Map,S=new Map,w=0,y=null,A=-1;function Q(q){let z=k.get(q);return z||(z=[],k.set(q,z)),z}function F(q,z){let ke=z-t,Ee=0;for(;Ee<q.length&&q[Ee].timestamp<ke;)Ee++;let Me=q.length-Ee-s;Me>0&&(Ee+=Me),Ee>0&&q.splice(0,Ee);}function Ce(q){let z=k.get(q);if(!z||z.length===0)return 50;let ke=Date.now();if(F(z,ke),z.length===0)return 50;let Me=z.filter(Pt=>Pt.success).length/z.length,bt=z.reduce((Pt,Ze)=>Pt+Ze.latencyMs,0)/z.length,Et=Math.min(bt/u,1),Ae=S.get(q)??"CLOSED",pe=Ae==="CLOSED"?1:Ae==="HALF_OPEN"?.5:0,Tt=Me*d.successRate+(1-Et)*d.latency+pe*d.circuitState;return Math.round(Tt*100)}function Fe(q){let z=Q(q),ke=Date.now();F(z,ke);let Ee=z.filter(pe=>pe.success).length,Me=z.length-Ee,bt=z.length>0?Ee/z.length:0,Et=z.length>0?z.reduce((pe,Tt)=>pe+Tt.latencyMs,0)/z.length:0,Ae=[];for(let pe=z.length-1;pe>=0&&Ae.length<5;pe--)z[pe].errorMessage&&Ae.unshift(z[pe].errorMessage);return {agentId:q,circuitState:S.get(q)??"CLOSED",successRate:bt,avgLatencyMs:Et,recentFailures:Me,recentSuccesses:Ee,healthScore:Ce(q),lastErrors:Ae}}return {recordSuccess(q,z){let ke=Q(q);ke.push({success:true,latencyMs:z,timestamp:Date.now()}),F(ke,Date.now()),w++;},recordFailure(q,z,ke){let Ee=Q(q);Ee.push({success:false,latencyMs:z,timestamp:Date.now(),errorMessage:ke?.message}),F(Ee,Date.now()),w++;},getMetrics(q){return Fe(q)},getAllMetrics(){if(w===A&&y)return y;let q=Object.create(null);for(let z of k.keys())q[z]=Fe(z);return y=q,A=w,q},getHealthScore(q){return Ce(q)},updateCircuitState(q,z){S.set(q,z),w++;},reset(){k.clear(),S.clear(),w++,y=null,A=-1;}}}var Sn=class extends Error{iterations;history;lastResult;totalTokens;constructor(t){super(`[Directive Reflection] Exhausted ${t.iterations} iterations without passing evaluation. Last feedback: ${t.history[t.history.length-1]?.feedback??"(none)"}`),this.name="ReflectionExhaustedError",this.iterations=t.iterations,this.history=t.history,this.lastResult=t.lastResult,this.totalTokens=t.totalTokens;}};var Nr=1e4;function Zn(i){if(i.length===0)return {stream:{[Symbol.asyncIterator](){let A={done:true,value:void 0};return {async next(){return A},async return(){return A}}}},getDroppedCount:()=>0};let t=[],u=[],s=i.length,d=false,f=0;function k(y){if(d)return;let A=u.shift();if(A){A(y);return}t.length<Nr?t.push(y):f++;}function S(){if(s--,s<=0){d=true;for(let y of u)y(null);u.length=0;}}for(let y of i)(async()=>{try{for await(let A of y.stream)k({chunk:A,agentId:y.agentId});}catch(A){k({chunk:{type:"error",error:A instanceof Error?A:new Error(String(A))},agentId:y.agentId});}finally{S();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return t.length>0?{done:false,value:t.shift()}:d?{done:true,value:void 0}:new Promise(y=>{u.push(A=>{y(A===null?{done:true,value:void 0}:{done:false,value:A});});})},return(){d=true,t.length=0;for(let y of u)y(null);return u.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>f}}function Qn(i,t,u){return {type:"dag",nodes:i,merge:t??(s=>s.outputs),...u}}function _t(i){if(typeof i=="string")return i;try{return JSON.stringify(i)}catch{return String(i)}}function Gr(i,t){if(Object.is(i,t))return true;if(typeof i!=typeof t||i===null||t===null||typeof i!="object")return false;if(Array.isArray(i)){if(!Array.isArray(t)||i.length!==t.length)return false;for(let k=0;k<i.length;k++)if(i[k]!==t[k])return false;return true}let u=i,s=t,d=Object.keys(u),f=Object.keys(s);if(d.length!==f.length)return false;for(let k of d)if(u[k]!==s[k])return false;return true}function er(i){switch(i.type){case "sequential":return i.step;case "supervisor":return i.round;case "reflect":return i.iteration;case "debate":return i.round;case "dag":return i.completedCount;case "goal":return i.step}}var Rt=class{count;maxPermits;queue=[];constructor(t){if(t<1||!Number.isFinite(t))throw new Error(`[Directive Semaphore] Invalid max permits: ${t}. Must be a finite number >= 1.`);this.maxPermits=t,this.count=t;}createReleaseFn(){let t=false;return ()=>{t||(t=true,this.release());}}async acquire(t){if(t?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((u,s)=>{let d,f={resolve:k=>{d&&t&&t.removeEventListener("abort",d),u(k);},reject:s};this.queue.push(f),t&&(d=()=>{let k=this.queue.indexOf(f);k>=0&&(this.queue.splice(k,1),s(new Error("[Directive Semaphore] Aborted while waiting for permit")));},t.addEventListener("abort",d,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let t=this.queue.shift();t&&(this.count--,t.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let t=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),u=this.queue.splice(0,this.queue.length);for(let s of u)s.reject(t);this.count=this.maxPermits;}},qr=requirementGuard("RUN_AGENT");function nr(i){let{runner:t$1,agents:u,patterns:s={},onHandoff:d,onHandoffComplete:f,maxHandoffHistory:k=1e3,debug:S=false,guardrails:w={},hooks:y={},memory:A,agentRetry:Q,maxTokenBudget:F,plugins:Ce=[],onApprovalRequest:Fe,autoApproveToolCalls:q=true,approvalTimeoutMs:z=3e5,constraints:ke={},resolvers:Ee={},circuitBreaker:Me,budgetWarningThreshold:bt=.8,onBudgetWarning:Et,selfHealing:Ae,checkpointStore:pe,breakpoints:Tt=[],onBreakpoint:Pt,breakpointTimeoutMs:Ze=3e5,derive:At,scratchpad:Ye,tasks:un={}}=i,fe=typeof S=="object"?true:!!S,It=5e3,m={...u},le={...un},ze=Object.create(null);for(let e of Object.keys(le))ze[e]={status:"idle"};let be=new Map;if(!q&&!Fe)throw new Error(`[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
18
18
  - Set autoApproveToolCalls: true to auto-approve all tool calls
19
- - Provide an onApprovalRequest callback to handle approvals programmatically`);if(bt<0||bt>1)throw new Error(`[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${bt}`);let Gt=new Set(["__coord","__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);for(let e of Object.keys(m))if(Gt.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);for(let[e,n]of Object.entries(le)){if(!e||e.trim()!==e)throw new Error(`[Directive MultiAgent] Task ID must be a non-empty trimmed string, got "${e}"`);if(Gt.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(n.timeout!==void 0&&(!Number.isFinite(n.timeout)||n.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(n.maxConcurrent!==void 0&&(!Number.isFinite(n.maxConcurrent)||n.maxConcurrent<1||!Number.isInteger(n.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(n.retry){let{attempts:o,delayMs:r}=n.retry;if(!Number.isFinite(o)||o<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(r!==void 0&&(!Number.isFinite(r)||r<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}}for(let[e,n]of Object.entries(le))be.set(e,new Rt(n.maxConcurrent??1));for(let e of Object.keys(le))if(m[e])throw new Error(`[Directive MultiAgent] ID "${e}" is registered as both an agent and a task. IDs must be unique across both registries.`);let ln=new Set([...Object.keys(m),...Object.keys(le)]),Bt=[];for(let[e,n]of Object.entries(a)){let o=[];switch(n.type){case "parallel":o.push(...n.handlers);break;case "sequential":o.push(...n.handlers);break;case "supervisor":o.push(n.supervisor,...n.workers);break;case "dag":for(let r of Object.values(n.nodes))o.push(r.handler);break;case "reflect":o.push(n.handler,n.evaluator);break;case "race":o.push(...n.handlers);break;case "debate":o.push(...n.handlers,n.evaluator);break}for(let r of o)ln.has(r)||Bt.push({patternId:e,agentId:r});}if(Bt.length>0){let e=Bt.map(({patternId:n,agentId:o})=>` - Pattern "${n}" references unknown agent "${o}"`).join(`
19
+ - Provide an onApprovalRequest callback to handle approvals programmatically`);if(bt<0||bt>1)throw new Error(`[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${bt}`);let qt=new Set(["__coord","__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);for(let e of Object.keys(m))if(qt.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);for(let[e,n]of Object.entries(le)){if(!e||e.trim()!==e)throw new Error(`[Directive MultiAgent] Task ID must be a non-empty trimmed string, got "${e}"`);if(qt.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(n.timeout!==void 0&&(!Number.isFinite(n.timeout)||n.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(n.maxConcurrent!==void 0&&(!Number.isFinite(n.maxConcurrent)||n.maxConcurrent<1||!Number.isInteger(n.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(n.retry){let{attempts:o,delayMs:r}=n.retry;if(!Number.isFinite(o)||o<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(r!==void 0&&(!Number.isFinite(r)||r<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}}for(let[e,n]of Object.entries(le))be.set(e,new Rt(n.maxConcurrent??1));for(let e of Object.keys(le))if(m[e])throw new Error(`[Directive MultiAgent] ID "${e}" is registered as both an agent and a task. IDs must be unique across both registries.`);let ln=new Set([...Object.keys(m),...Object.keys(le)]),Bt=[];for(let[e,n]of Object.entries(s)){let o=[];switch(n.type){case "parallel":o.push(...n.handlers);break;case "sequential":o.push(...n.handlers);break;case "supervisor":o.push(n.supervisor,...n.workers);break;case "dag":for(let r of Object.values(n.nodes))o.push(r.handler);break;case "reflect":o.push(n.handler,n.evaluator);break;case "race":o.push(...n.handlers);break;case "debate":o.push(...n.handlers,n.evaluator);break}for(let r of o)ln.has(r)||Bt.push({patternId:e,agentId:r});}if(Bt.length>0){let e=Bt.map(({patternId:n,agentId:o})=>` - Pattern "${n}" references unknown agent "${o}"`).join(`
20
20
  `);throw new Error(`[Directive MultiAgent] Pattern validation failed. The following agents are not registered:
21
21
  ${e}
22
22
 
23
- Registered agents: ${[...ln].join(", ")||"(none)"}`)}for(let[e,n]of Object.entries(a))n.type==="dag"&&Br(e,n.nodes);let N=null,Xt=null;fe&&(N=Jt({goToSnapshot:e=>{try{O.debug?.goTo?.(e);}catch{}}}));let je=null,Qe=null;Ae&&(je=zn(Ae.healthMonitor),Ae.selectionStrategy==="round-robin"&&(Qe=new Map));function oe(e,n){try{v[e]?.(n);}catch(o){fe&&console.debug(`[Directive MultiAgent] hooks.${e} threw:`,o);}}let xt={__globalTokens:t.number(),__status:t.string(),__handoffs:t.array(),__handoffResults:t.array(),__budgetWarningFired:t.boolean()};Ye&&(xt[tt]=t.object()),At&&Object.keys(At).length>0&&(xt.__derived=t.object());let cn={facts:xt,derivations:{},events:{},requirements:{}},Yt=Vt(ke);F&&(Yt.__budgetLimit={priority:100,when:e=>getBridgeFact(e,"__globalTokens")>F,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let zt=Object.create(null);for(let[e,n]of Object.entries(Ee))zt[e]={requirement:n.requirement,key:n.key,resolve:async(o,r)=>{let s=nt(r.facts),l={facts:{...r.facts,...s},runAgent:async(p,b,C)=>t$1(p,b,C),signal:r.signal};return n.resolve(o,l)}};zt.__pause={requirement:requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async()=>{Ke="paused",fe&&console.debug("[Directive MultiAgent] Budget exceeded \u2014 all agents paused");}},zt.__runAgent={requirement:Gr,resolve:async e=>{await Ne(e.agent,e.input);}};let g=createModule("__coord",{schema:cn,init:e=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Ye&&setBridgeFact(e,tt,{...Ye.init});},constraints:Yt,resolvers:zt}),x=Object.create(null);x.__coord=g;for(let[e,n]of Object.entries(m)){let o=n.constraints?Vt(n.constraints):{},r=Object.create(null);if(n.resolvers)for(let[s,c]of Object.entries(n.resolvers))r[s]={requirement:c.requirement,key:c.key,resolve:async(l,p)=>{let b=nt(p.facts),D={facts:{...p.facts,...b},runAgent:async($,I,H)=>t$1($,I,H),signal:p.signal};return c.resolve(l,D)}};x[e]=createModule(e,{schema:tn,init:s=>{We(s,{status:"idle",currentAgent:n.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(s,{pending:[],approved:[],rejected:[]}),mt(s,[]),ht(s,[]),at(s,sn());},constraints:o,resolvers:Object.keys(r).length>0?r:void 0});}let ee=createCallbackPlugin("directive-multi-agent-callbacks",{}),K=[...Ce,ee];fe&&N&&(Xt=yn(N,()=>{try{return O.debug?.currentIndex??null}catch{return null}}),K.push(Xt));let O=createSystem({modules:x,plugins:K,debug:fe?{timeTravel:true}:void 0});O.start();let ne=500,me=200,De=0,Ke="idle",Ve=false,Xe=0,re=null;function se(){if(Ve)throw new Error("[Directive MultiAgent] Orchestrator has been disposed")}let ot=new Map;for(let[e,n]of Object.entries(m))ot.set(e,new Rt(n.maxConcurrent??1));let ue=Object.create(null);for(let e of Object.keys(m))ue[e]={status:"idle",runCount:0,totalTokens:0};let J=k,V=[],xe=[],ae=0;function ge(e){for(xe.push(e);xe.length>J;)xe.shift();}let we=new Map,lt=new Set;function ct(){for(let e of lt)e();}let X=Object.create(null),qe=new Set;function St(){let e=Object.create(null);for(let[r,s]of Object.entries(ue))e[r]={status:s.status,lastInput:s.lastInput,lastOutput:s.lastOutput,lastError:s.lastError,runCount:s.runCount,totalTokens:s.totalTokens};let n=_e("__coord"),o={agents:e,coordinator:{globalTokens:De,status:Ke}};return Ye&&n&&(o.scratchpad=getBridgeFact(n,tt)??{}),o}function ce(){if(!At)return;let e=St(),n=[],o=[];O.batch(()=>{for(let[s,c]of Object.entries(At))try{let l=c(e),p=X[s],b=!qr(l,p);X[s]=l,b&&n.push({derivId:s,newValue:l});}catch(l){o.push({derivId:s,derivError:l});}let r=_e("__coord");r&&setBridgeFact(r,"__derived",{...X});});for(let{derivId:r,newValue:s}of n){N&&N.record({type:"derivation_update",timestamp:Date.now(),snapshotId:null,derivationId:r,valueType:typeof s}),oe("onDerivationUpdate",{derivationId:r,value:s,timestamp:Date.now()});for(let c of qe)try{c(r,s);}catch{}}for(let{derivId:r,derivError:s}of o)fe&&console.warn(`[Directive MultiAgent] Derivation "${r}" threw:`,s),oe("onDerivationError",{derivationId:r,error:s instanceof Error?s:new Error(String(s)),timestamp:Date.now()});}let it=new Set,dt=new Map,Ct=Ye?{get(e){let n=_e("__coord"),o=getBridgeFact(n,tt);if(!(o==null||!Object.hasOwn(o,e)))return o[e]},set(e,n){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let o=_e("__coord"),r=[e];O.batch(()=>{let s=getBridgeFact(o,tt)??{};setBridgeFact(o,tt,{...s,[e]:n});}),En(r,e,n),ce();},has(e){let n=_e("__coord"),o=getBridgeFact(n,tt);return o!=null&&Object.hasOwn(o,e)},delete(e){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let n=_e("__coord");O.batch(()=>{let o=getBridgeFact(n,tt)??{},{[e]:r,...s}=o;setBridgeFact(n,tt,s);}),En([e],e,void 0),ce();},update(e){let n=Object.create(null);for(let s of Object.keys(e))s==="__proto__"||s==="constructor"||s==="prototype"||(n[s]=e[s]);let o=_e("__coord"),r=Object.keys(n);if(r.length!==0){O.batch(()=>{let s=getBridgeFact(o,tt)??{};setBridgeFact(o,tt,{...s,...n});});for(let[s,c]of Object.entries(n))En(r,s,c);ce();}},getAll(){let e=_e("__coord");return {...getBridgeFact(e,tt)??{}}},subscribe(e,n){for(let o of e)dt.has(o)||dt.set(o,new Set),dt.get(o).add(n);return ()=>{for(let o of e)dt.get(o)?.delete(n);}},onChange(e){return it.add(e),()=>{it.delete(e);}},reset(){if(!Ye)return;let e=_e("__coord");O.batch(()=>{setBridgeFact(e,tt,{...Ye.init});});}}:null;function En(e,n,o){let r=dt.get(n);if(r)for(let s of r)try{s(n,o);}catch{}for(let s of it)try{s(n,o);}catch{}N&&n===e[e.length-1]&&N.record({type:"scratchpad_update",timestamp:Date.now(),snapshotId:null,keys:e}),n===e[e.length-1]&&oe("onScratchpadUpdate",{keys:e,timestamp:Date.now()});}let Lt=new Map,Zt=new Map;function sr(e,n,o){return new Promise((r,s)=>{let c=null,l=false,p,b=_e(e),C=()=>{l||(l=true,c&&(clearTimeout(c),c=null),p&&o&&o.removeEventListener("abort",p),D());},D=O.subscribe([`${e}.${Mt}`],()=>{let $=st(b);if($.resolved.includes(n)){C();let I=Lt.get(n)??null;Lt.delete(n),r(I);}else if($.cancelled.includes(n)){C(),Lt.delete(n);let I=Zt.get(n);Zt.delete(n),s(new Error(I?`[Directive MultiAgent] Breakpoint ${n} cancelled: ${I}`:`[Directive MultiAgent] Breakpoint ${n} cancelled`));}});if(o){if(p=()=>{C(),s(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${n}`));},o.aborted){C(),s(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${n}`));return}o.addEventListener("abort",p,{once:true});}c=setTimeout(()=>{C(),Lt.delete(n),Zt.delete(n),s(new Error(`[Directive MultiAgent] Breakpoint timeout: ${n} not resolved within ${Math.round(Ze/1e3)}s`));},Ze);})}async function Nt(e,n,o,r,s,c){if(Tt.length===0)return {input:r,skip:false};let l=_e(n),p={agentId:n,agentName:o,input:r,state:nt(l),breakpointType:e,patternId:c?.patternId,handoff:c?.handoff},b=wn(Tt,e,p);if(!b)return {input:r,skip:false};let C=vn(),D={id:C,type:e,agentId:n,input:r,label:b.label,requestedAt:Date.now()};O.batch(()=>{let I=st(l);at(l,{...I,pending:[...I.pending,D]});});try{Pt?.(D);}catch{}try{v.onBreakpoint?.(D);}catch{}N&&N.record({type:"breakpoint_hit",timestamp:Date.now(),agentId:n,snapshotId:null,breakpointId:C,breakpointType:e,label:b.label});let $=await sr(n,C,s);return N&&N.record({type:"breakpoint_resumed",timestamp:Date.now(),agentId:n,snapshotId:null,breakpointId:C,modified:!!$?.input,skipped:!!$?.skip}),{input:$?.input??r,skip:$?.skip??false}}function _e(e){return O.facts[e]}function ar(e,n,o){return new Promise((r,s)=>{let c=null,l=false,p,b=_e(e),C=()=>{l||(l=true,c&&(clearTimeout(c),c=null),p&&o&&o.removeEventListener("abort",p),D());},D=O.subscribe([`${e}.${Ot}`],()=>{let $=ut(b);if($.approved.includes(n))C(),r();else {let I=$.rejected.find(H=>H.id===n);if(I){C();let H=I.reason?`Request ${n} rejected: ${I.reason}`:`Request ${n} rejected`;s(new Error(H));}}});if(o){if(p=()=>{C(),s(new Error(`[Directive MultiAgent] Approval wait aborted for request ${n}`));},o.aborted){C(),s(new Error(`[Directive MultiAgent] Approval wait aborted for request ${n}`));return}o.addEventListener("abort",p,{once:true});}c=setTimeout(()=>{C();let $=Math.round(z/1e3);s(new Error(`[Directive MultiAgent] Approval timeout: Request ${n} not resolved within ${$}s.
23
+ Registered agents: ${[...ln].join(", ")||"(none)"}`)}for(let[e,n]of Object.entries(s))n.type==="dag"&&Br(e,n.nodes);let N=null,Xt=null;fe&&(N=Jt({goToSnapshot:e=>{try{O.debug?.goTo?.(e);}catch{}}}));let je=null,Qe=null;Ae&&(je=zn(Ae.healthMonitor),Ae.selectionStrategy==="round-robin"&&(Qe=new Map));function oe(e,n){try{y[e]?.(n);}catch(o){fe&&console.debug(`[Directive MultiAgent] hooks.${e} threw:`,o);}}let xt={__globalTokens:t.number(),__status:t.string(),__handoffs:t.array(),__handoffResults:t.array(),__budgetWarningFired:t.boolean()};Ye&&(xt[tt]=t.object()),At&&Object.keys(At).length>0&&(xt.__derived=t.object());let cn={facts:xt,derivations:{},events:{},requirements:{}},Yt=Vt(ke);F&&(Yt.__budgetLimit={priority:100,when:e=>getBridgeFact(e,"__globalTokens")>F,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let zt=Object.create(null);for(let[e,n]of Object.entries(Ee))zt[e]={requirement:n.requirement,key:n.key,resolve:async(o,r)=>{let a=nt(r.facts),l={facts:{...r.facts,...a},runAgent:async(p,b,C)=>t$1(p,b,C),signal:r.signal};return n.resolve(o,l)}};zt.__pause={requirement:requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async()=>{Ke="paused",fe&&console.debug("[Directive MultiAgent] Budget exceeded \u2014 all agents paused");}},zt.__runAgent={requirement:qr,resolve:async e=>{await Ne(e.agent,e.input);}};let g=createModule("__coord",{schema:cn,init:e=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Ye&&setBridgeFact(e,tt,{...Ye.init});},constraints:Yt,resolvers:zt}),x=Object.create(null);x.__coord=g;for(let[e,n]of Object.entries(m)){let o=n.constraints?Vt(n.constraints):{},r=Object.create(null);if(n.resolvers)for(let[a,c]of Object.entries(n.resolvers))r[a]={requirement:c.requirement,key:c.key,resolve:async(l,p)=>{let b=nt(p.facts),D={facts:{...p.facts,...b},runAgent:async($,I,H)=>t$1($,I,H),signal:p.signal};return c.resolve(l,D)}};x[e]=createModule(e,{schema:tn,init:a=>{We(a,{status:"idle",currentAgent:n.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(a,{pending:[],approved:[],rejected:[]}),mt(a,[]),ht(a,[]),st(a,an());},constraints:o,resolvers:Object.keys(r).length>0?r:void 0});}let ee=createCallbackPlugin("directive-multi-agent-callbacks",{}),K=[...Ce,ee];fe&&N&&(Xt=vn(N,()=>{try{return O.debug?.currentIndex??null}catch{return null}}),K.push(Xt));let O=createSystem({modules:x,plugins:K,debug:fe?{timeTravel:true}:void 0});O.start();let ne=500,me=200,De=0,Ke="idle",Ve=false,Xe=0,re=null;function ae(){if(Ve)throw new Error("[Directive MultiAgent] Orchestrator has been disposed")}let ot=new Map;for(let[e,n]of Object.entries(m))ot.set(e,new Rt(n.maxConcurrent??1));let ue=Object.create(null);for(let e of Object.keys(m))ue[e]={status:"idle",runCount:0,totalTokens:0};let J=k,V=[],xe=[],se=0;function ge(e){for(xe.push(e);xe.length>J;)xe.shift();}let we=new Map,lt=new Set;function ct(){for(let e of lt)e();}let X=Object.create(null),Ge=new Set;function St(){let e=Object.create(null);for(let[r,a]of Object.entries(ue))e[r]={status:a.status,lastInput:a.lastInput,lastOutput:a.lastOutput,lastError:a.lastError,runCount:a.runCount,totalTokens:a.totalTokens};let n=_e("__coord"),o={agents:e,coordinator:{globalTokens:De,status:Ke}};return Ye&&n&&(o.scratchpad=getBridgeFact(n,tt)??{}),o}function ce(){if(!At)return;let e=St(),n=[],o=[];O.batch(()=>{for(let[a,c]of Object.entries(At))try{let l=c(e),p=X[a],b=!Gr(l,p);X[a]=l,b&&n.push({derivId:a,newValue:l});}catch(l){o.push({derivId:a,derivError:l});}let r=_e("__coord");r&&setBridgeFact(r,"__derived",{...X});});for(let{derivId:r,newValue:a}of n){N&&N.record({type:"derivation_update",timestamp:Date.now(),snapshotId:null,derivationId:r,valueType:typeof a}),oe("onDerivationUpdate",{derivationId:r,value:a,timestamp:Date.now()});for(let c of Ge)try{c(r,a);}catch{}}for(let{derivId:r,derivError:a}of o)fe&&console.warn(`[Directive MultiAgent] Derivation "${r}" threw:`,a),oe("onDerivationError",{derivationId:r,error:a instanceof Error?a:new Error(String(a)),timestamp:Date.now()});}let it=new Set,dt=new Map,Ct=Ye?{get(e){let n=_e("__coord"),o=getBridgeFact(n,tt);if(!(o==null||!Object.hasOwn(o,e)))return o[e]},set(e,n){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let o=_e("__coord"),r=[e];O.batch(()=>{let a=getBridgeFact(o,tt)??{};setBridgeFact(o,tt,{...a,[e]:n});}),En(r,e,n),ce();},has(e){let n=_e("__coord"),o=getBridgeFact(n,tt);return o!=null&&Object.hasOwn(o,e)},delete(e){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let n=_e("__coord");O.batch(()=>{let o=getBridgeFact(n,tt)??{},{[e]:r,...a}=o;setBridgeFact(n,tt,a);}),En([e],e,void 0),ce();},update(e){let n=Object.create(null);for(let a of Object.keys(e))a==="__proto__"||a==="constructor"||a==="prototype"||(n[a]=e[a]);let o=_e("__coord"),r=Object.keys(n);if(r.length!==0){O.batch(()=>{let a=getBridgeFact(o,tt)??{};setBridgeFact(o,tt,{...a,...n});});for(let[a,c]of Object.entries(n))En(r,a,c);ce();}},getAll(){let e=_e("__coord");return {...getBridgeFact(e,tt)??{}}},subscribe(e,n){for(let o of e)dt.has(o)||dt.set(o,new Set),dt.get(o).add(n);return ()=>{for(let o of e)dt.get(o)?.delete(n);}},onChange(e){return it.add(e),()=>{it.delete(e);}},reset(){if(!Ye)return;let e=_e("__coord");O.batch(()=>{setBridgeFact(e,tt,{...Ye.init});});}}:null;function En(e,n,o){let r=dt.get(n);if(r)for(let a of r)try{a(n,o);}catch{}for(let a of it)try{a(n,o);}catch{}N&&n===e[e.length-1]&&N.record({type:"scratchpad_update",timestamp:Date.now(),snapshotId:null,keys:e}),n===e[e.length-1]&&oe("onScratchpadUpdate",{keys:e,timestamp:Date.now()});}let Lt=new Map,Zt=new Map;function ar(e,n,o){return new Promise((r,a)=>{let c=null,l=false,p,b=_e(e),C=()=>{l||(l=true,c&&(clearTimeout(c),c=null),p&&o&&o.removeEventListener("abort",p),D());},D=O.subscribe([`${e}.${Mt}`],()=>{let $=at(b);if($.resolved.includes(n)){C();let I=Lt.get(n)??null;Lt.delete(n),r(I);}else if($.cancelled.includes(n)){C(),Lt.delete(n);let I=Zt.get(n);Zt.delete(n),a(new Error(I?`[Directive MultiAgent] Breakpoint ${n} cancelled: ${I}`:`[Directive MultiAgent] Breakpoint ${n} cancelled`));}});if(o){if(p=()=>{C(),a(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${n}`));},o.aborted){C(),a(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${n}`));return}o.addEventListener("abort",p,{once:true});}c=setTimeout(()=>{C(),Lt.delete(n),Zt.delete(n),a(new Error(`[Directive MultiAgent] Breakpoint timeout: ${n} not resolved within ${Math.round(Ze/1e3)}s`));},Ze);})}async function Nt(e,n,o,r,a,c){if(Tt.length===0)return {input:r,skip:false};let l=_e(n),p={agentId:n,agentName:o,input:r,state:nt(l),breakpointType:e,patternId:c?.patternId,handoff:c?.handoff},b=wn(Tt,e,p);if(!b)return {input:r,skip:false};let C=yn(),D={id:C,type:e,agentId:n,input:r,label:b.label,requestedAt:Date.now()};O.batch(()=>{let I=at(l);st(l,{...I,pending:[...I.pending,D]});});try{Pt?.(D);}catch{}try{y.onBreakpoint?.(D);}catch{}N&&N.record({type:"breakpoint_hit",timestamp:Date.now(),agentId:n,snapshotId:null,breakpointId:C,breakpointType:e,label:b.label});let $=await ar(n,C,a);return N&&N.record({type:"breakpoint_resumed",timestamp:Date.now(),agentId:n,snapshotId:null,breakpointId:C,modified:!!$?.input,skipped:!!$?.skip}),{input:$?.input??r,skip:$?.skip??false}}function _e(e){return O.facts[e]}function sr(e,n,o){return new Promise((r,a)=>{let c=null,l=false,p,b=_e(e),C=()=>{l||(l=true,c&&(clearTimeout(c),c=null),p&&o&&o.removeEventListener("abort",p),D());},D=O.subscribe([`${e}.${Ot}`],()=>{let $=ut(b);if($.approved.includes(n))C(),r();else {let I=$.rejected.find(H=>H.id===n);if(I){C();let H=I.reason?`Request ${n} rejected: ${I.reason}`:`Request ${n} rejected`;a(new Error(H));}}});if(o){if(p=()=>{C(),a(new Error(`[Directive MultiAgent] Approval wait aborted for request ${n}`));},o.aborted){C(),a(new Error(`[Directive MultiAgent] Approval wait aborted for request ${n}`));return}o.addEventListener("abort",p,{once:true});}c=setTimeout(()=>{C();let $=Math.round(z/1e3);a(new Error(`[Directive MultiAgent] Approval timeout: Request ${n} not resolved within ${$}s.
24
24
  Solutions:
25
25
  1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
26
26
  2. Set autoApproveToolCalls: true to auto-approve
27
27
  3. Increase approvalTimeoutMs (current: ${z}ms)
28
- See: https://directive.run/docs/ai/multi-agent`));},z);})}async function ir(e,n,o,r){let s=n.label??e,c=Date.now(),l=ze[e]??(ze[e]={status:"idle"});l.status="running",l.startTime=c,l.lastError=void 0;let p=o;if(Tt.length>0)try{let j=await Nt("pre_agent_run",e,s,o,r?.signal);if(j.skip)return l.status="completed",{output:void 0,messages:[],toolCalls:[],totalTokens:0};p=j.input;}catch{}N&&N.record({type:"task_start",timestamp:c,agentId:e,snapshotId:null,taskId:e,label:s,description:n.description,inputLength:p.length,input:p.slice(0,It)});let b=r?.patternId??"";oe("onTaskStart",{patternId:b,taskId:e,label:s,timestamp:c});let C=be.get(e),D=()=>({taskId:e,memory:A?structuredClone(A.getContextMessages?.()??[]):[],scratchpad:Object.freeze(Ct?structuredClone(Ct.getAll()):{}),readAgentState:j=>{let L=ue[j];if(L)return Object.freeze({status:L.status,lastOutput:L.lastOutput!=null?String(L.lastOutput):void 0,lastError:L.lastError,totalTokens:L.totalTokens});let U=ze[j];if(U)return Object.freeze({status:U.status,lastOutput:U.lastOutput!=null?String(U.lastOutput):void 0,lastError:U.lastError,totalTokens:0})},reportProgress:(j,L)=>{let U=Number.isFinite(j)?Math.max(0,Math.min(100,j)):0;N&&N.record({type:"task_progress",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:s,percent:U,message:L}),oe("onTaskProgress",{patternId:b,taskId:e,label:s,percent:U,message:L,timestamp:Date.now()});}}),$=n.retry?.attempts??1,I=n.retry?.backoff??"fixed",H=n.retry?.delayMs??1e3,R,M=async j=>{let L=D();return n.run(p,j,L)},Y=null;try{C&&(Y=await C.acquire());for(let L=1;L<=$;L++){let U=new AbortController,_,h=()=>U.abort();if(r?.signal){if(r.signal.aborted)throw new Error(`[Directive MultiAgent] Task "${e}" aborted before starting`);r.signal.addEventListener("abort",h,{once:!0});}n.timeout&&(_=setTimeout(()=>U.abort(),n.timeout));try{let E=await M(U.signal);_&&clearTimeout(_);let W=typeof E=="string"?E:_t(E),Z=Date.now()-c;l.status="completed",l.lastOutput=W,l.durationMs=Z,N&&N.record({type:"task_complete",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:s,durationMs:Z,output:W}),oe("onTaskComplete",{patternId:r?.patternId??"",taskId:e,label:s,durationMs:Z,timestamp:Date.now()});try{let q=O.read("__coord");setBridgeFact(q,"__lastTaskCompletion",{taskId:e,timestamp:Date.now()});}catch{}return {output:W,messages:[],toolCalls:[],totalTokens:0}}catch(E){if(_&&clearTimeout(_),R=E instanceof Error?E:new Error(String(E)),L<$){N&&N.record({type:"task_error",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:s,error:R.message,durationMs:Date.now()-c,attempt:L});let W=3e4,Z=I==="exponential"?H*2**(L-1):H,q=Math.min(Z,W);await new Promise((y,T)=>{let P=!1,te=()=>{P||(P=!0,clearTimeout(B),T(new Error(`[Directive MultiAgent] Task "${e}" aborted during retry backoff`)));},B=setTimeout(()=>{P=!0,r?.signal?.removeEventListener("abort",te),y();},q);r?.signal&&r.signal.addEventListener("abort",te,{once:!0});});}}finally{r?.signal?.removeEventListener("abort",h);}}let j=Date.now()-c;throw l.status="error",l.lastError=R?.message,l.durationMs=j,N&&N.record({type:"task_error",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:s,error:R?.message??"Unknown error",durationMs:j}),oe("onTaskError",{patternId:b,taskId:e,label:s,error:R,durationMs:j,timestamp:Date.now()}),R}finally{Y?.();}}async function Ne(e,n,o){if(se(),o?.signal?.aborted)throw new Error(`[Directive MultiAgent] Handler "${e}" run aborted before starting`);if(Ke==="paused")throw new Error("[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)");Xe++;try{let r=le[e];if(r)return await ir(e,r,n,o);let s=m[e];if(!s){let l=[...Object.keys(m),...Object.keys(le)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${l}`)}let c=s.circuitBreaker??Me;return c?await c.execute(()=>$n(e,s,n,o)):await $n(e,s,n,o)}catch(r){if(Ae&&!le[e]&&!o?.__isReroute){let c=gr(e),l=fr(c);if(l){let p={originalAgent:e,reroutedTo:l,reason:r instanceof Error?r.message:String(r),timestamp:Date.now()};try{Ae.onReroute?.(p);}catch{}return oe("onReroute",p),N&&N.record({type:"reroute",timestamp:Date.now(),agentId:e,snapshotId:null,from:e,to:l,reason:r instanceof Error?r.message:String(r)}),Ne(l,n,{...o,__isReroute:true})}if(Ae.degradation==="fallback-response"&&Ae.fallbackResponse!==void 0)return {output:Ae.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}let s=ue[e];throw s&&s.status!=="error"&&(s.status="error",s.lastError=r instanceof Error?r.message:String(r)),r}finally{Xe--,ct();}}async function $n(e,n,o,r){let s=Date.now(),c=_e(e),l=ue[e],p=n.agent,b=o,C=ot.get(e);if(!C){let R=Object.keys(m).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${e}". Registered agents: ${R}`)}let D=await C.acquire(r?.signal),$=new AbortController,I,H;try{n.timeout&&(I=setTimeout(()=>$.abort(),n.timeout)),r?.signal&&(H=()=>$.abort(),r.signal.addEventListener("abort",H,{once:!0}));let R=n.memory??A;if(R){let y=R.getContextMessages();if(y.length>0){let T=y.map(P=>`${P.role}: ${P.content}`).join(`
28
+ See: https://directive.run/docs/ai/multi-agent`));},z);})}async function ir(e,n,o,r){let a=n.label??e,c=Date.now(),l=ze[e]??(ze[e]={status:"idle"});l.status="running",l.startTime=c,l.lastError=void 0;let p=o;if(Tt.length>0)try{let j=await Nt("pre_agent_run",e,a,o,r?.signal);if(j.skip)return l.status="completed",{output:void 0,messages:[],toolCalls:[],totalTokens:0};p=j.input;}catch{}N&&N.record({type:"task_start",timestamp:c,agentId:e,snapshotId:null,taskId:e,label:a,description:n.description,inputLength:p.length,input:p.slice(0,It)});let b=r?.patternId??"";oe("onTaskStart",{patternId:b,taskId:e,label:a,timestamp:c});let C=be.get(e),D=()=>({taskId:e,memory:A?structuredClone(A.getContextMessages?.()??[]):[],scratchpad:Object.freeze(Ct?structuredClone(Ct.getAll()):{}),readAgentState:j=>{let L=ue[j];if(L)return Object.freeze({status:L.status,lastOutput:L.lastOutput!=null?String(L.lastOutput):void 0,lastError:L.lastError,totalTokens:L.totalTokens});let U=ze[j];if(U)return Object.freeze({status:U.status,lastOutput:U.lastOutput!=null?String(U.lastOutput):void 0,lastError:U.lastError,totalTokens:0})},reportProgress:(j,L)=>{let U=Number.isFinite(j)?Math.max(0,Math.min(100,j)):0;N&&N.record({type:"task_progress",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,percent:U,message:L}),oe("onTaskProgress",{patternId:b,taskId:e,label:a,percent:U,message:L,timestamp:Date.now()});}}),$=n.retry?.attempts??1,I=n.retry?.backoff??"fixed",H=n.retry?.delayMs??1e3,R,M=async j=>{let L=D();return n.run(p,j,L)},Y=null;try{C&&(Y=await C.acquire());for(let L=1;L<=$;L++){let U=new AbortController,_,h=()=>U.abort();if(r?.signal){if(r.signal.aborted)throw new Error(`[Directive MultiAgent] Task "${e}" aborted before starting`);r.signal.addEventListener("abort",h,{once:!0});}n.timeout&&(_=setTimeout(()=>U.abort(),n.timeout));try{let E=await M(U.signal);_&&clearTimeout(_);let W=typeof E=="string"?E:_t(E),Z=Date.now()-c;l.status="completed",l.lastOutput=W,l.durationMs=Z,N&&N.record({type:"task_complete",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,durationMs:Z,output:W}),oe("onTaskComplete",{patternId:r?.patternId??"",taskId:e,label:a,durationMs:Z,timestamp:Date.now()});try{let G=O.read("__coord");setBridgeFact(G,"__lastTaskCompletion",{taskId:e,timestamp:Date.now()});}catch{}return {output:W,messages:[],toolCalls:[],totalTokens:0}}catch(E){if(_&&clearTimeout(_),R=E instanceof Error?E:new Error(String(E)),L<$){N&&N.record({type:"task_error",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,error:R.message,durationMs:Date.now()-c,attempt:L});let W=3e4,Z=I==="exponential"?H*2**(L-1):H,G=Math.min(Z,W);await new Promise((v,T)=>{let P=!1,te=()=>{P||(P=!0,clearTimeout(B),T(new Error(`[Directive MultiAgent] Task "${e}" aborted during retry backoff`)));},B=setTimeout(()=>{P=!0,r?.signal?.removeEventListener("abort",te),v();},G);r?.signal&&r.signal.addEventListener("abort",te,{once:!0});});}}finally{r?.signal?.removeEventListener("abort",h);}}let j=Date.now()-c;throw l.status="error",l.lastError=R?.message,l.durationMs=j,N&&N.record({type:"task_error",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,error:R?.message??"Unknown error",durationMs:j}),oe("onTaskError",{patternId:b,taskId:e,label:a,error:R,durationMs:j,timestamp:Date.now()}),R}finally{Y?.();}}async function Ne(e,n,o){if(ae(),o?.signal?.aborted)throw new Error(`[Directive MultiAgent] Handler "${e}" run aborted before starting`);if(Ke==="paused")throw new Error("[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)");Xe++;try{let r=le[e];if(r)return await ir(e,r,n,o);let a=m[e];if(!a){let l=[...Object.keys(m),...Object.keys(le)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${l}`)}let c=a.circuitBreaker??Me;return c?await c.execute(()=>$n(e,a,n,o)):await $n(e,a,n,o)}catch(r){if(Ae&&!le[e]&&!o?.__isReroute){let c=gr(e),l=fr(c);if(l){let p={originalAgent:e,reroutedTo:l,reason:r instanceof Error?r.message:String(r),timestamp:Date.now()};try{Ae.onReroute?.(p);}catch{}return oe("onReroute",p),N&&N.record({type:"reroute",timestamp:Date.now(),agentId:e,snapshotId:null,from:e,to:l,reason:r instanceof Error?r.message:String(r)}),Ne(l,n,{...o,__isReroute:true})}if(Ae.degradation==="fallback-response"&&Ae.fallbackResponse!==void 0)return {output:Ae.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}let a=ue[e];throw a&&a.status!=="error"&&(a.status="error",a.lastError=r instanceof Error?r.message:String(r)),r}finally{Xe--,ct();}}async function $n(e,n,o,r){let a=Date.now(),c=_e(e),l=ue[e],p=n.agent,b=o,C=ot.get(e);if(!C){let R=Object.keys(m).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${e}". Registered agents: ${R}`)}let D=await C.acquire(r?.signal),$=new AbortController,I,H;try{n.timeout&&(I=setTimeout(()=>$.abort(),n.timeout)),r?.signal&&(H=()=>$.abort(),r.signal.addEventListener("abort",H,{once:!0}));let R=n.memory??A;if(R){let v=R.getContextMessages();if(v.length>0){let T=v.map(P=>`${P.role}: ${P.content}`).join(`
29
29
  `);p={...p,instructions:(p.instructions??"")+`
30
30
 
31
31
  Conversation context:
32
- `+T};}}{let y=await Nt("pre_input_guardrails",e,p.name,b,r?.signal);if(y.skip)return l.status="completed",ct(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};b=y.input;}let Y=[...w.input??[],...n.guardrails?.input??[]].map((y,T)=>gt(y,T,"input"));for(let y of Y){let{name:T}=y,P={agentName:p.name,input:b,facts:nt(c)},te=Date.now(),B=await ft(y,{input:b,agentName:p.name},P);if(oe("onGuardrailCheck",{agentId:e,guardrailName:T,guardrailType:"input",passed:B.passed,reason:B.reason,durationMs:Date.now()-te,timestamp:Date.now()}),!B.passed)throw new et({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${T}" failed: ${B.reason}`,guardrailName:T,guardrailType:"input",userMessage:B.reason??"Input validation failed",agentName:p.name,input:b});B.transformed!==void 0&&(b=B.transformed);}oe("onAgentStart",{agentId:e,agentName:p.name,input:b,timestamp:s}),N&&N.record({type:"agent_start",timestamp:Date.now(),agentId:e,snapshotId:null,inputLength:b.length,..."description"in p&&p.description?{description:String(p.description)}:{},...p.instructions?{instructions:p.instructions.slice(0,It)}:{},input:b.slice(0,It)}),O.batch(()=>{let y=Je(c);We(c,{...y,status:"running",input:b,startedAt:Date.now()});}),l.status="running",l.lastInput=b;{let y=await Nt("pre_agent_run",e,p.name,b,r?.signal);if(y.skip)return l.status="completed",ct(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};b=y.input;}let j=t$1,L=r?.outputSchema!==void 0?r.outputSchema:n.outputSchema;L&&(j=Tn(t$1,{schema:L,maxRetries:r?.maxSchemaRetries??n.maxSchemaRetries??2,extractJson:n.extractJson,schemaDescription:n.schemaDescription}));let U=n.retry??Q,_=await nn(j,p,b,{...n.runOptions,...r,signal:$.signal,onMessage:y=>{let P=[...Wt(c),y];mt(c,P.length>ne?P.slice(-ne):P),r?.onMessage?.(y);},onToolCall:async y=>{let P=[...w.toolCall??[],...n.guardrails?.toolCall??[]].map((Pe,ye)=>gt(Pe,ye,"toolCall"));for(let Pe of P){let{name:ye}=Pe,Re={agentName:p.name,input:b,facts:nt(c)},$t=Date.now(),$e=await ft(Pe,{toolCall:y,agentName:p.name,input:b},Re);if(oe("onGuardrailCheck",{agentId:e,guardrailName:ye,guardrailType:"toolCall",passed:$e.passed,reason:$e.reason,durationMs:Date.now()-$t,timestamp:Date.now()}),!$e.passed)throw new et({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${ye}" failed: ${$e.reason}`,guardrailName:ye,guardrailType:"toolCall",userMessage:$e.reason??"Tool call blocked",data:{toolCall:y},agentName:p.name,input:b})}if(!G){let Pe=`tool-${e}-${y.id}`,ye={id:Pe,type:"tool_call",agentName:p.name,description:`Tool call: ${y.name}`,data:y,requestedAt:Date.now()};we.set(Pe,e),O.batch(()=>{let Re=ut(c);rt(c,{...Re,pending:[...Re.pending,ye]});}),Fe?.(ye),await ar(e,Pe,r?.signal);}let B=[...Kt(c),y];ht(c,B.length>me?B.slice(-me):B),r?.onToolCall?.(y);}},U?{...U,onRetry:(y,T,P)=>{U.onRetry?.(y,T,P),oe("onAgentRetry",{agentId:e,agentName:p.name,input:b,attempt:y,error:T,delayMs:P,timestamp:Date.now()});}}:void 0);if((await Nt("pre_output_guardrails",e,p.name,b,r?.signal)).skip)return l.status="completed",ct(),_;let E=[...w.output??[],...n.guardrails?.output??[]].map((y,T)=>gt(y,T,"output"));for(let y of E){let{name:T}=y,P={agentName:p.name,input:b,facts:nt(c)},te=Date.now(),B=await ft(y,{output:_.output,agentName:p.name,input:b,messages:_.messages},P);if(oe("onGuardrailCheck",{agentId:e,guardrailName:T,guardrailType:"output",passed:B.passed,reason:B.reason,durationMs:Date.now()-te,timestamp:Date.now()}),!B.passed)throw new et({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${T}" failed: ${B.reason}`,guardrailName:T,guardrailType:"output",userMessage:B.reason??"Output validation failed",agentName:p.name,input:b});B.transformed!==void 0&&(_.output=B.transformed);}O.batch(()=>{let y=Je(c);We(c,{...y,status:"completed",output:_.output,tokenUsage:y.tokenUsage+_.totalTokens,turnCount:y.turnCount+_.messages.length,completedAt:Date.now()});}),l.status="completed",l.lastOutput=_.output,l.runCount++,l.totalTokens+=_.totalTokens,ct();let W=_e("__coord"),Z=!1,q=0;if(O.batch(()=>{let T=getBridgeFact(W,"__globalTokens")+_.totalTokens;if(De=T,setBridgeFact(W,"__globalTokens",T),F&&Et){q=T/F;let P=getBridgeFact(W,"__budgetWarningFired");q>=bt&&!P&&(setBridgeFact(W,"__budgetWarningFired",!0),Z=!0);}}),Z)try{Et({currentTokens:De,maxBudget:F,percentage:q});}catch(y){fe&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",y);}if(R&&_.messages.length>0)try{let P=R.getContextMessages().some(te=>te.role==="user"&&te.content===b)?_.messages.filter(te=>!(te.role==="user"&&te.content===b)):_.messages;R.addMessages(P);}catch(y){fe&&console.debug("[Directive MultiAgent] Memory addMessages failed:",y);}if(oe("onAgentComplete",{agentId:e,agentName:p.name,input:b,output:_.output,tokenUsage:_.totalTokens,durationMs:Date.now()-s,timestamp:Date.now()}),N){let y=typeof _.output=="string"?_.output:_t(_.output);N.record({type:"agent_complete",timestamp:Date.now(),agentId:e,snapshotId:null,outputLength:y.length,totalTokens:_.totalTokens,inputTokens:_.tokenUsage?.inputTokens??0,outputTokens:_.tokenUsage?.outputTokens??0,durationMs:Date.now()-s,modelId:n.agent.model??void 0,output:y.slice(0,It)});}return je&&je.recordSuccess(e,Date.now()-s),ce(),await Nt("post_run",e,p.name,b,r?.signal),_}catch(R){if(l.status="error",l.lastError=R instanceof Error?R.message:String(R),ct(),O.batch(()=>{let M=Je(c);We(c,{...M,status:"error",error:R instanceof Error?R.message:String(R),completedAt:Date.now()});}),oe("onAgentError",{agentId:e,agentName:p.name,input:b,error:R instanceof Error?R:new Error(String(R)),durationMs:Date.now()-s,timestamp:Date.now()}),N){let M={type:"agent_error",timestamp:Date.now(),agentId:e,snapshotId:null,errorMessage:R instanceof Error?R.message:String(R),durationMs:Date.now()-s};Hn(R)&&(M.guardrailName=R.guardrailName,M.guardrailType=R.guardrailType,M.errorCode=R.code),N.record(M);}throw je&&je.recordFailure(e,Date.now()-s,R instanceof Error?R:new Error(String(R))),ce(),R}finally{I&&clearTimeout(I),H&&r?.signal&&r.signal.removeEventListener("abort",H),D();}}function An(e,n,o={}){if(se(),le[e]){let _=[],h=[],E=false,W=P=>{if(E)return;let te=h.shift();te?te(P):_.push(P);},Z=()=>{E=true;for(let P of h)P(null);h.length=0;},q=new AbortController,y;o.signal&&(o.signal.aborted?q.abort():(y=()=>q.abort(),o.signal.addEventListener("abort",y,{once:true})));let T=Ne(e,n,{signal:q.signal}).then(P=>{let te=typeof P.output=="string"?P.output:_t(P.output);return W({type:"token",data:te,tokenCount:0}),W({type:"done",totalTokens:0,duration:0,droppedTokens:0}),Z(),P},P=>{throw W({type:"error",error:P}),Z(),P}).finally(()=>{y&&o.signal&&o.signal.removeEventListener("abort",y);});return T.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let P=_.shift();if(P){if(yield P,P.type==="done"||P.type==="error")return}else {if(E)return;{let te=await new Promise(B=>h.push(B));if(!te||(yield te,te.type==="done"||te.type==="error"))return}}}}},result:T,abort:()=>{q.abort();}}}if(!m[e]){let _=[...Object.keys(m),...Object.keys(le)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${_}`)}let c=1e4,l=1e5,p=new AbortController,b=[],C=[],D=false,$=Date.now(),I=0,H="",R;o.signal&&(R=()=>p.abort(),o.signal.addEventListener("abort",R,{once:true}));let M=()=>{R&&o.signal&&o.signal.removeEventListener("abort",R);},Y=_=>{if(D)return;let h=C.shift();h?h(_):(b.length>=c&&b.shift(),b.push(_));},j=()=>{D=true,M();for(let _ of C)_(null);C.length=0;},L=(async()=>{Y({type:"progress",phase:"starting",message:"Running input guardrails"});try{let _=await Ne(e,n,{signal:p.signal,onMessage:E=>{if(Y({type:"message",message:E}),E.role==="assistant"&&E.content){let W=Math.ceil(E.content.length/4);I+=W,H+=E.content,H.length>l&&(H=H.slice(-l)),Y({type:"token",data:E.content,tokenCount:I});}},onToolCall:async E=>{Y({type:"tool_start",tool:E.name,toolCallId:E.id,arguments:E.arguments}),E.result&&Y({type:"tool_end",tool:E.name,toolCallId:E.id,result:E.result});}}),h=Date.now()-$;return Y({type:"done",totalTokens:_.totalTokens,duration:h,droppedTokens:0}),j(),_}catch(_){throw _ instanceof et&&Y({type:"guardrail_triggered",guardrailName:_.guardrailName,reason:_.message,partialOutput:H,stopped:true}),Y({type:"error",error:_ instanceof Error?_:new Error(String(_))}),j(),_}})(),U={[Symbol.asyncIterator](){return {async next(){return b.length>0?{done:false,value:b.shift()}:D?{done:true,value:void 0}:new Promise(_=>{C.push(h=>{_(h===null?{done:true,value:void 0}:{done:false,value:h});});})}}}};return L.catch(()=>{}),{stream:U,result:L,abort:()=>{p.abort(),j();}}}async function ur(e,n,o){let r=Date.now();o&&oe("onPatternStart",{patternId:o,patternType:"parallel",input:n,timestamp:r});let s=new AbortController,c;e.timeout&&(c=setTimeout(()=>s.abort(),e.timeout));let l;try{let p=e.handlers.map(D=>Ne(D,n,{signal:s.signal,patternId:o}).catch($=>{if(e.minSuccess===void 0)throw $;return null})),b=await Promise.all(p),C=b.filter(D=>D!==null);if(e.minSuccess!==void 0&&C.length<e.minSuccess){let D=b.length-C.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${C.length}/${e.handlers.length} agents succeeded (minimum required: ${e.minSuccess}, failed: ${D})`)}return e.merge(C)}catch(p){throw l=p instanceof Error?p:new Error(String(p)),p}finally{c&&clearTimeout(c),o&&oe("onPatternComplete",{patternId:o,patternType:"parallel",durationMs:Date.now()-r,timestamp:Date.now(),error:l});}}async function Ft(e,n,o){let r=Qn(e);if(o?.when)try{if(!o.when({step:r,patternType:e.type,facts:e.type==="goal"?e.facts:void 0,satisfaction:e.type==="goal"?e.lastSatisfaction:void 0}))return null}catch{return null}try{let s={version:1,id:e.id,createdAt:e.createdAt,label:e.label,systemExport:JSON.stringify(e),timelineExport:null,localState:{type:"multi",globalTokenCount:0,globalStatus:"idle",agentStates:{},handoffCounter:0,pendingHandoffs:[],handoffResults:[],roundRobinCounters:null},memoryExport:null,orchestratorType:"multi",metadata:{patternType:e.type}};return await n.save(s),N&&N.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:e.id,patternType:e.type,step:r}),oe("onCheckpointSave",{checkpointId:e.id,patternType:e.type,step:r,timestamp:Date.now()}),e.id}catch(s){let c=s instanceof Error?s:new Error(String(s));return console.error(`[Directive MultiAgent] ${e.type}: checkpoint save failed:`,c),oe("onCheckpointError",{patternType:e.type,step:r,error:c,timestamp:Date.now()}),null}}async function xn(e,n,o,r){let s=Date.now(),c=o??"__inline_sequential";o&&oe("onPatternStart",{patternId:o,patternType:"sequential",input:n,timestamp:s});let l=e.checkpoint,p=l?.store??pe,b=l?.everyN??5,C=l?.labelPrefix??"sequential",D=r?.currentInput??n,$,I=r?.results?[...r.results]:[],H=r?.step??0,R;if(r&&I.length>0){let M=I[I.length-1];$={output:M.output,totalTokens:M.totalTokens,messages:[],toolCalls:[]};}try{for(let M=H;M<e.handlers.length;M++){let Y=e.handlers[M];{let j=await Nt("pre_pattern_step",Y,m[Y]?.agent.name??Y,D,void 0,{patternId:o});if(j.skip)continue;D=j.input;}try{if($=await Ne(Y,D,{patternId:o}),I.push({agentId:Y,output:$.output,totalTokens:$.totalTokens}),M<e.handlers.length-1&&(e.transform?D=e.transform($.output,Y,M):D=typeof $.output=="string"?$.output:_t($.output)),l&&p&&M>H&&(M-H)%b===0){let j=M<e.handlers.length-1?D:n;await Ft({type:"sequential",version:1,id:vt(),createdAt:new Date().toISOString(),label:`${C}:step-${M+1}`,patternId:c,stepsTotal:e.handlers.length,step:M+1,currentInput:j,results:[...I]},p,l);}}catch(j){if(!e.continueOnError)throw j}}if(!$)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return e.extract?e.extract($.output):$.output}catch(M){throw R=M instanceof Error?M:new Error(String(M)),M}finally{o&&oe("onPatternComplete",{patternId:o,patternType:"sequential",durationMs:Date.now()-s,timestamp:Date.now(),error:R});}}async function Cn(e,n,o,r){let s=Date.now(),c=o??"__inline_supervisor";o&&oe("onPatternStart",{patternId:o,patternType:"supervisor",input:n,timestamp:s});let l=e.checkpoint,p=l?.store??pe,b=l?.everyN??5,C=l?.labelPrefix??"supervisor",D=[],$=r?.workerResults?[...r.workerResults]:[],I=e.maxRounds??5;if(I<1||!Number.isFinite(I))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let H;if(r)for(let M of r.workerResults)D.push({output:M.output,totalTokens:M.totalTokens,messages:[],toolCalls:[]});let R=r?.round??0;try{let M;r?M={output:r.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:M=await Ne(e.supervisor,n);let Y=r?.currentInput??n;for(let j=R;j<I;j++){let L=M.output,U;if(typeof L=="string")try{let h=L.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();U=JSON.parse(h);}catch{try{let h=L.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),E=_n(h);if(E&&typeof E=="object"&&"action"in E)U=E;else throw new Error("extracted value missing 'action' property")}catch{throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned unparseable output (round ${j+1}). Expected JSON with { action, worker?, workerInput? } but got: ${L.slice(0,200)}`)}}else if(L&&typeof L=="object"&&"action"in L)U=L;else throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned invalid output (round ${j+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(U.action==="complete"||!U.worker)break;if(!e.workers.includes(U.worker)){let h=e.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${U.worker}". Available workers: ${h}`)}let _=await Ne(U.worker,U.workerInput??"",{patternId:o});D.push(_),$.push({output:_.output,totalTokens:_.totalTokens}),Y=`Worker ${U.worker} completed with result: ${_t(_.output)}`,M=await Ne(e.supervisor,Y,{patternId:o}),l&&p&&j>R&&(j-R)%b===0&&await Ft({type:"supervisor",version:1,id:vt(),createdAt:new Date().toISOString(),label:`${C}:round-${j+1}`,patternId:c,stepsTotal:e.maxRounds??10,round:j+1,supervisorOutput:M.output,workerResults:[...$],currentInput:Y},p,l);}return e.extract?e.extract(M.output,D):M.output}catch(M){throw H=M instanceof Error?M:new Error(String(M)),M}finally{o&&oe("onPatternComplete",{patternId:o,patternType:"supervisor",durationMs:Date.now()-s,timestamp:Date.now(),error:H});}}async function Dn(e,n,o,r){let s=Date.now(),c=o??"__inline_dag";o&&oe("onPatternStart",{patternId:o,patternType:"dag",input:n,timestamp:s});let l=e.checkpoint,p=l?.store??pe,b=l?.everyN??5,C=l?.labelPrefix??"dag",D=r?.completedCount??0,$=0,I=Promise.resolve(),H=Object.keys(e.nodes).length,R={input:r?.input??n,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};for(let h of Object.keys(e.nodes))R.statuses[h]="pending";if(r){for(let[h,E]of Object.entries(r.statuses))R.statuses[h]=E;for(let[h,E]of Object.entries(r.outputs))R.outputs[h]=E;for(let[h,E]of Object.entries(r.errors))R.errors[h]=E;for(let[h,E]of Object.entries(r.nodeResults))R.results[h]={output:E.output,totalTokens:E.totalTokens,messages:[],toolCalls:[]};}let M=e.onNodeError??"fail",Y=e.maxConcurrent??Number.POSITIVE_INFINITY,j=new AbortController,L,U;e.timeout&&(L=setTimeout(()=>j.abort(),e.timeout));try{let W=function(){for(let[q,y]of Object.entries(e.nodes)){if(R.statuses[q]!=="pending")continue;let T=M==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((y.deps??[]).every(te=>T.has(R.statuses[te]))){if(M==="skip-downstream"&&(y.deps??[]).some(B=>R.statuses[B]==="error"||R.statuses[B]==="skipped")){R.statuses[q]="skipped",N&&N.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:q,status:"skipped",deps:y.deps??[]}),oe("onDagNodeSkipped",{patternId:c,nodeId:q,agentId:y.handler,nodeType:le[y.handler]?"task":"agent",reason:"upstream dependency errored",timestamp:Date.now()});continue}if(y.when)try{if(!y.when(R)){R.statuses[q]="skipped",N&&N.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:q,status:"skipped",deps:y.deps??[]}),oe("onDagNodeSkipped",{patternId:c,nodeId:q,agentId:y.handler,nodeType:le[y.handler]?"task":"agent",reason:"when() returned false",timestamp:Date.now()});continue}}catch{R.statuses[q]="skipped";continue}R.statuses[q]="ready";}}};var _=W;if(!r)for(let[q,y]of Object.entries(e.nodes))(!y.deps||y.deps.length===0)&&(R.statuses[q]="ready");let h=new Set,E=0;async function Z(q,y){let T=Date.now();R.statuses[q]="running",N&&N.record({type:"dag_node_update",timestamp:T,snapshotId:null,nodeId:q,status:"running",deps:y.deps??[]}),oe("onDagNodeStart",{patternId:c,nodeId:q,agentId:y.handler,nodeType:le[y.handler]?"task":"agent",timestamp:T});let P;if(y.transform)P=y.transform(R);else if(y.deps&&y.deps.length>0){let ye=Object.create(null);for(let Re of y.deps)R.outputs[Re]!==void 0&&(ye[Re]=R.outputs[Re]);P=JSON.stringify(ye);}else P=n;let te=new AbortController,B;y.timeout&&(B=setTimeout(()=>te.abort(),y.timeout));let Pe=()=>te.abort();j.signal.addEventListener("abort",Pe,{once:!0});try{let ye=await Ne(y.handler,P,{signal:te.signal,patternId:c});if(R.outputs[q]=ye.output,R.results[q]=ye,R.statuses[q]="completed",N&&N.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:q,status:"completed",deps:y.deps??[]}),oe("onDagNodeComplete",{patternId:c,nodeId:q,agentId:y.handler,nodeType:le[y.handler]?"task":"agent",durationMs:Date.now()-T,timestamp:Date.now()}),D++,l&&p&&D>$&&D-$>=b){$=D;let Re=Object.create(null);for(let[$e,pt]of Object.entries(R.results))Re[$e]={output:pt.output,totalTokens:pt.totalTokens};let $t={type:"dag",version:1,id:vt(),createdAt:new Date().toISOString(),label:`${C}:node-${D}`,patternId:c,stepsTotal:H,statuses:{...R.statuses},outputs:{...R.outputs},errors:{...R.errors},completedCount:D,nodeResults:Re,input:R.input};I=I.then(()=>Ft($t,p,l)),await I;}}catch(ye){if(R.statuses[q]="error",R.errors[q]=ye instanceof Error?ye.message:String(ye),N&&N.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:q,status:"error",deps:y.deps??[]}),oe("onDagNodeError",{patternId:c,nodeId:q,agentId:y.handler,nodeType:le[y.handler]?"task":"agent",error:ye instanceof Error?ye:new Error(String(ye)),durationMs:Date.now()-T,timestamp:Date.now()}),M==="fail")throw j.abort(),ye}finally{B&&clearTimeout(B),j.signal.removeEventListener("abort",Pe),E--;}}for(;!j.signal.aborted;){W();let q=Object.entries(e.nodes).filter(([T])=>R.statuses[T]==="ready").sort(([,T],[,P])=>(P.priority??0)-(T.priority??0));for(let[T,P]of q){if(E>=Y)break;E++;let te=Z(T,P).finally(()=>{h.delete(te);});h.add(te);}if(!Object.values(R.statuses).some(T=>T==="pending"||T==="running"||T==="ready"))break;if(h.size>0)await Promise.race(h);else break}return h.size>0&&await Promise.allSettled(h),await e.merge(R)}catch(h){throw U=h instanceof Error?h:new Error(String(h)),h}finally{L&&clearTimeout(L),o&&oe("onPatternComplete",{patternId:o,patternType:"dag",durationMs:Date.now()-s,timestamp:Date.now(),error:U});}}async function dn(e,n,o,r){let s=Date.now(),c=o??"__inline_reflect",l=e.maxIterations??2;if(l<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");fe&&l>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let p=e.signal,b,C;if(e.timeout&&!p){let h=new AbortController;b=setTimeout(()=>h.abort(),e.timeout),p=h.signal;}else if(e.timeout&&p){let h=new AbortController;b=setTimeout(()=>h.abort(),e.timeout),C=()=>h.abort(),p.addEventListener("abort",C,{once:true}),p=h.signal;}let D=e.parseEvaluation??(h=>{if(typeof h=="string")try{return JSON.parse(h)}catch{return {passed:false,feedback:`Evaluator returned unparseable output: ${h.slice(0,200)}`}}return h&&typeof h=="object"&&"passed"in h?h:{passed:false,feedback:"Evaluator returned invalid format"}}),$=e.buildRetryInput??((h,E,W)=>`${h}
32
+ `+T};}}{let v=await Nt("pre_input_guardrails",e,p.name,b,r?.signal);if(v.skip)return l.status="completed",ct(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};b=v.input;}let Y=[...w.input??[],...n.guardrails?.input??[]].map((v,T)=>gt(v,T,"input"));for(let v of Y){let{name:T}=v,P={agentName:p.name,input:b,facts:nt(c)},te=Date.now(),B=await ft(v,{input:b,agentName:p.name},P);if(oe("onGuardrailCheck",{agentId:e,guardrailName:T,guardrailType:"input",passed:B.passed,reason:B.reason,durationMs:Date.now()-te,timestamp:Date.now()}),!B.passed)throw new et({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${T}" failed: ${B.reason}`,guardrailName:T,guardrailType:"input",userMessage:B.reason??"Input validation failed",agentName:p.name,input:b});B.transformed!==void 0&&(b=B.transformed);}oe("onAgentStart",{agentId:e,agentName:p.name,input:b,timestamp:a}),N&&N.record({type:"agent_start",timestamp:Date.now(),agentId:e,snapshotId:null,inputLength:b.length,..."description"in p&&p.description?{description:String(p.description)}:{},...p.instructions?{instructions:p.instructions.slice(0,It)}:{},input:b.slice(0,It)}),O.batch(()=>{let v=Je(c);We(c,{...v,status:"running",input:b,startedAt:Date.now()});}),l.status="running",l.lastInput=b;{let v=await Nt("pre_agent_run",e,p.name,b,r?.signal);if(v.skip)return l.status="completed",ct(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};b=v.input;}let j=t$1,L=r?.outputSchema!==void 0?r.outputSchema:n.outputSchema;L&&(j=Tn(t$1,{schema:L,maxRetries:r?.maxSchemaRetries??n.maxSchemaRetries??2,extractJson:n.extractJson,schemaDescription:n.schemaDescription}));let U=n.retry??Q,_=await nn(j,p,b,{...n.runOptions,...r,signal:$.signal,onMessage:v=>{let P=[...Wt(c),v];mt(c,P.length>ne?P.slice(-ne):P),r?.onMessage?.(v);},onToolCall:async v=>{let P=[...w.toolCall??[],...n.guardrails?.toolCall??[]].map((Pe,ve)=>gt(Pe,ve,"toolCall"));for(let Pe of P){let{name:ve}=Pe,Re={agentName:p.name,input:b,facts:nt(c)},$t=Date.now(),$e=await ft(Pe,{toolCall:v,agentName:p.name,input:b},Re);if(oe("onGuardrailCheck",{agentId:e,guardrailName:ve,guardrailType:"toolCall",passed:$e.passed,reason:$e.reason,durationMs:Date.now()-$t,timestamp:Date.now()}),!$e.passed)throw new et({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${ve}" failed: ${$e.reason}`,guardrailName:ve,guardrailType:"toolCall",userMessage:$e.reason??"Tool call blocked",data:{toolCall:v},agentName:p.name,input:b})}if(!q){let Pe=`tool-${e}-${v.id}`,ve={id:Pe,type:"tool_call",agentName:p.name,description:`Tool call: ${v.name}`,data:v,requestedAt:Date.now()};we.set(Pe,e),O.batch(()=>{let Re=ut(c);rt(c,{...Re,pending:[...Re.pending,ve]});}),Fe?.(ve),await sr(e,Pe,r?.signal);}let B=[...Kt(c),v];ht(c,B.length>me?B.slice(-me):B),r?.onToolCall?.(v);}},U?{...U,onRetry:(v,T,P)=>{U.onRetry?.(v,T,P),oe("onAgentRetry",{agentId:e,agentName:p.name,input:b,attempt:v,error:T,delayMs:P,timestamp:Date.now()});}}:void 0);if((await Nt("pre_output_guardrails",e,p.name,b,r?.signal)).skip)return l.status="completed",ct(),_;let E=[...w.output??[],...n.guardrails?.output??[]].map((v,T)=>gt(v,T,"output"));for(let v of E){let{name:T}=v,P={agentName:p.name,input:b,facts:nt(c)},te=Date.now(),B=await ft(v,{output:_.output,agentName:p.name,input:b,messages:_.messages},P);if(oe("onGuardrailCheck",{agentId:e,guardrailName:T,guardrailType:"output",passed:B.passed,reason:B.reason,durationMs:Date.now()-te,timestamp:Date.now()}),!B.passed)throw new et({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${T}" failed: ${B.reason}`,guardrailName:T,guardrailType:"output",userMessage:B.reason??"Output validation failed",agentName:p.name,input:b});B.transformed!==void 0&&(_.output=B.transformed);}O.batch(()=>{let v=Je(c);We(c,{...v,status:"completed",output:_.output,tokenUsage:v.tokenUsage+_.totalTokens,turnCount:v.turnCount+_.messages.length,completedAt:Date.now()});}),l.status="completed",l.lastOutput=_.output,l.runCount++,l.totalTokens+=_.totalTokens,ct();let W=_e("__coord"),Z=!1,G=0;if(O.batch(()=>{let T=getBridgeFact(W,"__globalTokens")+_.totalTokens;if(De=T,setBridgeFact(W,"__globalTokens",T),F&&Et){G=T/F;let P=getBridgeFact(W,"__budgetWarningFired");G>=bt&&!P&&(setBridgeFact(W,"__budgetWarningFired",!0),Z=!0);}}),Z)try{Et({currentTokens:De,maxBudget:F,percentage:G});}catch(v){fe&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",v);}if(R&&_.messages.length>0)try{let P=R.getContextMessages().some(te=>te.role==="user"&&te.content===b)?_.messages.filter(te=>!(te.role==="user"&&te.content===b)):_.messages;R.addMessages(P);}catch(v){fe&&console.debug("[Directive MultiAgent] Memory addMessages failed:",v);}if(oe("onAgentComplete",{agentId:e,agentName:p.name,input:b,output:_.output,tokenUsage:_.totalTokens,durationMs:Date.now()-a,timestamp:Date.now()}),N){let v=typeof _.output=="string"?_.output:_t(_.output);N.record({type:"agent_complete",timestamp:Date.now(),agentId:e,snapshotId:null,outputLength:v.length,totalTokens:_.totalTokens,inputTokens:_.tokenUsage?.inputTokens??0,outputTokens:_.tokenUsage?.outputTokens??0,durationMs:Date.now()-a,modelId:n.agent.model??void 0,output:v.slice(0,It)});}return je&&je.recordSuccess(e,Date.now()-a),ce(),await Nt("post_run",e,p.name,b,r?.signal),_}catch(R){if(l.status="error",l.lastError=R instanceof Error?R.message:String(R),ct(),O.batch(()=>{let M=Je(c);We(c,{...M,status:"error",error:R instanceof Error?R.message:String(R),completedAt:Date.now()});}),oe("onAgentError",{agentId:e,agentName:p.name,input:b,error:R instanceof Error?R:new Error(String(R)),durationMs:Date.now()-a,timestamp:Date.now()}),N){let M={type:"agent_error",timestamp:Date.now(),agentId:e,snapshotId:null,errorMessage:R instanceof Error?R.message:String(R),durationMs:Date.now()-a};Hn(R)&&(M.guardrailName=R.guardrailName,M.guardrailType=R.guardrailType,M.errorCode=R.code),N.record(M);}throw je&&je.recordFailure(e,Date.now()-a,R instanceof Error?R:new Error(String(R))),ce(),R}finally{I&&clearTimeout(I),H&&r?.signal&&r.signal.removeEventListener("abort",H),D();}}function An(e,n,o={}){if(ae(),le[e]){let _=[],h=[],E=false,W=P=>{if(E)return;let te=h.shift();te?te(P):_.push(P);},Z=()=>{E=true;for(let P of h)P(null);h.length=0;},G=new AbortController,v;o.signal&&(o.signal.aborted?G.abort():(v=()=>G.abort(),o.signal.addEventListener("abort",v,{once:true})));let T=Ne(e,n,{signal:G.signal}).then(P=>{let te=typeof P.output=="string"?P.output:_t(P.output);return W({type:"token",data:te,tokenCount:0}),W({type:"done",totalTokens:0,duration:0,droppedTokens:0}),Z(),P},P=>{throw W({type:"error",error:P}),Z(),P}).finally(()=>{v&&o.signal&&o.signal.removeEventListener("abort",v);});return T.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let P=_.shift();if(P){if(yield P,P.type==="done"||P.type==="error")return}else {if(E)return;{let te=await new Promise(B=>h.push(B));if(!te||(yield te,te.type==="done"||te.type==="error"))return}}}}},result:T,abort:()=>{G.abort();}}}if(!m[e]){let _=[...Object.keys(m),...Object.keys(le)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${_}`)}let c=1e4,l=1e5,p=new AbortController,b=[],C=[],D=false,$=Date.now(),I=0,H="",R;o.signal&&(R=()=>p.abort(),o.signal.addEventListener("abort",R,{once:true}));let M=()=>{R&&o.signal&&o.signal.removeEventListener("abort",R);},Y=_=>{if(D)return;let h=C.shift();h?h(_):(b.length>=c&&b.shift(),b.push(_));},j=()=>{D=true,M();for(let _ of C)_(null);C.length=0;},L=(async()=>{Y({type:"progress",phase:"starting",message:"Running input guardrails"});try{let _=await Ne(e,n,{signal:p.signal,onMessage:E=>{if(Y({type:"message",message:E}),E.role==="assistant"&&E.content){let W=Math.ceil(E.content.length/4);I+=W,H+=E.content,H.length>l&&(H=H.slice(-l)),Y({type:"token",data:E.content,tokenCount:I});}},onToolCall:async E=>{Y({type:"tool_start",tool:E.name,toolCallId:E.id,arguments:E.arguments}),E.result&&Y({type:"tool_end",tool:E.name,toolCallId:E.id,result:E.result});}}),h=Date.now()-$;return Y({type:"done",totalTokens:_.totalTokens,duration:h,droppedTokens:0}),j(),_}catch(_){throw _ instanceof et&&Y({type:"guardrail_triggered",guardrailName:_.guardrailName,reason:_.message,partialOutput:H,stopped:true}),Y({type:"error",error:_ instanceof Error?_:new Error(String(_))}),j(),_}})(),U={[Symbol.asyncIterator](){return {async next(){return b.length>0?{done:false,value:b.shift()}:D?{done:true,value:void 0}:new Promise(_=>{C.push(h=>{_(h===null?{done:true,value:void 0}:{done:false,value:h});});})}}}};return L.catch(()=>{}),{stream:U,result:L,abort:()=>{p.abort(),j();}}}async function ur(e,n,o){let r=Date.now();o&&oe("onPatternStart",{patternId:o,patternType:"parallel",input:n,timestamp:r});let a=new AbortController,c;e.timeout&&(c=setTimeout(()=>a.abort(),e.timeout));let l;try{let p=e.handlers.map(D=>Ne(D,n,{signal:a.signal,patternId:o}).catch($=>{if(e.minSuccess===void 0)throw $;return null})),b=await Promise.all(p),C=b.filter(D=>D!==null);if(e.minSuccess!==void 0&&C.length<e.minSuccess){let D=b.length-C.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${C.length}/${e.handlers.length} agents succeeded (minimum required: ${e.minSuccess}, failed: ${D})`)}return e.merge(C)}catch(p){throw l=p instanceof Error?p:new Error(String(p)),p}finally{c&&clearTimeout(c),o&&oe("onPatternComplete",{patternId:o,patternType:"parallel",durationMs:Date.now()-r,timestamp:Date.now(),error:l});}}async function Ft(e,n,o){let r=er(e);if(o?.when)try{if(!o.when({step:r,patternType:e.type,facts:e.type==="goal"?e.facts:void 0,satisfaction:e.type==="goal"?e.lastSatisfaction:void 0}))return null}catch{return null}try{let a={version:1,id:e.id,createdAt:e.createdAt,label:e.label,systemExport:JSON.stringify(e),timelineExport:null,localState:{type:"multi",globalTokenCount:0,globalStatus:"idle",agentStates:{},handoffCounter:0,pendingHandoffs:[],handoffResults:[],roundRobinCounters:null},memoryExport:null,orchestratorType:"multi",metadata:{patternType:e.type}};return await n.save(a),N&&N.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:e.id,patternType:e.type,step:r}),oe("onCheckpointSave",{checkpointId:e.id,patternType:e.type,step:r,timestamp:Date.now()}),e.id}catch(a){let c=a instanceof Error?a:new Error(String(a));return console.error(`[Directive MultiAgent] ${e.type}: checkpoint save failed:`,c),oe("onCheckpointError",{patternType:e.type,step:r,error:c,timestamp:Date.now()}),null}}async function xn(e,n,o,r){let a=Date.now(),c=o??"__inline_sequential";o&&oe("onPatternStart",{patternId:o,patternType:"sequential",input:n,timestamp:a});let l=e.checkpoint,p=l?.store??pe,b=l?.everyN??5,C=l?.labelPrefix??"sequential",D=r?.currentInput??n,$,I=r?.results?[...r.results]:[],H=r?.step??0,R;if(r&&I.length>0){let M=I[I.length-1];$={output:M.output,totalTokens:M.totalTokens,messages:[],toolCalls:[]};}try{for(let M=H;M<e.handlers.length;M++){let Y=e.handlers[M];{let j=await Nt("pre_pattern_step",Y,m[Y]?.agent.name??Y,D,void 0,{patternId:o});if(j.skip)continue;D=j.input;}try{if($=await Ne(Y,D,{patternId:o}),I.push({agentId:Y,output:$.output,totalTokens:$.totalTokens}),M<e.handlers.length-1&&(e.transform?D=e.transform($.output,Y,M):D=typeof $.output=="string"?$.output:_t($.output)),l&&p&&M>H&&(M-H)%b===0){let j=M<e.handlers.length-1?D:n;await Ft({type:"sequential",version:1,id:yt(),createdAt:new Date().toISOString(),label:`${C}:step-${M+1}`,patternId:c,stepsTotal:e.handlers.length,step:M+1,currentInput:j,results:[...I]},p,l);}}catch(j){if(!e.continueOnError)throw j}}if(!$)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return e.extract?e.extract($.output):$.output}catch(M){throw R=M instanceof Error?M:new Error(String(M)),M}finally{o&&oe("onPatternComplete",{patternId:o,patternType:"sequential",durationMs:Date.now()-a,timestamp:Date.now(),error:R});}}async function Cn(e,n,o,r){let a=Date.now(),c=o??"__inline_supervisor";o&&oe("onPatternStart",{patternId:o,patternType:"supervisor",input:n,timestamp:a});let l=e.checkpoint,p=l?.store??pe,b=l?.everyN??5,C=l?.labelPrefix??"supervisor",D=[],$=r?.workerResults?[...r.workerResults]:[],I=e.maxRounds??5;if(I<1||!Number.isFinite(I))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let H;if(r)for(let M of r.workerResults)D.push({output:M.output,totalTokens:M.totalTokens,messages:[],toolCalls:[]});let R=r?.round??0;try{let M;r?M={output:r.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:M=await Ne(e.supervisor,n);let Y=r?.currentInput??n;for(let j=R;j<I;j++){let L=M.output,U;if(typeof L=="string")try{let h=L.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();U=JSON.parse(h);}catch{try{let h=L.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),E=_n(h);if(E&&typeof E=="object"&&"action"in E)U=E;else throw new Error("extracted value missing 'action' property")}catch{throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned unparseable output (round ${j+1}). Expected JSON with { action, worker?, workerInput? } but got: ${L.slice(0,200)}`)}}else if(L&&typeof L=="object"&&"action"in L)U=L;else throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned invalid output (round ${j+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(U.action==="complete"||!U.worker)break;if(!e.workers.includes(U.worker)){let h=e.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${U.worker}". Available workers: ${h}`)}let _=await Ne(U.worker,U.workerInput??"",{patternId:o});D.push(_),$.push({output:_.output,totalTokens:_.totalTokens}),Y=`Worker ${U.worker} completed with result: ${_t(_.output)}`,M=await Ne(e.supervisor,Y,{patternId:o}),l&&p&&j>R&&(j-R)%b===0&&await Ft({type:"supervisor",version:1,id:yt(),createdAt:new Date().toISOString(),label:`${C}:round-${j+1}`,patternId:c,stepsTotal:e.maxRounds??10,round:j+1,supervisorOutput:M.output,workerResults:[...$],currentInput:Y},p,l);}return e.extract?e.extract(M.output,D):M.output}catch(M){throw H=M instanceof Error?M:new Error(String(M)),M}finally{o&&oe("onPatternComplete",{patternId:o,patternType:"supervisor",durationMs:Date.now()-a,timestamp:Date.now(),error:H});}}async function Dn(e,n,o,r){let a=Date.now(),c=o??"__inline_dag";o&&oe("onPatternStart",{patternId:o,patternType:"dag",input:n,timestamp:a});let l=e.checkpoint,p=l?.store??pe,b=l?.everyN??5,C=l?.labelPrefix??"dag",D=r?.completedCount??0,$=0,I=Promise.resolve(),H=Object.keys(e.nodes).length,R={input:r?.input??n,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};for(let h of Object.keys(e.nodes))R.statuses[h]="pending";if(r){for(let[h,E]of Object.entries(r.statuses))R.statuses[h]=E;for(let[h,E]of Object.entries(r.outputs))R.outputs[h]=E;for(let[h,E]of Object.entries(r.errors))R.errors[h]=E;for(let[h,E]of Object.entries(r.nodeResults))R.results[h]={output:E.output,totalTokens:E.totalTokens,messages:[],toolCalls:[]};}let M=e.onNodeError??"fail",Y=e.maxConcurrent??Number.POSITIVE_INFINITY,j=new AbortController,L,U;e.timeout&&(L=setTimeout(()=>j.abort(),e.timeout));try{let W=function(){for(let[G,v]of Object.entries(e.nodes)){if(R.statuses[G]!=="pending")continue;let T=M==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((v.deps??[]).every(te=>T.has(R.statuses[te]))){if(M==="skip-downstream"&&(v.deps??[]).some(B=>R.statuses[B]==="error"||R.statuses[B]==="skipped")){R.statuses[G]="skipped",N&&N.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:G,status:"skipped",deps:v.deps??[]}),oe("onDagNodeSkipped",{patternId:c,nodeId:G,agentId:v.handler,nodeType:le[v.handler]?"task":"agent",reason:"upstream dependency errored",timestamp:Date.now()});continue}if(v.when)try{if(!v.when(R)){R.statuses[G]="skipped",N&&N.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:G,status:"skipped",deps:v.deps??[]}),oe("onDagNodeSkipped",{patternId:c,nodeId:G,agentId:v.handler,nodeType:le[v.handler]?"task":"agent",reason:"when() returned false",timestamp:Date.now()});continue}}catch{R.statuses[G]="skipped";continue}R.statuses[G]="ready";}}};var _=W;if(!r)for(let[G,v]of Object.entries(e.nodes))(!v.deps||v.deps.length===0)&&(R.statuses[G]="ready");let h=new Set,E=0;async function Z(G,v){let T=Date.now();R.statuses[G]="running",N&&N.record({type:"dag_node_update",timestamp:T,snapshotId:null,nodeId:G,status:"running",deps:v.deps??[]}),oe("onDagNodeStart",{patternId:c,nodeId:G,agentId:v.handler,nodeType:le[v.handler]?"task":"agent",timestamp:T});let P;if(v.transform)P=v.transform(R);else if(v.deps&&v.deps.length>0){let ve=Object.create(null);for(let Re of v.deps)R.outputs[Re]!==void 0&&(ve[Re]=R.outputs[Re]);P=JSON.stringify(ve);}else P=n;let te=new AbortController,B;v.timeout&&(B=setTimeout(()=>te.abort(),v.timeout));let Pe=()=>te.abort();j.signal.addEventListener("abort",Pe,{once:!0});try{let ve=await Ne(v.handler,P,{signal:te.signal,patternId:c});if(R.outputs[G]=ve.output,R.results[G]=ve,R.statuses[G]="completed",N&&N.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:G,status:"completed",deps:v.deps??[]}),oe("onDagNodeComplete",{patternId:c,nodeId:G,agentId:v.handler,nodeType:le[v.handler]?"task":"agent",durationMs:Date.now()-T,timestamp:Date.now()}),D++,l&&p&&D>$&&D-$>=b){$=D;let Re=Object.create(null);for(let[$e,pt]of Object.entries(R.results))Re[$e]={output:pt.output,totalTokens:pt.totalTokens};let $t={type:"dag",version:1,id:yt(),createdAt:new Date().toISOString(),label:`${C}:node-${D}`,patternId:c,stepsTotal:H,statuses:{...R.statuses},outputs:{...R.outputs},errors:{...R.errors},completedCount:D,nodeResults:Re,input:R.input};I=I.then(()=>Ft($t,p,l)),await I;}}catch(ve){if(R.statuses[G]="error",R.errors[G]=ve instanceof Error?ve.message:String(ve),N&&N.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:G,status:"error",deps:v.deps??[]}),oe("onDagNodeError",{patternId:c,nodeId:G,agentId:v.handler,nodeType:le[v.handler]?"task":"agent",error:ve instanceof Error?ve:new Error(String(ve)),durationMs:Date.now()-T,timestamp:Date.now()}),M==="fail")throw j.abort(),ve}finally{B&&clearTimeout(B),j.signal.removeEventListener("abort",Pe),E--;}}for(;!j.signal.aborted;){W();let G=Object.entries(e.nodes).filter(([T])=>R.statuses[T]==="ready").sort(([,T],[,P])=>(P.priority??0)-(T.priority??0));for(let[T,P]of G){if(E>=Y)break;E++;let te=Z(T,P).finally(()=>{h.delete(te);});h.add(te);}if(!Object.values(R.statuses).some(T=>T==="pending"||T==="running"||T==="ready"))break;if(h.size>0)await Promise.race(h);else break}return h.size>0&&await Promise.allSettled(h),await e.merge(R)}catch(h){throw U=h instanceof Error?h:new Error(String(h)),h}finally{L&&clearTimeout(L),o&&oe("onPatternComplete",{patternId:o,patternType:"dag",durationMs:Date.now()-a,timestamp:Date.now(),error:U});}}async function dn(e,n,o,r){let a=Date.now(),c=o??"__inline_reflect",l=e.maxIterations??2;if(l<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");fe&&l>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let p=e.signal,b,C;if(e.timeout&&!p){let h=new AbortController;b=setTimeout(()=>h.abort(),e.timeout),p=h.signal;}else if(e.timeout&&p){let h=new AbortController;b=setTimeout(()=>h.abort(),e.timeout),C=()=>h.abort(),p.addEventListener("abort",C,{once:true}),p=h.signal;}let D=e.parseEvaluation??(h=>{if(typeof h=="string")try{return JSON.parse(h)}catch{return {passed:false,feedback:`Evaluator returned unparseable output: ${h.slice(0,200)}`}}return h&&typeof h=="object"&&"passed"in h?h:{passed:false,feedback:"Evaluator returned invalid format"}}),$=e.buildRetryInput??((h,E,W)=>`${h}
33
33
 
34
34
  Feedback on your previous response:
35
35
  ${E}
36
36
 
37
- Please improve your response.`);o&&oe("onPatternStart",{patternId:c,patternType:"reflect",input:n,timestamp:s});let I=e.checkpoint,H=I?.store??pe,R=I?.everyN??5,M=I?.labelPrefix??"reflect",Y,j,L=r?.history?[...r.history]:[],U=r?.producerOutputs?[...r.producerOutputs]:[],_=r?.iteration??0;r?.lastProducerOutput!=null&&(j={output:r.lastProducerOutput,totalTokens:0,messages:[],toolCalls:[]});try{let h=r?.effectiveInput??n;for(let E=_;E<l;E++){if(p?.aborted){if(j)return re=L,e.extract?e.extract(j.output):j.output;throw new DOMException("Reflect pattern aborted","AbortError")}let W=Date.now(),Z=await Ne(e.handler,h,{signal:p,patternId:o});j=Z;let q=typeof Z.output=="string"?Z.output:_t(Z.output);if(p?.aborted)return re=L,e.extract?e.extract(Z.output):Z.output;let y=await Ne(e.evaluator,q,{signal:p,patternId:o}),T;try{T=D(y.output);}catch(B){T={passed:!1,feedback:`Evaluation parse error: ${B instanceof Error?B.message:String(B)}`};}if(!T.passed&&e.threshold!=null&&T.score!=null){let B=typeof e.threshold=="function"?e.threshold(E):e.threshold;T.score>=B&&(T={...T,passed:!0});}let P=Date.now()-W;U.push({output:Z.output,score:T.score});let te={iteration:E,passed:T.passed,score:T.score,feedback:T.feedback,durationMs:P,producerTokens:Z.totalTokens??0,evaluatorTokens:y.totalTokens??0};if(L.push(te),e.onIteration)try{e.onIteration(te);}catch(B){fe&&console.warn("[Directive MultiAgent] onIteration callback threw:",B);}if(N&&N.record({type:"reflection_iteration",timestamp:Date.now(),snapshotId:null,iteration:E,passed:T.passed,score:T.score,durationMs:P,producerTokens:Z.totalTokens,evaluatorTokens:y.totalTokens}),T.passed)return re=L,e.extract?e.extract(Z.output):Z.output;if(E<l-1&&T.feedback)try{h=$(n,T.feedback,E);}catch(B){fe&&console.warn("[Directive MultiAgent] buildRetryInput threw, using default format:",B),h=`${n}
37
+ Please improve your response.`);o&&oe("onPatternStart",{patternId:c,patternType:"reflect",input:n,timestamp:a});let I=e.checkpoint,H=I?.store??pe,R=I?.everyN??5,M=I?.labelPrefix??"reflect",Y,j,L=r?.history?[...r.history]:[],U=r?.producerOutputs?[...r.producerOutputs]:[],_=r?.iteration??0;r?.lastProducerOutput!=null&&(j={output:r.lastProducerOutput,totalTokens:0,messages:[],toolCalls:[]});try{let h=r?.effectiveInput??n;for(let E=_;E<l;E++){if(p?.aborted){if(j)return re=L,e.extract?e.extract(j.output):j.output;throw new DOMException("Reflect pattern aborted","AbortError")}let W=Date.now(),Z=await Ne(e.handler,h,{signal:p,patternId:o});j=Z;let G=typeof Z.output=="string"?Z.output:_t(Z.output);if(p?.aborted)return re=L,e.extract?e.extract(Z.output):Z.output;let v=await Ne(e.evaluator,G,{signal:p,patternId:o}),T;try{T=D(v.output);}catch(B){T={passed:!1,feedback:`Evaluation parse error: ${B instanceof Error?B.message:String(B)}`};}if(!T.passed&&e.threshold!=null&&T.score!=null){let B=typeof e.threshold=="function"?e.threshold(E):e.threshold;T.score>=B&&(T={...T,passed:!0});}let P=Date.now()-W;U.push({output:Z.output,score:T.score});let te={iteration:E,passed:T.passed,score:T.score,feedback:T.feedback,durationMs:P,producerTokens:Z.totalTokens??0,evaluatorTokens:v.totalTokens??0};if(L.push(te),e.onIteration)try{e.onIteration(te);}catch(B){fe&&console.warn("[Directive MultiAgent] onIteration callback threw:",B);}if(N&&N.record({type:"reflection_iteration",timestamp:Date.now(),snapshotId:null,iteration:E,passed:T.passed,score:T.score,durationMs:P,producerTokens:Z.totalTokens,evaluatorTokens:v.totalTokens}),T.passed)return re=L,e.extract?e.extract(Z.output):Z.output;if(E<l-1&&T.feedback)try{h=$(n,T.feedback,E);}catch(B){fe&&console.warn("[Directive MultiAgent] buildRetryInput threw, using default format:",B),h=`${n}
38
38
 
39
39
  Feedback on your previous response:
40
40
  ${T.feedback}
41
41
 
42
- Please improve your response.`;}I&&H&&E>=_&&(E-_+1)%R===0&&await Ft({type:"reflect",version:1,id:vt(),createdAt:new Date().toISOString(),label:`${M}:iter-${E+1}`,patternId:c,stepsTotal:l,iteration:E+1,effectiveInput:h,history:[...L],producerOutputs:[...U],lastProducerOutput:Z.output},H,I);}if(re=L,e.onExhausted==="throw")throw new Sn({iterations:l,history:L.map(E=>({passed:E.passed,feedback:E.feedback,score:E.score})),lastResult:j,totalTokens:j.totalTokens??0});if(e.onExhausted==="accept-best"&&U.length>0){!U.some(y=>y.score!=null)&&fe&&console.warn("[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.");let W=U.length-1,Z=Number.NEGATIVE_INFINITY;for(let y=0;y<U.length;y++){let T=U[y].score;T!=null&&T>Z&&(Z=T,W=y);}let q=U[W].output;return e.extract?e.extract(q):q}return e.extract?e.extract(j.output):j.output}catch(h){throw re=L,Y=h instanceof Error?h:new Error(String(h)),h}finally{b&&clearTimeout(b),C&&e.signal&&e.signal.removeEventListener("abort",C),o&&oe("onPatternComplete",{patternId:c,patternType:"reflect",durationMs:Date.now()-s,timestamp:Date.now(),error:Y});}}async function jn(e,n,o){if(e.handlers.length===0)throw new Error("[Directive MultiAgent] Race pattern requires at least one agent");let r=e.minSuccess??1;if(!Number.isInteger(r)||r<1)throw new Error("[Directive MultiAgent] Race pattern minSuccess must be a positive integer");if(r>e.handlers.length)throw new Error(`[Directive MultiAgent] Race pattern minSuccess (${r}) exceeds agent count (${e.handlers.length})`);for(let I of e.handlers)if(!m[I]&&!le[I])throw new Error(`[Directive MultiAgent] Race: unknown handler "${I}"`);let s=Date.now(),c=o??"__inline_race",l=new AbortController,p,b;e.signal&&(e.signal.aborted?l.abort():(b=()=>l.abort(),e.signal.addEventListener("abort",b,{once:true}))),o&&oe("onPatternStart",{patternId:c,patternType:"race",input:n,timestamp:s}),N&&N.record({type:"race_start",timestamp:s,snapshotId:null,patternId:c,agents:e.handlers}),e.timeout&&(p=setTimeout(()=>l.abort(),e.timeout));let C,D=Object.create(null),$=[...e.handlers];try{let I=e.handlers.map(E=>({agentId:E,promise:Ne(E,n,{signal:l.signal,patternId:o}).then(W=>({agentId:E,result:W}))})),H=I.map(E=>E.promise.catch(()=>{})),R=[],M=await new Promise((E,W)=>{let Z=0,q=!1;for(let y of I)y.promise.then(T=>{Z++,!q&&(R.push(T),R.length>=r&&(q=!0,l.abort(),E([...R])));}).catch(T=>{if(D[y.agentId]=T instanceof Error?T.message:String(T),Z++,q)return;let P=Object.keys(D).length,te=R.length+(I.length-Z);Z===I.length&&P===I.length?(q=!0,W(new Error(`[Directive MultiAgent] Race: all ${I.length} agents failed.
42
+ Please improve your response.`;}I&&H&&E>=_&&(E-_+1)%R===0&&await Ft({type:"reflect",version:1,id:yt(),createdAt:new Date().toISOString(),label:`${M}:iter-${E+1}`,patternId:c,stepsTotal:l,iteration:E+1,effectiveInput:h,history:[...L],producerOutputs:[...U],lastProducerOutput:Z.output},H,I);}if(re=L,e.onExhausted==="throw")throw new Sn({iterations:l,history:L.map(E=>({passed:E.passed,feedback:E.feedback,score:E.score})),lastResult:j,totalTokens:j.totalTokens??0});if(e.onExhausted==="accept-best"&&U.length>0){!U.some(v=>v.score!=null)&&fe&&console.warn("[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.");let W=U.length-1,Z=Number.NEGATIVE_INFINITY;for(let v=0;v<U.length;v++){let T=U[v].score;T!=null&&T>Z&&(Z=T,W=v);}let G=U[W].output;return e.extract?e.extract(G):G}return e.extract?e.extract(j.output):j.output}catch(h){throw re=L,Y=h instanceof Error?h:new Error(String(h)),h}finally{b&&clearTimeout(b),C&&e.signal&&e.signal.removeEventListener("abort",C),o&&oe("onPatternComplete",{patternId:c,patternType:"reflect",durationMs:Date.now()-a,timestamp:Date.now(),error:Y});}}async function jn(e,n,o){if(e.handlers.length===0)throw new Error("[Directive MultiAgent] Race pattern requires at least one agent");let r=e.minSuccess??1;if(!Number.isInteger(r)||r<1)throw new Error("[Directive MultiAgent] Race pattern minSuccess must be a positive integer");if(r>e.handlers.length)throw new Error(`[Directive MultiAgent] Race pattern minSuccess (${r}) exceeds agent count (${e.handlers.length})`);for(let I of e.handlers)if(!m[I]&&!le[I])throw new Error(`[Directive MultiAgent] Race: unknown handler "${I}"`);let a=Date.now(),c=o??"__inline_race",l=new AbortController,p,b;e.signal&&(e.signal.aborted?l.abort():(b=()=>l.abort(),e.signal.addEventListener("abort",b,{once:true}))),o&&oe("onPatternStart",{patternId:c,patternType:"race",input:n,timestamp:a}),N&&N.record({type:"race_start",timestamp:a,snapshotId:null,patternId:c,agents:e.handlers}),e.timeout&&(p=setTimeout(()=>l.abort(),e.timeout));let C,D=Object.create(null),$=[...e.handlers];try{let I=e.handlers.map(E=>({agentId:E,promise:Ne(E,n,{signal:l.signal,patternId:o}).then(W=>({agentId:E,result:W}))})),H=I.map(E=>E.promise.catch(()=>{})),R=[],M=await new Promise((E,W)=>{let Z=0,G=!1;for(let v of I)v.promise.then(T=>{Z++,!G&&(R.push(T),R.length>=r&&(G=!0,l.abort(),E([...R])));}).catch(T=>{if(D[v.agentId]=T instanceof Error?T.message:String(T),Z++,G)return;let P=Object.keys(D).length,te=R.length+(I.length-Z);Z===I.length&&P===I.length?(G=!0,W(new Error(`[Directive MultiAgent] Race: all ${I.length} agents failed.
43
43
  `+Object.entries(D).map(([B,Pe])=>` - ${B}: ${Pe}`).join(`
44
- `)))):te<r&&(q=!0,W(new Error(`[Directive MultiAgent] Race: cannot reach minSuccess (${r}). ${P} agent(s) failed.
44
+ `)))):te<r&&(G=!0,W(new Error(`[Directive MultiAgent] Race: cannot reach minSuccess (${r}). ${P} agent(s) failed.
45
45
  `+Object.entries(D).map(([B,Pe])=>` - ${B}: ${Pe}`).join(`
46
- `))));});});await Promise.all(H).catch(()=>{});let Y=M[0],j=Y.agentId,L=new Set(M.map(E=>E.agentId)),U=$.filter(E=>!L.has(E)&&!(E in D));N&&(N.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:c,winnerId:j,durationMs:Date.now()-s}),U.length>0&&N.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:c,cancelledIds:U,reason:"winner_found"}));let _=e.extract?e.extract(Y.result):Y.result.output,h=r>1?M.map(E=>({agentId:E.agentId,result:e.extract?e.extract(E.result):E.result.output})):void 0;return {winnerId:j,result:_,allResults:h}}catch(I){throw C=I instanceof Error?I:new Error(String(I)),N&&N.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:c,cancelledIds:$,reason:l.signal.aborted?"timeout":"all_failed"}),I}finally{p&&clearTimeout(p),b&&e.signal&&e.signal.removeEventListener("abort",b),o&&oe("onPatternComplete",{patternId:c,patternType:"race",durationMs:Date.now()-s,timestamp:Date.now(),error:C});}}async function pn(e,n,o,r){let{handlers:s,evaluator:c,maxRounds:l=2,extract:p,parseJudgement:b}=e;if(s.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(l<1||!Number.isFinite(l))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let C=e.signal,D,$;if(e.timeout&&!C){let T=new AbortController;D=setTimeout(()=>T.abort(),e.timeout),C=T.signal;}else if(e.timeout&&C){let T=new AbortController;D=setTimeout(()=>T.abort(),e.timeout),$=()=>T.abort(),C.addEventListener("abort",$,{once:true}),C=T.signal;}let H=b??(T=>{if(typeof T=="string")try{let P=JSON.parse(T);return P&&typeof P=="object"&&typeof P.winnerId=="string"?P:(fe&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:s[0]})}catch{return fe&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:s[0]}}return T&&typeof T=="object"&&"winnerId"in T&&typeof T.winnerId=="string"?T:(fe&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:s[0]})}),R=r?.rounds?[...r.rounds]:[],M=r?.currentInput??n,Y=r?.lastWinnerId??s[0],j=r?.lastWinnerOutput??void 0,L=r?.round??0,U=e.checkpoint,_=U?.store??pe,h=U?.everyN??5,E=U?.labelPrefix??"debate",W=o??"__inline_debate",Z=Date.now(),q=r?.tokensConsumed??0;o&&oe("onPatternStart",{patternId:W,patternType:"debate",input:n,timestamp:Z});let y;try{for(let P=L;P<l&&!C?.aborted;P++){let te=s.map(async $e=>{let pt=await Ne($e,M,{signal:C,patternId:W});return q+=pt.totalTokens,{agentId:$e,output:pt.output}}),B=await Promise.all(te);if(C?.aborted)break;let Pe=JSON.stringify({round:P+1,totalRounds:l,proposals:B.map($e=>({agentId:$e.agentId,proposal:$e.output}))}),ye=await Ne(c,Pe,{signal:C,patternId:W});q+=ye.totalTokens;let Re=H(ye.output);if(s.includes(Re.winnerId)||(Re.winnerId=s[0]),R.push({proposals:B,judgement:Re}),N&&N.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:W,round:P+1,totalRounds:l,winnerId:Re.winnerId,score:Re.score,agentCount:s.length}),Y=Re.winnerId,j=B.find($e=>$e.agentId===Re.winnerId)?.output??B[0].output,U&&_&&P>L&&(P-L)%h===0){let $e={type:"debate",version:1,id:vt(),createdAt:new Date().toISOString(),label:`${E}:round-${P+1}`,patternId:W,stepsTotal:l,round:P+1,currentInput:M,rounds:[...R],lastWinnerId:Y,lastWinnerOutput:j,tokensConsumed:q};await Ft($e,_,U);}P<l-1&&Re.feedback&&(M=`Previous round feedback: ${Re.feedback}
46
+ `))));});});await Promise.all(H).catch(()=>{});let Y=M[0],j=Y.agentId,L=new Set(M.map(E=>E.agentId)),U=$.filter(E=>!L.has(E)&&!(E in D));N&&(N.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:c,winnerId:j,durationMs:Date.now()-a}),U.length>0&&N.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:c,cancelledIds:U,reason:"winner_found"}));let _=e.extract?e.extract(Y.result):Y.result.output,h=r>1?M.map(E=>({agentId:E.agentId,result:e.extract?e.extract(E.result):E.result.output})):void 0;return {winnerId:j,result:_,allResults:h}}catch(I){throw C=I instanceof Error?I:new Error(String(I)),N&&N.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:c,cancelledIds:$,reason:l.signal.aborted?"timeout":"all_failed"}),I}finally{p&&clearTimeout(p),b&&e.signal&&e.signal.removeEventListener("abort",b),o&&oe("onPatternComplete",{patternId:c,patternType:"race",durationMs:Date.now()-a,timestamp:Date.now(),error:C});}}async function pn(e,n,o,r){let{handlers:a,evaluator:c,maxRounds:l=2,extract:p,parseJudgement:b}=e;if(a.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(l<1||!Number.isFinite(l))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let C=e.signal,D,$;if(e.timeout&&!C){let T=new AbortController;D=setTimeout(()=>T.abort(),e.timeout),C=T.signal;}else if(e.timeout&&C){let T=new AbortController;D=setTimeout(()=>T.abort(),e.timeout),$=()=>T.abort(),C.addEventListener("abort",$,{once:true}),C=T.signal;}let H=b??(T=>{if(typeof T=="string")try{let P=JSON.parse(T);return P&&typeof P=="object"&&typeof P.winnerId=="string"?P:(fe&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:a[0]})}catch{return fe&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:a[0]}}return T&&typeof T=="object"&&"winnerId"in T&&typeof T.winnerId=="string"?T:(fe&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:a[0]})}),R=r?.rounds?[...r.rounds]:[],M=r?.currentInput??n,Y=r?.lastWinnerId??a[0],j=r?.lastWinnerOutput??void 0,L=r?.round??0,U=e.checkpoint,_=U?.store??pe,h=U?.everyN??5,E=U?.labelPrefix??"debate",W=o??"__inline_debate",Z=Date.now(),G=r?.tokensConsumed??0;o&&oe("onPatternStart",{patternId:W,patternType:"debate",input:n,timestamp:Z});let v;try{for(let P=L;P<l&&!C?.aborted;P++){let te=a.map(async $e=>{let pt=await Ne($e,M,{signal:C,patternId:W});return G+=pt.totalTokens,{agentId:$e,output:pt.output}}),B=await Promise.all(te);if(C?.aborted)break;let Pe=JSON.stringify({round:P+1,totalRounds:l,proposals:B.map($e=>({agentId:$e.agentId,proposal:$e.output}))}),ve=await Ne(c,Pe,{signal:C,patternId:W});G+=ve.totalTokens;let Re=H(ve.output);if(a.includes(Re.winnerId)||(Re.winnerId=a[0]),R.push({proposals:B,judgement:Re}),N&&N.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:W,round:P+1,totalRounds:l,winnerId:Re.winnerId,score:Re.score,agentCount:a.length}),Y=Re.winnerId,j=B.find($e=>$e.agentId===Re.winnerId)?.output??B[0].output,U&&_&&P>L&&(P-L)%h===0){let $e={type:"debate",version:1,id:yt(),createdAt:new Date().toISOString(),label:`${E}:round-${P+1}`,patternId:W,stepsTotal:l,round:P+1,currentInput:M,rounds:[...R],lastWinnerId:Y,lastWinnerOutput:j,tokensConsumed:G};await Ft($e,_,U);}P<l-1&&Re.feedback&&(M=`Previous round feedback: ${Re.feedback}
47
47
 
48
- Original task: ${n}`);}if(R.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let T=p?p(j):j;return {winnerId:Y,result:T,rounds:R}}catch(T){throw y=T instanceof Error?T:new Error(String(T)),T}finally{D&&clearTimeout(D),$&&e.signal&&e.signal.removeEventListener("abort",$),o&&oe("onPatternComplete",{patternId:W,patternType:"debate",durationMs:Date.now()-Z,timestamp:Date.now(),error:y});}}let lr=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ht(e,n){for(let o of Object.keys(n))lr.has(o)||(e[o]=n[o]);}function cr(e,n){let o=Object.create(null);for(let[b,C]of Object.entries(n))for(let D of C.produces)o[D]||(o[D]=[]),o[D].push(b);let r=Object.keys(n),s=Object.create(null),c=Object.create(null);for(let b of r)s[b]=0,c[b]=[];for(let[b,C]of Object.entries(n))for(let D of C.requires??[]){let $=o[D];if($)for(let I of $)I!==b&&(c[I].push(b),s[b]=(s[b]??0)+1);}let l=[];for(let b of r)s[b]===0&&l.push(b);let p=0;for(;l.length>0;){let b=l.shift();p++;for(let C of c[b]??[])s[C]--,s[C]===0&&l.push(C);}if(p!==r.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${p}/${r.length} nodes.`)}function dr(e,n){let o=Object.create(null);for(let[r,s]of Object.entries(n))for(let c of s.produces)o[c]||(o[c]=[]),o[c].push(r);for(let[r,s]of Object.entries(o))s.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${r}" is produced by multiple nodes: ${s.join(", ")}. Last writer wins.`);}function He(e,...n){if(e)try{return e(...n)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}async function pr(e,...n){if(e)try{return await e(...n)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}function On(e,n,o){let r=n.slice(-3),s=r.length>0?r.reduce((p,b)=>p+b.satisfactionDelta,0)/r.length:0,c=null;s>0&&e<1&&(c=Math.ceil((1-e)/s));let l=false;if(n.length>=6){let p=n.slice(-3),b=n.slice(-6,-3),C=p.reduce(($,I)=>$+I.satisfactionDelta,0)/3,D=b.reduce(($,I)=>$+I.satisfactionDelta,0)/3;l=C<D*.5;}return {satisfaction:e,progressRate:s,estimatedStepsRemaining:c,decelerating:l}}function Qt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function gn(e,n,o,r){let{nodes:s,when:c,satisfaction:l,maxSteps:p=50,extract:b,selectionStrategy:C,relaxation:D,onStep:$,onStall:I}=e,H=Object.create(null);for(let[he,ve]of Object.entries(s))H[he]={...ve};if(Object.keys(H).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let M=o??"__goal";for(let[he,ve]of Object.entries(H))if(!m[ve.handler]&&!le[ve.handler])throw new Error(`[Directive MultiAgent] goal node "${he}" references unregistered handler "${ve.handler}"`);cr(M,H),dr(M,H);for(let[he,ve]of Object.entries(H))ve.extractOutput||console.warn(`[Directive MultiAgent] goal node "${he}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let Y=e.signal,j,L,U=e.timeout??3e5;if(U&&!Y){let he=new AbortController;j=setTimeout(()=>he.abort(),U),Y=he.signal;}else if(U&&Y){let he=new AbortController;j=setTimeout(()=>he.abort(),U),L=()=>he.abort(),Y.addEventListener("abort",L,{once:true}),Y=he.signal;}let _=Date.now();if(N){let he=Object.values(H).map(ve=>ve.handler);N.record({type:"pattern_start",timestamp:_,snapshotId:null,patternId:M,patternType:"goal",handlers:he,taskIds:he.filter(ve=>le[ve]!=null)});}oe("onPatternStart",{patternId:M,patternType:"goal",input:typeof n=="string"?n:JSON.stringify(n),timestamp:_});let h=Object.create(null);r?Ht(h,r.facts):typeof n=="string"?h.input=n:Ht(h,n);let E=r?[...r.executionOrder]:[],W=Object.create(null);if(r)for(let[he,ve]of Object.entries(r.nodeOutputs))W[he]={output:ve.output,totalTokens:ve.totalTokens};let Z=r?[...r.stepMetrics]:[],q=r?[...r.relaxations]:[],y=new Set(r?.completedNodes??[]),T=new Map(r?Object.entries(r.failedNodes).map(([he,ve])=>[he,ve]):[]),P=new Map(r?Object.entries(r.nodeInputHashes):[]),te=Object.create(null);if(r)for(let[he,ve]of Object.entries(r.agentMetrics))te[he]={runs:ve.runs,avgSatisfactionDelta:ve.runs>0?ve.totalDelta/ve.runs:0,tokens:ve.tokens,totalDelta:ve.totalDelta};let B=r?.stallSteps??0,Pe=r?.appliedRelaxationTiers??0,ye=r?.lastSatisfaction??0,Re,$t=false,$e=r?.step??0,pt=e.checkpoint,hr=pt?.everyN??5,Gn=pt?.store??pe,br=pt?.labelPrefix??"goal",Bn,kr=3;try{for(let Oe=$e;Oe<p;Oe++){if(He(c,h)===!0){$t=!0;let de=Date.now()-_,ie=Object.values(W).reduce((Te,Ge)=>Te+Ge.totalTokens,0);return {achieved:!0,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:Oe,totalTokens:ie,durationMs:de,stepMetrics:Z,relaxations:q}}if(Y?.aborted){let de=Date.now()-_,ie=Object.values(W).reduce((Te,Ge)=>Te+Ge.totalTokens,0);return {achieved:!1,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:Oe,totalTokens:ie,durationMs:de,stepMetrics:Z,relaxations:q,error:"Aborted or timed out"}}let jt=[];for(let[de,ie]of Object.entries(H)){if((T.get(de)??0)>=kr)continue;let Te=ie.requires??[];if(Te.every(Ie=>h[Ie]!=null)){if(y.has(de)){if(!ie.allowRerun)continue;let Ie=JSON.stringify(Te.map(Ue=>h[Ue]));if(P.get(de)===Ie)continue}jt.push(de);}}let Dt=jt;if(C&&jt.length>0){let de=l?He(l,h)??0:He(c,h)===!0?1:0,ie=Qt(de),Te=On(ie,Z,Oe),Ge=Object.create(null);for(let[Ue,Se]of Object.entries(te))Ge[Ue]={runs:Se.runs,avgSatisfactionDelta:Se.runs>0?Se.totalDelta/Se.runs:0,tokens:Se.tokens};let Ie=C.select(jt,Ge,Te);Dt=Ie&&Ie.length>0?Ie:jt;}if(Dt.sort((de,ie)=>(H[ie].priority??0)-(H[de].priority??0)),He($,Oe,{...h},Dt),Dt.length===0){B++;let de=!1;if(D)for(let ie=Pe;ie<D.length;ie++){let Te=D[ie],Ge=Te.afterStallSteps??3;if(B>=Ge){let Ie=Te.strategy;switch(Ie.type){case "allow_rerun":for(let Ue of Ie.nodes)y.delete(Ue),P.delete(Ue);break;case "alternative_nodes":for(let Ue of Ie.nodes){let Se=`__relaxation_${ie}_${Ue.handler}`;H[Se]={...Ue};}break;case "inject_facts":Ht(h,Ie.facts);break;case "accept_partial":{let Ue=Date.now()-_,Se=Object.values(W).reduce((Be,kt)=>Be+kt.totalTokens,0);return {achieved:!1,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:Oe,totalTokens:Se,durationMs:Ue,stepMetrics:Z,relaxations:q,error:`Accepted partial result via relaxation tier "${Te.label}"`}}case "custom":{let Ue=He(l,h)??0,Se={step:Oe,facts:{...h},metrics:On(Qt(Ue),Z,Oe),completedNodes:new Set(y),failedNodes:new Map(T)};await pr(Ie.apply,Se);break}}q.push({step:Oe,tierIndex:ie,label:Te.label,strategy:Ie.type}),Pe=ie+1,B=0,de=!0;break}}if(!de){let ie=He(l,h)??0,Te=On(Qt(ie),Z,Oe);if(He(I,Oe,Te),!D||Pe>=D.length){let Ge=Date.now()-_,Ie=Object.values(W).reduce((Ue,Se)=>Ue+Se.totalTokens,0);return {achieved:!1,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:Oe,totalTokens:Ie,durationMs:Ge,stepMetrics:Z,relaxations:q,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}B=0;let yr=Date.now(),vr=l?He(l,h)??0:He(c,h)===!0?1:0,wr=Qt(vr),Ln=0,Ut=[],Rr=Dt.map(async de=>{let ie=H[de],Te=ie.requires??[],Ge=JSON.stringify(Te.map(Se=>h[Se]));P.set(de,Ge);let Ie,Ue=He(ie.buildInput,h);if(Ue!=null)Ie=Ue;else {let Se=Object.create(null);for(let Be of Te)h[Be]!=null&&(Se[Be]=h[Be]);Object.keys(Se).length>0?Ie=JSON.stringify(Se):h.input!=null?Ie=String(h.input):Ie=JSON.stringify(h);}try{let Se=await Ne(ie.handler,Ie,{signal:Y??void 0,patternId:M});if(W[de]=Se,E.push(de),y.add(de),T.delete(de),ie.extractOutput){let Be=He(ie.extractOutput,Se);Be&&(Ht(h,Be),Ut.push(...Object.keys(Be)));}else {let Be=Se.output;if(Be&&typeof Be=="object")Ht(h,Be),Ut.push(...Object.keys(Be));else if(typeof Be=="string")try{let kt=JSON.parse(Be);if(kt&&typeof kt=="object"&&!Array.isArray(kt))Ht(h,kt),Ut.push(...Object.keys(kt));else for(let Fn of ie.produces)h[Fn]=Be,Ut.push(Fn);}catch{for(let kt of ie.produces)h[kt]=Be,Ut.push(kt);}}return Ln+=Se.totalTokens,{nodeId:de,success:!0}}catch(Se){let Be=(T.get(de)??0)+1;return T.set(de,Be),{nodeId:de,success:!1,error:Se}}});await Promise.allSettled(Rr);let Tr=l?He(l,h)??0:He(c,h)===!0?1:0,fn=Qt(Tr),mn=fn-wr;if(Z.push({step:Oe,durationMs:Date.now()-yr,nodesRun:[...Dt],factsProduced:Ut,satisfaction:fn,satisfactionDelta:mn,tokensConsumed:Ln}),N)for(let de of Dt){let ie=H[de];N.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:ie.handler,step:Oe,nodeId:de,satisfaction:fn,satisfactionDelta:mn});}for(let de of Dt){let ie=H[de];te[ie.handler]||(te[ie.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let Te=te[ie.handler];Te.runs++,Te.totalDelta+=mn,Te.tokens+=W[de]?.totalTokens??0;}if(ye=fn,mn<=0?B++:B=0,pt&&Gn&&Oe>$e&&(Oe-$e)%hr===0){let de={type:"goal",version:1,id:vt(),createdAt:new Date().toISOString(),label:`${br}:step-${Oe}`,patternId:M,stepsTotal:p,step:Oe+1,facts:structuredClone(h),completedNodes:[...y],failedNodes:Object.fromEntries(T),nodeInputHashes:Object.fromEntries(P),nodeOutputs:Object.fromEntries(Object.entries(W).map(([Te,Ge])=>[Te,{output:Ge.output,totalTokens:Ge.totalTokens}])),executionOrder:[...E],stepMetrics:[...Z],relaxations:[...q],appliedRelaxationTiers:Pe,stallSteps:B,lastSatisfaction:ye,agentMetrics:Object.fromEntries(Object.entries(te).map(([Te,Ge])=>[Te,{runs:Ge.runs,totalDelta:Ge.totalDelta,tokens:Ge.tokens}]))},ie=await Ft(de,Gn,pt);ie&&(Bn=ie);}}let he=Date.now()-_,ve=Object.values(W).reduce((Oe,jt)=>Oe+jt.totalTokens,0);return {achieved:!1,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:p,totalTokens:ve,durationMs:he,stepMetrics:Z,relaxations:q,error:`Max steps (${p}) exhausted without achieving goal`}}catch(he){throw Re=he instanceof Error?he:new Error(String(he)),he}finally{if(j!=null&&clearTimeout(j),L&&e.signal&&e.signal.removeEventListener("abort",L),N){let he=Object.values(W).reduce((ve,Oe)=>ve+Oe.totalTokens,0);N.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:M,patternType:"goal",durationMs:Date.now()-_,achieved:$t,stepMetrics:Z,relaxations:q,totalTokens:he,...Re?{error:Re.message}:{}});}oe("onPatternComplete",{patternId:M,patternType:"goal",durationMs:Date.now()-_,timestamp:Date.now(),error:Re});}}function gr(e){if(!Ae)return [];let n=[],o=new Set;if(o.add(e),Ae.equivalencyGroups){for(let r of Object.values(Ae.equivalencyGroups))if(r.includes(e))for(let s of r)!o.has(s)&&m[s]&&(n.push(s),o.add(s));}if(Ae.useCapabilities!==false){let r=m[e];if(r?.capabilities&&r.capabilities.length>0)for(let[s,c]of Object.entries(m)){if(o.has(s))continue;let l=c.capabilities??[];r.capabilities.every(p=>l.includes(p))&&(n.push(s),o.add(s));}}if(je){let r=Ae.healthThreshold??30;return n.filter(s=>je.getHealthScore(s)>r)}return n}function fr(e){if(e.length===0)return null;if(!Ae||!je)return e[0]??null;if(Ae.selectionStrategy==="round-robin"&&Qe){let r=[...e].sort().join(","),s=Qe.get(r)??0,c=e[s%e.length];return Qe.set(r,s+1),c}let n=e[0],o=je.getHealthScore(n);for(let r=1;r<e.length;r++){let s=je.getHealthScore(e[r]);s>o&&(n=e[r],o=s);}return n}function mr(e){switch(e.type){case "parallel":return e.handlers;case "sequential":return e.handlers;case "supervisor":return [e.supervisor,...e.workers];case "dag":return Object.values(e.nodes).map(n=>n.handler);case "reflect":return [e.handler,e.evaluator];case "race":return e.handlers;case "debate":return [...e.handlers,e.evaluator];case "goal":return Object.values(e.nodes).map(n=>n.handler);default:return []}}let qn={system:O,get facts(){return O.facts},get timeline(){return N},get healthMonitor(){return je},get derived(){return Object.freeze({...X})},onDerivedChange(e){return qe.add(e),()=>{qe.delete(e);}},get scratchpad(){return Ct},runAgent:Ne,runAgentStream:An,async runPattern(e,n){se();let o=a[e];if(!o){let c=Object.keys(a).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${c}`)}let r=Date.now();if(N){let c=mr(o);N.record({type:"pattern_start",timestamp:r,snapshotId:null,patternId:e,patternType:o.type,handlers:c,taskIds:c.filter(l=>le[l]!=null)});}let s;try{switch(o.type){case "parallel":return await ur(o,n,e);case "sequential":return await xn(o,n,e);case "supervisor":return await Cn(o,n,e);case "dag":return await Dn(o,n,e);case "reflect":return await dn(o,n,e);case "race":return (await jn(o,n,e)).result;case "debate":return (await pn(o,n,e)).result;case "goal":return (await gn(o,n,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${o.type}`)}}catch(c){throw s=c instanceof Error?c:new Error(String(c)),c}finally{N&&N.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:o.type,durationMs:Date.now()-r,...s?{error:s.message}:{}});}},async runParallel(e,n,o,r){se();let s=Array.isArray(n)?n:e.map(()=>n);if(s.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${s.length}) must match agent count (${e.length})`);let c=new AbortController,l;r?.timeout&&(l=setTimeout(()=>c.abort(),r.timeout));try{let p=e.map((D,$)=>Ne(D,s[$],{signal:c.signal}).catch(I=>{if(r?.minSuccess!==void 0)return null;throw I})),b=await Promise.all(p),C=b.filter(D=>D!==null);if(r?.minSuccess!==void 0&&C.length<r.minSuccess){let D=b.length-C.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${C.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess}, failed: ${D})`)}return o(C)}finally{l&&clearTimeout(l);}},async runSequential(e,n,o){se();let r=[],s=n;for(let c=0;c<e.length;c++){let l=e[c],p=await Ne(l,s);r.push(p),c<e.length-1&&(o?.transform?s=o.transform(p.output,l,c):s=typeof p.output=="string"?p.output:_t(p.output));}return r},async handoff(e,n,o,r){if(se(),!m[e]){let l=Object.keys(m).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${l}`)}if(!m[n]){let l=Object.keys(m).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${n}" not found. Registered: ${l}`)}{let l=await Nt("pre_handoff",e,m[e].agent.name,o,void 0,{handoff:{fromAgent:e,toAgent:n}});if(l.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};o=l.input;}let s={id:`handoff-${++ae}`,fromAgent:e,toAgent:n,input:o,context:r,requestedAt:Date.now()};V.push(s);try{d?.(s);}catch(l){fe&&console.debug("[Directive MultiAgent] onHandoff threw:",l);}oe("onHandoff",s),N&&N.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n});let c=m[n].memory??A;if(c&&r)try{let l=Object.entries(r).map(([p,b])=>`${p}: ${_t(b)}`).join(", ");c.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${l}`}]);}catch(l){fe&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",l);}try{let l=await Ne(n,o),p={request:s,result:l,completedAt:Date.now()};ge(p);try{f?.(p);}catch(C){fe&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",C);}oe("onHandoffComplete",p),N&&N.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n,durationMs:p.completedAt-s.requestedAt});let b=V.indexOf(s);return b>=0&&V.splice(b,1),l}catch(l){let p=V.indexOf(s);throw p>=0&&V.splice(p,1),l}},approve(e){se();let n=we.get(e);if(n){we.delete(e);let o=_e(n);O.batch(()=>{let r=ut(o),s=200,c=[...r.approved,e];rt(o,{...r,pending:r.pending.filter(l=>l.id!==e),approved:c.length>s?c.slice(-s):c});});return}fe&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,n){se();let o=we.get(e);if(o){we.delete(e);let r=_e(o);O.batch(()=>{let s=ut(r);n&&fe&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${n}`);let c={id:e,reason:n,rejectedAt:Date.now()},l=200,p=[...s.rejected,c];rt(r,{...s,pending:s.pending.filter(b=>b.id!==e),rejected:p.length>l?p.slice(-l):p});});return}fe&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){se(),Ke="paused",fe&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){se(),Ke==="paused"&&(Ke="idle",fe&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let n=ue[e];return n?{...n}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(ue).map(([e,n])=>[e,{...n}]))},getPendingHandoffs(){return [...V]},get totalTokens(){return De},waitForIdle(e){let n=()=>Xe===0&&Object.values(ue).every(o=>o.status==="idle"||o.status==="completed"||o.status==="error");return n()?Promise.resolve():new Promise((o,r)=>{let s=null,c=()=>{lt.delete(l),s&&clearTimeout(s);},l=()=>{n()&&(c(),o());};lt.add(l),e!==void 0&&(s=setTimeout(()=>{c(),r(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,n,o){return Ne(e,n,o)},runStream(e,n,o){return An(e,n,o)},registerAgent(e,n){if(se(),Gt.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(m[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(le[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let o=n.constraints?Vt(n.constraints):{},r=Object.create(null);if(n.resolvers)for(let[c,l]of Object.entries(n.resolvers))r[c]={requirement:l.requirement,key:l.key,resolve:async(p,b)=>{let C=nt(b.facts),$={facts:{...b.facts,...C},runAgent:async(I,H,R)=>t$1(I,H,R),signal:b.signal};return l.resolve(p,$)}};let s=createModule(e,{schema:tn,init:c=>{We(c,{status:"idle",currentAgent:n.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(c,{pending:[],approved:[],rejected:[]}),mt(c,[]),ht(c,[]),at(c,sn());},constraints:o,resolvers:Object.keys(r).length>0?r:void 0});O.registerModule(e,s),m[e]=n,ot.set(e,new Rt(n.maxConcurrent??1)),ue[e]={status:"idle",runCount:0,totalTokens:0},fe&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${n.agent.name})`),ce();},unregisterAgent(e){if(se(),!m[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(ue[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[s,c]of Object.entries(a)){let l;switch(c.type){case "supervisor":l=[c.supervisor,...c.workers];break;case "dag":l=Object.values(c.nodes).map(p=>p.handler);break;case "reflect":l=[c.handler,c.evaluator];break;case "parallel":case "sequential":case "race":l=c.handlers;break;case "debate":l=[...c.handlers,c.evaluator];break;default:l=[];}l.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${s}" references unregistered agent "${e}"`);}let o=ot.get(e);o&&(o.drain(),ot.delete(e));let r=_e(e);r&&O.batch(()=>{We(r,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(r,{pending:[],approved:[],rejected:[]}),mt(r,[]),ht(r,[]),at(r,sn());}),delete m[e],delete ue[e],fe&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),ce();},getAgentIds(){return Object.keys(m)},registerTask(e,n){if(se(),Gt.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(!e||typeof e!="string"||e.trim()!==e||e.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(m[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(le[e])throw new Error(`[Directive MultiAgent] Task "${e}" is already registered`);if(n.timeout!==void 0&&(!Number.isFinite(n.timeout)||n.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(n.maxConcurrent!==void 0&&(!Number.isFinite(n.maxConcurrent)||n.maxConcurrent<1||!Number.isInteger(n.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(n.retry){let{attempts:o,delayMs:r}=n.retry;if(!Number.isFinite(o)||o<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(r!==void 0&&(!Number.isFinite(r)||r<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}le[e]=n,ze[e]={status:"idle"},be.set(e,new Rt(n.maxConcurrent??1)),fe&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${n.label??e})`);},unregisterTask(e){if(se(),!le[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(ze[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let o=be.get(e);o&&(o.drain(),be.delete(e)),delete le[e],delete ze[e],fe&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(le)},getTaskRegistry(){let e=Object.create(null);for(let[n,o]of Object.entries(le))e[n]={label:o.label,description:o.description};return e},getTaskState(e){let n=ze[e];return n?Object.freeze(structuredClone(n)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[n,o]of Object.entries(ze))e[n]=Object.freeze(structuredClone(o));return e},getNodeIds(){return [...Object.keys(m),...Object.keys(le)]},reset(){se();for(let n of Object.keys(m)){let o=m[n]?.maxConcurrent??1;ue[n]={status:"idle",runCount:0,totalTokens:0};let r=ot.get(n);r&&r.drain(),ot.set(n,new Rt(o));let s=_e(n);O.batch(()=>{We(s,{status:"idle",currentAgent:m[n].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(s,{pending:[],approved:[],rejected:[]}),mt(s,[]),ht(s,[]),at(s,sn());});}for(let n of Object.keys(le)){ze[n]={status:"idle"};let o=be.get(n);o&&o.drain(),be.set(n,new Rt(le[n].maxConcurrent??1));}Lt.clear(),Zt.clear(),we.clear(),V.length=0,xe.length=0,ae=0,De=0,Ke="idle",Xe=0,ct();let e=_e("__coord");O.batch(()=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Ye&&setBridgeFact(e,tt,{...Ye.init});}),je&&je.reset(),re=null;for(let n of Object.keys(X))delete X[n];ce();},async checkpoint(e){se();for(let[o,r]of Object.entries(ue))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${o}" is running`);for(let[o,r]of Object.entries(ze))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${o}" is running`);if(!O.debug?.export)throw new Error("[Directive MultiAgent] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let n={version:1,id:vt(),createdAt:new Date().toISOString(),label:e?.label,systemExport:O.debug.export(),timelineExport:N?.export()??null,localState:{type:"multi",globalTokenCount:De,globalStatus:Ke,agentStates:Object.fromEntries(Object.entries(ue).map(([o,r])=>[o,structuredClone(r)])),handoffCounter:ae,pendingHandoffs:[...V],handoffResults:[...xe],roundRobinCounters:Qe?Object.fromEntries(Qe):null,taskStates:Object.fromEntries(Object.entries(ze).map(([o,r])=>[o,{lastOutput:r.lastOutput!=null?String(r.lastOutput):void 0,lastError:r.lastError}]))},memoryExport:A?A.export?.()??null:null,orchestratorType:"multi"};return pe&&await pe.save(n),n},restore(e,n){if(se(),!an(e))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(e.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${e.orchestratorType}"`);if(!O.debug?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");O.debug.import(e.systemExport),n?.restoreTimeline!==false&&e.timelineExport&&N&&N.import(e.timelineExport),e.memoryExport&&A&&A.import&&A.import(e.memoryExport);let o=e.localState;De=o.globalTokenCount,Ke=o.globalStatus,ae=o.handoffCounter,V.length=0,V.push(...o.pendingHandoffs),xe.length=0,xe.push(...o.handoffResults);for(let[r,s]of Object.entries(o.agentStates))ue[r]&&(ue[r]={...s});if(o.roundRobinCounters&&Qe){Qe.clear();for(let[r,s]of Object.entries(o.roundRobinCounters))Qe.set(r,s);}for(let[r,s]of Object.entries(m)){let c=ot.get(r);c&&c.drain(),ot.set(r,new Rt(s.maxConcurrent??1));}if(o.taskStates){for(let[r,s]of Object.entries(o.taskStates)){if(!le[r])throw new Error(`[Directive MultiAgent] Checkpoint references task "${r}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);ze[r]={status:"idle",lastOutput:s.lastOutput,lastError:s.lastError};}for(let[r,s]of Object.entries(le)){let c=be.get(r);c&&c.drain(),be.set(r,new Rt(s.maxConcurrent??1));}}ce();},runParallelStream(e,n,o,r){se();let s=Array.isArray(n)?n:e.map(()=>n);if(s.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${s.length}) must match agent count (${e.length})`);let c=new AbortController,l;r?.timeout&&(l=setTimeout(()=>c.abort(),r.timeout));let p=e.map((R,M)=>{let Y=An(R,s[M],{signal:c.signal});return {agentId:R,streamResult:Y}}),b=p.map(({agentId:R,streamResult:M})=>({agentId:R,stream:M.stream})),{stream:C,getDroppedCount:D}=Zn(b),$;r?.signal&&($=()=>c.abort(),r.signal.addEventListener("abort",$,{once:true}));let I=Promise.allSettled(p.map(({streamResult:R})=>R.result)).then(R=>{l&&clearTimeout(l),$&&r?.signal&&r.signal.removeEventListener("abort",$);let M=[];for(let Y of R)Y.status==="fulfilled"&&M.push(Y.value);if(r?.minSuccess!==void 0&&M.length<r.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${M.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess})`);return M}),H=I.then(R=>o(R));return I.catch(()=>{}),H.catch(()=>{}),{stream:C,results:I,merge:H,getDroppedCount:D,abort:()=>{c.abort(),$&&r?.signal&&r.signal.removeEventListener("abort",$);for(let{streamResult:R}of p)R.abort();}}},async runRace(e,n,o){se();let r={type:"race",handlers:e,extract:o?.extract,timeout:o?.timeout,minSuccess:o?.minSuccess,signal:o?.signal};return jn(r,n,"__imperative_race")},async runReflect(e,n,o,r){se();let s={type:"reflect",handler:e,evaluator:n,maxIterations:r?.maxIterations,parseEvaluation:r?.parseEvaluation,buildRetryInput:r?.buildRetryInput,extract:r?.extract,onExhausted:r?.onExhausted,onIteration:r?.onIteration,signal:r?.signal,timeout:r?.timeout,threshold:r?.threshold},c=await dn(s,o,"__imperative_reflect"),l=re?[...re]:[],p=r?.maxIterations??2,b=l.length>0&&!l[l.length-1].passed&&l.length>=p;return {result:c,iterations:l.length,history:l,exhausted:b}},async runDebate(e,n,o,r){return se(),pn({handlers:e,evaluator:n,maxRounds:r?.maxRounds,extract:r?.extract,parseJudgement:r?.parseJudgement,signal:r?.signal,timeout:r?.timeout},o,"__imperative_debate")},async runGoal(e,n,o,r){return se(),gn({nodes:e,when:o,satisfaction:r?.satisfaction,maxSteps:r?.maxSteps,extract:r?.extract,timeout:r?.timeout,signal:r?.signal,selectionStrategy:r?.selectionStrategy,relaxation:r?.relaxation,onStep:r?.onStep,onStall:r?.onStall,checkpoint:r?.checkpoint},n,"__imperative_goal")},async resumeGoal(e,n){if(se(),!e||e.version!==1||e.type!=="goal"&&e.type!=="converge")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");let o=e.type==="converge"?{...e}:e;return gn(n,{},o.patternId,o)},async resumeSequential(e,n){if(se(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return xn(n,e.currentInput,e.patternId,e)},async resumeSupervisor(e,n,o){if(se(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let r=o?.input??e.currentInput;return Cn(n,r,e.patternId,e)},async resumeReflect(e,n,o){if(se(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let r=o?.input??e.effectiveInput;return dn(n,r,e.patternId,e)},async resumeDebate(e,n){if(se(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return pn(n,e.currentInput,e.patternId,e)},async resumeDag(e,n,o){if(se(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let r=o?.input??e.input;return Dn(n,r,e.patternId,e)},async replay(e,n,o){if(se(),!pe)throw new Error("[Directive MultiAgent] No checkpoint store configured");let r=await pe.load(e);if(!r)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let s;try{let p=JSON.parse(r.systemExport);if(!p||typeof p!="object")throw new Error("Parsed checkpoint state is not an object");let b=new Set(["__proto__","constructor","prototype"]);for(let D of Object.keys(p))if(b.has(D))throw new Error(`Checkpoint state contains blocked key: ${D}`);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}`);s=p;}catch(p){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${p instanceof Error?p.message:String(p)}`)}let c=Qn(s),l=o?.input??("currentInput"in s?s.currentInput:"");switch(N&&N.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:s.type,step:c}),s.type){case "sequential":return xn(n,l,s.patternId,s);case "supervisor":return Cn(n,l,s.patternId,s);case "reflect":return dn(n,l,s.patternId,s);case "debate":return pn(n,l,s.patternId,s);case "dag":return Dn(n,l,s.patternId,s);case "goal":return gn(n,s.facts,s.patternId,s)}},resumeBreakpoint(e,n){se(),n&&Lt.set(e,n);for(let o of Object.keys(m)){let r=_e(o);if(st(r).pending.some(c=>c.id===e)){O.batch(()=>{let c=st(r),l=[...c.resolved,e];at(r,{...c,pending:c.pending.filter(p=>p.id!==e),resolved:l.length>yt?l.slice(-yt):l});});return}}fe&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,n){se(),n&&Zt.set(e,n);for(let o of Object.keys(m)){let r=_e(o);if(st(r).pending.some(c=>c.id===e)){O.batch(()=>{let c=st(r),l=[...c.cancelled,e];at(r,{...c,pending:c.pending.filter(p=>p.id!==e),cancelled:l.length>yt?l.slice(-yt):l});});return}}fe&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let n of Object.keys(m)){let o=_e(n),r=st(o);e.push(...r.pending);}return e},getLastReflectionHistory(){return re?[...re]:null},dispose(){Ve||(qn.reset(),it.clear(),dt.clear(),qe.clear(),lt.clear(),Ve=true,O.destroy());}};return ce(),qn}function nr(i,t,u){return {type:"dag",nodes:i,merge:t??(a=>a.outputs),...u}}function Br(i,t){let u=Object.keys(t);for(let[w,v]of Object.entries(t))for(let A of v.deps??[])if(!t[A])throw new Error(`[Directive MultiAgent] DAG pattern "${i}": node "${w}" depends on unknown node "${A}"`);if(!u.some(w=>{let v=t[w]?.deps;return !v||v.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${i}": no root nodes (every node has dependencies)`);let d=Object.create(null),f=Object.create(null);for(let w of u)f[w]=[];for(let[w,v]of Object.entries(t)){d[w]=(v.deps??[]).length;for(let A of v.deps??[])f[A].push(w);}let k=[];for(let w of u)d[w]===0&&k.push(w);let S=0;for(;k.length>0;){let w=k.shift();S++;for(let v of f[w]??[])d[v]--,d[v]===0&&k.push(v);}if(S!==u.length)throw new Error(`[Directive MultiAgent] DAG pattern "${i}": cycle detected. Visited ${S}/${u.length} nodes.`)}function rr(i={}){let{defaultResponse:t={output:"mock response",totalTokens:10},responses:u={},recordCalls:a=true,onRun:d}=i,f=[],k=new Map(Object.entries(u)),S=t;return {run:async(v,A,Q)=>{d?.(v,A),a&&f.push({agent:v,input:A,options:Q,timestamp:Date.now()});let F=k.get(v.name)??S;if(F.generate){let G=F.generate(A,v);F={...F,...G};}if(F.error)throw F.error;F.delay&&F.delay>0&&await new Promise(G=>setTimeout(G,F.delay));let Ce=F.messages??[];for(let G of Ce)Q?.onMessage?.(G);let Fe=F.toolCalls??[];for(let G of Fe)Q?.onToolCall?.(G);return {output:F.output,messages:Ce,toolCalls:Fe,totalTokens:F.totalTokens??10}},getCalls:()=>[...f],getCallsFor:v=>f.filter(A=>A.agent.name===v),clearCalls:()=>f.length=0,setResponse:(v,A)=>k.set(v,A),setDefaultResponse:v=>S=v}}async function Lr(i,t,u){let a={agentName:"test-agent",input:"",...t},d={agentName:t.agentName??"test-agent",input:t.input??"",facts:u?.facts??{},...u},f=Date.now(),k=await i(a,d),S=Date.now()-f;return {...k,duration:S,testedData:a,assertPassed(){if(!k.passed)throw new Error(`Expected guardrail to pass, but it failed: ${k.reason}`)},assertFailed(w){if(k.passed)throw new Error("Expected guardrail to fail, but it passed");if(w!==void 0){if(typeof w=="string"&&!k.reason?.includes(w))throw new Error(`Expected failure reason to include "${w}", got: ${k.reason}`);if(w instanceof RegExp&&!w.test(k.reason??""))throw new Error(`Expected failure reason to match ${w}, got: ${k.reason}`)}},assertTransformed(w){if(k.transformed===void 0)throw new Error("Expected guardrail to transform input, but no transformation occurred");if(w!==void 0&&k.transformed!==w)throw new Error(`Expected transformation to be ${JSON.stringify(w)}, got: ${JSON.stringify(k.transformed)}`)}}}async function Io(i,t){let u=[],a=[];for(let d=0;d<t.length;d++){let f=t[d],k=await Lr(i,f.input,f.context);u.push(k),(k.passed?k.transformed!==void 0?"transform":"pass":"fail")!==f.expect&&a.push({index:d,expected:f.expect,actual:k});}return {results:u,allPassed:()=>a.length===0,failures:()=>a}}function or(i={}){let{autoApprove:t,autoReject:u,delay:a=0,recordRequests:d=true}=i,f=[],k=new Map,S=[];return {async handle(w){d&&f.push(w);for(let v=S.length-1;v>=0;v--){let A=S[v];A.predicate(w)&&(S.splice(v,1),A.resolve(w));}return a>0&&await new Promise(v=>setTimeout(v,a)),u&&u(w)?"rejected":t?.(w)?"approved":new Promise(v=>{k.set(w.id,{request:w,resolve:v});})},getRequests:()=>[...f],clearRequests:()=>f.length=0,approve(w){let v=k.get(w);v&&(v.resolve("approved"),k.delete(w));},reject(w,v){let A=k.get(w);if(A){A.resolve("rejected"),k.delete(w);let Q=f.find(F=>F.id===w);Q&&(Q.rejectionReason=v);}},waitForRequest(w,v=5e3){let A=f.find(w);return A?Promise.resolve(A):new Promise((Q,F)=>{let Ce={predicate:w,resolve:G=>{clearTimeout(Fe),Q(G);}},Fe=setTimeout(()=>{let G=S.indexOf(Ce);G>=0&&S.splice(G,1),F(new Error("Timeout waiting for approval request"));},v);S.push(Ce);})}}}function No(i={}){let{mockResponses:t,defaultMockResponse:u,...a}=i,d=rr({responses:t,defaultResponse:u}),f=or(),k=Yn({...a,runner:d.run,onApprovalRequest:w=>{f.handle(w),a.onApprovalRequest?.(w);}}),S=Object.create(k);return S.mockRunner=d,S.approvalSimulator=f,S.getCalls=()=>d.getCalls(),S.getApprovalRequests=()=>f.getRequests(),S.resetAll=()=>{k.reset(),d.clearCalls(),f.clearRequests();},S}function $o(){let i=[];return {plugin:{name:"constraint-recorder",onRequirementCreated(t){i.push({constraintId:t.constraintId,triggered:true,requirement:t.requirement,facts:t.facts,timestamp:Date.now()});}},getSnapshots:()=>[...i],clearSnapshots:()=>i.length=0}}function jo(i,t){let u=i.facts;if(t.agentStatus!==void 0&&u.agent.status!==t.agentStatus)throw new Error(`Expected agent status to be "${t.agentStatus}", got "${u.agent.status}"`);if(t.tokenUsage!==void 0){let{min:a,max:d,exact:f}=t.tokenUsage;if(f!==void 0&&u.agent.tokenUsage!==f)throw new Error(`Expected token usage to be exactly ${f}, got ${u.agent.tokenUsage}`);if(a!==void 0&&u.agent.tokenUsage<a)throw new Error(`Expected token usage to be at least ${a}, got ${u.agent.tokenUsage}`);if(d!==void 0&&u.agent.tokenUsage>d)throw new Error(`Expected token usage to be at most ${d}, got ${u.agent.tokenUsage}`)}if(t.pendingApprovals!==void 0&&u.approval.pending.length!==t.pendingApprovals)throw new Error(`Expected ${t.pendingApprovals} pending approvals, got ${u.approval.pending.length}`);if(t.conversationLength!==void 0){let{min:a,max:d,exact:f}=t.conversationLength,k=u.conversation.length;if(f!==void 0&&k!==f)throw new Error(`Expected conversation length to be exactly ${f}, got ${k}`);if(a!==void 0&&k<a)throw new Error(`Expected conversation length to be at least ${a}, got ${k}`);if(d!==void 0&&k>d)throw new Error(`Expected conversation length to be at most ${d}, got ${k}`)}}function qo(i=Date.now()){let t=i,u=i;return {now:()=>t,advance:a=>{t+=a;},set:a=>{t=a;},reset:()=>{t=u;}}}function Go(i){let{mockResponses:t={},defaultMockResponse:u,mockTasks:a,...d}=i;if(a){let A=d.tasks??{};for(let[Q,F]of Object.entries(a))A[Q]||(A[Q]=Fr(F.output,{delay:F.delay,shouldError:F.shouldError}));d.tasks=A;}let f={};for(let[A,Q]of Object.entries(t)){let F=d.agents[A];F&&(f[F.agent.name]=Q);}let k=rr({responses:f,defaultResponse:u}),S=or(),w=tr({...d,runner:k.run,onApprovalRequest:A=>{S.handle(A),d.onApprovalRequest?.(A);}}),v=Object.create(w);return v.mockRunner=k,v.approvalSimulator=S,v.getCalls=()=>k.getCalls(),v.getApprovalRequests=()=>S.getRequests(),v.resetAll=()=>{w.reset(),k.clearCalls(),S.clearRequests();},v}function Bo(i,t){if(t.taskStatus)for(let[u,a]of Object.entries(t.taskStatus)){let d=i.getTaskState(u);if(!d)throw new Error(`Expected task "${u}" to exist, but it was not found`);if(d.status!==a)throw new Error(`Expected task "${u}" status to be "${a}", got "${d.status}"`)}if(t.agentStatus)for(let[u,a]of Object.entries(t.agentStatus)){let d=i.getAgentState(u);if(!d)throw new Error(`Expected agent "${u}" to exist, but it was not found`);if(d.status!==a)throw new Error(`Expected agent "${u}" status to be "${a}", got "${d.status}"`)}if(t.totalTokens){let{agentId:u,min:a,max:d}=t.totalTokens;if(u){let f=i.getAgentState(u);if(!f)throw new Error(`Expected agent "${u}" to exist, but it was not found`);if(a!==void 0&&f.totalTokens<a)throw new Error(`Expected agent "${u}" tokens to be at least ${a}, got ${f.totalTokens}`);if(d!==void 0&&f.totalTokens>d)throw new Error(`Expected agent "${u}" tokens to be at most ${d}, got ${f.totalTokens}`)}else {let f=i.getAllAgentStates(),k=Object.values(f).reduce((S,w)=>S+w.totalTokens,0);if(a!==void 0&&k<a)throw new Error(`Expected total tokens to be at least ${a}, got ${k}`);if(d!==void 0&&k>d)throw new Error(`Expected total tokens to be at most ${d}, got ${k}`)}}if(t.globalTokens){let{min:u,max:a}=t.globalTokens,d=i.totalTokens;if(u!==void 0&&d<u)throw new Error(`Expected global tokens to be at least ${u}, got ${d}`);if(a!==void 0&&d>a)throw new Error(`Expected global tokens to be at most ${a}, got ${d}`)}if(t.pendingHandoffs!==void 0){let u=i.getPendingHandoffs().length;if(u!==t.pendingHandoffs)throw new Error(`Expected ${t.pendingHandoffs} pending handoffs, got ${u}`)}}function Fr(i,t){return {run:async(u,a)=>{if(a.aborted)throw new Error("Task aborted");if(t?.delay&&t.delay>0&&await new Promise((d,f)=>{let k=setTimeout(d,t.delay);a.addEventListener("abort",()=>{clearTimeout(k),f(new Error("Task aborted"));},{once:true});}),t?.shouldError)throw new Error("Mock task error");return i},label:t?.label??"Mock Task",description:t?.description}}function Fo(i,t,u){return nr(i,t??(d=>d.outputs),u)}function Ho(i,t){if(t.nodeStatuses)for(let[u,a]of Object.entries(t.nodeStatuses)){let d=i.statuses[u];if(d!==a)throw new Error(`Expected node "${u}" status to be "${a}", got "${d}"`)}if(t.completedNodes){for(let u of t.completedNodes)if(i.statuses[u]!=="completed")throw new Error(`Expected node "${u}" to be completed, got "${i.statuses[u]}"`)}if(t.skippedNodes){for(let u of t.skippedNodes)if(i.statuses[u]!=="skipped")throw new Error(`Expected node "${u}" to be skipped, got "${i.statuses[u]}"`)}if(t.errorNodes){for(let u of t.errorNodes)if(i.statuses[u]!=="error")throw new Error(`Expected node "${u}" to be error, got "${i.statuses[u]}"`)}if(t.outputContains)for(let[u,a]of Object.entries(t.outputContains)){let d=i.outputs[u];if(d!==a)throw new Error(`Expected node "${u}" output to be ${JSON.stringify(a)}, got ${JSON.stringify(d)}`)}}function Jo(i,t){let u=Jt({maxEvents:t?.maxEvents??500});if(i)for(let a of i)u.record({timestamp:Date.now(),snapshotId:null,agentId:"",...a});return u}function Wo(i,t){let u=i.getEvents();if(t.totalEvents!==void 0&&u.length!==t.totalEvents)throw new Error(`Expected ${t.totalEvents} timeline events, got ${u.length}`);if(t.minEvents!==void 0&&u.length<t.minEvents)throw new Error(`Expected at least ${t.minEvents} timeline events, got ${u.length}`);if(t.maxEvents!==void 0&&u.length>t.maxEvents)throw new Error(`Expected at most ${t.maxEvents} timeline events, got ${u.length}`);if(t.eventTypes){for(let a of t.eventTypes)if(!u.some(f=>f.type===a))throw new Error(`Expected timeline to contain event of type "${a}", but none found`)}if(t.agentEvents)for(let[a,d]of Object.entries(t.agentEvents)){let f=i.getEventsForAgent(a).length;if(f!==d)throw new Error(`Expected ${d} events for agent "${a}", got ${f}`)}if(t.hasType&&!u.some(d=>d.type===t.hasType))throw new Error(`Expected timeline to contain event of type "${t.hasType}"`);if(t.doesNotHaveType&&u.some(d=>d.type===t.doesNotHaveType))throw new Error(`Expected timeline NOT to contain event of type "${t.doesNotHaveType}"`)}function Ko(i,t){let u=0,a=t?.failAfter??0;return async(d,f,k)=>{if(u++,a>0&&u<=a)return {output:"success",messages:[],toolCalls:[],totalTokens:10};throw t?.delay&&t.delay>0&&await new Promise(S=>setTimeout(S,t.delay)),i??new Error("Runner failed")}}function Vo(i,t){if(i.length===0)throw new Error("Expected at least one reroute event, but none occurred");if(t.minReroutes!==void 0&&i.length<t.minReroutes)throw new Error(`Expected at least ${t.minReroutes} reroute events, got ${i.length}`);if(t.fromAgent&&!i.some(a=>a.originalAgent===t.fromAgent))throw new Error(`Expected reroute from agent "${t.fromAgent}", but no matching event found`);if(t.toAgent&&!i.some(a=>a.reroutedTo===t.toAgent))throw new Error(`Expected reroute to agent "${t.toAgent}", but no matching event found`);if(t.reason&&!i.some(a=>typeof t.reason=="string"?a.reason.includes(t.reason):t.reason.test(a.reason)))throw new Error(`Expected reroute reason matching ${t.reason}, but no matching event found`)}function Xo(i,t,u){let a=i.getMetrics(t);if(u.minScore!==void 0&&a.healthScore<u.minScore)throw new Error(`Expected agent "${t}" health score to be at least ${u.minScore}, got ${a.healthScore}`);if(u.maxScore!==void 0&&a.healthScore>u.maxScore)throw new Error(`Expected agent "${t}" health score to be at most ${u.maxScore}, got ${a.healthScore}`);if(u.circuitState!==void 0&&a.circuitState!==u.circuitState)throw new Error(`Expected agent "${t}" circuit state to be "${u.circuitState}", got "${a.circuitState}"`);if(u.minSuccessRate!==void 0&&a.successRate<u.minSuccessRate)throw new Error(`Expected agent "${t}" success rate to be at least ${u.minSuccessRate}, got ${a.successRate}`)}function Yo(i=100){let t=new Rn({maxCheckpoints:i}),u=[];return {inner:t,saved:u,getLatest:()=>u[u.length-1],async save(a){return u.push(a),t.save(a)},load:a=>t.load(a),list:()=>t.list(),delete:a=>t.delete(a),clear:()=>t.clear(),prune:()=>t.prune()}}function zo(i,t){if(t.orchestratorType!==void 0&&i.orchestratorType!==t.orchestratorType)throw new Error(`Expected checkpoint orchestratorType "${t.orchestratorType}", got "${i.orchestratorType}"`);if(t.hasSystemExport===true&&(!i.systemExport||i.systemExport===""))throw new Error("Expected checkpoint to have non-empty systemExport, but it was empty");if(t.hasTimeline===true&&i.timelineExport===null)throw new Error("Expected checkpoint to have timeline export, but it was null");if(t.hasTimeline===false&&i.timelineExport!==null)throw new Error("Expected checkpoint to have no timeline export, but it was present");if(t.hasMemory===true&&i.memoryExport===null)throw new Error("Expected checkpoint to have memory export, but it was null");if(t.hasMemory===false&&i.memoryExport!==null)throw new Error("Expected checkpoint to have no memory export, but it was present");if(t.label!==void 0&&i.label!==t.label)throw new Error(`Expected checkpoint label "${t.label}", got "${i.label}"`)}function Zo(i={}){let t=[],u=null,a=false;return {handler:f=>{if(t.push(f),!a)throw new Error("[Directive] BreakpointSimulator: handler called but attachTo() was never called. Breakpoints will not be resolved. Call simulator.attachTo(orchestrator) after creation.");let k=i.autoResumeDelay??0,S=()=>{u&&(i.cancel?u.cancelBreakpoint(f.id,i.cancelReason):u.resumeBreakpoint(f.id,i.modifications));};k>0?setTimeout(S,k):queueMicrotask(S);},hits:t,attachTo:f=>{u=f,a=true;}}}function Qo(i,t){if(t.count!==void 0&&i.length!==t.count)throw new Error(`Expected ${t.count} breakpoint hits, got ${i.length}`);if(t.type&&!i.some(a=>a.type===t.type)){let a=i.map(d=>d.type).join(", ");throw new Error(`Expected breakpoint of type "${t.type}", found types: [${a}]`)}if(t.agentId&&!i.some(a=>a.agentId===t.agentId)){let a=i.map(d=>d.agentId).join(", ");throw new Error(`Expected breakpoint for agent "${t.agentId}", found agents: [${a}]`)}}function es(i,t){return {safeParse:u=>i(u)?{success:true,data:u}:{success:false,error:{message:"Validation failed"}},description:t}}async function ts(i){let t=[];for await(let u of i)t.push(u);return t}function ns(i,t){if(t.minChunks!==void 0&&i.length<t.minChunks)throw new Error(`Expected at least ${t.minChunks} chunks, got ${i.length}`);if(t.agentIds){let u=new Set(i.map(a=>a.agentId));for(let a of t.agentIds)if(!u.has(a))throw new Error(`Expected chunks from agent "${a}", found agents: [${[...u].join(", ")}]`)}if(t.hasDone===true&&!i.some(a=>a.chunk.type==="done"))throw new Error("Expected at least one 'done' chunk, found none");if(t.hasErrors===true&&!i.some(a=>a.chunk.type==="error"))throw new Error("Expected at least one 'error' chunk, found none");if(t.hasErrors===false&&i.some(a=>a.chunk.type==="error"))throw new Error("Expected no 'error' chunks, but found some")}function rs(i){let t=i?.passAfter??1,u=i?.feedback??"Needs improvement",a=i?.score,d=0;return (f,k)=>{d++;let S=d>=t;return {passed:S,feedback:S?void 0:u,score:a??(S?1:.5)}}}function os(i,t){let u=i.getAll();for(let[a,d]of Object.entries(t)){let f=u[a];if(f!==d)throw new Error(`Expected scratchpad key "${a}" to be ${JSON.stringify(d)}, got ${JSON.stringify(f)}`)}}function ss(i,t){let u=i.derived;for(let[a,d]of Object.entries(t)){let f=u[a];if(typeof d=="object"&&d!==null){let k=S=>JSON.stringify(S,Object.keys(S).sort());if(k(f)!==k(d))throw new Error(`Expected derived value "${a}" to be ${JSON.stringify(d)}, got ${JSON.stringify(f)}`)}else if(f!==d)throw new Error(`Expected derived value "${a}" to be ${JSON.stringify(d)}, got ${JSON.stringify(f)}`)}}export{Xo as assertAgentHealth,Qo as assertBreakpointHit,zo as assertCheckpoint,Ho as assertDagExecution,ss as assertDerivedValues,Bo as assertMultiAgentState,ns as assertMultiplexedStream,jo as assertOrchestratorState,Vo as assertRerouted,os as assertScratchpadState,Wo as assertTimelineEvents,ts as collectMultiplexedStream,or as createApprovalSimulator,Zo as createBreakpointSimulator,$o as createConstraintRecorder,Ko as createFailingRunner,rr as createMockAgentRunner,es as createMockSchema,Fr as createMockTask,Yo as createTestCheckpointStore,Fo as createTestDag,Go as createTestMultiAgentOrchestrator,No as createTestOrchestrator,rs as createTestReflectionEvaluator,Jo as createTestTimeline,qo as createTimeController,Lr as testGuardrail,Io as testGuardrailBatch};//# sourceMappingURL=testing.js.map
48
+ Original task: ${n}`);}if(R.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let T=p?p(j):j;return {winnerId:Y,result:T,rounds:R}}catch(T){throw v=T instanceof Error?T:new Error(String(T)),T}finally{D&&clearTimeout(D),$&&e.signal&&e.signal.removeEventListener("abort",$),o&&oe("onPatternComplete",{patternId:W,patternType:"debate",durationMs:Date.now()-Z,timestamp:Date.now(),error:v});}}let lr=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ht(e,n){for(let o of Object.keys(n))lr.has(o)||(e[o]=n[o]);}function cr(e,n){let o=Object.create(null);for(let[b,C]of Object.entries(n))for(let D of C.produces)o[D]||(o[D]=[]),o[D].push(b);let r=Object.keys(n),a=Object.create(null),c=Object.create(null);for(let b of r)a[b]=0,c[b]=[];for(let[b,C]of Object.entries(n))for(let D of C.requires??[]){let $=o[D];if($)for(let I of $)I!==b&&(c[I].push(b),a[b]=(a[b]??0)+1);}let l=[];for(let b of r)a[b]===0&&l.push(b);let p=0;for(;l.length>0;){let b=l.shift();p++;for(let C of c[b]??[])a[C]--,a[C]===0&&l.push(C);}if(p!==r.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${p}/${r.length} nodes.`)}function dr(e,n){let o=Object.create(null);for(let[r,a]of Object.entries(n))for(let c of a.produces)o[c]||(o[c]=[]),o[c].push(r);for(let[r,a]of Object.entries(o))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${r}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function He(e,...n){if(e)try{return e(...n)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}async function pr(e,...n){if(e)try{return await e(...n)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}function On(e,n,o){let r=n.slice(-3),a=r.length>0?r.reduce((p,b)=>p+b.satisfactionDelta,0)/r.length:0,c=null;a>0&&e<1&&(c=Math.ceil((1-e)/a));let l=false;if(n.length>=6){let p=n.slice(-3),b=n.slice(-6,-3),C=p.reduce(($,I)=>$+I.satisfactionDelta,0)/3,D=b.reduce(($,I)=>$+I.satisfactionDelta,0)/3;l=C<D*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:c,decelerating:l}}function Qt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function gn(e,n,o,r){let{nodes:a,when:c,satisfaction:l,maxSteps:p=50,extract:b,selectionStrategy:C,relaxation:D,onStep:$,onStall:I}=e,H=Object.create(null);for(let[he,ye]of Object.entries(a))H[he]={...ye};if(Object.keys(H).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let M=o??"__goal";for(let[he,ye]of Object.entries(H))if(!m[ye.handler]&&!le[ye.handler])throw new Error(`[Directive MultiAgent] goal node "${he}" references unregistered handler "${ye.handler}"`);cr(M,H),dr(M,H);for(let[he,ye]of Object.entries(H))ye.extractOutput||console.warn(`[Directive MultiAgent] goal node "${he}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let Y=e.signal,j,L,U=e.timeout??3e5;if(U&&!Y){let he=new AbortController;j=setTimeout(()=>he.abort(),U),Y=he.signal;}else if(U&&Y){let he=new AbortController;j=setTimeout(()=>he.abort(),U),L=()=>he.abort(),Y.addEventListener("abort",L,{once:true}),Y=he.signal;}let _=Date.now();if(N){let he=Object.values(H).map(ye=>ye.handler);N.record({type:"pattern_start",timestamp:_,snapshotId:null,patternId:M,patternType:"goal",handlers:he,taskIds:he.filter(ye=>le[ye]!=null)});}oe("onPatternStart",{patternId:M,patternType:"goal",input:typeof n=="string"?n:JSON.stringify(n),timestamp:_});let h=Object.create(null);r?Ht(h,r.facts):typeof n=="string"?h.input=n:Ht(h,n);let E=r?[...r.executionOrder]:[],W=Object.create(null);if(r)for(let[he,ye]of Object.entries(r.nodeOutputs))W[he]={output:ye.output,totalTokens:ye.totalTokens};let Z=r?[...r.stepMetrics]:[],G=r?[...r.relaxations]:[],v=new Set(r?.completedNodes??[]),T=new Map(r?Object.entries(r.failedNodes).map(([he,ye])=>[he,ye]):[]),P=new Map(r?Object.entries(r.nodeInputHashes):[]),te=Object.create(null);if(r)for(let[he,ye]of Object.entries(r.agentMetrics))te[he]={runs:ye.runs,avgSatisfactionDelta:ye.runs>0?ye.totalDelta/ye.runs:0,tokens:ye.tokens,totalDelta:ye.totalDelta};let B=r?.stallSteps??0,Pe=r?.appliedRelaxationTiers??0,ve=r?.lastSatisfaction??0,Re,$t=false,$e=r?.step??0,pt=e.checkpoint,hr=pt?.everyN??5,qn=pt?.store??pe,br=pt?.labelPrefix??"goal",Bn,kr=3;try{for(let Oe=$e;Oe<p;Oe++){if(He(c,h)===!0){$t=!0;let de=Date.now()-_,ie=Object.values(W).reduce((Te,qe)=>Te+qe.totalTokens,0);return {achieved:!0,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:Oe,totalTokens:ie,durationMs:de,stepMetrics:Z,relaxations:G}}if(Y?.aborted){let de=Date.now()-_,ie=Object.values(W).reduce((Te,qe)=>Te+qe.totalTokens,0);return {achieved:!1,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:Oe,totalTokens:ie,durationMs:de,stepMetrics:Z,relaxations:G,error:"Aborted or timed out"}}let jt=[];for(let[de,ie]of Object.entries(H)){if((T.get(de)??0)>=kr)continue;let Te=ie.requires??[];if(Te.every(Ie=>h[Ie]!=null)){if(v.has(de)){if(!ie.allowRerun)continue;let Ie=JSON.stringify(Te.map(Ue=>h[Ue]));if(P.get(de)===Ie)continue}jt.push(de);}}let Dt=jt;if(C&&jt.length>0){let de=l?He(l,h)??0:He(c,h)===!0?1:0,ie=Qt(de),Te=On(ie,Z,Oe),qe=Object.create(null);for(let[Ue,Se]of Object.entries(te))qe[Ue]={runs:Se.runs,avgSatisfactionDelta:Se.runs>0?Se.totalDelta/Se.runs:0,tokens:Se.tokens};let Ie=C.select(jt,qe,Te);Dt=Ie&&Ie.length>0?Ie:jt;}if(Dt.sort((de,ie)=>(H[ie].priority??0)-(H[de].priority??0)),He($,Oe,{...h},Dt),Dt.length===0){B++;let de=!1;if(D)for(let ie=Pe;ie<D.length;ie++){let Te=D[ie],qe=Te.afterStallSteps??3;if(B>=qe){let Ie=Te.strategy;switch(Ie.type){case "allow_rerun":for(let Ue of Ie.nodes)v.delete(Ue),P.delete(Ue);break;case "alternative_nodes":for(let Ue of Ie.nodes){let Se=`__relaxation_${ie}_${Ue.handler}`;H[Se]={...Ue};}break;case "inject_facts":Ht(h,Ie.facts);break;case "accept_partial":{let Ue=Date.now()-_,Se=Object.values(W).reduce((Be,kt)=>Be+kt.totalTokens,0);return {achieved:!1,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:Oe,totalTokens:Se,durationMs:Ue,stepMetrics:Z,relaxations:G,error:`Accepted partial result via relaxation tier "${Te.label}"`}}case "custom":{let Ue=He(l,h)??0,Se={step:Oe,facts:{...h},metrics:On(Qt(Ue),Z,Oe),completedNodes:new Set(v),failedNodes:new Map(T)};await pr(Ie.apply,Se);break}}G.push({step:Oe,tierIndex:ie,label:Te.label,strategy:Ie.type}),Pe=ie+1,B=0,de=!0;break}}if(!de){let ie=He(l,h)??0,Te=On(Qt(ie),Z,Oe);if(He(I,Oe,Te),!D||Pe>=D.length){let qe=Date.now()-_,Ie=Object.values(W).reduce((Ue,Se)=>Ue+Se.totalTokens,0);return {achieved:!1,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:Oe,totalTokens:Ie,durationMs:qe,stepMetrics:Z,relaxations:G,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}B=0;let vr=Date.now(),yr=l?He(l,h)??0:He(c,h)===!0?1:0,wr=Qt(yr),Ln=0,Ut=[],Rr=Dt.map(async de=>{let ie=H[de],Te=ie.requires??[],qe=JSON.stringify(Te.map(Se=>h[Se]));P.set(de,qe);let Ie,Ue=He(ie.buildInput,h);if(Ue!=null)Ie=Ue;else {let Se=Object.create(null);for(let Be of Te)h[Be]!=null&&(Se[Be]=h[Be]);Object.keys(Se).length>0?Ie=JSON.stringify(Se):h.input!=null?Ie=String(h.input):Ie=JSON.stringify(h);}try{let Se=await Ne(ie.handler,Ie,{signal:Y??void 0,patternId:M});if(W[de]=Se,E.push(de),v.add(de),T.delete(de),ie.extractOutput){let Be=He(ie.extractOutput,Se);Be&&(Ht(h,Be),Ut.push(...Object.keys(Be)));}else {let Be=Se.output;if(Be&&typeof Be=="object")Ht(h,Be),Ut.push(...Object.keys(Be));else if(typeof Be=="string")try{let kt=JSON.parse(Be);if(kt&&typeof kt=="object"&&!Array.isArray(kt))Ht(h,kt),Ut.push(...Object.keys(kt));else for(let Fn of ie.produces)h[Fn]=Be,Ut.push(Fn);}catch{for(let kt of ie.produces)h[kt]=Be,Ut.push(kt);}}return Ln+=Se.totalTokens,{nodeId:de,success:!0}}catch(Se){let Be=(T.get(de)??0)+1;return T.set(de,Be),{nodeId:de,success:!1,error:Se}}});await Promise.allSettled(Rr);let Tr=l?He(l,h)??0:He(c,h)===!0?1:0,fn=Qt(Tr),mn=fn-wr;if(Z.push({step:Oe,durationMs:Date.now()-vr,nodesRun:[...Dt],factsProduced:Ut,satisfaction:fn,satisfactionDelta:mn,tokensConsumed:Ln}),N)for(let de of Dt){let ie=H[de];N.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:ie.handler,step:Oe,nodeId:de,satisfaction:fn,satisfactionDelta:mn});}for(let de of Dt){let ie=H[de];te[ie.handler]||(te[ie.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let Te=te[ie.handler];Te.runs++,Te.totalDelta+=mn,Te.tokens+=W[de]?.totalTokens??0;}if(ve=fn,mn<=0?B++:B=0,pt&&qn&&Oe>$e&&(Oe-$e)%hr===0){let de={type:"goal",version:1,id:yt(),createdAt:new Date().toISOString(),label:`${br}:step-${Oe}`,patternId:M,stepsTotal:p,step:Oe+1,facts:structuredClone(h),completedNodes:[...v],failedNodes:Object.fromEntries(T),nodeInputHashes:Object.fromEntries(P),nodeOutputs:Object.fromEntries(Object.entries(W).map(([Te,qe])=>[Te,{output:qe.output,totalTokens:qe.totalTokens}])),executionOrder:[...E],stepMetrics:[...Z],relaxations:[...G],appliedRelaxationTiers:Pe,stallSteps:B,lastSatisfaction:ve,agentMetrics:Object.fromEntries(Object.entries(te).map(([Te,qe])=>[Te,{runs:qe.runs,totalDelta:qe.totalDelta,tokens:qe.tokens}]))},ie=await Ft(de,qn,pt);ie&&(Bn=ie);}}let he=Date.now()-_,ye=Object.values(W).reduce((Oe,jt)=>Oe+jt.totalTokens,0);return {achieved:!1,result:He(b,h)??h,facts:{...h},executionOrder:E,nodeResults:W,steps:p,totalTokens:ye,durationMs:he,stepMetrics:Z,relaxations:G,error:`Max steps (${p}) exhausted without achieving goal`}}catch(he){throw Re=he instanceof Error?he:new Error(String(he)),he}finally{if(j!=null&&clearTimeout(j),L&&e.signal&&e.signal.removeEventListener("abort",L),N){let he=Object.values(W).reduce((ye,Oe)=>ye+Oe.totalTokens,0);N.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:M,patternType:"goal",durationMs:Date.now()-_,achieved:$t,stepMetrics:Z,relaxations:G,totalTokens:he,...Re?{error:Re.message}:{}});}oe("onPatternComplete",{patternId:M,patternType:"goal",durationMs:Date.now()-_,timestamp:Date.now(),error:Re});}}function gr(e){if(!Ae)return [];let n=[],o=new Set;if(o.add(e),Ae.equivalencyGroups){for(let r of Object.values(Ae.equivalencyGroups))if(r.includes(e))for(let a of r)!o.has(a)&&m[a]&&(n.push(a),o.add(a));}if(Ae.useCapabilities!==false){let r=m[e];if(r?.capabilities&&r.capabilities.length>0)for(let[a,c]of Object.entries(m)){if(o.has(a))continue;let l=c.capabilities??[];r.capabilities.every(p=>l.includes(p))&&(n.push(a),o.add(a));}}if(je){let r=Ae.healthThreshold??30;return n.filter(a=>je.getHealthScore(a)>r)}return n}function fr(e){if(e.length===0)return null;if(!Ae||!je)return e[0]??null;if(Ae.selectionStrategy==="round-robin"&&Qe){let r=[...e].sort().join(","),a=Qe.get(r)??0,c=e[a%e.length];return Qe.set(r,a+1),c}let n=e[0],o=je.getHealthScore(n);for(let r=1;r<e.length;r++){let a=je.getHealthScore(e[r]);a>o&&(n=e[r],o=a);}return n}function mr(e){switch(e.type){case "parallel":return e.handlers;case "sequential":return e.handlers;case "supervisor":return [e.supervisor,...e.workers];case "dag":return Object.values(e.nodes).map(n=>n.handler);case "reflect":return [e.handler,e.evaluator];case "race":return e.handlers;case "debate":return [...e.handlers,e.evaluator];case "goal":return Object.values(e.nodes).map(n=>n.handler);default:return []}}let Gn={system:O,get facts(){return O.facts},get timeline(){return N},get healthMonitor(){return je},get derived(){return Object.freeze({...X})},onDerivedChange(e){return Ge.add(e),()=>{Ge.delete(e);}},get scratchpad(){return Ct},runAgent:Ne,runAgentStream:An,async runPattern(e,n){ae();let o=s[e];if(!o){let c=Object.keys(s).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${c}`)}let r=Date.now();if(N){let c=mr(o);N.record({type:"pattern_start",timestamp:r,snapshotId:null,patternId:e,patternType:o.type,handlers:c,taskIds:c.filter(l=>le[l]!=null)});}let a;try{switch(o.type){case "parallel":return await ur(o,n,e);case "sequential":return await xn(o,n,e);case "supervisor":return await Cn(o,n,e);case "dag":return await Dn(o,n,e);case "reflect":return await dn(o,n,e);case "race":return (await jn(o,n,e)).result;case "debate":return (await pn(o,n,e)).result;case "goal":return (await gn(o,n,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${o.type}`)}}catch(c){throw a=c instanceof Error?c:new Error(String(c)),c}finally{N&&N.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:o.type,durationMs:Date.now()-r,...a?{error:a.message}:{}});}},async runParallel(e,n,o,r){ae();let a=Array.isArray(n)?n:e.map(()=>n);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let c=new AbortController,l;r?.timeout&&(l=setTimeout(()=>c.abort(),r.timeout));try{let p=e.map((D,$)=>Ne(D,a[$],{signal:c.signal}).catch(I=>{if(r?.minSuccess!==void 0)return null;throw I})),b=await Promise.all(p),C=b.filter(D=>D!==null);if(r?.minSuccess!==void 0&&C.length<r.minSuccess){let D=b.length-C.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${C.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess}, failed: ${D})`)}return o(C)}finally{l&&clearTimeout(l);}},async runSequential(e,n,o){ae();let r=[],a=n;for(let c=0;c<e.length;c++){let l=e[c],p=await Ne(l,a);r.push(p),c<e.length-1&&(o?.transform?a=o.transform(p.output,l,c):a=typeof p.output=="string"?p.output:_t(p.output));}return r},async handoff(e,n,o,r){if(ae(),!m[e]){let l=Object.keys(m).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${l}`)}if(!m[n]){let l=Object.keys(m).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${n}" not found. Registered: ${l}`)}{let l=await Nt("pre_handoff",e,m[e].agent.name,o,void 0,{handoff:{fromAgent:e,toAgent:n}});if(l.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};o=l.input;}let a={id:`handoff-${++se}`,fromAgent:e,toAgent:n,input:o,context:r,requestedAt:Date.now()};V.push(a);try{d?.(a);}catch(l){fe&&console.debug("[Directive MultiAgent] onHandoff threw:",l);}oe("onHandoff",a),N&&N.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n});let c=m[n].memory??A;if(c&&r)try{let l=Object.entries(r).map(([p,b])=>`${p}: ${_t(b)}`).join(", ");c.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${l}`}]);}catch(l){fe&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",l);}try{let l=await Ne(n,o),p={request:a,result:l,completedAt:Date.now()};ge(p);try{f?.(p);}catch(C){fe&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",C);}oe("onHandoffComplete",p),N&&N.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n,durationMs:p.completedAt-a.requestedAt});let b=V.indexOf(a);return b>=0&&V.splice(b,1),l}catch(l){let p=V.indexOf(a);throw p>=0&&V.splice(p,1),l}},approve(e){ae();let n=we.get(e);if(n){we.delete(e);let o=_e(n);O.batch(()=>{let r=ut(o),a=200,c=[...r.approved,e];rt(o,{...r,pending:r.pending.filter(l=>l.id!==e),approved:c.length>a?c.slice(-a):c});});return}fe&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,n){ae();let o=we.get(e);if(o){we.delete(e);let r=_e(o);O.batch(()=>{let a=ut(r);n&&fe&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${n}`);let c={id:e,reason:n,rejectedAt:Date.now()},l=200,p=[...a.rejected,c];rt(r,{...a,pending:a.pending.filter(b=>b.id!==e),rejected:p.length>l?p.slice(-l):p});});return}fe&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){ae(),Ke="paused",fe&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){ae(),Ke==="paused"&&(Ke="idle",fe&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let n=ue[e];return n?{...n}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(ue).map(([e,n])=>[e,{...n}]))},getPendingHandoffs(){return [...V]},get totalTokens(){return De},waitForIdle(e){let n=()=>Xe===0&&Object.values(ue).every(o=>o.status==="idle"||o.status==="completed"||o.status==="error");return n()?Promise.resolve():new Promise((o,r)=>{let a=null,c=()=>{lt.delete(l),a&&clearTimeout(a);},l=()=>{n()&&(c(),o());};lt.add(l),e!==void 0&&(a=setTimeout(()=>{c(),r(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,n,o){return Ne(e,n,o)},runStream(e,n,o){return An(e,n,o)},registerAgent(e,n){if(ae(),qt.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(m[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(le[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let o=n.constraints?Vt(n.constraints):{},r=Object.create(null);if(n.resolvers)for(let[c,l]of Object.entries(n.resolvers))r[c]={requirement:l.requirement,key:l.key,resolve:async(p,b)=>{let C=nt(b.facts),$={facts:{...b.facts,...C},runAgent:async(I,H,R)=>t$1(I,H,R),signal:b.signal};return l.resolve(p,$)}};let a=createModule(e,{schema:tn,init:c=>{We(c,{status:"idle",currentAgent:n.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(c,{pending:[],approved:[],rejected:[]}),mt(c,[]),ht(c,[]),st(c,an());},constraints:o,resolvers:Object.keys(r).length>0?r:void 0});O.registerModule(e,a),m[e]=n,ot.set(e,new Rt(n.maxConcurrent??1)),ue[e]={status:"idle",runCount:0,totalTokens:0},fe&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${n.agent.name})`),ce();},unregisterAgent(e){if(ae(),!m[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(ue[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,c]of Object.entries(s)){let l;switch(c.type){case "supervisor":l=[c.supervisor,...c.workers];break;case "dag":l=Object.values(c.nodes).map(p=>p.handler);break;case "reflect":l=[c.handler,c.evaluator];break;case "parallel":case "sequential":case "race":l=c.handlers;break;case "debate":l=[...c.handlers,c.evaluator];break;default:l=[];}l.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let o=ot.get(e);o&&(o.drain(),ot.delete(e));let r=_e(e);r&&O.batch(()=>{We(r,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(r,{pending:[],approved:[],rejected:[]}),mt(r,[]),ht(r,[]),st(r,an());}),delete m[e],delete ue[e],fe&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),ce();},getAgentIds(){return Object.keys(m)},registerTask(e,n){if(ae(),qt.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(!e||typeof e!="string"||e.trim()!==e||e.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(m[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(le[e])throw new Error(`[Directive MultiAgent] Task "${e}" is already registered`);if(n.timeout!==void 0&&(!Number.isFinite(n.timeout)||n.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(n.maxConcurrent!==void 0&&(!Number.isFinite(n.maxConcurrent)||n.maxConcurrent<1||!Number.isInteger(n.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(n.retry){let{attempts:o,delayMs:r}=n.retry;if(!Number.isFinite(o)||o<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(r!==void 0&&(!Number.isFinite(r)||r<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}le[e]=n,ze[e]={status:"idle"},be.set(e,new Rt(n.maxConcurrent??1)),fe&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${n.label??e})`);},unregisterTask(e){if(ae(),!le[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(ze[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let o=be.get(e);o&&(o.drain(),be.delete(e)),delete le[e],delete ze[e],fe&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(le)},getTaskRegistry(){let e=Object.create(null);for(let[n,o]of Object.entries(le))e[n]={label:o.label,description:o.description};return e},getTaskState(e){let n=ze[e];return n?Object.freeze(structuredClone(n)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[n,o]of Object.entries(ze))e[n]=Object.freeze(structuredClone(o));return e},getNodeIds(){return [...Object.keys(m),...Object.keys(le)]},reset(){ae();for(let n of Object.keys(m)){let o=m[n]?.maxConcurrent??1;ue[n]={status:"idle",runCount:0,totalTokens:0};let r=ot.get(n);r&&r.drain(),ot.set(n,new Rt(o));let a=_e(n);O.batch(()=>{We(a,{status:"idle",currentAgent:m[n].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),rt(a,{pending:[],approved:[],rejected:[]}),mt(a,[]),ht(a,[]),st(a,an());});}for(let n of Object.keys(le)){ze[n]={status:"idle"};let o=be.get(n);o&&o.drain(),be.set(n,new Rt(le[n].maxConcurrent??1));}Lt.clear(),Zt.clear(),we.clear(),V.length=0,xe.length=0,se=0,De=0,Ke="idle",Xe=0,ct();let e=_e("__coord");O.batch(()=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Ye&&setBridgeFact(e,tt,{...Ye.init});}),je&&je.reset(),re=null;for(let n of Object.keys(X))delete X[n];ce();},async checkpoint(e){ae();for(let[o,r]of Object.entries(ue))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${o}" is running`);for(let[o,r]of Object.entries(ze))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${o}" is running`);if(!O.debug?.export)throw new Error("[Directive MultiAgent] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let n={version:1,id:yt(),createdAt:new Date().toISOString(),label:e?.label,systemExport:O.debug.export(),timelineExport:N?.export()??null,localState:{type:"multi",globalTokenCount:De,globalStatus:Ke,agentStates:Object.fromEntries(Object.entries(ue).map(([o,r])=>[o,structuredClone(r)])),handoffCounter:se,pendingHandoffs:[...V],handoffResults:[...xe],roundRobinCounters:Qe?Object.fromEntries(Qe):null,taskStates:Object.fromEntries(Object.entries(ze).map(([o,r])=>[o,{lastOutput:r.lastOutput!=null?String(r.lastOutput):void 0,lastError:r.lastError}]))},memoryExport:A?A.export?.()??null:null,orchestratorType:"multi"};return pe&&await pe.save(n),n},restore(e,n){if(ae(),!sn(e))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(e.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${e.orchestratorType}"`);if(!O.debug?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");O.debug.import(e.systemExport),n?.restoreTimeline!==false&&e.timelineExport&&N&&N.import(e.timelineExport),e.memoryExport&&A&&A.import&&A.import(e.memoryExport);let o=e.localState;De=o.globalTokenCount,Ke=o.globalStatus,se=o.handoffCounter,V.length=0,V.push(...o.pendingHandoffs),xe.length=0,xe.push(...o.handoffResults);for(let[r,a]of Object.entries(o.agentStates))ue[r]&&(ue[r]={...a});if(o.roundRobinCounters&&Qe){Qe.clear();for(let[r,a]of Object.entries(o.roundRobinCounters))Qe.set(r,a);}for(let[r,a]of Object.entries(m)){let c=ot.get(r);c&&c.drain(),ot.set(r,new Rt(a.maxConcurrent??1));}if(o.taskStates){for(let[r,a]of Object.entries(o.taskStates)){if(!le[r])throw new Error(`[Directive MultiAgent] Checkpoint references task "${r}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);ze[r]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[r,a]of Object.entries(le)){let c=be.get(r);c&&c.drain(),be.set(r,new Rt(a.maxConcurrent??1));}}ce();},runParallelStream(e,n,o,r){ae();let a=Array.isArray(n)?n:e.map(()=>n);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let c=new AbortController,l;r?.timeout&&(l=setTimeout(()=>c.abort(),r.timeout));let p=e.map((R,M)=>{let Y=An(R,a[M],{signal:c.signal});return {agentId:R,streamResult:Y}}),b=p.map(({agentId:R,streamResult:M})=>({agentId:R,stream:M.stream})),{stream:C,getDroppedCount:D}=Zn(b),$;r?.signal&&($=()=>c.abort(),r.signal.addEventListener("abort",$,{once:true}));let I=Promise.allSettled(p.map(({streamResult:R})=>R.result)).then(R=>{l&&clearTimeout(l),$&&r?.signal&&r.signal.removeEventListener("abort",$);let M=[];for(let Y of R)Y.status==="fulfilled"&&M.push(Y.value);if(r?.minSuccess!==void 0&&M.length<r.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${M.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess})`);return M}),H=I.then(R=>o(R));return I.catch(()=>{}),H.catch(()=>{}),{stream:C,results:I,merge:H,getDroppedCount:D,abort:()=>{c.abort(),$&&r?.signal&&r.signal.removeEventListener("abort",$);for(let{streamResult:R}of p)R.abort();}}},async runRace(e,n,o){ae();let r={type:"race",handlers:e,extract:o?.extract,timeout:o?.timeout,minSuccess:o?.minSuccess,signal:o?.signal};return jn(r,n,"__imperative_race")},async runReflect(e,n,o,r){ae();let a={type:"reflect",handler:e,evaluator:n,maxIterations:r?.maxIterations,parseEvaluation:r?.parseEvaluation,buildRetryInput:r?.buildRetryInput,extract:r?.extract,onExhausted:r?.onExhausted,onIteration:r?.onIteration,signal:r?.signal,timeout:r?.timeout,threshold:r?.threshold},c=await dn(a,o,"__imperative_reflect"),l=re?[...re]:[],p=r?.maxIterations??2,b=l.length>0&&!l[l.length-1].passed&&l.length>=p;return {result:c,iterations:l.length,history:l,exhausted:b}},async runDebate(e,n,o,r){return ae(),pn({handlers:e,evaluator:n,maxRounds:r?.maxRounds,extract:r?.extract,parseJudgement:r?.parseJudgement,signal:r?.signal,timeout:r?.timeout},o,"__imperative_debate")},async runGoal(e,n,o,r){return ae(),gn({nodes:e,when:o,satisfaction:r?.satisfaction,maxSteps:r?.maxSteps,extract:r?.extract,timeout:r?.timeout,signal:r?.signal,selectionStrategy:r?.selectionStrategy,relaxation:r?.relaxation,onStep:r?.onStep,onStall:r?.onStall,checkpoint:r?.checkpoint},n,"__imperative_goal")},async resumeGoal(e,n){if(ae(),!e||e.version!==1||e.type!=="goal"&&e.type!=="converge")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");let o=e.type==="converge"?{...e}:e;return gn(n,{},o.patternId,o)},async resumeSequential(e,n){if(ae(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return xn(n,e.currentInput,e.patternId,e)},async resumeSupervisor(e,n,o){if(ae(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let r=o?.input??e.currentInput;return Cn(n,r,e.patternId,e)},async resumeReflect(e,n,o){if(ae(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let r=o?.input??e.effectiveInput;return dn(n,r,e.patternId,e)},async resumeDebate(e,n){if(ae(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return pn(n,e.currentInput,e.patternId,e)},async resumeDag(e,n,o){if(ae(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let r=o?.input??e.input;return Dn(n,r,e.patternId,e)},async replay(e,n,o){if(ae(),!pe)throw new Error("[Directive MultiAgent] No checkpoint store configured");let r=await pe.load(e);if(!r)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let p=JSON.parse(r.systemExport);if(!p||typeof p!="object")throw new Error("Parsed checkpoint state is not an object");let b=new Set(["__proto__","constructor","prototype"]);for(let D of Object.keys(p))if(b.has(D))throw new Error(`Checkpoint state contains blocked key: ${D}`);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}`);a=p;}catch(p){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${p instanceof Error?p.message:String(p)}`)}let c=er(a),l=o?.input??("currentInput"in a?a.currentInput:"");switch(N&&N.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:c}),a.type){case "sequential":return xn(n,l,a.patternId,a);case "supervisor":return Cn(n,l,a.patternId,a);case "reflect":return dn(n,l,a.patternId,a);case "debate":return pn(n,l,a.patternId,a);case "dag":return Dn(n,l,a.patternId,a);case "goal":return gn(n,a.facts,a.patternId,a)}},resumeBreakpoint(e,n){ae(),n&&Lt.set(e,n);for(let o of Object.keys(m)){let r=_e(o);if(at(r).pending.some(c=>c.id===e)){O.batch(()=>{let c=at(r),l=[...c.resolved,e];st(r,{...c,pending:c.pending.filter(p=>p.id!==e),resolved:l.length>vt?l.slice(-vt):l});});return}}fe&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,n){ae(),n&&Zt.set(e,n);for(let o of Object.keys(m)){let r=_e(o);if(at(r).pending.some(c=>c.id===e)){O.batch(()=>{let c=at(r),l=[...c.cancelled,e];st(r,{...c,pending:c.pending.filter(p=>p.id!==e),cancelled:l.length>vt?l.slice(-vt):l});});return}}fe&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let n of Object.keys(m)){let o=_e(n),r=at(o);e.push(...r.pending);}return e},getLastReflectionHistory(){return re?[...re]:null},dispose(){Ve||(Gn.reset(),it.clear(),dt.clear(),Ge.clear(),lt.clear(),Ve=true,O.destroy());}};return ce(),Gn}function Br(i,t){let u=Object.keys(t);for(let[w,y]of Object.entries(t))for(let A of y.deps??[])if(!t[A])throw new Error(`[Directive MultiAgent] DAG pattern "${i}": node "${w}" depends on unknown node "${A}"`);if(!u.some(w=>{let y=t[w]?.deps;return !y||y.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${i}": no root nodes (every node has dependencies)`);let d=Object.create(null),f=Object.create(null);for(let w of u)f[w]=[];for(let[w,y]of Object.entries(t)){d[w]=(y.deps??[]).length;for(let A of y.deps??[])f[A].push(w);}let k=[];for(let w of u)d[w]===0&&k.push(w);let S=0;for(;k.length>0;){let w=k.shift();S++;for(let y of f[w]??[])d[y]--,d[y]===0&&k.push(y);}if(S!==u.length)throw new Error(`[Directive MultiAgent] DAG pattern "${i}": cycle detected. Visited ${S}/${u.length} nodes.`)}function rr(i={}){let{defaultResponse:t={output:"mock response",totalTokens:10},responses:u={},recordCalls:s=true,onRun:d}=i,f=[],k=new Map(Object.entries(u)),S=t;return {run:async(y,A,Q)=>{d?.(y,A),s&&f.push({agent:y,input:A,options:Q,timestamp:Date.now()});let F=k.get(y.name)??S;if(F.generate){let q=F.generate(A,y);F={...F,...q};}if(F.error)throw F.error;F.delay&&F.delay>0&&await new Promise(q=>setTimeout(q,F.delay));let Ce=F.messages??[];for(let q of Ce)Q?.onMessage?.(q);let Fe=F.toolCalls??[];for(let q of Fe)Q?.onToolCall?.(q);return {output:F.output,messages:Ce,toolCalls:Fe,totalTokens:F.totalTokens??10}},getCalls:()=>[...f],getCallsFor:y=>f.filter(A=>A.agent.name===y),clearCalls:()=>f.length=0,setResponse:(y,A)=>k.set(y,A),setDefaultResponse:y=>S=y}}async function Lr(i,t,u){let s={agentName:"test-agent",input:"",...t},d={agentName:t.agentName??"test-agent",input:t.input??"",facts:u?.facts??{},...u},f=Date.now(),k=await i(s,d),S=Date.now()-f;return {...k,duration:S,testedData:s,assertPassed(){if(!k.passed)throw new Error(`Expected guardrail to pass, but it failed: ${k.reason}`)},assertFailed(w){if(k.passed)throw new Error("Expected guardrail to fail, but it passed");if(w!==void 0){if(typeof w=="string"&&!k.reason?.includes(w))throw new Error(`Expected failure reason to include "${w}", got: ${k.reason}`);if(w instanceof RegExp&&!w.test(k.reason??""))throw new Error(`Expected failure reason to match ${w}, got: ${k.reason}`)}},assertTransformed(w){if(k.transformed===void 0)throw new Error("Expected guardrail to transform input, but no transformation occurred");if(w!==void 0&&k.transformed!==w)throw new Error(`Expected transformation to be ${JSON.stringify(w)}, got: ${JSON.stringify(k.transformed)}`)}}}async function Go(i,t){let u=[],s=[];for(let d=0;d<t.length;d++){let f=t[d],k=await Lr(i,f.input,f.context);u.push(k),(k.passed?k.transformed!==void 0?"transform":"pass":"fail")!==f.expect&&s.push({index:d,expected:f.expect,actual:k});}return {results:u,allPassed:()=>s.length===0,failures:()=>s}}function or(i={}){let{autoApprove:t,autoReject:u,delay:s=0,recordRequests:d=true}=i,f=[],k=new Map,S=[];return {async handle(w){d&&f.push(w);for(let y=S.length-1;y>=0;y--){let A=S[y];A.predicate(w)&&(S.splice(y,1),A.resolve(w));}return s>0&&await new Promise(y=>setTimeout(y,s)),u&&u(w)?"rejected":t?.(w)?"approved":new Promise(y=>{k.set(w.id,{request:w,resolve:y});})},getRequests:()=>[...f],clearRequests:()=>f.length=0,approve(w){let y=k.get(w);y&&(y.resolve("approved"),k.delete(w));},reject(w,y){let A=k.get(w);if(A){A.resolve("rejected"),k.delete(w);let Q=f.find(F=>F.id===w);Q&&(Q.rejectionReason=y);}},waitForRequest(w,y=5e3){let A=f.find(w);return A?Promise.resolve(A):new Promise((Q,F)=>{let Ce={predicate:w,resolve:q=>{clearTimeout(Fe),Q(q);}},Fe=setTimeout(()=>{let q=S.indexOf(Ce);q>=0&&S.splice(q,1),F(new Error("Timeout waiting for approval request"));},y);S.push(Ce);})}}}function qo(i={}){let{mockResponses:t,defaultMockResponse:u,...s}=i,d=rr({responses:t,defaultResponse:u}),f=or(),k=Yn({...s,runner:d.run,onApprovalRequest:w=>{f.handle(w),s.onApprovalRequest?.(w);}}),S=Object.create(k);return S.mockRunner=d,S.approvalSimulator=f,S.getCalls=()=>d.getCalls(),S.getApprovalRequests=()=>f.getRequests(),S.resetAll=()=>{k.reset(),d.clearCalls(),f.clearRequests();},S}function Bo(){let i=[];return {plugin:{name:"constraint-recorder",onRequirementCreated(t){i.push({constraintId:t.constraintId,triggered:true,requirement:t.requirement,facts:t.facts,timestamp:Date.now()});}},getSnapshots:()=>[...i],clearSnapshots:()=>i.length=0}}function Lo(i,t){let u=i.facts;if(t.agentStatus!==void 0&&u.agent.status!==t.agentStatus)throw new Error(`Expected agent status to be "${t.agentStatus}", got "${u.agent.status}"`);if(t.tokenUsage!==void 0){let{min:s,max:d,exact:f}=t.tokenUsage;if(f!==void 0&&u.agent.tokenUsage!==f)throw new Error(`Expected token usage to be exactly ${f}, got ${u.agent.tokenUsage}`);if(s!==void 0&&u.agent.tokenUsage<s)throw new Error(`Expected token usage to be at least ${s}, got ${u.agent.tokenUsage}`);if(d!==void 0&&u.agent.tokenUsage>d)throw new Error(`Expected token usage to be at most ${d}, got ${u.agent.tokenUsage}`)}if(t.pendingApprovals!==void 0&&u.approval.pending.length!==t.pendingApprovals)throw new Error(`Expected ${t.pendingApprovals} pending approvals, got ${u.approval.pending.length}`);if(t.conversationLength!==void 0){let{min:s,max:d,exact:f}=t.conversationLength,k=u.conversation.length;if(f!==void 0&&k!==f)throw new Error(`Expected conversation length to be exactly ${f}, got ${k}`);if(s!==void 0&&k<s)throw new Error(`Expected conversation length to be at least ${s}, got ${k}`);if(d!==void 0&&k>d)throw new Error(`Expected conversation length to be at most ${d}, got ${k}`)}}function Fo(i=Date.now()){let t=i,u=i;return {now:()=>t,advance:s=>{t+=s;},set:s=>{t=s;},reset:()=>{t=u;}}}function Ho(i){let{mockResponses:t={},defaultMockResponse:u,mockTasks:s,...d}=i;if(s){let A=d.tasks??{};for(let[Q,F]of Object.entries(s))A[Q]||(A[Q]=Fr(F.output,{delay:F.delay,shouldError:F.shouldError}));d.tasks=A;}let f={};for(let[A,Q]of Object.entries(t)){let F=d.agents[A];F&&(f[F.agent.name]=Q);}let k=rr({responses:f,defaultResponse:u}),S=or(),w=nr({...d,runner:k.run,onApprovalRequest:A=>{S.handle(A),d.onApprovalRequest?.(A);}}),y=Object.create(w);return y.mockRunner=k,y.approvalSimulator=S,y.getCalls=()=>k.getCalls(),y.getApprovalRequests=()=>S.getRequests(),y.resetAll=()=>{w.reset(),k.clearCalls(),S.clearRequests();},y}function Uo(i,t){if(t.taskStatus)for(let[u,s]of Object.entries(t.taskStatus)){let d=i.getTaskState(u);if(!d)throw new Error(`Expected task "${u}" to exist, but it was not found`);if(d.status!==s)throw new Error(`Expected task "${u}" status to be "${s}", got "${d.status}"`)}if(t.agentStatus)for(let[u,s]of Object.entries(t.agentStatus)){let d=i.getAgentState(u);if(!d)throw new Error(`Expected agent "${u}" to exist, but it was not found`);if(d.status!==s)throw new Error(`Expected agent "${u}" status to be "${s}", got "${d.status}"`)}if(t.totalTokens){let{agentId:u,min:s,max:d}=t.totalTokens;if(u){let f=i.getAgentState(u);if(!f)throw new Error(`Expected agent "${u}" to exist, but it was not found`);if(s!==void 0&&f.totalTokens<s)throw new Error(`Expected agent "${u}" tokens to be at least ${s}, got ${f.totalTokens}`);if(d!==void 0&&f.totalTokens>d)throw new Error(`Expected agent "${u}" tokens to be at most ${d}, got ${f.totalTokens}`)}else {let f=i.getAllAgentStates(),k=Object.values(f).reduce((S,w)=>S+w.totalTokens,0);if(s!==void 0&&k<s)throw new Error(`Expected total tokens to be at least ${s}, got ${k}`);if(d!==void 0&&k>d)throw new Error(`Expected total tokens to be at most ${d}, got ${k}`)}}if(t.globalTokens){let{min:u,max:s}=t.globalTokens,d=i.totalTokens;if(u!==void 0&&d<u)throw new Error(`Expected global tokens to be at least ${u}, got ${d}`);if(s!==void 0&&d>s)throw new Error(`Expected global tokens to be at most ${s}, got ${d}`)}if(t.pendingHandoffs!==void 0){let u=i.getPendingHandoffs().length;if(u!==t.pendingHandoffs)throw new Error(`Expected ${t.pendingHandoffs} pending handoffs, got ${u}`)}}function Fr(i,t){return {run:async(u,s)=>{if(s.aborted)throw new Error("Task aborted");if(t?.delay&&t.delay>0&&await new Promise((d,f)=>{let k=setTimeout(d,t.delay);s.addEventListener("abort",()=>{clearTimeout(k),f(new Error("Task aborted"));},{once:true});}),t?.shouldError)throw new Error("Mock task error");return i},label:t?.label??"Mock Task",description:t?.description}}function Wo(i,t,u){return Qn(i,t??(d=>d.outputs),u)}function Ko(i,t){if(t.nodeStatuses)for(let[u,s]of Object.entries(t.nodeStatuses)){let d=i.statuses[u];if(d!==s)throw new Error(`Expected node "${u}" status to be "${s}", got "${d}"`)}if(t.completedNodes){for(let u of t.completedNodes)if(i.statuses[u]!=="completed")throw new Error(`Expected node "${u}" to be completed, got "${i.statuses[u]}"`)}if(t.skippedNodes){for(let u of t.skippedNodes)if(i.statuses[u]!=="skipped")throw new Error(`Expected node "${u}" to be skipped, got "${i.statuses[u]}"`)}if(t.errorNodes){for(let u of t.errorNodes)if(i.statuses[u]!=="error")throw new Error(`Expected node "${u}" to be error, got "${i.statuses[u]}"`)}if(t.outputContains)for(let[u,s]of Object.entries(t.outputContains)){let d=i.outputs[u];if(d!==s)throw new Error(`Expected node "${u}" output to be ${JSON.stringify(s)}, got ${JSON.stringify(d)}`)}}function Xo(i,t){let u=Jt({maxEvents:t?.maxEvents??500});if(i)for(let s of i)u.record({timestamp:Date.now(),snapshotId:null,agentId:"",...s});return u}function Yo(i,t){let u=i.getEvents();if(t.totalEvents!==void 0&&u.length!==t.totalEvents)throw new Error(`Expected ${t.totalEvents} timeline events, got ${u.length}`);if(t.minEvents!==void 0&&u.length<t.minEvents)throw new Error(`Expected at least ${t.minEvents} timeline events, got ${u.length}`);if(t.maxEvents!==void 0&&u.length>t.maxEvents)throw new Error(`Expected at most ${t.maxEvents} timeline events, got ${u.length}`);if(t.eventTypes){for(let s of t.eventTypes)if(!u.some(f=>f.type===s))throw new Error(`Expected timeline to contain event of type "${s}", but none found`)}if(t.agentEvents)for(let[s,d]of Object.entries(t.agentEvents)){let f=i.getEventsForAgent(s).length;if(f!==d)throw new Error(`Expected ${d} events for agent "${s}", got ${f}`)}if(t.hasType&&!u.some(d=>d.type===t.hasType))throw new Error(`Expected timeline to contain event of type "${t.hasType}"`);if(t.doesNotHaveType&&u.some(d=>d.type===t.doesNotHaveType))throw new Error(`Expected timeline NOT to contain event of type "${t.doesNotHaveType}"`)}function zo(i,t){let u=0,s=t?.failAfter??0;return async(d,f,k)=>{if(u++,s>0&&u<=s)return {output:"success",messages:[],toolCalls:[],totalTokens:10};throw t?.delay&&t.delay>0&&await new Promise(S=>setTimeout(S,t.delay)),i??new Error("Runner failed")}}function Zo(i,t){if(i.length===0)throw new Error("Expected at least one reroute event, but none occurred");if(t.minReroutes!==void 0&&i.length<t.minReroutes)throw new Error(`Expected at least ${t.minReroutes} reroute events, got ${i.length}`);if(t.fromAgent&&!i.some(s=>s.originalAgent===t.fromAgent))throw new Error(`Expected reroute from agent "${t.fromAgent}", but no matching event found`);if(t.toAgent&&!i.some(s=>s.reroutedTo===t.toAgent))throw new Error(`Expected reroute to agent "${t.toAgent}", but no matching event found`);if(t.reason&&!i.some(s=>typeof t.reason=="string"?s.reason.includes(t.reason):t.reason.test(s.reason)))throw new Error(`Expected reroute reason matching ${t.reason}, but no matching event found`)}function Qo(i,t,u){let s=i.getMetrics(t);if(u.minScore!==void 0&&s.healthScore<u.minScore)throw new Error(`Expected agent "${t}" health score to be at least ${u.minScore}, got ${s.healthScore}`);if(u.maxScore!==void 0&&s.healthScore>u.maxScore)throw new Error(`Expected agent "${t}" health score to be at most ${u.maxScore}, got ${s.healthScore}`);if(u.circuitState!==void 0&&s.circuitState!==u.circuitState)throw new Error(`Expected agent "${t}" circuit state to be "${u.circuitState}", got "${s.circuitState}"`);if(u.minSuccessRate!==void 0&&s.successRate<u.minSuccessRate)throw new Error(`Expected agent "${t}" success rate to be at least ${u.minSuccessRate}, got ${s.successRate}`)}function ea(i=100){let t=new Rn({maxCheckpoints:i}),u=[];return {inner:t,saved:u,getLatest:()=>u[u.length-1],async save(s){return u.push(s),t.save(s)},load:s=>t.load(s),list:()=>t.list(),delete:s=>t.delete(s),clear:()=>t.clear(),prune:()=>t.prune()}}function ta(i,t){if(t.orchestratorType!==void 0&&i.orchestratorType!==t.orchestratorType)throw new Error(`Expected checkpoint orchestratorType "${t.orchestratorType}", got "${i.orchestratorType}"`);if(t.hasSystemExport===true&&(!i.systemExport||i.systemExport===""))throw new Error("Expected checkpoint to have non-empty systemExport, but it was empty");if(t.hasTimeline===true&&i.timelineExport===null)throw new Error("Expected checkpoint to have timeline export, but it was null");if(t.hasTimeline===false&&i.timelineExport!==null)throw new Error("Expected checkpoint to have no timeline export, but it was present");if(t.hasMemory===true&&i.memoryExport===null)throw new Error("Expected checkpoint to have memory export, but it was null");if(t.hasMemory===false&&i.memoryExport!==null)throw new Error("Expected checkpoint to have no memory export, but it was present");if(t.label!==void 0&&i.label!==t.label)throw new Error(`Expected checkpoint label "${t.label}", got "${i.label}"`)}function na(i={}){let t=[],u=null,s=false;return {handler:f=>{if(t.push(f),!s)throw new Error("[Directive] BreakpointSimulator: handler called but attachTo() was never called. Breakpoints will not be resolved. Call simulator.attachTo(orchestrator) after creation.");let k=i.autoResumeDelay??0,S=()=>{u&&(i.cancel?u.cancelBreakpoint(f.id,i.cancelReason):u.resumeBreakpoint(f.id,i.modifications));};k>0?setTimeout(S,k):queueMicrotask(S);},hits:t,attachTo:f=>{u=f,s=true;}}}function ra(i,t){if(t.count!==void 0&&i.length!==t.count)throw new Error(`Expected ${t.count} breakpoint hits, got ${i.length}`);if(t.type&&!i.some(s=>s.type===t.type)){let s=i.map(d=>d.type).join(", ");throw new Error(`Expected breakpoint of type "${t.type}", found types: [${s}]`)}if(t.agentId&&!i.some(s=>s.agentId===t.agentId)){let s=i.map(d=>d.agentId).join(", ");throw new Error(`Expected breakpoint for agent "${t.agentId}", found agents: [${s}]`)}}function oa(i,t){return {safeParse:u=>i(u)?{success:true,data:u}:{success:false,error:{message:"Validation failed"}},description:t}}async function aa(i){let t=[];for await(let u of i)t.push(u);return t}function sa(i,t){if(t.minChunks!==void 0&&i.length<t.minChunks)throw new Error(`Expected at least ${t.minChunks} chunks, got ${i.length}`);if(t.agentIds){let u=new Set(i.map(s=>s.agentId));for(let s of t.agentIds)if(!u.has(s))throw new Error(`Expected chunks from agent "${s}", found agents: [${[...u].join(", ")}]`)}if(t.hasDone===true&&!i.some(s=>s.chunk.type==="done"))throw new Error("Expected at least one 'done' chunk, found none");if(t.hasErrors===true&&!i.some(s=>s.chunk.type==="error"))throw new Error("Expected at least one 'error' chunk, found none");if(t.hasErrors===false&&i.some(s=>s.chunk.type==="error"))throw new Error("Expected no 'error' chunks, but found some")}function ia(i){let t=i?.passAfter??1,u=i?.feedback??"Needs improvement",s=i?.score,d=0;return (f,k)=>{d++;let S=d>=t;return {passed:S,feedback:S?void 0:u,score:s??(S?1:.5)}}}function ua(i,t){let u=i.getAll();for(let[s,d]of Object.entries(t)){let f=u[s];if(f!==d)throw new Error(`Expected scratchpad key "${s}" to be ${JSON.stringify(d)}, got ${JSON.stringify(f)}`)}}function la(i,t){let u=i.derived;for(let[s,d]of Object.entries(t)){let f=u[s];if(typeof d=="object"&&d!==null){let k=S=>JSON.stringify(S,Object.keys(S).sort());if(k(f)!==k(d))throw new Error(`Expected derived value "${s}" to be ${JSON.stringify(d)}, got ${JSON.stringify(f)}`)}else if(f!==d)throw new Error(`Expected derived value "${s}" to be ${JSON.stringify(d)}, got ${JSON.stringify(f)}`)}}export{Qo as assertAgentHealth,ra as assertBreakpointHit,ta as assertCheckpoint,Ko as assertDagExecution,la as assertDerivedValues,Uo as assertMultiAgentState,sa as assertMultiplexedStream,Lo as assertOrchestratorState,Zo as assertRerouted,ua as assertScratchpadState,Yo as assertTimelineEvents,aa as collectMultiplexedStream,or as createApprovalSimulator,na as createBreakpointSimulator,Bo as createConstraintRecorder,zo as createFailingRunner,rr as createMockAgentRunner,oa as createMockSchema,Fr as createMockTask,ea as createTestCheckpointStore,Wo as createTestDag,Ho as createTestMultiAgentOrchestrator,qo as createTestOrchestrator,ia as createTestReflectionEvaluator,Xo as createTestTimeline,Fo as createTimeController,Lr as testGuardrail,Go as testGuardrailBatch};//# sourceMappingURL=testing.js.map
49
49
  //# sourceMappingURL=testing.js.map