@directive-run/ai 1.17.2 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ann-index-27QV9tPC.d.ts +616 -0
- package/dist/ann-index-HoZFIUA-.d.cts +616 -0
- package/dist/anthropic.d.cts +1 -1
- package/dist/anthropic.d.ts +1 -1
- package/dist/chunk-2PG26JZU.cjs +16 -0
- package/dist/chunk-2PG26JZU.cjs.map +1 -0
- package/dist/{chunk-7DPTXZZI.cjs → chunk-7EJN6TYX.cjs} +4 -4
- package/dist/chunk-7EJN6TYX.cjs.map +1 -0
- package/dist/{chunk-FN4GUZAI.js → chunk-G7CRWJT7.js} +4 -4
- package/dist/chunk-G7CRWJT7.js.map +1 -0
- package/dist/chunk-MIHH5GPT.js +16 -0
- package/dist/chunk-MIHH5GPT.js.map +1 -0
- package/dist/{chunk-56LYSE63.js → chunk-RHJAMXLS.js} +3 -3
- package/dist/{chunk-56LYSE63.js.map → chunk-RHJAMXLS.js.map} +1 -1
- package/dist/{chunk-PB276BX2.cjs → chunk-XGHNOSXT.cjs} +4 -4
- package/dist/{chunk-PB276BX2.cjs.map → chunk-XGHNOSXT.cjs.map} +1 -1
- package/dist/{debug-timeline-L13P-U2I.d.ts → debug-timeline-BGcPa0JO.d.ts} +1 -1
- package/dist/{debug-timeline-DpnRMnLU.d.cts → debug-timeline-Dn1lC_gK.d.cts} +1 -1
- package/dist/devtools.d.cts +5 -5
- package/dist/devtools.d.ts +5 -5
- package/dist/evals.d.cts +2 -2
- package/dist/evals.d.ts +2 -2
- package/dist/gemini.d.cts +1 -1
- package/dist/gemini.d.ts +1 -1
- package/dist/guardrails.cjs +1 -1
- package/dist/guardrails.cjs.map +1 -1
- package/dist/guardrails.d.cts +164 -592
- package/dist/guardrails.d.ts +164 -592
- package/dist/guardrails.js +1 -1
- package/dist/guardrails.js.map +1 -1
- package/dist/{health-monitor-C6xoXrQz.d.cts → health-monitor-Cq5sDvid.d.cts} +1 -1
- package/dist/{health-monitor-qL9RNMH3.d.ts → health-monitor-DtwmIJkb.d.ts} +1 -1
- package/dist/index.cjs +15 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +94 -11
- package/dist/index.d.ts +94 -11
- package/dist/index.js +15 -15
- package/dist/index.js.map +1 -1
- package/dist/multi-agent-orchestrator-OX2TKD5Y.cjs +2 -0
- package/dist/{multi-agent-orchestrator-KFYIDKTF.cjs.map → multi-agent-orchestrator-OX2TKD5Y.cjs.map} +1 -1
- package/dist/{multi-agent-orchestrator-ZHSMWIKP.js → multi-agent-orchestrator-RMTLPKB4.js} +2 -2
- package/dist/{multi-agent-orchestrator-ZHSMWIKP.js.map → multi-agent-orchestrator-RMTLPKB4.js.map} +1 -1
- package/dist/multi-agent.cjs +1 -1
- package/dist/multi-agent.d.cts +6 -6
- package/dist/multi-agent.d.ts +6 -6
- package/dist/multi-agent.js +1 -1
- package/dist/ollama.d.cts +1 -1
- package/dist/ollama.d.ts +1 -1
- package/dist/openai.d.cts +2 -2
- package/dist/openai.d.ts +2 -2
- package/dist/{orchestrator-types-ZK9lv5Sm.d.ts → orchestrator-types-C5D5JZUj.d.ts} +103 -3
- package/dist/{orchestrator-types-CbNE7Rjp.d.cts → orchestrator-types-s0766dDB.d.cts} +103 -3
- package/dist/predicate.d.cts +1 -1
- package/dist/predicate.d.ts +1 -1
- package/dist/{semantic-cache-DM7ev7NQ.d.cts → semantic-cache-Ba0-jEwb.d.cts} +1 -1
- package/dist/{semantic-cache-DM7ev7NQ.d.ts → semantic-cache-Ba0-jEwb.d.ts} +1 -1
- package/dist/testing.cjs +1 -1
- package/dist/testing.d.cts +4 -4
- package/dist/testing.d.ts +4 -4
- package/dist/testing.js +1 -1
- package/dist/{types-DJ09LjZX.d.cts → types-CUp1N0uU.d.cts} +1 -1
- package/dist/{types-DJ09LjZX.d.ts → types-CUp1N0uU.d.ts} +1 -1
- package/package.json +2 -2
- package/dist/chunk-7DPTXZZI.cjs.map +0 -1
- package/dist/chunk-D5APTMCT.cjs +0 -16
- package/dist/chunk-D5APTMCT.cjs.map +0 -1
- package/dist/chunk-FN4GUZAI.js.map +0 -1
- package/dist/chunk-YT4QN3KO.js +0 -16
- package/dist/chunk-YT4QN3KO.js.map +0 -1
- package/dist/multi-agent-orchestrator-KFYIDKTF.cjs +0 -2
|
@@ -23,7 +23,7 @@ ${r.join(`
|
|
|
23
23
|
Feedback on your previous response:
|
|
24
24
|
${r}
|
|
25
25
|
|
|
26
|
-
Please improve your response.`}function Br(s,r){let i=r.maxIterations??2,d=r.buildRetryInput??Rr,f=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(g,c,R)=>{let O=[],y=c,_=0,I=null;for(let L=0;L<i;L++){let he=Date.now(),ce=await s(g,y,R);I=ce,_+=ce.totalTokens;let Se={input:c,iteration:L,result:ce,history:[...O]},ke=await r.evaluate(ce.output,Se);O.push(ke);let Le=Date.now()-he;try{r.onIteration?.({iteration:L,passed:ke.passed,feedback:ke.feedback,score:ke.score,durationMs:Le});}catch{}if(ke.passed)return {...ce,totalTokens:_};if(r.budgetThreshold!==void 0&&_>=r.budgetThreshold)break;L<i-1&&ke.feedback&&(y=d(c,ke.feedback,L));}if(f==="throw")throw new xt({iterations:i,history:O,lastResult:I,totalTokens:_});return {...I,totalTokens:_}}}var At=200,Tr=0;function Gn(){return `bp_${Date.now().toString(36)}_${(++Tr).toString(36)}`}function Ln(s,r,i){for(let d of s)if(d.type===r){if(!d.when)return d;try{if(d.when(i))return d}catch{}}return null}function Ct(){return {pending:[],resolved:[],cancelled:[]}}var Bn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ke(){let s=Date.now().toString(36),r=crypto.randomUUID().slice(0,8);return `ckpt_${s}_${r}`}function fn(s){if(!s||typeof s!="object")return false;for(let d of Object.keys(s))if(Bn.has(d))return false;let r=s;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 d of Object.keys(r.localState))if(Bn.has(d))return false;let i=r.localState;return !(i.type!=="single"&&i.type!=="multi"||r.orchestratorType!=="single"&&r.orchestratorType!=="multi")}var Fn=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(!fn(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,d=[];for(let f of this.order){let g=this.store.get(f);if(!g)continue;if(new Date(g.createdAt).getTime()>=r)break;this.preserveLabeled&&g.label||d.push(f);}for(let f of d){this.store.delete(f);let g=this.order.indexOf(f);g>=0&&this.order.splice(g,1),i++;}return i}evictOldest(){if(this.preserveLabeled)for(let i=0;i<this.order.length;i++){let d=this.order[i],f=this.store.get(d);if(f&&!f.label)return this.order.splice(i,1),this.store.delete(d),true}let r=this.order.shift();return r?(this.store.delete(r),true):false}};var gn=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(d=>{this.pushWaiters.push(d);}),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 Kr(s,r={}){let{streamingGuardrails:i=[]}=r;return (d,f,g={})=>{let{signal:c,backpressure:R="buffer",bufferSize:O=1e3,guardrailCheckInterval:y=50,stopOnGuardrail:_=true}=g;if(y<=0||!Number.isFinite(y))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${y}`);let I=new gn(R,O),L=new AbortController,he="",ce=0,Se=false,ke=Date.now(),Le;c&&(Le=()=>L.abort(),c.addEventListener("abort",Le));let Wt=()=>{Le&&c&&c.removeEventListener("abort",Le);};async function Et(){for(let Z of i)try{let we=await Z.check(he,ce);if(!we.passed){let Be=Z.stopOnFail!==!1,Re={type:"guardrail_triggered",guardrailName:Z.name,reason:we.reason??"Guardrail check failed",partialOutput:he,stopped:Be};return await I.push(Re),Be&&(typeof _=="function"?_:()=>_)(Re)&&(Se=!0,L.abort()),Re}}catch{}return null}let at=(async()=>{await I.push({type:"progress",phase:"starting",message:"Starting agent"});try{let Z=await s(d,f,{signal:L.signal,onToken:async Re=>{Se||(ce++,he+=Re,await I.push({type:"token",data:Re,tokenCount:ce}),ce%y===0&&await Et());},onToolStart:async(Re,Ye,Fe)=>{await I.push({type:"progress",phase:"tool_calling",message:`Calling ${Re}`}),await I.push({type:"tool_start",tool:Re,toolCallId:Ye,arguments:Fe});},onToolEnd:async(Re,Ye,Fe)=>{await I.push({type:"tool_end",tool:Re,toolCallId:Ye,result:Fe}),await I.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async Re=>{await I.push({type:"message",message:Re});}});await Et();let we=Date.now()-ke,Be=I.getDroppedCount();return await I.push({type:"done",totalTokens:Z.totalTokens,duration:we,droppedTokens:Be}),I.close(),Z}catch(Z){let we={type:"error",error:Z instanceof Error?Z:new Error(String(Z)),partialOutput:he||void 0};throw await I.push(we),I.close(),Z}finally{Wt();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let Z=await I.pull();return Z===null?{done:true,value:void 0}:{done:false,value:Z}}}}},result:at,abort:()=>L.abort()}}}function Vr(s){let{checkFn:r,threshold:i=.8,stopOnFail:d=true}=s;return {name:"toxicity-streaming",stopOnFail:d,async check(f){let g=await r(f);return g>i?{passed:false,reason:`Toxicity score ${g.toFixed(2)} exceeds threshold ${i}`,severity:"critical"}:{passed:true}}}}function Yr(s){let{maxTokens:r,warnAt:i,stopOnFail:d=true}=s,f=false;return {name:"length-streaming",stopOnFail:d,check(g,c){return c>=r?{passed:false,reason:`Output exceeded maximum length of ${r} tokens`,severity:"error"}:i&&c>=i&&!f?(f=true,{passed:true,warning:`Approaching maximum length: ${c}/${r} tokens`,severity:"warning"}):{passed:true}}}}function Xr(s){let{patterns:r,stopOnFail:i=true}=s;return {name:"pattern-streaming",stopOnFail:i,check(d){for(let{regex:f,name:g}of r)if(f.lastIndex=0,f.test(d))return {passed:false,reason:`Detected ${g} pattern in output`,severity:"error"};return {passed:true}}}}function Zr(s,r={}){let{name:i="combined-streaming",stopOnFirstFail:d=true}=r;return {name:i,stopOnFail:d,async check(f,g){let c=[];for(let R of s){let O=await R.check(f,g);if(!O.passed){if(d)return {...O,reason:`[${R.name}] ${O.reason}`};c.push(`[${R.name}] ${O.reason??"failed"}`);}}return c.length>0?{passed:false,reason:c.join("; ")}:{passed:true}}}}function Qr(s,r,i={}){let{minTokens:d=0,stopOnFail:f=true}=i;return {name:s,stopOnFail:f,async check(g,c){if(c<d)return {passed:true};let R=await r({output:g,agentName:"streaming",input:"",messages:[]},{agentName:"streaming",input:"",facts:{}});return {passed:R.passed,reason:R.reason,severity:R.passed?void 0:"error"}}}}async function eo(s){let r="";for await(let i of s)i.type==="token"&&(r+=i.data);return r}async function*to(s,r){for await(let i of s)await r(i),yield i;}async function*no(s,r){let i=new Set(r);for await(let d of s)i.has(d.type)&&(yield d);}async function*ro(s,r){for await(let i of s)yield await r(i);}var Sr=1e4;function Hn(s){if(s.length===0)return {stream:{[Symbol.asyncIterator](){let _={done:true,value:void 0};return {async next(){return _},async return(){return _}}}},getDroppedCount:()=>0};let r=[],i=[],d=s.length,f=false,g=0;function c(y){if(f)return;let _=i.shift();if(_){_(y);return}r.length<Sr?r.push(y):g++;}function R(){if(d--,d<=0){f=true;for(let y of i)y(null);i.length=0;}}for(let y of s)(async()=>{try{for await(let _ of y.stream)c({chunk:_,agentId:y.agentId});}catch(_){c({chunk:{type:"error",error:_ instanceof Error?_:new Error(String(_))},agentId:y.agentId});}finally{R();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return r.length>0?{done:false,value:r.shift()}:f?{done:true,value:void 0}:new Promise(y=>{i.push(_=>{y(_===null?{done:true,value:void 0}:{done:false,value:_});});})},return(){f=true,r.length=0;for(let y of i)y(null);return i.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>g}}function mn(s,r){if(Object.is(s,r))return true;if(typeof s!=typeof r||s===null||r===null||typeof s!="object")return false;if(Array.isArray(s)){if(!Array.isArray(r)||s.length!==r.length)return false;for(let c=0;c<s.length;c++)if(s[c]!==r[c])return false;return true}let i=s,d=r,f=Object.keys(i),g=Object.keys(d);if(f.length!==g.length)return false;for(let c of f)if(i[c]!==d[c])return false;return true}var Ee=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,d)=>{let f,g={resolve:c=>{f&&r&&r.removeEventListener("abort",f),i(c);},reject:d};this.queue.push(g),r&&(f=()=>{let c=this.queue.indexOf(g);c>=0&&(this.queue.splice(c,1),d(new Error("[Directive Semaphore] Aborted while waiting for permit")));},r.addEventListener("abort",f,{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 d of i)d.reject(r);this.count=this.maxPermits;}};function ot(s){switch(s.type){case "sequential":return s.step;case "supervisor":return s.round;case "reflect":return s.iteration;case "debate":return s.round;case "dag":return s.completedCount;case "goal":return s.step}}function xr(s){let r=ot(s),i=s.stepsTotal??null;switch(s.type){case "sequential":{let d=s.results.reduce((c,R)=>c+R.totalTokens,0),f=s.results.length>0?d/s.results.length:0,g=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:f>0&&g!=null?Math.round(f*g):null,estimatedStepsRemaining:g}}case "supervisor":{let d=s.workerResults.reduce((g,c)=>g+c.totalTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "reflect":{let d=s.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "debate":{let d=s.tokensConsumed,f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "dag":{let d=i??Object.keys(s.statuses).length,f=s.completedCount,g=Object.values(s.nodeResults).reduce((O,y)=>O+y.totalTokens,0),c=f>0?g/f:0,R=d-f;return {percentage:d>0?Math.round(f/d*100):0,stepsCompleted:f,stepsTotal:d,tokensConsumed:g,estimatedTokensRemaining:R>0?Math.round(c*R):0,estimatedStepsRemaining:R}}case "goal":{let d=Object.values(s.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0),f=s.lastSatisfaction;return {percentage:Math.round(f*100),stepsCompleted:r,stepsTotal:i??null,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:s.stepMetrics.length>0?Ar(s):null}}}}function Ar(s){let r=s.stepMetrics;if(r.length<2)return null;let i=1-s.lastSatisfaction;if(i<=0)return 0;let f=r.reduce((g,c)=>g+Math.max(0,c.satisfactionDelta),0)/r.length;return f<=0?null:Math.ceil(i/f)}function Cr(s,r){if(s.type!==r.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${s.type} vs ${r.type}`);let i=f=>{switch(f.type){case "sequential":return f.results.reduce((g,c)=>g+c.totalTokens,0);case "supervisor":return f.workerResults.reduce((g,c)=>g+c.totalTokens,0);case "reflect":return f.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0);case "debate":return f.tokensConsumed;case "dag":return Object.values(f.nodeResults).reduce((g,c)=>g+c.totalTokens,0);case "goal":return Object.values(f.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0)}},d={patternType:s.type,stepDelta:ot(r)-ot(s),tokensDelta:i(r)-i(s)};if(s.type==="goal"&&r.type==="goal"){let f=new Set(Object.keys(s.facts)),g=new Set(Object.keys(r.facts)),c=[],R=[],O=[];for(let y of g)f.has(y)?JSON.stringify(s.facts[y])!==JSON.stringify(r.facts[y])&&O.push({key:y,before:s.facts[y],after:r.facts[y]}):c.push(y);for(let y of f)g.has(y)||R.push(y);d.facts={added:c,removed:R,changed:O};}if(s.type==="dag"&&r.type==="dag"){let f=new Set(Object.entries(s.statuses).filter(([,g])=>g==="completed").map(([g])=>g));d.nodesCompleted=Object.entries(r.statuses).filter(([g,c])=>c==="completed"&&!f.has(g)).map(([g])=>g);}if(s.type==="goal"&&r.type==="goal"){let f=new Set(s.completedNodes);d.nodesCompleted=r.completedNodes.filter(g=>!f.has(g));}return d}async function Er(s,r,i){let{createMultiAgentOrchestrator:d}=await import('./multi-agent-orchestrator-ZHSMWIKP.js'),f=await r.load(i);if(!f)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let g=structuredClone(f),c=d({...s,checkpointStore:r});return c.restore(g),c}function hn(s,r){let i=Object.keys(r);for(let[O,y]of Object.entries(r))for(let _ of y.deps??[])if(!r[_])throw new Error(`[Directive MultiAgent] DAG pattern "${s}": node "${O}" depends on unknown node "${_}"`);if(!i.some(O=>{let y=r[O]?.deps;return !y||y.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${s}": no root nodes (every node has dependencies)`);let f=Object.create(null),g=Object.create(null);for(let O of i)g[O]=[];for(let[O,y]of Object.entries(r)){f[O]=(y.deps??[]).length;for(let _ of y.deps??[])g[_].push(O);}let c=[];for(let O of i)f[O]===0&&c.push(O);let R=0;for(;c.length>0;){let O=c.shift();R++;for(let y of g[O]??[])f[y]--,f[y]===0&&c.push(y);}if(R!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${s}": cycle detected. Visited ${R}/${i.length} nodes.`)}function ao(s,r,i){return {type:"parallel",handlers:s,merge:r,...i}}function io(s,r){return {type:"sequential",handlers:s,...r}}function uo(s,r,i){return {type:"supervisor",supervisor:s,workers:r,...i}}function lo(s,r,i){return {type:"dag",nodes:s,merge:r??(d=>d.outputs),...i}}function co(s,r,i){return {type:"reflect",handler:s,evaluator:r,...i}}function po(s,r){return {type:"race",handlers:s,...r}}function fo(s,r,i){return {type:"goal",nodes:s,when:r,...i}}function go(){return {select:s=>s}}function mo(s){let r=s?.topN??3;return {select:(i,d)=>[...i].sort((g,c)=>{let R=d[g]?.avgSatisfactionDelta??0;return (d[c]?.avgSatisfactionDelta??0)-R}).slice(0,r)}}function ho(){return {select:(s,r)=>[...s].sort((d,f)=>{let g=r[d],c=r[f];if(!g||g.runs===0)return -1;if(!c||c.runs===0)return 1;let R=g.avgSatisfactionDelta>0?g.tokens/g.runs/g.avgSatisfactionDelta:Number.POSITIVE_INFINITY,O=c.avgSatisfactionDelta>0?c.tokens/c.runs/c.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return R-O})}}function yo(s){switch(s.type){case "parallel":return {type:"parallel",handlers:s.handlers,minSuccess:s.minSuccess,timeout:s.timeout};case "sequential":return {type:"sequential",handlers:s.handlers,continueOnError:s.continueOnError};case "supervisor":return {type:"supervisor",supervisor:s.supervisor,workers:s.workers,maxRounds:s.maxRounds};case "dag":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,deps:d.deps,timeout:d.timeout,priority:d.priority};return {type:"dag",nodes:r,timeout:s.timeout,maxConcurrent:s.maxConcurrent,onNodeError:s.onNodeError}}case "reflect":return {type:"reflect",handler:s.handler,evaluator:s.evaluator,maxIterations:s.maxIterations,onExhausted:s.onExhausted,timeout:s.timeout,threshold:typeof s.threshold=="number"?s.threshold:void 0};case "race":return {type:"race",handlers:s.handlers,timeout:s.timeout,minSuccess:s.minSuccess};case "debate":return {type:"debate",handlers:s.handlers,evaluator:s.evaluator,maxRounds:s.maxRounds,timeout:s.timeout};case "goal":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,produces:d.produces,requires:d.requires,allowRerun:d.allowRerun,priority:d.priority};return {type:"goal",nodes:r,maxSteps:s.maxSteps,timeout:s.timeout}}}}var Dr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function ko(s,r){if(!s||typeof s!="object"||!Dr.has(s.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${s?.type}"`);let i=Object.create(null);for(let[d,f]of Object.entries(s))d!=="__proto__"&&d!=="constructor"&&d!=="prototype"&&(i[d]=f);return {...i,...r}}function To(s,r,i,d){return {when:s,require:f=>{let g=typeof r=="function"?r(f):r,c=typeof i=="function"?i(f):i;return {type:"RUN_AGENT",agent:g,input:c}},priority:d}}function So(s,r,i){return {type:"RUN_AGENT",agent:s,input:r,context:i}}function xo(s,r=`
|
|
26
|
+
Please improve your response.`}function Br(s,r){let i=r.maxIterations??2,d=r.buildRetryInput??Rr,f=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(g,c,R)=>{let O=[],y=c,_=0,I=null;for(let L=0;L<i;L++){let he=Date.now(),ce=await s(g,y,R);I=ce,_+=ce.totalTokens;let Se={input:c,iteration:L,result:ce,history:[...O]},ke=await r.evaluate(ce.output,Se);O.push(ke);let Le=Date.now()-he;try{r.onIteration?.({iteration:L,passed:ke.passed,feedback:ke.feedback,score:ke.score,durationMs:Le});}catch{}if(ke.passed)return {...ce,totalTokens:_};if(r.budgetThreshold!==void 0&&_>=r.budgetThreshold)break;L<i-1&&ke.feedback&&(y=d(c,ke.feedback,L));}if(f==="throw")throw new xt({iterations:i,history:O,lastResult:I,totalTokens:_});return {...I,totalTokens:_}}}var At=200,Tr=0;function Gn(){return `bp_${Date.now().toString(36)}_${(++Tr).toString(36)}`}function Ln(s,r,i){for(let d of s)if(d.type===r){if(!d.when)return d;try{if(d.when(i))return d}catch{}}return null}function Ct(){return {pending:[],resolved:[],cancelled:[]}}var Bn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ke(){let s=Date.now().toString(36),r=crypto.randomUUID().slice(0,8);return `ckpt_${s}_${r}`}function fn(s){if(!s||typeof s!="object")return false;for(let d of Object.keys(s))if(Bn.has(d))return false;let r=s;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 d of Object.keys(r.localState))if(Bn.has(d))return false;let i=r.localState;return !(i.type!=="single"&&i.type!=="multi"||r.orchestratorType!=="single"&&r.orchestratorType!=="multi")}var Fn=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(!fn(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,d=[];for(let f of this.order){let g=this.store.get(f);if(!g)continue;if(new Date(g.createdAt).getTime()>=r)break;this.preserveLabeled&&g.label||d.push(f);}for(let f of d){this.store.delete(f);let g=this.order.indexOf(f);g>=0&&this.order.splice(g,1),i++;}return i}evictOldest(){if(this.preserveLabeled)for(let i=0;i<this.order.length;i++){let d=this.order[i],f=this.store.get(d);if(f&&!f.label)return this.order.splice(i,1),this.store.delete(d),true}let r=this.order.shift();return r?(this.store.delete(r),true):false}};var gn=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(d=>{this.pushWaiters.push(d);}),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 Kr(s,r={}){let{streamingGuardrails:i=[]}=r;return (d,f,g={})=>{let{signal:c,backpressure:R="buffer",bufferSize:O=1e3,guardrailCheckInterval:y=50,stopOnGuardrail:_=true}=g;if(y<=0||!Number.isFinite(y))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${y}`);let I=new gn(R,O),L=new AbortController,he="",ce=0,Se=false,ke=Date.now(),Le;c&&(Le=()=>L.abort(),c.addEventListener("abort",Le));let Wt=()=>{Le&&c&&c.removeEventListener("abort",Le);};async function Et(){for(let Z of i)try{let we=await Z.check(he,ce);if(!we.passed){let Be=Z.stopOnFail!==!1,Re={type:"guardrail_triggered",guardrailName:Z.name,reason:we.reason??"Guardrail check failed",partialOutput:he,stopped:Be};return await I.push(Re),Be&&(typeof _=="function"?_:()=>_)(Re)&&(Se=!0,L.abort()),Re}}catch{}return null}let at=(async()=>{await I.push({type:"progress",phase:"starting",message:"Starting agent"});try{let Z=await s(d,f,{signal:L.signal,onToken:async Re=>{Se||(ce++,he+=Re,await I.push({type:"token",data:Re,tokenCount:ce}),ce%y===0&&await Et());},onToolStart:async(Re,Ye,Fe)=>{await I.push({type:"progress",phase:"tool_calling",message:`Calling ${Re}`}),await I.push({type:"tool_start",tool:Re,toolCallId:Ye,arguments:Fe});},onToolEnd:async(Re,Ye,Fe)=>{await I.push({type:"tool_end",tool:Re,toolCallId:Ye,result:Fe}),await I.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async Re=>{await I.push({type:"message",message:Re});}});await Et();let we=Date.now()-ke,Be=I.getDroppedCount();return await I.push({type:"done",totalTokens:Z.totalTokens,duration:we,droppedTokens:Be}),I.close(),Z}catch(Z){let we={type:"error",error:Z instanceof Error?Z:new Error(String(Z)),partialOutput:he||void 0};throw await I.push(we),I.close(),Z}finally{Wt();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let Z=await I.pull();return Z===null?{done:true,value:void 0}:{done:false,value:Z}}}}},result:at,abort:()=>L.abort()}}}function Vr(s){let{checkFn:r,threshold:i=.8,stopOnFail:d=true}=s;return {name:"toxicity-streaming",stopOnFail:d,async check(f){let g=await r(f);return g>i?{passed:false,reason:`Toxicity score ${g.toFixed(2)} exceeds threshold ${i}`,severity:"critical"}:{passed:true}}}}function Yr(s){let{maxTokens:r,warnAt:i,stopOnFail:d=true}=s,f=false;return {name:"length-streaming",stopOnFail:d,check(g,c){return c>=r?{passed:false,reason:`Output exceeded maximum length of ${r} tokens`,severity:"error"}:i&&c>=i&&!f?(f=true,{passed:true,warning:`Approaching maximum length: ${c}/${r} tokens`,severity:"warning"}):{passed:true}}}}function Xr(s){let{patterns:r,stopOnFail:i=true}=s;return {name:"pattern-streaming",stopOnFail:i,check(d){for(let{regex:f,name:g}of r)if(f.lastIndex=0,f.test(d))return {passed:false,reason:`Detected ${g} pattern in output`,severity:"error"};return {passed:true}}}}function Zr(s,r={}){let{name:i="combined-streaming",stopOnFirstFail:d=true}=r;return {name:i,stopOnFail:d,async check(f,g){let c=[];for(let R of s){let O=await R.check(f,g);if(!O.passed){if(d)return {...O,reason:`[${R.name}] ${O.reason}`};c.push(`[${R.name}] ${O.reason??"failed"}`);}}return c.length>0?{passed:false,reason:c.join("; ")}:{passed:true}}}}function Qr(s,r,i={}){let{minTokens:d=0,stopOnFail:f=true}=i;return {name:s,stopOnFail:f,async check(g,c){if(c<d)return {passed:true};let R=await r({output:g,agentName:"streaming",input:"",messages:[]},{agentName:"streaming",input:"",facts:{}});return {passed:R.passed,reason:R.reason,severity:R.passed?void 0:"error"}}}}async function eo(s){let r="";for await(let i of s)i.type==="token"&&(r+=i.data);return r}async function*to(s,r){for await(let i of s)await r(i),yield i;}async function*no(s,r){let i=new Set(r);for await(let d of s)i.has(d.type)&&(yield d);}async function*ro(s,r){for await(let i of s)yield await r(i);}var Sr=1e4;function Hn(s){if(s.length===0)return {stream:{[Symbol.asyncIterator](){let _={done:true,value:void 0};return {async next(){return _},async return(){return _}}}},getDroppedCount:()=>0};let r=[],i=[],d=s.length,f=false,g=0;function c(y){if(f)return;let _=i.shift();if(_){_(y);return}r.length<Sr?r.push(y):g++;}function R(){if(d--,d<=0){f=true;for(let y of i)y(null);i.length=0;}}for(let y of s)(async()=>{try{for await(let _ of y.stream)c({chunk:_,agentId:y.agentId});}catch(_){c({chunk:{type:"error",error:_ instanceof Error?_:new Error(String(_))},agentId:y.agentId});}finally{R();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return r.length>0?{done:false,value:r.shift()}:f?{done:true,value:void 0}:new Promise(y=>{i.push(_=>{y(_===null?{done:true,value:void 0}:{done:false,value:_});});})},return(){f=true,r.length=0;for(let y of i)y(null);return i.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>g}}function mn(s,r){if(Object.is(s,r))return true;if(typeof s!=typeof r||s===null||r===null||typeof s!="object")return false;if(Array.isArray(s)){if(!Array.isArray(r)||s.length!==r.length)return false;for(let c=0;c<s.length;c++)if(s[c]!==r[c])return false;return true}let i=s,d=r,f=Object.keys(i),g=Object.keys(d);if(f.length!==g.length)return false;for(let c of f)if(i[c]!==d[c])return false;return true}var Ee=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,d)=>{let f,g={resolve:c=>{f&&r&&r.removeEventListener("abort",f),i(c);},reject:d};this.queue.push(g),r&&(f=()=>{let c=this.queue.indexOf(g);c>=0&&(this.queue.splice(c,1),d(new Error("[Directive Semaphore] Aborted while waiting for permit")));},r.addEventListener("abort",f,{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 d of i)d.reject(r);this.count=this.maxPermits;}};function ot(s){switch(s.type){case "sequential":return s.step;case "supervisor":return s.round;case "reflect":return s.iteration;case "debate":return s.round;case "dag":return s.completedCount;case "goal":return s.step}}function xr(s){let r=ot(s),i=s.stepsTotal??null;switch(s.type){case "sequential":{let d=s.results.reduce((c,R)=>c+R.totalTokens,0),f=s.results.length>0?d/s.results.length:0,g=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:f>0&&g!=null?Math.round(f*g):null,estimatedStepsRemaining:g}}case "supervisor":{let d=s.workerResults.reduce((g,c)=>g+c.totalTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "reflect":{let d=s.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "debate":{let d=s.tokensConsumed,f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "dag":{let d=i??Object.keys(s.statuses).length,f=s.completedCount,g=Object.values(s.nodeResults).reduce((O,y)=>O+y.totalTokens,0),c=f>0?g/f:0,R=d-f;return {percentage:d>0?Math.round(f/d*100):0,stepsCompleted:f,stepsTotal:d,tokensConsumed:g,estimatedTokensRemaining:R>0?Math.round(c*R):0,estimatedStepsRemaining:R}}case "goal":{let d=Object.values(s.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0),f=s.lastSatisfaction;return {percentage:Math.round(f*100),stepsCompleted:r,stepsTotal:i??null,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:s.stepMetrics.length>0?Ar(s):null}}}}function Ar(s){let r=s.stepMetrics;if(r.length<2)return null;let i=1-s.lastSatisfaction;if(i<=0)return 0;let f=r.reduce((g,c)=>g+Math.max(0,c.satisfactionDelta),0)/r.length;return f<=0?null:Math.ceil(i/f)}function Cr(s,r){if(s.type!==r.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${s.type} vs ${r.type}`);let i=f=>{switch(f.type){case "sequential":return f.results.reduce((g,c)=>g+c.totalTokens,0);case "supervisor":return f.workerResults.reduce((g,c)=>g+c.totalTokens,0);case "reflect":return f.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0);case "debate":return f.tokensConsumed;case "dag":return Object.values(f.nodeResults).reduce((g,c)=>g+c.totalTokens,0);case "goal":return Object.values(f.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0)}},d={patternType:s.type,stepDelta:ot(r)-ot(s),tokensDelta:i(r)-i(s)};if(s.type==="goal"&&r.type==="goal"){let f=new Set(Object.keys(s.facts)),g=new Set(Object.keys(r.facts)),c=[],R=[],O=[];for(let y of g)f.has(y)?JSON.stringify(s.facts[y])!==JSON.stringify(r.facts[y])&&O.push({key:y,before:s.facts[y],after:r.facts[y]}):c.push(y);for(let y of f)g.has(y)||R.push(y);d.facts={added:c,removed:R,changed:O};}if(s.type==="dag"&&r.type==="dag"){let f=new Set(Object.entries(s.statuses).filter(([,g])=>g==="completed").map(([g])=>g));d.nodesCompleted=Object.entries(r.statuses).filter(([g,c])=>c==="completed"&&!f.has(g)).map(([g])=>g);}if(s.type==="goal"&&r.type==="goal"){let f=new Set(s.completedNodes);d.nodesCompleted=r.completedNodes.filter(g=>!f.has(g));}return d}async function Er(s,r,i){let{createMultiAgentOrchestrator:d}=await import('./multi-agent-orchestrator-RMTLPKB4.js'),f=await r.load(i);if(!f)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let g=structuredClone(f),c=d({...s,checkpointStore:r});return c.restore(g),c}function hn(s,r){let i=Object.keys(r);for(let[O,y]of Object.entries(r))for(let _ of y.deps??[])if(!r[_])throw new Error(`[Directive MultiAgent] DAG pattern "${s}": node "${O}" depends on unknown node "${_}"`);if(!i.some(O=>{let y=r[O]?.deps;return !y||y.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${s}": no root nodes (every node has dependencies)`);let f=Object.create(null),g=Object.create(null);for(let O of i)g[O]=[];for(let[O,y]of Object.entries(r)){f[O]=(y.deps??[]).length;for(let _ of y.deps??[])g[_].push(O);}let c=[];for(let O of i)f[O]===0&&c.push(O);let R=0;for(;c.length>0;){let O=c.shift();R++;for(let y of g[O]??[])f[y]--,f[y]===0&&c.push(y);}if(R!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${s}": cycle detected. Visited ${R}/${i.length} nodes.`)}function ao(s,r,i){return {type:"parallel",handlers:s,merge:r,...i}}function io(s,r){return {type:"sequential",handlers:s,...r}}function uo(s,r,i){return {type:"supervisor",supervisor:s,workers:r,...i}}function lo(s,r,i){return {type:"dag",nodes:s,merge:r??(d=>d.outputs),...i}}function co(s,r,i){return {type:"reflect",handler:s,evaluator:r,...i}}function po(s,r){return {type:"race",handlers:s,...r}}function fo(s,r,i){return {type:"goal",nodes:s,when:r,...i}}function go(){return {select:s=>s}}function mo(s){let r=s?.topN??3;return {select:(i,d)=>[...i].sort((g,c)=>{let R=d[g]?.avgSatisfactionDelta??0;return (d[c]?.avgSatisfactionDelta??0)-R}).slice(0,r)}}function ho(){return {select:(s,r)=>[...s].sort((d,f)=>{let g=r[d],c=r[f];if(!g||g.runs===0)return -1;if(!c||c.runs===0)return 1;let R=g.avgSatisfactionDelta>0?g.tokens/g.runs/g.avgSatisfactionDelta:Number.POSITIVE_INFINITY,O=c.avgSatisfactionDelta>0?c.tokens/c.runs/c.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return R-O})}}function yo(s){switch(s.type){case "parallel":return {type:"parallel",handlers:s.handlers,minSuccess:s.minSuccess,timeout:s.timeout};case "sequential":return {type:"sequential",handlers:s.handlers,continueOnError:s.continueOnError};case "supervisor":return {type:"supervisor",supervisor:s.supervisor,workers:s.workers,maxRounds:s.maxRounds};case "dag":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,deps:d.deps,timeout:d.timeout,priority:d.priority};return {type:"dag",nodes:r,timeout:s.timeout,maxConcurrent:s.maxConcurrent,onNodeError:s.onNodeError}}case "reflect":return {type:"reflect",handler:s.handler,evaluator:s.evaluator,maxIterations:s.maxIterations,onExhausted:s.onExhausted,timeout:s.timeout,threshold:typeof s.threshold=="number"?s.threshold:void 0};case "race":return {type:"race",handlers:s.handlers,timeout:s.timeout,minSuccess:s.minSuccess};case "debate":return {type:"debate",handlers:s.handlers,evaluator:s.evaluator,maxRounds:s.maxRounds,timeout:s.timeout};case "goal":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,produces:d.produces,requires:d.requires,allowRerun:d.allowRerun,priority:d.priority};return {type:"goal",nodes:r,maxSteps:s.maxSteps,timeout:s.timeout}}}}var Dr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function ko(s,r){if(!s||typeof s!="object"||!Dr.has(s.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${s?.type}"`);let i=Object.create(null);for(let[d,f]of Object.entries(s))d!=="__proto__"&&d!=="constructor"&&d!=="prototype"&&(i[d]=f);return {...i,...r}}function To(s,r,i,d){return {when:s,require:f=>{let g=typeof r=="function"?r(f):r,c=typeof i=="function"?i(f):i;return {type:"RUN_AGENT",agent:g,input:c}},priority:d}}function So(s,r,i){return {type:"RUN_AGENT",agent:s,input:r,context:i}}function xo(s,r=`
|
|
27
27
|
|
|
28
28
|
`){return s.map(i=>typeof i.output=="string"?i.output:safeStringify(i.output)).join(r)}function Ao(s,r){if(s.length===0)throw new Error("[Directive MultiAgent] No results to pick from");return s.reduce((i,d)=>r(d)>r(i)?d:i)}function Co(s){return s.map(r=>r.output)}function Eo(s){return s.reduce((r,i)=>r+i.totalTokens,0)}function Do(...s){if(s.length===0)throw new Error("[Directive MultiAgent] composePatterns requires at least one pattern");return async(r,i)=>{let d=i,f;for(let g of s){switch(g.type){case "parallel":{let c=g,R=c.handlers.map(()=>d);f=await r.runParallel(c.handlers,R,c.merge,{minSuccess:c.minSuccess,timeout:c.timeout});break}case "sequential":{let c=g,R=await r.runSequential(c.handlers,d,{transform:c.transform}),O=R[R.length-1];f=c.extract?c.extract(O?.output):O?.output;break}case "supervisor":{let c=g,R=c.maxRounds??5;if(R<1||!Number.isFinite(R))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let O=[],y=await r.runAgent(c.supervisor,d);for(let _=0;_<R;_++){let I=y.output,L;if(typeof I=="string")try{L=JSON.parse(I);}catch{try{let ce=I.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),Se=a(ce);if(Se&&typeof Se=="object"&&"action"in Se)L=Se;else break}catch{break}}else if(I&&typeof I=="object"&&"action"in I)L=I;else break;if(L.action==="complete"||!L.worker||!c.workers.includes(L.worker))break;let he=await r.runAgent(L.worker,L.workerInput??"");O.push(he),y=await r.runAgent(c.supervisor,`Worker ${L.worker} completed with result: ${safeStringify(he.output)}`);}f=c.extract?c.extract(y.output,O):y.output;break}case "dag":{let c=g,R={input:d,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 O=Object.keys(c.nodes);for(let y of O){let _=c.nodes[y];R.statuses[y]="running";try{let I=d;if(_.transform)I=_.transform(R);else if(_.deps&&_.deps.length>0){let he=Object.create(null);for(let ce of _.deps)R.outputs[ce]!==void 0&&(he[ce]=R.outputs[ce]);I=JSON.stringify(he);}let L=await r.runAgent(_.handler,I);R.outputs[y]=L.output,R.results[y]=L,R.statuses[y]="completed";}catch(I){if(R.statuses[y]="error",R.errors[y]=I instanceof Error?I.message:String(I),c.onNodeError==="fail")throw I}}f=await c.merge(R);break}case "reflect":{let c=g,R=c.maxIterations??2,O=c.parseEvaluation??(L=>{if(typeof L=="string")try{return JSON.parse(L)}catch{return {passed:false,feedback:L}}return L&&typeof L=="object"&&"passed"in L?L:{passed:false,feedback:"Invalid evaluator output"}}),y=c.buildRetryInput??((L,he)=>`${L}
|
|
29
29
|
|
|
@@ -47,7 +47,7 @@ See: https://directive.run/docs/ai/multi-agent`));},ke);})}async function nr(e,t
|
|
|
47
47
|
Conversation context:
|
|
48
48
|
${w}`};}}if(s.metaContext){let b=cn(K.inspect());b&&(p={...p,instructions:`${p.instructions??""}
|
|
49
49
|
|
|
50
|
-
${b}`});}{let b=await et("pre_input_guardrails",e,p.name,h,n?.signal);if(b.skip)return u.status="completed",Qe(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=b.input;}let F=[...O.input??[],...t.guardrails?.input??[]].map((b,w)=>Ht(b,w,"input"));for(let b of F){let{name:w}=b,C={agentName:p.name,input:h,facts:Ce(l)},U=Date.now(),$=await Ut(b,{input:h,agentName:p.name},C);if(J("onGuardrailCheck",{agentId:e,guardrailName:w,guardrailType:"input",passed:$.passed,reason:$.reason,durationMs:Date.now()-U,timestamp:Date.now()}),!$.passed)throw new a$2({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${w}" failed: ${$.reason}`,guardrailName:w,guardrailType:"input",userMessage:$.reason??"Input validation failed",agentName:p.name,input:h});$.transformed!==void 0&&(h=$.transformed);}J("onAgentStart",{agentId:e,agentName:p.name,input:h,timestamp:a}),P&&P.record({type:"agent_start",timestamp:Date.now(),agentId:e,snapshotId:null,inputLength:h.length,..."description"in p&&p.description?{description:String(p.description)}:{},...p.instructions?{instructions:p.instructions.slice(0,Dt)}:{},input:h.slice(0,Dt)}),K.batch(()=>{let b=St(l);Ue(l,{...b,status:"running",input:h,startedAt:Date.now()});}),u.status="running",u.lastInput=h;{let b=await et("pre_agent_run",e,p.name,h,n?.signal);if(b.skip)return u.status="completed",Qe(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=b.input;}let M=r,N=n?.outputSchema!==void 0?n.outputSchema:t.outputSchema;N&&(M=b$1(r,{schema:N,maxRetries:n?.maxSchemaRetries??t.maxSchemaRetries??2,extractJson:t.extractJson,schemaDescription:t.schemaDescription}));let G=t.retry??I,A=await qn(M,p,h,{...t.runOptions,...n,signal:D.signal,onMessage:b=>{let C=[...dn(l),b];mt(l,C.length>Tn?C.slice(-Tn):C),n?.onMessage?.(b);},onToolCall:async b=>{let C=[...O.toolCall??[],...t.guardrails?.toolCall??[]].map((ue,te)=>Ht(ue,te,"toolCall"));for(let ue of C){let{name:te}=ue,re={agentName:p.name,input:h,facts:Ce(l)},tt=Date.now(),pe=await Ut(ue,{toolCall:b,agentName:p.name,input:h},re);if(J("onGuardrailCheck",{agentId:e,guardrailName:te,guardrailType:"toolCall",passed:pe.passed,reason:pe.reason,durationMs:Date.now()-tt,timestamp:Date.now()}),!pe.passed)throw new a$2({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${te}" failed: ${pe.reason}`,guardrailName:te,guardrailType:"toolCall",userMessage:pe.reason??"Tool call blocked",data:{toolCall:b},agentName:p.name,input:h})}if(!Se){let ue=`tool-${e}-${b.id}`,te={id:ue,type:"tool_call",agentName:p.name,description:`Tool call: ${b.name}`,data:b,requestedAt:Date.now()};it.set(ue,e),K.batch(()=>{let re=gt(l);Je(l,{...re,pending:[...re.pending,te]});}),ce?.(te),await tr(e,ue,n?.signal);}let $=[...pn(l),b];ht(l,$.length>Sn?$.slice(-Sn):$),n?.onToolCall?.(b);}},G?{...G,onRetry:(b,w,C)=>{G.onRetry?.(b,w,C),J("onAgentRetry",{agentId:e,agentName:p.name,input:h,attempt:b,error:w,delayMs:C,timestamp:Date.now()});}}:void 0);if((await et("pre_output_guardrails",e,p.name,h,n?.signal)).skip)return u.status="completed",Qe(),A;let v=[...O.output??[],...t.guardrails?.output??[]].map((b,w)=>Ht(b,w,"output"));for(let b of v){let{name:w}=b,C={agentName:p.name,input:h,facts:Ce(l)},U=Date.now(),$=await Ut(b,{output:A.output,agentName:p.name,input:h,messages:A.messages},C);if(J("onGuardrailCheck",{agentId:e,guardrailName:w,guardrailType:"output",passed:$.passed,reason:$.reason,durationMs:Date.now()-U,timestamp:Date.now()}),!$.passed)throw new a$2({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${w}" failed: ${$.reason}`,guardrailName:w,guardrailType:"output",userMessage:$.reason??"Output validation failed",agentName:p.name,input:h});$.transformed!==void 0&&(A.output=$.transformed);}K.batch(()=>{let b=St(l);Ue(l,{...b,status:"completed",output:A.output,tokenUsage:b.tokenUsage+A.totalTokens,turnCount:b.turnCount+A.messages.length,completedAt:Date.now()});}),u.status="completed",u.lastOutput=A.output,u.runCount++,u.totalTokens+=A.totalTokens,Qe();let B=ie("__coord"),H=!1,j=0;if(K.batch(()=>{let w=getBridgeFact(B,"__globalTokens")+A.totalTokens;if(Xe=w,setBridgeFact(B,"__globalTokens",w),L&&zt){j=w/L;let C=getBridgeFact(B,"__budgetWarningFired");j>=at&&!C&&(setBridgeFact(B,"__budgetWarningFired",!0),H=!0);}}),H)try{zt({currentTokens:Xe,maxBudget:L,percentage:j});}catch(b){ee&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",b);}if(k&&A.messages.length>0)try{let C=k.getContextMessages().some(U=>U.role==="user"&&U.content===h)?A.messages.filter(U=>!(U.role==="user"&&U.content===h)):A.messages;k.addMessages(C);}catch(b){ee&&console.debug("[Directive MultiAgent] Memory addMessages failed:",b);}if(J("onAgentComplete",{agentId:e,agentName:p.name,input:h,output:A.output,tokenUsage:A.totalTokens,durationMs:Date.now()-a,timestamp:Date.now()}),P){let b=typeof A.output=="string"?A.output:safeStringify(A.output);P.record({type:"agent_complete",timestamp:Date.now(),agentId:e,snapshotId:null,outputLength:b.length,totalTokens:A.totalTokens,inputTokens:A.tokenUsage?.inputTokens??0,outputTokens:A.tokenUsage?.outputTokens??0,durationMs:Date.now()-a,modelId:t.agent.model??void 0,output:b.slice(0,Dt)});}return Ae&&Ae.recordSuccess(e,Date.now()-a),Me(),await et("post_run",e,p.name,h,n?.signal),A}catch(k){if(u.status="error",u.lastError=k instanceof Error?k.message:String(k),Qe(),K.batch(()=>{let x=St(l);Ue(l,{...x,status:"error",error:k instanceof Error?k.message:String(k),completedAt:Date.now()});}),J("onAgentError",{agentId:e,agentName:p.name,input:h,error:k instanceof Error?k:new Error(String(k)),durationMs:Date.now()-a,timestamp:Date.now()}),P){let x={type:"agent_error",timestamp:Date.now(),agentId:e,snapshotId:null,errorMessage:k instanceof Error?k.message:String(k),durationMs:Date.now()-a};b$2(k)&&(x.guardrailName=k.guardrailName,x.guardrailType=k.guardrailType,x.errorCode=k.code),P.record(x);}throw Ae&&Ae.recordFailure(e,Date.now()-a,k instanceof Error?k:new Error(String(k))),Me(),k}finally{E&&clearTimeout(E),q&&n?.signal&&n.signal.removeEventListener("abort",q),S();}}function en(e,t,o={}){if(X(),Y[e]){let A=[],m=[],v=false,B=C=>{if(v)return;let U=m.shift();U?U(C):A.push(C);},H=()=>{v=true;for(let C of m)C(null);m.length=0;},j=new AbortController,b;o.signal&&(o.signal.aborted?j.abort():(b=()=>j.abort(),o.signal.addEventListener("abort",b,{once:true})));let w=de(e,t,{signal:j.signal}).then(C=>{let U=typeof C.output=="string"?C.output:safeStringify(C.output);return B({type:"token",data:U,tokenCount:0}),B({type:"done",totalTokens:0,duration:0,droppedTokens:0}),H(),C},C=>{throw B({type:"error",error:C}),H(),C}).finally(()=>{b&&o.signal&&o.signal.removeEventListener("abort",b);});return w.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let C=A.shift();if(C){if(yield C,C.type==="done"||C.type==="error")return}else {if(v)return;{let U=await new Promise($=>m.push($));if(!U||(yield U,U.type==="done"||U.type==="error"))return}}}}},result:w,abort:()=>{j.abort();}}}if(!W[e]){let A=[...Object.keys(W),...Object.keys(Y)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${A}`)}let l=1e4,u=1e5,p=new AbortController,h=[],T=[],S=false,D=Date.now(),E=0,q="",k;o.signal&&(k=()=>p.abort(),o.signal.addEventListener("abort",k,{once:true}));let x=()=>{k&&o.signal&&o.signal.removeEventListener("abort",k);},F=A=>{if(S)return;let m=T.shift();m?m(A):(h.length>=l&&h.shift(),h.push(A));},M=()=>{S=true,x();for(let A of T)A(null);T.length=0;},N=(async()=>{F({type:"progress",phase:"starting",message:"Running input guardrails"});try{let A=await de(e,t,{signal:p.signal,onMessage:v=>{if(F({type:"message",message:v}),v.role==="assistant"&&v.content){let B=Math.ceil(v.content.length/4);E+=B,q+=v.content,q.length>u&&(q=q.slice(-u)),F({type:"token",data:v.content,tokenCount:E});}},onToolCall:async v=>{F({type:"tool_start",tool:v.name,toolCallId:v.id,arguments:v.arguments}),v.result&&F({type:"tool_end",tool:v.name,toolCallId:v.id,result:v.result});}}),m=Date.now()-D;return F({type:"done",totalTokens:A.totalTokens,duration:m,droppedTokens:0}),M(),A}catch(A){throw A instanceof a$2&&F({type:"guardrail_triggered",guardrailName:A.guardrailName,reason:A.message,partialOutput:q,stopped:true}),F({type:"error",error:A instanceof Error?A:new Error(String(A))}),M(),A}})(),G={[Symbol.asyncIterator](){return {async next(){return h.length>0?{done:false,value:h.shift()}:S?{done:true,value:void 0}:new Promise(A=>{T.push(m=>{A(m===null?{done:true,value:void 0}:{done:false,value:m});});})}}}};return N.catch(()=>{}),{stream:G,result:N,abort:()=>{p.abort(),M();}}}async function rr(e,t,o){let n=Date.now();o&&J("onPatternStart",{patternId:o,patternType:"parallel",input:t,timestamp:n});let a=new AbortController,l;e.timeout&&(l=setTimeout(()=>a.abort(),e.timeout));let u;try{let p=e.handlers.map(S=>de(S,t,{signal:a.signal,patternId:o}).catch(D=>{if(e.minSuccess===void 0)throw D;return null})),h=await Promise.all(p),T=h.filter(S=>S!==null);if(e.minSuccess!==void 0&&T.length<e.minSuccess){let S=h.length-T.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${T.length}/${e.handlers.length} agents succeeded (minimum required: ${e.minSuccess}, failed: ${S})`)}return e.merge(T)}catch(p){throw u=p instanceof Error?p:new Error(String(p)),p}finally{l&&clearTimeout(l),o&&J("onPatternComplete",{patternId:o,patternType:"parallel",durationMs:Date.now()-n,timestamp:Date.now(),error:u});}}async function dt(e,t,o){let n=ot(e);if(o?.when)try{if(!o.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}),J("onCheckpointSave",{checkpointId:e.id,patternType:e.type,step:n,timestamp:Date.now()}),e.id}catch(a){let l=a instanceof Error?a:new Error(String(a));return console.error(`[Directive MultiAgent] ${e.type}: checkpoint save failed:`,l),J("onCheckpointError",{patternType:e.type,step:n,error:l,timestamp:Date.now()}),null}}async function tn(e,t,o,n){let a=Date.now(),l=o??"__inline_sequential";o&&J("onPatternStart",{patternId:o,patternType:"sequential",input:t,timestamp:a});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"sequential",S=n?.currentInput??t,D,E=n?.results?[...n.results]:[],q=n?.step??0,k;if(n&&E.length>0){let x=E[E.length-1];D={output:x.output,totalTokens:x.totalTokens,messages:[],toolCalls:[]};}try{for(let x=q;x<e.handlers.length;x++){let F=e.handlers[x];{let M=await et("pre_pattern_step",F,W[F]?.agent.name??F,S,void 0,{patternId:o});if(M.skip)continue;S=M.input;}try{if(D=await de(F,S,{patternId:o}),E.push({agentId:F,output:D.output,totalTokens:D.totalTokens}),x<e.handlers.length-1&&(e.transform?S=e.transform(D.output,F,x):S=typeof D.output=="string"?D.output:safeStringify(D.output)),u&&p&&x>q&&(x-q)%h===0){let M=x<e.handlers.length-1?S:t;await dt({type:"sequential",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:step-${x+1}`,patternId:l,stepsTotal:e.handlers.length,step:x+1,currentInput:M,results:[...E]},p,u);}}catch(M){if(!e.continueOnError)throw M}}if(!D)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return e.extract?e.extract(D.output):D.output}catch(x){throw k=x instanceof Error?x:new Error(String(x)),x}finally{o&&J("onPatternComplete",{patternId:o,patternType:"sequential",durationMs:Date.now()-a,timestamp:Date.now(),error:k});}}async function nn(e,t,o,n){let a$1=Date.now(),l=o??"__inline_supervisor";o&&J("onPatternStart",{patternId:o,patternType:"supervisor",input:t,timestamp:a$1});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"supervisor",S=[],D=n?.workerResults?[...n.workerResults]:[],E=e.maxRounds??5;if(E<1||!Number.isFinite(E))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let q;if(n)for(let x of n.workerResults)S.push({output:x.output,totalTokens:x.totalTokens,messages:[],toolCalls:[]});let k=n?.round??0;try{let x;n?x={output:n.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:x=await de(e.supervisor,t);let F=n?.currentInput??t;for(let M=k;M<E;M++){let N=x.output,G;if(typeof N=="string")try{let m=N.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();G=JSON.parse(m);}catch{try{let m=N.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),v=a(m);if(v&&typeof v=="object"&&"action"in v)G=v;else throw new Error("extracted value missing 'action' property")}catch{throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned unparseable output (round ${M+1}). Expected JSON with { action, worker?, workerInput? } but got: ${N.slice(0,200)}`)}}else if(N&&typeof N=="object"&&"action"in N)G=N;else throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned invalid output (round ${M+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(G.action==="complete"||!G.worker)break;if(!e.workers.includes(G.worker)){let m=e.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${G.worker}". Available workers: ${m}`)}let A=await de(G.worker,G.workerInput??"",{patternId:o});S.push(A),D.push({output:A.output,totalTokens:A.totalTokens}),F=`Worker ${G.worker} completed with result: ${safeStringify(A.output)}`,x=await de(e.supervisor,F,{patternId:o}),u&&p&&M>k&&(M-k)%h===0&&await dt({type:"supervisor",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:round-${M+1}`,patternId:l,stepsTotal:e.maxRounds??10,round:M+1,supervisorOutput:x.output,workerResults:[...D],currentInput:F},p,u);}return e.extract?e.extract(x.output,S):x.output}catch(x){throw q=x instanceof Error?x:new Error(String(x)),x}finally{o&&J("onPatternComplete",{patternId:o,patternType:"supervisor",durationMs:Date.now()-a$1,timestamp:Date.now(),error:q});}}async function rn(e,t,o,n){let a=Date.now(),l=o??"__inline_dag";o&&J("onPatternStart",{patternId:o,patternType:"dag",input:t,timestamp:a});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"dag",S=n?.completedCount??0,D=0,E=Promise.resolve(),q=Object.keys(e.nodes).length,k={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))k.statuses[m]="pending";if(n){for(let[m,v]of Object.entries(n.statuses))k.statuses[m]=v;for(let[m,v]of Object.entries(n.outputs))k.outputs[m]=v;for(let[m,v]of Object.entries(n.errors))k.errors[m]=v;for(let[m,v]of Object.entries(n.nodeResults))k.results[m]={output:v.output,totalTokens:v.totalTokens,messages:[],toolCalls:[]};}let x=e.onNodeError??"fail",F=e.maxConcurrent??Number.POSITIVE_INFINITY,M=new AbortController,N,G;e.timeout&&(N=setTimeout(()=>M.abort(),e.timeout));try{let B=function(){for(let[j,b]of Object.entries(e.nodes)){if(k.statuses[j]!=="pending")continue;let w=x==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((b.deps??[]).every(U=>w.has(k.statuses[U]))){if(x==="skip-downstream"&&(b.deps??[]).some($=>k.statuses[$]==="error"||k.statuses[$]==="skipped")){k.statuses[j]="skipped",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"skipped",deps:b.deps??[]}),J("onDagNodeSkipped",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",reason:"upstream dependency errored",timestamp:Date.now()});continue}if(b.when)try{if(!b.when(k)){k.statuses[j]="skipped",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"skipped",deps:b.deps??[]}),J("onDagNodeSkipped",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",reason:"when() returned false",timestamp:Date.now()});continue}}catch{k.statuses[j]="skipped";continue}k.statuses[j]="ready";}}};var A=B;if(!n)for(let[j,b]of Object.entries(e.nodes))(!b.deps||b.deps.length===0)&&(k.statuses[j]="ready");let m=new Set,v=0;async function H(j,b){let w=Date.now();k.statuses[j]="running",P&&P.record({type:"dag_node_update",timestamp:w,snapshotId:null,nodeId:j,status:"running",deps:b.deps??[]}),J("onDagNodeStart",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",timestamp:w});let C;if(b.transform)C=b.transform(k);else if(b.deps&&b.deps.length>0){let te=Object.create(null);for(let re of b.deps)k.outputs[re]!==void 0&&(te[re]=k.outputs[re]);C=JSON.stringify(te);}else C=t;let U=new AbortController,$;b.timeout&&($=setTimeout(()=>U.abort(),b.timeout));let ue=()=>U.abort();M.signal.addEventListener("abort",ue,{once:!0});try{let te=await de(b.handler,C,{signal:U.signal,patternId:l});if(k.outputs[j]=te.output,k.results[j]=te,k.statuses[j]="completed",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"completed",deps:b.deps??[]}),J("onDagNodeComplete",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",durationMs:Date.now()-w,timestamp:Date.now()}),S++,u&&p&&S>D&&S-D>=h){D=S;let re=Object.create(null);for(let[pe,De]of Object.entries(k.results))re[pe]={output:De.output,totalTokens:De.totalTokens};let tt={type:"dag",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:node-${S}`,patternId:l,stepsTotal:q,statuses:{...k.statuses},outputs:{...k.outputs},errors:{...k.errors},completedCount:S,nodeResults:re,input:k.input};E=E.then(()=>dt(tt,p,u)),await E;}}catch(te){if(k.statuses[j]="error",k.errors[j]=te instanceof Error?te.message:String(te),P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"error",deps:b.deps??[]}),J("onDagNodeError",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",error:te instanceof Error?te:new Error(String(te)),durationMs:Date.now()-w,timestamp:Date.now()}),x==="fail")throw M.abort(),te}finally{$&&clearTimeout($),M.signal.removeEventListener("abort",ue),v--;}}for(;!M.signal.aborted;){B();let j=Object.entries(e.nodes).filter(([w])=>k.statuses[w]==="ready").sort(([,w],[,C])=>(C.priority??0)-(w.priority??0));for(let[w,C]of j){if(v>=F)break;v++;let U=H(w,C).finally(()=>{m.delete(U);});m.add(U);}if(!Object.values(k.statuses).some(w=>w==="pending"||w==="running"||w==="ready"))break;if(m.size>0)await Promise.race(m);else break}return m.size>0&&await Promise.allSettled(m),await e.merge(k)}catch(m){throw G=m instanceof Error?m:new Error(String(m)),m}finally{N&&clearTimeout(N),o&&J("onPatternComplete",{patternId:o,patternType:"dag",durationMs:Date.now()-a,timestamp:Date.now(),error:G});}}async function Nt(e,t,o,n){let a=Date.now(),l=o??"__inline_reflect",u=e.maxIterations??2;if(u<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");ee&&u>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let p=e.signal,h,T;if(e.timeout&&!p){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),p=m.signal;}else if(e.timeout&&p){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),T=()=>m.abort(),p.addEventListener("abort",T,{once:true}),p=m.signal;}let S=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"}}),D=e.buildRetryInput??((m,v,B)=>`${m}
|
|
50
|
+
${b}`});}{let b=await et("pre_input_guardrails",e,p.name,h,n?.signal);if(b.skip)return u.status="completed",Qe(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=b.input;}let F=[...O.input??[],...t.guardrails?.input??[]].map((b,w)=>Ht(b,w,"input"));for(let b of F){let{name:w}=b,C={agentName:p.name,input:h,facts:Ce(l)},U=Date.now(),$=await Ut(b,{input:h,agentName:p.name},C);if(J("onGuardrailCheck",{agentId:e,guardrailName:w,guardrailType:"input",passed:$.passed,reason:$.reason,durationMs:Date.now()-U,timestamp:Date.now()}),!$.passed)throw new a$2({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${w}" failed: ${$.reason}`,guardrailName:w,guardrailType:"input",userMessage:$.reason??"Input validation failed",agentName:p.name,input:h});$.transformed!==void 0&&(h=$.transformed);}J("onAgentStart",{agentId:e,agentName:p.name,input:h,timestamp:a}),P&&P.record({type:"agent_start",timestamp:Date.now(),agentId:e,snapshotId:null,inputLength:h.length,..."description"in p&&p.description?{description:String(p.description)}:{},...p.instructions?{instructions:p.instructions.slice(0,Dt)}:{},input:h.slice(0,Dt)}),K.batch(()=>{let b=St(l);Ue(l,{...b,status:"running",input:h,startedAt:Date.now()});}),u.status="running",u.lastInput=h;{let b=await et("pre_agent_run",e,p.name,h,n?.signal);if(b.skip)return u.status="completed",Qe(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=b.input;}let M=r,N=n?.outputSchema!==void 0?n.outputSchema:t.outputSchema;N&&(M=b$1(r,{schema:N,maxRetries:n?.maxSchemaRetries??t.maxSchemaRetries??2,extractJson:t.extractJson,schemaDescription:t.schemaDescription}));let G=t.retry??I,A=await qn(M,p,h,{...t.runOptions,...n,signal:D.signal,onMessage:b=>{let C=[...dn(l),b];mt(l,C.length>Tn?C.slice(-Tn):C),n?.onMessage?.(b);},onToolCall:async b=>{let C=[...O.toolCall??[],...t.guardrails?.toolCall??[]].map((ue,te)=>Ht(ue,te,"toolCall"));for(let ue of C){let{name:te}=ue,re={agentName:p.name,input:h,facts:Ce(l)},tt=Date.now(),pe=await Ut(ue,{toolCall:b,agentName:p.name,input:h},re);if(J("onGuardrailCheck",{agentId:e,guardrailName:te,guardrailType:"toolCall",passed:pe.passed,reason:pe.reason,durationMs:Date.now()-tt,timestamp:Date.now()}),!pe.passed)throw new a$2({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${te}" failed: ${pe.reason}`,guardrailName:te,guardrailType:"toolCall",userMessage:pe.reason??"Tool call blocked",data:{toolCall:b},agentName:p.name,input:h})}if(!Se){let ue=`tool-${e}-${b.id}`,te={id:ue,type:"tool_call",agentName:p.name,description:`Tool call: ${b.name}`,data:b,requestedAt:Date.now()};it.set(ue,e),K.batch(()=>{let re=gt(l);Je(l,{...re,pending:[...re.pending,te]});}),ce?.(te),await tr(e,ue,n?.signal);}let $=[...pn(l),b];ht(l,$.length>Sn?$.slice(-Sn):$),n?.onToolCall?.(b);}},G?{...G,onRetry:(b,w,C)=>{G.onRetry?.(b,w,C),J("onAgentRetry",{agentId:e,agentName:p.name,input:h,attempt:b,error:w,delayMs:C,timestamp:Date.now()});}}:void 0);if((await et("pre_output_guardrails",e,p.name,h,n?.signal)).skip)return u.status="completed",Qe(),A;let v=[...O.output??[],...t.guardrails?.output??[]].map((b,w)=>Ht(b,w,"output"));for(let b of v){let{name:w}=b,C={agentName:p.name,input:h,facts:Ce(l)},U=Date.now(),$=await Ut(b,{output:A.output,agentName:p.name,input:h,messages:A.messages},C);if(J("onGuardrailCheck",{agentId:e,guardrailName:w,guardrailType:"output",passed:$.passed,reason:$.reason,durationMs:Date.now()-U,timestamp:Date.now()}),!$.passed)throw new a$2({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${w}" failed: ${$.reason}`,guardrailName:w,guardrailType:"output",userMessage:$.reason??"Output validation failed",agentName:p.name,input:h});$.transformed!==void 0&&(A.output=$.transformed);}K.batch(()=>{let b=St(l);Ue(l,{...b,status:"completed",output:A.output,tokenUsage:b.tokenUsage+A.totalTokens,turnCount:b.turnCount+A.messages.length,completedAt:Date.now()});}),u.status="completed",u.lastOutput=A.output,u.runCount++,u.totalTokens+=A.totalTokens,Qe();let B=ie("__coord"),H=!1,j=0;if(K.batch(()=>{let w=getBridgeFact(B,"__globalTokens")+A.totalTokens;if(Xe=w,setBridgeFact(B,"__globalTokens",w),L&&zt){j=w/L;let C=getBridgeFact(B,"__budgetWarningFired");j>=at&&!C&&(setBridgeFact(B,"__budgetWarningFired",!0),H=!0);}}),H)try{zt({currentTokens:Xe,maxBudget:L,percentage:j});}catch(b){ee&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",b);}if(k&&A.messages.length>0)try{let C=k.getContextMessages().some(U=>U.role==="user"&&U.content===h)?A.messages.filter(U=>!(U.role==="user"&&U.content===h)):A.messages;k.addMessages(C);}catch(b){ee&&console.debug("[Directive MultiAgent] Memory addMessages failed:",b);}if(J("onAgentComplete",{agentId:e,agentName:p.name,input:h,output:A.output,tokenUsage:A.totalTokens,durationMs:Date.now()-a,timestamp:Date.now()}),P){let b=typeof A.output=="string"?A.output:safeStringify(A.output);P.record({type:"agent_complete",timestamp:Date.now(),agentId:e,snapshotId:null,outputLength:b.length,totalTokens:A.totalTokens,inputTokens:A.tokenUsage?.inputTokens??0,outputTokens:A.tokenUsage?.outputTokens??0,durationMs:Date.now()-a,modelId:t.agent.model??void 0,output:b.slice(0,Dt)});}return Ae&&Ae.recordSuccess(e,Date.now()-a),Me(),await et("post_run",e,p.name,h,n?.signal),A}catch(k){if(u.status="error",u.lastError=k instanceof Error?k.message:String(k),Qe(),K.batch(()=>{let x=St(l);Ue(l,{...x,status:"error",error:k instanceof Error?k.message:String(k),completedAt:Date.now()});}),J("onAgentError",{agentId:e,agentName:p.name,input:h,error:k instanceof Error?k:new Error(String(k)),durationMs:Date.now()-a,timestamp:Date.now()}),P){let x={type:"agent_error",timestamp:Date.now(),agentId:e,snapshotId:null,errorMessage:k instanceof Error?k.message:String(k),durationMs:Date.now()-a};b$2(k)&&(x.guardrailName=k.guardrailName,x.guardrailType=k.guardrailType,x.errorCode=k.code),P.record(x);}throw Ae&&Ae.recordFailure(e,Date.now()-a,k instanceof Error?k:new Error(String(k))),Me(),k}finally{E&&clearTimeout(E),q&&n?.signal&&n.signal.removeEventListener("abort",q),S();}}function en(e,t,o={}){if(X(),Y[e]){let A=[],m=[],v=false,B=C=>{if(v)return;let U=m.shift();U?U(C):A.push(C);},H=()=>{v=true;for(let C of m)C(null);m.length=0;},j=new AbortController,b;o.signal&&(o.signal.aborted?j.abort():(b=()=>j.abort(),o.signal.addEventListener("abort",b,{once:true})));let w=de(e,t,{signal:j.signal}).then(C=>{let U=typeof C.output=="string"?C.output:safeStringify(C.output);return B({type:"token",data:U,tokenCount:0}),B({type:"done",totalTokens:0,duration:0,droppedTokens:0}),H(),C},C=>{throw B({type:"error",error:C}),H(),C}).finally(()=>{b&&o.signal&&o.signal.removeEventListener("abort",b);});return w.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let C=A.shift();if(C){if(yield C,C.type==="done"||C.type==="error")return}else {if(v)return;{let U=await new Promise($=>m.push($));if(!U||(yield U,U.type==="done"||U.type==="error"))return}}}}},result:w,abort:()=>{j.abort();},interrupt:()=>{j.abort();}}}if(!W[e]){let A=[...Object.keys(W),...Object.keys(Y)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${A}`)}let l=1e4,u=1e5,p=new AbortController,h=[],T=[],S=false,D=Date.now(),E=0,q="",k;o.signal&&(k=()=>p.abort(),o.signal.addEventListener("abort",k,{once:true}));let x=()=>{k&&o.signal&&o.signal.removeEventListener("abort",k);},F=A=>{if(S)return;let m=T.shift();m?m(A):(h.length>=l&&h.shift(),h.push(A));},M=()=>{S=true,x();for(let A of T)A(null);T.length=0;},N=(async()=>{F({type:"progress",phase:"starting",message:"Running input guardrails"});try{let A=await de(e,t,{signal:p.signal,onMessage:v=>{if(F({type:"message",message:v}),v.role==="assistant"&&v.content){let B=Math.ceil(v.content.length/4);E+=B,q+=v.content,q.length>u&&(q=q.slice(-u)),F({type:"token",data:v.content,tokenCount:E});}},onToolCall:async v=>{F({type:"tool_start",tool:v.name,toolCallId:v.id,arguments:v.arguments}),v.result&&F({type:"tool_end",tool:v.name,toolCallId:v.id,result:v.result});}}),m=Date.now()-D;return F({type:"done",totalTokens:A.totalTokens,duration:m,droppedTokens:0}),M(),A}catch(A){throw A instanceof a$2&&F({type:"guardrail_triggered",guardrailName:A.guardrailName,reason:A.message,partialOutput:q,stopped:true}),F({type:"error",error:A instanceof Error?A:new Error(String(A))}),M(),A}})(),G={[Symbol.asyncIterator](){return {async next(){return h.length>0?{done:false,value:h.shift()}:S?{done:true,value:void 0}:new Promise(A=>{T.push(m=>{A(m===null?{done:true,value:void 0}:{done:false,value:m});});})}}}};return N.catch(()=>{}),{stream:G,result:N,abort:()=>{p.abort(),M();},interrupt:()=>{p.abort(),M();}}}async function rr(e,t,o){let n=Date.now();o&&J("onPatternStart",{patternId:o,patternType:"parallel",input:t,timestamp:n});let a=new AbortController,l;e.timeout&&(l=setTimeout(()=>a.abort(),e.timeout));let u;try{let p=e.handlers.map(S=>de(S,t,{signal:a.signal,patternId:o}).catch(D=>{if(e.minSuccess===void 0)throw D;return null})),h=await Promise.all(p),T=h.filter(S=>S!==null);if(e.minSuccess!==void 0&&T.length<e.minSuccess){let S=h.length-T.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${T.length}/${e.handlers.length} agents succeeded (minimum required: ${e.minSuccess}, failed: ${S})`)}return e.merge(T)}catch(p){throw u=p instanceof Error?p:new Error(String(p)),p}finally{l&&clearTimeout(l),o&&J("onPatternComplete",{patternId:o,patternType:"parallel",durationMs:Date.now()-n,timestamp:Date.now(),error:u});}}async function dt(e,t,o){let n=ot(e);if(o?.when)try{if(!o.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}),J("onCheckpointSave",{checkpointId:e.id,patternType:e.type,step:n,timestamp:Date.now()}),e.id}catch(a){let l=a instanceof Error?a:new Error(String(a));return console.error(`[Directive MultiAgent] ${e.type}: checkpoint save failed:`,l),J("onCheckpointError",{patternType:e.type,step:n,error:l,timestamp:Date.now()}),null}}async function tn(e,t,o,n){let a=Date.now(),l=o??"__inline_sequential";o&&J("onPatternStart",{patternId:o,patternType:"sequential",input:t,timestamp:a});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"sequential",S=n?.currentInput??t,D,E=n?.results?[...n.results]:[],q=n?.step??0,k;if(n&&E.length>0){let x=E[E.length-1];D={output:x.output,totalTokens:x.totalTokens,messages:[],toolCalls:[]};}try{for(let x=q;x<e.handlers.length;x++){let F=e.handlers[x];{let M=await et("pre_pattern_step",F,W[F]?.agent.name??F,S,void 0,{patternId:o});if(M.skip)continue;S=M.input;}try{if(D=await de(F,S,{patternId:o}),E.push({agentId:F,output:D.output,totalTokens:D.totalTokens}),x<e.handlers.length-1&&(e.transform?S=e.transform(D.output,F,x):S=typeof D.output=="string"?D.output:safeStringify(D.output)),u&&p&&x>q&&(x-q)%h===0){let M=x<e.handlers.length-1?S:t;await dt({type:"sequential",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:step-${x+1}`,patternId:l,stepsTotal:e.handlers.length,step:x+1,currentInput:M,results:[...E]},p,u);}}catch(M){if(!e.continueOnError)throw M}}if(!D)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return e.extract?e.extract(D.output):D.output}catch(x){throw k=x instanceof Error?x:new Error(String(x)),x}finally{o&&J("onPatternComplete",{patternId:o,patternType:"sequential",durationMs:Date.now()-a,timestamp:Date.now(),error:k});}}async function nn(e,t,o,n){let a$1=Date.now(),l=o??"__inline_supervisor";o&&J("onPatternStart",{patternId:o,patternType:"supervisor",input:t,timestamp:a$1});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"supervisor",S=[],D=n?.workerResults?[...n.workerResults]:[],E=e.maxRounds??5;if(E<1||!Number.isFinite(E))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let q;if(n)for(let x of n.workerResults)S.push({output:x.output,totalTokens:x.totalTokens,messages:[],toolCalls:[]});let k=n?.round??0;try{let x;n?x={output:n.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:x=await de(e.supervisor,t);let F=n?.currentInput??t;for(let M=k;M<E;M++){let N=x.output,G;if(typeof N=="string")try{let m=N.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();G=JSON.parse(m);}catch{try{let m=N.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),v=a(m);if(v&&typeof v=="object"&&"action"in v)G=v;else throw new Error("extracted value missing 'action' property")}catch{throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned unparseable output (round ${M+1}). Expected JSON with { action, worker?, workerInput? } but got: ${N.slice(0,200)}`)}}else if(N&&typeof N=="object"&&"action"in N)G=N;else throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned invalid output (round ${M+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(G.action==="complete"||!G.worker)break;if(!e.workers.includes(G.worker)){let m=e.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${G.worker}". Available workers: ${m}`)}let A=await de(G.worker,G.workerInput??"",{patternId:o});S.push(A),D.push({output:A.output,totalTokens:A.totalTokens}),F=`Worker ${G.worker} completed with result: ${safeStringify(A.output)}`,x=await de(e.supervisor,F,{patternId:o}),u&&p&&M>k&&(M-k)%h===0&&await dt({type:"supervisor",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:round-${M+1}`,patternId:l,stepsTotal:e.maxRounds??10,round:M+1,supervisorOutput:x.output,workerResults:[...D],currentInput:F},p,u);}return e.extract?e.extract(x.output,S):x.output}catch(x){throw q=x instanceof Error?x:new Error(String(x)),x}finally{o&&J("onPatternComplete",{patternId:o,patternType:"supervisor",durationMs:Date.now()-a$1,timestamp:Date.now(),error:q});}}async function rn(e,t,o,n){let a=Date.now(),l=o??"__inline_dag";o&&J("onPatternStart",{patternId:o,patternType:"dag",input:t,timestamp:a});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"dag",S=n?.completedCount??0,D=0,E=Promise.resolve(),q=Object.keys(e.nodes).length,k={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))k.statuses[m]="pending";if(n){for(let[m,v]of Object.entries(n.statuses))k.statuses[m]=v;for(let[m,v]of Object.entries(n.outputs))k.outputs[m]=v;for(let[m,v]of Object.entries(n.errors))k.errors[m]=v;for(let[m,v]of Object.entries(n.nodeResults))k.results[m]={output:v.output,totalTokens:v.totalTokens,messages:[],toolCalls:[]};}let x=e.onNodeError??"fail",F=e.maxConcurrent??Number.POSITIVE_INFINITY,M=new AbortController,N,G;e.timeout&&(N=setTimeout(()=>M.abort(),e.timeout));try{let B=function(){for(let[j,b]of Object.entries(e.nodes)){if(k.statuses[j]!=="pending")continue;let w=x==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((b.deps??[]).every(U=>w.has(k.statuses[U]))){if(x==="skip-downstream"&&(b.deps??[]).some($=>k.statuses[$]==="error"||k.statuses[$]==="skipped")){k.statuses[j]="skipped",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"skipped",deps:b.deps??[]}),J("onDagNodeSkipped",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",reason:"upstream dependency errored",timestamp:Date.now()});continue}if(b.when)try{if(!b.when(k)){k.statuses[j]="skipped",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"skipped",deps:b.deps??[]}),J("onDagNodeSkipped",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",reason:"when() returned false",timestamp:Date.now()});continue}}catch{k.statuses[j]="skipped";continue}k.statuses[j]="ready";}}};var A=B;if(!n)for(let[j,b]of Object.entries(e.nodes))(!b.deps||b.deps.length===0)&&(k.statuses[j]="ready");let m=new Set,v=0;async function H(j,b){let w=Date.now();k.statuses[j]="running",P&&P.record({type:"dag_node_update",timestamp:w,snapshotId:null,nodeId:j,status:"running",deps:b.deps??[]}),J("onDagNodeStart",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",timestamp:w});let C;if(b.transform)C=b.transform(k);else if(b.deps&&b.deps.length>0){let te=Object.create(null);for(let re of b.deps)k.outputs[re]!==void 0&&(te[re]=k.outputs[re]);C=JSON.stringify(te);}else C=t;let U=new AbortController,$;b.timeout&&($=setTimeout(()=>U.abort(),b.timeout));let ue=()=>U.abort();M.signal.addEventListener("abort",ue,{once:!0});try{let te=await de(b.handler,C,{signal:U.signal,patternId:l});if(k.outputs[j]=te.output,k.results[j]=te,k.statuses[j]="completed",P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"completed",deps:b.deps??[]}),J("onDagNodeComplete",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",durationMs:Date.now()-w,timestamp:Date.now()}),S++,u&&p&&S>D&&S-D>=h){D=S;let re=Object.create(null);for(let[pe,De]of Object.entries(k.results))re[pe]={output:De.output,totalTokens:De.totalTokens};let tt={type:"dag",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:node-${S}`,patternId:l,stepsTotal:q,statuses:{...k.statuses},outputs:{...k.outputs},errors:{...k.errors},completedCount:S,nodeResults:re,input:k.input};E=E.then(()=>dt(tt,p,u)),await E;}}catch(te){if(k.statuses[j]="error",k.errors[j]=te instanceof Error?te.message:String(te),P&&P.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"error",deps:b.deps??[]}),J("onDagNodeError",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",error:te instanceof Error?te:new Error(String(te)),durationMs:Date.now()-w,timestamp:Date.now()}),x==="fail")throw M.abort(),te}finally{$&&clearTimeout($),M.signal.removeEventListener("abort",ue),v--;}}for(;!M.signal.aborted;){B();let j=Object.entries(e.nodes).filter(([w])=>k.statuses[w]==="ready").sort(([,w],[,C])=>(C.priority??0)-(w.priority??0));for(let[w,C]of j){if(v>=F)break;v++;let U=H(w,C).finally(()=>{m.delete(U);});m.add(U);}if(!Object.values(k.statuses).some(w=>w==="pending"||w==="running"||w==="ready"))break;if(m.size>0)await Promise.race(m);else break}return m.size>0&&await Promise.allSettled(m),await e.merge(k)}catch(m){throw G=m instanceof Error?m:new Error(String(m)),m}finally{N&&clearTimeout(N),o&&J("onPatternComplete",{patternId:o,patternType:"dag",durationMs:Date.now()-a,timestamp:Date.now(),error:G});}}async function Nt(e,t,o,n){let a=Date.now(),l=o??"__inline_reflect",u=e.maxIterations??2;if(u<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");ee&&u>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let p=e.signal,h,T;if(e.timeout&&!p){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),p=m.signal;}else if(e.timeout&&p){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),T=()=>m.abort(),p.addEventListener("abort",T,{once:true}),p=m.signal;}let S=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"}}),D=e.buildRetryInput??((m,v,B)=>`${m}
|
|
51
51
|
|
|
52
52
|
Feedback on your previous response:
|
|
53
53
|
${v}
|
|
@@ -63,5 +63,5 @@ ${Object.entries(S).map(([$,ue])=>` - ${$}: ${ue}`).join(`
|
|
|
63
63
|
${Object.entries(S).map(([$,ue])=>` - ${$}: ${ue}`).join(`
|
|
64
64
|
`)}`)));});});await Promise.all(q).catch(()=>{});let F=x[0],M=F.agentId,N=new Set(x.map(v=>v.agentId)),G=D.filter(v=>!N.has(v)&&!(v in S));P&&(P.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:l,winnerId:M,durationMs:Date.now()-a}),G.length>0&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:l,cancelledIds:G,reason:"winner_found"}));let A=e.extract?e.extract(F.result):F.result.output,m=n>1?x.map(v=>({agentId:v.agentId,result:e.extract?e.extract(v.result):v.result.output})):void 0;return {winnerId:M,result:A,allResults:m}}catch(E){throw T=E instanceof Error?E:new Error(String(E)),P&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:l,cancelledIds:D,reason:u.signal.aborted?"timeout":"all_failed"}),E}finally{p&&clearTimeout(p),h&&e.signal&&e.signal.removeEventListener("abort",h),o&&J("onPatternComplete",{patternId:l,patternType:"race",durationMs:Date.now()-a,timestamp:Date.now(),error:T});}}async function qt(e,t,o,n){let{handlers:a,evaluator:l,maxRounds:u=2,extract:p,parseJudgement:h}=e;if(a.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(u<1||!Number.isFinite(u))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let T=e.signal,S,D;if(e.timeout&&!T){let w=new AbortController;S=setTimeout(()=>w.abort(),e.timeout),T=w.signal;}else if(e.timeout&&T){let w=new AbortController;S=setTimeout(()=>w.abort(),e.timeout),D=()=>w.abort(),T.addEventListener("abort",D,{once:true}),T=w.signal;}let q=h??(w=>{if(typeof w=="string")try{let C=JSON.parse(w);return C&&typeof C=="object"&&typeof C.winnerId=="string"?C:(ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:a[0]})}catch{return ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:a[0]}}return w&&typeof w=="object"&&"winnerId"in w&&typeof w.winnerId=="string"?w:(ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:a[0]})}),k=n?.rounds?[...n.rounds]:[],x=n?.currentInput??t,F=n?.lastWinnerId??a[0],M=n?.lastWinnerOutput??void 0,N=n?.round??0,G=e.checkpoint,A=G?.store??we,m=G?.everyN??5,v=G?.labelPrefix??"debate",B=o??"__inline_debate",H=Date.now(),j=n?.tokensConsumed??0;o&&J("onPatternStart",{patternId:B,patternType:"debate",input:t,timestamp:H});let b;try{for(let C=N;C<u&&!T?.aborted;C++){let U=a.map(async pe=>{let De=await de(pe,x,{signal:T,patternId:B});return j+=De.totalTokens,{agentId:pe,output:De.output}}),$=await Promise.all(U);if(T?.aborted)break;let ue=JSON.stringify({round:C+1,totalRounds:u,proposals:$.map(pe=>({agentId:pe.agentId,proposal:pe.output}))}),te=await de(l,ue,{signal:T,patternId:B});j+=te.totalTokens;let re=q(te.output);if(a.includes(re.winnerId)||(re.winnerId=a[0]),k.push({proposals:$,judgement:re}),P&&P.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:B,round:C+1,totalRounds:u,winnerId:re.winnerId,score:re.score,agentCount:a.length}),F=re.winnerId,M=$.find(pe=>pe.agentId===re.winnerId)?.output??$[0].output,G&&A&&C>N&&(C-N)%m===0){let pe={type:"debate",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${v}:round-${C+1}`,patternId:B,stepsTotal:u,round:C+1,currentInput:x,rounds:[...k],lastWinnerId:F,lastWinnerOutput:M,tokensConsumed:j};await dt(pe,A,G);}C<u-1&&re.feedback&&(x=`Previous round feedback: ${re.feedback}
|
|
65
65
|
|
|
66
|
-
Original task: ${t}`);}if(k.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let w=p?p(M):M;return {winnerId:F,result:w,rounds:k}}catch(w){throw b=w instanceof Error?w:new Error(String(w)),w}finally{S&&clearTimeout(S),D&&e.signal&&e.signal.removeEventListener("abort",D),o&&J("onPatternComplete",{patternId:B,patternType:"debate",durationMs:Date.now()-H,timestamp:Date.now(),error:b});}}let or=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function pt(e,t){for(let o of Object.keys(t))or.has(o)||(e[o]=t[o]);}function sr(e,t){let o=Object.create(null);for(let[h,T]of Object.entries(t))for(let S of T.produces)o[S]||(o[S]=[]),o[S].push(h);let n=Object.keys(t),a=Object.create(null),l=Object.create(null);for(let h of n)a[h]=0,l[h]=[];for(let[h,T]of Object.entries(t))for(let S of T.requires??[]){let D=o[S];if(D)for(let E of D)E!==h&&(l[E].push(h),a[h]=(a[h]??0)+1);}let u=[];for(let h of n)a[h]===0&&u.push(h);let p=0;for(;u.length>0;){let h=u.shift();p++;for(let T of l[h]??[])a[T]--,a[T]===0&&u.push(T);}if(p!==n.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${p}/${n.length} nodes.`)}function ar(e,t){let o=Object.create(null);for(let[n,a]of Object.entries(t))for(let l of a.produces)o[l]||(o[l]=[]),o[l].push(n);for(let[n,a]of Object.entries(o))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${n}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function be(e,...t){if(e)try{return e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}async function ir(e,...t){if(e)try{return await e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}function on(e,t,o){let n=t.slice(-3),a=n.length>0?n.reduce((p,h)=>p+h.satisfactionDelta,0)/n.length:0,l=null;a>0&&e<1&&(l=Math.ceil((1-e)/a));let u=false;if(t.length>=6){let p=t.slice(-3),h=t.slice(-6,-3),T=p.reduce((D,E)=>D+E.satisfactionDelta,0)/3,S=h.reduce((D,E)=>D+E.satisfactionDelta,0)/3;u=T<S*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:l,decelerating:u}}function yt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Gt(e,t,o,n){let{nodes:a,when:l,satisfaction:u,maxSteps:p=50,extract:h,selectionStrategy:T,relaxation:S,onStep:D,onStall:E}=e,q=Object.create(null);for(let[Q,ne]of Object.entries(a))q[Q]={...ne};if(Object.keys(q).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let x=o??"__goal";for(let[Q,ne]of Object.entries(q))if(!W[ne.handler]&&!Y[ne.handler])throw new Error(`[Directive MultiAgent] goal node "${Q}" references unregistered handler "${ne.handler}"`);sr(x,q),ar(x,q);for(let[Q,ne]of Object.entries(q))ne.extractOutput||console.warn(`[Directive MultiAgent] goal node "${Q}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let F=e.signal,M,N,G=e.timeout??3e5;if(G&&!F){let Q=new AbortController;M=setTimeout(()=>Q.abort(),G),F=Q.signal;}else if(G&&F){let Q=new AbortController;M=setTimeout(()=>Q.abort(),G),N=()=>Q.abort(),F.addEventListener("abort",N,{once:true}),F=Q.signal;}let A=Date.now();if(P){let Q=Object.values(q).map(ne=>ne.handler);P.record({type:"pattern_start",timestamp:A,snapshotId:null,patternId:x,patternType:"goal",handlers:Q,taskIds:Q.filter(ne=>Y[ne]!=null)});}J("onPatternStart",{patternId:x,patternType:"goal",input:typeof t=="string"?t:JSON.stringify(t),timestamp:A});let m=Object.create(null);n?pt(m,n.facts):typeof t=="string"?m.input=t:pt(m,t);let v=n?[...n.executionOrder]:[],B=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.nodeOutputs))B[Q]={output:ne.output,totalTokens:ne.totalTokens};let H=n?[...n.stepMetrics]:[],j=n?[...n.relaxations]:[],b=new Set(n?.completedNodes??[]),w=new Map(n?Object.entries(n.failedNodes).map(([Q,ne])=>[Q,ne]):[]),C=new Map(n?Object.entries(n.nodeInputHashes):[]),U=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.agentMetrics))U[Q]={runs:ne.runs,avgSatisfactionDelta:ne.runs>0?ne.totalDelta/ne.runs:0,tokens:ne.tokens,totalDelta:ne.totalDelta};let $=n?.stallSteps??0,ue=n?.appliedRelaxationTiers??0,te=n?.lastSatisfaction??0,re,tt=false,pe=n?.step??0,De=e.checkpoint,dr=De?.everyN??5,En=De?.store??we,pr=De?.labelPrefix??"goal",Dn,fr=3;try{for(let ae=pe;ae<p;ae++){if(be(l,m)===!0){tt=!0;let V=Date.now()-A,z=Object.values(B).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!0,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j}}if(F?.aborted){let V=Date.now()-A,z=Object.values(B).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j,error:"Aborted or timed out"}}let nt=[];for(let[V,z]of Object.entries(q)){if((w.get(V)??0)>=fr)continue;let oe=z.requires??[];if(oe.every(le=>m[le]!=null)){if(b.has(V)){if(!z.allowRerun)continue;let le=JSON.stringify(oe.map(ye=>m[ye]));if(C.get(V)===le)continue}nt.push(V);}}let He=nt;if(T&&nt.length>0){let V=u?be(u,m)??0:be(l,m)===!0?1:0,z=yt(V),oe=on(z,H,ae),fe=Object.create(null);for(let[ye,se]of Object.entries(U))fe[ye]={runs:se.runs,avgSatisfactionDelta:se.runs>0?se.totalDelta/se.runs:0,tokens:se.tokens};let le=T.select(nt,fe,oe);He=le&&le.length>0?le:nt;}if(He.sort((V,z)=>(q[z].priority??0)-(q[V].priority??0)),be(D,ae,{...m},He),He.length===0){$++;let V=!1;if(S)for(let z=ue;z<S.length;z++){let oe=S[z],fe=oe.afterStallSteps??3;if($>=fe){let le=oe.strategy;switch(le.type){case "allow_rerun":for(let ye of le.nodes)b.delete(ye),C.delete(ye);break;case "alternative_nodes":for(let ye of le.nodes){let se=`__relaxation_${z}_${ye.handler}`;q[se]={...ye};}break;case "inject_facts":pt(m,le.facts);break;case "accept_partial":{let ye=Date.now()-A,se=Object.values(B).reduce((ge,_e)=>ge+_e.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:ae,totalTokens:se,durationMs:ye,stepMetrics:H,relaxations:j,error:`Accepted partial result via relaxation tier "${oe.label}"`}}case "custom":{let ye=be(u,m)??0,se={step:ae,facts:{...m},metrics:on(yt(ye),H,ae),completedNodes:new Set(b),failedNodes:new Map(w)};await ir(le.apply,se);break}}j.push({step:ae,tierIndex:z,label:oe.label,strategy:le.type}),ue=z+1,$=0,V=!0;break}}if(!V){let z=be(u,m)??0,oe=on(yt(z),H,ae);if(be(E,ae,oe),!S||ue>=S.length){let fe=Date.now()-A,le=Object.values(B).reduce((ye,se)=>ye+se.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:ae,totalTokens:le,durationMs:fe,stepMetrics:H,relaxations:j,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}$=0;let gr=Date.now(),mr=u?be(u,m)??0:be(l,m)===!0?1:0,hr=yt(mr),On=0,ft=[],br=He.map(async V=>{let z=q[V],oe=z.requires??[],fe=JSON.stringify(oe.map(se=>m[se]));C.set(V,fe);let le,ye=be(z.buildInput,m);if(ye!=null)le=ye;else {let se=Object.create(null);for(let ge of oe)m[ge]!=null&&(se[ge]=m[ge]);Object.keys(se).length>0?le=JSON.stringify(se):m.input!=null?le=String(m.input):le=JSON.stringify(m);}try{let se=await de(z.handler,le,{signal:F??void 0,patternId:x});if(B[V]=se,v.push(V),b.add(V),w.delete(V),z.extractOutput){let ge=be(z.extractOutput,se);ge&&(pt(m,ge),ft.push(...Object.keys(ge)));}else {let ge=se.output;if(ge&&typeof ge=="object")pt(m,ge),ft.push(...Object.keys(ge));else if(typeof ge=="string")try{let _e=JSON.parse(ge);if(_e&&typeof _e=="object"&&!Array.isArray(_e))pt(m,_e),ft.push(...Object.keys(_e));else for(let Pn of z.produces)m[Pn]=ge,ft.push(Pn);}catch{for(let _e of z.produces)m[_e]=ge,ft.push(_e);}}return On+=se.totalTokens,{nodeId:V,success:!0}}catch(se){let ge=(w.get(V)??0)+1;return w.set(V,ge),{nodeId:V,success:!1,error:se}}});await Promise.allSettled(br);let yr=u?be(u,m)??0:be(l,m)===!0?1:0,Lt=yt(yr),Bt=Lt-hr;if(H.push({step:ae,durationMs:Date.now()-gr,nodesRun:[...He],factsProduced:ft,satisfaction:Lt,satisfactionDelta:Bt,tokensConsumed:On}),P)for(let V of He){let z=q[V];P.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:z.handler,step:ae,nodeId:V,satisfaction:Lt,satisfactionDelta:Bt});}for(let V of He){let z=q[V];U[z.handler]||(U[z.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let oe=U[z.handler];oe.runs++,oe.totalDelta+=Bt,oe.tokens+=B[V]?.totalTokens??0;}if(te=Lt,Bt<=0?$++:$=0,De&&En&&ae>pe&&(ae-pe)%dr===0){let V={type:"goal",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${pr}:step-${ae}`,patternId:x,stepsTotal:p,step:ae+1,facts:structuredClone(m),completedNodes:[...b],failedNodes:Object.fromEntries(w),nodeInputHashes:Object.fromEntries(C),nodeOutputs:Object.fromEntries(Object.entries(B).map(([oe,fe])=>[oe,{output:fe.output,totalTokens:fe.totalTokens}])),executionOrder:[...v],stepMetrics:[...H],relaxations:[...j],appliedRelaxationTiers:ue,stallSteps:$,lastSatisfaction:te,agentMetrics:Object.fromEntries(Object.entries(U).map(([oe,fe])=>[oe,{runs:fe.runs,totalDelta:fe.totalDelta,tokens:fe.tokens}]))},z=await dt(V,En,De);z&&(Dn=z);}}let Q=Date.now()-A,ne=Object.values(B).reduce((ae,nt)=>ae+nt.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:p,totalTokens:ne,durationMs:Q,stepMetrics:H,relaxations:j,error:`Max steps (${p}) exhausted without achieving goal`}}catch(Q){throw re=Q instanceof Error?Q:new Error(String(Q)),Q}finally{if(M!=null&&clearTimeout(M),N&&e.signal&&e.signal.removeEventListener("abort",N),P){let Q=Object.values(B).reduce((ne,ae)=>ne+ae.totalTokens,0);P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:x,patternType:"goal",durationMs:Date.now()-A,achieved:tt,stepMetrics:H,relaxations:j,totalTokens:Q,...re?{error:re.message}:{}});}J("onPatternComplete",{patternId:x,patternType:"goal",durationMs:Date.now()-A,timestamp:Date.now(),error:re});}}function ur(e){if(!Z)return [];let t=[],o=new Set;if(o.add(e),Z.equivalencyGroups){for(let n of Object.values(Z.equivalencyGroups))if(n.includes(e))for(let a of n)!o.has(a)&&W[a]&&(t.push(a),o.add(a));}if(Z.useCapabilities!==false){let n=W[e];if(n?.capabilities&&n.capabilities.length>0)for(let[a,l]of Object.entries(W)){if(o.has(a))continue;let u=l.capabilities??[];n.capabilities.every(p=>u.includes(p))&&(t.push(a),o.add(a));}}if(Ae){let n=Z.healthThreshold??30;return t.filter(a=>Ae.getHealthScore(a)>n)}return t}function lr(e){if(e.length===0)return null;if(!Z||!Ae)return e[0]??null;if(Z.selectionStrategy==="round-robin"&&Ne){let n=[...e].sort().join(","),a=Ne.get(n)??0,l=e[a%e.length];return Ne.set(n,a+1),l}let t=e[0],o=Ae.getHealthScore(t);for(let n=1;n<e.length;n++){let a=Ae.getHealthScore(e[n]);a>o&&(t=e[n],o=a);}return t}function cr(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:K,get facts(){return K.facts},get timeline(){return P},get healthMonitor(){return Ae},get derived(){return Object.freeze({...ut})},onDerivedChange(e){return It.add(e),()=>{It.delete(e);}},get scratchpad(){return Zt},runAgent:de,runAgentStream:en,async runPattern(e,t){X();let o=d$1[e];if(!o){let l=Object.keys(d$1).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${l}`)}let n=Date.now();if(P){let l=cr(o);P.record({type:"pattern_start",timestamp:n,snapshotId:null,patternId:e,patternType:o.type,handlers:l,taskIds:l.filter(u=>Y[u]!=null)});}let a;try{switch(o.type){case "parallel":return await rr(o,t,e);case "sequential":return await tn(o,t,e);case "supervisor":return await nn(o,t,e);case "dag":return await rn(o,t,e);case "reflect":return await Nt(o,t,e);case "race":return (await An(o,t,e)).result;case "debate":return (await qt(o,t,e)).result;case "goal":return (await Gt(o,t,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${o.type}`)}}catch(l){throw a=l instanceof Error?l:new Error(String(l)),l}finally{P&&P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:o.type,durationMs:Date.now()-n,...a?{error:a.message}:{}});}},async runParallel(e,t,o,n){X();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 l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));try{let p=e.map((S,D)=>de(S,a[D],{signal:l.signal}).catch(E=>{if(n?.minSuccess!==void 0)return null;throw E})),h=await Promise.all(p),T=h.filter(S=>S!==null);if(n?.minSuccess!==void 0&&T.length<n.minSuccess){let S=h.length-T.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${T.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess}, failed: ${S})`)}return o(T)}finally{u&&clearTimeout(u);}},async runSequential(e,t,o){X();let n=[],a=t;for(let l=0;l<e.length;l++){let u=e[l],p=await de(u,a);n.push(p),l<e.length-1&&(o?.transform?a=o.transform(p.output,u,l):a=typeof p.output=="string"?p.output:safeStringify(p.output));}return n},async handoff(e,t,o,n){if(X(),!W[e]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${u}`)}if(!W[t]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${t}" not found. Registered: ${u}`)}{let u=await et("pre_handoff",e,W[e].agent.name,o,void 0,{handoff:{fromAgent:e,toAgent:t}});if(u.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};o=u.input;}let a={id:`handoff-${++_t}`,fromAgent:e,toAgent:t,input:o,context:n,requestedAt:Date.now()};Pe.push(a);try{f?.(a);}catch(u){ee&&console.debug("[Directive MultiAgent] onHandoff threw:",u);}J("onHandoff",a),P&&P.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t});let l=W[t].memory??_;if(l&&n)try{let u=Object.entries(n).map(([p,h])=>`${p}: ${safeStringify(h)}`).join(", ");l.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${u}`}]);}catch(u){ee&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",u);}try{let u=await de(t,o),p={request:a,result:u,completedAt:Date.now()};Zn(p);try{g$1?.(p);}catch(T){ee&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",T);}J("onHandoffComplete",p),P&&P.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t,durationMs:p.completedAt-a.requestedAt});let h=Pe.indexOf(a);return h>=0&&Pe.splice(h,1),u}catch(u){let p=Pe.indexOf(a);throw p>=0&&Pe.splice(p,1),u}},approve(e){X();let t=it.get(e);if(t){it.delete(e);let o=ie(t);K.batch(()=>{let n=gt(o),a=200,l=[...n.approved,e];Je(o,{...n,pending:n.pending.filter(u=>u.id!==e),approved:l.length>a?l.slice(-a):l});});return}ee&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,t){X();let o=it.get(e);if(o){it.delete(e);let n=ie(o);K.batch(()=>{let a=gt(n);t&&ee&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${t}`);let l={id:e,reason:t,rejectedAt:Date.now()},u=200,p=[...a.rejected,l];Je(n,{...a,pending:a.pending.filter(h=>h.id!==e),rejected:p.length>u?p.slice(-u):p});});return}ee&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){X(),qe="paused",ee&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){X(),qe==="paused"&&(qe="idle",ee&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let t=ve[e];return t?{...t}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(ve).map(([e,t])=>[e,{...t}]))},getPendingHandoffs(){return [...Pe]},get totalTokens(){return Xe},waitForIdle(e){let t=()=>Mt===0&&Object.values(ve).every(o=>o.status==="idle"||o.status==="completed"||o.status==="error");return t()?Promise.resolve():new Promise((o,n)=>{let a=null,l=()=>{jt.delete(u),a&&clearTimeout(a);},u=()=>{t()&&(l(),o());};jt.add(u),e!==void 0&&(a=setTimeout(()=>{l(),n(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,t,o){return de(e,t,o)},runStream(e,t,o){return en(e,t,o)},registerAgent(e,t){if(X(),Ot.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(Y[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let o=t.constraints?Jt(t.constraints):{},n=Object.create(null);if(t.resolvers)for(let[l,u]of Object.entries(t.resolvers))n[l]={requirement:u.requirement,key:u.key,resolve:async(p,h)=>{let T=Ce(h.facts),D={facts:{...h.facts,...T},runAgent:async(E,q,k)=>r(E,q,k),signal:h.signal};return u.resolve(p,D)}};let a=createModule(e,{schema:i,init:l=>{Ue(l,{status:"idle",currentAgent:t.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(l,{pending:[],approved:[],rejected:[]}),mt(l,[]),ht(l,[]),ze(l,Ct());},constraints:o,resolvers:Object.keys(n).length>0?n:void 0});K.registerModule(e,a),W[e]=t,Ge.set(e,new Ee(t.maxConcurrent??1)),ve[e]={status:"idle",runCount:0,totalTokens:0},ee&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${t.agent.name})`),Me();},unregisterAgent(e){if(X(),!W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(ve[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,l]of Object.entries(d$1)){let u;switch(l.type){case "supervisor":u=[l.supervisor,...l.workers];break;case "dag":u=Object.values(l.nodes).map(p=>p.handler);break;case "reflect":u=[l.handler,l.evaluator];break;case "parallel":case "sequential":case "race":u=l.handlers;break;case "debate":u=[...l.handlers,l.evaluator];break;default:u=[];}u.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let o=Ge.get(e);o&&(o.drain(),Ge.delete(e));let n=ie(e);n&&K.batch(()=>{Ue(n,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(n,{pending:[],approved:[],rejected:[]}),mt(n,[]),ht(n,[]),ze(n,Ct());}),delete W[e],delete ve[e],ee&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),Me();},getAgentIds(){return Object.keys(W)},registerTask(e,t){if(X(),Ot.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(W[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(Y[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:o,delayMs:n}=t.retry;if(!Number.isFinite(o)||o<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`)}Y[e]=t,xe[e]={status:"idle"},$e.set(e,new Ee(t.maxConcurrent??1)),ee&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${t.label??e})`);},unregisterTask(e){if(X(),!Y[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(xe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let o=$e.get(e);o&&(o.drain(),$e.delete(e)),delete Y[e],delete xe[e],ee&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(Y)},getTaskRegistry(){let e=Object.create(null);for(let[t,o]of Object.entries(Y))e[t]={label:o.label,description:o.description};return e},getTaskState(e){let t=xe[e];return t?Object.freeze(structuredClone(t)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[t,o]of Object.entries(xe))e[t]=Object.freeze(structuredClone(o));return e},getNodeIds(){return [...Object.keys(W),...Object.keys(Y)]},reset(){X();for(let t of Object.keys(W)){let o=W[t]?.maxConcurrent??1;ve[t]={status:"idle",runCount:0,totalTokens:0};let n=Ge.get(t);n&&n.drain(),Ge.set(t,new Ee(o));let a=ie(t);K.batch(()=>{Ue(a,{status:"idle",currentAgent:W[t].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(a,{pending:[],approved:[],rejected:[]}),mt(a,[]),ht(a,[]),ze(a,Ct());});}for(let t of Object.keys(Y)){xe[t]={status:"idle"};let o=$e.get(t);o&&o.drain(),$e.set(t,new Ee(Y[t].maxConcurrent??1));}ct.clear(),bt.clear(),it.clear(),Pe.length=0,Ze.length=0,_t=0,Xe=0,qe="idle",Mt=0,Qe();let e=ie("__coord");K.batch(()=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Ie&&setBridgeFact(e,h,{...Ie.init});}),Ae&&Ae.reset(),Oe=null;for(let t of Object.keys(ut))delete ut[t];Me();},async checkpoint(e){X();for(let[o,n]of Object.entries(ve))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${o}" is running`);for(let[o,n]of Object.entries(xe))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${o}" is running`);if(!K.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let t={version:1,id:Ke(),createdAt:new Date().toISOString(),label:e?.label,systemExport:K.history.export(),timelineExport:P?.export()??null,localState:{type:"multi",globalTokenCount:Xe,globalStatus:qe,agentStates:Object.fromEntries(Object.entries(ve).map(([o,n])=>[o,structuredClone(n)])),handoffCounter:_t,pendingHandoffs:[...Pe],handoffResults:[...Ze],roundRobinCounters:Ne?Object.fromEntries(Ne):null,taskStates:Object.fromEntries(Object.entries(xe).map(([o,n])=>[o,{lastOutput:n.lastOutput!=null?String(n.lastOutput):void 0,lastError:n.lastError}]))},memoryExport:_?_.export?.()??null:null,orchestratorType:"multi"};return we&&await we.save(t),t},restore(e,t){if(X(),!fn(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(!K.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");K.history.import(e.systemExport),t?.restoreTimeline!==false&&e.timelineExport&&P&&P.import(e.timelineExport),e.memoryExport&&_&&_.import&&_.import(e.memoryExport);let o=e.localState;Xe=o.globalTokenCount,qe=o.globalStatus,_t=o.handoffCounter,Pe.length=0,Pe.push(...o.pendingHandoffs),Ze.length=0,Ze.push(...o.handoffResults);for(let[n,a]of Object.entries(o.agentStates))ve[n]&&(ve[n]={...a});if(o.roundRobinCounters&&Ne){Ne.clear();for(let[n,a]of Object.entries(o.roundRobinCounters))Ne.set(n,a);}for(let[n,a]of Object.entries(W)){let l=Ge.get(n);l&&l.drain(),Ge.set(n,new Ee(a.maxConcurrent??1));}if(o.taskStates){for(let[n,a]of Object.entries(o.taskStates)){if(!Y[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.`);xe[n]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[n,a]of Object.entries(Y)){let l=$e.get(n);l&&l.drain(),$e.set(n,new Ee(a.maxConcurrent??1));}}Me();},runParallelStream(e,t,o,n){X();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 l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));let p=e.map((k,x)=>{let F=en(k,a[x],{signal:l.signal});return {agentId:k,streamResult:F}}),h=p.map(({agentId:k,streamResult:x})=>({agentId:k,stream:x.stream})),{stream:T,getDroppedCount:S}=Hn(h),D;n?.signal&&(D=()=>l.abort(),n.signal.addEventListener("abort",D,{once:true}));let E=Promise.allSettled(p.map(({streamResult:k})=>k.result)).then(k=>{u&&clearTimeout(u),D&&n?.signal&&n.signal.removeEventListener("abort",D);let x=[];for(let F of k)F.status==="fulfilled"&&x.push(F.value);if(n?.minSuccess!==void 0&&x.length<n.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${x.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess})`);return x}),q=E.then(k=>o(k));return E.catch(()=>{}),q.catch(()=>{}),{stream:T,results:E,merge:q,getDroppedCount:S,abort:()=>{l.abort(),D&&n?.signal&&n.signal.removeEventListener("abort",D);for(let{streamResult:k}of p)k.abort();}}},async runRace(e,t,o){X();let n={type:"race",handlers:e,extract:o?.extract,timeout:o?.timeout,minSuccess:o?.minSuccess,signal:o?.signal};return An(n,t,"__imperative_race")},async runReflect(e,t,o,n){X();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},l=await Nt(a,o,"__imperative_reflect"),u=Oe?[...Oe]:[],p=n?.maxIterations??2,h=u.length>0&&!u[u.length-1].passed&&u.length>=p;return {result:l,iterations:u.length,history:u,exhausted:h}},async runDebate(e,t,o,n){return X(),qt({handlers:e,evaluator:t,maxRounds:n?.maxRounds,extract:n?.extract,parseJudgement:n?.parseJudgement,signal:n?.signal,timeout:n?.timeout},o,"__imperative_debate")},async runGoal(e,t,o,n){return X(),Gt({nodes:e,when:o,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(X(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Gt(t,{},e.patternId,e)},async resumeSequential(e,t){if(X(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return tn(t,e.currentInput,e.patternId,e)},async resumeSupervisor(e,t,o){if(X(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let n=o?.input??e.currentInput;return nn(t,n,e.patternId,e)},async resumeReflect(e,t,o){if(X(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let n=o?.input??e.effectiveInput;return Nt(t,n,e.patternId,e)},async resumeDebate(e,t){if(X(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return qt(t,e.currentInput,e.patternId,e)},async resumeDag(e,t,o){if(X(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let n=o?.input??e.input;return rn(t,n,e.patternId,e)},async replay(e,t,o){if(X(),!we)throw new Error("[Directive MultiAgent] No checkpoint store configured");let n=await we.load(e);if(!n)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let p=JSON.parse(n.systemExport);if(!p||typeof p!="object")throw new Error("Parsed checkpoint state is not an object");let h=new Set(["__proto__","constructor","prototype"]);for(let S of Object.keys(p))if(h.has(S))throw new Error(`Checkpoint state contains blocked key: ${S}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal"]).has(p.type))throw new Error(`Unknown checkpoint pattern type: ${p.type}`);if(p.version!==1)throw new Error(`Unsupported checkpoint version: ${p.version}`);a=p;}catch(p){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${p instanceof Error?p.message:String(p)}`)}let l=ot(a),u=o?.input??("currentInput"in a?a.currentInput:"");switch(P&&P.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:l}),a.type){case "sequential":return tn(t,u,a.patternId,a);case "supervisor":return nn(t,u,a.patternId,a);case "reflect":return Nt(t,u,a.patternId,a);case "debate":return qt(t,u,a.patternId,a);case "dag":return rn(t,u,a.patternId,a);case "goal":return Gt(t,a.facts,a.patternId,a)}},resumeBreakpoint(e,t){X(),t&&ct.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.resolved,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),resolved:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,t){X(),t&&bt.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.cancelled,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),cancelled:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let t of Object.keys(W)){let o=ie(t),n=We(o);e.push(...n.pending);}return e},getLastReflectionHistory(){return Oe?[...Oe]:null},destroy(){Xt||(Cn.reset(),$t.clear(),lt.clear(),It.clear(),jt.clear(),Xt=true,K.destroy());}};return Me(),Cn}export{mo as $,Vr as A,Yr as B,Xr as C,Zr as D,Qr as E,eo as F,to as G,no as H,ro as I,Hn as J,xt as K,Br as L,mn as M,Ee as N,ot as O,xr as P,Cr as Q,Er as R,hn as S,ao as T,io as U,uo as V,lo as W,co as X,po as Y,fo as Z,go as _,cn as a,ho as aa,jr as b,yo as ba,Ht as c,ko as ca,Ut as d,To as da,qn as e,So as ea,St as f,xo as fa,Ue as g,Ao as ga,gt as h,Co as ha,Je as i,Eo as ia,dn as j,Do as ja,mt as k,Un as ka,pn as l,Oo as la,ht as m,Po as ma,We as n,Mo as na,ze as o,_o as oa,Ce as p,jo as pa,Jt as q,Io as qa,Gr as r,Zo as ra,At as s,Gn as t,Ln as u,Ct as v,Ke as w,fn as x,Fn as y,Kr as z};//# sourceMappingURL=chunk-FN4GUZAI.js.map
|
|
67
|
-
//# sourceMappingURL=chunk-
|
|
66
|
+
Original task: ${t}`);}if(k.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let w=p?p(M):M;return {winnerId:F,result:w,rounds:k}}catch(w){throw b=w instanceof Error?w:new Error(String(w)),w}finally{S&&clearTimeout(S),D&&e.signal&&e.signal.removeEventListener("abort",D),o&&J("onPatternComplete",{patternId:B,patternType:"debate",durationMs:Date.now()-H,timestamp:Date.now(),error:b});}}let or=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function pt(e,t){for(let o of Object.keys(t))or.has(o)||(e[o]=t[o]);}function sr(e,t){let o=Object.create(null);for(let[h,T]of Object.entries(t))for(let S of T.produces)o[S]||(o[S]=[]),o[S].push(h);let n=Object.keys(t),a=Object.create(null),l=Object.create(null);for(let h of n)a[h]=0,l[h]=[];for(let[h,T]of Object.entries(t))for(let S of T.requires??[]){let D=o[S];if(D)for(let E of D)E!==h&&(l[E].push(h),a[h]=(a[h]??0)+1);}let u=[];for(let h of n)a[h]===0&&u.push(h);let p=0;for(;u.length>0;){let h=u.shift();p++;for(let T of l[h]??[])a[T]--,a[T]===0&&u.push(T);}if(p!==n.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${p}/${n.length} nodes.`)}function ar(e,t){let o=Object.create(null);for(let[n,a]of Object.entries(t))for(let l of a.produces)o[l]||(o[l]=[]),o[l].push(n);for(let[n,a]of Object.entries(o))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${n}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function be(e,...t){if(e)try{return e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}async function ir(e,...t){if(e)try{return await e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}function on(e,t,o){let n=t.slice(-3),a=n.length>0?n.reduce((p,h)=>p+h.satisfactionDelta,0)/n.length:0,l=null;a>0&&e<1&&(l=Math.ceil((1-e)/a));let u=false;if(t.length>=6){let p=t.slice(-3),h=t.slice(-6,-3),T=p.reduce((D,E)=>D+E.satisfactionDelta,0)/3,S=h.reduce((D,E)=>D+E.satisfactionDelta,0)/3;u=T<S*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:l,decelerating:u}}function yt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Gt(e,t,o,n){let{nodes:a,when:l,satisfaction:u,maxSteps:p=50,extract:h,selectionStrategy:T,relaxation:S,onStep:D,onStall:E}=e,q=Object.create(null);for(let[Q,ne]of Object.entries(a))q[Q]={...ne};if(Object.keys(q).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let x=o??"__goal";for(let[Q,ne]of Object.entries(q))if(!W[ne.handler]&&!Y[ne.handler])throw new Error(`[Directive MultiAgent] goal node "${Q}" references unregistered handler "${ne.handler}"`);sr(x,q),ar(x,q);for(let[Q,ne]of Object.entries(q))ne.extractOutput||console.warn(`[Directive MultiAgent] goal node "${Q}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let F=e.signal,M,N,G=e.timeout??3e5;if(G&&!F){let Q=new AbortController;M=setTimeout(()=>Q.abort(),G),F=Q.signal;}else if(G&&F){let Q=new AbortController;M=setTimeout(()=>Q.abort(),G),N=()=>Q.abort(),F.addEventListener("abort",N,{once:true}),F=Q.signal;}let A=Date.now();if(P){let Q=Object.values(q).map(ne=>ne.handler);P.record({type:"pattern_start",timestamp:A,snapshotId:null,patternId:x,patternType:"goal",handlers:Q,taskIds:Q.filter(ne=>Y[ne]!=null)});}J("onPatternStart",{patternId:x,patternType:"goal",input:typeof t=="string"?t:JSON.stringify(t),timestamp:A});let m=Object.create(null);n?pt(m,n.facts):typeof t=="string"?m.input=t:pt(m,t);let v=n?[...n.executionOrder]:[],B=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.nodeOutputs))B[Q]={output:ne.output,totalTokens:ne.totalTokens};let H=n?[...n.stepMetrics]:[],j=n?[...n.relaxations]:[],b=new Set(n?.completedNodes??[]),w=new Map(n?Object.entries(n.failedNodes).map(([Q,ne])=>[Q,ne]):[]),C=new Map(n?Object.entries(n.nodeInputHashes):[]),U=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.agentMetrics))U[Q]={runs:ne.runs,avgSatisfactionDelta:ne.runs>0?ne.totalDelta/ne.runs:0,tokens:ne.tokens,totalDelta:ne.totalDelta};let $=n?.stallSteps??0,ue=n?.appliedRelaxationTiers??0,te=n?.lastSatisfaction??0,re,tt=false,pe=n?.step??0,De=e.checkpoint,dr=De?.everyN??5,En=De?.store??we,pr=De?.labelPrefix??"goal",Dn,fr=3;try{for(let ae=pe;ae<p;ae++){if(be(l,m)===!0){tt=!0;let V=Date.now()-A,z=Object.values(B).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!0,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j}}if(F?.aborted){let V=Date.now()-A,z=Object.values(B).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j,error:"Aborted or timed out"}}let nt=[];for(let[V,z]of Object.entries(q)){if((w.get(V)??0)>=fr)continue;let oe=z.requires??[];if(oe.every(le=>m[le]!=null)){if(b.has(V)){if(!z.allowRerun)continue;let le=JSON.stringify(oe.map(ye=>m[ye]));if(C.get(V)===le)continue}nt.push(V);}}let He=nt;if(T&&nt.length>0){let V=u?be(u,m)??0:be(l,m)===!0?1:0,z=yt(V),oe=on(z,H,ae),fe=Object.create(null);for(let[ye,se]of Object.entries(U))fe[ye]={runs:se.runs,avgSatisfactionDelta:se.runs>0?se.totalDelta/se.runs:0,tokens:se.tokens};let le=T.select(nt,fe,oe);He=le&&le.length>0?le:nt;}if(He.sort((V,z)=>(q[z].priority??0)-(q[V].priority??0)),be(D,ae,{...m},He),He.length===0){$++;let V=!1;if(S)for(let z=ue;z<S.length;z++){let oe=S[z],fe=oe.afterStallSteps??3;if($>=fe){let le=oe.strategy;switch(le.type){case "allow_rerun":for(let ye of le.nodes)b.delete(ye),C.delete(ye);break;case "alternative_nodes":for(let ye of le.nodes){let se=`__relaxation_${z}_${ye.handler}`;q[se]={...ye};}break;case "inject_facts":pt(m,le.facts);break;case "accept_partial":{let ye=Date.now()-A,se=Object.values(B).reduce((ge,_e)=>ge+_e.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:ae,totalTokens:se,durationMs:ye,stepMetrics:H,relaxations:j,error:`Accepted partial result via relaxation tier "${oe.label}"`}}case "custom":{let ye=be(u,m)??0,se={step:ae,facts:{...m},metrics:on(yt(ye),H,ae),completedNodes:new Set(b),failedNodes:new Map(w)};await ir(le.apply,se);break}}j.push({step:ae,tierIndex:z,label:oe.label,strategy:le.type}),ue=z+1,$=0,V=!0;break}}if(!V){let z=be(u,m)??0,oe=on(yt(z),H,ae);if(be(E,ae,oe),!S||ue>=S.length){let fe=Date.now()-A,le=Object.values(B).reduce((ye,se)=>ye+se.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:ae,totalTokens:le,durationMs:fe,stepMetrics:H,relaxations:j,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}$=0;let gr=Date.now(),mr=u?be(u,m)??0:be(l,m)===!0?1:0,hr=yt(mr),On=0,ft=[],br=He.map(async V=>{let z=q[V],oe=z.requires??[],fe=JSON.stringify(oe.map(se=>m[se]));C.set(V,fe);let le,ye=be(z.buildInput,m);if(ye!=null)le=ye;else {let se=Object.create(null);for(let ge of oe)m[ge]!=null&&(se[ge]=m[ge]);Object.keys(se).length>0?le=JSON.stringify(se):m.input!=null?le=String(m.input):le=JSON.stringify(m);}try{let se=await de(z.handler,le,{signal:F??void 0,patternId:x});if(B[V]=se,v.push(V),b.add(V),w.delete(V),z.extractOutput){let ge=be(z.extractOutput,se);ge&&(pt(m,ge),ft.push(...Object.keys(ge)));}else {let ge=se.output;if(ge&&typeof ge=="object")pt(m,ge),ft.push(...Object.keys(ge));else if(typeof ge=="string")try{let _e=JSON.parse(ge);if(_e&&typeof _e=="object"&&!Array.isArray(_e))pt(m,_e),ft.push(...Object.keys(_e));else for(let Pn of z.produces)m[Pn]=ge,ft.push(Pn);}catch{for(let _e of z.produces)m[_e]=ge,ft.push(_e);}}return On+=se.totalTokens,{nodeId:V,success:!0}}catch(se){let ge=(w.get(V)??0)+1;return w.set(V,ge),{nodeId:V,success:!1,error:se}}});await Promise.allSettled(br);let yr=u?be(u,m)??0:be(l,m)===!0?1:0,Lt=yt(yr),Bt=Lt-hr;if(H.push({step:ae,durationMs:Date.now()-gr,nodesRun:[...He],factsProduced:ft,satisfaction:Lt,satisfactionDelta:Bt,tokensConsumed:On}),P)for(let V of He){let z=q[V];P.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:z.handler,step:ae,nodeId:V,satisfaction:Lt,satisfactionDelta:Bt});}for(let V of He){let z=q[V];U[z.handler]||(U[z.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let oe=U[z.handler];oe.runs++,oe.totalDelta+=Bt,oe.tokens+=B[V]?.totalTokens??0;}if(te=Lt,Bt<=0?$++:$=0,De&&En&&ae>pe&&(ae-pe)%dr===0){let V={type:"goal",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${pr}:step-${ae}`,patternId:x,stepsTotal:p,step:ae+1,facts:structuredClone(m),completedNodes:[...b],failedNodes:Object.fromEntries(w),nodeInputHashes:Object.fromEntries(C),nodeOutputs:Object.fromEntries(Object.entries(B).map(([oe,fe])=>[oe,{output:fe.output,totalTokens:fe.totalTokens}])),executionOrder:[...v],stepMetrics:[...H],relaxations:[...j],appliedRelaxationTiers:ue,stallSteps:$,lastSatisfaction:te,agentMetrics:Object.fromEntries(Object.entries(U).map(([oe,fe])=>[oe,{runs:fe.runs,totalDelta:fe.totalDelta,tokens:fe.tokens}]))},z=await dt(V,En,De);z&&(Dn=z);}}let Q=Date.now()-A,ne=Object.values(B).reduce((ae,nt)=>ae+nt.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:B,steps:p,totalTokens:ne,durationMs:Q,stepMetrics:H,relaxations:j,error:`Max steps (${p}) exhausted without achieving goal`}}catch(Q){throw re=Q instanceof Error?Q:new Error(String(Q)),Q}finally{if(M!=null&&clearTimeout(M),N&&e.signal&&e.signal.removeEventListener("abort",N),P){let Q=Object.values(B).reduce((ne,ae)=>ne+ae.totalTokens,0);P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:x,patternType:"goal",durationMs:Date.now()-A,achieved:tt,stepMetrics:H,relaxations:j,totalTokens:Q,...re?{error:re.message}:{}});}J("onPatternComplete",{patternId:x,patternType:"goal",durationMs:Date.now()-A,timestamp:Date.now(),error:re});}}function ur(e){if(!Z)return [];let t=[],o=new Set;if(o.add(e),Z.equivalencyGroups){for(let n of Object.values(Z.equivalencyGroups))if(n.includes(e))for(let a of n)!o.has(a)&&W[a]&&(t.push(a),o.add(a));}if(Z.useCapabilities!==false){let n=W[e];if(n?.capabilities&&n.capabilities.length>0)for(let[a,l]of Object.entries(W)){if(o.has(a))continue;let u=l.capabilities??[];n.capabilities.every(p=>u.includes(p))&&(t.push(a),o.add(a));}}if(Ae){let n=Z.healthThreshold??30;return t.filter(a=>Ae.getHealthScore(a)>n)}return t}function lr(e){if(e.length===0)return null;if(!Z||!Ae)return e[0]??null;if(Z.selectionStrategy==="round-robin"&&Ne){let n=[...e].sort().join(","),a=Ne.get(n)??0,l=e[a%e.length];return Ne.set(n,a+1),l}let t=e[0],o=Ae.getHealthScore(t);for(let n=1;n<e.length;n++){let a=Ae.getHealthScore(e[n]);a>o&&(t=e[n],o=a);}return t}function cr(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:K,get facts(){return K.facts},get timeline(){return P},get healthMonitor(){return Ae},get derived(){return Object.freeze({...ut})},onDerivedChange(e){return It.add(e),()=>{It.delete(e);}},get scratchpad(){return Zt},runAgent:de,runAgentStream:en,async runPattern(e,t){X();let o=d$1[e];if(!o){let l=Object.keys(d$1).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${l}`)}let n=Date.now();if(P){let l=cr(o);P.record({type:"pattern_start",timestamp:n,snapshotId:null,patternId:e,patternType:o.type,handlers:l,taskIds:l.filter(u=>Y[u]!=null)});}let a;try{switch(o.type){case "parallel":return await rr(o,t,e);case "sequential":return await tn(o,t,e);case "supervisor":return await nn(o,t,e);case "dag":return await rn(o,t,e);case "reflect":return await Nt(o,t,e);case "race":return (await An(o,t,e)).result;case "debate":return (await qt(o,t,e)).result;case "goal":return (await Gt(o,t,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${o.type}`)}}catch(l){throw a=l instanceof Error?l:new Error(String(l)),l}finally{P&&P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:o.type,durationMs:Date.now()-n,...a?{error:a.message}:{}});}},async runParallel(e,t,o,n){X();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 l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));try{let p=e.map((S,D)=>de(S,a[D],{signal:l.signal}).catch(E=>{if(n?.minSuccess!==void 0)return null;throw E})),h=await Promise.all(p),T=h.filter(S=>S!==null);if(n?.minSuccess!==void 0&&T.length<n.minSuccess){let S=h.length-T.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${T.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess}, failed: ${S})`)}return o(T)}finally{u&&clearTimeout(u);}},async runSequential(e,t,o){X();let n=[],a=t;for(let l=0;l<e.length;l++){let u=e[l],p=await de(u,a);n.push(p),l<e.length-1&&(o?.transform?a=o.transform(p.output,u,l):a=typeof p.output=="string"?p.output:safeStringify(p.output));}return n},async handoff(e,t,o,n){if(X(),!W[e]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${u}`)}if(!W[t]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${t}" not found. Registered: ${u}`)}{let u=await et("pre_handoff",e,W[e].agent.name,o,void 0,{handoff:{fromAgent:e,toAgent:t}});if(u.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};o=u.input;}let a={id:`handoff-${++_t}`,fromAgent:e,toAgent:t,input:o,context:n,requestedAt:Date.now()};Pe.push(a);try{f?.(a);}catch(u){ee&&console.debug("[Directive MultiAgent] onHandoff threw:",u);}J("onHandoff",a),P&&P.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t});let l=W[t].memory??_;if(l&&n)try{let u=Object.entries(n).map(([p,h])=>`${p}: ${safeStringify(h)}`).join(", ");l.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${u}`}]);}catch(u){ee&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",u);}try{let u=await de(t,o),p={request:a,result:u,completedAt:Date.now()};Zn(p);try{g$1?.(p);}catch(T){ee&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",T);}J("onHandoffComplete",p),P&&P.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t,durationMs:p.completedAt-a.requestedAt});let h=Pe.indexOf(a);return h>=0&&Pe.splice(h,1),u}catch(u){let p=Pe.indexOf(a);throw p>=0&&Pe.splice(p,1),u}},approve(e){X();let t=it.get(e);if(t){it.delete(e);let o=ie(t);K.batch(()=>{let n=gt(o),a=200,l=[...n.approved,e];Je(o,{...n,pending:n.pending.filter(u=>u.id!==e),approved:l.length>a?l.slice(-a):l});});return}ee&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,t){X();let o=it.get(e);if(o){it.delete(e);let n=ie(o);K.batch(()=>{let a=gt(n);t&&ee&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${t}`);let l={id:e,reason:t,rejectedAt:Date.now()},u=200,p=[...a.rejected,l];Je(n,{...a,pending:a.pending.filter(h=>h.id!==e),rejected:p.length>u?p.slice(-u):p});});return}ee&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){X(),qe="paused",ee&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){X(),qe==="paused"&&(qe="idle",ee&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let t=ve[e];return t?{...t}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(ve).map(([e,t])=>[e,{...t}]))},getPendingHandoffs(){return [...Pe]},get totalTokens(){return Xe},waitForIdle(e){let t=()=>Mt===0&&Object.values(ve).every(o=>o.status==="idle"||o.status==="completed"||o.status==="error");return t()?Promise.resolve():new Promise((o,n)=>{let a=null,l=()=>{jt.delete(u),a&&clearTimeout(a);},u=()=>{t()&&(l(),o());};jt.add(u),e!==void 0&&(a=setTimeout(()=>{l(),n(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,t,o){return de(e,t,o)},runStream(e,t,o){return en(e,t,o)},registerAgent(e,t){if(X(),Ot.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(Y[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let o=t.constraints?Jt(t.constraints):{},n=Object.create(null);if(t.resolvers)for(let[l,u]of Object.entries(t.resolvers))n[l]={requirement:u.requirement,key:u.key,resolve:async(p,h)=>{let T=Ce(h.facts),D={facts:{...h.facts,...T},runAgent:async(E,q,k)=>r(E,q,k),signal:h.signal};return u.resolve(p,D)}};let a=createModule(e,{schema:i,init:l=>{Ue(l,{status:"idle",currentAgent:t.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(l,{pending:[],approved:[],rejected:[]}),mt(l,[]),ht(l,[]),ze(l,Ct());},constraints:o,resolvers:Object.keys(n).length>0?n:void 0});K.registerModule(e,a),W[e]=t,Ge.set(e,new Ee(t.maxConcurrent??1)),ve[e]={status:"idle",runCount:0,totalTokens:0},ee&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${t.agent.name})`),Me();},unregisterAgent(e){if(X(),!W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(ve[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,l]of Object.entries(d$1)){let u;switch(l.type){case "supervisor":u=[l.supervisor,...l.workers];break;case "dag":u=Object.values(l.nodes).map(p=>p.handler);break;case "reflect":u=[l.handler,l.evaluator];break;case "parallel":case "sequential":case "race":u=l.handlers;break;case "debate":u=[...l.handlers,l.evaluator];break;default:u=[];}u.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let o=Ge.get(e);o&&(o.drain(),Ge.delete(e));let n=ie(e);n&&K.batch(()=>{Ue(n,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(n,{pending:[],approved:[],rejected:[]}),mt(n,[]),ht(n,[]),ze(n,Ct());}),delete W[e],delete ve[e],ee&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),Me();},getAgentIds(){return Object.keys(W)},registerTask(e,t){if(X(),Ot.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(W[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(Y[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:o,delayMs:n}=t.retry;if(!Number.isFinite(o)||o<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`)}Y[e]=t,xe[e]={status:"idle"},$e.set(e,new Ee(t.maxConcurrent??1)),ee&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${t.label??e})`);},unregisterTask(e){if(X(),!Y[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(xe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let o=$e.get(e);o&&(o.drain(),$e.delete(e)),delete Y[e],delete xe[e],ee&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(Y)},getTaskRegistry(){let e=Object.create(null);for(let[t,o]of Object.entries(Y))e[t]={label:o.label,description:o.description};return e},getTaskState(e){let t=xe[e];return t?Object.freeze(structuredClone(t)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[t,o]of Object.entries(xe))e[t]=Object.freeze(structuredClone(o));return e},getNodeIds(){return [...Object.keys(W),...Object.keys(Y)]},reset(){X();for(let t of Object.keys(W)){let o=W[t]?.maxConcurrent??1;ve[t]={status:"idle",runCount:0,totalTokens:0};let n=Ge.get(t);n&&n.drain(),Ge.set(t,new Ee(o));let a=ie(t);K.batch(()=>{Ue(a,{status:"idle",currentAgent:W[t].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(a,{pending:[],approved:[],rejected:[]}),mt(a,[]),ht(a,[]),ze(a,Ct());});}for(let t of Object.keys(Y)){xe[t]={status:"idle"};let o=$e.get(t);o&&o.drain(),$e.set(t,new Ee(Y[t].maxConcurrent??1));}ct.clear(),bt.clear(),it.clear(),Pe.length=0,Ze.length=0,_t=0,Xe=0,qe="idle",Mt=0,Qe();let e=ie("__coord");K.batch(()=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Ie&&setBridgeFact(e,h,{...Ie.init});}),Ae&&Ae.reset(),Oe=null;for(let t of Object.keys(ut))delete ut[t];Me();},async checkpoint(e){X();for(let[o,n]of Object.entries(ve))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${o}" is running`);for(let[o,n]of Object.entries(xe))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${o}" is running`);if(!K.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let t={version:1,id:Ke(),createdAt:new Date().toISOString(),label:e?.label,systemExport:K.history.export(),timelineExport:P?.export()??null,localState:{type:"multi",globalTokenCount:Xe,globalStatus:qe,agentStates:Object.fromEntries(Object.entries(ve).map(([o,n])=>[o,structuredClone(n)])),handoffCounter:_t,pendingHandoffs:[...Pe],handoffResults:[...Ze],roundRobinCounters:Ne?Object.fromEntries(Ne):null,taskStates:Object.fromEntries(Object.entries(xe).map(([o,n])=>[o,{lastOutput:n.lastOutput!=null?String(n.lastOutput):void 0,lastError:n.lastError}]))},memoryExport:_?_.export?.()??null:null,orchestratorType:"multi"};return we&&await we.save(t),t},restore(e,t){if(X(),!fn(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(!K.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");K.history.import(e.systemExport),t?.restoreTimeline!==false&&e.timelineExport&&P&&P.import(e.timelineExport),e.memoryExport&&_&&_.import&&_.import(e.memoryExport);let o=e.localState;Xe=o.globalTokenCount,qe=o.globalStatus,_t=o.handoffCounter,Pe.length=0,Pe.push(...o.pendingHandoffs),Ze.length=0,Ze.push(...o.handoffResults);for(let[n,a]of Object.entries(o.agentStates))ve[n]&&(ve[n]={...a});if(o.roundRobinCounters&&Ne){Ne.clear();for(let[n,a]of Object.entries(o.roundRobinCounters))Ne.set(n,a);}for(let[n,a]of Object.entries(W)){let l=Ge.get(n);l&&l.drain(),Ge.set(n,new Ee(a.maxConcurrent??1));}if(o.taskStates){for(let[n,a]of Object.entries(o.taskStates)){if(!Y[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.`);xe[n]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[n,a]of Object.entries(Y)){let l=$e.get(n);l&&l.drain(),$e.set(n,new Ee(a.maxConcurrent??1));}}Me();},runParallelStream(e,t,o,n){X();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 l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));let p=e.map((k,x)=>{let F=en(k,a[x],{signal:l.signal});return {agentId:k,streamResult:F}}),h=p.map(({agentId:k,streamResult:x})=>({agentId:k,stream:x.stream})),{stream:T,getDroppedCount:S}=Hn(h),D;n?.signal&&(D=()=>l.abort(),n.signal.addEventListener("abort",D,{once:true}));let E=Promise.allSettled(p.map(({streamResult:k})=>k.result)).then(k=>{u&&clearTimeout(u),D&&n?.signal&&n.signal.removeEventListener("abort",D);let x=[];for(let F of k)F.status==="fulfilled"&&x.push(F.value);if(n?.minSuccess!==void 0&&x.length<n.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${x.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess})`);return x}),q=E.then(k=>o(k));return E.catch(()=>{}),q.catch(()=>{}),{stream:T,results:E,merge:q,getDroppedCount:S,abort:()=>{l.abort(),D&&n?.signal&&n.signal.removeEventListener("abort",D);for(let{streamResult:k}of p)k.abort();}}},async runRace(e,t,o){X();let n={type:"race",handlers:e,extract:o?.extract,timeout:o?.timeout,minSuccess:o?.minSuccess,signal:o?.signal};return An(n,t,"__imperative_race")},async runReflect(e,t,o,n){X();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},l=await Nt(a,o,"__imperative_reflect"),u=Oe?[...Oe]:[],p=n?.maxIterations??2,h=u.length>0&&!u[u.length-1].passed&&u.length>=p;return {result:l,iterations:u.length,history:u,exhausted:h}},async runDebate(e,t,o,n){return X(),qt({handlers:e,evaluator:t,maxRounds:n?.maxRounds,extract:n?.extract,parseJudgement:n?.parseJudgement,signal:n?.signal,timeout:n?.timeout},o,"__imperative_debate")},async runGoal(e,t,o,n){return X(),Gt({nodes:e,when:o,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(X(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Gt(t,{},e.patternId,e)},async resumeSequential(e,t){if(X(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return tn(t,e.currentInput,e.patternId,e)},async resumeSupervisor(e,t,o){if(X(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let n=o?.input??e.currentInput;return nn(t,n,e.patternId,e)},async resumeReflect(e,t,o){if(X(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let n=o?.input??e.effectiveInput;return Nt(t,n,e.patternId,e)},async resumeDebate(e,t){if(X(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return qt(t,e.currentInput,e.patternId,e)},async resumeDag(e,t,o){if(X(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let n=o?.input??e.input;return rn(t,n,e.patternId,e)},async replay(e,t,o){if(X(),!we)throw new Error("[Directive MultiAgent] No checkpoint store configured");let n=await we.load(e);if(!n)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let p=JSON.parse(n.systemExport);if(!p||typeof p!="object")throw new Error("Parsed checkpoint state is not an object");let h=new Set(["__proto__","constructor","prototype"]);for(let S of Object.keys(p))if(h.has(S))throw new Error(`Checkpoint state contains blocked key: ${S}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal"]).has(p.type))throw new Error(`Unknown checkpoint pattern type: ${p.type}`);if(p.version!==1)throw new Error(`Unsupported checkpoint version: ${p.version}`);a=p;}catch(p){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${p instanceof Error?p.message:String(p)}`)}let l=ot(a),u=o?.input??("currentInput"in a?a.currentInput:"");switch(P&&P.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:l}),a.type){case "sequential":return tn(t,u,a.patternId,a);case "supervisor":return nn(t,u,a.patternId,a);case "reflect":return Nt(t,u,a.patternId,a);case "debate":return qt(t,u,a.patternId,a);case "dag":return rn(t,u,a.patternId,a);case "goal":return Gt(t,a.facts,a.patternId,a)}},resumeBreakpoint(e,t){X(),t&&ct.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.resolved,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),resolved:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,t){X(),t&&bt.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.cancelled,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),cancelled:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let t of Object.keys(W)){let o=ie(t),n=We(o);e.push(...n.pending);}return e},getLastReflectionHistory(){return Oe?[...Oe]:null},destroy(){Xt||(Cn.reset(),$t.clear(),lt.clear(),It.clear(),jt.clear(),Xt=true,K.destroy());}};return Me(),Cn}export{mo as $,Vr as A,Yr as B,Xr as C,Zr as D,Qr as E,eo as F,to as G,no as H,ro as I,Hn as J,xt as K,Br as L,mn as M,Ee as N,ot as O,xr as P,Cr as Q,Er as R,hn as S,ao as T,io as U,uo as V,lo as W,co as X,po as Y,fo as Z,go as _,cn as a,ho as aa,jr as b,yo as ba,Ht as c,ko as ca,Ut as d,To as da,qn as e,So as ea,St as f,xo as fa,Ue as g,Ao as ga,gt as h,Co as ha,Je as i,Eo as ia,dn as j,Do as ja,mt as k,Un as ka,pn as l,Oo as la,ht as m,Po as ma,We as n,Mo as na,ze as o,_o as oa,Ce as p,jo as pa,Jt as q,Io as qa,Gr as r,Zo as ra,At as s,Gn as t,Ln as u,Ct as v,Ke as w,fn as x,Fn as y,Kr as z};//# sourceMappingURL=chunk-G7CRWJT7.js.map
|
|
67
|
+
//# sourceMappingURL=chunk-G7CRWJT7.js.map
|