@directive-run/ai 0.8.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-5ERCL33C.js +16 -0
- package/dist/chunk-5ERCL33C.js.map +1 -0
- package/dist/chunk-K2LZMRLN.js +72 -0
- package/dist/chunk-K2LZMRLN.js.map +1 -0
- package/dist/chunk-KALRDVN5.cjs +72 -0
- package/dist/chunk-KALRDVN5.cjs.map +1 -0
- package/dist/{chunk-WCJFIC22.cjs → chunk-L35IQAWD.cjs} +8 -6
- package/dist/chunk-L35IQAWD.cjs.map +1 -0
- package/dist/index.cjs +20 -20
- package/dist/index.d.cts +48 -4
- package/dist/index.d.ts +48 -4
- package/dist/index.js +20 -20
- package/dist/index.js.map +1 -1
- package/dist/multi-agent-orchestrator-675FR2HF.js +2 -0
- package/dist/{multi-agent-orchestrator-FEHVHZXA.js.map → multi-agent-orchestrator-675FR2HF.js.map} +1 -1
- package/dist/multi-agent-orchestrator-SH5TRRS3.cjs +2 -0
- package/dist/{multi-agent-orchestrator-QWJNM4EZ.cjs.map → multi-agent-orchestrator-SH5TRRS3.cjs.map} +1 -1
- package/dist/{orchestrator-types-tATJCBi5.d.cts → orchestrator-types-BmvoZgfO.d.cts} +14 -0
- package/dist/{orchestrator-types-DryFJyW9.d.ts → orchestrator-types-D6gzobwg.d.ts} +14 -0
- package/dist/testing.cjs +1 -1
- package/dist/testing.d.cts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-7EJPXKDP.js +0 -50
- package/dist/chunk-7EJPXKDP.js.map +0 -1
- package/dist/chunk-B4ATEGA2.cjs +0 -50
- package/dist/chunk-B4ATEGA2.cjs.map +0 -1
- package/dist/chunk-MNYANBNX.js +0 -14
- package/dist/chunk-MNYANBNX.js.map +0 -1
- package/dist/chunk-WCJFIC22.cjs.map +0 -1
- package/dist/multi-agent-orchestrator-FEHVHZXA.js +0 -2
- package/dist/multi-agent-orchestrator-QWJNM4EZ.cjs +0 -2
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import {t,createModule,createSystem}from'@directive-run/core';import {requirementGuard,getBridgeFact,setBridgeFact,createCallbackPlugin}from'@directive-run/core/adapter-utils';import {safeStringify}from'@directive-run/core/internals';var Tr=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"]),Nn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function jn(o={}){let t=o.maxEvents??2e3,i=o.goToSnapshot;if(!Number.isFinite(t)||t<1)throw new Error("[Directive DebugTimeline] maxEvents must be >= 1");let u=[],p=0,f=new Set;return {record(b){let w={...b,id:p++};u.push(w);let m=u.length-t;m>0&&u.splice(0,m);for(let S of f)try{S(w);}catch(x){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.error("[Directive DebugTimeline] Listener threw:",x instanceof Error?x.message:x);}return w},getEvents(){return [...u]},getEventsForAgent(b){return u.filter(w=>w.agentId===b)},getEventsByType(b){return u.filter(w=>w.type===b)},getEventsAtSnapshot(b){return u.filter(w=>w.snapshotId===b)},getEventsInRange(b,w){return u.filter(m=>m.timestamp>=b&&m.timestamp<=w)},forkFrom(b){let w=-1;for(let m=u.length-1;m>=0;m--)if(u[m].snapshotId!==null&&u[m].snapshotId<=b){w=u[m].id;break}if(w>=0){let m=u.length;for(let S=u.length-1;S>=0;S--)if(u[S].id<=w){m=S+1;break}u=u.slice(0,m);}else u=[];i&&i(b);},export(){return JSON.stringify({version:1,events:u,nextId:p})},import(b){let w;try{w=JSON.parse(b);}catch{throw new Error("[Directive DebugTimeline] Invalid JSON")}if(!w||typeof w!="object")throw new Error("[Directive DebugTimeline] Invalid timeline data");for(let x of Object.keys(w))if(Nn.has(x))throw new Error(`[Directive DebugTimeline] Blocked key in import: ${x}`);let m=w;if(!Array.isArray(m.events))throw new Error("[Directive DebugTimeline] Missing events array");let S=[];for(let x of m.events){if(!x||typeof x!="object")continue;for(let Q of Object.keys(x))if(Nn.has(Q))throw new Error(`[Directive DebugTimeline] Blocked key in event: ${Q}`);let I=x;typeof I.id=="number"&&typeof I.type=="string"&&Tr.has(I.type)&&typeof I.timestamp=="number"&&S.push(x);}u=S.length>t?S.slice(-t):S,p=typeof m.nextId=="number"?m.nextId:S.length;},clear(){u=[],p=0;},subscribe(b){return f.add(b),()=>{f.delete(b);}},get length(){return u.length}}}function $n(o,t){let i=new Map;return {name:"directive-ai-debug-timeline",onConstraintEvaluate(u,p){o.record({type:"constraint_evaluate",timestamp:Date.now(),snapshotId:t(),constraintId:u,fired:p});},onResolverStart(u,p){i.set(u,Date.now()),o.record({type:"resolver_start",timestamp:Date.now(),snapshotId:t(),resolverId:u,requirementType:p.requirement.type});},onResolverComplete(u){let p=i.get(u);i.delete(u),o.record({type:"resolver_complete",timestamp:Date.now(),snapshotId:t(),resolverId:u,durationMs:p?Date.now()-p:0});},onResolverError(u,p,f){let l=i.get(u);i.delete(u);let b=f instanceof Error?f.message:String(f);o.record({type:"resolver_error",timestamp:Date.now(),snapshotId:t(),resolverId:u,errorMessage:b,durationMs:l?Date.now()-l:0});}}}function Wt(o,t,i){return typeof o=="function"?{name:`${i}-guardrail-${t}`,fn:o,critical:true}:o}function Sr(o,t){let{backoff:i="exponential",baseDelayMs:u=100,maxDelayMs:p=5e3}=t,f;switch(i){case "exponential":f=u*2**(o-1);break;case "linear":f=u*o;break;default:f=u;}return Math.min(f,p)}function Gn(o,t){return t?.aborted?Promise.reject(t.reason??new Error("Aborted")):new Promise((i,u)=>{if(!t){setTimeout(i,o);return}let p=()=>{clearTimeout(f),u(t.reason??new Error("Aborted"));},f=setTimeout(()=>{t.removeEventListener("abort",p),i();},o);t.addEventListener("abort",p,{once:true});})}async function Kt(o,t,i,u){let{retry:p}=o,f=Math.max(p?.attempts??1,1),l;for(let b=1;b<=f;b++)try{return await o.fn(t,i)}catch(w){if(l=w instanceof Error?w:new Error(String(w)),b<f){let m=Sr(b,p??{});await Gn(m,u);}}return {passed:false,reason:`Guardrail "${o.name}" failed after ${f} attempt(s): ${l.message}`}}function xr(o,t){let{backoff:i="exponential",baseDelayMs:u=1e3,maxDelayMs:p=3e4}=t,f;switch(i){case "exponential":f=u*2**(o-1);break;case "linear":f=u*o;break;default:f=u;}return Math.min(f,p)}async function qn(o,t,i,u,p){let f=Math.max(p?.attempts??1,1),l=p?.isRetryable??(()=>true),b=p?.onRetry,w;for(let m=1;m<=f;m++)try{return await o(t,i,u)}catch(S){if(w=S instanceof Error?S:new Error(String(S)),m<f){let x=true;try{x=l(w);}catch{break}if(!x)break;let I=xr(m,p??{});try{b?.(m,w,I);}catch{}await Gn(I,u?.signal);}else break}throw w}var cn={successRate:.5,latency:.3,circuitState:.2};function Ln(o={}){let t=o.windowMs??6e4,i=o.maxNormalLatencyMs??5e3,u=o.maxEventsPerAgent??1e3,p={successRate:o.weights?.successRate??cn.successRate,latency:o.weights?.latency??cn.latency,circuitState:o.weights?.circuitState??cn.circuitState};if(!Number.isFinite(t)||t<=0)throw new Error("[Directive HealthMonitor] windowMs must be a positive number");if(!Number.isFinite(i)||i<=0)throw new Error("[Directive HealthMonitor] maxNormalLatencyMs must be a positive number");if(!Number.isFinite(u)||u<1)throw new Error("[Directive HealthMonitor] maxEventsPerAgent must be >= 1");for(let[H,$]of Object.entries(p))if($<0||$>1)throw new Error(`[Directive HealthMonitor] weight "${H}" must be between 0 and 1 (got ${$})`);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 l=new Map,b=new Map,w=0,m=null,S=-1;function x(H){let $=l.get(H);return $||($=[],l.set(H,$)),$}function I(H,$){let de=$-t,pe=0;for(;pe<H.length&&H[pe].timestamp<de;)pe++;let Me=H.length-pe-u;Me>0&&(pe+=Me),pe>0&&H.splice(0,pe);}function Q(H){let $=l.get(H);if(!$||$.length===0)return 50;let de=Date.now();if(I($,de),$.length===0)return 50;let Me=$.filter(Re=>Re.success).length/$.length,Ie=$.reduce((Re,Le)=>Re+Le.latencyMs,0)/$.length,tt=Math.min(Ie/i,1),V=b.get(H)??"CLOSED",se=V==="CLOSED"?1:V==="HALF_OPEN"?.5:0,De=Me*p.successRate+(1-tt)*p.latency+se*p.circuitState;return Math.round(De*100)}function oe(H){let $=x(H),de=Date.now();I($,de);let pe=$.filter(se=>se.success).length,Me=$.length-pe,Ie=$.length>0?pe/$.length:0,tt=$.length>0?$.reduce((se,De)=>se+De.latencyMs,0)/$.length:0,V=[];for(let se=$.length-1;se>=0&&V.length<5;se--)$[se].errorMessage&&V.unshift($[se].errorMessage);return {agentId:H,circuitState:b.get(H)??"CLOSED",successRate:Ie,avgLatencyMs:tt,recentFailures:Me,recentSuccesses:pe,healthScore:Q(H),lastErrors:V}}return {recordSuccess(H,$){let de=x(H);de.push({success:true,latencyMs:$,timestamp:Date.now()}),I(de,Date.now()),w++;},recordFailure(H,$,de){let pe=x(H);pe.push({success:false,latencyMs:$,timestamp:Date.now(),errorMessage:de?.message}),I(pe,Date.now()),w++;},getMetrics(H){return oe(H)},getAllMetrics(){if(w===S&&m)return m;let H=Object.create(null);for(let $ of l.keys())H[$]=oe($);return m=H,S=w,H},getHealthScore(H){return Q(H)},updateCircuitState(H,$){b.set(H,$),w++;},reset(){l.clear(),b.clear(),w++,m=null,S=-1;}}}function Er(o){let t=[];if(o.category&&t.push(o.category),o.tags?.length)for(let i of o.tags)i!==o.category&&t.push(i);return t.length>0?` [${t.join(", ")}]`:""}function ut(o,t){if(!t)return null;let i=t.label??o,u=t.description?`: ${t.description}`:"",p=Er(t);return `- ${t.label?`${o} (${i})`:o}${u}${p}`}function dn(o){let t=[],i=o.modules.map(m=>ut(m.id,m.meta)).filter(Boolean);i.length>0&&t.push(`### Modules
|
|
2
|
+
${i.join(`
|
|
3
|
+
`)}`);let u=o.constraints.filter(m=>m.active&&m.meta).map(m=>ut(m.id,m.meta)).filter(Boolean);if(u.length>0&&t.push(`### Active Constraints
|
|
4
|
+
${u.join(`
|
|
5
|
+
`)}`),o.unmet.length>0){let m=new Map(o.constraints.filter(x=>x.meta?.label).map(x=>[x.id,x.meta.label])),S=o.unmet.map(x=>{let I=m.get(x.fromConstraint)??x.fromConstraint;return `- ${x.requirement.type} \u2014 from "${I}"`});t.push(`### Unmet Requirements
|
|
6
|
+
${S.join(`
|
|
7
|
+
`)}`);}let p=o.resolverDefs.map(m=>ut(m.id,m.meta)).filter(Boolean);p.length>0&&t.push(`### Resolvers
|
|
8
|
+
${p.join(`
|
|
9
|
+
`)}`);let f=o.events.map(m=>ut(m.name,m.meta)).filter(Boolean);f.length>0&&t.push(`### Events
|
|
10
|
+
${f.join(`
|
|
11
|
+
`)}`);let l=o.facts.map(m=>ut(m.key,m.meta)).filter(Boolean);l.length>0&&t.push(`### Annotated Facts
|
|
12
|
+
${l.join(`
|
|
13
|
+
`)}`);let b=o.effects.map(m=>ut(m.id,m.meta)).filter(Boolean);b.length>0&&t.push(`### Effects
|
|
14
|
+
${b.join(`
|
|
15
|
+
`)}`);let w=o.derivations.map(m=>ut(m.id,m.meta)).filter(Boolean);return w.length>0&&t.push(`### Derivations
|
|
16
|
+
${w.join(`
|
|
17
|
+
`)}`),t.length===0?"":`## System Context
|
|
18
|
+
|
|
19
|
+
${t.join(`
|
|
20
|
+
|
|
21
|
+
`)}`}function Fr(o){return dn(o.inspect())}var Ve=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 Bn(o){return o instanceof Ve}var Vt="__agent",yt="__approval",Yt="__conversation",Xt="__toolCalls",kt="__breakpoints";var Ee="__scratchpad",pn={facts:{[Vt]:t.object(),[yt]:t.object(),[Yt]:t.array(),[Xt]:t.array(),[kt]:t.object()},derivations:{},events:{},requirements:{}};function Ct(o){return getBridgeFact(o,Vt)}function Ye(o,t){setBridgeFact(o,Vt,t);}function vt(o){return getBridgeFact(o,yt)}function Xe(o,t){setBridgeFact(o,yt,t);}function gn(o){return getBridgeFact(o,Yt)}function wt(o,t){setBridgeFact(o,Yt,t);}function fn(o){return getBridgeFact(o,Xt)}function Rt(o,t){setBridgeFact(o,Xt,t);}function ze(o){return getBridgeFact(o,kt)}function Ze(o,t){setBridgeFact(o,kt,t);}function Oe(o){return {agent:Ct(o),approval:vt(o),conversation:gn(o),toolCalls:fn(o)}}function zt(o){let t=Object.create(null);for(let[i,u]of Object.entries(o))t[i]={priority:u.priority??0,when:p=>{let f=Oe(p),l={...p,...f};return u.when(l)},require:p=>{let f=Oe(p),l={...p,...f};return typeof u.require=="function"?u.require(l):u.require}};return t}function Yr(o,t,i){let u=Object.create(null);for(let[p,f]of Object.entries(o))u[p]={requirement:f.requirement,key:f.key,resolve:async(l,b)=>{let w=Oe(b.facts),S={facts:{...b.facts,...w},runAgent:async(x,I,Q)=>t(x,I,Oe(i()),Q),signal:b.signal};await f.resolve(l,S);}};return u}var Dt=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;}};function Ar(o,t,i){return `${o}
|
|
22
|
+
|
|
23
|
+
Feedback on your previous response:
|
|
24
|
+
${t}
|
|
25
|
+
|
|
26
|
+
Please improve your response.`}function zr(o,t){let i=t.maxIterations??2,u=t.buildRetryInput??Ar,p=t.onExhausted??"accept-last";if(i<1)throw new Error("[Directive Reflection] maxIterations must be >= 1");return typeof process<"u"&&process.env?.NODE_ENV!=="production"&&i>3&&console.warn("[Directive Reflection] maxIterations > 3 rarely improves quality. Consider using maxIterations <= 3 to avoid unbounded token burn."),async(f,l,b)=>{let w=[],m=l,S=0,x=null;for(let I=0;I<i;I++){let Q=Date.now(),oe=await o(f,m,b);x=oe,S+=oe.totalTokens;let H={input:l,iteration:I,result:oe,history:[...w]},$=await t.evaluate(oe.output,H);w.push($);let de=Date.now()-Q;try{t.onIteration?.({iteration:I,passed:$.passed,feedback:$.feedback,score:$.score,durationMs:de});}catch{}if($.passed)return {...oe,totalTokens:S};if(t.budgetThreshold!==void 0&&S>=t.budgetThreshold)break;I<i-1&&$.feedback&&(m=u(l,$.feedback,I));}if(p==="throw")throw new Dt({iterations:i,history:w,lastResult:x,totalTokens:S});return {...x,totalTokens:S}}}var Ot=200,Cr=0;function Fn(){return `bp_${Date.now().toString(36)}_${(++Cr).toString(36)}`}function Hn(o,t,i){for(let u of o)if(u.type===t){if(!u.when)return u;try{if(u.when(i))return u}catch{}}return null}function _t(){return {pending:[],resolved:[],cancelled:[]}}var Un=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Qe(){let o=Date.now().toString(36),t=crypto.randomUUID().slice(0,8);return `ckpt_${o}_${t}`}function mn(o){if(!o||typeof o!="object")return false;for(let u of Object.keys(o))if(Un.has(u))return false;let t=o;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 u of Object.keys(t.localState))if(Un.has(u))return false;let i=t.localState;return !(i.type!=="single"&&i.type!=="multi"||t.orchestratorType!=="single"&&t.orchestratorType!=="multi")}var Jn=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(!mn(t))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let i=this.order.indexOf(t.id);return i>=0&&this.order.splice(i,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 i=this.store.get(t);return {id:i.id,label:i.label,createdAt:i.createdAt}})}async delete(t){if(!this.store.has(t))return false;this.store.delete(t);let i=this.order.indexOf(t);return i>=0&&this.order.splice(i,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,i=0,u=[];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||u.push(p);}for(let p of u){this.store.delete(p);let f=this.order.indexOf(p);f>=0&&this.order.splice(f,1),i++;}return i}evictOldest(){if(this.preserveLabeled)for(let i=0;i<this.order.length;i++){let u=this.order[i],p=this.store.get(u);if(p&&!p.label)return this.order.splice(i,1),this.store.delete(u),true}let t=this.order.shift();return t?(this.store.delete(t),true):false}};var hn=class{buffer=[];maxSize;strategy;pullWaiters=[];pushWaiters=[];closed=false;droppedCount=0;constructor(t="buffer",i=1e3){this.strategy=t,this.maxSize=i;}async push(t){if(this.closed)return false;let i=this.pullWaiters.shift();if(i)return i(t),true;if(this.buffer.length>=this.maxSize)switch(this.strategy){case "drop":return this.droppedCount++,false;case "block":if(await new Promise(u=>{this.pushWaiters.push(u);}),this.closed)return false;break;}return this.buffer.push(t),true}async pull(){let t=this.pushWaiters.shift();return t&&t(),this.buffer.length>0?this.buffer.shift():this.closed?null:new Promise(i=>{this.pullWaiters.push(i);})}close(){this.closed=true;for(let t of this.pullWaiters)t(null);this.pullWaiters=[];for(let t of this.pushWaiters)t();this.pushWaiters=[];}getDroppedCount(){return this.droppedCount}};function oo(o,t={}){let{streamingGuardrails:i=[]}=t;return (u,p,f={})=>{let{signal:l,backpressure:b="buffer",bufferSize:w=1e3,guardrailCheckInterval:m=50,stopOnGuardrail:S=true}=f;if(m<=0||!Number.isFinite(m))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${m}`);let x=new hn(b,w),I=new AbortController,Q="",oe=0,H=false,$=Date.now(),de;l&&(de=()=>I.abort(),l.addEventListener("abort",de));let pe=()=>{de&&l&&l.removeEventListener("abort",de);};async function Me(){for(let V of i)try{let se=await V.check(Q,oe);if(!se.passed){let De=V.stopOnFail!==!1,Re={type:"guardrail_triggered",guardrailName:V.name,reason:se.reason??"Guardrail check failed",partialOutput:Q,stopped:De};return await x.push(Re),De&&(typeof S=="function"?S:()=>S)(Re)&&(H=!0,I.abort()),Re}}catch{}return null}let Ie=(async()=>{await x.push({type:"progress",phase:"starting",message:"Starting agent"});try{let V=await o(u,p,{signal:I.signal,onToken:async Re=>{H||(oe++,Q+=Re,await x.push({type:"token",data:Re,tokenCount:oe}),oe%m===0&&await Me());},onToolStart:async(Re,Le,We)=>{await x.push({type:"progress",phase:"tool_calling",message:`Calling ${Re}`}),await x.push({type:"tool_start",tool:Re,toolCallId:Le,arguments:We});},onToolEnd:async(Re,Le,We)=>{await x.push({type:"tool_end",tool:Re,toolCallId:Le,result:We}),await x.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async Re=>{await x.push({type:"message",message:Re});}});await Me();let se=Date.now()-$,De=x.getDroppedCount();return await x.push({type:"done",totalTokens:V.totalTokens,duration:se,droppedTokens:De}),x.close(),V}catch(V){let se={type:"error",error:V instanceof Error?V:new Error(String(V)),partialOutput:Q||void 0};throw await x.push(se),x.close(),V}finally{pe();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let V=await x.pull();return V===null?{done:true,value:void 0}:{done:false,value:V}}}}},result:Ie,abort:()=>I.abort()}}}function so(o){let{checkFn:t,threshold:i=.8,stopOnFail:u=true}=o;return {name:"toxicity-streaming",stopOnFail:u,async check(p){let f=await t(p);return f>i?{passed:false,reason:`Toxicity score ${f.toFixed(2)} exceeds threshold ${i}`,severity:"critical"}:{passed:true}}}}function ao(o){let{maxTokens:t,warnAt:i,stopOnFail:u=true}=o,p=false;return {name:"length-streaming",stopOnFail:u,check(f,l){return l>=t?{passed:false,reason:`Output exceeded maximum length of ${t} tokens`,severity:"error"}:i&&l>=i&&!p?(p=true,{passed:true,warning:`Approaching maximum length: ${l}/${t} tokens`,severity:"warning"}):{passed:true}}}}function io(o){let{patterns:t,stopOnFail:i=true}=o;return {name:"pattern-streaming",stopOnFail:i,check(u){for(let{regex:p,name:f}of t)if(p.lastIndex=0,p.test(u))return {passed:false,reason:`Detected ${f} pattern in output`,severity:"error"};return {passed:true}}}}function uo(o,t={}){let{name:i="combined-streaming",stopOnFirstFail:u=true}=t;return {name:i,stopOnFail:u,async check(p,f){let l=[];for(let b of o){let w=await b.check(p,f);if(!w.passed){if(u)return {...w,reason:`[${b.name}] ${w.reason}`};l.push(`[${b.name}] ${w.reason??"failed"}`);}}return l.length>0?{passed:false,reason:l.join("; ")}:{passed:true}}}}function lo(o,t,i={}){let{minTokens:u=0,stopOnFail:p=true}=i;return {name:o,stopOnFail:p,async check(f,l){if(l<u)return {passed:true};let b=await t({output:f,agentName:"streaming",input:"",messages:[]},{agentName:"streaming",input:"",facts:{}});return {passed:b.passed,reason:b.reason,severity:b.passed?void 0:"error"}}}}async function co(o){let t="";for await(let i of o)i.type==="token"&&(t+=i.data);return t}async function*po(o,t){for await(let i of o)await t(i),yield i;}async function*go(o,t){let i=new Set(t);for await(let u of o)i.has(u.type)&&(yield u);}async function*fo(o,t){for await(let i of o)yield await t(i);}var Dr=1e4;function Wn(o){if(o.length===0)return {stream:{[Symbol.asyncIterator](){let S={done:true,value:void 0};return {async next(){return S},async return(){return S}}}},getDroppedCount:()=>0};let t=[],i=[],u=o.length,p=false,f=0;function l(m){if(p)return;let S=i.shift();if(S){S(m);return}t.length<Dr?t.push(m):f++;}function b(){if(u--,u<=0){p=true;for(let m of i)m(null);i.length=0;}}for(let m of o)(async()=>{try{for await(let S of m.stream)l({chunk:S,agentId:m.agentId});}catch(S){l({chunk:{type:"error",error:S instanceof Error?S:new Error(String(S))},agentId:m.agentId});}finally{b();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return t.length>0?{done:false,value:t.shift()}:p?{done:true,value:void 0}:new Promise(m=>{i.push(S=>{m(S===null?{done:true,value:void 0}:{done:false,value:S});});})},return(){p=true,t.length=0;for(let m of i)m(null);return i.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>f}}function Mt(o){if(o.length>1048576)throw new Error(`[Directive] Output too large for JSON extraction (${o.length} chars, max 1048576).`);let t=o.trim();try{return JSON.parse(t)}catch{}let i=t.indexOf("{"),u=t.indexOf("["),p,f,l;if(i===-1&&u===-1)throw new Error("[Directive] No JSON object or array found in output");i===-1?(p=u,f="[",l="]"):u===-1?(p=i,f="{",l="}"):(p=Math.min(i,u),f=p===i?"{":"[",l=p===i?"}":"]");let b=0,w=false,m=false;for(let S=p;S<t.length;S++){let x=t[S];if(m){m=false;continue}if(x==="\\"){m=true;continue}if(x==='"'){w=!w;continue}if(!w){if(x===f)b++;else if(x===l&&(b--,b===0)){let I=t.slice(p,S+1);try{return JSON.parse(I)}catch{let Q=I.replace(/"(?:[^"\\]|\\.)*"/g,oe=>oe.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"));return JSON.parse(Q)}}}}throw new Error("[Directive] No valid JSON found in output")}function Or(o){return o?o.issues&&o.issues.length>0?o.issues.map(t=>t.message).join("; "):o.message??"Validation failed":"Validation failed"}function Kn(o,t){let{schema:i,maxRetries:u=2,extractJson:p=Mt,schemaDescription:f}=t;if(!Number.isFinite(u)||u<0)throw new Error("[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.");let l=f??i.description??"the specified JSON schema";return async(b,w,m)=>{let S={...b,instructions:(b.instructions??"")+`
|
|
27
|
+
|
|
28
|
+
IMPORTANT: Respond with valid JSON matching `+l+". Output ONLY the JSON object, no additional text or markdown formatting."},x,I;for(let Q=0;Q<=u;Q++){let oe=Q===0?w:`${w}
|
|
29
|
+
|
|
30
|
+
Your previous response was not valid JSON. Error: ${I}
|
|
31
|
+
Please try again with valid JSON only.`,H=await o(S,oe,m);x=H;let $=typeof H.output=="string"?H.output:JSON.stringify(H.output);try{let de=p($),pe=i.safeParse(de);if(pe.success)return {...H,output:pe.data};I=Or(pe.error);}catch(de){I=de instanceof Error?de.message:String(de);}}throw new bn(`[Directive] Failed to get valid structured output after ${u+1} attempts: ${I}`,x)}}var bn=class extends Error{lastResult;constructor(t,i){super(t),this.name="StructuredOutputError",this.lastResult=i;}};function yn(o,t){if(Object.is(o,t))return true;if(typeof o!=typeof t||o===null||t===null||typeof o!="object")return false;if(Array.isArray(o)){if(!Array.isArray(t)||o.length!==t.length)return false;for(let l=0;l<o.length;l++)if(o[l]!==t[l])return false;return true}let i=o,u=t,p=Object.keys(i),f=Object.keys(u);if(p.length!==f.length)return false;for(let l of p)if(i[l]!==u[l])return false;return true}var _e=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((i,u)=>{let p,f={resolve:l=>{p&&t&&t.removeEventListener("abort",p),i(l);},reject:u};this.queue.push(f),t&&(p=()=>{let l=this.queue.indexOf(f);l>=0&&(this.queue.splice(l,1),u(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"),i=this.queue.splice(0,this.queue.length);for(let u of i)u.reject(t);this.count=this.maxPermits;}};function lt(o){switch(o.type){case "sequential":return o.step;case "supervisor":return o.round;case "reflect":return o.iteration;case "debate":return o.round;case "dag":return o.completedCount;case "goal":return o.step}}function _r(o){let t=lt(o),i=o.stepsTotal??null;switch(o.type){case "sequential":{let u=o.results.reduce((l,b)=>l+b.totalTokens,0),p=o.results.length>0?u/o.results.length:0,f=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:p>0&&f!=null?Math.round(p*f):null,estimatedStepsRemaining:f}}case "supervisor":{let u=o.workerResults.reduce((f,l)=>f+l.totalTokens,0),p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "reflect":{let u=o.history.reduce((f,l)=>f+l.producerTokens+l.evaluatorTokens,0),p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "debate":{let u=o.tokensConsumed,p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "dag":{let u=i??Object.keys(o.statuses).length,p=o.completedCount,f=Object.values(o.nodeResults).reduce((w,m)=>w+m.totalTokens,0),l=p>0?f/p:0,b=u-p;return {percentage:u>0?Math.round(p/u*100):0,stepsCompleted:p,stepsTotal:u,tokensConsumed:f,estimatedTokensRemaining:b>0?Math.round(l*b):0,estimatedStepsRemaining:b}}case "goal":{let u=Object.values(o.nodeOutputs).reduce((f,l)=>f+l.totalTokens,0),p=o.lastSatisfaction;return {percentage:Math.round(p*100),stepsCompleted:t,stepsTotal:i??null,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:o.stepMetrics.length>0?Mr(o):null}}}}function Mr(o){let t=o.stepMetrics;if(t.length<2)return null;let i=1-o.lastSatisfaction;if(i<=0)return 0;let p=t.reduce((f,l)=>f+Math.max(0,l.satisfactionDelta),0)/t.length;return p<=0?null:Math.ceil(i/p)}function Pr(o,t){if(o.type!==t.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${o.type} vs ${t.type}`);let i=p=>{switch(p.type){case "sequential":return p.results.reduce((f,l)=>f+l.totalTokens,0);case "supervisor":return p.workerResults.reduce((f,l)=>f+l.totalTokens,0);case "reflect":return p.history.reduce((f,l)=>f+l.producerTokens+l.evaluatorTokens,0);case "debate":return p.tokensConsumed;case "dag":return Object.values(p.nodeResults).reduce((f,l)=>f+l.totalTokens,0);case "goal":return Object.values(p.nodeOutputs).reduce((f,l)=>f+l.totalTokens,0)}},u={patternType:o.type,stepDelta:lt(t)-lt(o),tokensDelta:i(t)-i(o)};if(o.type==="goal"&&t.type==="goal"){let p=new Set(Object.keys(o.facts)),f=new Set(Object.keys(t.facts)),l=[],b=[],w=[];for(let m of f)p.has(m)?JSON.stringify(o.facts[m])!==JSON.stringify(t.facts[m])&&w.push({key:m,before:o.facts[m],after:t.facts[m]}):l.push(m);for(let m of p)f.has(m)||b.push(m);u.facts={added:l,removed:b,changed:w};}if(o.type==="dag"&&t.type==="dag"){let p=new Set(Object.entries(o.statuses).filter(([,f])=>f==="completed").map(([f])=>f));u.nodesCompleted=Object.entries(t.statuses).filter(([f,l])=>l==="completed"&&!p.has(f)).map(([f])=>f);}if(o.type==="goal"&&t.type==="goal"){let p=new Set(o.completedNodes);u.nodesCompleted=t.completedNodes.filter(f=>!p.has(f));}return u}async function Ir(o,t,i){let{createMultiAgentOrchestrator:u}=await import('./multi-agent-orchestrator-675FR2HF.js'),p=await t.load(i);if(!p)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let f=structuredClone(p),l=u({...o,checkpointStore:t});return l.restore(f),l}function kn(o,t){let i=Object.keys(t);for(let[w,m]of Object.entries(t))for(let S of m.deps??[])if(!t[S])throw new Error(`[Directive MultiAgent] DAG pattern "${o}": node "${w}" depends on unknown node "${S}"`);if(!i.some(w=>{let m=t[w]?.deps;return !m||m.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${o}": no root nodes (every node has dependencies)`);let p=Object.create(null),f=Object.create(null);for(let w of i)f[w]=[];for(let[w,m]of Object.entries(t)){p[w]=(m.deps??[]).length;for(let S of m.deps??[])f[S].push(w);}let l=[];for(let w of i)p[w]===0&&l.push(w);let b=0;for(;l.length>0;){let w=l.shift();b++;for(let m of f[w]??[])p[m]--,p[m]===0&&l.push(m);}if(b!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${o}": cycle detected. Visited ${b}/${i.length} nodes.`)}function yo(o,t,i){return {type:"parallel",handlers:o,merge:t,...i}}function ko(o,t){return {type:"sequential",handlers:o,...t}}function vo(o,t,i){return {type:"supervisor",supervisor:o,workers:t,...i}}function wo(o,t,i){return {type:"dag",nodes:o,merge:t??(u=>u.outputs),...i}}function Ro(o,t,i){return {type:"reflect",handler:o,evaluator:t,...i}}function To(o,t){return {type:"race",handlers:o,...t}}function So(o,t,i){return {type:"goal",nodes:o,when:t,...i}}function xo(){return {select:o=>o}}function Eo(o){let t=o?.topN??3;return {select:(i,u)=>[...i].sort((f,l)=>{let b=u[f]?.avgSatisfactionDelta??0;return (u[l]?.avgSatisfactionDelta??0)-b}).slice(0,t)}}function Ao(){return {select:(o,t)=>[...o].sort((u,p)=>{let f=t[u],l=t[p];if(!f||f.runs===0)return -1;if(!l||l.runs===0)return 1;let b=f.avgSatisfactionDelta>0?f.tokens/f.runs/f.avgSatisfactionDelta:Number.POSITIVE_INFINITY,w=l.avgSatisfactionDelta>0?l.tokens/l.runs/l.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return b-w})}}function Do(o){switch(o.type){case "parallel":return {type:"parallel",handlers:o.handlers,minSuccess:o.minSuccess,timeout:o.timeout};case "sequential":return {type:"sequential",handlers:o.handlers,continueOnError:o.continueOnError};case "supervisor":return {type:"supervisor",supervisor:o.supervisor,workers:o.workers,maxRounds:o.maxRounds};case "dag":{let t=Object.create(null);for(let[i,u]of Object.entries(o.nodes))t[i]={handler:u.handler,deps:u.deps,timeout:u.timeout,priority:u.priority};return {type:"dag",nodes:t,timeout:o.timeout,maxConcurrent:o.maxConcurrent,onNodeError:o.onNodeError}}case "reflect":return {type:"reflect",handler:o.handler,evaluator:o.evaluator,maxIterations:o.maxIterations,onExhausted:o.onExhausted,timeout:o.timeout,threshold:typeof o.threshold=="number"?o.threshold:void 0};case "race":return {type:"race",handlers:o.handlers,timeout:o.timeout,minSuccess:o.minSuccess};case "debate":return {type:"debate",handlers:o.handlers,evaluator:o.evaluator,maxRounds:o.maxRounds,timeout:o.timeout};case "goal":{let t=Object.create(null);for(let[i,u]of Object.entries(o.nodes))t[i]={handler:u.handler,produces:u.produces,requires:u.requires,allowRerun:u.allowRerun,priority:u.priority};return {type:"goal",nodes:t,maxSteps:o.maxSteps,timeout:o.timeout}}}}var Nr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Oo(o,t){if(!o||typeof o!="object"||!Nr.has(o.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${o?.type}"`);let i=Object.create(null);for(let[u,p]of Object.entries(o))u!=="__proto__"&&u!=="constructor"&&u!=="prototype"&&(i[u]=p);return {...i,...t}}function Io(o,t,i,u){return {when:o,require:p=>{let f=typeof t=="function"?t(p):t,l=typeof i=="function"?i(p):i;return {type:"RUN_AGENT",agent:f,input:l}},priority:u}}function No(o,t,i){return {type:"RUN_AGENT",agent:o,input:t,context:i}}function jo(o,t=`
|
|
32
|
+
|
|
33
|
+
`){return o.map(i=>typeof i.output=="string"?i.output:safeStringify(i.output)).join(t)}function $o(o,t){if(o.length===0)throw new Error("[Directive MultiAgent] No results to pick from");return o.reduce((i,u)=>t(u)>t(i)?u:i)}function Go(o){return o.map(t=>t.output)}function qo(o){return o.reduce((t,i)=>t+i.totalTokens,0)}function Lo(...o){if(o.length===0)throw new Error("[Directive MultiAgent] composePatterns requires at least one pattern");return async(t,i)=>{let u=i,p;for(let f of o){switch(f.type){case "parallel":{let l=f,b=l.handlers.map(()=>u);p=await t.runParallel(l.handlers,b,l.merge,{minSuccess:l.minSuccess,timeout:l.timeout});break}case "sequential":{let l=f,b=await t.runSequential(l.handlers,u,{transform:l.transform}),w=b[b.length-1];p=l.extract?l.extract(w?.output):w?.output;break}case "supervisor":{let l=f,b=l.maxRounds??5;if(b<1||!Number.isFinite(b))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let w=[],m=await t.runAgent(l.supervisor,u);for(let S=0;S<b;S++){let x=m.output,I;if(typeof x=="string")try{I=JSON.parse(x);}catch{try{let oe=x.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),H=Mt(oe);if(H&&typeof H=="object"&&"action"in H)I=H;else break}catch{break}}else if(x&&typeof x=="object"&&"action"in x)I=x;else break;if(I.action==="complete"||!I.worker||!l.workers.includes(I.worker))break;let Q=await t.runAgent(I.worker,I.workerInput??"");w.push(Q),m=await t.runAgent(l.supervisor,`Worker ${I.worker} completed with result: ${safeStringify(Q.output)}`);}p=l.extract?l.extract(m.output,w):m.output;break}case "dag":{let l=f,b={input:u,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.debug("[Directive MultiAgent] composePatterns: DAG nodes executed sequentially \u2014 use runPattern() for full parallel DAG execution");let w=Object.keys(l.nodes);for(let m of w){let S=l.nodes[m];b.statuses[m]="running";try{let x=u;if(S.transform)x=S.transform(b);else if(S.deps&&S.deps.length>0){let Q=Object.create(null);for(let oe of S.deps)b.outputs[oe]!==void 0&&(Q[oe]=b.outputs[oe]);x=JSON.stringify(Q);}let I=await t.runAgent(S.handler,x);b.outputs[m]=I.output,b.results[m]=I,b.statuses[m]="completed";}catch(x){if(b.statuses[m]="error",b.errors[m]=x instanceof Error?x.message:String(x),l.onNodeError==="fail")throw x}}p=await l.merge(b);break}case "reflect":{let l=f,b=l.maxIterations??2,w=l.parseEvaluation??(I=>{if(typeof I=="string")try{return JSON.parse(I)}catch{return {passed:false,feedback:I}}return I&&typeof I=="object"&&"passed"in I?I:{passed:false,feedback:"Invalid evaluator output"}}),m=l.buildRetryInput??((I,Q)=>`${I}
|
|
34
|
+
|
|
35
|
+
Feedback on your previous response:
|
|
36
|
+
${Q}
|
|
37
|
+
|
|
38
|
+
Please improve your response.`),S=u,x;for(let I=0;I<b;I++){x=(await t.runAgent(l.handler,S)).output;let oe=typeof x=="string"?x:JSON.stringify(x),H=await t.runAgent(l.evaluator,oe),$=w(H.output);if($.passed)break;I<b-1&&$.feedback&&(S=m(u,$.feedback,I));}p=l.extract?l.extract(x):x;break}case "race":{let l=f;p=(await t.runRace(l.handlers,u,{extract:l.extract,timeout:l.timeout})).result;break}case "debate":{let l=f;p=(await t.runDebate(l.handlers,l.evaluator,u,{maxRounds:l.maxRounds,extract:l.extract,parseJudgement:l.parseJudgement,signal:l.signal,timeout:l.timeout})).result;break}case "goal":{let l=f,b=typeof u=="string"?{input:u}:(()=>{try{return JSON.parse(u)}catch{return {input:u}}})();p=(await t.runGoal(l.nodes,b,l.when,{satisfaction:l.satisfaction,maxSteps:l.maxSteps,extract:l.extract,timeout:l.timeout,signal:l.signal,selectionStrategy:l.selectionStrategy,relaxation:l.relaxation,onStep:l.onStep,onStall:l.onStall})).result;break}default:throw new Error(`[Directive MultiAgent] composePatterns: unknown pattern type "${f.type}"`)}p!==void 0&&(u=typeof p=="string"?p:safeStringify(p));}return p}}function Vn(o,t){return Object.entries(o).filter(([,i])=>{let u=i.capabilities??[];return t.every(p=>u.includes(p))}).map(([i])=>i)}function Bo(o,t,i,u){let{priority:p,select:f}=u??{},l=[],b=0,w=-1;return {when:m=>{let S=t(m);return l=Vn(o,S),b++,l.length>0},require:m=>{let S=b!==w&&l.length>0?(w=b,l):Vn(o,t(m));if(S.length===0)throw new Error(`[Directive MultiAgent] No agent matches capabilities: ${t(m).join(", ")}`);return {type:"RUN_AGENT",agent:f?f(S,o):S[0],input:i(m)}},priority:p}}var Yn=false;function Fo(o){let{when:t,agent:i,input:u,priority:p,context:f,options:l}=o;l&&!Yn&&(Yn=true,console.warn("[Directive MultiAgent] spawnOnCondition `options` is deprecated. Use top-level `priority` and `context` instead."));let b=p??l?.priority,w=f??l?.context;return {when:t,require:m=>({type:"RUN_AGENT",agent:i,input:u(m),context:w}),priority:b}}function Ho(o){let{handlers:t,evaluator:i,maxRounds:u,extract:p,parseJudgement:f,signal:l,timeout:b}=o;if(t.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(u!=null&&(u<1||!Number.isFinite(u)))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");return {type:"debate",handlers:t,evaluator:i,maxRounds:u,extract:p,parseJudgement:f,signal:l,timeout:b}}async function Uo(o,t,i){return o.runDebate(t.handlers,t.evaluator,i,{maxRounds:t.maxRounds,extract:t.extract,parseJudgement:t.parseJudgement,signal:t.signal,timeout:t.timeout})}function Jo(o,t,i){let u,p=0,f=-1;return {when:l=>{let w=l.__derived?.[o];return u=w,p++,t(w)},require:l=>{let b=p!==f?(f=p,u):l.__derived?.[o];return {type:"RUN_AGENT",agent:i.agent,input:i.input(b),context:i.context}},priority:i.priority}}function Wo(o,t){let{agent:i,input:u,priority:p,context:f}=t;return {when:o,require:l=>({type:"RUN_AGENT",agent:i,input:u(l,0),context:f}),priority:p}}var Gr=requirementGuard("RUN_AGENT");function ls(o){let{runner:t$1,agents:i,patterns:u={},onHandoff:p,onHandoffComplete:f,maxHandoffHistory:l=1e3,debug:b=false,guardrails:w={},hooks:m={},memory:S,agentRetry:x,maxTokenBudget:I,plugins:Q=[],onApprovalRequest:oe,autoApproveToolCalls:H=true,approvalTimeoutMs:$=3e5,constraints:de={},resolvers:pe={},circuitBreaker:Me,budgetWarningThreshold:Ie=.8,onBudgetWarning:tt,selfHealing:V,checkpointStore:se,breakpoints:De=[],onBreakpoint:Re,breakpointTimeoutMs:Le=3e5,derive:We,scratchpad:Be,tasks:zn={}}=o,re=typeof b=="object"?true:!!b,Pt=5e3,Y={...i},ee={...zn},Ae=Object.create(null);for(let e of Object.keys(ee))Ae[e]={status:"idle"};let Fe=new Map;if(!H&&!oe)throw new Error(`[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
|
|
39
|
+
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
40
|
+
- Provide an onApprovalRequest callback to handle approvals programmatically`);if(Ie<0||Ie>1)throw new Error(`[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${Ie}`);let It=new Set(["__coord","__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);for(let e of Object.keys(Y))if(It.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);for(let[e,n]of Object.entries(ee)){if(!e||e.trim()!==e)throw new Error(`[Directive MultiAgent] Task ID must be a non-empty trimmed string, got "${e}"`);if(It.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:s,delayMs:r}=n.retry;if(!Number.isFinite(s)||s<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(ee))Fe.set(e,new _e(n.maxConcurrent??1));for(let e of Object.keys(ee))if(Y[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 Rn=new Set([...Object.keys(Y),...Object.keys(ee)]),Zt=[];for(let[e,n]of Object.entries(u)){let s=[];switch(n.type){case "parallel":s.push(...n.handlers);break;case "sequential":s.push(...n.handlers);break;case "supervisor":s.push(n.supervisor,...n.workers);break;case "dag":for(let r of Object.values(n.nodes))s.push(r.handler);break;case "reflect":s.push(n.handler,n.evaluator);break;case "race":s.push(...n.handlers);break;case "debate":s.push(...n.handlers,n.evaluator);break}for(let r of s)Rn.has(r)||Zt.push({patternId:e,agentId:r});}if(Zt.length>0){let e=Zt.map(({patternId:n,agentId:s})=>` - Pattern "${n}" references unknown agent "${s}"`).join(`
|
|
41
|
+
`);throw new Error(`[Directive MultiAgent] Pattern validation failed. The following agents are not registered:
|
|
42
|
+
${e}
|
|
43
|
+
|
|
44
|
+
Registered agents: ${[...Rn].join(", ")||"(none)"}`)}for(let[e,n]of Object.entries(u))n.type==="dag"&&kn(e,n.nodes);let P=null,Tn=null;re&&(P=jn({goToSnapshot:e=>{try{z.history?.goTo?.(e);}catch{}}}));let Ce=null,He=null;V&&(Ce=Ln(V.healthMonitor),V.selectionStrategy==="round-robin"&&(He=new Map));function K(e,n){try{m[e]?.(n);}catch(s){re&&console.debug(`[Directive MultiAgent] hooks.${e} threw:`,s);}}let Qt={__globalTokens:t.number(),__status:t.string(),__handoffs:t.array(),__handoffResults:t.array(),__budgetWarningFired:t.boolean()};Be&&(Qt[Ee]=t.object()),We&&Object.keys(We).length>0&&(Qt.__derived=t.object());let Zn={facts:Qt,derivations:{},events:{},requirements:{}},Sn=zt(de);I&&(Sn.__budgetLimit={priority:100,when:e=>getBridgeFact(e,"__globalTokens")>I,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let Nt=Object.create(null);for(let[e,n]of Object.entries(pe))Nt[e]={requirement:n.requirement,key:n.key,resolve:async(s,r)=>{let a=Oe(r.facts),c={facts:{...r.facts,...a},runAgent:async(g,y,E)=>t$1(g,y,E),signal:r.signal};return n.resolve(s,c)}};Nt.__pause={requirement:requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async()=>{Ue="paused",re&&console.debug("[Directive MultiAgent] Budget exceeded \u2014 all agents paused");}},Nt.__runAgent={requirement:Gr,resolve:async e=>{await be(e.agent,e.input);}};let Qn=createModule("__coord",{schema:Zn,init:e=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Be&&setBridgeFact(e,Ee,{...Be.init});},constraints:Sn,resolvers:Nt}),en=Object.create(null);en.__coord=Qn;for(let[e,n]of Object.entries(Y)){let s=n.constraints?zt(n.constraints):{},r=Object.create(null);if(n.resolvers)for(let[a,d]of Object.entries(n.resolvers))r[a]={requirement:d.requirement,key:d.key,resolve:async(c,g)=>{let y=Oe(g.facts),A={facts:{...g.facts,...y},runAgent:async(M,_,L)=>t$1(M,_,L),signal:g.signal};return d.resolve(c,A)}};en[e]=createModule(e,{schema:pn,init:a=>{Ye(a,{status:"idle",currentAgent:n.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(a,{pending:[],approved:[],rejected:[]}),wt(a,[]),Rt(a,[]),Ze(a,_t());},constraints:s,resolvers:Object.keys(r).length>0?r:void 0});}let er=createCallbackPlugin("directive-multi-agent-callbacks",{}),xn=[...Q,er];re&&P&&(Tn=$n(P,()=>{try{return z.history?.currentIndex??null}catch{return null}}),xn.push(Tn));let z=createSystem({modules:en,plugins:xn,history:re?true:void 0});z.start();let En=500,An=200,nt=0,Ue="idle",tn=false,jt=0,Ne=null;function te(){if(tn)throw new Error("[Directive MultiAgent] Orchestrator has been destroyed")}let Je=new Map;for(let[e,n]of Object.entries(Y))Je.set(e,new _e(n.maxConcurrent??1));let xe=Object.create(null);for(let e of Object.keys(Y))xe[e]={status:"idle",runCount:0,totalTokens:0};let tr=l,je=[],rt=[],$t=0;function nr(e){for(rt.push(e);rt.length>tr;)rt.shift();}let dt=new Map,Gt=new Set;function ot(){for(let e of Gt)e();}let pt=Object.create(null),qt=new Set;function rr(){let e=Object.create(null);for(let[r,a]of Object.entries(xe))e[r]={status:a.status,lastInput:a.lastInput,lastOutput:a.lastOutput,lastError:a.lastError,runCount:a.runCount,totalTokens:a.totalTokens};let n=fe("__coord"),s={agents:e,coordinator:{globalTokens:nt,status:Ue}};return Be&&n&&(s.scratchpad=getBridgeFact(n,Ee)??{}),s}function $e(){if(!We)return;let e=rr(),n=[],s=[];z.batch(()=>{for(let[a,d]of Object.entries(We))try{let c=d(e),g=pt[a],y=!yn(c,g);pt[a]=c,y&&n.push({derivId:a,newValue:c});}catch(c){s.push({derivId:a,derivError:c});}let r=fe("__coord");r&&setBridgeFact(r,"__derived",{...pt});});for(let{derivId:r,newValue:a}of n){P&&P.record({type:"derivation_update",timestamp:Date.now(),snapshotId:null,derivationId:r,valueType:typeof a}),K("onDerivationUpdate",{derivationId:r,value:a,timestamp:Date.now()});for(let d of qt)try{d(r,a);}catch{}}for(let{derivId:r,derivError:a}of s)re&&console.warn(`[Directive MultiAgent] Derivation "${r}" threw:`,a),K("onDerivationError",{derivationId:r,error:a instanceof Error?a:new Error(String(a)),timestamp:Date.now()});}let Lt=new Set,gt=new Map,nn=Be?{get(e){let n=fe("__coord"),s=getBridgeFact(n,Ee);if(!(s==null||!Object.hasOwn(s,e)))return s[e]},set(e,n){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let s=fe("__coord"),r=[e];z.batch(()=>{let a=getBridgeFact(s,Ee)??{};setBridgeFact(s,Ee,{...a,[e]:n});}),rn(r,e,n),$e();},has(e){let n=fe("__coord"),s=getBridgeFact(n,Ee);return s!=null&&Object.hasOwn(s,e)},delete(e){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let n=fe("__coord");z.batch(()=>{let s=getBridgeFact(n,Ee)??{},{[e]:r,...a}=s;setBridgeFact(n,Ee,a);}),rn([e],e,void 0),$e();},update(e){let n=Object.create(null);for(let a of Object.keys(e))a==="__proto__"||a==="constructor"||a==="prototype"||(n[a]=e[a]);let s=fe("__coord"),r=Object.keys(n);if(r.length!==0){z.batch(()=>{let a=getBridgeFact(s,Ee)??{};setBridgeFact(s,Ee,{...a,...n});});for(let[a,d]of Object.entries(n))rn(r,a,d);$e();}},getAll(){let e=fe("__coord");return {...getBridgeFact(e,Ee)??{}}},subscribe(e,n){for(let s of e)gt.has(s)||gt.set(s,new Set),gt.get(s).add(n);return ()=>{for(let s of e)gt.get(s)?.delete(n);}},onChange(e){return Lt.add(e),()=>{Lt.delete(e);}},reset(){if(!Be)return;let e=fe("__coord");z.batch(()=>{setBridgeFact(e,Ee,{...Be.init});});}}:null;function rn(e,n,s){let r=gt.get(n);if(r)for(let a of r)try{a(n,s);}catch{}for(let a of Lt)try{a(n,s);}catch{}P&&n===e[e.length-1]&&P.record({type:"scratchpad_update",timestamp:Date.now(),snapshotId:null,keys:e}),n===e[e.length-1]&&K("onScratchpadUpdate",{keys:e,timestamp:Date.now()});}let ft=new Map,Tt=new Map;function or(e,n,s){return new Promise((r,a)=>{let d=null,c=false,g,y=fe(e),E=()=>{c||(c=true,d&&(clearTimeout(d),d=null),g&&s&&s.removeEventListener("abort",g),A());},A=z.subscribe([`${e}.${kt}`],()=>{let M=ze(y);if(M.resolved.includes(n)){E();let _=ft.get(n)??null;ft.delete(n),r(_);}else if(M.cancelled.includes(n)){E(),ft.delete(n);let _=Tt.get(n);Tt.delete(n),a(new Error(_?`[Directive MultiAgent] Breakpoint ${n} cancelled: ${_}`:`[Directive MultiAgent] Breakpoint ${n} cancelled`));}});if(s){if(g=()=>{E(),a(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${n}`));},s.aborted){E(),a(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${n}`));return}s.addEventListener("abort",g,{once:true});}d=setTimeout(()=>{E(),ft.delete(n),Tt.delete(n),a(new Error(`[Directive MultiAgent] Breakpoint timeout: ${n} not resolved within ${Math.round(Le/1e3)}s`));},Le);})}async function st(e,n,s,r,a,d){if(De.length===0)return {input:r,skip:false};let c=fe(n),g={agentId:n,agentName:s,input:r,state:Oe(c),breakpointType:e,patternId:d?.patternId,handoff:d?.handoff},y=Hn(De,e,g);if(!y)return {input:r,skip:false};let E=Fn(),A={id:E,type:e,agentId:n,input:r,label:y.label,requestedAt:Date.now()};z.batch(()=>{let _=ze(c);Ze(c,{..._,pending:[..._.pending,A]});});try{Re?.(A);}catch{}try{m.onBreakpoint?.(A);}catch{}P&&P.record({type:"breakpoint_hit",timestamp:Date.now(),agentId:n,snapshotId:null,breakpointId:E,breakpointType:e,label:y.label});let M=await or(n,E,a);return P&&P.record({type:"breakpoint_resumed",timestamp:Date.now(),agentId:n,snapshotId:null,breakpointId:E,modified:!!M?.input,skipped:!!M?.skip}),{input:M?.input??r,skip:M?.skip??false}}function fe(e){return z.facts[e]}function sr(e,n,s){return new Promise((r,a)=>{let d=null,c=false,g,y=fe(e),E=()=>{c||(c=true,d&&(clearTimeout(d),d=null),g&&s&&s.removeEventListener("abort",g),A());},A=z.subscribe([`${e}.${yt}`],()=>{let M=vt(y);if(M.approved.includes(n))E(),r();else {let _=M.rejected.find(L=>L.id===n);if(_){E();let L=_.reason?`Request ${n} rejected: ${_.reason}`:`Request ${n} rejected`;a(new Error(L));}}});if(s){if(g=()=>{E(),a(new Error(`[Directive MultiAgent] Approval wait aborted for request ${n}`));},s.aborted){E(),a(new Error(`[Directive MultiAgent] Approval wait aborted for request ${n}`));return}s.addEventListener("abort",g,{once:true});}d=setTimeout(()=>{E();let M=Math.round($/1e3);a(new Error(`[Directive MultiAgent] Approval timeout: Request ${n} not resolved within ${M}s.
|
|
45
|
+
Solutions:
|
|
46
|
+
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
47
|
+
2. Set autoApproveToolCalls: true to auto-approve
|
|
48
|
+
3. Increase approvalTimeoutMs (current: ${$}ms)
|
|
49
|
+
See: https://directive.run/docs/ai/multi-agent`));},$);})}async function ar(e,n,s,r){let a=n.label??e,d=Date.now(),c=Ae[e]??(Ae[e]={status:"idle"});c.status="running",c.startTime=d,c.lastError=void 0;let g=s;if(De.length>0)try{let N=await st("pre_agent_run",e,a,s,r?.signal);if(N.skip)return c.status="completed",{output:void 0,messages:[],toolCalls:[],totalTokens:0};g=N.input;}catch{}P&&P.record({type:"task_start",timestamp:d,agentId:e,snapshotId:null,taskId:e,label:a,description:n.description,inputLength:g.length,input:g.slice(0,Pt)});let y=r?.patternId??"";K("onTaskStart",{patternId:y,taskId:e,label:a,timestamp:d});let E=Fe.get(e),A=()=>({taskId:e,memory:S?structuredClone(S.getContextMessages?.()??[]):[],scratchpad:Object.freeze(nn?structuredClone(nn.getAll()):{}),readAgentState:N=>{let q=xe[N];if(q)return Object.freeze({status:q.status,lastOutput:q.lastOutput!=null?String(q.lastOutput):void 0,lastError:q.lastError,totalTokens:q.totalTokens});let B=Ae[N];if(B)return Object.freeze({status:B.status,lastOutput:B.lastOutput!=null?String(B.lastOutput):void 0,lastError:B.lastError,totalTokens:0})},reportProgress:(N,q)=>{let B=Number.isFinite(N)?Math.max(0,Math.min(100,N)):0;P&&P.record({type:"task_progress",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,percent:B,message:q}),K("onTaskProgress",{patternId:y,taskId:e,label:a,percent:B,message:q,timestamp:Date.now()});}}),M=n.retry?.attempts??1,_=n.retry?.backoff??"fixed",L=n.retry?.delayMs??1e3,v,C=async N=>{let q=A();return n.run(g,N,q)},U=null;try{E&&(U=await E.acquire());for(let q=1;q<=M;q++){let B=new AbortController,D,h=()=>B.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&&(D=setTimeout(()=>B.abort(),n.timeout));try{let T=await C(B.signal);D&&clearTimeout(D);let F=typeof T=="string"?T:safeStringify(T),J=Date.now()-d;c.status="completed",c.lastOutput=F,c.durationMs=J,P&&P.record({type:"task_complete",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,durationMs:J,output:F}),K("onTaskComplete",{patternId:r?.patternId??"",taskId:e,label:a,durationMs:J,timestamp:Date.now()});try{let j=z.read("__coord");setBridgeFact(j,"__lastTaskCompletion",{taskId:e,timestamp:Date.now()});}catch{}return {output:F,messages:[],toolCalls:[],totalTokens:0}}catch(T){if(D&&clearTimeout(D),v=T instanceof Error?T:new Error(String(T)),q<M){P&&P.record({type:"task_error",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,error:v.message,durationMs:Date.now()-d,attempt:q});let F=3e4,J=_==="exponential"?L*2**(q-1):L,j=Math.min(J,F);await new Promise((k,R)=>{let O=!1,W=()=>{O||(O=!0,clearTimeout(G),R(new Error(`[Directive MultiAgent] Task "${e}" aborted during retry backoff`)));},G=setTimeout(()=>{O=!0,r?.signal?.removeEventListener("abort",W),k();},j);r?.signal&&r.signal.addEventListener("abort",W,{once:!0});});}}finally{r?.signal?.removeEventListener("abort",h);}}let N=Date.now()-d;throw c.status="error",c.lastError=v?.message,c.durationMs=N,P&&P.record({type:"task_error",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,error:v?.message??"Unknown error",durationMs:N}),K("onTaskError",{patternId:y,taskId:e,label:a,error:v,durationMs:N,timestamp:Date.now()}),v}finally{U?.();}}async function be(e,n,s){if(te(),s?.signal?.aborted)throw new Error(`[Directive MultiAgent] Handler "${e}" run aborted before starting`);if(Ue==="paused")throw new Error("[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)");jt++;try{let r=ee[e];if(r)return await ar(e,r,n,s);let a=Y[e];if(!a){let c=[...Object.keys(Y),...Object.keys(ee)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${c}`)}let d=a.circuitBreaker??Me;return d?await d.execute(()=>Cn(e,a,n,s)):await Cn(e,a,n,s)}catch(r){if(V&&!ee[e]&&!s?.__isReroute){let d=pr(e),c=gr(d);if(c){let g={originalAgent:e,reroutedTo:c,reason:r instanceof Error?r.message:String(r),timestamp:Date.now()};try{V.onReroute?.(g);}catch{}return K("onReroute",g),P&&P.record({type:"reroute",timestamp:Date.now(),agentId:e,snapshotId:null,from:e,to:c,reason:r instanceof Error?r.message:String(r)}),be(c,n,{...s,__isReroute:true})}if(V.degradation==="fallback-response"&&V.fallbackResponse!==void 0)return {output:V.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}let a=xe[e];throw a&&a.status!=="error"&&(a.status="error",a.lastError=r instanceof Error?r.message:String(r)),r}finally{jt--,ot();}}async function Cn(e,n,s,r){let a=Date.now(),d=fe(e),c=xe[e],g=n.agent,y=s,E=Je.get(e);if(!E){let v=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${e}". Registered agents: ${v}`)}let A=await E.acquire(r?.signal),M=new AbortController,_,L;try{n.timeout&&(_=setTimeout(()=>M.abort(),n.timeout)),r?.signal&&(L=()=>M.abort(),r.signal.addEventListener("abort",L,{once:!0}));let v=n.memory??S;if(v){let k=v.getContextMessages();if(k.length>0){let R=k.map(O=>`${O.role}: ${O.content}`).join(`
|
|
50
|
+
`);g={...g,instructions:(g.instructions??"")+`
|
|
51
|
+
|
|
52
|
+
Conversation context:
|
|
53
|
+
`+R};}}if(o.metaContext){let k=dn(z.inspect());k&&(g={...g,instructions:(g.instructions??"")+`
|
|
54
|
+
|
|
55
|
+
`+k});}{let k=await st("pre_input_guardrails",e,g.name,y,r?.signal);if(k.skip)return c.status="completed",ot(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};y=k.input;}let U=[...w.input??[],...n.guardrails?.input??[]].map((k,R)=>Wt(k,R,"input"));for(let k of U){let{name:R}=k,O={agentName:g.name,input:y,facts:Oe(d)},W=Date.now(),G=await Kt(k,{input:y,agentName:g.name},O);if(K("onGuardrailCheck",{agentId:e,guardrailName:R,guardrailType:"input",passed:G.passed,reason:G.reason,durationMs:Date.now()-W,timestamp:Date.now()}),!G.passed)throw new Ve({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${R}" failed: ${G.reason}`,guardrailName:R,guardrailType:"input",userMessage:G.reason??"Input validation failed",agentName:g.name,input:y});G.transformed!==void 0&&(y=G.transformed);}K("onAgentStart",{agentId:e,agentName:g.name,input:y,timestamp:a}),P&&P.record({type:"agent_start",timestamp:Date.now(),agentId:e,snapshotId:null,inputLength:y.length,..."description"in g&&g.description?{description:String(g.description)}:{},...g.instructions?{instructions:g.instructions.slice(0,Pt)}:{},input:y.slice(0,Pt)}),z.batch(()=>{let k=Ct(d);Ye(d,{...k,status:"running",input:y,startedAt:Date.now()});}),c.status="running",c.lastInput=y;{let k=await st("pre_agent_run",e,g.name,y,r?.signal);if(k.skip)return c.status="completed",ot(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};y=k.input;}let N=t$1,q=r?.outputSchema!==void 0?r.outputSchema:n.outputSchema;q&&(N=Kn(t$1,{schema:q,maxRetries:r?.maxSchemaRetries??n.maxSchemaRetries??2,extractJson:n.extractJson,schemaDescription:n.schemaDescription}));let B=n.retry??x,D=await qn(N,g,y,{...n.runOptions,...r,signal:M.signal,onMessage:k=>{let O=[...gn(d),k];wt(d,O.length>En?O.slice(-En):O),r?.onMessage?.(k);},onToolCall:async k=>{let O=[...w.toolCall??[],...n.guardrails?.toolCall??[]].map((me,ae)=>Wt(me,ae,"toolCall"));for(let me of O){let{name:ae}=me,ue={agentName:g.name,input:y,facts:Oe(d)},at=Date.now(),ye=await Kt(me,{toolCall:k,agentName:g.name,input:y},ue);if(K("onGuardrailCheck",{agentId:e,guardrailName:ae,guardrailType:"toolCall",passed:ye.passed,reason:ye.reason,durationMs:Date.now()-at,timestamp:Date.now()}),!ye.passed)throw new Ve({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${ae}" failed: ${ye.reason}`,guardrailName:ae,guardrailType:"toolCall",userMessage:ye.reason??"Tool call blocked",data:{toolCall:k},agentName:g.name,input:y})}if(!H){let me=`tool-${e}-${k.id}`,ae={id:me,type:"tool_call",agentName:g.name,description:`Tool call: ${k.name}`,data:k,requestedAt:Date.now()};dt.set(me,e),z.batch(()=>{let ue=vt(d);Xe(d,{...ue,pending:[...ue.pending,ae]});}),oe?.(ae),await sr(e,me,r?.signal);}let G=[...fn(d),k];Rt(d,G.length>An?G.slice(-An):G),r?.onToolCall?.(k);}},B?{...B,onRetry:(k,R,O)=>{B.onRetry?.(k,R,O),K("onAgentRetry",{agentId:e,agentName:g.name,input:y,attempt:k,error:R,delayMs:O,timestamp:Date.now()});}}:void 0);if((await st("pre_output_guardrails",e,g.name,y,r?.signal)).skip)return c.status="completed",ot(),D;let T=[...w.output??[],...n.guardrails?.output??[]].map((k,R)=>Wt(k,R,"output"));for(let k of T){let{name:R}=k,O={agentName:g.name,input:y,facts:Oe(d)},W=Date.now(),G=await Kt(k,{output:D.output,agentName:g.name,input:y,messages:D.messages},O);if(K("onGuardrailCheck",{agentId:e,guardrailName:R,guardrailType:"output",passed:G.passed,reason:G.reason,durationMs:Date.now()-W,timestamp:Date.now()}),!G.passed)throw new Ve({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${R}" failed: ${G.reason}`,guardrailName:R,guardrailType:"output",userMessage:G.reason??"Output validation failed",agentName:g.name,input:y});G.transformed!==void 0&&(D.output=G.transformed);}z.batch(()=>{let k=Ct(d);Ye(d,{...k,status:"completed",output:D.output,tokenUsage:k.tokenUsage+D.totalTokens,turnCount:k.turnCount+D.messages.length,completedAt:Date.now()});}),c.status="completed",c.lastOutput=D.output,c.runCount++,c.totalTokens+=D.totalTokens,ot();let F=fe("__coord"),J=!1,j=0;if(z.batch(()=>{let R=getBridgeFact(F,"__globalTokens")+D.totalTokens;if(nt=R,setBridgeFact(F,"__globalTokens",R),I&&tt){j=R/I;let O=getBridgeFact(F,"__budgetWarningFired");j>=Ie&&!O&&(setBridgeFact(F,"__budgetWarningFired",!0),J=!0);}}),J)try{tt({currentTokens:nt,maxBudget:I,percentage:j});}catch(k){re&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",k);}if(v&&D.messages.length>0)try{let O=v.getContextMessages().some(W=>W.role==="user"&&W.content===y)?D.messages.filter(W=>!(W.role==="user"&&W.content===y)):D.messages;v.addMessages(O);}catch(k){re&&console.debug("[Directive MultiAgent] Memory addMessages failed:",k);}if(K("onAgentComplete",{agentId:e,agentName:g.name,input:y,output:D.output,tokenUsage:D.totalTokens,durationMs:Date.now()-a,timestamp:Date.now()}),P){let k=typeof D.output=="string"?D.output:safeStringify(D.output);P.record({type:"agent_complete",timestamp:Date.now(),agentId:e,snapshotId:null,outputLength:k.length,totalTokens:D.totalTokens,inputTokens:D.tokenUsage?.inputTokens??0,outputTokens:D.tokenUsage?.outputTokens??0,durationMs:Date.now()-a,modelId:n.agent.model??void 0,output:k.slice(0,Pt)});}return Ce&&Ce.recordSuccess(e,Date.now()-a),$e(),await st("post_run",e,g.name,y,r?.signal),D}catch(v){if(c.status="error",c.lastError=v instanceof Error?v.message:String(v),ot(),z.batch(()=>{let C=Ct(d);Ye(d,{...C,status:"error",error:v instanceof Error?v.message:String(v),completedAt:Date.now()});}),K("onAgentError",{agentId:e,agentName:g.name,input:y,error:v instanceof Error?v:new Error(String(v)),durationMs:Date.now()-a,timestamp:Date.now()}),P){let C={type:"agent_error",timestamp:Date.now(),agentId:e,snapshotId:null,errorMessage:v instanceof Error?v.message:String(v),durationMs:Date.now()-a};Bn(v)&&(C.guardrailName=v.guardrailName,C.guardrailType=v.guardrailType,C.errorCode=v.code),P.record(C);}throw Ce&&Ce.recordFailure(e,Date.now()-a,v instanceof Error?v:new Error(String(v))),$e(),v}finally{_&&clearTimeout(_),L&&r?.signal&&r.signal.removeEventListener("abort",L),A();}}function on(e,n,s={}){if(te(),ee[e]){let D=[],h=[],T=false,F=O=>{if(T)return;let W=h.shift();W?W(O):D.push(O);},J=()=>{T=true;for(let O of h)O(null);h.length=0;},j=new AbortController,k;s.signal&&(s.signal.aborted?j.abort():(k=()=>j.abort(),s.signal.addEventListener("abort",k,{once:true})));let R=be(e,n,{signal:j.signal}).then(O=>{let W=typeof O.output=="string"?O.output:safeStringify(O.output);return F({type:"token",data:W,tokenCount:0}),F({type:"done",totalTokens:0,duration:0,droppedTokens:0}),J(),O},O=>{throw F({type:"error",error:O}),J(),O}).finally(()=>{k&&s.signal&&s.signal.removeEventListener("abort",k);});return R.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let O=D.shift();if(O){if(yield O,O.type==="done"||O.type==="error")return}else {if(T)return;{let W=await new Promise(G=>h.push(G));if(!W||(yield W,W.type==="done"||W.type==="error"))return}}}}},result:R,abort:()=>{j.abort();}}}if(!Y[e]){let D=[...Object.keys(Y),...Object.keys(ee)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${D}`)}let d=1e4,c=1e5,g=new AbortController,y=[],E=[],A=false,M=Date.now(),_=0,L="",v;s.signal&&(v=()=>g.abort(),s.signal.addEventListener("abort",v,{once:true}));let C=()=>{v&&s.signal&&s.signal.removeEventListener("abort",v);},U=D=>{if(A)return;let h=E.shift();h?h(D):(y.length>=d&&y.shift(),y.push(D));},N=()=>{A=true,C();for(let D of E)D(null);E.length=0;},q=(async()=>{U({type:"progress",phase:"starting",message:"Running input guardrails"});try{let D=await be(e,n,{signal:g.signal,onMessage:T=>{if(U({type:"message",message:T}),T.role==="assistant"&&T.content){let F=Math.ceil(T.content.length/4);_+=F,L+=T.content,L.length>c&&(L=L.slice(-c)),U({type:"token",data:T.content,tokenCount:_});}},onToolCall:async T=>{U({type:"tool_start",tool:T.name,toolCallId:T.id,arguments:T.arguments}),T.result&&U({type:"tool_end",tool:T.name,toolCallId:T.id,result:T.result});}}),h=Date.now()-M;return U({type:"done",totalTokens:D.totalTokens,duration:h,droppedTokens:0}),N(),D}catch(D){throw D instanceof Ve&&U({type:"guardrail_triggered",guardrailName:D.guardrailName,reason:D.message,partialOutput:L,stopped:true}),U({type:"error",error:D instanceof Error?D:new Error(String(D))}),N(),D}})(),B={[Symbol.asyncIterator](){return {async next(){return y.length>0?{done:false,value:y.shift()}:A?{done:true,value:void 0}:new Promise(D=>{E.push(h=>{D(h===null?{done:true,value:void 0}:{done:false,value:h});});})}}}};return q.catch(()=>{}),{stream:B,result:q,abort:()=>{g.abort(),N();}}}async function ir(e,n,s){let r=Date.now();s&&K("onPatternStart",{patternId:s,patternType:"parallel",input:n,timestamp:r});let a=new AbortController,d;e.timeout&&(d=setTimeout(()=>a.abort(),e.timeout));let c;try{let g=e.handlers.map(A=>be(A,n,{signal:a.signal,patternId:s}).catch(M=>{if(e.minSuccess===void 0)throw M;return null})),y=await Promise.all(g),E=y.filter(A=>A!==null);if(e.minSuccess!==void 0&&E.length<e.minSuccess){let A=y.length-E.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${E.length}/${e.handlers.length} agents succeeded (minimum required: ${e.minSuccess}, failed: ${A})`)}return e.merge(E)}catch(g){throw c=g instanceof Error?g:new Error(String(g)),g}finally{d&&clearTimeout(d),s&&K("onPatternComplete",{patternId:s,patternType:"parallel",durationMs:Date.now()-r,timestamp:Date.now(),error:c});}}async function mt(e,n,s){let r=lt(e);if(s?.when)try{if(!s.when({step:r,patternType:e.type,facts:e.type==="goal"?e.facts:void 0,satisfaction:e.type==="goal"?e.lastSatisfaction:void 0}))return null}catch{return null}try{let a={version:1,id:e.id,createdAt:e.createdAt,label:e.label,systemExport:JSON.stringify(e),timelineExport:null,localState:{type:"multi",globalTokenCount:0,globalStatus:"idle",agentStates:{},handoffCounter:0,pendingHandoffs:[],handoffResults:[],roundRobinCounters:null},memoryExport:null,orchestratorType:"multi",metadata:{patternType:e.type}};return await n.save(a),P&&P.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:e.id,patternType:e.type,step:r}),K("onCheckpointSave",{checkpointId:e.id,patternType:e.type,step:r,timestamp:Date.now()}),e.id}catch(a){let d=a instanceof Error?a:new Error(String(a));return console.error(`[Directive MultiAgent] ${e.type}: checkpoint save failed:`,d),K("onCheckpointError",{patternType:e.type,step:r,error:d,timestamp:Date.now()}),null}}async function sn(e,n,s,r){let a=Date.now(),d=s??"__inline_sequential";s&&K("onPatternStart",{patternId:s,patternType:"sequential",input:n,timestamp:a});let c=e.checkpoint,g=c?.store??se,y=c?.everyN??5,E=c?.labelPrefix??"sequential",A=r?.currentInput??n,M,_=r?.results?[...r.results]:[],L=r?.step??0,v;if(r&&_.length>0){let C=_[_.length-1];M={output:C.output,totalTokens:C.totalTokens,messages:[],toolCalls:[]};}try{for(let C=L;C<e.handlers.length;C++){let U=e.handlers[C];{let N=await st("pre_pattern_step",U,Y[U]?.agent.name??U,A,void 0,{patternId:s});if(N.skip)continue;A=N.input;}try{if(M=await be(U,A,{patternId:s}),_.push({agentId:U,output:M.output,totalTokens:M.totalTokens}),C<e.handlers.length-1&&(e.transform?A=e.transform(M.output,U,C):A=typeof M.output=="string"?M.output:safeStringify(M.output)),c&&g&&C>L&&(C-L)%y===0){let N=C<e.handlers.length-1?A:n;await mt({type:"sequential",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${E}:step-${C+1}`,patternId:d,stepsTotal:e.handlers.length,step:C+1,currentInput:N,results:[..._]},g,c);}}catch(N){if(!e.continueOnError)throw N}}if(!M)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return e.extract?e.extract(M.output):M.output}catch(C){throw v=C instanceof Error?C:new Error(String(C)),C}finally{s&&K("onPatternComplete",{patternId:s,patternType:"sequential",durationMs:Date.now()-a,timestamp:Date.now(),error:v});}}async function an(e,n,s,r){let a=Date.now(),d=s??"__inline_supervisor";s&&K("onPatternStart",{patternId:s,patternType:"supervisor",input:n,timestamp:a});let c=e.checkpoint,g=c?.store??se,y=c?.everyN??5,E=c?.labelPrefix??"supervisor",A=[],M=r?.workerResults?[...r.workerResults]:[],_=e.maxRounds??5;if(_<1||!Number.isFinite(_))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let L;if(r)for(let C of r.workerResults)A.push({output:C.output,totalTokens:C.totalTokens,messages:[],toolCalls:[]});let v=r?.round??0;try{let C;r?C={output:r.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:C=await be(e.supervisor,n);let U=r?.currentInput??n;for(let N=v;N<_;N++){let q=C.output,B;if(typeof q=="string")try{let h=q.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();B=JSON.parse(h);}catch{try{let h=q.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),T=Mt(h);if(T&&typeof T=="object"&&"action"in T)B=T;else throw new Error("extracted value missing 'action' property")}catch{throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned unparseable output (round ${N+1}). Expected JSON with { action, worker?, workerInput? } but got: ${q.slice(0,200)}`)}}else if(q&&typeof q=="object"&&"action"in q)B=q;else throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned invalid output (round ${N+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(B.action==="complete"||!B.worker)break;if(!e.workers.includes(B.worker)){let h=e.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${B.worker}". Available workers: ${h}`)}let D=await be(B.worker,B.workerInput??"",{patternId:s});A.push(D),M.push({output:D.output,totalTokens:D.totalTokens}),U=`Worker ${B.worker} completed with result: ${safeStringify(D.output)}`,C=await be(e.supervisor,U,{patternId:s}),c&&g&&N>v&&(N-v)%y===0&&await mt({type:"supervisor",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${E}:round-${N+1}`,patternId:d,stepsTotal:e.maxRounds??10,round:N+1,supervisorOutput:C.output,workerResults:[...M],currentInput:U},g,c);}return e.extract?e.extract(C.output,A):C.output}catch(C){throw L=C instanceof Error?C:new Error(String(C)),C}finally{s&&K("onPatternComplete",{patternId:s,patternType:"supervisor",durationMs:Date.now()-a,timestamp:Date.now(),error:L});}}async function un(e,n,s,r){let a=Date.now(),d=s??"__inline_dag";s&&K("onPatternStart",{patternId:s,patternType:"dag",input:n,timestamp:a});let c=e.checkpoint,g=c?.store??se,y=c?.everyN??5,E=c?.labelPrefix??"dag",A=r?.completedCount??0,M=0,_=Promise.resolve(),L=Object.keys(e.nodes).length,v={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))v.statuses[h]="pending";if(r){for(let[h,T]of Object.entries(r.statuses))v.statuses[h]=T;for(let[h,T]of Object.entries(r.outputs))v.outputs[h]=T;for(let[h,T]of Object.entries(r.errors))v.errors[h]=T;for(let[h,T]of Object.entries(r.nodeResults))v.results[h]={output:T.output,totalTokens:T.totalTokens,messages:[],toolCalls:[]};}let C=e.onNodeError??"fail",U=e.maxConcurrent??Number.POSITIVE_INFINITY,N=new AbortController,q,B;e.timeout&&(q=setTimeout(()=>N.abort(),e.timeout));try{let F=function(){for(let[j,k]of Object.entries(e.nodes)){if(v.statuses[j]!=="pending")continue;let R=C==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((k.deps??[]).every(W=>R.has(v.statuses[W]))){if(C==="skip-downstream"&&(k.deps??[]).some(G=>v.statuses[G]==="error"||v.statuses[G]==="skipped")){v.statuses[j]="skipped",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"skipped",deps:k.deps??[]}),K("onDagNodeSkipped",{patternId:d,nodeId:j,agentId:k.handler,nodeType:ee[k.handler]?"task":"agent",reason:"upstream dependency errored",timestamp:Date.now()});continue}if(k.when)try{if(!k.when(v)){v.statuses[j]="skipped",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"skipped",deps:k.deps??[]}),K("onDagNodeSkipped",{patternId:d,nodeId:j,agentId:k.handler,nodeType:ee[k.handler]?"task":"agent",reason:"when() returned false",timestamp:Date.now()});continue}}catch{v.statuses[j]="skipped";continue}v.statuses[j]="ready";}}};var D=F;if(!r)for(let[j,k]of Object.entries(e.nodes))(!k.deps||k.deps.length===0)&&(v.statuses[j]="ready");let h=new Set,T=0;async function J(j,k){let R=Date.now();v.statuses[j]="running",P&&P.record({type:"dag_node_update",timestamp:R,snapshotId:null,nodeId:j,status:"running",deps:k.deps??[]}),K("onDagNodeStart",{patternId:d,nodeId:j,agentId:k.handler,nodeType:ee[k.handler]?"task":"agent",timestamp:R});let O;if(k.transform)O=k.transform(v);else if(k.deps&&k.deps.length>0){let ae=Object.create(null);for(let ue of k.deps)v.outputs[ue]!==void 0&&(ae[ue]=v.outputs[ue]);O=JSON.stringify(ae);}else O=n;let W=new AbortController,G;k.timeout&&(G=setTimeout(()=>W.abort(),k.timeout));let me=()=>W.abort();N.signal.addEventListener("abort",me,{once:!0});try{let ae=await be(k.handler,O,{signal:W.signal,patternId:d});if(v.outputs[j]=ae.output,v.results[j]=ae,v.statuses[j]="completed",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"completed",deps:k.deps??[]}),K("onDagNodeComplete",{patternId:d,nodeId:j,agentId:k.handler,nodeType:ee[k.handler]?"task":"agent",durationMs:Date.now()-R,timestamp:Date.now()}),A++,c&&g&&A>M&&A-M>=y){M=A;let ue=Object.create(null);for(let[ye,Pe]of Object.entries(v.results))ue[ye]={output:Pe.output,totalTokens:Pe.totalTokens};let at={type:"dag",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${E}:node-${A}`,patternId:d,stepsTotal:L,statuses:{...v.statuses},outputs:{...v.outputs},errors:{...v.errors},completedCount:A,nodeResults:ue,input:v.input};_=_.then(()=>mt(at,g,c)),await _;}}catch(ae){if(v.statuses[j]="error",v.errors[j]=ae instanceof Error?ae.message:String(ae),P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"error",deps:k.deps??[]}),K("onDagNodeError",{patternId:d,nodeId:j,agentId:k.handler,nodeType:ee[k.handler]?"task":"agent",error:ae instanceof Error?ae:new Error(String(ae)),durationMs:Date.now()-R,timestamp:Date.now()}),C==="fail")throw N.abort(),ae}finally{G&&clearTimeout(G),N.signal.removeEventListener("abort",me),T--;}}for(;!N.signal.aborted;){F();let j=Object.entries(e.nodes).filter(([R])=>v.statuses[R]==="ready").sort(([,R],[,O])=>(O.priority??0)-(R.priority??0));for(let[R,O]of j){if(T>=U)break;T++;let W=J(R,O).finally(()=>{h.delete(W);});h.add(W);}if(!Object.values(v.statuses).some(R=>R==="pending"||R==="running"||R==="ready"))break;if(h.size>0)await Promise.race(h);else break}return h.size>0&&await Promise.allSettled(h),await e.merge(v)}catch(h){throw B=h instanceof Error?h:new Error(String(h)),h}finally{q&&clearTimeout(q),s&&K("onPatternComplete",{patternId:s,patternType:"dag",durationMs:Date.now()-a,timestamp:Date.now(),error:B});}}async function Bt(e,n,s,r){let a=Date.now(),d=s??"__inline_reflect",c=e.maxIterations??2;if(c<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");re&&c>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let g=e.signal,y,E;if(e.timeout&&!g){let h=new AbortController;y=setTimeout(()=>h.abort(),e.timeout),g=h.signal;}else if(e.timeout&&g){let h=new AbortController;y=setTimeout(()=>h.abort(),e.timeout),E=()=>h.abort(),g.addEventListener("abort",E,{once:true}),g=h.signal;}let A=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"}}),M=e.buildRetryInput??((h,T,F)=>`${h}
|
|
56
|
+
|
|
57
|
+
Feedback on your previous response:
|
|
58
|
+
${T}
|
|
59
|
+
|
|
60
|
+
Please improve your response.`);s&&K("onPatternStart",{patternId:d,patternType:"reflect",input:n,timestamp:a});let _=e.checkpoint,L=_?.store??se,v=_?.everyN??5,C=_?.labelPrefix??"reflect",U,N,q=r?.history?[...r.history]:[],B=r?.producerOutputs?[...r.producerOutputs]:[],D=r?.iteration??0;r?.lastProducerOutput!=null&&(N={output:r.lastProducerOutput,totalTokens:0,messages:[],toolCalls:[]});try{let h=r?.effectiveInput??n;for(let T=D;T<c;T++){if(g?.aborted){if(N)return Ne=q,e.extract?e.extract(N.output):N.output;throw new DOMException("Reflect pattern aborted","AbortError")}let F=Date.now(),J=await be(e.handler,h,{signal:g,patternId:s});N=J;let j=typeof J.output=="string"?J.output:safeStringify(J.output);if(g?.aborted)return Ne=q,e.extract?e.extract(J.output):J.output;let k=await be(e.evaluator,j,{signal:g,patternId:s}),R;try{R=A(k.output);}catch(G){R={passed:!1,feedback:`Evaluation parse error: ${G instanceof Error?G.message:String(G)}`};}if(!R.passed&&e.threshold!=null&&R.score!=null){let G=typeof e.threshold=="function"?e.threshold(T):e.threshold;R.score>=G&&(R={...R,passed:!0});}let O=Date.now()-F;B.push({output:J.output,score:R.score});let W={iteration:T,passed:R.passed,score:R.score,feedback:R.feedback,durationMs:O,producerTokens:J.totalTokens??0,evaluatorTokens:k.totalTokens??0};if(q.push(W),e.onIteration)try{e.onIteration(W);}catch(G){re&&console.warn("[Directive MultiAgent] onIteration callback threw:",G);}if(P&&P.record({type:"reflection_iteration",timestamp:Date.now(),snapshotId:null,iteration:T,passed:R.passed,score:R.score,durationMs:O,producerTokens:J.totalTokens,evaluatorTokens:k.totalTokens}),R.passed)return Ne=q,e.extract?e.extract(J.output):J.output;if(T<c-1&&R.feedback)try{h=M(n,R.feedback,T);}catch(G){re&&console.warn("[Directive MultiAgent] buildRetryInput threw, using default format:",G),h=`${n}
|
|
61
|
+
|
|
62
|
+
Feedback on your previous response:
|
|
63
|
+
${R.feedback}
|
|
64
|
+
|
|
65
|
+
Please improve your response.`;}_&&L&&T>=D&&(T-D+1)%v===0&&await mt({type:"reflect",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${C}:iter-${T+1}`,patternId:d,stepsTotal:c,iteration:T+1,effectiveInput:h,history:[...q],producerOutputs:[...B],lastProducerOutput:J.output},L,_);}if(Ne=q,e.onExhausted==="throw")throw new Dt({iterations:c,history:q.map(T=>({passed:T.passed,feedback:T.feedback,score:T.score})),lastResult:N,totalTokens:N.totalTokens??0});if(e.onExhausted==="accept-best"&&B.length>0){!B.some(k=>k.score!=null)&&re&&console.warn("[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.");let F=B.length-1,J=Number.NEGATIVE_INFINITY;for(let k=0;k<B.length;k++){let R=B[k].score;R!=null&&R>J&&(J=R,F=k);}let j=B[F].output;return e.extract?e.extract(j):j}return e.extract?e.extract(N.output):N.output}catch(h){throw Ne=q,U=h instanceof Error?h:new Error(String(h)),h}finally{y&&clearTimeout(y),E&&e.signal&&e.signal.removeEventListener("abort",E),s&&K("onPatternComplete",{patternId:d,patternType:"reflect",durationMs:Date.now()-a,timestamp:Date.now(),error:U});}}async function Dn(e,n,s){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 _ of e.handlers)if(!Y[_]&&!ee[_])throw new Error(`[Directive MultiAgent] Race: unknown handler "${_}"`);let a=Date.now(),d=s??"__inline_race",c=new AbortController,g,y;e.signal&&(e.signal.aborted?c.abort():(y=()=>c.abort(),e.signal.addEventListener("abort",y,{once:true}))),s&&K("onPatternStart",{patternId:d,patternType:"race",input:n,timestamp:a}),P&&P.record({type:"race_start",timestamp:a,snapshotId:null,patternId:d,agents:e.handlers}),e.timeout&&(g=setTimeout(()=>c.abort(),e.timeout));let E,A=Object.create(null),M=[...e.handlers];try{let _=e.handlers.map(T=>({agentId:T,promise:be(T,n,{signal:c.signal,patternId:s}).then(F=>({agentId:T,result:F}))})),L=_.map(T=>T.promise.catch(()=>{})),v=[],C=await new Promise((T,F)=>{let J=0,j=!1;for(let k of _)k.promise.then(R=>{J++,!j&&(v.push(R),v.length>=r&&(j=!0,c.abort(),T([...v])));}).catch(R=>{if(A[k.agentId]=R instanceof Error?R.message:String(R),J++,j)return;let O=Object.keys(A).length,W=v.length+(_.length-J);J===_.length&&O===_.length?(j=!0,F(new Error(`[Directive MultiAgent] Race: all ${_.length} agents failed.
|
|
66
|
+
`+Object.entries(A).map(([G,me])=>` - ${G}: ${me}`).join(`
|
|
67
|
+
`)))):W<r&&(j=!0,F(new Error(`[Directive MultiAgent] Race: cannot reach minSuccess (${r}). ${O} agent(s) failed.
|
|
68
|
+
`+Object.entries(A).map(([G,me])=>` - ${G}: ${me}`).join(`
|
|
69
|
+
`))));});});await Promise.all(L).catch(()=>{});let U=C[0],N=U.agentId,q=new Set(C.map(T=>T.agentId)),B=M.filter(T=>!q.has(T)&&!(T in A));P&&(P.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:d,winnerId:N,durationMs:Date.now()-a}),B.length>0&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:d,cancelledIds:B,reason:"winner_found"}));let D=e.extract?e.extract(U.result):U.result.output,h=r>1?C.map(T=>({agentId:T.agentId,result:e.extract?e.extract(T.result):T.result.output})):void 0;return {winnerId:N,result:D,allResults:h}}catch(_){throw E=_ instanceof Error?_:new Error(String(_)),P&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:d,cancelledIds:M,reason:c.signal.aborted?"timeout":"all_failed"}),_}finally{g&&clearTimeout(g),y&&e.signal&&e.signal.removeEventListener("abort",y),s&&K("onPatternComplete",{patternId:d,patternType:"race",durationMs:Date.now()-a,timestamp:Date.now(),error:E});}}async function Ft(e,n,s,r){let{handlers:a,evaluator:d,maxRounds:c=2,extract:g,parseJudgement:y}=e;if(a.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(c<1||!Number.isFinite(c))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let E=e.signal,A,M;if(e.timeout&&!E){let R=new AbortController;A=setTimeout(()=>R.abort(),e.timeout),E=R.signal;}else if(e.timeout&&E){let R=new AbortController;A=setTimeout(()=>R.abort(),e.timeout),M=()=>R.abort(),E.addEventListener("abort",M,{once:true}),E=R.signal;}let L=y??(R=>{if(typeof R=="string")try{let O=JSON.parse(R);return O&&typeof O=="object"&&typeof O.winnerId=="string"?O:(re&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:a[0]})}catch{return re&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:a[0]}}return R&&typeof R=="object"&&"winnerId"in R&&typeof R.winnerId=="string"?R:(re&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:a[0]})}),v=r?.rounds?[...r.rounds]:[],C=r?.currentInput??n,U=r?.lastWinnerId??a[0],N=r?.lastWinnerOutput??void 0,q=r?.round??0,B=e.checkpoint,D=B?.store??se,h=B?.everyN??5,T=B?.labelPrefix??"debate",F=s??"__inline_debate",J=Date.now(),j=r?.tokensConsumed??0;s&&K("onPatternStart",{patternId:F,patternType:"debate",input:n,timestamp:J});let k;try{for(let O=q;O<c&&!E?.aborted;O++){let W=a.map(async ye=>{let Pe=await be(ye,C,{signal:E,patternId:F});return j+=Pe.totalTokens,{agentId:ye,output:Pe.output}}),G=await Promise.all(W);if(E?.aborted)break;let me=JSON.stringify({round:O+1,totalRounds:c,proposals:G.map(ye=>({agentId:ye.agentId,proposal:ye.output}))}),ae=await be(d,me,{signal:E,patternId:F});j+=ae.totalTokens;let ue=L(ae.output);if(a.includes(ue.winnerId)||(ue.winnerId=a[0]),v.push({proposals:G,judgement:ue}),P&&P.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:F,round:O+1,totalRounds:c,winnerId:ue.winnerId,score:ue.score,agentCount:a.length}),U=ue.winnerId,N=G.find(ye=>ye.agentId===ue.winnerId)?.output??G[0].output,B&&D&&O>q&&(O-q)%h===0){let ye={type:"debate",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${T}:round-${O+1}`,patternId:F,stepsTotal:c,round:O+1,currentInput:C,rounds:[...v],lastWinnerId:U,lastWinnerOutput:N,tokensConsumed:j};await mt(ye,D,B);}O<c-1&&ue.feedback&&(C=`Previous round feedback: ${ue.feedback}
|
|
70
|
+
|
|
71
|
+
Original task: ${n}`);}if(v.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let R=g?g(N):N;return {winnerId:U,result:R,rounds:v}}catch(R){throw k=R instanceof Error?R:new Error(String(R)),R}finally{A&&clearTimeout(A),M&&e.signal&&e.signal.removeEventListener("abort",M),s&&K("onPatternComplete",{patternId:F,patternType:"debate",durationMs:Date.now()-J,timestamp:Date.now(),error:k});}}let ur=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function ht(e,n){for(let s of Object.keys(n))ur.has(s)||(e[s]=n[s]);}function lr(e,n){let s=Object.create(null);for(let[y,E]of Object.entries(n))for(let A of E.produces)s[A]||(s[A]=[]),s[A].push(y);let r=Object.keys(n),a=Object.create(null),d=Object.create(null);for(let y of r)a[y]=0,d[y]=[];for(let[y,E]of Object.entries(n))for(let A of E.requires??[]){let M=s[A];if(M)for(let _ of M)_!==y&&(d[_].push(y),a[y]=(a[y]??0)+1);}let c=[];for(let y of r)a[y]===0&&c.push(y);let g=0;for(;c.length>0;){let y=c.shift();g++;for(let E of d[y]??[])a[E]--,a[E]===0&&c.push(E);}if(g!==r.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${g}/${r.length} nodes.`)}function cr(e,n){let s=Object.create(null);for(let[r,a]of Object.entries(n))for(let d of a.produces)s[d]||(s[d]=[]),s[d].push(r);for(let[r,a]of Object.entries(s))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${r}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function Te(e,...n){if(e)try{return e(...n)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}async function dr(e,...n){if(e)try{return await e(...n)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}function ln(e,n,s){let r=n.slice(-3),a=r.length>0?r.reduce((g,y)=>g+y.satisfactionDelta,0)/r.length:0,d=null;a>0&&e<1&&(d=Math.ceil((1-e)/a));let c=false;if(n.length>=6){let g=n.slice(-3),y=n.slice(-6,-3),E=g.reduce((M,_)=>M+_.satisfactionDelta,0)/3,A=y.reduce((M,_)=>M+_.satisfactionDelta,0)/3;c=E<A*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:d,decelerating:c}}function St(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Ht(e,n,s,r){let{nodes:a,when:d,satisfaction:c,maxSteps:g=50,extract:y,selectionStrategy:E,relaxation:A,onStep:M,onStall:_}=e,L=Object.create(null);for(let[ne,ie]of Object.entries(a))L[ne]={...ie};if(Object.keys(L).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let C=s??"__goal";for(let[ne,ie]of Object.entries(L))if(!Y[ie.handler]&&!ee[ie.handler])throw new Error(`[Directive MultiAgent] goal node "${ne}" references unregistered handler "${ie.handler}"`);lr(C,L),cr(C,L);for(let[ne,ie]of Object.entries(L))ie.extractOutput||console.warn(`[Directive MultiAgent] goal node "${ne}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let U=e.signal,N,q,B=e.timeout??3e5;if(B&&!U){let ne=new AbortController;N=setTimeout(()=>ne.abort(),B),U=ne.signal;}else if(B&&U){let ne=new AbortController;N=setTimeout(()=>ne.abort(),B),q=()=>ne.abort(),U.addEventListener("abort",q,{once:true}),U=ne.signal;}let D=Date.now();if(P){let ne=Object.values(L).map(ie=>ie.handler);P.record({type:"pattern_start",timestamp:D,snapshotId:null,patternId:C,patternType:"goal",handlers:ne,taskIds:ne.filter(ie=>ee[ie]!=null)});}K("onPatternStart",{patternId:C,patternType:"goal",input:typeof n=="string"?n:JSON.stringify(n),timestamp:D});let h=Object.create(null);r?ht(h,r.facts):typeof n=="string"?h.input=n:ht(h,n);let T=r?[...r.executionOrder]:[],F=Object.create(null);if(r)for(let[ne,ie]of Object.entries(r.nodeOutputs))F[ne]={output:ie.output,totalTokens:ie.totalTokens};let J=r?[...r.stepMetrics]:[],j=r?[...r.relaxations]:[],k=new Set(r?.completedNodes??[]),R=new Map(r?Object.entries(r.failedNodes).map(([ne,ie])=>[ne,ie]):[]),O=new Map(r?Object.entries(r.nodeInputHashes):[]),W=Object.create(null);if(r)for(let[ne,ie]of Object.entries(r.agentMetrics))W[ne]={runs:ie.runs,avgSatisfactionDelta:ie.runs>0?ie.totalDelta/ie.runs:0,tokens:ie.tokens,totalDelta:ie.totalDelta};let G=r?.stallSteps??0,me=r?.appliedRelaxationTiers??0,ae=r?.lastSatisfaction??0,ue,at=false,ye=r?.step??0,Pe=e.checkpoint,mr=Pe?.everyN??5,_n=Pe?.store??se,hr=Pe?.labelPrefix??"goal",Mn,br=3;try{for(let ge=ye;ge<g;ge++){if(Te(d,h)===!0){at=!0;let Z=Date.now()-D,X=Object.values(F).reduce((le,ke)=>le+ke.totalTokens,0);return {achieved:!0,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:X,durationMs:Z,stepMetrics:J,relaxations:j}}if(U?.aborted){let Z=Date.now()-D,X=Object.values(F).reduce((le,ke)=>le+ke.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:X,durationMs:Z,stepMetrics:J,relaxations:j,error:"Aborted or timed out"}}let it=[];for(let[Z,X]of Object.entries(L)){if((R.get(Z)??0)>=br)continue;let le=X.requires??[];if(le.every(he=>h[he]!=null)){if(k.has(Z)){if(!X.allowRerun)continue;let he=JSON.stringify(le.map(Se=>h[Se]));if(O.get(Z)===he)continue}it.push(Z);}}let Ke=it;if(E&&it.length>0){let Z=c?Te(c,h)??0:Te(d,h)===!0?1:0,X=St(Z),le=ln(X,J,ge),ke=Object.create(null);for(let[Se,ce]of Object.entries(W))ke[Se]={runs:ce.runs,avgSatisfactionDelta:ce.runs>0?ce.totalDelta/ce.runs:0,tokens:ce.tokens};let he=E.select(it,ke,le);Ke=he&&he.length>0?he:it;}if(Ke.sort((Z,X)=>(L[X].priority??0)-(L[Z].priority??0)),Te(M,ge,{...h},Ke),Ke.length===0){G++;let Z=!1;if(A)for(let X=me;X<A.length;X++){let le=A[X],ke=le.afterStallSteps??3;if(G>=ke){let he=le.strategy;switch(he.type){case "allow_rerun":for(let Se of he.nodes)k.delete(Se),O.delete(Se);break;case "alternative_nodes":for(let Se of he.nodes){let ce=`__relaxation_${X}_${Se.handler}`;L[ce]={...Se};}break;case "inject_facts":ht(h,he.facts);break;case "accept_partial":{let Se=Date.now()-D,ce=Object.values(F).reduce((ve,Ge)=>ve+Ge.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:ce,durationMs:Se,stepMetrics:J,relaxations:j,error:`Accepted partial result via relaxation tier "${le.label}"`}}case "custom":{let Se=Te(c,h)??0,ce={step:ge,facts:{...h},metrics:ln(St(Se),J,ge),completedNodes:new Set(k),failedNodes:new Map(R)};await dr(he.apply,ce);break}}j.push({step:ge,tierIndex:X,label:le.label,strategy:he.type}),me=X+1,G=0,Z=!0;break}}if(!Z){let X=Te(c,h)??0,le=ln(St(X),J,ge);if(Te(_,ge,le),!A||me>=A.length){let ke=Date.now()-D,he=Object.values(F).reduce((Se,ce)=>Se+ce.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:he,durationMs:ke,stepMetrics:J,relaxations:j,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}G=0;let yr=Date.now(),kr=c?Te(c,h)??0:Te(d,h)===!0?1:0,vr=St(kr),Pn=0,bt=[],wr=Ke.map(async Z=>{let X=L[Z],le=X.requires??[],ke=JSON.stringify(le.map(ce=>h[ce]));O.set(Z,ke);let he,Se=Te(X.buildInput,h);if(Se!=null)he=Se;else {let ce=Object.create(null);for(let ve of le)h[ve]!=null&&(ce[ve]=h[ve]);Object.keys(ce).length>0?he=JSON.stringify(ce):h.input!=null?he=String(h.input):he=JSON.stringify(h);}try{let ce=await be(X.handler,he,{signal:U??void 0,patternId:C});if(F[Z]=ce,T.push(Z),k.add(Z),R.delete(Z),X.extractOutput){let ve=Te(X.extractOutput,ce);ve&&(ht(h,ve),bt.push(...Object.keys(ve)));}else {let ve=ce.output;if(ve&&typeof ve=="object")ht(h,ve),bt.push(...Object.keys(ve));else if(typeof ve=="string")try{let Ge=JSON.parse(ve);if(Ge&&typeof Ge=="object"&&!Array.isArray(Ge))ht(h,Ge),bt.push(...Object.keys(Ge));else for(let In of X.produces)h[In]=ve,bt.push(In);}catch{for(let Ge of X.produces)h[Ge]=ve,bt.push(Ge);}}return Pn+=ce.totalTokens,{nodeId:Z,success:!0}}catch(ce){let ve=(R.get(Z)??0)+1;return R.set(Z,ve),{nodeId:Z,success:!1,error:ce}}});await Promise.allSettled(wr);let Rr=c?Te(c,h)??0:Te(d,h)===!0?1:0,Ut=St(Rr),Jt=Ut-vr;if(J.push({step:ge,durationMs:Date.now()-yr,nodesRun:[...Ke],factsProduced:bt,satisfaction:Ut,satisfactionDelta:Jt,tokensConsumed:Pn}),P)for(let Z of Ke){let X=L[Z];P.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:X.handler,step:ge,nodeId:Z,satisfaction:Ut,satisfactionDelta:Jt});}for(let Z of Ke){let X=L[Z];W[X.handler]||(W[X.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let le=W[X.handler];le.runs++,le.totalDelta+=Jt,le.tokens+=F[Z]?.totalTokens??0;}if(ae=Ut,Jt<=0?G++:G=0,Pe&&_n&&ge>ye&&(ge-ye)%mr===0){let Z={type:"goal",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${hr}:step-${ge}`,patternId:C,stepsTotal:g,step:ge+1,facts:structuredClone(h),completedNodes:[...k],failedNodes:Object.fromEntries(R),nodeInputHashes:Object.fromEntries(O),nodeOutputs:Object.fromEntries(Object.entries(F).map(([le,ke])=>[le,{output:ke.output,totalTokens:ke.totalTokens}])),executionOrder:[...T],stepMetrics:[...J],relaxations:[...j],appliedRelaxationTiers:me,stallSteps:G,lastSatisfaction:ae,agentMetrics:Object.fromEntries(Object.entries(W).map(([le,ke])=>[le,{runs:ke.runs,totalDelta:ke.totalDelta,tokens:ke.tokens}]))},X=await mt(Z,_n,Pe);X&&(Mn=X);}}let ne=Date.now()-D,ie=Object.values(F).reduce((ge,it)=>ge+it.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:g,totalTokens:ie,durationMs:ne,stepMetrics:J,relaxations:j,error:`Max steps (${g}) exhausted without achieving goal`}}catch(ne){throw ue=ne instanceof Error?ne:new Error(String(ne)),ne}finally{if(N!=null&&clearTimeout(N),q&&e.signal&&e.signal.removeEventListener("abort",q),P){let ne=Object.values(F).reduce((ie,ge)=>ie+ge.totalTokens,0);P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:C,patternType:"goal",durationMs:Date.now()-D,achieved:at,stepMetrics:J,relaxations:j,totalTokens:ne,...ue?{error:ue.message}:{}});}K("onPatternComplete",{patternId:C,patternType:"goal",durationMs:Date.now()-D,timestamp:Date.now(),error:ue});}}function pr(e){if(!V)return [];let n=[],s=new Set;if(s.add(e),V.equivalencyGroups){for(let r of Object.values(V.equivalencyGroups))if(r.includes(e))for(let a of r)!s.has(a)&&Y[a]&&(n.push(a),s.add(a));}if(V.useCapabilities!==false){let r=Y[e];if(r?.capabilities&&r.capabilities.length>0)for(let[a,d]of Object.entries(Y)){if(s.has(a))continue;let c=d.capabilities??[];r.capabilities.every(g=>c.includes(g))&&(n.push(a),s.add(a));}}if(Ce){let r=V.healthThreshold??30;return n.filter(a=>Ce.getHealthScore(a)>r)}return n}function gr(e){if(e.length===0)return null;if(!V||!Ce)return e[0]??null;if(V.selectionStrategy==="round-robin"&&He){let r=[...e].sort().join(","),a=He.get(r)??0,d=e[a%e.length];return He.set(r,a+1),d}let n=e[0],s=Ce.getHealthScore(n);for(let r=1;r<e.length;r++){let a=Ce.getHealthScore(e[r]);a>s&&(n=e[r],s=a);}return n}function fr(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 On={system:z,get facts(){return z.facts},get timeline(){return P},get healthMonitor(){return Ce},get derived(){return Object.freeze({...pt})},onDerivedChange(e){return qt.add(e),()=>{qt.delete(e);}},get scratchpad(){return nn},runAgent:be,runAgentStream:on,async runPattern(e,n){te();let s=u[e];if(!s){let d=Object.keys(u).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${d}`)}let r=Date.now();if(P){let d=fr(s);P.record({type:"pattern_start",timestamp:r,snapshotId:null,patternId:e,patternType:s.type,handlers:d,taskIds:d.filter(c=>ee[c]!=null)});}let a;try{switch(s.type){case "parallel":return await ir(s,n,e);case "sequential":return await sn(s,n,e);case "supervisor":return await an(s,n,e);case "dag":return await un(s,n,e);case "reflect":return await Bt(s,n,e);case "race":return (await Dn(s,n,e)).result;case "debate":return (await Ft(s,n,e)).result;case "goal":return (await Ht(s,n,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${s.type}`)}}catch(d){throw a=d instanceof Error?d:new Error(String(d)),d}finally{P&&P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:s.type,durationMs:Date.now()-r,...a?{error:a.message}:{}});}},async runParallel(e,n,s,r){te();let a=Array.isArray(n)?n:e.map(()=>n);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let d=new AbortController,c;r?.timeout&&(c=setTimeout(()=>d.abort(),r.timeout));try{let g=e.map((A,M)=>be(A,a[M],{signal:d.signal}).catch(_=>{if(r?.minSuccess!==void 0)return null;throw _})),y=await Promise.all(g),E=y.filter(A=>A!==null);if(r?.minSuccess!==void 0&&E.length<r.minSuccess){let A=y.length-E.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${E.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess}, failed: ${A})`)}return s(E)}finally{c&&clearTimeout(c);}},async runSequential(e,n,s){te();let r=[],a=n;for(let d=0;d<e.length;d++){let c=e[d],g=await be(c,a);r.push(g),d<e.length-1&&(s?.transform?a=s.transform(g.output,c,d):a=typeof g.output=="string"?g.output:safeStringify(g.output));}return r},async handoff(e,n,s,r){if(te(),!Y[e]){let c=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${c}`)}if(!Y[n]){let c=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${n}" not found. Registered: ${c}`)}{let c=await st("pre_handoff",e,Y[e].agent.name,s,void 0,{handoff:{fromAgent:e,toAgent:n}});if(c.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};s=c.input;}let a={id:`handoff-${++$t}`,fromAgent:e,toAgent:n,input:s,context:r,requestedAt:Date.now()};je.push(a);try{p?.(a);}catch(c){re&&console.debug("[Directive MultiAgent] onHandoff threw:",c);}K("onHandoff",a),P&&P.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n});let d=Y[n].memory??S;if(d&&r)try{let c=Object.entries(r).map(([g,y])=>`${g}: ${safeStringify(y)}`).join(", ");d.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${c}`}]);}catch(c){re&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",c);}try{let c=await be(n,s),g={request:a,result:c,completedAt:Date.now()};nr(g);try{f?.(g);}catch(E){re&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",E);}K("onHandoffComplete",g),P&&P.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n,durationMs:g.completedAt-a.requestedAt});let y=je.indexOf(a);return y>=0&&je.splice(y,1),c}catch(c){let g=je.indexOf(a);throw g>=0&&je.splice(g,1),c}},approve(e){te();let n=dt.get(e);if(n){dt.delete(e);let s=fe(n);z.batch(()=>{let r=vt(s),a=200,d=[...r.approved,e];Xe(s,{...r,pending:r.pending.filter(c=>c.id!==e),approved:d.length>a?d.slice(-a):d});});return}re&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,n){te();let s=dt.get(e);if(s){dt.delete(e);let r=fe(s);z.batch(()=>{let a=vt(r);n&&re&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${n}`);let d={id:e,reason:n,rejectedAt:Date.now()},c=200,g=[...a.rejected,d];Xe(r,{...a,pending:a.pending.filter(y=>y.id!==e),rejected:g.length>c?g.slice(-c):g});});return}re&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){te(),Ue="paused",re&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){te(),Ue==="paused"&&(Ue="idle",re&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let n=xe[e];return n?{...n}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(xe).map(([e,n])=>[e,{...n}]))},getPendingHandoffs(){return [...je]},get totalTokens(){return nt},waitForIdle(e){let n=()=>jt===0&&Object.values(xe).every(s=>s.status==="idle"||s.status==="completed"||s.status==="error");return n()?Promise.resolve():new Promise((s,r)=>{let a=null,d=()=>{Gt.delete(c),a&&clearTimeout(a);},c=()=>{n()&&(d(),s());};Gt.add(c),e!==void 0&&(a=setTimeout(()=>{d(),r(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,n,s){return be(e,n,s)},runStream(e,n,s){return on(e,n,s)},registerAgent(e,n){if(te(),It.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(Y[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(ee[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let s=n.constraints?zt(n.constraints):{},r=Object.create(null);if(n.resolvers)for(let[d,c]of Object.entries(n.resolvers))r[d]={requirement:c.requirement,key:c.key,resolve:async(g,y)=>{let E=Oe(y.facts),M={facts:{...y.facts,...E},runAgent:async(_,L,v)=>t$1(_,L,v),signal:y.signal};return c.resolve(g,M)}};let a=createModule(e,{schema:pn,init:d=>{Ye(d,{status:"idle",currentAgent:n.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(d,{pending:[],approved:[],rejected:[]}),wt(d,[]),Rt(d,[]),Ze(d,_t());},constraints:s,resolvers:Object.keys(r).length>0?r:void 0});z.registerModule(e,a),Y[e]=n,Je.set(e,new _e(n.maxConcurrent??1)),xe[e]={status:"idle",runCount:0,totalTokens:0},re&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${n.agent.name})`),$e();},unregisterAgent(e){if(te(),!Y[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(xe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,d]of Object.entries(u)){let c;switch(d.type){case "supervisor":c=[d.supervisor,...d.workers];break;case "dag":c=Object.values(d.nodes).map(g=>g.handler);break;case "reflect":c=[d.handler,d.evaluator];break;case "parallel":case "sequential":case "race":c=d.handlers;break;case "debate":c=[...d.handlers,d.evaluator];break;default:c=[];}c.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let s=Je.get(e);s&&(s.drain(),Je.delete(e));let r=fe(e);r&&z.batch(()=>{Ye(r,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(r,{pending:[],approved:[],rejected:[]}),wt(r,[]),Rt(r,[]),Ze(r,_t());}),delete Y[e],delete xe[e],re&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),$e();},getAgentIds(){return Object.keys(Y)},registerTask(e,n){if(te(),It.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(Y[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(ee[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:s,delayMs:r}=n.retry;if(!Number.isFinite(s)||s<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`)}ee[e]=n,Ae[e]={status:"idle"},Fe.set(e,new _e(n.maxConcurrent??1)),re&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${n.label??e})`);},unregisterTask(e){if(te(),!ee[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(Ae[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let s=Fe.get(e);s&&(s.drain(),Fe.delete(e)),delete ee[e],delete Ae[e],re&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(ee)},getTaskRegistry(){let e=Object.create(null);for(let[n,s]of Object.entries(ee))e[n]={label:s.label,description:s.description};return e},getTaskState(e){let n=Ae[e];return n?Object.freeze(structuredClone(n)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[n,s]of Object.entries(Ae))e[n]=Object.freeze(structuredClone(s));return e},getNodeIds(){return [...Object.keys(Y),...Object.keys(ee)]},reset(){te();for(let n of Object.keys(Y)){let s=Y[n]?.maxConcurrent??1;xe[n]={status:"idle",runCount:0,totalTokens:0};let r=Je.get(n);r&&r.drain(),Je.set(n,new _e(s));let a=fe(n);z.batch(()=>{Ye(a,{status:"idle",currentAgent:Y[n].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(a,{pending:[],approved:[],rejected:[]}),wt(a,[]),Rt(a,[]),Ze(a,_t());});}for(let n of Object.keys(ee)){Ae[n]={status:"idle"};let s=Fe.get(n);s&&s.drain(),Fe.set(n,new _e(ee[n].maxConcurrent??1));}ft.clear(),Tt.clear(),dt.clear(),je.length=0,rt.length=0,$t=0,nt=0,Ue="idle",jt=0,ot();let e=fe("__coord");z.batch(()=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Be&&setBridgeFact(e,Ee,{...Be.init});}),Ce&&Ce.reset(),Ne=null;for(let n of Object.keys(pt))delete pt[n];$e();},async checkpoint(e){te();for(let[s,r]of Object.entries(xe))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${s}" is running`);for(let[s,r]of Object.entries(Ae))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${s}" is running`);if(!z.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let n={version:1,id:Qe(),createdAt:new Date().toISOString(),label:e?.label,systemExport:z.history.export(),timelineExport:P?.export()??null,localState:{type:"multi",globalTokenCount:nt,globalStatus:Ue,agentStates:Object.fromEntries(Object.entries(xe).map(([s,r])=>[s,structuredClone(r)])),handoffCounter:$t,pendingHandoffs:[...je],handoffResults:[...rt],roundRobinCounters:He?Object.fromEntries(He):null,taskStates:Object.fromEntries(Object.entries(Ae).map(([s,r])=>[s,{lastOutput:r.lastOutput!=null?String(r.lastOutput):void 0,lastError:r.lastError}]))},memoryExport:S?S.export?.()??null:null,orchestratorType:"multi"};return se&&await se.save(n),n},restore(e,n){if(te(),!mn(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(!z.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");z.history.import(e.systemExport),n?.restoreTimeline!==false&&e.timelineExport&&P&&P.import(e.timelineExport),e.memoryExport&&S&&S.import&&S.import(e.memoryExport);let s=e.localState;nt=s.globalTokenCount,Ue=s.globalStatus,$t=s.handoffCounter,je.length=0,je.push(...s.pendingHandoffs),rt.length=0,rt.push(...s.handoffResults);for(let[r,a]of Object.entries(s.agentStates))xe[r]&&(xe[r]={...a});if(s.roundRobinCounters&&He){He.clear();for(let[r,a]of Object.entries(s.roundRobinCounters))He.set(r,a);}for(let[r,a]of Object.entries(Y)){let d=Je.get(r);d&&d.drain(),Je.set(r,new _e(a.maxConcurrent??1));}if(s.taskStates){for(let[r,a]of Object.entries(s.taskStates)){if(!ee[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.`);Ae[r]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[r,a]of Object.entries(ee)){let d=Fe.get(r);d&&d.drain(),Fe.set(r,new _e(a.maxConcurrent??1));}}$e();},runParallelStream(e,n,s,r){te();let a=Array.isArray(n)?n:e.map(()=>n);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let d=new AbortController,c;r?.timeout&&(c=setTimeout(()=>d.abort(),r.timeout));let g=e.map((v,C)=>{let U=on(v,a[C],{signal:d.signal});return {agentId:v,streamResult:U}}),y=g.map(({agentId:v,streamResult:C})=>({agentId:v,stream:C.stream})),{stream:E,getDroppedCount:A}=Wn(y),M;r?.signal&&(M=()=>d.abort(),r.signal.addEventListener("abort",M,{once:true}));let _=Promise.allSettled(g.map(({streamResult:v})=>v.result)).then(v=>{c&&clearTimeout(c),M&&r?.signal&&r.signal.removeEventListener("abort",M);let C=[];for(let U of v)U.status==="fulfilled"&&C.push(U.value);if(r?.minSuccess!==void 0&&C.length<r.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${C.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess})`);return C}),L=_.then(v=>s(v));return _.catch(()=>{}),L.catch(()=>{}),{stream:E,results:_,merge:L,getDroppedCount:A,abort:()=>{d.abort(),M&&r?.signal&&r.signal.removeEventListener("abort",M);for(let{streamResult:v}of g)v.abort();}}},async runRace(e,n,s){te();let r={type:"race",handlers:e,extract:s?.extract,timeout:s?.timeout,minSuccess:s?.minSuccess,signal:s?.signal};return Dn(r,n,"__imperative_race")},async runReflect(e,n,s,r){te();let a={type:"reflect",handler:e,evaluator:n,maxIterations:r?.maxIterations,parseEvaluation:r?.parseEvaluation,buildRetryInput:r?.buildRetryInput,extract:r?.extract,onExhausted:r?.onExhausted,onIteration:r?.onIteration,signal:r?.signal,timeout:r?.timeout,threshold:r?.threshold},d=await Bt(a,s,"__imperative_reflect"),c=Ne?[...Ne]:[],g=r?.maxIterations??2,y=c.length>0&&!c[c.length-1].passed&&c.length>=g;return {result:d,iterations:c.length,history:c,exhausted:y}},async runDebate(e,n,s,r){return te(),Ft({handlers:e,evaluator:n,maxRounds:r?.maxRounds,extract:r?.extract,parseJudgement:r?.parseJudgement,signal:r?.signal,timeout:r?.timeout},s,"__imperative_debate")},async runGoal(e,n,s,r){return te(),Ht({nodes:e,when:s,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(te(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Ht(n,{},e.patternId,e)},async resumeSequential(e,n){if(te(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return sn(n,e.currentInput,e.patternId,e)},async resumeSupervisor(e,n,s){if(te(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let r=s?.input??e.currentInput;return an(n,r,e.patternId,e)},async resumeReflect(e,n,s){if(te(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let r=s?.input??e.effectiveInput;return Bt(n,r,e.patternId,e)},async resumeDebate(e,n){if(te(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return Ft(n,e.currentInput,e.patternId,e)},async resumeDag(e,n,s){if(te(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let r=s?.input??e.input;return un(n,r,e.patternId,e)},async replay(e,n,s){if(te(),!se)throw new Error("[Directive MultiAgent] No checkpoint store configured");let r=await se.load(e);if(!r)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let g=JSON.parse(r.systemExport);if(!g||typeof g!="object")throw new Error("Parsed checkpoint state is not an object");let y=new Set(["__proto__","constructor","prototype"]);for(let A of Object.keys(g))if(y.has(A))throw new Error(`Checkpoint state contains blocked key: ${A}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal"]).has(g.type))throw new Error(`Unknown checkpoint pattern type: ${g.type}`);if(g.version!==1)throw new Error(`Unsupported checkpoint version: ${g.version}`);a=g;}catch(g){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${g instanceof Error?g.message:String(g)}`)}let d=lt(a),c=s?.input??("currentInput"in a?a.currentInput:"");switch(P&&P.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:d}),a.type){case "sequential":return sn(n,c,a.patternId,a);case "supervisor":return an(n,c,a.patternId,a);case "reflect":return Bt(n,c,a.patternId,a);case "debate":return Ft(n,c,a.patternId,a);case "dag":return un(n,c,a.patternId,a);case "goal":return Ht(n,a.facts,a.patternId,a)}},resumeBreakpoint(e,n){te(),n&&ft.set(e,n);for(let s of Object.keys(Y)){let r=fe(s);if(ze(r).pending.some(d=>d.id===e)){z.batch(()=>{let d=ze(r),c=[...d.resolved,e];Ze(r,{...d,pending:d.pending.filter(g=>g.id!==e),resolved:c.length>Ot?c.slice(-Ot):c});});return}}re&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,n){te(),n&&Tt.set(e,n);for(let s of Object.keys(Y)){let r=fe(s);if(ze(r).pending.some(d=>d.id===e)){z.batch(()=>{let d=ze(r),c=[...d.cancelled,e];Ze(r,{...d,pending:d.pending.filter(g=>g.id!==e),cancelled:c.length>Ot?c.slice(-Ot):c});});return}}re&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let n of Object.keys(Y)){let s=fe(n),r=ze(s);e.push(...r.pending);}return e},getLastReflectionHistory(){return Ne?[...Ne]:null},destroy(){tn||(On.reset(),Lt.clear(),gt.clear(),qt.clear(),Gt.clear(),tn=true,z.destroy());}};return $e(),On}export{_r as $,Ot as A,Uo as Aa,Fn as B,Jo as Ba,Hn as C,Wo as Ca,_t as D,ls as Da,Qe as E,mn as F,Jn as G,Mt as H,Kn as I,bn as J,oo as K,so as L,ao as M,io as N,uo as O,lo as P,co as Q,po as R,go as S,fo as T,Wn as U,Ln as V,Dt as W,zr as X,yn as Y,_e as Z,lt as _,Ve as a,Pr as aa,Bn as b,Ir as ba,Vt as c,kn as ca,yt as d,yo as da,kt as e,ko as ea,pn as f,vo as fa,dn as g,wo as ga,Fr as h,Ro as ha,jn as i,To as ia,$n as j,So as ja,Wt as k,xo as ka,Kt as l,Eo as la,qn as m,Ao as ma,Ct as n,Do as na,Ye as o,Oo as oa,vt as p,Io as pa,Xe as q,No as qa,gn as r,jo as ra,wt as s,$o as sa,fn as t,Go as ta,Rt as u,qo as ua,ze as v,Lo as va,Ze as w,Vn as wa,Oe as x,Bo as xa,zt as y,Fo as ya,Yr as z,Ho as za};//# sourceMappingURL=chunk-K2LZMRLN.js.map
|
|
72
|
+
//# sourceMappingURL=chunk-K2LZMRLN.js.map
|