@directive-run/ai 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anthropic.cjs.map +1 -1
- package/dist/anthropic.d.cts +1 -1
- package/dist/anthropic.d.ts +1 -1
- package/dist/anthropic.js.map +1 -1
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts +1 -1
- package/dist/gemini.d.ts +1 -1
- package/dist/gemini.js.map +1 -1
- package/dist/index.cjs +49 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +180 -30
- package/dist/index.d.ts +180 -30
- package/dist/index.js +49 -49
- package/dist/index.js.map +1 -1
- package/dist/{multi-agent-orchestrator-CxL8ycw_.d.cts → multi-agent-orchestrator-CFOzWVNd.d.cts} +434 -171
- package/dist/{multi-agent-orchestrator-uMp8bLfV.d.ts → multi-agent-orchestrator-CH-4Fqzg.d.ts} +434 -171
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.d.cts +1 -1
- package/dist/ollama.d.ts +1 -1
- package/dist/ollama.js.map +1 -1
- package/dist/openai.cjs.map +1 -1
- package/dist/openai.d.cts +1 -1
- package/dist/openai.d.ts +1 -1
- package/dist/openai.js.map +1 -1
- package/dist/testing.cjs +24 -24
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +38 -7
- package/dist/testing.d.ts +38 -7
- package/dist/testing.js +24 -24
- package/dist/testing.js.map +1 -1
- package/dist/{types-Co4BzMiH.d.cts → types-D5veI9su.d.cts} +96 -13
- package/dist/{types-Co4BzMiH.d.ts → types-D5veI9su.d.ts} +96 -13
- package/package.json +2 -2
package/dist/testing.js
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import {requirementGuard,createCallbackPlugin,setBridgeFact,getBridgeFact}from'@directive-run/core/adapter-utils';import {t,createModule,createSystem}from'@directive-run/core';var Bn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function mt(){let i=Date.now().toString(36),t=crypto.randomUUID().slice(0,8);return `ckpt_${i}_${t}`}function Qt(i){if(!i||typeof i!="object")return false;for(let a of Object.keys(i))if(Bn.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(Bn.has(a))return false;let u=t.localState;return !(u.type!=="single"&&u.type!=="multi"||t.orchestratorType!=="single"&&t.orchestratorType!=="multi")}var pn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(t){if(this.maxCheckpoints=t?.maxCheckpoints??100,this.retentionMs=t?.retentionMs??1/0,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(!Qt(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 p of this.order){let f=this.store.get(p);if(!f)continue;if(new Date(f.createdAt).getTime()>=t)break;this.preserveLabeled&&f.label||a.push(p);}for(let p of a){this.store.delete(p);let f=this.order.indexOf(p);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],p=this.store.get(a);if(p&&!p.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}};var tt=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}}};var gn="__agent",Et="__approval",fn="__conversation",mn="__toolCalls",At="__breakpoints";var ze="__scratchpad",tn={facts:{[gn]:t.object(),[Et]:t.object(),[fn]:t.array(),[mn]:t.array(),[At]:t.object()},derivations:{},events:{},requirements:{}};var hr=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"]),Ln=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ht(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=[],p=0,f=new Set;return {record(R){let k={...R,id:p++};a.push(k);let v=a.length-t;v>0&&a.splice(0,v);for(let A of f)try{A(k);}catch(Y){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.error("[Directive DebugTimeline] Listener threw:",Y instanceof Error?Y.message:Y);}return k},getEvents(){return [...a]},getEventsForAgent(R){return a.filter(k=>k.agentId===R)},getEventsByType(R){return a.filter(k=>k.type===R)},getEventsAtSnapshot(R){return a.filter(k=>k.snapshotId===R)},getEventsInRange(R,k){return a.filter(v=>v.timestamp>=R&&v.timestamp<=k)},forkFrom(R){let k=-1;for(let v=a.length-1;v>=0;v--)if(a[v].snapshotId!==null&&a[v].snapshotId<=R){k=a[v].id;break}if(k>=0){let v=a.length;for(let A=a.length-1;A>=0;A--)if(a[A].id<=k){v=A+1;break}a=a.slice(0,v);}else a=[];u&&u(R);},export(){return JSON.stringify({version:1,events:a,nextId:p})},import(R){let k;try{k=JSON.parse(R);}catch{throw new Error("[Directive DebugTimeline] Invalid JSON")}if(!k||typeof k!="object")throw new Error("[Directive DebugTimeline] Invalid timeline data");for(let Y of Object.keys(k))if(Ln.has(Y))throw new Error(`[Directive DebugTimeline] Blocked key in import: ${Y}`);let v=k;if(!Array.isArray(v.events))throw new Error("[Directive DebugTimeline] Missing events array");let A=[];for(let Y of v.events){if(!Y||typeof Y!="object")continue;for(let Ee of Object.keys(Y))if(Ln.has(Ee))throw new Error(`[Directive DebugTimeline] Blocked key in event: ${Ee}`);let X=Y;typeof X.id=="number"&&typeof X.type=="string"&&hr.has(X.type)&&typeof X.timestamp=="number"&&A.push(Y);}a=A.length>t?A.slice(-t):A,p=typeof v.nextId=="number"?v.nextId:A.length;},clear(){a=[],p=0;},subscribe(R){return f.add(R),()=>{f.delete(R);}},get length(){return a.length}}}function hn(i,t){let u=new Map;return {name:"directive-ai-debug-timeline",onConstraintEvaluate(a,p){i.record({type:"constraint_evaluate",timestamp:Date.now(),snapshotId:t(),constraintId:a,fired:p});},onResolverStart(a,p){u.set(a,Date.now()),i.record({type:"resolver_start",timestamp:Date.now(),snapshotId:t(),resolverId:a,requirementType:p.requirement.type});},onResolverComplete(a){let p=u.get(a);u.delete(a),i.record({type:"resolver_complete",timestamp:Date.now(),snapshotId:t(),resolverId:a,durationMs:p?Date.now()-p:0});},onResolverError(a,p,f){let b=u.get(a);u.delete(a);let R=f instanceof Error?f.message:String(f);i.record({type:"resolver_error",timestamp:Date.now(),snapshotId:t(),resolverId:a,errorMessage:R,durationMs:b?Date.now()-b:0});}}}function ut(i,t,u){return typeof i=="function"?{name:`${u}-guardrail-${t}`,fn:i,critical:true}:i}function br(i,t){let{backoff:u="exponential",baseDelayMs:a=100,maxDelayMs:p=5e3}=t,f;switch(u){case "exponential":f=a*Math.pow(2,i-1);break;case "linear":f=a*i;break;default:f=a;}return Math.min(f,p)}function Fn(i,t){return t?.aborted?Promise.reject(t.reason??new Error("Aborted")):new Promise((u,a)=>{if(!t){setTimeout(u,i);return}let p=()=>{clearTimeout(f),a(t.reason??new Error("Aborted"));},f=setTimeout(()=>{t.removeEventListener("abort",p),u();},i);t.addEventListener("abort",p,{once:true});})}async function lt(i,t,u,a){let{retry:p}=i,f=Math.max(p?.attempts??1,1),b;for(let R=1;R<=f;R++)try{return await i.fn(t,u)}catch(k){if(b=k instanceof Error?k:new Error(String(k)),R<f){let v=br(R,p??{});await Fn(v,a);}}return {passed:false,reason:`Guardrail "${i.name}" failed after ${f} attempt(s): ${b.message}`}}function kr(i,t){let{backoff:u="exponential",baseDelayMs:a=1e3,maxDelayMs:p=3e4}=t,f;switch(u){case "exponential":f=a*Math.pow(2,i-1);break;case "linear":f=a*i;break;default:f=a;}return Math.min(f,p)}async function nn(i,t,u,a,p){let f=Math.max(p?.attempts??1,1),b=p?.isRetryable??(()=>true),R=p?.onRetry,k;for(let v=1;v<=f;v++)try{return await i(t,u,a)}catch(A){if(k=A instanceof Error?A:new Error(String(A)),v<f){let Y=true;try{Y=b(k);}catch{break}if(!Y)break;let X=kr(v,p??{});try{R?.(v,k,X);}catch{}await Fn(X,a?.signal);}else break}throw k}function Ue(i){return getBridgeFact(i,gn)}function Je(i,t){setBridgeFact(i,gn,t);}function it(i){return getBridgeFact(i,Et)}function Qe(i,t){setBridgeFact(i,Et,t);}function Ut(i){return getBridgeFact(i,fn)}function ct(i,t){setBridgeFact(i,fn,t);}function Jt(i){return getBridgeFact(i,mn)}function dt(i,t){setBridgeFact(i,mn,t);}function nt(i){return getBridgeFact(i,At)}function rt(i,t){setBridgeFact(i,At,t);}function Ze(i){return {agent:Ue(i),approval:it(i),conversation:Ut(i),toolCalls:Jt(i)}}function Wt(i){let t=Object.create(null);for(let[u,a]of Object.entries(i))t[u]={priority:a.priority??0,when:p=>{let f=Ze(p),b={...p,...f};return a.when(b)},require:p=>{let f=Ze(p),b={...p,...f};return typeof a.require=="function"?a.require(b):a.require}};return t}function Hn(i,t,u){let a=Object.create(null);for(let[p,f]of Object.entries(i))a[p]={requirement:f.requirement,key:f.key,resolve:async(b,R)=>{let k=Ze(R.facts),A={facts:{...R.facts,...k},runAgent:async(Y,X,Ee)=>t(Y,X,Ze(u()),Ee),signal:R.signal};await f.resolve(b,A);}};return a}function vr(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("["),p,f,b;if(u===-1&&a===-1)throw new Error("[Directive] No JSON object or array found in output");u===-1?(p=a,f="[",b="]"):a===-1?(p=u,f="{",b="}"):(p=Math.min(u,a),f=p===u?"{":"[",b=p===u?"}":"]");let R=0,k=false,v=false;for(let A=p;A<t.length;A++){let Y=t[A];if(v){v=false;continue}if(Y==="\\"){v=true;continue}if(Y==='"'){k=!k;continue}if(!k){if(Y===f)R++;else if(Y===b&&(R--,R===0)){let X=t.slice(p,A+1);return JSON.parse(X)}}}throw new Error("[Directive] No valid JSON found in output")}function yr(i){return i?i.issues&&i.issues.length>0?i.issues.map(t=>t.message).join("; "):i.message??"Validation failed":"Validation failed"}function bn(i,t){let{schema:u,maxRetries:a=2,extractJson:p=vr,schemaDescription:f}=t;if(!Number.isFinite(a)||a<0)throw new Error("[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.");let b=f??u.description??"the specified JSON schema";return async(R,k,v)=>{let A={...R,instructions:(R.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 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??"")+`
|
|
2
2
|
|
|
3
|
-
IMPORTANT: Respond with valid JSON matching `+
|
|
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}
|
|
4
4
|
|
|
5
|
-
Your previous response was not valid JSON. Error: ${
|
|
6
|
-
Please try again with valid JSON only.`,
|
|
5
|
+
Your previous response was not valid JSON. Error: ${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:
|
|
7
7
|
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
8
|
-
- Provide an onApprovalRequest callback to handle approvals programmatically`);function
|
|
9
|
-
`);
|
|
8
|
+
- Provide an onApprovalRequest callback to handle approvals programmatically`);function 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(`
|
|
9
|
+
`);g={...g,instructions:(g.instructions??"")+`
|
|
10
10
|
|
|
11
11
|
Conversation context:
|
|
12
|
-
`+V};}}if(
|
|
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.
|
|
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
|
-
3. Increase approvalTimeoutMs (current: ${
|
|
17
|
-
See: https://directive.run/docs/ai/running-agents`));},Ke);})}function un(){return {...Ze(S.facts)}}return {system:S,get facts(){return un()},get totalTokens(){return Ue(S.facts).tokenUsage},get timeline(){return x},async run(l,E,K){return ee(l,E,un(),void 0,K)},runStream(l,E,K={}){let $=new AbortController,q=1e4,z=[],de=[],be=false,ae=Date.now(),xe=0,fe=1e5,ie="",We;K.signal&&(We=()=>$.abort(),K.signal.addEventListener("abort",We,{once:true}));let st=()=>{We&&K.signal&&K.signal.removeEventListener("abort",We);},Ce=Q=>{if(be)return;let ne=de.shift();ne?ne(Q):(z.push(Q),z.length>q&&z.shift());},G=()=>{be=true,st();for(let Q of de)Q(null);de.length=0;},V=(async()=>{Ce({type:"progress",phase:"starting",message:"Running input guardrails"});try{let Q=E,ne=(b.input??[]).map((J,Me)=>ut(J,Me,"input"));for(let J of ne){let{name:Me}=J,kt={agentName:l.name,input:Q,facts:S.facts.$store.toObject()},ke=await lt(J,{input:Q,agentName:l.name},kt);if(!ke.passed)throw Ce({type:"guardrail_triggered",guardrailName:Me,reason:ke.reason??"Input validation failed",partialOutput:ie,stopped:!0}),new tt({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${Me}" failed: ${ke.reason}`,guardrailName:Me,guardrailType:"input",userMessage:ke.reason??"Input validation failed",agentName:l.name,input:Q});ke.transformed!==void 0&&(Q=ke.transformed);}Ce({type:"progress",phase:"generating",message:"Starting agent"}),S.batch(()=>{let J=Ue(S.facts);Je(S.facts,{...J,status:"running",currentAgent:l.name,input:Q,startedAt:Date.now()});});let Ae=await nn(t$1,l,Q,{signal:$.signal,onMessage:J=>{let Me=Ut(S.facts);if(ct(S.facts,[...Me,J]),Ce({type:"message",message:J}),J.role==="assistant"&&J.content){let kt=Math.ceil(J.content.length/4);xe+=kt,ie+=J.content,ie.length>fe&&(ie=ie.slice(-fe)),Ce({type:"token",data:J.content,tokenCount:xe});}},onToolCall:async J=>{Ce({type:"tool_start",tool:J.name,toolCallId:J.id,arguments:J.arguments});let Me=(b.toolCall??[]).map((ke,Ye)=>ut(ke,Ye,"toolCall"));for(let ke of Me){let{name:Ye}=ke,gt={agentName:l.name,input:Q,facts:S.facts.$store.toObject()},qt=await lt(ke,{toolCall:J,agentName:l.name,input:Q},gt);if(!qt.passed)throw Ce({type:"guardrail_triggered",guardrailName:Ye,reason:qt.reason??"Tool call blocked",partialOutput:ie,stopped:!0}),new tt({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${Ye}" failed: ${qt.reason}`,guardrailName:Ye,guardrailType:"toolCall",userMessage:qt.reason??"Tool call blocked",data:{toolCall:J},agentName:l.name,input:Q})}if(!k){let ke=`tool-${J.id}`;Ce({type:"approval_required",requestId:ke,toolName:J.name});let Ye={id:ke,type:"tool_call",agentName:l.name,description:`Tool call: ${J.name}`,data:J,requestedAt:Date.now()};S.batch(()=>{let gt=it(S.facts);Qe(S.facts,{...gt,pending:[...gt.pending,Ye]});}),R?.(Ye),await jt(ke,$.signal),Ce({type:"approval_resolved",requestId:ke,approved:!0});}let kt=Jt(S.facts);dt(S.facts,[...kt,J]),J.result&&Ce({type:"tool_end",tool:J.name,toolCallId:J.id,result:J.result});}},N);Ce({type:"progress",phase:"finishing",message:"Running output guardrails"});let Tt=(b.output??[]).map((J,Me)=>ut(J,Me,"output"));for(let J of Tt){let{name:Me}=J,kt={agentName:l.name,input:Q,facts:S.facts.$store.toObject()},ke=await lt(J,{output:Ae.output,agentName:l.name,input:Q,messages:Ae.messages},kt);if(!ke.passed)throw Ce({type:"guardrail_triggered",guardrailName:Me,reason:ke.reason??"Output validation failed",partialOutput:typeof Ae.output=="string"?Ae.output:"",stopped:!0}),new tt({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${Me}" failed: ${ke.reason}`,guardrailName:Me,guardrailType:"output",userMessage:ke.reason??"Output validation failed",agentName:l.name,input:Q});ke.transformed!==void 0&&(Ae.output=ke.transformed);}S.batch(()=>{let J=Ue(S.facts);Je(S.facts,{...J,status:"completed",output:Ae.output,tokenUsage:J.tokenUsage+Ae.totalTokens,turnCount:J.turnCount+Ae.messages.length,completedAt:Date.now()});});let et=Date.now()-ae;return Ce({type:"done",totalTokens:Ae.totalTokens,duration:et,droppedTokens:0}),G(),Ae}catch(Q){throw Ce({type:"error",error:Q instanceof Error?Q:new Error(String(Q))}),G(),Q}})();return V.catch(()=>{}),{stream:{[Symbol.asyncIterator](){return {async next(){return z.length>0?{done:false,value:z.shift()}:be?{done:true,value:void 0}:new Promise(Q=>{de.push(ne=>{Q(ne===null?{done:true,value:void 0}:{done:false,value:ne});});})}}}},result:V,abort:()=>{$.abort(),G();}}},async waitForIdle(l){let E=()=>Ue(S.facts).status!=="running";if(E())return;let K=Date.now();for(;!E();){if(l!==void 0&&Date.now()-K>l)throw new Error("[Directive Orchestrator] waitForIdle timed out");await new Promise($=>setTimeout($,50));}},approve(l){S.batch(()=>{let E=it(S.facts);if(!E.pending.some(q=>q.id===l)){Ve&&console.debug(`[Directive] approve() ignored: no pending request "${l}"`);return}let K=200,$=[...E.approved,l];Qe(S.facts,{...E,pending:E.pending.filter(q=>q.id!==l),approved:$.length>K?$.slice(-K):$});});},reject(l,E){S.batch(()=>{let K=it(S.facts);if(!K.pending.some(de=>de.id===l)){Ve&&console.debug(`[Directive] reject() ignored: no pending request "${l}"`);return}E&&Ve&&console.debug(`[Directive] Request ${l} rejected: ${E}`);let $={id:l,reason:E,rejectedAt:Date.now()},q=200,z=[...K.rejected,$];Qe(S.facts,{...K,pending:K.pending.filter(de=>de.id!==l),rejected:z.length>q?z.slice(-q):z});});},pause(){let l=Ue(S.facts);Je(S.facts,{...l,status:"paused"});},resume(){let l=Ue(S.facts);l.status==="paused"&&Je(S.facts,{...l,status:l.currentAgent?"running":"idle"});},reset(){S.batch(()=>{Je(S.facts,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Qe(S.facts,{pending:[],approved:[],rejected:[]}),ct(S.facts,[]),dt(S.facts,[]),rt(S.facts,{pending:[],resolved:[],cancelled:[]}),setBridgeFact(S.facts,"__budgetWarningFired",false);}),wt.clear(),Rt.clear();},async checkpoint(l){if(Ue(S.facts).status==="running")throw new Error("[Directive] Cannot checkpoint while agent is running");if(!S.debug?.export)throw new Error("[Directive] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let K={version:1,id:mt(),createdAt:new Date().toISOString(),label:l?.label,systemExport:S.debug.export(),timelineExport:x?.export()??null,localState:{type:"single"},memoryExport:ge?ge.export?.()??null:null,orchestratorType:"single"};return Te&&await Te.save(K),K},restore(l,E){if(!Qt(l))throw new Error("[Directive] Invalid checkpoint data");if(l.orchestratorType!=="single")throw new Error("[Directive] Cannot restore multi-agent checkpoint in single-agent orchestrator");if(!S.debug?.import)throw new Error("[Directive] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");S.debug.import(l.systemExport),E?.restoreTimeline!==false&&l.timelineExport&&x&&x.import(l.timelineExport),l.memoryExport!==null&&ge&&ge.import&&ge.import(l.memoryExport);},resumeBreakpoint(l,E){E&&wt.set(l,E),S.batch(()=>{let K=nt(S.facts),$=[...K.resolved,l];rt(S.facts,{...K,pending:K.pending.filter(q=>q.id!==l),resolved:$.length>ht?$.slice(-ht):$});});},cancelBreakpoint(l,E){E&&Rt.set(l,E),S.batch(()=>{let K=nt(S.facts),$=[...K.cancelled,l];rt(S.facts,{...K,pending:K.pending.filter(q=>q.id!==l),cancelled:$.length>ht?$.slice(-ht):$});});},getPendingBreakpoints(){return [...nt(S.facts).pending]},dispose(){S.destroy();}}}var yn=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 _n={successRate:.5,latency:.3,circuitState:.2};function Kn(i={}){let t=i.windowMs??6e4,u=i.maxNormalLatencyMs??5e3,a=i.maxEventsPerAgent??1e3,p={successRate:i.weights?.successRate??_n.successRate,latency:i.weights?.latency??_n.latency,circuitState:i.weights?.circuitState??_n.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[N,U]of Object.entries(p))if(U<0||U>1)throw new Error(`[Directive HealthMonitor] weight "${N}" must be between 0 and 1 (got ${U})`);let f=p.successRate+p.latency+p.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 b=new Map,R=new Map,k=0,v=null,A=-1;function Y(N){let U=b.get(N);return U||(U=[],b.set(N,U)),U}function X(N,U){let ge=U-t,Re=0;for(;Re<N.length&&N[Re].timestamp<ge;)Re++;let Oe=N.length-Re-a;Oe>0&&(Re+=Oe),Re>0&&N.splice(0,Re);}function Ee(N){let U=b.get(N);if(!U||U.length===0)return 50;let ge=Date.now();if(X(U,ge),U.length===0)return 50;let Oe=U.filter(xt=>xt.success).length/U.length,pt=U.reduce((xt,Ve)=>xt+Ve.latencyMs,0)/U.length,vt=Math.min(pt/u,1),Te=R.get(N)??"CLOSED",ce=Te==="CLOSED"?1:Te==="HALF_OPEN"?.5:0,yt=Oe*p.successRate+(1-vt)*p.latency+ce*p.circuitState;return Math.round(yt*100)}function Ke(N){let U=Y(N),ge=Date.now();X(U,ge);let Re=U.filter(ce=>ce.success).length,Oe=U.length-Re,pt=U.length>0?Re/U.length:0,vt=U.length>0?U.reduce((ce,yt)=>ce+yt.latencyMs,0)/U.length:0,Te=[];for(let ce=U.length-1;ce>=0&&Te.length<5;ce--)U[ce].errorMessage&&Te.unshift(U[ce].errorMessage);return {agentId:N,circuitState:R.get(N)??"CLOSED",successRate:pt,avgLatencyMs:vt,recentFailures:Oe,recentSuccesses:Re,healthScore:Ee(N),lastErrors:Te}}return {recordSuccess(N,U){let ge=Y(N);ge.push({success:true,latencyMs:U,timestamp:Date.now()}),X(ge,Date.now()),k++;},recordFailure(N,U,ge){let Re=Y(N);Re.push({success:false,latencyMs:U,timestamp:Date.now(),errorMessage:ge?.message}),X(Re,Date.now()),k++;},getMetrics(N){return Ke(N)},getAllMetrics(){if(k===A&&v)return v;let N=Object.create(null);for(let U of b.keys())N[U]=Ke(U);return v=N,A=k,N},getHealthScore(N){return Ee(N)},updateCircuitState(N,U){R.set(N,U),k++;},reset(){b.clear(),R.clear(),k++,v=null,A=-1;}}}var Cr=1e4;function Vn(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,p=false,f=0;function b(v){if(p)return;let A=u.shift();if(A){A(v);return}t.length<Cr?t.push(v):f++;}function R(){if(a--,a<=0){p=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)b({chunk:A,agentId:v.agentId});}catch(A){b({chunk:{type:"error",error:A instanceof Error?A:new Error(String(A))},agentId:v.agentId});}finally{R();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return t.length>0?{done:false,value:t.shift()}:p?{done:true,value:void 0}:new Promise(v=>{u.push(A=>{v(A===null?{done:true,value:void 0}:{done:false,value:A});});})},return(){p=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 Kt(i){if(typeof i=="string")return i;try{return JSON.stringify(i)}catch{return String(i)}}function _r(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 b=0;b<i.length;b++)if(i[b]!==t[b])return false;return true}let u=i,a=t,p=Object.keys(u),f=Object.keys(a);if(p.length!==f.length)return false;for(let b of p)if(u[b]!==a[b])return false;return true}function Xn(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 Vt=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 p,f={resolve:b=>{p&&t&&t.removeEventListener("abort",p),u(b);},reject:a};this.queue.push(f),t&&(p=()=>{let b=this.queue.indexOf(f);b>=0&&(this.queue.splice(b,1),a(new Error("[Directive Semaphore] Aborted while waiting for permit")));},t.addEventListener("abort",p,{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;}},Mr=requirementGuard("RUN_AGENT");function zn(i){let{runner:t$1,agents:u,patterns:a={},onHandoff:p,onHandoffComplete:f,maxHandoffHistory:b=1e3,debug:R=false,guardrails:k={},hooks:v={},memory:A,agentRetry:Y,maxTokenBudget:X,plugins:Ee=[],onApprovalRequest:Ke,autoApproveToolCalls:N=true,approvalTimeoutMs:U=3e5,constraints:ge={},resolvers:Re={},circuitBreaker:Oe,budgetWarningThreshold:pt=.8,onBudgetWarning:vt,selfHealing:Te,checkpointStore:ce,breakpoints:yt=[],onBreakpoint:xt,breakpointTimeoutMs:Ve=3e5,derive:Ct,scratchpad:ot}=i,ue=typeof R=="object"?true:!!R,Xt=typeof R=="object"?!!R.verboseTimeline:false,Yt=5e3,oe={...u};if(!N&&!Ke)throw new Error(`[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
|
|
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:
|
|
18
18
|
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
19
|
-
- Provide an onApprovalRequest callback to handle approvals programmatically`);if(
|
|
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(`
|
|
20
20
|
`);throw new Error(`[Directive MultiAgent] Pattern validation failed. The following agents are not registered:
|
|
21
21
|
${e}
|
|
22
22
|
|
|
23
|
-
Registered agents: ${[...
|
|
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.
|
|
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
|
-
3. Increase approvalTimeoutMs (current: ${
|
|
28
|
-
See: https://directive.run/docs/ai/multi-agent`));},
|
|
29
|
-
`);
|
|
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(`
|
|
29
|
+
`);p={...p,instructions:(p.instructions??"")+`
|
|
30
30
|
|
|
31
31
|
Conversation context:
|
|
32
|
-
`+w};}}{let y=await Gt("pre_input_guardrails",e,g.name,h,n?.signal);if(y.skip)return d.status="completed",Q(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=y.input;}let Z=[...k.input??[],...r.guardrails?.input??[]].map((y,w)=>ut(y,w,"input"));for(let y of Z){let{name:w}=y,L={agentName:g.name,input:h,facts:Ze(c)},me=Date.now(),F=await lt(y,{input:h,agentName:g.name},L);if(ee("onGuardrailCheck",{agentId:e,guardrailName:w,guardrailType:"input",passed:F.passed,reason:F.reason,durationMs:Date.now()-me,timestamp:Date.now()}),!F.passed)throw new tt({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${w}" failed: ${F.reason}`,guardrailName:w,guardrailType:"input",userMessage:F.reason??"Input validation failed",agentName:g.name,input:h});F.transformed!==void 0&&(h=F.transformed);}ee("onAgentStart",{agentId:e,agentName:g.name,input:h,timestamp:o}),x&&x.record({type:"agent_start",timestamp:Date.now(),agentId:e,snapshotId:null,inputLength:h.length,...g.instructions?{instructions:g.instructions.slice(0,Yt)}:{},...Xt?{input:h.slice(0,Yt)}:{}}),l.batch(()=>{let y=Ue(c);Je(c,{...y,status:"running",input:h,startedAt:Date.now()});}),d.status="running",d.lastInput=h;{let y=await Gt("pre_agent_run",e,g.name,h,n?.signal);if(y.skip)return d.status="completed",Q(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=y.input;}let H=t$1,se=n?.outputSchema!==void 0?n.outputSchema:r.outputSchema;se&&(H=bn(t$1,{schema:se,maxRetries:n?.maxSchemaRetries??r.maxSchemaRetries??2,extractJson:r.extractJson,schemaDescription:r.schemaDescription}));let I=r.retry??Y,j=await nn(H,g,h,{...r.runOptions,...n,signal:M.signal,onMessage:y=>{let L=[...Ut(c),y];ct(c,L.length>E?L.slice(-E):L),n?.onMessage?.(y);},onToolCall:async y=>{let L=[...k.toolCall??[],...r.guardrails?.toolCall??[]].map((Ie,he)=>ut(Ie,he,"toolCall"));for(let Ie of L){let{name:he}=Ie,ve={agentName:g.name,input:h,facts:Ze(c)},St=Date.now(),De=await lt(Ie,{toolCall:y,agentName:g.name,input:h},ve);if(ee("onGuardrailCheck",{agentId:e,guardrailName:he,guardrailType:"toolCall",passed:De.passed,reason:De.reason,durationMs:Date.now()-St,timestamp:Date.now()}),!De.passed)throw new tt({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${he}" failed: ${De.reason}`,guardrailName:he,guardrailType:"toolCall",userMessage:De.reason??"Tool call blocked",data:{toolCall:y},agentName:g.name,input:h})}if(!N){let Ie=`tool-${e}-${y.id}`,he={id:Ie,type:"tool_call",agentName:g.name,description:`Tool call: ${y.name}`,data:y,requestedAt:Date.now()};V.set(Ie,e),l.batch(()=>{let ve=it(c);Qe(c,{...ve,pending:[...ve.pending,he]});}),Ke?.(he),await tr(e,Ie,n?.signal);}let F=[...Jt(c),y];dt(c,F.length>K?F.slice(-K):F),n?.onToolCall?.(y);}},I?{...I,onRetry:(y,w,L)=>{I.onRetry?.(y,w,L),ee("onAgentRetry",{agentId:e,agentName:g.name,input:h,attempt:y,error:w,delayMs:L,timestamp:Date.now()});}}:void 0);if((await Gt("pre_output_guardrails",e,g.name,h,n?.signal)).skip)return d.status="completed",Q(),j;let P=[...k.output??[],...r.guardrails?.output??[]].map((y,w)=>ut(y,w,"output"));for(let y of P){let{name:w}=y,L={agentName:g.name,input:h,facts:Ze(c)},me=Date.now(),F=await lt(y,{output:j.output,agentName:g.name,input:h,messages:j.messages},L);if(ee("onGuardrailCheck",{agentId:e,guardrailName:w,guardrailType:"output",passed:F.passed,reason:F.reason,durationMs:Date.now()-me,timestamp:Date.now()}),!F.passed)throw new tt({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${w}" failed: ${F.reason}`,guardrailName:w,guardrailType:"output",userMessage:F.reason??"Output validation failed",agentName:g.name,input:h});F.transformed!==void 0&&(j.output=F.transformed);}l.batch(()=>{let y=Ue(c);Je(c,{...y,status:"completed",output:j.output,tokenUsage:y.tokenUsage+j.totalTokens,turnCount:y.turnCount+j.messages.length,completedAt:Date.now()});}),d.status="completed",d.lastOutput=j.output,d.runCount++,d.totalTokens+=j.totalTokens,Q();let re=Pe("__coord"),te=!1,B=0;if(l.batch(()=>{let w=getBridgeFact(re,"__globalTokens")+j.totalTokens;if($=w,setBridgeFact(re,"__globalTokens",w),X&&vt){B=w/X;let L=getBridgeFact(re,"__budgetWarningFired");B>=pt&&!L&&(setBridgeFact(re,"__budgetWarningFired",!0),te=!0);}}),te)try{vt({currentTokens:$,maxBudget:X,percentage:B});}catch(y){ue&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",y);}if(T&&j.messages.length>0)try{T.addMessages(j.messages);}catch(y){ue&&console.debug("[Directive MultiAgent] Memory addMessages failed:",y);}if(ee("onAgentComplete",{agentId:e,agentName:g.name,input:h,output:j.output,tokenUsage:j.totalTokens,durationMs:Date.now()-o,timestamp:Date.now()}),x){let y=typeof j.output=="string"?j.output:Kt(j.output);x.record({type:"agent_complete",timestamp:Date.now(),agentId:e,snapshotId:null,outputLength:y.length,totalTokens:j.totalTokens,inputTokens:j.tokenUsage?.inputTokens??0,outputTokens:j.tokenUsage?.outputTokens??0,durationMs:Date.now()-o,modelId:r.agent.model??void 0,...Xt?{output:y.slice(0,Yt)}:{}});}return Xe&&Xe.recordSuccess(e,Date.now()-o),et(),await Gt("post_run",e,g.name,h,n?.signal),j}catch(T){throw d.status="error",d.lastError=T instanceof Error?T.message:String(T),Q(),l.batch(()=>{let D=Ue(c);Je(c,{...D,status:"error",error:T instanceof Error?T.message:String(T),completedAt:Date.now()});}),ee("onAgentError",{agentId:e,agentName:g.name,input:h,error:T instanceof Error?T:new Error(String(T)),durationMs:Date.now()-o,timestamp:Date.now()}),x&&x.record({type:"agent_error",timestamp:Date.now(),agentId:e,snapshotId:null,errorMessage:T instanceof Error?T.message:String(T),durationMs:Date.now()-o}),Xe&&Xe.recordFailure(e,Date.now()-o,T instanceof Error?T:new Error(String(T))),et(),T}finally{_&&clearTimeout(_),W&&n?.signal&&n.signal.removeEventListener("abort",W),O();}}function Rn(e,r,s={}){if(ae(),!oe[e]){let I=Object.keys(oe).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${e}". Registered agents: ${I}`)}let o=1e4,c=1e5,d=new AbortController,g=[],h=[],C=false,O=Date.now(),M=0,_="",W;s.signal&&(W=()=>d.abort(),s.signal.addEventListener("abort",W,{once:true}));let T=()=>{W&&s.signal&&s.signal.removeEventListener("abort",W);},D=I=>{if(C)return;let j=h.shift();j?j(I):(g.length>=o&&g.shift(),g.push(I));},Z=()=>{C=true,T();for(let I of h)I(null);h.length=0;},H=(async()=>{D({type:"progress",phase:"starting",message:"Running input guardrails"});try{let I=await $e(e,r,{signal:d.signal,onMessage:m=>{if(D({type:"message",message:m}),m.role==="assistant"&&m.content){let P=Math.ceil(m.content.length/4);M+=P,_+=m.content,_.length>c&&(_=_.slice(-c)),D({type:"token",data:m.content,tokenCount:M});}},onToolCall:async m=>{D({type:"tool_start",tool:m.name,toolCallId:m.id,arguments:m.arguments}),m.result&&D({type:"tool_end",tool:m.name,toolCallId:m.id,result:m.result});}}),j=Date.now()-O;return D({type:"done",totalTokens:I.totalTokens,duration:j,droppedTokens:0}),Z(),I}catch(I){throw I instanceof tt&&D({type:"guardrail_triggered",guardrailName:I.guardrailName,reason:I.message,partialOutput:_,stopped:true}),D({type:"error",error:I instanceof Error?I:new Error(String(I))}),Z(),I}})(),se={[Symbol.asyncIterator](){return {async next(){return g.length>0?{done:false,value:g.shift()}:C?{done:true,value:void 0}:new Promise(I=>{h.push(j=>{I(j===null?{done:true,value:void 0}:{done:false,value:j});});})}}}};return H.catch(()=>{}),{stream:se,result:H,abort:()=>{d.abort(),Z();}}}async function nr(e,r,s){let n=Date.now();s&&ee("onPatternStart",{patternId:s,patternType:"parallel",input:r,timestamp:n});let o=new AbortController,c;e.timeout&&(c=setTimeout(()=>o.abort(),e.timeout));let d;try{let g=e.agents.map(O=>$e(O,r,{signal:o.signal}).catch(M=>{if(e.minSuccess===void 0)throw M;return null})),h=await Promise.all(g),C=h.filter(O=>O!==null);if(e.minSuccess!==void 0&&C.length<e.minSuccess){let O=h.length-C.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${C.length}/${e.agents.length} agents succeeded (minimum required: ${e.minSuccess}, failed: ${O})`)}return e.merge(C)}catch(g){throw d=g instanceof Error?g:new Error(String(g)),g}finally{c&&clearTimeout(c),s&&ee("onPatternComplete",{patternId:s,patternType:"parallel",durationMs:Date.now()-n,timestamp:Date.now(),error:d});}}async function Bt(e,r,s){let n=Xn(e);if(s?.when)try{if(!s.when({step:n,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 o={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 r.save(o),x&&x.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:e.id,patternType:e.type,step:n}),ee("onCheckpointSave",{checkpointId:e.id,patternType:e.type,step:n,timestamp:Date.now()}),e.id}catch(o){let c=o instanceof Error?o:new Error(String(o));return console.error(`[Directive MultiAgent] ${e.type}: checkpoint save failed:`,c),ee("onCheckpointError",{patternType:e.type,step:n,error:c,timestamp:Date.now()}),null}}async function Tn(e,r,s,n){let o=Date.now(),c=s??"__inline_sequential";s&&ee("onPatternStart",{patternId:s,patternType:"sequential",input:r,timestamp:o});let d=e.checkpoint,g=d?.store??ce,h=d?.everyN??5,C=d?.labelPrefix??"sequential",O=n?.currentInput??r,M,_=n?.results?[...n.results]:[],W=n?.step??0,T;if(n&&_.length>0){let D=_[_.length-1];M={output:D.output,totalTokens:D.totalTokens,messages:[],toolCalls:[]};}try{for(let D=W;D<e.agents.length;D++){let Z=e.agents[D];{let H=await Gt("pre_pattern_step",Z,oe[Z]?.agent.name??Z,O,void 0,{patternId:s});if(H.skip)continue;O=H.input;}try{if(M=await $e(Z,O),_.push({agentId:Z,output:M.output,totalTokens:M.totalTokens}),D<e.agents.length-1&&(e.transform?O=e.transform(M.output,Z,D):O=typeof M.output=="string"?M.output:Kt(M.output)),d&&g&&D>W&&(D-W)%h===0){let H=D<e.agents.length-1?O:r;await Bt({type:"sequential",version:1,id:mt(),createdAt:new Date().toISOString(),label:`${C}:step-${D+1}`,patternId:c,stepsTotal:e.agents.length,step:D+1,currentInput:H,results:[..._]},g,d);}}catch(H){if(!e.continueOnError)throw H}}if(!M)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return e.extract?e.extract(M.output):M.output}catch(D){throw T=D instanceof Error?D:new Error(String(D)),D}finally{s&&ee("onPatternComplete",{patternId:s,patternType:"sequential",durationMs:Date.now()-o,timestamp:Date.now(),error:T});}}async function Sn(e,r,s,n){let o=Date.now(),c=s??"__inline_supervisor";s&&ee("onPatternStart",{patternId:s,patternType:"supervisor",input:r,timestamp:o});let d=e.checkpoint,g=d?.store??ce,h=d?.everyN??5,C=d?.labelPrefix??"supervisor",O=[],M=n?.workerResults?[...n.workerResults]:[],_=e.maxRounds??5;if(_<1||!Number.isFinite(_))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let W;if(n)for(let D of n.workerResults)O.push({output:D.output,totalTokens:D.totalTokens,messages:[],toolCalls:[]});let T=n?.round??0;try{let D;n?D={output:n.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:D=await $e(e.supervisor,r);let Z=n?.currentInput??r;for(let H=T;H<_;H++){let se=D.output,I;if(typeof se=="string")try{I=JSON.parse(se);}catch{throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned unparseable output (round ${H+1}). Expected JSON with { action, worker?, workerInput? } but got: ${se.slice(0,200)}`)}else if(se&&typeof se=="object"&&"action"in se)I=se;else throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned invalid output (round ${H+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(I.action==="complete"||!I.worker)break;if(!e.workers.includes(I.worker)){let m=e.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${I.worker}". Available workers: ${m}`)}let j=await $e(I.worker,I.workerInput??"");O.push(j),M.push({output:j.output,totalTokens:j.totalTokens}),Z=`Worker ${I.worker} completed with result: ${Kt(j.output)}`,D=await $e(e.supervisor,Z),d&&g&&H>T&&(H-T)%h===0&&await Bt({type:"supervisor",version:1,id:mt(),createdAt:new Date().toISOString(),label:`${C}:round-${H+1}`,patternId:c,stepsTotal:e.maxRounds??10,round:H+1,supervisorOutput:D.output,workerResults:[...M],currentInput:Z},g,d);}return e.extract?e.extract(D.output,O):D.output}catch(D){throw W=D instanceof Error?D:new Error(String(D)),D}finally{s&&ee("onPatternComplete",{patternId:s,patternType:"supervisor",durationMs:Date.now()-o,timestamp:Date.now(),error:W});}}async function En(e,r,s,n){let o=Date.now(),c=s??"__inline_dag";s&&ee("onPatternStart",{patternId:s,patternType:"dag",input:r,timestamp:o});let d=e.checkpoint,g=d?.store??ce,h=d?.everyN??5,C=d?.labelPrefix??"dag",O=n?.completedCount??0,M=0,_=Promise.resolve(),W=Object.keys(e.nodes).length,T={input:n?.input??r,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};for(let m of Object.keys(e.nodes))T.statuses[m]="pending";if(n){for(let[m,P]of Object.entries(n.statuses))T.statuses[m]=P;for(let[m,P]of Object.entries(n.outputs))T.outputs[m]=P;for(let[m,P]of Object.entries(n.errors))T.errors[m]=P;for(let[m,P]of Object.entries(n.nodeResults))T.results[m]={output:P.output,totalTokens:P.totalTokens,messages:[],toolCalls:[]};}let D=e.onNodeError??"fail",Z=e.maxConcurrent??1/0,H=new AbortController,se,I;e.timeout&&(se=setTimeout(()=>H.abort(),e.timeout));try{let re=function(){for(let[B,y]of Object.entries(e.nodes)){if(T.statuses[B]!=="pending")continue;let w=D==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((y.deps??[]).every(me=>w.has(T.statuses[me]))){if(D==="skip-downstream"&&(y.deps??[]).some(F=>T.statuses[F]==="error"||T.statuses[F]==="skipped")){T.statuses[B]="skipped",x&&x.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:B,status:"skipped",deps:y.deps??[]}),ee("onDagNodeSkipped",{patternId:c,nodeId:B,agentId:y.agent,reason:"upstream dependency errored",timestamp:Date.now()});continue}if(y.when)try{if(!y.when(T)){T.statuses[B]="skipped",x&&x.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:B,status:"skipped",deps:y.deps??[]}),ee("onDagNodeSkipped",{patternId:c,nodeId:B,agentId:y.agent,reason:"when() returned false",timestamp:Date.now()});continue}}catch{T.statuses[B]="skipped";continue}T.statuses[B]="ready";}}};var j=re;if(!n)for(let[B,y]of Object.entries(e.nodes))(!y.deps||y.deps.length===0)&&(T.statuses[B]="ready");let m=new Set,P=0;async function te(B,y){let w=Date.now();T.statuses[B]="running",x&&x.record({type:"dag_node_update",timestamp:w,snapshotId:null,nodeId:B,status:"running",deps:y.deps??[]}),ee("onDagNodeStart",{patternId:c,nodeId:B,agentId:y.agent,timestamp:w});let L;if(y.transform)L=y.transform(T);else if(y.deps&&y.deps.length>0){let he=Object.create(null);for(let ve of y.deps)T.outputs[ve]!==void 0&&(he[ve]=T.outputs[ve]);L=JSON.stringify(he);}else L=r;let me=new AbortController,F;y.timeout&&(F=setTimeout(()=>me.abort(),y.timeout));let Ie=()=>me.abort();H.signal.addEventListener("abort",Ie,{once:!0});try{let he=await $e(y.agent,L,{signal:me.signal});if(T.outputs[B]=he.output,T.results[B]=he,T.statuses[B]="completed",x&&x.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:B,status:"completed",deps:y.deps??[]}),ee("onDagNodeComplete",{patternId:c,nodeId:B,agentId:y.agent,durationMs:Date.now()-w,timestamp:Date.now()}),O++,d&&g&&O>M&&O-M>=h){M=O;let ve=Object.create(null);for(let[De,Dt]of Object.entries(T.results))ve[De]={output:Dt.output,totalTokens:Dt.totalTokens};let St={type:"dag",version:1,id:mt(),createdAt:new Date().toISOString(),label:`${C}:node-${O}`,patternId:c,stepsTotal:W,statuses:{...T.statuses},outputs:{...T.outputs},errors:{...T.errors},completedCount:O,nodeResults:ve,input:T.input};_=_.then(()=>Bt(St,g,d)),await _;}}catch(he){if(T.statuses[B]="error",T.errors[B]=he instanceof Error?he.message:String(he),x&&x.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:B,status:"error",deps:y.deps??[]}),ee("onDagNodeError",{patternId:c,nodeId:B,agentId:y.agent,error:he instanceof Error?he:new Error(String(he)),durationMs:Date.now()-w,timestamp:Date.now()}),D==="fail")throw H.abort(),he}finally{F&&clearTimeout(F),H.signal.removeEventListener("abort",Ie),P--;}}for(;!H.signal.aborted;){re();let B=Object.entries(e.nodes).filter(([w])=>T.statuses[w]==="ready").sort(([,w],[,L])=>(L.priority??0)-(w.priority??0));for(let[w,L]of B){if(P>=Z)break;P++;let me=te(w,L).finally(()=>{m.delete(me);});m.add(me);}if(!Object.values(T.statuses).some(w=>w==="pending"||w==="running"||w==="ready"))break;if(m.size>0)await Promise.race(m);else break}return m.size>0&&await Promise.allSettled(m),await e.merge(T)}catch(m){throw I=m instanceof Error?m:new Error(String(m)),m}finally{se&&clearTimeout(se),s&&ee("onPatternComplete",{patternId:s,patternType:"dag",durationMs:Date.now()-o,timestamp:Date.now(),error:I});}}async function ln(e,r,s,n){let o=Date.now(),c=s??"__inline_reflect",d=e.maxIterations??2;if(d<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");ue&&d>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let g=e.signal,h,C;if(e.timeout&&!g){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),g=m.signal;}else if(e.timeout&&g){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),C=()=>m.abort(),g.addEventListener("abort",C,{once:true}),g=m.signal;}let O=e.parseEvaluation??(m=>{if(typeof m=="string")try{return JSON.parse(m)}catch{return {passed:false,feedback:`Evaluator returned unparseable output: ${m.slice(0,200)}`}}return m&&typeof m=="object"&&"passed"in m?m:{passed:false,feedback:"Evaluator returned invalid format"}}),M=e.buildRetryInput??((m,P,re)=>`${m}
|
|
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}
|
|
33
33
|
|
|
34
34
|
Feedback on your previous response:
|
|
35
|
-
${
|
|
35
|
+
${E}
|
|
36
36
|
|
|
37
|
-
Please improve your response.`);
|
|
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}
|
|
38
38
|
|
|
39
39
|
Feedback on your previous response:
|
|
40
|
-
${
|
|
40
|
+
${T.feedback}
|
|
41
41
|
|
|
42
|
-
Please improve your response.`;}
|
|
43
|
-
`+Object.entries(
|
|
44
|
-
`)))):
|
|
45
|
-
`+Object.entries(
|
|
46
|
-
`))));});});await Promise.all(
|
|
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.
|
|
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.
|
|
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}
|
|
47
47
|
|
|
48
|
-
Original task: ${r}`);}if(T.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let w=g?g(H):H;return {winnerId:Z,result:w,rounds:T}}catch(w){throw y=w instanceof Error?w:new Error(String(w)),w}finally{O&&clearTimeout(O),M&&e.signal&&e.signal.removeEventListener("abort",M),s&&ee("onPatternComplete",{patternId:re,patternType:"debate",durationMs:Date.now()-te,timestamp:Date.now(),error:y});}}let rr=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Lt(e,r){for(let s of Object.keys(r))rr.has(s)||(e[s]=r[s]);}function or(e,r){let s=Object.create(null);for(let[h,C]of Object.entries(r))for(let O of C.produces)s[O]||(s[O]=[]),s[O].push(h);let n=Object.keys(r),o=Object.create(null),c=Object.create(null);for(let h of n)o[h]=0,c[h]=[];for(let[h,C]of Object.entries(r))for(let O of C.requires??[]){let M=s[O];if(M)for(let _ of M)_!==h&&(c[_].push(h),o[h]=(o[h]??0)+1);}let d=[];for(let h of n)o[h]===0&&d.push(h);let g=0;for(;d.length>0;){let h=d.shift();g++;for(let C of c[h]??[])o[C]--,o[C]===0&&d.push(C);}if(g!==n.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${g}/${n.length} nodes.`)}function ar(e,r){let s=Object.create(null);for(let[n,o]of Object.entries(r))for(let c of o.produces)s[c]||(s[c]=[]),s[c].push(n);for(let[n,o]of Object.entries(s))o.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${n}" is produced by multiple nodes: ${o.join(", ")}. Last writer wins.`);}function Fe(e,...r){if(e)try{return e(...r)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}async function sr(e,...r){if(e)try{return await e(...r)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}function An(e,r,s){let n=r.slice(-3),o=n.length>0?n.reduce((g,h)=>g+h.satisfactionDelta,0)/n.length:0,c=null;o>0&&e<1&&(c=Math.ceil((1-e)/o));let d=false;if(r.length>=6){let g=r.slice(-3),h=r.slice(-6,-3),C=g.reduce((M,_)=>M+_.satisfactionDelta,0)/3,O=h.reduce((M,_)=>M+_.satisfactionDelta,0)/3;d=C<O*.5;}return {satisfaction:e,progressRate:o,estimatedStepsRemaining:c,decelerating:d}}function Zt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function dn(e,r,s,n){let{nodes:o,when:c,satisfaction:d,maxSteps:g=50,extract:h,selectionStrategy:C,relaxation:O,onStep:M,onStall:_}=e,W=Object.create(null);for(let[Se,je]of Object.entries(o))W[Se]={...je};if(Object.keys(W).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let D=s??"__goal";for(let[Se,je]of Object.entries(W))if(!oe[je.agent])throw new Error(`[Directive MultiAgent] goal node "${Se}" references unregistered agent "${je.agent}"`);or(D,W),ar(D,W);for(let[Se,je]of Object.entries(W))je.extractOutput||console.warn(`[Directive MultiAgent] goal node "${Se}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let Z=e.signal,H,se,I=e.timeout??3e5;if(I&&!Z){let Se=new AbortController;H=setTimeout(()=>Se.abort(),I),Z=Se.signal;}else if(I&&Z){let Se=new AbortController;H=setTimeout(()=>Se.abort(),I),se=()=>Se.abort(),Z.addEventListener("abort",se,{once:true}),Z=Se.signal;}let j=Date.now();x&&x.record({type:"pattern_start",timestamp:j,snapshotId:null,patternId:D,patternType:"goal"}),ee("onPatternStart",{patternId:D,patternType:"goal",input:typeof r=="string"?r:JSON.stringify(r),timestamp:j});let m=Object.create(null);n?Lt(m,n.facts):typeof r=="string"?m.input=r:Lt(m,r);let P=n?[...n.executionOrder]:[],re=Object.create(null);if(n)for(let[Se,je]of Object.entries(n.nodeOutputs))re[Se]={output:je.output,totalTokens:je.totalTokens};let te=n?[...n.stepMetrics]:[],B=n?[...n.relaxations]:[],y=new Set(n?.completedNodes??[]),w=new Map(n?Object.entries(n.failedNodes).map(([Se,je])=>[Se,je]):[]),L=new Map(n?Object.entries(n.nodeInputHashes):[]),me=Object.create(null);if(n)for(let[Se,je]of Object.entries(n.agentMetrics))me[Se]={runs:je.runs,avgSatisfactionDelta:je.runs>0?je.totalDelta/je.runs:0,tokens:je.tokens,totalDelta:je.totalDelta};let F=n?.stallSteps??0,Ie=n?.appliedRelaxationTiers??0,he=n?.lastSatisfaction??0,ve,St=n?.step??0,De=e.checkpoint,Dt=De?.everyN??5,$n=De?.store??ce,lr=De?.labelPrefix??"goal",jn,cr=3;try{for(let qe=St;qe<g;qe++){if(Fe(c,m)===!0){let pe=Date.now()-j,le=Object.values(re).reduce((ye,Ge)=>ye+Ge.totalTokens,0);return {achieved:!0,result:Fe(h,m)??m,facts:{...m},executionOrder:P,nodeResults:re,steps:qe,totalTokens:le,durationMs:pe,stepMetrics:te,relaxations:B}}if(Z?.aborted){let pe=Date.now()-j,le=Object.values(re).reduce((ye,Ge)=>ye+Ge.totalTokens,0);return {achieved:!1,result:Fe(h,m)??m,facts:{...m},executionOrder:P,nodeResults:re,steps:qe,totalTokens:le,durationMs:pe,stepMetrics:te,relaxations:B,error:"Aborted or timed out"}}let Ot=[];for(let[pe,le]of Object.entries(W)){if((w.get(pe)??0)>=cr)continue;let ye=le.requires??[];if(ye.every(Ne=>m[Ne]!=null)){if(y.has(pe)){if(!le.allowRerun)continue;let Ne=JSON.stringify(ye.map(He=>m[He]));if(L.get(pe)===Ne)continue}Ot.push(pe);}}let _t=Ot;if(C&&Ot.length>0){let pe=d?Fe(d,m)??0:Fe(c,m)===!0?1:0,le=Zt(pe),ye=An(le,te,qe),Ge=Object.create(null);for(let[He,we]of Object.entries(me))Ge[He]={runs:we.runs,avgSatisfactionDelta:we.runs>0?we.totalDelta/we.runs:0,tokens:we.tokens};let Ne=C.select(Ot,Ge,ye);_t=Ne&&Ne.length>0?Ne:Ot;}if(_t.sort((pe,le)=>(W[le].priority??0)-(W[pe].priority??0)),Fe(M,qe,{...m},_t),_t.length===0){F++;let pe=!1;if(O)for(let le=Ie;le<O.length;le++){let ye=O[le],Ge=ye.afterStallSteps??3;if(F>=Ge){let Ne=ye.strategy;switch(Ne.type){case "allow_rerun":for(let He of Ne.nodes)y.delete(He),L.delete(He);break;case "alternative_nodes":for(let He of Ne.nodes){let we=`__relaxation_${le}_${He.agent}`;W[we]={...He};}break;case "inject_facts":Lt(m,Ne.facts);break;case "accept_partial":{let He=Date.now()-j,we=Object.values(re).reduce((Be,ft)=>Be+ft.totalTokens,0);return {achieved:!1,result:Fe(h,m)??m,facts:{...m},executionOrder:P,nodeResults:re,steps:qe,totalTokens:we,durationMs:He,stepMetrics:te,relaxations:B,error:`Accepted partial result via relaxation tier "${ye.label}"`}}case "custom":{let He=Fe(d,m)??0,we={step:qe,facts:{...m},metrics:An(Zt(He),te,qe),completedNodes:new Set(y),failedNodes:new Map(w)};await sr(Ne.apply,we);break}}B.push({step:qe,tierIndex:le,label:ye.label,strategy:Ne.type}),Ie=le+1,F=0,pe=!0;break}}if(!pe){let le=Fe(d,m)??0,ye=An(Zt(le),te,qe);if(Fe(_,qe,ye),!O||Ie>=O.length){let Ge=Date.now()-j,Ne=Object.values(re).reduce((He,we)=>He+we.totalTokens,0);return {achieved:!1,result:Fe(h,m)??m,facts:{...m},executionOrder:P,nodeResults:re,steps:qe,totalTokens:Ne,durationMs:Ge,stepMetrics:te,relaxations:B,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}F=0;let dr=Date.now(),pr=d?Fe(d,m)??0:Fe(c,m)===!0?1:0,gr=Zt(pr),qn=0,Ft=[],fr=_t.map(async pe=>{let le=W[pe],ye=le.requires??[],Ge=JSON.stringify(ye.map(we=>m[we]));L.set(pe,Ge);let Ne,He=Fe(le.buildInput,m);if(He!=null)Ne=He;else {let we=Object.create(null);for(let Be of ye)m[Be]!=null&&(we[Be]=m[Be]);Object.keys(we).length>0?Ne=JSON.stringify(we):m.input!=null?Ne=String(m.input):Ne=JSON.stringify(m);}try{let we=await $e(le.agent,Ne,{signal:Z??void 0});if(re[pe]=we,P.push(pe),y.add(pe),w.delete(pe),le.extractOutput){let Be=Fe(le.extractOutput,we);Be&&(Lt(m,Be),Ft.push(...Object.keys(Be)));}else {let Be=we.output;if(Be&&typeof Be=="object")Lt(m,Be),Ft.push(...Object.keys(Be));else if(typeof Be=="string")try{let ft=JSON.parse(Be);if(ft&&typeof ft=="object"&&!Array.isArray(ft))Lt(m,ft),Ft.push(...Object.keys(ft));else for(let Gn of le.produces)m[Gn]=Be,Ft.push(Gn);}catch{for(let ft of le.produces)m[ft]=Be,Ft.push(ft);}}return qn+=we.totalTokens,{nodeId:pe,success:!0}}catch(we){let Be=(w.get(pe)??0)+1;return w.set(pe,Be),{nodeId:pe,success:!1,error:we}}});await Promise.allSettled(fr);let mr=d?Fe(d,m)??0:Fe(c,m)===!0?1:0,xn=Zt(mr),Cn=xn-gr;te.push({step:qe,durationMs:Date.now()-dr,nodesRun:[..._t],factsProduced:Ft,satisfaction:xn,satisfactionDelta:Cn,tokensConsumed:qn});for(let pe of _t){let le=W[pe];me[le.agent]||(me[le.agent]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let ye=me[le.agent];ye.runs++,ye.totalDelta+=Cn,ye.tokens+=re[pe]?.totalTokens??0;}if(he=xn,Cn<=0?F++:F=0,De&&$n&&qe>St&&(qe-St)%Dt===0){let pe={type:"goal",version:1,id:mt(),createdAt:new Date().toISOString(),label:`${lr}:step-${qe}`,patternId:D,stepsTotal:g,step:qe+1,facts:structuredClone(m),completedNodes:[...y],failedNodes:Object.fromEntries(w),nodeInputHashes:Object.fromEntries(L),nodeOutputs:Object.fromEntries(Object.entries(re).map(([ye,Ge])=>[ye,{output:Ge.output,totalTokens:Ge.totalTokens}])),executionOrder:[...P],stepMetrics:[...te],relaxations:[...B],appliedRelaxationTiers:Ie,stallSteps:F,lastSatisfaction:he,agentMetrics:Object.fromEntries(Object.entries(me).map(([ye,Ge])=>[ye,{runs:Ge.runs,totalDelta:Ge.totalDelta,tokens:Ge.tokens}]))},le=await Bt(pe,$n,De);le&&(jn=le);}}let Se=Date.now()-j,je=Object.values(re).reduce((qe,Ot)=>qe+Ot.totalTokens,0);return {achieved:!1,result:Fe(h,m)??m,facts:{...m},executionOrder:P,nodeResults:re,steps:g,totalTokens:je,durationMs:Se,stepMetrics:te,relaxations:B,error:`Max steps (${g}) exhausted without achieving goal`}}catch(Se){throw ve=Se instanceof Error?Se:new Error(String(Se)),Se}finally{H!=null&&clearTimeout(H),se&&e.signal&&e.signal.removeEventListener("abort",se),x&&x.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:D,patternType:"goal",durationMs:Date.now()-j,...ve?{error:ve.message}:{}}),ee("onPatternComplete",{patternId:D,patternType:"goal",durationMs:Date.now()-j,timestamp:Date.now(),error:ve});}}function ir(e){if(!Te)return [];let r=[],s=new Set;if(s.add(e),Te.equivalencyGroups){for(let n of Object.values(Te.equivalencyGroups))if(n.includes(e))for(let o of n)!s.has(o)&&oe[o]&&(r.push(o),s.add(o));}if(Te.useCapabilities!==false){let n=oe[e];if(n?.capabilities&&n.capabilities.length>0)for(let[o,c]of Object.entries(oe)){if(s.has(o))continue;let d=c.capabilities??[];n.capabilities.every(g=>d.includes(g))&&(r.push(o),s.add(o));}}if(Xe){let n=Te.healthThreshold??30;return r.filter(o=>Xe.getHealthScore(o)>n)}return r}function ur(e){if(e.length===0)return null;if(!Te||!Xe)return e[0]??null;if(Te.selectionStrategy==="round-robin"&&at){let n=[...e].sort().join(","),o=at.get(n)??0,c=e[o%e.length];return at.set(n,o+1),c}let r=e[0],s=Xe.getHealthScore(r);for(let n=1;n<e.length;n++){let o=Xe.getHealthScore(e[n]);o>s&&(r=e[n],s=o);}return r}let Nn={system:l,get facts(){return l.facts},get timeline(){return x},get healthMonitor(){return Xe},get derived(){return Object.freeze({...ne})},onDerivedChange(e){return Ae.add(e),()=>{Ae.delete(e);}},get scratchpad(){return kt},runAgent:$e,runAgentStream:Rn,async runPattern(e,r){ae();let s=a[e];if(!s){let c=Object.keys(a).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${c}`)}let n=Date.now();x&&x.record({type:"pattern_start",timestamp:n,snapshotId:null,patternId:e,patternType:s.type});let o;try{switch(s.type){case "parallel":return await nr(s,r,e);case "sequential":return await Tn(s,r,e);case "supervisor":return await Sn(s,r,e);case "dag":return await En(s,r,e);case "reflect":return await ln(s,r,e);case "race":return (await In(s,r,e)).result;case "debate":return (await cn(s,r,e)).result;case "goal":return (await dn(s,r,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${s.type}`)}}catch(c){throw o=c instanceof Error?c:new Error(String(c)),c}finally{x&&x.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:s.type,durationMs:Date.now()-n,...o?{error:o.message}:{}});}},async runParallel(e,r,s,n){ae();let o=Array.isArray(r)?r:e.map(()=>r);if(o.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${o.length}) must match agent count (${e.length})`);let c=new AbortController,d;n?.timeout&&(d=setTimeout(()=>c.abort(),n.timeout));try{let g=e.map((O,M)=>$e(O,o[M],{signal:c.signal}).catch(_=>{if(n?.minSuccess!==void 0)return null;throw _})),h=await Promise.all(g),C=h.filter(O=>O!==null);if(n?.minSuccess!==void 0&&C.length<n.minSuccess){let O=h.length-C.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${C.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess}, failed: ${O})`)}return s(C)}finally{d&&clearTimeout(d);}},async runSequential(e,r,s){ae();let n=[],o=r;for(let c=0;c<e.length;c++){let d=e[c],g=await $e(d,o);n.push(g),c<e.length-1&&(s?.transform?o=s.transform(g.output,d,c):o=typeof g.output=="string"?g.output:Kt(g.output));}return n},async handoff(e,r,s,n){if(ae(),!oe[e]){let d=Object.keys(oe).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${d}`)}if(!oe[r]){let d=Object.keys(oe).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${r}" not found. Registered: ${d}`)}{let d=await Gt("pre_handoff",e,oe[e].agent.name,s,void 0,{handoff:{fromAgent:e,toAgent:r}});if(d.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};s=d.input;}let o={id:`handoff-${++Ce}`,fromAgent:e,toAgent:r,input:s,context:n,requestedAt:Date.now()};We.push(o);try{p?.(o);}catch(d){ue&&console.debug("[Directive MultiAgent] onHandoff threw:",d);}ee("onHandoff",o),x&&x.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:r});let c=oe[r].memory??A;if(c&&n)try{let d=Object.entries(n).map(([g,h])=>`${g}: ${Kt(h)}`).join(", ");c.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${d}`}]);}catch(d){ue&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",d);}try{let d=await $e(r,s),g={request:o,result:d,completedAt:Date.now()};G(g);try{f?.(g);}catch(C){ue&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",C);}ee("onHandoffComplete",g),x&&x.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:r,durationMs:g.completedAt-o.requestedAt});let h=We.indexOf(o);return h>=0&&We.splice(h,1),d}catch(d){let g=We.indexOf(o);throw g>=0&&We.splice(g,1),d}},approve(e){ae();let r=V.get(e);if(r){V.delete(e);let s=Pe(r);l.batch(()=>{let n=it(s),o=200,c=[...n.approved,e];Qe(s,{...n,pending:n.pending.filter(d=>d.id!==e),approved:c.length>o?c.slice(-o):c});});return}ue&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,r){ae();let s=V.get(e);if(s){V.delete(e);let n=Pe(s);l.batch(()=>{let o=it(n);r&&ue&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${r}`);let c={id:e,reason:r,rejectedAt:Date.now()},d=200,g=[...o.rejected,c];Qe(n,{...o,pending:o.pending.filter(h=>h.id!==e),rejected:g.length>d?g.slice(-d):g});});return}ue&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){ae(),q="paused",ue&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){ae(),q==="paused"&&(q="idle",ue&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let r=fe[e];return r?{...r}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(fe).map(([e,r])=>[e,{...r}]))},getPendingHandoffs(){return [...We]},get totalTokens(){return $},waitForIdle(e){let r=()=>de===0&&Object.values(fe).every(s=>s.status==="idle"||s.status==="completed"||s.status==="error");return r()?Promise.resolve():new Promise((s,n)=>{let o=null,c=()=>{_e.delete(d),o&&clearTimeout(o);},d=()=>{r()&&(c(),s());};_e.add(d),e!==void 0&&(o=setTimeout(()=>{c(),n(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,r,s){return $e(e,r,s)},runStream(e,r,s){return Rn(e,r,s)},registerAgent(e,r){if(ae(),S.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(oe[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);let s=r.constraints?Wt(r.constraints):{},n=Object.create(null);if(r.resolvers)for(let[c,d]of Object.entries(r.resolvers))n[c]={requirement:d.requirement,key:d.key,resolve:async(g,h)=>{let C=Ze(h.facts),M={facts:{...h.facts,...C},runAgent:async(_,W,T)=>t$1(_,W,T),signal:h.signal};return d.resolve(g,M)}};let o=createModule(e,{schema:tn,init:c=>{Je(c,{status:"idle",currentAgent:r.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Qe(c,{pending:[],approved:[],rejected:[]}),ct(c,[]),dt(c,[]),rt(c,an());},constraints:s,resolvers:Object.keys(n).length>0?n:void 0});l.registerModule(e,o),oe[e]=r,xe.set(e,new Vt(r.maxConcurrent??1)),fe[e]={status:"idle",runCount:0,totalTokens:0},ue&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${r.agent.name})`),et();},unregisterAgent(e){if(ae(),!oe[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(fe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[o,c]of Object.entries(a)){let d;switch(c.type){case "supervisor":d=[c.supervisor,...c.workers];break;case "dag":d=Object.values(c.nodes).map(g=>g.agent);break;case "reflect":d=[c.agent,c.evaluator];break;case "parallel":case "sequential":case "race":d=c.agents;break;case "debate":d=[...c.agents,c.evaluator];break;default:d=[];}d.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${o}" references unregistered agent "${e}"`);}let s=xe.get(e);s&&(s.drain(),xe.delete(e));let n=Pe(e);n&&l.batch(()=>{Je(n,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Qe(n,{pending:[],approved:[],rejected:[]}),ct(n,[]),dt(n,[]),rt(n,an());}),delete oe[e],delete fe[e],ue&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),et();},getAgentIds(){return Object.keys(oe)},reset(){ae();for(let r of Object.keys(oe)){let s=oe[r]?.maxConcurrent??1;fe[r]={status:"idle",runCount:0,totalTokens:0};let n=xe.get(r);n&&n.drain(),xe.set(r,new Vt(s));let o=Pe(r);l.batch(()=>{Je(o,{status:"idle",currentAgent:oe[r].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Qe(o,{pending:[],approved:[],rejected:[]}),ct(o,[]),dt(o,[]),rt(o,an());});}Ye.clear(),gt.clear(),V.clear(),We.length=0,st.length=0,Ce=0,$=0,q="idle",de=0,Q();let e=Pe("__coord");l.batch(()=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),ot&&setBridgeFact(e,ze,{...ot.init});}),Xe&&Xe.reset(),be=null;for(let r of Object.keys(ne))delete ne[r];et();},async checkpoint(e){ae();for(let[s,n]of Object.entries(fe))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${s}" is running`);if(!l.debug?.export)throw new Error("[Directive MultiAgent] Checkpointing requires debug mode. Set `debug: true` in orchestrator options.");let r={version:1,id:mt(),createdAt:new Date().toISOString(),label:e?.label,systemExport:l.debug.export(),timelineExport:x?.export()??null,localState:{type:"multi",globalTokenCount:$,globalStatus:q,agentStates:Object.fromEntries(Object.entries(fe).map(([s,n])=>[s,structuredClone(n)])),handoffCounter:Ce,pendingHandoffs:[...We],handoffResults:[...st],roundRobinCounters:at?Object.fromEntries(at):null},memoryExport:A?A.export?.()??null:null,orchestratorType:"multi"};return ce&&await ce.save(r),r},restore(e,r){if(ae(),!Qt(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(!l.debug?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires debug mode. Set `debug: true` in orchestrator options.");l.debug.import(e.systemExport),r?.restoreTimeline!==false&&e.timelineExport&&x&&x.import(e.timelineExport),e.memoryExport&&A&&A.import&&A.import(e.memoryExport);let s=e.localState;$=s.globalTokenCount,q=s.globalStatus,Ce=s.handoffCounter,We.length=0,We.push(...s.pendingHandoffs),st.length=0,st.push(...s.handoffResults);for(let[n,o]of Object.entries(s.agentStates))fe[n]&&(fe[n]={...o});if(s.roundRobinCounters&&at){at.clear();for(let[n,o]of Object.entries(s.roundRobinCounters))at.set(n,o);}for(let[n,o]of Object.entries(oe)){let c=xe.get(n);c&&c.drain(),xe.set(n,new Vt(o.maxConcurrent??1));}et();},runParallelStream(e,r,s,n){ae();let o=Array.isArray(r)?r:e.map(()=>r);if(o.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${o.length}) must match agent count (${e.length})`);let c=new AbortController,d;n?.timeout&&(d=setTimeout(()=>c.abort(),n.timeout));let g=e.map((T,D)=>{let Z=Rn(T,o[D],{signal:c.signal});return {agentId:T,streamResult:Z}}),h=g.map(({agentId:T,streamResult:D})=>({agentId:T,stream:D.stream})),{stream:C,getDroppedCount:O}=Vn(h),M;n?.signal&&(M=()=>c.abort(),n.signal.addEventListener("abort",M,{once:true}));let _=Promise.allSettled(g.map(({streamResult:T})=>T.result)).then(T=>{d&&clearTimeout(d),M&&n?.signal&&n.signal.removeEventListener("abort",M);let D=[];for(let Z of T)Z.status==="fulfilled"&&D.push(Z.value);if(n?.minSuccess!==void 0&&D.length<n.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${D.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess})`);return D}),W=_.then(T=>s(T));return _.catch(()=>{}),W.catch(()=>{}),{stream:C,results:_,merge:W,getDroppedCount:O,abort:()=>{c.abort(),M&&n?.signal&&n.signal.removeEventListener("abort",M);for(let{streamResult:T}of g)T.abort();}}},async runRace(e,r,s){ae();let n={type:"race",agents:e,extract:s?.extract,timeout:s?.timeout,minSuccess:s?.minSuccess,signal:s?.signal};return In(n,r,"__imperative_race")},async runReflect(e,r,s,n){ae();let o={type:"reflect",agent:e,evaluator:r,maxIterations:n?.maxIterations,parseEvaluation:n?.parseEvaluation,buildRetryInput:n?.buildRetryInput,extract:n?.extract,onExhausted:n?.onExhausted,onIteration:n?.onIteration,signal:n?.signal,timeout:n?.timeout,threshold:n?.threshold},c=await ln(o,s,"__imperative_reflect"),d=be?[...be]:[],g=n?.maxIterations??2,h=d.length>0&&!d[d.length-1].passed&&d.length>=g;return {result:c,iterations:d.length,history:d,exhausted:h}},async runDebate(e,r,s,n){return ae(),cn({agents:e,evaluator:r,maxRounds:n?.maxRounds,extract:n?.extract,parseJudgement:n?.parseJudgement,signal:n?.signal,timeout:n?.timeout},s,"__imperative_debate")},async runGoal(e,r,s,n){return ae(),dn({nodes:e,when:s,satisfaction:n?.satisfaction,maxSteps:n?.maxSteps,extract:n?.extract,timeout:n?.timeout,signal:n?.signal,selectionStrategy:n?.selectionStrategy,relaxation:n?.relaxation,onStep:n?.onStep,onStall:n?.onStall,checkpoint:n?.checkpoint},r,"__imperative_goal")},async resumeGoal(e,r){if(ae(),!e||e.version!==1||e.type!=="goal"&&e.type!=="converge")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");let s=e.type==="converge"?{...e}:e;return dn(r,{},s.patternId,s)},async resumeSequential(e,r){if(ae(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return Tn(r,e.currentInput,e.patternId,e)},async resumeSupervisor(e,r,s){if(ae(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let n=s?.input??e.currentInput;return Sn(r,n,e.patternId,e)},async resumeReflect(e,r,s){if(ae(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let n=s?.input??e.effectiveInput;return ln(r,n,e.patternId,e)},async resumeDebate(e,r){if(ae(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return cn(r,e.currentInput,e.patternId,e)},async resumeDag(e,r,s){if(ae(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let n=s?.input??e.input;return En(r,n,e.patternId,e)},async replay(e,r,s){if(ae(),!ce)throw new Error("[Directive MultiAgent] No checkpoint store configured");let n=await ce.load(e);if(!n)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let o;try{let g=JSON.parse(n.systemExport);if(!g||typeof g!="object")throw new Error("Parsed checkpoint state is not an object");let h=new Set(["__proto__","constructor","prototype"]);for(let O of Object.keys(g))if(h.has(O))throw new Error(`Checkpoint state contains blocked key: ${O}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal","converge"]).has(g.type))throw new Error(`Unknown checkpoint pattern type: ${g.type}`);if(g.version!==1)throw new Error(`Unsupported checkpoint version: ${g.version}`);o=g;}catch(g){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${g instanceof Error?g.message:String(g)}`)}let c=Xn(o),d=s?.input??("currentInput"in o?o.currentInput:"");switch(x&&x.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:o.type,step:c}),o.type){case "sequential":return Tn(r,d,o.patternId,o);case "supervisor":return Sn(r,d,o.patternId,o);case "reflect":return ln(r,d,o.patternId,o);case "debate":return cn(r,d,o.patternId,o);case "dag":return En(r,d,o.patternId,o);case "goal":return dn(r,o.facts,o.patternId,o)}},resumeBreakpoint(e,r){ae(),r&&Ye.set(e,r);for(let s of Object.keys(oe)){let n=Pe(s);if(nt(n).pending.some(c=>c.id===e)){l.batch(()=>{let c=nt(n),d=[...c.resolved,e];rt(n,{...c,pending:c.pending.filter(g=>g.id!==e),resolved:d.length>ht?d.slice(-ht):d});});return}}ue&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,r){ae(),r&>.set(e,r);for(let s of Object.keys(oe)){let n=Pe(s);if(nt(n).pending.some(c=>c.id===e)){l.batch(()=>{let c=nt(n),d=[...c.cancelled,e];rt(n,{...c,pending:c.pending.filter(g=>g.id!==e),cancelled:d.length>ht?d.slice(-ht):d});});return}}ue&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let r of Object.keys(oe)){let s=Pe(r),n=nt(s);e.push(...n.pending);}return e},getLastReflectionHistory(){return be?[...be]:null},dispose(){z||(Nn.reset(),J.clear(),Me.clear(),Ae.clear(),_e.clear(),z=true,l.destroy());}};return et(),Nn}function Zn(i,t,u){return {type:"dag",nodes:i,merge:t??(a=>a.outputs),...u}}function Pr(i,t){let u=Object.keys(t);for(let[k,v]of Object.entries(t))for(let A of v.deps??[])if(!t[A])throw new Error(`[Directive MultiAgent] DAG pattern "${i}": node "${k}" depends on unknown node "${A}"`);if(!u.some(k=>{let v=t[k]?.deps;return !v||v.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${i}": no root nodes (every node has dependencies)`);let p=Object.create(null),f=Object.create(null);for(let k of u)f[k]=[];for(let[k,v]of Object.entries(t)){p[k]=(v.deps??[]).length;for(let A of v.deps??[])f[A].push(k);}let b=[];for(let k of u)p[k]===0&&b.push(k);let R=0;for(;b.length>0;){let k=b.shift();R++;for(let v of f[k]??[])p[v]--,p[v]===0&&b.push(v);}if(R!==u.length)throw new Error(`[Directive MultiAgent] DAG pattern "${i}": cycle detected. Visited ${R}/${u.length} nodes.`)}function Qn(i={}){let{defaultResponse:t={output:"mock response",totalTokens:10},responses:u={},recordCalls:a=true,onRun:p}=i,f=[],b=new Map(Object.entries(u)),R=t;return {run:async(v,A,Y)=>{p?.(v,A),a&&f.push({agent:v,input:A,options:Y,timestamp:Date.now()});let X=b.get(v.name)??R;if(X.generate){let N=X.generate(A,v);X={...X,...N};}if(X.error)throw X.error;X.delay&&X.delay>0&&await new Promise(N=>setTimeout(N,X.delay));let Ee=X.messages??[];for(let N of Ee)Y?.onMessage?.(N);let Ke=X.toolCalls??[];for(let N of Ke)Y?.onToolCall?.(N);return {output:X.output,messages:Ee,toolCalls:Ke,totalTokens:X.totalTokens??10}},getCalls:()=>[...f],getCallsFor:v=>f.filter(A=>A.agent.name===v),clearCalls:()=>f.length=0,setResponse:(v,A)=>b.set(v,A),setDefaultResponse:v=>R=v}}async function Ir(i,t,u){let a={agentName:"test-agent",input:"",...t},p={agentName:t.agentName??"test-agent",input:t.input??"",facts:u?.facts??{},...u},f=Date.now(),b=await i(a,p),R=Date.now()-f;return {...b,duration:R,testedData:a,assertPassed(){if(!b.passed)throw new Error(`Expected guardrail to pass, but it failed: ${b.reason}`)},assertFailed(k){if(b.passed)throw new Error("Expected guardrail to fail, but it passed");if(k!==void 0){if(typeof k=="string"&&!b.reason?.includes(k))throw new Error(`Expected failure reason to include "${k}", got: ${b.reason}`);if(k instanceof RegExp&&!k.test(b.reason??""))throw new Error(`Expected failure reason to match ${k}, got: ${b.reason}`)}},assertTransformed(k){if(b.transformed===void 0)throw new Error("Expected guardrail to transform input, but no transformation occurred");if(k!==void 0&&b.transformed!==k)throw new Error(`Expected transformation to be ${JSON.stringify(k)}, got: ${JSON.stringify(b.transformed)}`)}}}async function Ao(i,t){let u=[],a=[];for(let p=0;p<t.length;p++){let f=t[p],b=await Ir(i,f.input,f.context);u.push(b),(b.passed?b.transformed!==void 0?"transform":"pass":"fail")!==f.expect&&a.push({index:p,expected:f.expect,actual:b});}return {results:u,allPassed:()=>a.length===0,failures:()=>a}}function er(i={}){let{autoApprove:t,autoReject:u,delay:a=0,recordRequests:p=true}=i,f=[],b=new Map,R=[];return {async handle(k){p&&f.push(k);for(let v=R.length-1;v>=0;v--){let A=R[v];A.predicate(k)&&(R.splice(v,1),A.resolve(k));}return a>0&&await new Promise(v=>setTimeout(v,a)),u&&u(k)?"rejected":t&&t(k)?"approved":new Promise(v=>{b.set(k.id,{request:k,resolve:v});})},getRequests:()=>[...f],clearRequests:()=>f.length=0,approve(k){let v=b.get(k);v&&(v.resolve("approved"),b.delete(k));},reject(k,v){let A=b.get(k);if(A){A.resolve("rejected"),b.delete(k);let Y=f.find(X=>X.id===k);Y&&(Y.rejectionReason=v);}},waitForRequest(k,v=5e3){let A=f.find(k);return A?Promise.resolve(A):new Promise((Y,X)=>{let Ee={predicate:k,resolve:N=>{clearTimeout(Ke),Y(N);}},Ke=setTimeout(()=>{let N=R.indexOf(Ee);N>=0&&R.splice(N,1),X(new Error("Timeout waiting for approval request"));},v);R.push(Ee);})}}}function xo(i={}){let{mockResponses:t,defaultMockResponse:u,...a}=i,p=Qn({responses:t,defaultResponse:u}),f=er(),b=Wn({...a,runner:p.run,onApprovalRequest:k=>{f.handle(k),a.onApprovalRequest?.(k);}}),R=Object.create(b);return R.mockRunner=p,R.approvalSimulator=f,R.getCalls=()=>p.getCalls(),R.getApprovalRequests=()=>f.getRequests(),R.resetAll=()=>{b.reset(),p.clearCalls(),f.clearRequests();},R}function Co(){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 Do(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:p,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(p!==void 0&&u.agent.tokenUsage>p)throw new Error(`Expected token usage to be at most ${p}, 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:p,exact:f}=t.conversationLength,b=u.conversation.length;if(f!==void 0&&b!==f)throw new Error(`Expected conversation length to be exactly ${f}, got ${b}`);if(a!==void 0&&b<a)throw new Error(`Expected conversation length to be at least ${a}, got ${b}`);if(p!==void 0&&b>p)throw new Error(`Expected conversation length to be at most ${p}, got ${b}`)}}function Oo(i=Date.now()){let t=i,u=i;return {now:()=>t,advance:a=>{t+=a;},set:a=>{t=a;},reset:()=>{t=u;}}}function _o(i){let{mockResponses:t={},defaultMockResponse:u,...a}=i,p={};for(let[v,A]of Object.entries(t)){let Y=a.agents[v];Y&&(p[Y.agent.name]=A);}let f=Qn({responses:p,defaultResponse:u}),b=er(),R=zn({...a,runner:f.run,onApprovalRequest:v=>{b.handle(v),a.onApprovalRequest?.(v);}}),k=Object.create(R);return k.mockRunner=f,k.approvalSimulator=b,k.getCalls=()=>f.getCalls(),k.getApprovalRequests=()=>b.getRequests(),k.resetAll=()=>{R.reset(),f.clearCalls(),b.clearRequests();},k}function Mo(i,t){if(t.agentStatus)for(let[u,a]of Object.entries(t.agentStatus)){let p=i.getAgentState(u);if(!p)throw new Error(`Expected agent "${u}" to exist, but it was not found`);if(p.status!==a)throw new Error(`Expected agent "${u}" status to be "${a}", got "${p.status}"`)}if(t.totalTokens){let{agentId:u,min:a,max:p}=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(p!==void 0&&f.totalTokens>p)throw new Error(`Expected agent "${u}" tokens to be at most ${p}, got ${f.totalTokens}`)}else {let f=i.getAllAgentStates(),b=Object.values(f).reduce((R,k)=>R+k.totalTokens,0);if(a!==void 0&&b<a)throw new Error(`Expected total tokens to be at least ${a}, got ${b}`);if(p!==void 0&&b>p)throw new Error(`Expected total tokens to be at most ${p}, got ${b}`)}}if(t.globalTokens){let{min:u,max:a}=t.globalTokens,p=i.totalTokens;if(u!==void 0&&p<u)throw new Error(`Expected global tokens to be at least ${u}, got ${p}`);if(a!==void 0&&p>a)throw new Error(`Expected global tokens to be at most ${a}, got ${p}`)}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 Io(i,t,u){return Zn(i,t??(p=>p.outputs),u)}function No(i,t){if(t.nodeStatuses)for(let[u,a]of Object.entries(t.nodeStatuses)){let p=i.statuses[u];if(p!==a)throw new Error(`Expected node "${u}" status to be "${a}", got "${p}"`)}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 p=i.outputs[u];if(p!==a)throw new Error(`Expected node "${u}" output to be ${JSON.stringify(a)}, got ${JSON.stringify(p)}`)}}function jo(i,t){let u=Ht({maxEvents:t?.maxEvents??500});if(i)for(let a of i)u.record({timestamp:Date.now(),snapshotId:null,agentId:"",...a});return u}function qo(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,p]of Object.entries(t.agentEvents)){let f=i.getEventsForAgent(a).length;if(f!==p)throw new Error(`Expected ${p} events for agent "${a}", got ${f}`)}if(t.hasType&&!u.some(p=>p.type===t.hasType))throw new Error(`Expected timeline to contain event of type "${t.hasType}"`);if(t.doesNotHaveType&&u.some(p=>p.type===t.doesNotHaveType))throw new Error(`Expected timeline NOT to contain event of type "${t.doesNotHaveType}"`)}function Go(i,t){let u=0,a=t?.failAfter??0;return async(p,f,b)=>{if(u++,a>0&&u<=a)return {output:"success",messages:[],toolCalls:[],totalTokens:10};throw t?.delay&&t.delay>0&&await new Promise(R=>setTimeout(R,t.delay)),i??new Error("Runner failed")}}function Bo(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 Lo(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 Fo(i=100){let t=new pn({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 Ho(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 Uo(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 b=i.autoResumeDelay??0,R=()=>{u&&(i.cancel?u.cancelBreakpoint(f.id,i.cancelReason):u.resumeBreakpoint(f.id,i.modifications));};b>0?setTimeout(R,b):queueMicrotask(R);},hits:t,attachTo:f=>{u=f,a=true;}}}function Jo(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(p=>p.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(p=>p.agentId).join(", ");throw new Error(`Expected breakpoint for agent "${t.agentId}", found agents: [${a}]`)}}function Wo(i,t){return {safeParse:u=>i(u)?{success:true,data:u}:{success:false,error:{message:"Validation failed"}},description:t}}async function Ko(i){let t=[];for await(let u of i)t.push(u);return t}function Vo(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 Xo(i){let t=i?.passAfter??1,u=i?.feedback??"Needs improvement",a=i?.score,p=0;return (f,b)=>{p++;let R=p>=t;return {passed:R,feedback:R?void 0:u,score:a??(R?1:.5)}}}function Yo(i,t){let u=i.getAll();for(let[a,p]of Object.entries(t)){let f=u[a];if(f!==p)throw new Error(`Expected scratchpad key "${a}" to be ${JSON.stringify(p)}, got ${JSON.stringify(f)}`)}}function zo(i,t){let u=i.derived;for(let[a,p]of Object.entries(t)){let f=u[a];if(typeof p=="object"&&p!==null){let b=R=>JSON.stringify(R,Object.keys(R).sort());if(b(f)!==b(p))throw new Error(`Expected derived value "${a}" to be ${JSON.stringify(p)}, got ${JSON.stringify(f)}`)}else if(f!==p)throw new Error(`Expected derived value "${a}" to be ${JSON.stringify(p)}, got ${JSON.stringify(f)}`)}}export{Lo as assertAgentHealth,Jo as assertBreakpointHit,Ho as assertCheckpoint,No as assertDagExecution,zo as assertDerivedValues,Mo as assertMultiAgentState,Vo as assertMultiplexedStream,Do as assertOrchestratorState,Bo as assertRerouted,Yo as assertScratchpadState,qo as assertTimelineEvents,Ko as collectMultiplexedStream,er as createApprovalSimulator,Uo as createBreakpointSimulator,Co as createConstraintRecorder,Go as createFailingRunner,Qn as createMockAgentRunner,Wo as createMockSchema,Fo as createTestCheckpointStore,Io as createTestDag,_o as createTestMultiAgentOrchestrator,xo as createTestOrchestrator,Xo as createTestReflectionEvaluator,jo as createTestTimeline,Oo as createTimeController,Ir as testGuardrail,Ao 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 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
|
|
49
49
|
//# sourceMappingURL=testing.js.map
|