@directive-run/ai 0.8.9 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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
package/dist/chunk-B4ATEGA2.cjs
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
'use strict';var core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils'),internals=require('@directive-run/core/internals');var wr=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"]),Pn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function In(o={}){let r=o.maxEvents??2e3,i=o.goToSnapshot;if(!Number.isFinite(r)||r<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 y=u.length-r;y>0&&u.splice(0,y);for(let S of f)try{S(w);}catch(_){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.error("[Directive DebugTimeline] Listener threw:",_ instanceof Error?_.message:_);}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(y=>y.timestamp>=b&&y.timestamp<=w)},forkFrom(b){let w=-1;for(let y=u.length-1;y>=0;y--)if(u[y].snapshotId!==null&&u[y].snapshotId<=b){w=u[y].id;break}if(w>=0){let y=u.length;for(let S=u.length-1;S>=0;S--)if(u[S].id<=w){y=S+1;break}u=u.slice(0,y);}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 _ of Object.keys(w))if(Pn.has(_))throw new Error(`[Directive DebugTimeline] Blocked key in import: ${_}`);let y=w;if(!Array.isArray(y.events))throw new Error("[Directive DebugTimeline] Missing events array");let S=[];for(let _ of y.events){if(!_||typeof _!="object")continue;for(let Q of Object.keys(_))if(Pn.has(Q))throw new Error(`[Directive DebugTimeline] Blocked key in event: ${Q}`);let I=_;typeof I.id=="number"&&typeof I.type=="string"&&wr.has(I.type)&&typeof I.timestamp=="number"&&S.push(_);}u=S.length>r?S.slice(-r):S,p=typeof y.nextId=="number"?y.nextId:S.length;},clear(){u=[],p=0;},subscribe(b){return f.add(b),()=>{f.delete(b);}},get length(){return u.length}}}function Nn(o,r){let i=new Map;return {name:"directive-ai-debug-timeline",onConstraintEvaluate(u,p){o.record({type:"constraint_evaluate",timestamp:Date.now(),snapshotId:r(),constraintId:u,fired:p});},onResolverStart(u,p){i.set(u,Date.now()),o.record({type:"resolver_start",timestamp:Date.now(),snapshotId:r(),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:r(),resolverId:u,durationMs:p?Date.now()-p:0});},onResolverError(u,p,f){let c=i.get(u);i.delete(u);let b=f instanceof Error?f.message:String(f);o.record({type:"resolver_error",timestamp:Date.now(),snapshotId:r(),resolverId:u,errorMessage:b,durationMs:c?Date.now()-c:0});}}}function Jt(o,r,i){return typeof o=="function"?{name:`${i}-guardrail-${r}`,fn:o,critical:true}:o}function Rr(o,r){let{backoff:i="exponential",baseDelayMs:u=100,maxDelayMs:p=5e3}=r,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 jn(o,r){return r?.aborted?Promise.reject(r.reason??new Error("Aborted")):new Promise((i,u)=>{if(!r){setTimeout(i,o);return}let p=()=>{clearTimeout(f),u(r.reason??new Error("Aborted"));},f=setTimeout(()=>{r.removeEventListener("abort",p),i();},o);r.addEventListener("abort",p,{once:true});})}async function Wt(o,r,i,u){let{retry:p}=o,f=Math.max(p?.attempts??1,1),c;for(let b=1;b<=f;b++)try{return await o.fn(r,i)}catch(w){if(c=w instanceof Error?w:new Error(String(w)),b<f){let y=Rr(b,p??{});await jn(y,u);}}return {passed:false,reason:`Guardrail "${o.name}" failed after ${f} attempt(s): ${c.message}`}}function Tr(o,r){let{backoff:i="exponential",baseDelayMs:u=1e3,maxDelayMs:p=3e4}=r,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 $n(o,r,i,u,p){let f=Math.max(p?.attempts??1,1),c=p?.isRetryable??(()=>true),b=p?.onRetry,w;for(let y=1;y<=f;y++)try{return await o(r,i,u)}catch(S){if(w=S instanceof Error?S:new Error(String(S)),y<f){let _=true;try{_=c(w);}catch{break}if(!_)break;let I=Tr(y,p??{});try{b?.(y,w,I);}catch{}await jn(I,u?.signal);}else break}throw w}var ln={successRate:.5,latency:.3,circuitState:.2};function Gn(o={}){let r=o.windowMs??6e4,i=o.maxNormalLatencyMs??5e3,u=o.maxEventsPerAgent??1e3,p={successRate:o.weights?.successRate??ln.successRate,latency:o.weights?.latency??ln.latency,circuitState:o.weights?.circuitState??ln.circuitState};if(!Number.isFinite(r)||r<=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 c=new Map,b=new Map,w=0,y=null,S=-1;function _(H){let $=c.get(H);return $||($=[],c.set(H,$)),$}function I(H,$){let de=$-r,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 $=c.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 $=_(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=_(H);de.push({success:true,latencyMs:$,timestamp:Date.now()}),I(de,Date.now()),w++;},recordFailure(H,$,de){let pe=_(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&&y)return y;let H=Object.create(null);for(let $ of c.keys())H[$]=oe($);return y=H,S=w,H},getHealthScore(H){return Q(H)},updateCircuitState(H,$){b.set(H,$),w++;},reset(){c.clear(),b.clear(),w++,y=null,S=-1;}}}var Ve=class extends Error{code;guardrailName;guardrailType;userMessage;agentName;constructor(r){super(r.message,{cause:r.cause}),this.name="GuardrailError",this.code=r.code,this.guardrailName=r.guardrailName,this.guardrailType=r.guardrailType,this.userMessage=r.userMessage??r.message,this.agentName=r.agentName,Object.defineProperty(this,"input",{value:r.input,enumerable:false,writable:false,configurable:false}),Object.defineProperty(this,"data",{value:r.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 qn(o){return o instanceof Ve}var Kt="__agent",bt="__approval",Vt="__conversation",Yt="__toolCalls",yt="__breakpoints";var Ee="__scratchpad",cn={facts:{[Kt]:core.t.object(),[bt]:core.t.object(),[Vt]:core.t.array(),[Yt]:core.t.array(),[yt]:core.t.object()},derivations:{},events:{},requirements:{}};function At(o){return adapterUtils.getBridgeFact(o,Kt)}function Ye(o,r){adapterUtils.setBridgeFact(o,Kt,r);}function kt(o){return adapterUtils.getBridgeFact(o,bt)}function Xe(o,r){adapterUtils.setBridgeFact(o,bt,r);}function dn(o){return adapterUtils.getBridgeFact(o,Vt)}function vt(o,r){adapterUtils.setBridgeFact(o,Vt,r);}function pn(o){return adapterUtils.getBridgeFact(o,Yt)}function wt(o,r){adapterUtils.setBridgeFact(o,Yt,r);}function ze(o){return adapterUtils.getBridgeFact(o,yt)}function Ze(o,r){adapterUtils.setBridgeFact(o,yt,r);}function Oe(o){return {agent:At(o),approval:kt(o),conversation:dn(o),toolCalls:pn(o)}}function Xt(o){let r=Object.create(null);for(let[i,u]of Object.entries(o))r[i]={priority:u.priority??0,when:p=>{let f=Oe(p),c={...p,...f};return u.when(c)},require:p=>{let f=Oe(p),c={...p,...f};return typeof u.require=="function"?u.require(c):u.require}};return r}function Ur(o,r,i){let u=Object.create(null);for(let[p,f]of Object.entries(o))u[p]={requirement:f.requirement,key:f.key,resolve:async(c,b)=>{let w=Oe(b.facts),S={facts:{...b.facts,...w},runAgent:async(_,I,Q)=>r(_,I,Oe(i()),Q),signal:b.signal};await f.resolve(c,S);}};return u}var Ct=class extends Error{iterations;history;lastResult;totalTokens;constructor(r){super(`[Directive Reflection] Exhausted ${r.iterations} iterations without passing evaluation. Last feedback: ${r.history[r.history.length-1]?.feedback??"(none)"}`),this.name="ReflectionExhaustedError",this.iterations=r.iterations,this.history=r.history,this.lastResult=r.lastResult,this.totalTokens=r.totalTokens;}};function Sr(o,r,i){return `${o}
|
|
2
|
-
|
|
3
|
-
Feedback on your previous response:
|
|
4
|
-
${r}
|
|
5
|
-
|
|
6
|
-
Please improve your response.`}function Wr(o,r){let i=r.maxIterations??2,u=r.buildRetryInput??Sr,p=r.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,c,b)=>{let w=[],y=c,S=0,_=null;for(let I=0;I<i;I++){let Q=Date.now(),oe=await o(f,y,b);_=oe,S+=oe.totalTokens;let H={input:c,iteration:I,result:oe,history:[...w]},$=await r.evaluate(oe.output,H);w.push($);let de=Date.now()-Q;try{r.onIteration?.({iteration:I,passed:$.passed,feedback:$.feedback,score:$.score,durationMs:de});}catch{}if($.passed)return {...oe,totalTokens:S};if(r.budgetThreshold!==void 0&&S>=r.budgetThreshold)break;I<i-1&&$.feedback&&(y=u(c,$.feedback,I));}if(p==="throw")throw new Ct({iterations:i,history:w,lastResult:_,totalTokens:S});return {..._,totalTokens:S}}}var Dt=200,xr=0;function Ln(){return `bp_${Date.now().toString(36)}_${(++xr).toString(36)}`}function Bn(o,r,i){for(let u of o)if(u.type===r){if(!u.when)return u;try{if(u.when(i))return u}catch{}}return null}function Ot(){return {pending:[],resolved:[],cancelled:[]}}var Fn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Qe(){let o=Date.now().toString(36),r=crypto.randomUUID().slice(0,8);return `ckpt_${o}_${r}`}function gn(o){if(!o||typeof o!="object")return false;for(let u of Object.keys(o))if(Fn.has(u))return false;let r=o;if(r.version!==1||typeof r.id!="string"||r.id.length===0||typeof r.createdAt!="string"||typeof r.systemExport!="string"||r.timelineExport!==null&&typeof r.timelineExport!="string"||!r.localState||typeof r.localState!="object")return false;for(let u of Object.keys(r.localState))if(Fn.has(u))return false;let i=r.localState;return !(i.type!=="single"&&i.type!=="multi"||r.orchestratorType!=="single"&&r.orchestratorType!=="multi")}var Hn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(r){if(this.maxCheckpoints=r?.maxCheckpoints??100,this.retentionMs=r?.retentionMs??Number.POSITIVE_INFINITY,this.preserveLabeled=r?.preserveLabeled??false,!Number.isFinite(this.maxCheckpoints)||this.maxCheckpoints<1)throw new Error(`[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`)}async save(r){if(!gn(r))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let i=this.order.indexOf(r.id);return i>=0&&this.order.splice(i,1),this.store.set(r.id,r),this.order.push(r.id),r.id}async load(r){return this.store.get(r)??null}async list(){return this.order.map(r=>{let i=this.store.get(r);return {id:i.id,label:i.label,createdAt:i.createdAt}})}async delete(r){if(!this.store.has(r))return false;this.store.delete(r);let i=this.order.indexOf(r);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 r=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()>=r)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 r=this.order.shift();return r?(this.store.delete(r),true):false}};var fn=class{buffer=[];maxSize;strategy;pullWaiters=[];pushWaiters=[];closed=false;droppedCount=0;constructor(r="buffer",i=1e3){this.strategy=r,this.maxSize=i;}async push(r){if(this.closed)return false;let i=this.pullWaiters.shift();if(i)return i(r),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(r),true}async pull(){let r=this.pushWaiters.shift();return r&&r(),this.buffer.length>0?this.buffer.shift():this.closed?null:new Promise(i=>{this.pullWaiters.push(i);})}close(){this.closed=true;for(let r of this.pullWaiters)r(null);this.pullWaiters=[];for(let r of this.pushWaiters)r();this.pushWaiters=[];}getDroppedCount(){return this.droppedCount}};function Qr(o,r={}){let{streamingGuardrails:i=[]}=r;return (u,p,f={})=>{let{signal:c,backpressure:b="buffer",bufferSize:w=1e3,guardrailCheckInterval:y=50,stopOnGuardrail:S=true}=f;if(y<=0||!Number.isFinite(y))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${y}`);let _=new fn(b,w),I=new AbortController,Q="",oe=0,H=false,$=Date.now(),de;c&&(de=()=>I.abort(),c.addEventListener("abort",de));let pe=()=>{de&&c&&c.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 _.push(Re),De&&(typeof S=="function"?S:()=>S)(Re)&&(H=!0,I.abort()),Re}}catch{}return null}let Ie=(async()=>{await _.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 _.push({type:"token",data:Re,tokenCount:oe}),oe%y===0&&await Me());},onToolStart:async(Re,Le,We)=>{await _.push({type:"progress",phase:"tool_calling",message:`Calling ${Re}`}),await _.push({type:"tool_start",tool:Re,toolCallId:Le,arguments:We});},onToolEnd:async(Re,Le,We)=>{await _.push({type:"tool_end",tool:Re,toolCallId:Le,result:We}),await _.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async Re=>{await _.push({type:"message",message:Re});}});await Me();let se=Date.now()-$,De=_.getDroppedCount();return await _.push({type:"done",totalTokens:V.totalTokens,duration:se,droppedTokens:De}),_.close(),V}catch(V){let se={type:"error",error:V instanceof Error?V:new Error(String(V)),partialOutput:Q||void 0};throw await _.push(se),_.close(),V}finally{pe();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let V=await _.pull();return V===null?{done:true,value:void 0}:{done:false,value:V}}}}},result:Ie,abort:()=>I.abort()}}}function eo(o){let{checkFn:r,threshold:i=.8,stopOnFail:u=true}=o;return {name:"toxicity-streaming",stopOnFail:u,async check(p){let f=await r(p);return f>i?{passed:false,reason:`Toxicity score ${f.toFixed(2)} exceeds threshold ${i}`,severity:"critical"}:{passed:true}}}}function to(o){let{maxTokens:r,warnAt:i,stopOnFail:u=true}=o,p=false;return {name:"length-streaming",stopOnFail:u,check(f,c){return c>=r?{passed:false,reason:`Output exceeded maximum length of ${r} tokens`,severity:"error"}:i&&c>=i&&!p?(p=true,{passed:true,warning:`Approaching maximum length: ${c}/${r} tokens`,severity:"warning"}):{passed:true}}}}function no(o){let{patterns:r,stopOnFail:i=true}=o;return {name:"pattern-streaming",stopOnFail:i,check(u){for(let{regex:p,name:f}of r)if(p.lastIndex=0,p.test(u))return {passed:false,reason:`Detected ${f} pattern in output`,severity:"error"};return {passed:true}}}}function ro(o,r={}){let{name:i="combined-streaming",stopOnFirstFail:u=true}=r;return {name:i,stopOnFail:u,async check(p,f){let c=[];for(let b of o){let w=await b.check(p,f);if(!w.passed){if(u)return {...w,reason:`[${b.name}] ${w.reason}`};c.push(`[${b.name}] ${w.reason??"failed"}`);}}return c.length>0?{passed:false,reason:c.join("; ")}:{passed:true}}}}function oo(o,r,i={}){let{minTokens:u=0,stopOnFail:p=true}=i;return {name:o,stopOnFail:p,async check(f,c){if(c<u)return {passed:true};let b=await r({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 so(o){let r="";for await(let i of o)i.type==="token"&&(r+=i.data);return r}async function*ao(o,r){for await(let i of o)await r(i),yield i;}async function*io(o,r){let i=new Set(r);for await(let u of o)i.has(u.type)&&(yield u);}async function*uo(o,r){for await(let i of o)yield await r(i);}var Er=1e4;function Un(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 r=[],i=[],u=o.length,p=false,f=0;function c(y){if(p)return;let S=i.shift();if(S){S(y);return}r.length<Er?r.push(y):f++;}function b(){if(u--,u<=0){p=true;for(let y of i)y(null);i.length=0;}}for(let y of o)(async()=>{try{for await(let S of y.stream)c({chunk:S,agentId:y.agentId});}catch(S){c({chunk:{type:"error",error:S instanceof Error?S:new Error(String(S))},agentId:y.agentId});}finally{b();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return r.length>0?{done:false,value:r.shift()}:p?{done:true,value:void 0}:new Promise(y=>{i.push(S=>{y(S===null?{done:true,value:void 0}:{done:false,value:S});});})},return(){p=true,r.length=0;for(let y of i)y(null);return i.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>f}}function _t(o){if(o.length>1048576)throw new Error(`[Directive] Output too large for JSON extraction (${o.length} chars, max 1048576).`);let r=o.trim();try{return JSON.parse(r)}catch{}let i=r.indexOf("{"),u=r.indexOf("["),p,f,c;if(i===-1&&u===-1)throw new Error("[Directive] No JSON object or array found in output");i===-1?(p=u,f="[",c="]"):u===-1?(p=i,f="{",c="}"):(p=Math.min(i,u),f=p===i?"{":"[",c=p===i?"}":"]");let b=0,w=false,y=false;for(let S=p;S<r.length;S++){let _=r[S];if(y){y=false;continue}if(_==="\\"){y=true;continue}if(_==='"'){w=!w;continue}if(!w){if(_===f)b++;else if(_===c&&(b--,b===0)){let I=r.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 Ar(o){return o?o.issues&&o.issues.length>0?o.issues.map(r=>r.message).join("; "):o.message??"Validation failed":"Validation failed"}function Jn(o,r){let{schema:i,maxRetries:u=2,extractJson:p=_t,schemaDescription:f}=r;if(!Number.isFinite(u)||u<0)throw new Error("[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.");let c=f??i.description??"the specified JSON schema";return async(b,w,y)=>{let S={...b,instructions:(b.instructions??"")+`
|
|
7
|
-
|
|
8
|
-
IMPORTANT: Respond with valid JSON matching `+c+". Output ONLY the JSON object, no additional text or markdown formatting."},_,I;for(let Q=0;Q<=u;Q++){let oe=Q===0?w:`${w}
|
|
9
|
-
|
|
10
|
-
Your previous response was not valid JSON. Error: ${I}
|
|
11
|
-
Please try again with valid JSON only.`,H=await o(S,oe,y);_=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=Ar(pe.error);}catch(de){I=de instanceof Error?de.message:String(de);}}throw new mn(`[Directive] Failed to get valid structured output after ${u+1} attempts: ${I}`,_)}}var mn=class extends Error{lastResult;constructor(r,i){super(r),this.name="StructuredOutputError",this.lastResult=i;}};function hn(o,r){if(Object.is(o,r))return true;if(typeof o!=typeof r||o===null||r===null||typeof o!="object")return false;if(Array.isArray(o)){if(!Array.isArray(r)||o.length!==r.length)return false;for(let c=0;c<o.length;c++)if(o[c]!==r[c])return false;return true}let i=o,u=r,p=Object.keys(i),f=Object.keys(u);if(p.length!==f.length)return false;for(let c of p)if(i[c]!==u[c])return false;return true}var _e=class{count;maxPermits;queue=[];constructor(r){if(r<1||!Number.isFinite(r))throw new Error(`[Directive Semaphore] Invalid max permits: ${r}. Must be a finite number >= 1.`);this.maxPermits=r,this.count=r;}createReleaseFn(){let r=false;return ()=>{r||(r=true,this.release());}}async acquire(r){if(r?.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:c=>{p&&r&&r.removeEventListener("abort",p),i(c);},reject:u};this.queue.push(f),r&&(p=()=>{let c=this.queue.indexOf(f);c>=0&&(this.queue.splice(c,1),u(new Error("[Directive Semaphore] Aborted while waiting for permit")));},r.addEventListener("abort",p,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let r=this.queue.shift();r&&(this.count--,r.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let r=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(r);this.count=this.maxPermits;}};function ut(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 Cr(o){let r=ut(o),i=o.stepsTotal??null;switch(o.type){case "sequential":{let u=o.results.reduce((c,b)=>c+b.totalTokens,0),p=o.results.length>0?u/o.results.length:0,f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:p>0&&f!=null?Math.round(p*f):null,estimatedStepsRemaining:f}}case "supervisor":{let u=o.workerResults.reduce((f,c)=>f+c.totalTokens,0),p=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "reflect":{let u=o.history.reduce((f,c)=>f+c.producerTokens+c.evaluatorTokens,0),p=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "debate":{let u=o.tokensConsumed,p=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,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,y)=>w+y.totalTokens,0),c=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(c*b):0,estimatedStepsRemaining:b}}case "goal":{let u=Object.values(o.nodeOutputs).reduce((f,c)=>f+c.totalTokens,0),p=o.lastSatisfaction;return {percentage:Math.round(p*100),stepsCompleted:r,stepsTotal:i??null,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:o.stepMetrics.length>0?Dr(o):null}}}}function Dr(o){let r=o.stepMetrics;if(r.length<2)return null;let i=1-o.lastSatisfaction;if(i<=0)return 0;let p=r.reduce((f,c)=>f+Math.max(0,c.satisfactionDelta),0)/r.length;return p<=0?null:Math.ceil(i/p)}function Or(o,r){if(o.type!==r.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${o.type} vs ${r.type}`);let i=p=>{switch(p.type){case "sequential":return p.results.reduce((f,c)=>f+c.totalTokens,0);case "supervisor":return p.workerResults.reduce((f,c)=>f+c.totalTokens,0);case "reflect":return p.history.reduce((f,c)=>f+c.producerTokens+c.evaluatorTokens,0);case "debate":return p.tokensConsumed;case "dag":return Object.values(p.nodeResults).reduce((f,c)=>f+c.totalTokens,0);case "goal":return Object.values(p.nodeOutputs).reduce((f,c)=>f+c.totalTokens,0)}},u={patternType:o.type,stepDelta:ut(r)-ut(o),tokensDelta:i(r)-i(o)};if(o.type==="goal"&&r.type==="goal"){let p=new Set(Object.keys(o.facts)),f=new Set(Object.keys(r.facts)),c=[],b=[],w=[];for(let y of f)p.has(y)?JSON.stringify(o.facts[y])!==JSON.stringify(r.facts[y])&&w.push({key:y,before:o.facts[y],after:r.facts[y]}):c.push(y);for(let y of p)f.has(y)||b.push(y);u.facts={added:c,removed:b,changed:w};}if(o.type==="dag"&&r.type==="dag"){let p=new Set(Object.entries(o.statuses).filter(([,f])=>f==="completed").map(([f])=>f));u.nodesCompleted=Object.entries(r.statuses).filter(([f,c])=>c==="completed"&&!p.has(f)).map(([f])=>f);}if(o.type==="goal"&&r.type==="goal"){let p=new Set(o.completedNodes);u.nodesCompleted=r.completedNodes.filter(f=>!p.has(f));}return u}async function _r(o,r,i){let{createMultiAgentOrchestrator:u}=await import('./multi-agent-orchestrator-QWJNM4EZ.cjs'),p=await r.load(i);if(!p)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let f=structuredClone(p),c=u({...o,checkpointStore:r});return c.restore(f),c}function bn(o,r){let i=Object.keys(r);for(let[w,y]of Object.entries(r))for(let S of y.deps??[])if(!r[S])throw new Error(`[Directive MultiAgent] DAG pattern "${o}": node "${w}" depends on unknown node "${S}"`);if(!i.some(w=>{let y=r[w]?.deps;return !y||y.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,y]of Object.entries(r)){p[w]=(y.deps??[]).length;for(let S of y.deps??[])f[S].push(w);}let c=[];for(let w of i)p[w]===0&&c.push(w);let b=0;for(;c.length>0;){let w=c.shift();b++;for(let y of f[w]??[])p[y]--,p[y]===0&&c.push(y);}if(b!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${o}": cycle detected. Visited ${b}/${i.length} nodes.`)}function go(o,r,i){return {type:"parallel",handlers:o,merge:r,...i}}function fo(o,r){return {type:"sequential",handlers:o,...r}}function mo(o,r,i){return {type:"supervisor",supervisor:o,workers:r,...i}}function ho(o,r,i){return {type:"dag",nodes:o,merge:r??(u=>u.outputs),...i}}function bo(o,r,i){return {type:"reflect",handler:o,evaluator:r,...i}}function yo(o,r){return {type:"race",handlers:o,...r}}function ko(o,r,i){return {type:"goal",nodes:o,when:r,...i}}function vo(){return {select:o=>o}}function wo(o){let r=o?.topN??3;return {select:(i,u)=>[...i].sort((f,c)=>{let b=u[f]?.avgSatisfactionDelta??0;return (u[c]?.avgSatisfactionDelta??0)-b}).slice(0,r)}}function Ro(){return {select:(o,r)=>[...o].sort((u,p)=>{let f=r[u],c=r[p];if(!f||f.runs===0)return -1;if(!c||c.runs===0)return 1;let b=f.avgSatisfactionDelta>0?f.tokens/f.runs/f.avgSatisfactionDelta:Number.POSITIVE_INFINITY,w=c.avgSatisfactionDelta>0?c.tokens/c.runs/c.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return b-w})}}function So(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 r=Object.create(null);for(let[i,u]of Object.entries(o.nodes))r[i]={handler:u.handler,deps:u.deps,timeout:u.timeout,priority:u.priority};return {type:"dag",nodes:r,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 r=Object.create(null);for(let[i,u]of Object.entries(o.nodes))r[i]={handler:u.handler,produces:u.produces,requires:u.requires,allowRerun:u.allowRerun,priority:u.priority};return {type:"goal",nodes:r,maxSteps:o.maxSteps,timeout:o.timeout}}}}var Mr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function xo(o,r){if(!o||typeof o!="object"||!Mr.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,...r}}function Do(o,r,i,u){return {when:o,require:p=>{let f=typeof r=="function"?r(p):r,c=typeof i=="function"?i(p):i;return {type:"RUN_AGENT",agent:f,input:c}},priority:u}}function Oo(o,r,i){return {type:"RUN_AGENT",agent:o,input:r,context:i}}function _o(o,r=`
|
|
12
|
-
|
|
13
|
-
`){return o.map(i=>typeof i.output=="string"?i.output:internals.safeStringify(i.output)).join(r)}function Mo(o,r){if(o.length===0)throw new Error("[Directive MultiAgent] No results to pick from");return o.reduce((i,u)=>r(u)>r(i)?u:i)}function Po(o){return o.map(r=>r.output)}function Io(o){return o.reduce((r,i)=>r+i.totalTokens,0)}function No(...o){if(o.length===0)throw new Error("[Directive MultiAgent] composePatterns requires at least one pattern");return async(r,i)=>{let u=i,p;for(let f of o){switch(f.type){case "parallel":{let c=f,b=c.handlers.map(()=>u);p=await r.runParallel(c.handlers,b,c.merge,{minSuccess:c.minSuccess,timeout:c.timeout});break}case "sequential":{let c=f,b=await r.runSequential(c.handlers,u,{transform:c.transform}),w=b[b.length-1];p=c.extract?c.extract(w?.output):w?.output;break}case "supervisor":{let c=f,b=c.maxRounds??5;if(b<1||!Number.isFinite(b))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let w=[],y=await r.runAgent(c.supervisor,u);for(let S=0;S<b;S++){let _=y.output,I;if(typeof _=="string")try{I=JSON.parse(_);}catch{try{let oe=_.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),H=_t(oe);if(H&&typeof H=="object"&&"action"in H)I=H;else break}catch{break}}else if(_&&typeof _=="object"&&"action"in _)I=_;else break;if(I.action==="complete"||!I.worker||!c.workers.includes(I.worker))break;let Q=await r.runAgent(I.worker,I.workerInput??"");w.push(Q),y=await r.runAgent(c.supervisor,`Worker ${I.worker} completed with result: ${internals.safeStringify(Q.output)}`);}p=c.extract?c.extract(y.output,w):y.output;break}case "dag":{let c=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(c.nodes);for(let y of w){let S=c.nodes[y];b.statuses[y]="running";try{let _=u;if(S.transform)_=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]);_=JSON.stringify(Q);}let I=await r.runAgent(S.handler,_);b.outputs[y]=I.output,b.results[y]=I,b.statuses[y]="completed";}catch(_){if(b.statuses[y]="error",b.errors[y]=_ instanceof Error?_.message:String(_),c.onNodeError==="fail")throw _}}p=await c.merge(b);break}case "reflect":{let c=f,b=c.maxIterations??2,w=c.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"}}),y=c.buildRetryInput??((I,Q)=>`${I}
|
|
14
|
-
|
|
15
|
-
Feedback on your previous response:
|
|
16
|
-
${Q}
|
|
17
|
-
|
|
18
|
-
Please improve your response.`),S=u,_;for(let I=0;I<b;I++){_=(await r.runAgent(c.handler,S)).output;let oe=typeof _=="string"?_:JSON.stringify(_),H=await r.runAgent(c.evaluator,oe),$=w(H.output);if($.passed)break;I<b-1&&$.feedback&&(S=y(u,$.feedback,I));}p=c.extract?c.extract(_):_;break}case "race":{let c=f;p=(await r.runRace(c.handlers,u,{extract:c.extract,timeout:c.timeout})).result;break}case "debate":{let c=f;p=(await r.runDebate(c.handlers,c.evaluator,u,{maxRounds:c.maxRounds,extract:c.extract,parseJudgement:c.parseJudgement,signal:c.signal,timeout:c.timeout})).result;break}case "goal":{let c=f,b=typeof u=="string"?{input:u}:(()=>{try{return JSON.parse(u)}catch{return {input:u}}})();p=(await r.runGoal(c.nodes,b,c.when,{satisfaction:c.satisfaction,maxSteps:c.maxSteps,extract:c.extract,timeout:c.timeout,signal:c.signal,selectionStrategy:c.selectionStrategy,relaxation:c.relaxation,onStep:c.onStep,onStall:c.onStall})).result;break}default:throw new Error(`[Directive MultiAgent] composePatterns: unknown pattern type "${f.type}"`)}p!==void 0&&(u=typeof p=="string"?p:internals.safeStringify(p));}return p}}function Wn(o,r){return Object.entries(o).filter(([,i])=>{let u=i.capabilities??[];return r.every(p=>u.includes(p))}).map(([i])=>i)}function jo(o,r,i,u){let{priority:p,select:f}=u??{},c=[],b=0,w=-1;return {when:y=>{let S=r(y);return c=Wn(o,S),b++,c.length>0},require:y=>{let S=b!==w&&c.length>0?(w=b,c):Wn(o,r(y));if(S.length===0)throw new Error(`[Directive MultiAgent] No agent matches capabilities: ${r(y).join(", ")}`);return {type:"RUN_AGENT",agent:f?f(S,o):S[0],input:i(y)}},priority:p}}var Kn=false;function $o(o){let{when:r,agent:i,input:u,priority:p,context:f,options:c}=o;c&&!Kn&&(Kn=true,console.warn("[Directive MultiAgent] spawnOnCondition `options` is deprecated. Use top-level `priority` and `context` instead."));let b=p??c?.priority,w=f??c?.context;return {when:r,require:y=>({type:"RUN_AGENT",agent:i,input:u(y),context:w}),priority:b}}function Go(o){let{handlers:r,evaluator:i,maxRounds:u,extract:p,parseJudgement:f,signal:c,timeout:b}=o;if(r.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:r,evaluator:i,maxRounds:u,extract:p,parseJudgement:f,signal:c,timeout:b}}async function qo(o,r,i){return o.runDebate(r.handlers,r.evaluator,i,{maxRounds:r.maxRounds,extract:r.extract,parseJudgement:r.parseJudgement,signal:r.signal,timeout:r.timeout})}function Lo(o,r,i){let u,p=0,f=-1;return {when:c=>{let w=c.__derived?.[o];return u=w,p++,r(w)},require:c=>{let b=p!==f?(f=p,u):c.__derived?.[o];return {type:"RUN_AGENT",agent:i.agent,input:i.input(b),context:i.context}},priority:i.priority}}function Bo(o,r){let{agent:i,input:u,priority:p,context:f}=r;return {when:o,require:c=>({type:"RUN_AGENT",agent:i,input:u(c,0),context:f}),priority:p}}var Nr=adapterUtils.requirementGuard("RUN_AGENT");function rs(o){let{runner:r,agents:i,patterns:u={},onHandoff:p,onHandoffComplete:f,maxHandoffHistory:c=1e3,debug:b=false,guardrails:w={},hooks:y={},memory:S,agentRetry:_,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:Yn={}}=o,re=typeof b=="object"?true:!!b,Mt=5e3,Y={...i},ee={...Yn},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:
|
|
19
|
-
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
20
|
-
- 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 Pt=new Set(["__coord","__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);for(let e of Object.keys(Y))if(Pt.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);for(let[e,t]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(Pt.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(t.timeout!==void 0&&(!Number.isFinite(t.timeout)||t.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(t.maxConcurrent!==void 0&&(!Number.isFinite(t.maxConcurrent)||t.maxConcurrent<1||!Number.isInteger(t.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(t.retry){let{attempts:s,delayMs:n}=t.retry;if(!Number.isFinite(s)||s<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(n!==void 0&&(!Number.isFinite(n)||n<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}}for(let[e,t]of Object.entries(ee))Fe.set(e,new _e(t.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 vn=new Set([...Object.keys(Y),...Object.keys(ee)]),zt=[];for(let[e,t]of Object.entries(u)){let s=[];switch(t.type){case "parallel":s.push(...t.handlers);break;case "sequential":s.push(...t.handlers);break;case "supervisor":s.push(t.supervisor,...t.workers);break;case "dag":for(let n of Object.values(t.nodes))s.push(n.handler);break;case "reflect":s.push(t.handler,t.evaluator);break;case "race":s.push(...t.handlers);break;case "debate":s.push(...t.handlers,t.evaluator);break}for(let n of s)vn.has(n)||zt.push({patternId:e,agentId:n});}if(zt.length>0){let e=zt.map(({patternId:t,agentId:s})=>` - Pattern "${t}" references unknown agent "${s}"`).join(`
|
|
21
|
-
`);throw new Error(`[Directive MultiAgent] Pattern validation failed. The following agents are not registered:
|
|
22
|
-
${e}
|
|
23
|
-
|
|
24
|
-
Registered agents: ${[...vn].join(", ")||"(none)"}`)}for(let[e,t]of Object.entries(u))t.type==="dag"&&bn(e,t.nodes);let P=null,wn=null;re&&(P=In({goToSnapshot:e=>{try{z.history?.goTo?.(e);}catch{}}}));let Ce=null,He=null;V&&(Ce=Gn(V.healthMonitor),V.selectionStrategy==="round-robin"&&(He=new Map));function K(e,t){try{y[e]?.(t);}catch(s){re&&console.debug(`[Directive MultiAgent] hooks.${e} threw:`,s);}}let Zt={__globalTokens:core.t.number(),__status:core.t.string(),__handoffs:core.t.array(),__handoffResults:core.t.array(),__budgetWarningFired:core.t.boolean()};Be&&(Zt[Ee]=core.t.object()),We&&Object.keys(We).length>0&&(Zt.__derived=core.t.object());let Xn={facts:Zt,derivations:{},events:{},requirements:{}},Rn=Xt(de);I&&(Rn.__budgetLimit={priority:100,when:e=>adapterUtils.getBridgeFact(e,"__globalTokens")>I,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let It=Object.create(null);for(let[e,t]of Object.entries(pe))It[e]={requirement:t.requirement,key:t.key,resolve:async(s,n)=>{let a=Oe(n.facts),l={facts:{...n.facts,...a},runAgent:async(g,h,x)=>r(g,h,x),signal:n.signal};return t.resolve(s,l)}};It.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async()=>{Ue="paused",re&&console.debug("[Directive MultiAgent] Budget exceeded \u2014 all agents paused");}},It.__runAgent={requirement:Nr,resolve:async e=>{await be(e.agent,e.input);}};let zn=core.createModule("__coord",{schema:Xn,init:e=>{adapterUtils.setBridgeFact(e,"__globalTokens",0),adapterUtils.setBridgeFact(e,"__status","idle"),adapterUtils.setBridgeFact(e,"__handoffs",[]),adapterUtils.setBridgeFact(e,"__handoffResults",[]),adapterUtils.setBridgeFact(e,"__budgetWarningFired",false),Be&&adapterUtils.setBridgeFact(e,Ee,{...Be.init});},constraints:Rn,resolvers:It}),Qt=Object.create(null);Qt.__coord=zn;for(let[e,t]of Object.entries(Y)){let s=t.constraints?Xt(t.constraints):{},n=Object.create(null);if(t.resolvers)for(let[a,d]of Object.entries(t.resolvers))n[a]={requirement:d.requirement,key:d.key,resolve:async(l,g)=>{let h=Oe(g.facts),E={facts:{...g.facts,...h},runAgent:async(M,O,L)=>r(M,O,L),signal:g.signal};return d.resolve(l,E)}};Qt[e]=core.createModule(e,{schema:cn,init:a=>{Ye(a,{status:"idle",currentAgent:t.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(a,{pending:[],approved:[],rejected:[]}),vt(a,[]),wt(a,[]),Ze(a,Ot());},constraints:s,resolvers:Object.keys(n).length>0?n:void 0});}let Zn=adapterUtils.createCallbackPlugin("directive-multi-agent-callbacks",{}),Tn=[...Q,Zn];re&&P&&(wn=Nn(P,()=>{try{return z.history?.currentIndex??null}catch{return null}}),Tn.push(wn));let z=core.createSystem({modules:Qt,plugins:Tn,history:re?true:void 0});z.start();let Sn=500,xn=200,nt=0,Ue="idle",en=false,Nt=0,Ne=null;function te(){if(en)throw new Error("[Directive MultiAgent] Orchestrator has been destroyed")}let Je=new Map;for(let[e,t]of Object.entries(Y))Je.set(e,new _e(t.maxConcurrent??1));let xe=Object.create(null);for(let e of Object.keys(Y))xe[e]={status:"idle",runCount:0,totalTokens:0};let Qn=c,je=[],rt=[],jt=0;function er(e){for(rt.push(e);rt.length>Qn;)rt.shift();}let ct=new Map,$t=new Set;function ot(){for(let e of $t)e();}let dt=Object.create(null),Gt=new Set;function tr(){let e=Object.create(null);for(let[n,a]of Object.entries(xe))e[n]={status:a.status,lastInput:a.lastInput,lastOutput:a.lastOutput,lastError:a.lastError,runCount:a.runCount,totalTokens:a.totalTokens};let t=fe("__coord"),s={agents:e,coordinator:{globalTokens:nt,status:Ue}};return Be&&t&&(s.scratchpad=adapterUtils.getBridgeFact(t,Ee)??{}),s}function $e(){if(!We)return;let e=tr(),t=[],s=[];z.batch(()=>{for(let[a,d]of Object.entries(We))try{let l=d(e),g=dt[a],h=!hn(l,g);dt[a]=l,h&&t.push({derivId:a,newValue:l});}catch(l){s.push({derivId:a,derivError:l});}let n=fe("__coord");n&&adapterUtils.setBridgeFact(n,"__derived",{...dt});});for(let{derivId:n,newValue:a}of t){P&&P.record({type:"derivation_update",timestamp:Date.now(),snapshotId:null,derivationId:n,valueType:typeof a}),K("onDerivationUpdate",{derivationId:n,value:a,timestamp:Date.now()});for(let d of Gt)try{d(n,a);}catch{}}for(let{derivId:n,derivError:a}of s)re&&console.warn(`[Directive MultiAgent] Derivation "${n}" threw:`,a),K("onDerivationError",{derivationId:n,error:a instanceof Error?a:new Error(String(a)),timestamp:Date.now()});}let qt=new Set,pt=new Map,tn=Be?{get(e){let t=fe("__coord"),s=adapterUtils.getBridgeFact(t,Ee);if(!(s==null||!Object.hasOwn(s,e)))return s[e]},set(e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let s=fe("__coord"),n=[e];z.batch(()=>{let a=adapterUtils.getBridgeFact(s,Ee)??{};adapterUtils.setBridgeFact(s,Ee,{...a,[e]:t});}),nn(n,e,t),$e();},has(e){let t=fe("__coord"),s=adapterUtils.getBridgeFact(t,Ee);return s!=null&&Object.hasOwn(s,e)},delete(e){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let t=fe("__coord");z.batch(()=>{let s=adapterUtils.getBridgeFact(t,Ee)??{},{[e]:n,...a}=s;adapterUtils.setBridgeFact(t,Ee,a);}),nn([e],e,void 0),$e();},update(e){let t=Object.create(null);for(let a of Object.keys(e))a==="__proto__"||a==="constructor"||a==="prototype"||(t[a]=e[a]);let s=fe("__coord"),n=Object.keys(t);if(n.length!==0){z.batch(()=>{let a=adapterUtils.getBridgeFact(s,Ee)??{};adapterUtils.setBridgeFact(s,Ee,{...a,...t});});for(let[a,d]of Object.entries(t))nn(n,a,d);$e();}},getAll(){let e=fe("__coord");return {...adapterUtils.getBridgeFact(e,Ee)??{}}},subscribe(e,t){for(let s of e)pt.has(s)||pt.set(s,new Set),pt.get(s).add(t);return ()=>{for(let s of e)pt.get(s)?.delete(t);}},onChange(e){return qt.add(e),()=>{qt.delete(e);}},reset(){if(!Be)return;let e=fe("__coord");z.batch(()=>{adapterUtils.setBridgeFact(e,Ee,{...Be.init});});}}:null;function nn(e,t,s){let n=pt.get(t);if(n)for(let a of n)try{a(t,s);}catch{}for(let a of qt)try{a(t,s);}catch{}P&&t===e[e.length-1]&&P.record({type:"scratchpad_update",timestamp:Date.now(),snapshotId:null,keys:e}),t===e[e.length-1]&&K("onScratchpadUpdate",{keys:e,timestamp:Date.now()});}let gt=new Map,Rt=new Map;function nr(e,t,s){return new Promise((n,a)=>{let d=null,l=false,g,h=fe(e),x=()=>{l||(l=true,d&&(clearTimeout(d),d=null),g&&s&&s.removeEventListener("abort",g),E());},E=z.subscribe([`${e}.${yt}`],()=>{let M=ze(h);if(M.resolved.includes(t)){x();let O=gt.get(t)??null;gt.delete(t),n(O);}else if(M.cancelled.includes(t)){x(),gt.delete(t);let O=Rt.get(t);Rt.delete(t),a(new Error(O?`[Directive MultiAgent] Breakpoint ${t} cancelled: ${O}`:`[Directive MultiAgent] Breakpoint ${t} cancelled`));}});if(s){if(g=()=>{x(),a(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${t}`));},s.aborted){x(),a(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${t}`));return}s.addEventListener("abort",g,{once:true});}d=setTimeout(()=>{x(),gt.delete(t),Rt.delete(t),a(new Error(`[Directive MultiAgent] Breakpoint timeout: ${t} not resolved within ${Math.round(Le/1e3)}s`));},Le);})}async function st(e,t,s,n,a,d){if(De.length===0)return {input:n,skip:false};let l=fe(t),g={agentId:t,agentName:s,input:n,state:Oe(l),breakpointType:e,patternId:d?.patternId,handoff:d?.handoff},h=Bn(De,e,g);if(!h)return {input:n,skip:false};let x=Ln(),E={id:x,type:e,agentId:t,input:n,label:h.label,requestedAt:Date.now()};z.batch(()=>{let O=ze(l);Ze(l,{...O,pending:[...O.pending,E]});});try{Re?.(E);}catch{}try{y.onBreakpoint?.(E);}catch{}P&&P.record({type:"breakpoint_hit",timestamp:Date.now(),agentId:t,snapshotId:null,breakpointId:x,breakpointType:e,label:h.label});let M=await nr(t,x,a);return P&&P.record({type:"breakpoint_resumed",timestamp:Date.now(),agentId:t,snapshotId:null,breakpointId:x,modified:!!M?.input,skipped:!!M?.skip}),{input:M?.input??n,skip:M?.skip??false}}function fe(e){return z.facts[e]}function rr(e,t,s){return new Promise((n,a)=>{let d=null,l=false,g,h=fe(e),x=()=>{l||(l=true,d&&(clearTimeout(d),d=null),g&&s&&s.removeEventListener("abort",g),E());},E=z.subscribe([`${e}.${bt}`],()=>{let M=kt(h);if(M.approved.includes(t))x(),n();else {let O=M.rejected.find(L=>L.id===t);if(O){x();let L=O.reason?`Request ${t} rejected: ${O.reason}`:`Request ${t} rejected`;a(new Error(L));}}});if(s){if(g=()=>{x(),a(new Error(`[Directive MultiAgent] Approval wait aborted for request ${t}`));},s.aborted){x(),a(new Error(`[Directive MultiAgent] Approval wait aborted for request ${t}`));return}s.addEventListener("abort",g,{once:true});}d=setTimeout(()=>{x();let M=Math.round($/1e3);a(new Error(`[Directive MultiAgent] Approval timeout: Request ${t} not resolved within ${M}s.
|
|
25
|
-
Solutions:
|
|
26
|
-
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
27
|
-
2. Set autoApproveToolCalls: true to auto-approve
|
|
28
|
-
3. Increase approvalTimeoutMs (current: ${$}ms)
|
|
29
|
-
See: https://directive.run/docs/ai/multi-agent`));},$);})}async function or(e,t,s,n){let a=t.label??e,d=Date.now(),l=Ae[e]??(Ae[e]={status:"idle"});l.status="running",l.startTime=d,l.lastError=void 0;let g=s;if(De.length>0)try{let N=await st("pre_agent_run",e,a,s,n?.signal);if(N.skip)return l.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:t.description,inputLength:g.length,input:g.slice(0,Mt)});let h=n?.patternId??"";K("onTaskStart",{patternId:h,taskId:e,label:a,timestamp:d});let x=Fe.get(e),E=()=>({taskId:e,memory:S?structuredClone(S.getContextMessages?.()??[]):[],scratchpad:Object.freeze(tn?structuredClone(tn.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:h,taskId:e,label:a,percent:B,message:q,timestamp:Date.now()});}}),M=t.retry?.attempts??1,O=t.retry?.backoff??"fixed",L=t.retry?.delayMs??1e3,v,A=async N=>{let q=E();return t.run(g,N,q)},U=null;try{x&&(U=await x.acquire());for(let q=1;q<=M;q++){let B=new AbortController,C,m=()=>B.abort();if(n?.signal){if(n.signal.aborted)throw new Error(`[Directive MultiAgent] Task "${e}" aborted before starting`);n.signal.addEventListener("abort",m,{once:!0});}t.timeout&&(C=setTimeout(()=>B.abort(),t.timeout));try{let T=await A(B.signal);C&&clearTimeout(C);let F=typeof T=="string"?T:internals.safeStringify(T),J=Date.now()-d;l.status="completed",l.lastOutput=F,l.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:n?.patternId??"",taskId:e,label:a,durationMs:J,timestamp:Date.now()});try{let j=z.read("__coord");adapterUtils.setBridgeFact(j,"__lastTaskCompletion",{taskId:e,timestamp:Date.now()});}catch{}return {output:F,messages:[],toolCalls:[],totalTokens:0}}catch(T){if(C&&clearTimeout(C),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=O==="exponential"?L*2**(q-1):L,j=Math.min(J,F);await new Promise((k,R)=>{let D=!1,W=()=>{D||(D=!0,clearTimeout(G),R(new Error(`[Directive MultiAgent] Task "${e}" aborted during retry backoff`)));},G=setTimeout(()=>{D=!0,n?.signal?.removeEventListener("abort",W),k();},j);n?.signal&&n.signal.addEventListener("abort",W,{once:!0});});}}finally{n?.signal?.removeEventListener("abort",m);}}let N=Date.now()-d;throw l.status="error",l.lastError=v?.message,l.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:h,taskId:e,label:a,error:v,durationMs:N,timestamp:Date.now()}),v}finally{U?.();}}async function be(e,t,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)");Nt++;try{let n=ee[e];if(n)return await or(e,n,t,s);let a=Y[e];if(!a){let l=[...Object.keys(Y),...Object.keys(ee)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${l}`)}let d=a.circuitBreaker??Me;return d?await d.execute(()=>En(e,a,t,s)):await En(e,a,t,s)}catch(n){if(V&&!ee[e]&&!s?.__isReroute){let d=cr(e),l=dr(d);if(l){let g={originalAgent:e,reroutedTo:l,reason:n instanceof Error?n.message:String(n),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:l,reason:n instanceof Error?n.message:String(n)}),be(l,t,{...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=n instanceof Error?n.message:String(n)),n}finally{Nt--,ot();}}async function En(e,t,s,n){let a=Date.now(),d=fe(e),l=xe[e],g=t.agent,h=s,x=Je.get(e);if(!x){let v=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${e}". Registered agents: ${v}`)}let E=await x.acquire(n?.signal),M=new AbortController,O,L;try{t.timeout&&(O=setTimeout(()=>M.abort(),t.timeout)),n?.signal&&(L=()=>M.abort(),n.signal.addEventListener("abort",L,{once:!0}));let v=t.memory??S;if(v){let k=v.getContextMessages();if(k.length>0){let R=k.map(D=>`${D.role}: ${D.content}`).join(`
|
|
30
|
-
`);g={...g,instructions:(g.instructions??"")+`
|
|
31
|
-
|
|
32
|
-
Conversation context:
|
|
33
|
-
`+R};}}{let k=await st("pre_input_guardrails",e,g.name,h,n?.signal);if(k.skip)return l.status="completed",ot(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=k.input;}let U=[...w.input??[],...t.guardrails?.input??[]].map((k,R)=>Jt(k,R,"input"));for(let k of U){let{name:R}=k,D={agentName:g.name,input:h,facts:Oe(d)},W=Date.now(),G=await Wt(k,{input:h,agentName:g.name},D);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:h});G.transformed!==void 0&&(h=G.transformed);}K("onAgentStart",{agentId:e,agentName:g.name,input:h,timestamp:a}),P&&P.record({type:"agent_start",timestamp:Date.now(),agentId:e,snapshotId:null,inputLength:h.length,..."description"in g&&g.description?{description:String(g.description)}:{},...g.instructions?{instructions:g.instructions.slice(0,Mt)}:{},input:h.slice(0,Mt)}),z.batch(()=>{let k=At(d);Ye(d,{...k,status:"running",input:h,startedAt:Date.now()});}),l.status="running",l.lastInput=h;{let k=await st("pre_agent_run",e,g.name,h,n?.signal);if(k.skip)return l.status="completed",ot(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=k.input;}let N=r,q=n?.outputSchema!==void 0?n.outputSchema:t.outputSchema;q&&(N=Jn(r,{schema:q,maxRetries:n?.maxSchemaRetries??t.maxSchemaRetries??2,extractJson:t.extractJson,schemaDescription:t.schemaDescription}));let B=t.retry??_,C=await $n(N,g,h,{...t.runOptions,...n,signal:M.signal,onMessage:k=>{let D=[...dn(d),k];vt(d,D.length>Sn?D.slice(-Sn):D),n?.onMessage?.(k);},onToolCall:async k=>{let D=[...w.toolCall??[],...t.guardrails?.toolCall??[]].map((me,ae)=>Jt(me,ae,"toolCall"));for(let me of D){let{name:ae}=me,ue={agentName:g.name,input:h,facts:Oe(d)},at=Date.now(),ye=await Wt(me,{toolCall:k,agentName:g.name,input:h},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:h})}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()};ct.set(me,e),z.batch(()=>{let ue=kt(d);Xe(d,{...ue,pending:[...ue.pending,ae]});}),oe?.(ae),await rr(e,me,n?.signal);}let G=[...pn(d),k];wt(d,G.length>xn?G.slice(-xn):G),n?.onToolCall?.(k);}},B?{...B,onRetry:(k,R,D)=>{B.onRetry?.(k,R,D),K("onAgentRetry",{agentId:e,agentName:g.name,input:h,attempt:k,error:R,delayMs:D,timestamp:Date.now()});}}:void 0);if((await st("pre_output_guardrails",e,g.name,h,n?.signal)).skip)return l.status="completed",ot(),C;let T=[...w.output??[],...t.guardrails?.output??[]].map((k,R)=>Jt(k,R,"output"));for(let k of T){let{name:R}=k,D={agentName:g.name,input:h,facts:Oe(d)},W=Date.now(),G=await Wt(k,{output:C.output,agentName:g.name,input:h,messages:C.messages},D);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:h});G.transformed!==void 0&&(C.output=G.transformed);}z.batch(()=>{let k=At(d);Ye(d,{...k,status:"completed",output:C.output,tokenUsage:k.tokenUsage+C.totalTokens,turnCount:k.turnCount+C.messages.length,completedAt:Date.now()});}),l.status="completed",l.lastOutput=C.output,l.runCount++,l.totalTokens+=C.totalTokens,ot();let F=fe("__coord"),J=!1,j=0;if(z.batch(()=>{let R=adapterUtils.getBridgeFact(F,"__globalTokens")+C.totalTokens;if(nt=R,adapterUtils.setBridgeFact(F,"__globalTokens",R),I&&tt){j=R/I;let D=adapterUtils.getBridgeFact(F,"__budgetWarningFired");j>=Ie&&!D&&(adapterUtils.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&&C.messages.length>0)try{let D=v.getContextMessages().some(W=>W.role==="user"&&W.content===h)?C.messages.filter(W=>!(W.role==="user"&&W.content===h)):C.messages;v.addMessages(D);}catch(k){re&&console.debug("[Directive MultiAgent] Memory addMessages failed:",k);}if(K("onAgentComplete",{agentId:e,agentName:g.name,input:h,output:C.output,tokenUsage:C.totalTokens,durationMs:Date.now()-a,timestamp:Date.now()}),P){let k=typeof C.output=="string"?C.output:internals.safeStringify(C.output);P.record({type:"agent_complete",timestamp:Date.now(),agentId:e,snapshotId:null,outputLength:k.length,totalTokens:C.totalTokens,inputTokens:C.tokenUsage?.inputTokens??0,outputTokens:C.tokenUsage?.outputTokens??0,durationMs:Date.now()-a,modelId:t.agent.model??void 0,output:k.slice(0,Mt)});}return Ce&&Ce.recordSuccess(e,Date.now()-a),$e(),await st("post_run",e,g.name,h,n?.signal),C}catch(v){if(l.status="error",l.lastError=v instanceof Error?v.message:String(v),ot(),z.batch(()=>{let A=At(d);Ye(d,{...A,status:"error",error:v instanceof Error?v.message:String(v),completedAt:Date.now()});}),K("onAgentError",{agentId:e,agentName:g.name,input:h,error:v instanceof Error?v:new Error(String(v)),durationMs:Date.now()-a,timestamp:Date.now()}),P){let A={type:"agent_error",timestamp:Date.now(),agentId:e,snapshotId:null,errorMessage:v instanceof Error?v.message:String(v),durationMs:Date.now()-a};qn(v)&&(A.guardrailName=v.guardrailName,A.guardrailType=v.guardrailType,A.errorCode=v.code),P.record(A);}throw Ce&&Ce.recordFailure(e,Date.now()-a,v instanceof Error?v:new Error(String(v))),$e(),v}finally{O&&clearTimeout(O),L&&n?.signal&&n.signal.removeEventListener("abort",L),E();}}function rn(e,t,s={}){if(te(),ee[e]){let C=[],m=[],T=false,F=D=>{if(T)return;let W=m.shift();W?W(D):C.push(D);},J=()=>{T=true;for(let D of m)D(null);m.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,t,{signal:j.signal}).then(D=>{let W=typeof D.output=="string"?D.output:internals.safeStringify(D.output);return F({type:"token",data:W,tokenCount:0}),F({type:"done",totalTokens:0,duration:0,droppedTokens:0}),J(),D},D=>{throw F({type:"error",error:D}),J(),D}).finally(()=>{k&&s.signal&&s.signal.removeEventListener("abort",k);});return R.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let D=C.shift();if(D){if(yield D,D.type==="done"||D.type==="error")return}else {if(T)return;{let W=await new Promise(G=>m.push(G));if(!W||(yield W,W.type==="done"||W.type==="error"))return}}}}},result:R,abort:()=>{j.abort();}}}if(!Y[e]){let C=[...Object.keys(Y),...Object.keys(ee)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${C}`)}let d=1e4,l=1e5,g=new AbortController,h=[],x=[],E=false,M=Date.now(),O=0,L="",v;s.signal&&(v=()=>g.abort(),s.signal.addEventListener("abort",v,{once:true}));let A=()=>{v&&s.signal&&s.signal.removeEventListener("abort",v);},U=C=>{if(E)return;let m=x.shift();m?m(C):(h.length>=d&&h.shift(),h.push(C));},N=()=>{E=true,A();for(let C of x)C(null);x.length=0;},q=(async()=>{U({type:"progress",phase:"starting",message:"Running input guardrails"});try{let C=await be(e,t,{signal:g.signal,onMessage:T=>{if(U({type:"message",message:T}),T.role==="assistant"&&T.content){let F=Math.ceil(T.content.length/4);O+=F,L+=T.content,L.length>l&&(L=L.slice(-l)),U({type:"token",data:T.content,tokenCount:O});}},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});}}),m=Date.now()-M;return U({type:"done",totalTokens:C.totalTokens,duration:m,droppedTokens:0}),N(),C}catch(C){throw C instanceof Ve&&U({type:"guardrail_triggered",guardrailName:C.guardrailName,reason:C.message,partialOutput:L,stopped:true}),U({type:"error",error:C instanceof Error?C:new Error(String(C))}),N(),C}})(),B={[Symbol.asyncIterator](){return {async next(){return h.length>0?{done:false,value:h.shift()}:E?{done:true,value:void 0}:new Promise(C=>{x.push(m=>{C(m===null?{done:true,value:void 0}:{done:false,value:m});});})}}}};return q.catch(()=>{}),{stream:B,result:q,abort:()=>{g.abort(),N();}}}async function sr(e,t,s){let n=Date.now();s&&K("onPatternStart",{patternId:s,patternType:"parallel",input:t,timestamp:n});let a=new AbortController,d;e.timeout&&(d=setTimeout(()=>a.abort(),e.timeout));let l;try{let g=e.handlers.map(E=>be(E,t,{signal:a.signal,patternId:s}).catch(M=>{if(e.minSuccess===void 0)throw M;return null})),h=await Promise.all(g),x=h.filter(E=>E!==null);if(e.minSuccess!==void 0&&x.length<e.minSuccess){let E=h.length-x.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${x.length}/${e.handlers.length} agents succeeded (minimum required: ${e.minSuccess}, failed: ${E})`)}return e.merge(x)}catch(g){throw l=g instanceof Error?g:new Error(String(g)),g}finally{d&&clearTimeout(d),s&&K("onPatternComplete",{patternId:s,patternType:"parallel",durationMs:Date.now()-n,timestamp:Date.now(),error:l});}}async function ft(e,t,s){let n=ut(e);if(s?.when)try{if(!s.when({step:n,patternType:e.type,facts:e.type==="goal"?e.facts:void 0,satisfaction:e.type==="goal"?e.lastSatisfaction:void 0}))return null}catch{return null}try{let 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 t.save(a),P&&P.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:e.id,patternType:e.type,step:n}),K("onCheckpointSave",{checkpointId:e.id,patternType:e.type,step:n,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:n,error:d,timestamp:Date.now()}),null}}async function on(e,t,s,n){let a=Date.now(),d=s??"__inline_sequential";s&&K("onPatternStart",{patternId:s,patternType:"sequential",input:t,timestamp:a});let l=e.checkpoint,g=l?.store??se,h=l?.everyN??5,x=l?.labelPrefix??"sequential",E=n?.currentInput??t,M,O=n?.results?[...n.results]:[],L=n?.step??0,v;if(n&&O.length>0){let A=O[O.length-1];M={output:A.output,totalTokens:A.totalTokens,messages:[],toolCalls:[]};}try{for(let A=L;A<e.handlers.length;A++){let U=e.handlers[A];{let N=await st("pre_pattern_step",U,Y[U]?.agent.name??U,E,void 0,{patternId:s});if(N.skip)continue;E=N.input;}try{if(M=await be(U,E,{patternId:s}),O.push({agentId:U,output:M.output,totalTokens:M.totalTokens}),A<e.handlers.length-1&&(e.transform?E=e.transform(M.output,U,A):E=typeof M.output=="string"?M.output:internals.safeStringify(M.output)),l&&g&&A>L&&(A-L)%h===0){let N=A<e.handlers.length-1?E:t;await ft({type:"sequential",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${x}:step-${A+1}`,patternId:d,stepsTotal:e.handlers.length,step:A+1,currentInput:N,results:[...O]},g,l);}}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(A){throw v=A instanceof Error?A:new Error(String(A)),A}finally{s&&K("onPatternComplete",{patternId:s,patternType:"sequential",durationMs:Date.now()-a,timestamp:Date.now(),error:v});}}async function sn(e,t,s,n){let a=Date.now(),d=s??"__inline_supervisor";s&&K("onPatternStart",{patternId:s,patternType:"supervisor",input:t,timestamp:a});let l=e.checkpoint,g=l?.store??se,h=l?.everyN??5,x=l?.labelPrefix??"supervisor",E=[],M=n?.workerResults?[...n.workerResults]:[],O=e.maxRounds??5;if(O<1||!Number.isFinite(O))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let L;if(n)for(let A of n.workerResults)E.push({output:A.output,totalTokens:A.totalTokens,messages:[],toolCalls:[]});let v=n?.round??0;try{let A;n?A={output:n.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:A=await be(e.supervisor,t);let U=n?.currentInput??t;for(let N=v;N<O;N++){let q=A.output,B;if(typeof q=="string")try{let m=q.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();B=JSON.parse(m);}catch{try{let m=q.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),T=_t(m);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 m=e.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${B.worker}". Available workers: ${m}`)}let C=await be(B.worker,B.workerInput??"",{patternId:s});E.push(C),M.push({output:C.output,totalTokens:C.totalTokens}),U=`Worker ${B.worker} completed with result: ${internals.safeStringify(C.output)}`,A=await be(e.supervisor,U,{patternId:s}),l&&g&&N>v&&(N-v)%h===0&&await ft({type:"supervisor",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${x}:round-${N+1}`,patternId:d,stepsTotal:e.maxRounds??10,round:N+1,supervisorOutput:A.output,workerResults:[...M],currentInput:U},g,l);}return e.extract?e.extract(A.output,E):A.output}catch(A){throw L=A instanceof Error?A:new Error(String(A)),A}finally{s&&K("onPatternComplete",{patternId:s,patternType:"supervisor",durationMs:Date.now()-a,timestamp:Date.now(),error:L});}}async function an(e,t,s,n){let a=Date.now(),d=s??"__inline_dag";s&&K("onPatternStart",{patternId:s,patternType:"dag",input:t,timestamp:a});let l=e.checkpoint,g=l?.store??se,h=l?.everyN??5,x=l?.labelPrefix??"dag",E=n?.completedCount??0,M=0,O=Promise.resolve(),L=Object.keys(e.nodes).length,v={input:n?.input??t,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};for(let m of Object.keys(e.nodes))v.statuses[m]="pending";if(n){for(let[m,T]of Object.entries(n.statuses))v.statuses[m]=T;for(let[m,T]of Object.entries(n.outputs))v.outputs[m]=T;for(let[m,T]of Object.entries(n.errors))v.errors[m]=T;for(let[m,T]of Object.entries(n.nodeResults))v.results[m]={output:T.output,totalTokens:T.totalTokens,messages:[],toolCalls:[]};}let A=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=A==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((k.deps??[]).every(W=>R.has(v.statuses[W]))){if(A==="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 C=F;if(!n)for(let[j,k]of Object.entries(e.nodes))(!k.deps||k.deps.length===0)&&(v.statuses[j]="ready");let m=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 D;if(k.transform)D=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]);D=JSON.stringify(ae);}else D=t;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,D,{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()}),E++,l&&g&&E>M&&E-M>=h){M=E;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:`${x}:node-${E}`,patternId:d,stepsTotal:L,statuses:{...v.statuses},outputs:{...v.outputs},errors:{...v.errors},completedCount:E,nodeResults:ue,input:v.input};O=O.then(()=>ft(at,g,l)),await O;}}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()}),A==="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],[,D])=>(D.priority??0)-(R.priority??0));for(let[R,D]of j){if(T>=U)break;T++;let W=J(R,D).finally(()=>{m.delete(W);});m.add(W);}if(!Object.values(v.statuses).some(R=>R==="pending"||R==="running"||R==="ready"))break;if(m.size>0)await Promise.race(m);else break}return m.size>0&&await Promise.allSettled(m),await e.merge(v)}catch(m){throw B=m instanceof Error?m:new Error(String(m)),m}finally{q&&clearTimeout(q),s&&K("onPatternComplete",{patternId:s,patternType:"dag",durationMs:Date.now()-a,timestamp:Date.now(),error:B});}}async function Lt(e,t,s,n){let a=Date.now(),d=s??"__inline_reflect",l=e.maxIterations??2;if(l<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");re&&l>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let g=e.signal,h,x;if(e.timeout&&!g){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),g=m.signal;}else if(e.timeout&&g){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),x=()=>m.abort(),g.addEventListener("abort",x,{once:true}),g=m.signal;}let E=e.parseEvaluation??(m=>{if(typeof m=="string")try{return JSON.parse(m)}catch{return {passed:false,feedback:`Evaluator returned unparseable output: ${m.slice(0,200)}`}}return m&&typeof m=="object"&&"passed"in m?m:{passed:false,feedback:"Evaluator returned invalid format"}}),M=e.buildRetryInput??((m,T,F)=>`${m}
|
|
34
|
-
|
|
35
|
-
Feedback on your previous response:
|
|
36
|
-
${T}
|
|
37
|
-
|
|
38
|
-
Please improve your response.`);s&&K("onPatternStart",{patternId:d,patternType:"reflect",input:t,timestamp:a});let O=e.checkpoint,L=O?.store??se,v=O?.everyN??5,A=O?.labelPrefix??"reflect",U,N,q=n?.history?[...n.history]:[],B=n?.producerOutputs?[...n.producerOutputs]:[],C=n?.iteration??0;n?.lastProducerOutput!=null&&(N={output:n.lastProducerOutput,totalTokens:0,messages:[],toolCalls:[]});try{let m=n?.effectiveInput??t;for(let T=C;T<l;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,m,{signal:g,patternId:s});N=J;let j=typeof J.output=="string"?J.output:internals.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=E(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 D=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:D,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:D,producerTokens:J.totalTokens,evaluatorTokens:k.totalTokens}),R.passed)return Ne=q,e.extract?e.extract(J.output):J.output;if(T<l-1&&R.feedback)try{m=M(t,R.feedback,T);}catch(G){re&&console.warn("[Directive MultiAgent] buildRetryInput threw, using default format:",G),m=`${t}
|
|
39
|
-
|
|
40
|
-
Feedback on your previous response:
|
|
41
|
-
${R.feedback}
|
|
42
|
-
|
|
43
|
-
Please improve your response.`;}O&&L&&T>=C&&(T-C+1)%v===0&&await ft({type:"reflect",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${A}:iter-${T+1}`,patternId:d,stepsTotal:l,iteration:T+1,effectiveInput:m,history:[...q],producerOutputs:[...B],lastProducerOutput:J.output},L,O);}if(Ne=q,e.onExhausted==="throw")throw new Ct({iterations:l,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(m){throw Ne=q,U=m instanceof Error?m:new Error(String(m)),m}finally{h&&clearTimeout(h),x&&e.signal&&e.signal.removeEventListener("abort",x),s&&K("onPatternComplete",{patternId:d,patternType:"reflect",durationMs:Date.now()-a,timestamp:Date.now(),error:U});}}async function An(e,t,s){if(e.handlers.length===0)throw new Error("[Directive MultiAgent] Race pattern requires at least one agent");let n=e.minSuccess??1;if(!Number.isInteger(n)||n<1)throw new Error("[Directive MultiAgent] Race pattern minSuccess must be a positive integer");if(n>e.handlers.length)throw new Error(`[Directive MultiAgent] Race pattern minSuccess (${n}) exceeds agent count (${e.handlers.length})`);for(let O of e.handlers)if(!Y[O]&&!ee[O])throw new Error(`[Directive MultiAgent] Race: unknown handler "${O}"`);let a=Date.now(),d=s??"__inline_race",l=new AbortController,g,h;e.signal&&(e.signal.aborted?l.abort():(h=()=>l.abort(),e.signal.addEventListener("abort",h,{once:true}))),s&&K("onPatternStart",{patternId:d,patternType:"race",input:t,timestamp:a}),P&&P.record({type:"race_start",timestamp:a,snapshotId:null,patternId:d,agents:e.handlers}),e.timeout&&(g=setTimeout(()=>l.abort(),e.timeout));let x,E=Object.create(null),M=[...e.handlers];try{let O=e.handlers.map(T=>({agentId:T,promise:be(T,t,{signal:l.signal,patternId:s}).then(F=>({agentId:T,result:F}))})),L=O.map(T=>T.promise.catch(()=>{})),v=[],A=await new Promise((T,F)=>{let J=0,j=!1;for(let k of O)k.promise.then(R=>{J++,!j&&(v.push(R),v.length>=n&&(j=!0,l.abort(),T([...v])));}).catch(R=>{if(E[k.agentId]=R instanceof Error?R.message:String(R),J++,j)return;let D=Object.keys(E).length,W=v.length+(O.length-J);J===O.length&&D===O.length?(j=!0,F(new Error(`[Directive MultiAgent] Race: all ${O.length} agents failed.
|
|
44
|
-
`+Object.entries(E).map(([G,me])=>` - ${G}: ${me}`).join(`
|
|
45
|
-
`)))):W<n&&(j=!0,F(new Error(`[Directive MultiAgent] Race: cannot reach minSuccess (${n}). ${D} agent(s) failed.
|
|
46
|
-
`+Object.entries(E).map(([G,me])=>` - ${G}: ${me}`).join(`
|
|
47
|
-
`))));});});await Promise.all(L).catch(()=>{});let U=A[0],N=U.agentId,q=new Set(A.map(T=>T.agentId)),B=M.filter(T=>!q.has(T)&&!(T in E));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 C=e.extract?e.extract(U.result):U.result.output,m=n>1?A.map(T=>({agentId:T.agentId,result:e.extract?e.extract(T.result):T.result.output})):void 0;return {winnerId:N,result:C,allResults:m}}catch(O){throw x=O instanceof Error?O:new Error(String(O)),P&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:d,cancelledIds:M,reason:l.signal.aborted?"timeout":"all_failed"}),O}finally{g&&clearTimeout(g),h&&e.signal&&e.signal.removeEventListener("abort",h),s&&K("onPatternComplete",{patternId:d,patternType:"race",durationMs:Date.now()-a,timestamp:Date.now(),error:x});}}async function Bt(e,t,s,n){let{handlers:a,evaluator:d,maxRounds:l=2,extract:g,parseJudgement:h}=e;if(a.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(l<1||!Number.isFinite(l))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let x=e.signal,E,M;if(e.timeout&&!x){let R=new AbortController;E=setTimeout(()=>R.abort(),e.timeout),x=R.signal;}else if(e.timeout&&x){let R=new AbortController;E=setTimeout(()=>R.abort(),e.timeout),M=()=>R.abort(),x.addEventListener("abort",M,{once:true}),x=R.signal;}let L=h??(R=>{if(typeof R=="string")try{let D=JSON.parse(R);return D&&typeof D=="object"&&typeof D.winnerId=="string"?D:(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=n?.rounds?[...n.rounds]:[],A=n?.currentInput??t,U=n?.lastWinnerId??a[0],N=n?.lastWinnerOutput??void 0,q=n?.round??0,B=e.checkpoint,C=B?.store??se,m=B?.everyN??5,T=B?.labelPrefix??"debate",F=s??"__inline_debate",J=Date.now(),j=n?.tokensConsumed??0;s&&K("onPatternStart",{patternId:F,patternType:"debate",input:t,timestamp:J});let k;try{for(let D=q;D<l&&!x?.aborted;D++){let W=a.map(async ye=>{let Pe=await be(ye,A,{signal:x,patternId:F});return j+=Pe.totalTokens,{agentId:ye,output:Pe.output}}),G=await Promise.all(W);if(x?.aborted)break;let me=JSON.stringify({round:D+1,totalRounds:l,proposals:G.map(ye=>({agentId:ye.agentId,proposal:ye.output}))}),ae=await be(d,me,{signal:x,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:D+1,totalRounds:l,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&&C&&D>q&&(D-q)%m===0){let ye={type:"debate",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${T}:round-${D+1}`,patternId:F,stepsTotal:l,round:D+1,currentInput:A,rounds:[...v],lastWinnerId:U,lastWinnerOutput:N,tokensConsumed:j};await ft(ye,C,B);}D<l-1&&ue.feedback&&(A=`Previous round feedback: ${ue.feedback}
|
|
48
|
-
|
|
49
|
-
Original task: ${t}`);}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{E&&clearTimeout(E),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 ar=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function mt(e,t){for(let s of Object.keys(t))ar.has(s)||(e[s]=t[s]);}function ir(e,t){let s=Object.create(null);for(let[h,x]of Object.entries(t))for(let E of x.produces)s[E]||(s[E]=[]),s[E].push(h);let n=Object.keys(t),a=Object.create(null),d=Object.create(null);for(let h of n)a[h]=0,d[h]=[];for(let[h,x]of Object.entries(t))for(let E of x.requires??[]){let M=s[E];if(M)for(let O of M)O!==h&&(d[O].push(h),a[h]=(a[h]??0)+1);}let l=[];for(let h of n)a[h]===0&&l.push(h);let g=0;for(;l.length>0;){let h=l.shift();g++;for(let x of d[h]??[])a[x]--,a[x]===0&&l.push(x);}if(g!==n.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${g}/${n.length} nodes.`)}function ur(e,t){let s=Object.create(null);for(let[n,a]of Object.entries(t))for(let d of a.produces)s[d]||(s[d]=[]),s[d].push(n);for(let[n,a]of Object.entries(s))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${n}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function Te(e,...t){if(e)try{return e(...t)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}async function lr(e,...t){if(e)try{return await e(...t)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}function un(e,t,s){let n=t.slice(-3),a=n.length>0?n.reduce((g,h)=>g+h.satisfactionDelta,0)/n.length:0,d=null;a>0&&e<1&&(d=Math.ceil((1-e)/a));let l=false;if(t.length>=6){let g=t.slice(-3),h=t.slice(-6,-3),x=g.reduce((M,O)=>M+O.satisfactionDelta,0)/3,E=h.reduce((M,O)=>M+O.satisfactionDelta,0)/3;l=x<E*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:d,decelerating:l}}function Tt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Ft(e,t,s,n){let{nodes:a,when:d,satisfaction:l,maxSteps:g=50,extract:h,selectionStrategy:x,relaxation:E,onStep:M,onStall:O}=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 A=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}"`);ir(A,L),ur(A,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 C=Date.now();if(P){let ne=Object.values(L).map(ie=>ie.handler);P.record({type:"pattern_start",timestamp:C,snapshotId:null,patternId:A,patternType:"goal",handlers:ne,taskIds:ne.filter(ie=>ee[ie]!=null)});}K("onPatternStart",{patternId:A,patternType:"goal",input:typeof t=="string"?t:JSON.stringify(t),timestamp:C});let m=Object.create(null);n?mt(m,n.facts):typeof t=="string"?m.input=t:mt(m,t);let T=n?[...n.executionOrder]:[],F=Object.create(null);if(n)for(let[ne,ie]of Object.entries(n.nodeOutputs))F[ne]={output:ie.output,totalTokens:ie.totalTokens};let J=n?[...n.stepMetrics]:[],j=n?[...n.relaxations]:[],k=new Set(n?.completedNodes??[]),R=new Map(n?Object.entries(n.failedNodes).map(([ne,ie])=>[ne,ie]):[]),D=new Map(n?Object.entries(n.nodeInputHashes):[]),W=Object.create(null);if(n)for(let[ne,ie]of Object.entries(n.agentMetrics))W[ne]={runs:ie.runs,avgSatisfactionDelta:ie.runs>0?ie.totalDelta/ie.runs:0,tokens:ie.tokens,totalDelta:ie.totalDelta};let G=n?.stallSteps??0,me=n?.appliedRelaxationTiers??0,ae=n?.lastSatisfaction??0,ue,at=false,ye=n?.step??0,Pe=e.checkpoint,gr=Pe?.everyN??5,Dn=Pe?.store??se,fr=Pe?.labelPrefix??"goal",On,mr=3;try{for(let ge=ye;ge<g;ge++){if(Te(d,m)===!0){at=!0;let Z=Date.now()-C,X=Object.values(F).reduce((le,ke)=>le+ke.totalTokens,0);return {achieved:!0,result:Te(h,m)??m,facts:{...m},executionOrder:T,nodeResults:F,steps:ge,totalTokens:X,durationMs:Z,stepMetrics:J,relaxations:j}}if(U?.aborted){let Z=Date.now()-C,X=Object.values(F).reduce((le,ke)=>le+ke.totalTokens,0);return {achieved:!1,result:Te(h,m)??m,facts:{...m},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)>=mr)continue;let le=X.requires??[];if(le.every(he=>m[he]!=null)){if(k.has(Z)){if(!X.allowRerun)continue;let he=JSON.stringify(le.map(Se=>m[Se]));if(D.get(Z)===he)continue}it.push(Z);}}let Ke=it;if(x&&it.length>0){let Z=l?Te(l,m)??0:Te(d,m)===!0?1:0,X=Tt(Z),le=un(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=x.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,{...m},Ke),Ke.length===0){G++;let Z=!1;if(E)for(let X=me;X<E.length;X++){let le=E[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),D.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":mt(m,he.facts);break;case "accept_partial":{let Se=Date.now()-C,ce=Object.values(F).reduce((ve,Ge)=>ve+Ge.totalTokens,0);return {achieved:!1,result:Te(h,m)??m,facts:{...m},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(l,m)??0,ce={step:ge,facts:{...m},metrics:un(Tt(Se),J,ge),completedNodes:new Set(k),failedNodes:new Map(R)};await lr(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(l,m)??0,le=un(Tt(X),J,ge);if(Te(O,ge,le),!E||me>=E.length){let ke=Date.now()-C,he=Object.values(F).reduce((Se,ce)=>Se+ce.totalTokens,0);return {achieved:!1,result:Te(h,m)??m,facts:{...m},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 hr=Date.now(),br=l?Te(l,m)??0:Te(d,m)===!0?1:0,yr=Tt(br),_n=0,ht=[],kr=Ke.map(async Z=>{let X=L[Z],le=X.requires??[],ke=JSON.stringify(le.map(ce=>m[ce]));D.set(Z,ke);let he,Se=Te(X.buildInput,m);if(Se!=null)he=Se;else {let ce=Object.create(null);for(let ve of le)m[ve]!=null&&(ce[ve]=m[ve]);Object.keys(ce).length>0?he=JSON.stringify(ce):m.input!=null?he=String(m.input):he=JSON.stringify(m);}try{let ce=await be(X.handler,he,{signal:U??void 0,patternId:A});if(F[Z]=ce,T.push(Z),k.add(Z),R.delete(Z),X.extractOutput){let ve=Te(X.extractOutput,ce);ve&&(mt(m,ve),ht.push(...Object.keys(ve)));}else {let ve=ce.output;if(ve&&typeof ve=="object")mt(m,ve),ht.push(...Object.keys(ve));else if(typeof ve=="string")try{let Ge=JSON.parse(ve);if(Ge&&typeof Ge=="object"&&!Array.isArray(Ge))mt(m,Ge),ht.push(...Object.keys(Ge));else for(let Mn of X.produces)m[Mn]=ve,ht.push(Mn);}catch{for(let Ge of X.produces)m[Ge]=ve,ht.push(Ge);}}return _n+=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(kr);let vr=l?Te(l,m)??0:Te(d,m)===!0?1:0,Ht=Tt(vr),Ut=Ht-yr;if(J.push({step:ge,durationMs:Date.now()-hr,nodesRun:[...Ke],factsProduced:ht,satisfaction:Ht,satisfactionDelta:Ut,tokensConsumed:_n}),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:Ht,satisfactionDelta:Ut});}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+=Ut,le.tokens+=F[Z]?.totalTokens??0;}if(ae=Ht,Ut<=0?G++:G=0,Pe&&Dn&&ge>ye&&(ge-ye)%gr===0){let Z={type:"goal",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${fr}:step-${ge}`,patternId:A,stepsTotal:g,step:ge+1,facts:structuredClone(m),completedNodes:[...k],failedNodes:Object.fromEntries(R),nodeInputHashes:Object.fromEntries(D),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 ft(Z,Dn,Pe);X&&(On=X);}}let ne=Date.now()-C,ie=Object.values(F).reduce((ge,it)=>ge+it.totalTokens,0);return {achieved:!1,result:Te(h,m)??m,facts:{...m},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:A,patternType:"goal",durationMs:Date.now()-C,achieved:at,stepMetrics:J,relaxations:j,totalTokens:ne,...ue?{error:ue.message}:{}});}K("onPatternComplete",{patternId:A,patternType:"goal",durationMs:Date.now()-C,timestamp:Date.now(),error:ue});}}function cr(e){if(!V)return [];let t=[],s=new Set;if(s.add(e),V.equivalencyGroups){for(let n of Object.values(V.equivalencyGroups))if(n.includes(e))for(let a of n)!s.has(a)&&Y[a]&&(t.push(a),s.add(a));}if(V.useCapabilities!==false){let n=Y[e];if(n?.capabilities&&n.capabilities.length>0)for(let[a,d]of Object.entries(Y)){if(s.has(a))continue;let l=d.capabilities??[];n.capabilities.every(g=>l.includes(g))&&(t.push(a),s.add(a));}}if(Ce){let n=V.healthThreshold??30;return t.filter(a=>Ce.getHealthScore(a)>n)}return t}function dr(e){if(e.length===0)return null;if(!V||!Ce)return e[0]??null;if(V.selectionStrategy==="round-robin"&&He){let n=[...e].sort().join(","),a=He.get(n)??0,d=e[a%e.length];return He.set(n,a+1),d}let t=e[0],s=Ce.getHealthScore(t);for(let n=1;n<e.length;n++){let a=Ce.getHealthScore(e[n]);a>s&&(t=e[n],s=a);}return t}function pr(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(t=>t.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(t=>t.handler);default:return []}}let Cn={system:z,get facts(){return z.facts},get timeline(){return P},get healthMonitor(){return Ce},get derived(){return Object.freeze({...dt})},onDerivedChange(e){return Gt.add(e),()=>{Gt.delete(e);}},get scratchpad(){return tn},runAgent:be,runAgentStream:rn,async runPattern(e,t){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 n=Date.now();if(P){let d=pr(s);P.record({type:"pattern_start",timestamp:n,snapshotId:null,patternId:e,patternType:s.type,handlers:d,taskIds:d.filter(l=>ee[l]!=null)});}let a;try{switch(s.type){case "parallel":return await sr(s,t,e);case "sequential":return await on(s,t,e);case "supervisor":return await sn(s,t,e);case "dag":return await an(s,t,e);case "reflect":return await Lt(s,t,e);case "race":return (await An(s,t,e)).result;case "debate":return (await Bt(s,t,e)).result;case "goal":return (await Ft(s,t,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()-n,...a?{error:a.message}:{}});}},async runParallel(e,t,s,n){te();let a=Array.isArray(t)?t:e.map(()=>t);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let d=new AbortController,l;n?.timeout&&(l=setTimeout(()=>d.abort(),n.timeout));try{let g=e.map((E,M)=>be(E,a[M],{signal:d.signal}).catch(O=>{if(n?.minSuccess!==void 0)return null;throw O})),h=await Promise.all(g),x=h.filter(E=>E!==null);if(n?.minSuccess!==void 0&&x.length<n.minSuccess){let E=h.length-x.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${x.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess}, failed: ${E})`)}return s(x)}finally{l&&clearTimeout(l);}},async runSequential(e,t,s){te();let n=[],a=t;for(let d=0;d<e.length;d++){let l=e[d],g=await be(l,a);n.push(g),d<e.length-1&&(s?.transform?a=s.transform(g.output,l,d):a=typeof g.output=="string"?g.output:internals.safeStringify(g.output));}return n},async handoff(e,t,s,n){if(te(),!Y[e]){let l=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${l}`)}if(!Y[t]){let l=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${t}" not found. Registered: ${l}`)}{let l=await st("pre_handoff",e,Y[e].agent.name,s,void 0,{handoff:{fromAgent:e,toAgent:t}});if(l.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};s=l.input;}let a={id:`handoff-${++jt}`,fromAgent:e,toAgent:t,input:s,context:n,requestedAt:Date.now()};je.push(a);try{p?.(a);}catch(l){re&&console.debug("[Directive MultiAgent] onHandoff threw:",l);}K("onHandoff",a),P&&P.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t});let d=Y[t].memory??S;if(d&&n)try{let l=Object.entries(n).map(([g,h])=>`${g}: ${internals.safeStringify(h)}`).join(", ");d.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${l}`}]);}catch(l){re&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",l);}try{let l=await be(t,s),g={request:a,result:l,completedAt:Date.now()};er(g);try{f?.(g);}catch(x){re&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",x);}K("onHandoffComplete",g),P&&P.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t,durationMs:g.completedAt-a.requestedAt});let h=je.indexOf(a);return h>=0&&je.splice(h,1),l}catch(l){let g=je.indexOf(a);throw g>=0&&je.splice(g,1),l}},approve(e){te();let t=ct.get(e);if(t){ct.delete(e);let s=fe(t);z.batch(()=>{let n=kt(s),a=200,d=[...n.approved,e];Xe(s,{...n,pending:n.pending.filter(l=>l.id!==e),approved:d.length>a?d.slice(-a):d});});return}re&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,t){te();let s=ct.get(e);if(s){ct.delete(e);let n=fe(s);z.batch(()=>{let a=kt(n);t&&re&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${t}`);let d={id:e,reason:t,rejectedAt:Date.now()},l=200,g=[...a.rejected,d];Xe(n,{...a,pending:a.pending.filter(h=>h.id!==e),rejected:g.length>l?g.slice(-l):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 t=xe[e];return t?{...t}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(xe).map(([e,t])=>[e,{...t}]))},getPendingHandoffs(){return [...je]},get totalTokens(){return nt},waitForIdle(e){let t=()=>Nt===0&&Object.values(xe).every(s=>s.status==="idle"||s.status==="completed"||s.status==="error");return t()?Promise.resolve():new Promise((s,n)=>{let a=null,d=()=>{$t.delete(l),a&&clearTimeout(a);},l=()=>{t()&&(d(),s());};$t.add(l),e!==void 0&&(a=setTimeout(()=>{d(),n(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,t,s){return be(e,t,s)},runStream(e,t,s){return rn(e,t,s)},registerAgent(e,t){if(te(),Pt.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=t.constraints?Xt(t.constraints):{},n=Object.create(null);if(t.resolvers)for(let[d,l]of Object.entries(t.resolvers))n[d]={requirement:l.requirement,key:l.key,resolve:async(g,h)=>{let x=Oe(h.facts),M={facts:{...h.facts,...x},runAgent:async(O,L,v)=>r(O,L,v),signal:h.signal};return l.resolve(g,M)}};let a=core.createModule(e,{schema:cn,init:d=>{Ye(d,{status:"idle",currentAgent:t.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(d,{pending:[],approved:[],rejected:[]}),vt(d,[]),wt(d,[]),Ze(d,Ot());},constraints:s,resolvers:Object.keys(n).length>0?n:void 0});z.registerModule(e,a),Y[e]=t,Je.set(e,new _e(t.maxConcurrent??1)),xe[e]={status:"idle",runCount:0,totalTokens:0},re&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${t.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 l;switch(d.type){case "supervisor":l=[d.supervisor,...d.workers];break;case "dag":l=Object.values(d.nodes).map(g=>g.handler);break;case "reflect":l=[d.handler,d.evaluator];break;case "parallel":case "sequential":case "race":l=d.handlers;break;case "debate":l=[...d.handlers,d.evaluator];break;default:l=[];}l.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 n=fe(e);n&&z.batch(()=>{Ye(n,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(n,{pending:[],approved:[],rejected:[]}),vt(n,[]),wt(n,[]),Ze(n,Ot());}),delete Y[e],delete xe[e],re&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),$e();},getAgentIds(){return Object.keys(Y)},registerTask(e,t){if(te(),Pt.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(t.timeout!==void 0&&(!Number.isFinite(t.timeout)||t.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(t.maxConcurrent!==void 0&&(!Number.isFinite(t.maxConcurrent)||t.maxConcurrent<1||!Number.isInteger(t.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(t.retry){let{attempts:s,delayMs:n}=t.retry;if(!Number.isFinite(s)||s<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(n!==void 0&&(!Number.isFinite(n)||n<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}ee[e]=t,Ae[e]={status:"idle"},Fe.set(e,new _e(t.maxConcurrent??1)),re&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${t.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[t,s]of Object.entries(ee))e[t]={label:s.label,description:s.description};return e},getTaskState(e){let t=Ae[e];return t?Object.freeze(structuredClone(t)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[t,s]of Object.entries(Ae))e[t]=Object.freeze(structuredClone(s));return e},getNodeIds(){return [...Object.keys(Y),...Object.keys(ee)]},reset(){te();for(let t of Object.keys(Y)){let s=Y[t]?.maxConcurrent??1;xe[t]={status:"idle",runCount:0,totalTokens:0};let n=Je.get(t);n&&n.drain(),Je.set(t,new _e(s));let a=fe(t);z.batch(()=>{Ye(a,{status:"idle",currentAgent:Y[t].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(a,{pending:[],approved:[],rejected:[]}),vt(a,[]),wt(a,[]),Ze(a,Ot());});}for(let t of Object.keys(ee)){Ae[t]={status:"idle"};let s=Fe.get(t);s&&s.drain(),Fe.set(t,new _e(ee[t].maxConcurrent??1));}gt.clear(),Rt.clear(),ct.clear(),je.length=0,rt.length=0,jt=0,nt=0,Ue="idle",Nt=0,ot();let e=fe("__coord");z.batch(()=>{adapterUtils.setBridgeFact(e,"__globalTokens",0),adapterUtils.setBridgeFact(e,"__status","idle"),adapterUtils.setBridgeFact(e,"__handoffs",[]),adapterUtils.setBridgeFact(e,"__handoffResults",[]),adapterUtils.setBridgeFact(e,"__budgetWarningFired",false),Be&&adapterUtils.setBridgeFact(e,Ee,{...Be.init});}),Ce&&Ce.reset(),Ne=null;for(let t of Object.keys(dt))delete dt[t];$e();},async checkpoint(e){te();for(let[s,n]of Object.entries(xe))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${s}" is running`);for(let[s,n]of Object.entries(Ae))if(n.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 t={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,n])=>[s,structuredClone(n)])),handoffCounter:jt,pendingHandoffs:[...je],handoffResults:[...rt],roundRobinCounters:He?Object.fromEntries(He):null,taskStates:Object.fromEntries(Object.entries(Ae).map(([s,n])=>[s,{lastOutput:n.lastOutput!=null?String(n.lastOutput):void 0,lastError:n.lastError}]))},memoryExport:S?S.export?.()??null:null,orchestratorType:"multi"};return se&&await se.save(t),t},restore(e,t){if(te(),!gn(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),t?.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,jt=s.handoffCounter,je.length=0,je.push(...s.pendingHandoffs),rt.length=0,rt.push(...s.handoffResults);for(let[n,a]of Object.entries(s.agentStates))xe[n]&&(xe[n]={...a});if(s.roundRobinCounters&&He){He.clear();for(let[n,a]of Object.entries(s.roundRobinCounters))He.set(n,a);}for(let[n,a]of Object.entries(Y)){let d=Je.get(n);d&&d.drain(),Je.set(n,new _e(a.maxConcurrent??1));}if(s.taskStates){for(let[n,a]of Object.entries(s.taskStates)){if(!ee[n])throw new Error(`[Directive MultiAgent] Checkpoint references task "${n}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);Ae[n]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[n,a]of Object.entries(ee)){let d=Fe.get(n);d&&d.drain(),Fe.set(n,new _e(a.maxConcurrent??1));}}$e();},runParallelStream(e,t,s,n){te();let a=Array.isArray(t)?t:e.map(()=>t);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let d=new AbortController,l;n?.timeout&&(l=setTimeout(()=>d.abort(),n.timeout));let g=e.map((v,A)=>{let U=rn(v,a[A],{signal:d.signal});return {agentId:v,streamResult:U}}),h=g.map(({agentId:v,streamResult:A})=>({agentId:v,stream:A.stream})),{stream:x,getDroppedCount:E}=Un(h),M;n?.signal&&(M=()=>d.abort(),n.signal.addEventListener("abort",M,{once:true}));let O=Promise.allSettled(g.map(({streamResult:v})=>v.result)).then(v=>{l&&clearTimeout(l),M&&n?.signal&&n.signal.removeEventListener("abort",M);let A=[];for(let U of v)U.status==="fulfilled"&&A.push(U.value);if(n?.minSuccess!==void 0&&A.length<n.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${A.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess})`);return A}),L=O.then(v=>s(v));return O.catch(()=>{}),L.catch(()=>{}),{stream:x,results:O,merge:L,getDroppedCount:E,abort:()=>{d.abort(),M&&n?.signal&&n.signal.removeEventListener("abort",M);for(let{streamResult:v}of g)v.abort();}}},async runRace(e,t,s){te();let n={type:"race",handlers:e,extract:s?.extract,timeout:s?.timeout,minSuccess:s?.minSuccess,signal:s?.signal};return An(n,t,"__imperative_race")},async runReflect(e,t,s,n){te();let a={type:"reflect",handler:e,evaluator:t,maxIterations:n?.maxIterations,parseEvaluation:n?.parseEvaluation,buildRetryInput:n?.buildRetryInput,extract:n?.extract,onExhausted:n?.onExhausted,onIteration:n?.onIteration,signal:n?.signal,timeout:n?.timeout,threshold:n?.threshold},d=await Lt(a,s,"__imperative_reflect"),l=Ne?[...Ne]:[],g=n?.maxIterations??2,h=l.length>0&&!l[l.length-1].passed&&l.length>=g;return {result:d,iterations:l.length,history:l,exhausted:h}},async runDebate(e,t,s,n){return te(),Bt({handlers:e,evaluator:t,maxRounds:n?.maxRounds,extract:n?.extract,parseJudgement:n?.parseJudgement,signal:n?.signal,timeout:n?.timeout},s,"__imperative_debate")},async runGoal(e,t,s,n){return te(),Ft({nodes:e,when:s,satisfaction:n?.satisfaction,maxSteps:n?.maxSteps,extract:n?.extract,timeout:n?.timeout,signal:n?.signal,selectionStrategy:n?.selectionStrategy,relaxation:n?.relaxation,onStep:n?.onStep,onStall:n?.onStall,checkpoint:n?.checkpoint},t,"__imperative_goal")},async resumeGoal(e,t){if(te(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Ft(t,{},e.patternId,e)},async resumeSequential(e,t){if(te(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return on(t,e.currentInput,e.patternId,e)},async resumeSupervisor(e,t,s){if(te(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let n=s?.input??e.currentInput;return sn(t,n,e.patternId,e)},async resumeReflect(e,t,s){if(te(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let n=s?.input??e.effectiveInput;return Lt(t,n,e.patternId,e)},async resumeDebate(e,t){if(te(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return Bt(t,e.currentInput,e.patternId,e)},async resumeDag(e,t,s){if(te(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let n=s?.input??e.input;return an(t,n,e.patternId,e)},async replay(e,t,s){if(te(),!se)throw new Error("[Directive MultiAgent] No checkpoint store configured");let n=await se.load(e);if(!n)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let g=JSON.parse(n.systemExport);if(!g||typeof g!="object")throw new Error("Parsed checkpoint state is not an object");let h=new Set(["__proto__","constructor","prototype"]);for(let E of Object.keys(g))if(h.has(E))throw new Error(`Checkpoint state contains blocked key: ${E}`);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=ut(a),l=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 on(t,l,a.patternId,a);case "supervisor":return sn(t,l,a.patternId,a);case "reflect":return Lt(t,l,a.patternId,a);case "debate":return Bt(t,l,a.patternId,a);case "dag":return an(t,l,a.patternId,a);case "goal":return Ft(t,a.facts,a.patternId,a)}},resumeBreakpoint(e,t){te(),t&>.set(e,t);for(let s of Object.keys(Y)){let n=fe(s);if(ze(n).pending.some(d=>d.id===e)){z.batch(()=>{let d=ze(n),l=[...d.resolved,e];Ze(n,{...d,pending:d.pending.filter(g=>g.id!==e),resolved:l.length>Dt?l.slice(-Dt):l});});return}}re&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,t){te(),t&&Rt.set(e,t);for(let s of Object.keys(Y)){let n=fe(s);if(ze(n).pending.some(d=>d.id===e)){z.batch(()=>{let d=ze(n),l=[...d.cancelled,e];Ze(n,{...d,pending:d.pending.filter(g=>g.id!==e),cancelled:l.length>Dt?l.slice(-Dt):l});});return}}re&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let t of Object.keys(Y)){let s=fe(t),n=ze(s);e.push(...n.pending);}return e},getLastReflectionHistory(){return Ne?[...Ne]:null},destroy(){en||(Cn.reset(),qt.clear(),pt.clear(),Gt.clear(),$t.clear(),en=true,z.destroy());}};return $e(),Cn}exports.$=_r;exports.A=Bn;exports.Aa=Bo;exports.B=Ot;exports.Ba=rs;exports.C=Qe;exports.D=gn;exports.E=Hn;exports.F=_t;exports.G=Jn;exports.H=mn;exports.I=Qr;exports.J=eo;exports.K=to;exports.L=no;exports.M=ro;exports.N=oo;exports.O=so;exports.P=ao;exports.Q=io;exports.R=uo;exports.S=Un;exports.T=Gn;exports.U=Ct;exports.V=Wr;exports.W=hn;exports.X=_e;exports.Y=ut;exports.Z=Cr;exports._=Or;exports.a=Ve;exports.aa=bn;exports.b=qn;exports.ba=go;exports.c=Kt;exports.ca=fo;exports.d=bt;exports.da=mo;exports.e=yt;exports.ea=ho;exports.f=cn;exports.fa=bo;exports.g=In;exports.ga=yo;exports.h=Nn;exports.ha=ko;exports.i=Jt;exports.ia=vo;exports.j=Wt;exports.ja=wo;exports.k=$n;exports.ka=Ro;exports.l=At;exports.la=So;exports.m=Ye;exports.ma=xo;exports.n=kt;exports.na=Do;exports.o=Xe;exports.oa=Oo;exports.p=dn;exports.pa=_o;exports.q=vt;exports.qa=Mo;exports.r=pn;exports.ra=Po;exports.s=wt;exports.sa=Io;exports.t=ze;exports.ta=No;exports.u=Ze;exports.ua=Wn;exports.v=Oe;exports.va=jo;exports.w=Xt;exports.wa=$o;exports.x=Ur;exports.xa=Go;exports.y=Dt;exports.ya=qo;exports.z=Ln;exports.za=Lo;//# sourceMappingURL=chunk-B4ATEGA2.cjs.map
|
|
50
|
-
//# sourceMappingURL=chunk-B4ATEGA2.cjs.map
|