@directive-run/ai 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/anthropic.cjs +1 -1
  2. package/dist/anthropic.cjs.map +1 -1
  3. package/dist/anthropic.js +1 -1
  4. package/dist/anthropic.js.map +1 -1
  5. package/dist/{chunk-265ZKXYE.js → chunk-3PGRBK4E.js} +2 -2
  6. package/dist/chunk-3PGRBK4E.js.map +1 -0
  7. package/dist/{chunk-QXMXSHYS.cjs → chunk-KP3G32S7.cjs} +2 -2
  8. package/dist/chunk-KP3G32S7.cjs.map +1 -0
  9. package/dist/{chunk-5ERCL33C.js → chunk-Q3PQLWBR.js} +3 -3
  10. package/dist/chunk-Q3PQLWBR.js.map +1 -0
  11. package/dist/{chunk-K2LZMRLN.js → chunk-RW4R3O5P.js} +3 -3
  12. package/dist/{chunk-K2LZMRLN.js.map → chunk-RW4R3O5P.js.map} +1 -1
  13. package/dist/{chunk-KALRDVN5.cjs → chunk-X3VQ5F7D.cjs} +3 -3
  14. package/dist/{chunk-KALRDVN5.cjs.map → chunk-X3VQ5F7D.cjs.map} +1 -1
  15. package/dist/{chunk-L35IQAWD.cjs → chunk-XV2QSBBE.cjs} +7 -7
  16. package/dist/chunk-XV2QSBBE.cjs.map +1 -0
  17. package/dist/gemini.cjs +1 -1
  18. package/dist/gemini.cjs.map +1 -1
  19. package/dist/gemini.js +1 -1
  20. package/dist/gemini.js.map +1 -1
  21. package/dist/index.cjs +18 -18
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +50 -6
  24. package/dist/index.d.ts +50 -6
  25. package/dist/index.js +18 -18
  26. package/dist/index.js.map +1 -1
  27. package/dist/{multi-agent-orchestrator-675FR2HF.js → multi-agent-orchestrator-4PXNYRHB.js} +2 -2
  28. package/dist/{multi-agent-orchestrator-675FR2HF.js.map → multi-agent-orchestrator-4PXNYRHB.js.map} +1 -1
  29. package/dist/multi-agent-orchestrator-KFGTEGE5.cjs +2 -0
  30. package/dist/{multi-agent-orchestrator-SH5TRRS3.cjs.map → multi-agent-orchestrator-KFGTEGE5.cjs.map} +1 -1
  31. package/dist/ollama.cjs +2 -2
  32. package/dist/ollama.cjs.map +1 -1
  33. package/dist/ollama.js +1 -1
  34. package/dist/ollama.js.map +1 -1
  35. package/dist/openai.cjs +1 -1
  36. package/dist/openai.cjs.map +1 -1
  37. package/dist/openai.js +1 -1
  38. package/dist/openai.js.map +1 -1
  39. package/dist/{orchestrator-types-BmvoZgfO.d.cts → orchestrator-types-Bh8r3_Sq.d.cts} +1 -1
  40. package/dist/{orchestrator-types-D6gzobwg.d.ts → orchestrator-types-CTfIKk0W.d.ts} +1 -1
  41. package/dist/testing.cjs +1 -1
  42. package/dist/testing.d.cts +1 -1
  43. package/dist/testing.d.ts +1 -1
  44. package/dist/testing.js +1 -1
  45. package/package.json +2 -2
  46. package/dist/chunk-265ZKXYE.js.map +0 -1
  47. package/dist/chunk-5ERCL33C.js.map +0 -1
  48. package/dist/chunk-L35IQAWD.cjs.map +0 -1
  49. package/dist/chunk-QXMXSHYS.cjs.map +0 -1
  50. package/dist/multi-agent-orchestrator-SH5TRRS3.cjs +0 -2
@@ -28,7 +28,7 @@ Please improve your response.`}function zr(o,t){let i=t.maxIterations??2,u=t.bui
28
28
  IMPORTANT: Respond with valid JSON matching `+l+". Output ONLY the JSON object, no additional text or markdown formatting."},x,I;for(let Q=0;Q<=u;Q++){let oe=Q===0?w:`${w}
29
29
 
30
30
  Your previous response was not valid JSON. Error: ${I}
31
- Please try again with valid JSON only.`,H=await o(S,oe,m);x=H;let $=typeof H.output=="string"?H.output:JSON.stringify(H.output);try{let de=p($),pe=i.safeParse(de);if(pe.success)return {...H,output:pe.data};I=Or(pe.error);}catch(de){I=de instanceof Error?de.message:String(de);}}throw new bn(`[Directive] Failed to get valid structured output after ${u+1} attempts: ${I}`,x)}}var bn=class extends Error{lastResult;constructor(t,i){super(t),this.name="StructuredOutputError",this.lastResult=i;}};function yn(o,t){if(Object.is(o,t))return true;if(typeof o!=typeof t||o===null||t===null||typeof o!="object")return false;if(Array.isArray(o)){if(!Array.isArray(t)||o.length!==t.length)return false;for(let l=0;l<o.length;l++)if(o[l]!==t[l])return false;return true}let i=o,u=t,p=Object.keys(i),f=Object.keys(u);if(p.length!==f.length)return false;for(let l of p)if(i[l]!==u[l])return false;return true}var _e=class{count;maxPermits;queue=[];constructor(t){if(t<1||!Number.isFinite(t))throw new Error(`[Directive Semaphore] Invalid max permits: ${t}. Must be a finite number >= 1.`);this.maxPermits=t,this.count=t;}createReleaseFn(){let t=false;return ()=>{t||(t=true,this.release());}}async acquire(t){if(t?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((i,u)=>{let p,f={resolve:l=>{p&&t&&t.removeEventListener("abort",p),i(l);},reject:u};this.queue.push(f),t&&(p=()=>{let l=this.queue.indexOf(f);l>=0&&(this.queue.splice(l,1),u(new Error("[Directive Semaphore] Aborted while waiting for permit")));},t.addEventListener("abort",p,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let t=this.queue.shift();t&&(this.count--,t.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let t=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),i=this.queue.splice(0,this.queue.length);for(let u of i)u.reject(t);this.count=this.maxPermits;}};function lt(o){switch(o.type){case "sequential":return o.step;case "supervisor":return o.round;case "reflect":return o.iteration;case "debate":return o.round;case "dag":return o.completedCount;case "goal":return o.step}}function _r(o){let t=lt(o),i=o.stepsTotal??null;switch(o.type){case "sequential":{let u=o.results.reduce((l,b)=>l+b.totalTokens,0),p=o.results.length>0?u/o.results.length:0,f=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:p>0&&f!=null?Math.round(p*f):null,estimatedStepsRemaining:f}}case "supervisor":{let u=o.workerResults.reduce((f,l)=>f+l.totalTokens,0),p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "reflect":{let u=o.history.reduce((f,l)=>f+l.producerTokens+l.evaluatorTokens,0),p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "debate":{let u=o.tokensConsumed,p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "dag":{let u=i??Object.keys(o.statuses).length,p=o.completedCount,f=Object.values(o.nodeResults).reduce((w,m)=>w+m.totalTokens,0),l=p>0?f/p:0,b=u-p;return {percentage:u>0?Math.round(p/u*100):0,stepsCompleted:p,stepsTotal:u,tokensConsumed:f,estimatedTokensRemaining:b>0?Math.round(l*b):0,estimatedStepsRemaining:b}}case "goal":{let u=Object.values(o.nodeOutputs).reduce((f,l)=>f+l.totalTokens,0),p=o.lastSatisfaction;return {percentage:Math.round(p*100),stepsCompleted:t,stepsTotal:i??null,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:o.stepMetrics.length>0?Mr(o):null}}}}function Mr(o){let t=o.stepMetrics;if(t.length<2)return null;let i=1-o.lastSatisfaction;if(i<=0)return 0;let p=t.reduce((f,l)=>f+Math.max(0,l.satisfactionDelta),0)/t.length;return p<=0?null:Math.ceil(i/p)}function Pr(o,t){if(o.type!==t.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${o.type} vs ${t.type}`);let i=p=>{switch(p.type){case "sequential":return p.results.reduce((f,l)=>f+l.totalTokens,0);case "supervisor":return p.workerResults.reduce((f,l)=>f+l.totalTokens,0);case "reflect":return p.history.reduce((f,l)=>f+l.producerTokens+l.evaluatorTokens,0);case "debate":return p.tokensConsumed;case "dag":return Object.values(p.nodeResults).reduce((f,l)=>f+l.totalTokens,0);case "goal":return Object.values(p.nodeOutputs).reduce((f,l)=>f+l.totalTokens,0)}},u={patternType:o.type,stepDelta:lt(t)-lt(o),tokensDelta:i(t)-i(o)};if(o.type==="goal"&&t.type==="goal"){let p=new Set(Object.keys(o.facts)),f=new Set(Object.keys(t.facts)),l=[],b=[],w=[];for(let m of f)p.has(m)?JSON.stringify(o.facts[m])!==JSON.stringify(t.facts[m])&&w.push({key:m,before:o.facts[m],after:t.facts[m]}):l.push(m);for(let m of p)f.has(m)||b.push(m);u.facts={added:l,removed:b,changed:w};}if(o.type==="dag"&&t.type==="dag"){let p=new Set(Object.entries(o.statuses).filter(([,f])=>f==="completed").map(([f])=>f));u.nodesCompleted=Object.entries(t.statuses).filter(([f,l])=>l==="completed"&&!p.has(f)).map(([f])=>f);}if(o.type==="goal"&&t.type==="goal"){let p=new Set(o.completedNodes);u.nodesCompleted=t.completedNodes.filter(f=>!p.has(f));}return u}async function Ir(o,t,i){let{createMultiAgentOrchestrator:u}=await import('./multi-agent-orchestrator-SH5TRRS3.cjs'),p=await t.load(i);if(!p)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let f=structuredClone(p),l=u({...o,checkpointStore:t});return l.restore(f),l}function kn(o,t){let i=Object.keys(t);for(let[w,m]of Object.entries(t))for(let S of m.deps??[])if(!t[S])throw new Error(`[Directive MultiAgent] DAG pattern "${o}": node "${w}" depends on unknown node "${S}"`);if(!i.some(w=>{let m=t[w]?.deps;return !m||m.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${o}": no root nodes (every node has dependencies)`);let p=Object.create(null),f=Object.create(null);for(let w of i)f[w]=[];for(let[w,m]of Object.entries(t)){p[w]=(m.deps??[]).length;for(let S of m.deps??[])f[S].push(w);}let l=[];for(let w of i)p[w]===0&&l.push(w);let b=0;for(;l.length>0;){let w=l.shift();b++;for(let m of f[w]??[])p[m]--,p[m]===0&&l.push(m);}if(b!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${o}": cycle detected. Visited ${b}/${i.length} nodes.`)}function yo(o,t,i){return {type:"parallel",handlers:o,merge:t,...i}}function ko(o,t){return {type:"sequential",handlers:o,...t}}function vo(o,t,i){return {type:"supervisor",supervisor:o,workers:t,...i}}function wo(o,t,i){return {type:"dag",nodes:o,merge:t??(u=>u.outputs),...i}}function Ro(o,t,i){return {type:"reflect",handler:o,evaluator:t,...i}}function To(o,t){return {type:"race",handlers:o,...t}}function So(o,t,i){return {type:"goal",nodes:o,when:t,...i}}function xo(){return {select:o=>o}}function Eo(o){let t=o?.topN??3;return {select:(i,u)=>[...i].sort((f,l)=>{let b=u[f]?.avgSatisfactionDelta??0;return (u[l]?.avgSatisfactionDelta??0)-b}).slice(0,t)}}function Ao(){return {select:(o,t)=>[...o].sort((u,p)=>{let f=t[u],l=t[p];if(!f||f.runs===0)return -1;if(!l||l.runs===0)return 1;let b=f.avgSatisfactionDelta>0?f.tokens/f.runs/f.avgSatisfactionDelta:Number.POSITIVE_INFINITY,w=l.avgSatisfactionDelta>0?l.tokens/l.runs/l.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return b-w})}}function Do(o){switch(o.type){case "parallel":return {type:"parallel",handlers:o.handlers,minSuccess:o.minSuccess,timeout:o.timeout};case "sequential":return {type:"sequential",handlers:o.handlers,continueOnError:o.continueOnError};case "supervisor":return {type:"supervisor",supervisor:o.supervisor,workers:o.workers,maxRounds:o.maxRounds};case "dag":{let t=Object.create(null);for(let[i,u]of Object.entries(o.nodes))t[i]={handler:u.handler,deps:u.deps,timeout:u.timeout,priority:u.priority};return {type:"dag",nodes:t,timeout:o.timeout,maxConcurrent:o.maxConcurrent,onNodeError:o.onNodeError}}case "reflect":return {type:"reflect",handler:o.handler,evaluator:o.evaluator,maxIterations:o.maxIterations,onExhausted:o.onExhausted,timeout:o.timeout,threshold:typeof o.threshold=="number"?o.threshold:void 0};case "race":return {type:"race",handlers:o.handlers,timeout:o.timeout,minSuccess:o.minSuccess};case "debate":return {type:"debate",handlers:o.handlers,evaluator:o.evaluator,maxRounds:o.maxRounds,timeout:o.timeout};case "goal":{let t=Object.create(null);for(let[i,u]of Object.entries(o.nodes))t[i]={handler:u.handler,produces:u.produces,requires:u.requires,allowRerun:u.allowRerun,priority:u.priority};return {type:"goal",nodes:t,maxSteps:o.maxSteps,timeout:o.timeout}}}}var Nr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Oo(o,t){if(!o||typeof o!="object"||!Nr.has(o.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${o?.type}"`);let i=Object.create(null);for(let[u,p]of Object.entries(o))u!=="__proto__"&&u!=="constructor"&&u!=="prototype"&&(i[u]=p);return {...i,...t}}function Io(o,t,i,u){return {when:o,require:p=>{let f=typeof t=="function"?t(p):t,l=typeof i=="function"?i(p):i;return {type:"RUN_AGENT",agent:f,input:l}},priority:u}}function No(o,t,i){return {type:"RUN_AGENT",agent:o,input:t,context:i}}function jo(o,t=`
31
+ Please try again with valid JSON only.`,H=await o(S,oe,m);x=H;let $=typeof H.output=="string"?H.output:JSON.stringify(H.output);try{let de=p($),pe=i.safeParse(de);if(pe.success)return {...H,output:pe.data};I=Or(pe.error);}catch(de){I=de instanceof Error?de.message:String(de);}}throw new bn(`[Directive] Failed to get valid structured output after ${u+1} attempts: ${I}`,x)}}var bn=class extends Error{lastResult;constructor(t,i){super(t),this.name="StructuredOutputError",this.lastResult=i;}};function yn(o,t){if(Object.is(o,t))return true;if(typeof o!=typeof t||o===null||t===null||typeof o!="object")return false;if(Array.isArray(o)){if(!Array.isArray(t)||o.length!==t.length)return false;for(let l=0;l<o.length;l++)if(o[l]!==t[l])return false;return true}let i=o,u=t,p=Object.keys(i),f=Object.keys(u);if(p.length!==f.length)return false;for(let l of p)if(i[l]!==u[l])return false;return true}var _e=class{count;maxPermits;queue=[];constructor(t){if(t<1||!Number.isFinite(t))throw new Error(`[Directive Semaphore] Invalid max permits: ${t}. Must be a finite number >= 1.`);this.maxPermits=t,this.count=t;}createReleaseFn(){let t=false;return ()=>{t||(t=true,this.release());}}async acquire(t){if(t?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((i,u)=>{let p,f={resolve:l=>{p&&t&&t.removeEventListener("abort",p),i(l);},reject:u};this.queue.push(f),t&&(p=()=>{let l=this.queue.indexOf(f);l>=0&&(this.queue.splice(l,1),u(new Error("[Directive Semaphore] Aborted while waiting for permit")));},t.addEventListener("abort",p,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let t=this.queue.shift();t&&(this.count--,t.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let t=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),i=this.queue.splice(0,this.queue.length);for(let u of i)u.reject(t);this.count=this.maxPermits;}};function lt(o){switch(o.type){case "sequential":return o.step;case "supervisor":return o.round;case "reflect":return o.iteration;case "debate":return o.round;case "dag":return o.completedCount;case "goal":return o.step}}function _r(o){let t=lt(o),i=o.stepsTotal??null;switch(o.type){case "sequential":{let u=o.results.reduce((l,b)=>l+b.totalTokens,0),p=o.results.length>0?u/o.results.length:0,f=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:p>0&&f!=null?Math.round(p*f):null,estimatedStepsRemaining:f}}case "supervisor":{let u=o.workerResults.reduce((f,l)=>f+l.totalTokens,0),p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "reflect":{let u=o.history.reduce((f,l)=>f+l.producerTokens+l.evaluatorTokens,0),p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "debate":{let u=o.tokensConsumed,p=i!=null?i-t:null;return {percentage:i!=null&&i>0?Math.round(t/i*100):0,stepsCompleted:t,stepsTotal:i,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:p}}case "dag":{let u=i??Object.keys(o.statuses).length,p=o.completedCount,f=Object.values(o.nodeResults).reduce((w,m)=>w+m.totalTokens,0),l=p>0?f/p:0,b=u-p;return {percentage:u>0?Math.round(p/u*100):0,stepsCompleted:p,stepsTotal:u,tokensConsumed:f,estimatedTokensRemaining:b>0?Math.round(l*b):0,estimatedStepsRemaining:b}}case "goal":{let u=Object.values(o.nodeOutputs).reduce((f,l)=>f+l.totalTokens,0),p=o.lastSatisfaction;return {percentage:Math.round(p*100),stepsCompleted:t,stepsTotal:i??null,tokensConsumed:u,estimatedTokensRemaining:null,estimatedStepsRemaining:o.stepMetrics.length>0?Mr(o):null}}}}function Mr(o){let t=o.stepMetrics;if(t.length<2)return null;let i=1-o.lastSatisfaction;if(i<=0)return 0;let p=t.reduce((f,l)=>f+Math.max(0,l.satisfactionDelta),0)/t.length;return p<=0?null:Math.ceil(i/p)}function Pr(o,t){if(o.type!==t.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${o.type} vs ${t.type}`);let i=p=>{switch(p.type){case "sequential":return p.results.reduce((f,l)=>f+l.totalTokens,0);case "supervisor":return p.workerResults.reduce((f,l)=>f+l.totalTokens,0);case "reflect":return p.history.reduce((f,l)=>f+l.producerTokens+l.evaluatorTokens,0);case "debate":return p.tokensConsumed;case "dag":return Object.values(p.nodeResults).reduce((f,l)=>f+l.totalTokens,0);case "goal":return Object.values(p.nodeOutputs).reduce((f,l)=>f+l.totalTokens,0)}},u={patternType:o.type,stepDelta:lt(t)-lt(o),tokensDelta:i(t)-i(o)};if(o.type==="goal"&&t.type==="goal"){let p=new Set(Object.keys(o.facts)),f=new Set(Object.keys(t.facts)),l=[],b=[],w=[];for(let m of f)p.has(m)?JSON.stringify(o.facts[m])!==JSON.stringify(t.facts[m])&&w.push({key:m,before:o.facts[m],after:t.facts[m]}):l.push(m);for(let m of p)f.has(m)||b.push(m);u.facts={added:l,removed:b,changed:w};}if(o.type==="dag"&&t.type==="dag"){let p=new Set(Object.entries(o.statuses).filter(([,f])=>f==="completed").map(([f])=>f));u.nodesCompleted=Object.entries(t.statuses).filter(([f,l])=>l==="completed"&&!p.has(f)).map(([f])=>f);}if(o.type==="goal"&&t.type==="goal"){let p=new Set(o.completedNodes);u.nodesCompleted=t.completedNodes.filter(f=>!p.has(f));}return u}async function Ir(o,t,i){let{createMultiAgentOrchestrator:u}=await import('./multi-agent-orchestrator-KFGTEGE5.cjs'),p=await t.load(i);if(!p)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let f=structuredClone(p),l=u({...o,checkpointStore:t});return l.restore(f),l}function kn(o,t){let i=Object.keys(t);for(let[w,m]of Object.entries(t))for(let S of m.deps??[])if(!t[S])throw new Error(`[Directive MultiAgent] DAG pattern "${o}": node "${w}" depends on unknown node "${S}"`);if(!i.some(w=>{let m=t[w]?.deps;return !m||m.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${o}": no root nodes (every node has dependencies)`);let p=Object.create(null),f=Object.create(null);for(let w of i)f[w]=[];for(let[w,m]of Object.entries(t)){p[w]=(m.deps??[]).length;for(let S of m.deps??[])f[S].push(w);}let l=[];for(let w of i)p[w]===0&&l.push(w);let b=0;for(;l.length>0;){let w=l.shift();b++;for(let m of f[w]??[])p[m]--,p[m]===0&&l.push(m);}if(b!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${o}": cycle detected. Visited ${b}/${i.length} nodes.`)}function yo(o,t,i){return {type:"parallel",handlers:o,merge:t,...i}}function ko(o,t){return {type:"sequential",handlers:o,...t}}function vo(o,t,i){return {type:"supervisor",supervisor:o,workers:t,...i}}function wo(o,t,i){return {type:"dag",nodes:o,merge:t??(u=>u.outputs),...i}}function Ro(o,t,i){return {type:"reflect",handler:o,evaluator:t,...i}}function To(o,t){return {type:"race",handlers:o,...t}}function So(o,t,i){return {type:"goal",nodes:o,when:t,...i}}function xo(){return {select:o=>o}}function Eo(o){let t=o?.topN??3;return {select:(i,u)=>[...i].sort((f,l)=>{let b=u[f]?.avgSatisfactionDelta??0;return (u[l]?.avgSatisfactionDelta??0)-b}).slice(0,t)}}function Ao(){return {select:(o,t)=>[...o].sort((u,p)=>{let f=t[u],l=t[p];if(!f||f.runs===0)return -1;if(!l||l.runs===0)return 1;let b=f.avgSatisfactionDelta>0?f.tokens/f.runs/f.avgSatisfactionDelta:Number.POSITIVE_INFINITY,w=l.avgSatisfactionDelta>0?l.tokens/l.runs/l.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return b-w})}}function Do(o){switch(o.type){case "parallel":return {type:"parallel",handlers:o.handlers,minSuccess:o.minSuccess,timeout:o.timeout};case "sequential":return {type:"sequential",handlers:o.handlers,continueOnError:o.continueOnError};case "supervisor":return {type:"supervisor",supervisor:o.supervisor,workers:o.workers,maxRounds:o.maxRounds};case "dag":{let t=Object.create(null);for(let[i,u]of Object.entries(o.nodes))t[i]={handler:u.handler,deps:u.deps,timeout:u.timeout,priority:u.priority};return {type:"dag",nodes:t,timeout:o.timeout,maxConcurrent:o.maxConcurrent,onNodeError:o.onNodeError}}case "reflect":return {type:"reflect",handler:o.handler,evaluator:o.evaluator,maxIterations:o.maxIterations,onExhausted:o.onExhausted,timeout:o.timeout,threshold:typeof o.threshold=="number"?o.threshold:void 0};case "race":return {type:"race",handlers:o.handlers,timeout:o.timeout,minSuccess:o.minSuccess};case "debate":return {type:"debate",handlers:o.handlers,evaluator:o.evaluator,maxRounds:o.maxRounds,timeout:o.timeout};case "goal":{let t=Object.create(null);for(let[i,u]of Object.entries(o.nodes))t[i]={handler:u.handler,produces:u.produces,requires:u.requires,allowRerun:u.allowRerun,priority:u.priority};return {type:"goal",nodes:t,maxSteps:o.maxSteps,timeout:o.timeout}}}}var Nr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Oo(o,t){if(!o||typeof o!="object"||!Nr.has(o.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${o?.type}"`);let i=Object.create(null);for(let[u,p]of Object.entries(o))u!=="__proto__"&&u!=="constructor"&&u!=="prototype"&&(i[u]=p);return {...i,...t}}function Io(o,t,i,u){return {when:o,require:p=>{let f=typeof t=="function"?t(p):t,l=typeof i=="function"?i(p):i;return {type:"RUN_AGENT",agent:f,input:l}},priority:u}}function No(o,t,i){return {type:"RUN_AGENT",agent:o,input:t,context:i}}function jo(o,t=`
32
32
 
33
33
  `){return o.map(i=>typeof i.output=="string"?i.output:internals.safeStringify(i.output)).join(t)}function $o(o,t){if(o.length===0)throw new Error("[Directive MultiAgent] No results to pick from");return o.reduce((i,u)=>t(u)>t(i)?u:i)}function Go(o){return o.map(t=>t.output)}function qo(o){return o.reduce((t,i)=>t+i.totalTokens,0)}function Lo(...o){if(o.length===0)throw new Error("[Directive MultiAgent] composePatterns requires at least one pattern");return async(t,i)=>{let u=i,p;for(let f of o){switch(f.type){case "parallel":{let l=f,b=l.handlers.map(()=>u);p=await t.runParallel(l.handlers,b,l.merge,{minSuccess:l.minSuccess,timeout:l.timeout});break}case "sequential":{let l=f,b=await t.runSequential(l.handlers,u,{transform:l.transform}),w=b[b.length-1];p=l.extract?l.extract(w?.output):w?.output;break}case "supervisor":{let l=f,b=l.maxRounds??5;if(b<1||!Number.isFinite(b))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let w=[],m=await t.runAgent(l.supervisor,u);for(let S=0;S<b;S++){let x=m.output,I;if(typeof x=="string")try{I=JSON.parse(x);}catch{try{let oe=x.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),H=Mt(oe);if(H&&typeof H=="object"&&"action"in H)I=H;else break}catch{break}}else if(x&&typeof x=="object"&&"action"in x)I=x;else break;if(I.action==="complete"||!I.worker||!l.workers.includes(I.worker))break;let Q=await t.runAgent(I.worker,I.workerInput??"");w.push(Q),m=await t.runAgent(l.supervisor,`Worker ${I.worker} completed with result: ${internals.safeStringify(Q.output)}`);}p=l.extract?l.extract(m.output,w):m.output;break}case "dag":{let l=f,b={input:u,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.debug("[Directive MultiAgent] composePatterns: DAG nodes executed sequentially \u2014 use runPattern() for full parallel DAG execution");let w=Object.keys(l.nodes);for(let m of w){let S=l.nodes[m];b.statuses[m]="running";try{let x=u;if(S.transform)x=S.transform(b);else if(S.deps&&S.deps.length>0){let Q=Object.create(null);for(let oe of S.deps)b.outputs[oe]!==void 0&&(Q[oe]=b.outputs[oe]);x=JSON.stringify(Q);}let I=await t.runAgent(S.handler,x);b.outputs[m]=I.output,b.results[m]=I,b.statuses[m]="completed";}catch(x){if(b.statuses[m]="error",b.errors[m]=x instanceof Error?x.message:String(x),l.onNodeError==="fail")throw x}}p=await l.merge(b);break}case "reflect":{let l=f,b=l.maxIterations??2,w=l.parseEvaluation??(I=>{if(typeof I=="string")try{return JSON.parse(I)}catch{return {passed:false,feedback:I}}return I&&typeof I=="object"&&"passed"in I?I:{passed:false,feedback:"Invalid evaluator output"}}),m=l.buildRetryInput??((I,Q)=>`${I}
34
34
 
@@ -68,5 +68,5 @@ Please improve your response.`;}_&&L&&T>=D&&(T-D+1)%v===0&&await mt({type:"refle
68
68
  `+Object.entries(A).map(([G,me])=>` - ${G}: ${me}`).join(`
69
69
  `))));});});await Promise.all(L).catch(()=>{});let U=C[0],N=U.agentId,q=new Set(C.map(T=>T.agentId)),B=M.filter(T=>!q.has(T)&&!(T in A));P&&(P.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:d,winnerId:N,durationMs:Date.now()-a}),B.length>0&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:d,cancelledIds:B,reason:"winner_found"}));let D=e.extract?e.extract(U.result):U.result.output,h=r>1?C.map(T=>({agentId:T.agentId,result:e.extract?e.extract(T.result):T.result.output})):void 0;return {winnerId:N,result:D,allResults:h}}catch(_){throw E=_ instanceof Error?_:new Error(String(_)),P&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:d,cancelledIds:M,reason:c.signal.aborted?"timeout":"all_failed"}),_}finally{g&&clearTimeout(g),y&&e.signal&&e.signal.removeEventListener("abort",y),s&&K("onPatternComplete",{patternId:d,patternType:"race",durationMs:Date.now()-a,timestamp:Date.now(),error:E});}}async function Ft(e,n,s,r){let{handlers:a,evaluator:d,maxRounds:c=2,extract:g,parseJudgement:y}=e;if(a.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(c<1||!Number.isFinite(c))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let E=e.signal,A,M;if(e.timeout&&!E){let R=new AbortController;A=setTimeout(()=>R.abort(),e.timeout),E=R.signal;}else if(e.timeout&&E){let R=new AbortController;A=setTimeout(()=>R.abort(),e.timeout),M=()=>R.abort(),E.addEventListener("abort",M,{once:true}),E=R.signal;}let L=y??(R=>{if(typeof R=="string")try{let O=JSON.parse(R);return O&&typeof O=="object"&&typeof O.winnerId=="string"?O:(re&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:a[0]})}catch{return re&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:a[0]}}return R&&typeof R=="object"&&"winnerId"in R&&typeof R.winnerId=="string"?R:(re&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:a[0]})}),v=r?.rounds?[...r.rounds]:[],C=r?.currentInput??n,U=r?.lastWinnerId??a[0],N=r?.lastWinnerOutput??void 0,q=r?.round??0,B=e.checkpoint,D=B?.store??se,h=B?.everyN??5,T=B?.labelPrefix??"debate",F=s??"__inline_debate",J=Date.now(),j=r?.tokensConsumed??0;s&&K("onPatternStart",{patternId:F,patternType:"debate",input:n,timestamp:J});let k;try{for(let O=q;O<c&&!E?.aborted;O++){let W=a.map(async ye=>{let Pe=await be(ye,C,{signal:E,patternId:F});return j+=Pe.totalTokens,{agentId:ye,output:Pe.output}}),G=await Promise.all(W);if(E?.aborted)break;let me=JSON.stringify({round:O+1,totalRounds:c,proposals:G.map(ye=>({agentId:ye.agentId,proposal:ye.output}))}),ae=await be(d,me,{signal:E,patternId:F});j+=ae.totalTokens;let ue=L(ae.output);if(a.includes(ue.winnerId)||(ue.winnerId=a[0]),v.push({proposals:G,judgement:ue}),P&&P.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:F,round:O+1,totalRounds:c,winnerId:ue.winnerId,score:ue.score,agentCount:a.length}),U=ue.winnerId,N=G.find(ye=>ye.agentId===ue.winnerId)?.output??G[0].output,B&&D&&O>q&&(O-q)%h===0){let ye={type:"debate",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${T}:round-${O+1}`,patternId:F,stepsTotal:c,round:O+1,currentInput:C,rounds:[...v],lastWinnerId:U,lastWinnerOutput:N,tokensConsumed:j};await mt(ye,D,B);}O<c-1&&ue.feedback&&(C=`Previous round feedback: ${ue.feedback}
70
70
 
71
- Original task: ${n}`);}if(v.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let R=g?g(N):N;return {winnerId:U,result:R,rounds:v}}catch(R){throw k=R instanceof Error?R:new Error(String(R)),R}finally{A&&clearTimeout(A),M&&e.signal&&e.signal.removeEventListener("abort",M),s&&K("onPatternComplete",{patternId:F,patternType:"debate",durationMs:Date.now()-J,timestamp:Date.now(),error:k});}}let ur=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function ht(e,n){for(let s of Object.keys(n))ur.has(s)||(e[s]=n[s]);}function lr(e,n){let s=Object.create(null);for(let[y,E]of Object.entries(n))for(let A of E.produces)s[A]||(s[A]=[]),s[A].push(y);let r=Object.keys(n),a=Object.create(null),d=Object.create(null);for(let y of r)a[y]=0,d[y]=[];for(let[y,E]of Object.entries(n))for(let A of E.requires??[]){let M=s[A];if(M)for(let _ of M)_!==y&&(d[_].push(y),a[y]=(a[y]??0)+1);}let c=[];for(let y of r)a[y]===0&&c.push(y);let g=0;for(;c.length>0;){let y=c.shift();g++;for(let E of d[y]??[])a[E]--,a[E]===0&&c.push(E);}if(g!==r.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${g}/${r.length} nodes.`)}function cr(e,n){let s=Object.create(null);for(let[r,a]of Object.entries(n))for(let d of a.produces)s[d]||(s[d]=[]),s[d].push(r);for(let[r,a]of Object.entries(s))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${r}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function Te(e,...n){if(e)try{return e(...n)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}async function dr(e,...n){if(e)try{return await e(...n)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}function ln(e,n,s){let r=n.slice(-3),a=r.length>0?r.reduce((g,y)=>g+y.satisfactionDelta,0)/r.length:0,d=null;a>0&&e<1&&(d=Math.ceil((1-e)/a));let c=false;if(n.length>=6){let g=n.slice(-3),y=n.slice(-6,-3),E=g.reduce((M,_)=>M+_.satisfactionDelta,0)/3,A=y.reduce((M,_)=>M+_.satisfactionDelta,0)/3;c=E<A*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:d,decelerating:c}}function St(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Ht(e,n,s,r){let{nodes:a,when:d,satisfaction:c,maxSteps:g=50,extract:y,selectionStrategy:E,relaxation:A,onStep:M,onStall:_}=e,L=Object.create(null);for(let[ne,ie]of Object.entries(a))L[ne]={...ie};if(Object.keys(L).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let C=s??"__goal";for(let[ne,ie]of Object.entries(L))if(!Y[ie.handler]&&!ee[ie.handler])throw new Error(`[Directive MultiAgent] goal node "${ne}" references unregistered handler "${ie.handler}"`);lr(C,L),cr(C,L);for(let[ne,ie]of Object.entries(L))ie.extractOutput||console.warn(`[Directive MultiAgent] goal node "${ne}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let U=e.signal,N,q,B=e.timeout??3e5;if(B&&!U){let ne=new AbortController;N=setTimeout(()=>ne.abort(),B),U=ne.signal;}else if(B&&U){let ne=new AbortController;N=setTimeout(()=>ne.abort(),B),q=()=>ne.abort(),U.addEventListener("abort",q,{once:true}),U=ne.signal;}let D=Date.now();if(P){let ne=Object.values(L).map(ie=>ie.handler);P.record({type:"pattern_start",timestamp:D,snapshotId:null,patternId:C,patternType:"goal",handlers:ne,taskIds:ne.filter(ie=>ee[ie]!=null)});}K("onPatternStart",{patternId:C,patternType:"goal",input:typeof n=="string"?n:JSON.stringify(n),timestamp:D});let h=Object.create(null);r?ht(h,r.facts):typeof n=="string"?h.input=n:ht(h,n);let T=r?[...r.executionOrder]:[],F=Object.create(null);if(r)for(let[ne,ie]of Object.entries(r.nodeOutputs))F[ne]={output:ie.output,totalTokens:ie.totalTokens};let J=r?[...r.stepMetrics]:[],j=r?[...r.relaxations]:[],k=new Set(r?.completedNodes??[]),R=new Map(r?Object.entries(r.failedNodes).map(([ne,ie])=>[ne,ie]):[]),O=new Map(r?Object.entries(r.nodeInputHashes):[]),W=Object.create(null);if(r)for(let[ne,ie]of Object.entries(r.agentMetrics))W[ne]={runs:ie.runs,avgSatisfactionDelta:ie.runs>0?ie.totalDelta/ie.runs:0,tokens:ie.tokens,totalDelta:ie.totalDelta};let G=r?.stallSteps??0,me=r?.appliedRelaxationTiers??0,ae=r?.lastSatisfaction??0,ue,at=false,ye=r?.step??0,Pe=e.checkpoint,mr=Pe?.everyN??5,_n=Pe?.store??se,hr=Pe?.labelPrefix??"goal",Mn,br=3;try{for(let ge=ye;ge<g;ge++){if(Te(d,h)===!0){at=!0;let Z=Date.now()-D,X=Object.values(F).reduce((le,ke)=>le+ke.totalTokens,0);return {achieved:!0,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:X,durationMs:Z,stepMetrics:J,relaxations:j}}if(U?.aborted){let Z=Date.now()-D,X=Object.values(F).reduce((le,ke)=>le+ke.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:X,durationMs:Z,stepMetrics:J,relaxations:j,error:"Aborted or timed out"}}let it=[];for(let[Z,X]of Object.entries(L)){if((R.get(Z)??0)>=br)continue;let le=X.requires??[];if(le.every(he=>h[he]!=null)){if(k.has(Z)){if(!X.allowRerun)continue;let he=JSON.stringify(le.map(Se=>h[Se]));if(O.get(Z)===he)continue}it.push(Z);}}let Ke=it;if(E&&it.length>0){let Z=c?Te(c,h)??0:Te(d,h)===!0?1:0,X=St(Z),le=ln(X,J,ge),ke=Object.create(null);for(let[Se,ce]of Object.entries(W))ke[Se]={runs:ce.runs,avgSatisfactionDelta:ce.runs>0?ce.totalDelta/ce.runs:0,tokens:ce.tokens};let he=E.select(it,ke,le);Ke=he&&he.length>0?he:it;}if(Ke.sort((Z,X)=>(L[X].priority??0)-(L[Z].priority??0)),Te(M,ge,{...h},Ke),Ke.length===0){G++;let Z=!1;if(A)for(let X=me;X<A.length;X++){let le=A[X],ke=le.afterStallSteps??3;if(G>=ke){let he=le.strategy;switch(he.type){case "allow_rerun":for(let Se of he.nodes)k.delete(Se),O.delete(Se);break;case "alternative_nodes":for(let Se of he.nodes){let ce=`__relaxation_${X}_${Se.handler}`;L[ce]={...Se};}break;case "inject_facts":ht(h,he.facts);break;case "accept_partial":{let Se=Date.now()-D,ce=Object.values(F).reduce((ve,Ge)=>ve+Ge.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:ce,durationMs:Se,stepMetrics:J,relaxations:j,error:`Accepted partial result via relaxation tier "${le.label}"`}}case "custom":{let Se=Te(c,h)??0,ce={step:ge,facts:{...h},metrics:ln(St(Se),J,ge),completedNodes:new Set(k),failedNodes:new Map(R)};await dr(he.apply,ce);break}}j.push({step:ge,tierIndex:X,label:le.label,strategy:he.type}),me=X+1,G=0,Z=!0;break}}if(!Z){let X=Te(c,h)??0,le=ln(St(X),J,ge);if(Te(_,ge,le),!A||me>=A.length){let ke=Date.now()-D,he=Object.values(F).reduce((Se,ce)=>Se+ce.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:he,durationMs:ke,stepMetrics:J,relaxations:j,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}G=0;let yr=Date.now(),kr=c?Te(c,h)??0:Te(d,h)===!0?1:0,vr=St(kr),Pn=0,bt=[],wr=Ke.map(async Z=>{let X=L[Z],le=X.requires??[],ke=JSON.stringify(le.map(ce=>h[ce]));O.set(Z,ke);let he,Se=Te(X.buildInput,h);if(Se!=null)he=Se;else {let ce=Object.create(null);for(let ve of le)h[ve]!=null&&(ce[ve]=h[ve]);Object.keys(ce).length>0?he=JSON.stringify(ce):h.input!=null?he=String(h.input):he=JSON.stringify(h);}try{let ce=await be(X.handler,he,{signal:U??void 0,patternId:C});if(F[Z]=ce,T.push(Z),k.add(Z),R.delete(Z),X.extractOutput){let ve=Te(X.extractOutput,ce);ve&&(ht(h,ve),bt.push(...Object.keys(ve)));}else {let ve=ce.output;if(ve&&typeof ve=="object")ht(h,ve),bt.push(...Object.keys(ve));else if(typeof ve=="string")try{let Ge=JSON.parse(ve);if(Ge&&typeof Ge=="object"&&!Array.isArray(Ge))ht(h,Ge),bt.push(...Object.keys(Ge));else for(let In of X.produces)h[In]=ve,bt.push(In);}catch{for(let Ge of X.produces)h[Ge]=ve,bt.push(Ge);}}return Pn+=ce.totalTokens,{nodeId:Z,success:!0}}catch(ce){let ve=(R.get(Z)??0)+1;return R.set(Z,ve),{nodeId:Z,success:!1,error:ce}}});await Promise.allSettled(wr);let Rr=c?Te(c,h)??0:Te(d,h)===!0?1:0,Ut=St(Rr),Jt=Ut-vr;if(J.push({step:ge,durationMs:Date.now()-yr,nodesRun:[...Ke],factsProduced:bt,satisfaction:Ut,satisfactionDelta:Jt,tokensConsumed:Pn}),P)for(let Z of Ke){let X=L[Z];P.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:X.handler,step:ge,nodeId:Z,satisfaction:Ut,satisfactionDelta:Jt});}for(let Z of Ke){let X=L[Z];W[X.handler]||(W[X.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let le=W[X.handler];le.runs++,le.totalDelta+=Jt,le.tokens+=F[Z]?.totalTokens??0;}if(ae=Ut,Jt<=0?G++:G=0,Pe&&_n&&ge>ye&&(ge-ye)%mr===0){let Z={type:"goal",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${hr}:step-${ge}`,patternId:C,stepsTotal:g,step:ge+1,facts:structuredClone(h),completedNodes:[...k],failedNodes:Object.fromEntries(R),nodeInputHashes:Object.fromEntries(O),nodeOutputs:Object.fromEntries(Object.entries(F).map(([le,ke])=>[le,{output:ke.output,totalTokens:ke.totalTokens}])),executionOrder:[...T],stepMetrics:[...J],relaxations:[...j],appliedRelaxationTiers:me,stallSteps:G,lastSatisfaction:ae,agentMetrics:Object.fromEntries(Object.entries(W).map(([le,ke])=>[le,{runs:ke.runs,totalDelta:ke.totalDelta,tokens:ke.tokens}]))},X=await mt(Z,_n,Pe);X&&(Mn=X);}}let ne=Date.now()-D,ie=Object.values(F).reduce((ge,it)=>ge+it.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:g,totalTokens:ie,durationMs:ne,stepMetrics:J,relaxations:j,error:`Max steps (${g}) exhausted without achieving goal`}}catch(ne){throw ue=ne instanceof Error?ne:new Error(String(ne)),ne}finally{if(N!=null&&clearTimeout(N),q&&e.signal&&e.signal.removeEventListener("abort",q),P){let ne=Object.values(F).reduce((ie,ge)=>ie+ge.totalTokens,0);P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:C,patternType:"goal",durationMs:Date.now()-D,achieved:at,stepMetrics:J,relaxations:j,totalTokens:ne,...ue?{error:ue.message}:{}});}K("onPatternComplete",{patternId:C,patternType:"goal",durationMs:Date.now()-D,timestamp:Date.now(),error:ue});}}function pr(e){if(!V)return [];let n=[],s=new Set;if(s.add(e),V.equivalencyGroups){for(let r of Object.values(V.equivalencyGroups))if(r.includes(e))for(let a of r)!s.has(a)&&Y[a]&&(n.push(a),s.add(a));}if(V.useCapabilities!==false){let r=Y[e];if(r?.capabilities&&r.capabilities.length>0)for(let[a,d]of Object.entries(Y)){if(s.has(a))continue;let c=d.capabilities??[];r.capabilities.every(g=>c.includes(g))&&(n.push(a),s.add(a));}}if(Ce){let r=V.healthThreshold??30;return n.filter(a=>Ce.getHealthScore(a)>r)}return n}function gr(e){if(e.length===0)return null;if(!V||!Ce)return e[0]??null;if(V.selectionStrategy==="round-robin"&&He){let r=[...e].sort().join(","),a=He.get(r)??0,d=e[a%e.length];return He.set(r,a+1),d}let n=e[0],s=Ce.getHealthScore(n);for(let r=1;r<e.length;r++){let a=Ce.getHealthScore(e[r]);a>s&&(n=e[r],s=a);}return n}function fr(e){switch(e.type){case "parallel":return e.handlers;case "sequential":return e.handlers;case "supervisor":return [e.supervisor,...e.workers];case "dag":return Object.values(e.nodes).map(n=>n.handler);case "reflect":return [e.handler,e.evaluator];case "race":return e.handlers;case "debate":return [...e.handlers,e.evaluator];case "goal":return Object.values(e.nodes).map(n=>n.handler);default:return []}}let On={system:z,get facts(){return z.facts},get timeline(){return P},get healthMonitor(){return Ce},get derived(){return Object.freeze({...pt})},onDerivedChange(e){return qt.add(e),()=>{qt.delete(e);}},get scratchpad(){return nn},runAgent:be,runAgentStream:on,async runPattern(e,n){te();let s=u[e];if(!s){let d=Object.keys(u).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${d}`)}let r=Date.now();if(P){let d=fr(s);P.record({type:"pattern_start",timestamp:r,snapshotId:null,patternId:e,patternType:s.type,handlers:d,taskIds:d.filter(c=>ee[c]!=null)});}let a;try{switch(s.type){case "parallel":return await ir(s,n,e);case "sequential":return await sn(s,n,e);case "supervisor":return await an(s,n,e);case "dag":return await un(s,n,e);case "reflect":return await Bt(s,n,e);case "race":return (await Dn(s,n,e)).result;case "debate":return (await Ft(s,n,e)).result;case "goal":return (await Ht(s,n,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${s.type}`)}}catch(d){throw a=d instanceof Error?d:new Error(String(d)),d}finally{P&&P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:s.type,durationMs:Date.now()-r,...a?{error:a.message}:{}});}},async runParallel(e,n,s,r){te();let a=Array.isArray(n)?n:e.map(()=>n);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let d=new AbortController,c;r?.timeout&&(c=setTimeout(()=>d.abort(),r.timeout));try{let g=e.map((A,M)=>be(A,a[M],{signal:d.signal}).catch(_=>{if(r?.minSuccess!==void 0)return null;throw _})),y=await Promise.all(g),E=y.filter(A=>A!==null);if(r?.minSuccess!==void 0&&E.length<r.minSuccess){let A=y.length-E.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${E.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess}, failed: ${A})`)}return s(E)}finally{c&&clearTimeout(c);}},async runSequential(e,n,s){te();let r=[],a=n;for(let d=0;d<e.length;d++){let c=e[d],g=await be(c,a);r.push(g),d<e.length-1&&(s?.transform?a=s.transform(g.output,c,d):a=typeof g.output=="string"?g.output:internals.safeStringify(g.output));}return r},async handoff(e,n,s,r){if(te(),!Y[e]){let c=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${c}`)}if(!Y[n]){let c=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${n}" not found. Registered: ${c}`)}{let c=await st("pre_handoff",e,Y[e].agent.name,s,void 0,{handoff:{fromAgent:e,toAgent:n}});if(c.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};s=c.input;}let a={id:`handoff-${++$t}`,fromAgent:e,toAgent:n,input:s,context:r,requestedAt:Date.now()};je.push(a);try{p?.(a);}catch(c){re&&console.debug("[Directive MultiAgent] onHandoff threw:",c);}K("onHandoff",a),P&&P.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n});let d=Y[n].memory??S;if(d&&r)try{let c=Object.entries(r).map(([g,y])=>`${g}: ${internals.safeStringify(y)}`).join(", ");d.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${c}`}]);}catch(c){re&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",c);}try{let c=await be(n,s),g={request:a,result:c,completedAt:Date.now()};nr(g);try{f?.(g);}catch(E){re&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",E);}K("onHandoffComplete",g),P&&P.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n,durationMs:g.completedAt-a.requestedAt});let y=je.indexOf(a);return y>=0&&je.splice(y,1),c}catch(c){let g=je.indexOf(a);throw g>=0&&je.splice(g,1),c}},approve(e){te();let n=dt.get(e);if(n){dt.delete(e);let s=fe(n);z.batch(()=>{let r=vt(s),a=200,d=[...r.approved,e];Xe(s,{...r,pending:r.pending.filter(c=>c.id!==e),approved:d.length>a?d.slice(-a):d});});return}re&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,n){te();let s=dt.get(e);if(s){dt.delete(e);let r=fe(s);z.batch(()=>{let a=vt(r);n&&re&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${n}`);let d={id:e,reason:n,rejectedAt:Date.now()},c=200,g=[...a.rejected,d];Xe(r,{...a,pending:a.pending.filter(y=>y.id!==e),rejected:g.length>c?g.slice(-c):g});});return}re&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){te(),Ue="paused",re&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){te(),Ue==="paused"&&(Ue="idle",re&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let n=xe[e];return n?{...n}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(xe).map(([e,n])=>[e,{...n}]))},getPendingHandoffs(){return [...je]},get totalTokens(){return nt},waitForIdle(e){let n=()=>jt===0&&Object.values(xe).every(s=>s.status==="idle"||s.status==="completed"||s.status==="error");return n()?Promise.resolve():new Promise((s,r)=>{let a=null,d=()=>{Gt.delete(c),a&&clearTimeout(a);},c=()=>{n()&&(d(),s());};Gt.add(c),e!==void 0&&(a=setTimeout(()=>{d(),r(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,n,s){return be(e,n,s)},runStream(e,n,s){return on(e,n,s)},registerAgent(e,n){if(te(),It.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(Y[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(ee[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let s=n.constraints?zt(n.constraints):{},r=Object.create(null);if(n.resolvers)for(let[d,c]of Object.entries(n.resolvers))r[d]={requirement:c.requirement,key:c.key,resolve:async(g,y)=>{let E=Oe(y.facts),M={facts:{...y.facts,...E},runAgent:async(_,L,v)=>t(_,L,v),signal:y.signal};return c.resolve(g,M)}};let a=core.createModule(e,{schema:pn,init:d=>{Ye(d,{status:"idle",currentAgent:n.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(d,{pending:[],approved:[],rejected:[]}),wt(d,[]),Rt(d,[]),Ze(d,_t());},constraints:s,resolvers:Object.keys(r).length>0?r:void 0});z.registerModule(e,a),Y[e]=n,Je.set(e,new _e(n.maxConcurrent??1)),xe[e]={status:"idle",runCount:0,totalTokens:0},re&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${n.agent.name})`),$e();},unregisterAgent(e){if(te(),!Y[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(xe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,d]of Object.entries(u)){let c;switch(d.type){case "supervisor":c=[d.supervisor,...d.workers];break;case "dag":c=Object.values(d.nodes).map(g=>g.handler);break;case "reflect":c=[d.handler,d.evaluator];break;case "parallel":case "sequential":case "race":c=d.handlers;break;case "debate":c=[...d.handlers,d.evaluator];break;default:c=[];}c.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let s=Je.get(e);s&&(s.drain(),Je.delete(e));let r=fe(e);r&&z.batch(()=>{Ye(r,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(r,{pending:[],approved:[],rejected:[]}),wt(r,[]),Rt(r,[]),Ze(r,_t());}),delete Y[e],delete xe[e],re&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),$e();},getAgentIds(){return Object.keys(Y)},registerTask(e,n){if(te(),It.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(!e||typeof e!="string"||e.trim()!==e||e.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(Y[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(ee[e])throw new Error(`[Directive MultiAgent] Task "${e}" is already registered`);if(n.timeout!==void 0&&(!Number.isFinite(n.timeout)||n.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(n.maxConcurrent!==void 0&&(!Number.isFinite(n.maxConcurrent)||n.maxConcurrent<1||!Number.isInteger(n.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(n.retry){let{attempts:s,delayMs:r}=n.retry;if(!Number.isFinite(s)||s<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(r!==void 0&&(!Number.isFinite(r)||r<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}ee[e]=n,Ae[e]={status:"idle"},Fe.set(e,new _e(n.maxConcurrent??1)),re&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${n.label??e})`);},unregisterTask(e){if(te(),!ee[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(Ae[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let s=Fe.get(e);s&&(s.drain(),Fe.delete(e)),delete ee[e],delete Ae[e],re&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(ee)},getTaskRegistry(){let e=Object.create(null);for(let[n,s]of Object.entries(ee))e[n]={label:s.label,description:s.description};return e},getTaskState(e){let n=Ae[e];return n?Object.freeze(structuredClone(n)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[n,s]of Object.entries(Ae))e[n]=Object.freeze(structuredClone(s));return e},getNodeIds(){return [...Object.keys(Y),...Object.keys(ee)]},reset(){te();for(let n of Object.keys(Y)){let s=Y[n]?.maxConcurrent??1;xe[n]={status:"idle",runCount:0,totalTokens:0};let r=Je.get(n);r&&r.drain(),Je.set(n,new _e(s));let a=fe(n);z.batch(()=>{Ye(a,{status:"idle",currentAgent:Y[n].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(a,{pending:[],approved:[],rejected:[]}),wt(a,[]),Rt(a,[]),Ze(a,_t());});}for(let n of Object.keys(ee)){Ae[n]={status:"idle"};let s=Fe.get(n);s&&s.drain(),Fe.set(n,new _e(ee[n].maxConcurrent??1));}ft.clear(),Tt.clear(),dt.clear(),je.length=0,rt.length=0,$t=0,nt=0,Ue="idle",jt=0,ot();let e=fe("__coord");z.batch(()=>{adapterUtils.setBridgeFact(e,"__globalTokens",0),adapterUtils.setBridgeFact(e,"__status","idle"),adapterUtils.setBridgeFact(e,"__handoffs",[]),adapterUtils.setBridgeFact(e,"__handoffResults",[]),adapterUtils.setBridgeFact(e,"__budgetWarningFired",false),Be&&adapterUtils.setBridgeFact(e,Ee,{...Be.init});}),Ce&&Ce.reset(),Ne=null;for(let n of Object.keys(pt))delete pt[n];$e();},async checkpoint(e){te();for(let[s,r]of Object.entries(xe))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${s}" is running`);for(let[s,r]of Object.entries(Ae))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${s}" is running`);if(!z.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let n={version:1,id:Qe(),createdAt:new Date().toISOString(),label:e?.label,systemExport:z.history.export(),timelineExport:P?.export()??null,localState:{type:"multi",globalTokenCount:nt,globalStatus:Ue,agentStates:Object.fromEntries(Object.entries(xe).map(([s,r])=>[s,structuredClone(r)])),handoffCounter:$t,pendingHandoffs:[...je],handoffResults:[...rt],roundRobinCounters:He?Object.fromEntries(He):null,taskStates:Object.fromEntries(Object.entries(Ae).map(([s,r])=>[s,{lastOutput:r.lastOutput!=null?String(r.lastOutput):void 0,lastError:r.lastError}]))},memoryExport:S?S.export?.()??null:null,orchestratorType:"multi"};return se&&await se.save(n),n},restore(e,n){if(te(),!mn(e))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(e.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${e.orchestratorType}"`);if(!z.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");z.history.import(e.systemExport),n?.restoreTimeline!==false&&e.timelineExport&&P&&P.import(e.timelineExport),e.memoryExport&&S&&S.import&&S.import(e.memoryExport);let s=e.localState;nt=s.globalTokenCount,Ue=s.globalStatus,$t=s.handoffCounter,je.length=0,je.push(...s.pendingHandoffs),rt.length=0,rt.push(...s.handoffResults);for(let[r,a]of Object.entries(s.agentStates))xe[r]&&(xe[r]={...a});if(s.roundRobinCounters&&He){He.clear();for(let[r,a]of Object.entries(s.roundRobinCounters))He.set(r,a);}for(let[r,a]of Object.entries(Y)){let d=Je.get(r);d&&d.drain(),Je.set(r,new _e(a.maxConcurrent??1));}if(s.taskStates){for(let[r,a]of Object.entries(s.taskStates)){if(!ee[r])throw new Error(`[Directive MultiAgent] Checkpoint references task "${r}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);Ae[r]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[r,a]of Object.entries(ee)){let d=Fe.get(r);d&&d.drain(),Fe.set(r,new _e(a.maxConcurrent??1));}}$e();},runParallelStream(e,n,s,r){te();let a=Array.isArray(n)?n:e.map(()=>n);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let d=new AbortController,c;r?.timeout&&(c=setTimeout(()=>d.abort(),r.timeout));let g=e.map((v,C)=>{let U=on(v,a[C],{signal:d.signal});return {agentId:v,streamResult:U}}),y=g.map(({agentId:v,streamResult:C})=>({agentId:v,stream:C.stream})),{stream:E,getDroppedCount:A}=Wn(y),M;r?.signal&&(M=()=>d.abort(),r.signal.addEventListener("abort",M,{once:true}));let _=Promise.allSettled(g.map(({streamResult:v})=>v.result)).then(v=>{c&&clearTimeout(c),M&&r?.signal&&r.signal.removeEventListener("abort",M);let C=[];for(let U of v)U.status==="fulfilled"&&C.push(U.value);if(r?.minSuccess!==void 0&&C.length<r.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${C.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess})`);return C}),L=_.then(v=>s(v));return _.catch(()=>{}),L.catch(()=>{}),{stream:E,results:_,merge:L,getDroppedCount:A,abort:()=>{d.abort(),M&&r?.signal&&r.signal.removeEventListener("abort",M);for(let{streamResult:v}of g)v.abort();}}},async runRace(e,n,s){te();let r={type:"race",handlers:e,extract:s?.extract,timeout:s?.timeout,minSuccess:s?.minSuccess,signal:s?.signal};return Dn(r,n,"__imperative_race")},async runReflect(e,n,s,r){te();let a={type:"reflect",handler:e,evaluator:n,maxIterations:r?.maxIterations,parseEvaluation:r?.parseEvaluation,buildRetryInput:r?.buildRetryInput,extract:r?.extract,onExhausted:r?.onExhausted,onIteration:r?.onIteration,signal:r?.signal,timeout:r?.timeout,threshold:r?.threshold},d=await Bt(a,s,"__imperative_reflect"),c=Ne?[...Ne]:[],g=r?.maxIterations??2,y=c.length>0&&!c[c.length-1].passed&&c.length>=g;return {result:d,iterations:c.length,history:c,exhausted:y}},async runDebate(e,n,s,r){return te(),Ft({handlers:e,evaluator:n,maxRounds:r?.maxRounds,extract:r?.extract,parseJudgement:r?.parseJudgement,signal:r?.signal,timeout:r?.timeout},s,"__imperative_debate")},async runGoal(e,n,s,r){return te(),Ht({nodes:e,when:s,satisfaction:r?.satisfaction,maxSteps:r?.maxSteps,extract:r?.extract,timeout:r?.timeout,signal:r?.signal,selectionStrategy:r?.selectionStrategy,relaxation:r?.relaxation,onStep:r?.onStep,onStall:r?.onStall,checkpoint:r?.checkpoint},n,"__imperative_goal")},async resumeGoal(e,n){if(te(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Ht(n,{},e.patternId,e)},async resumeSequential(e,n){if(te(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return sn(n,e.currentInput,e.patternId,e)},async resumeSupervisor(e,n,s){if(te(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let r=s?.input??e.currentInput;return an(n,r,e.patternId,e)},async resumeReflect(e,n,s){if(te(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let r=s?.input??e.effectiveInput;return Bt(n,r,e.patternId,e)},async resumeDebate(e,n){if(te(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return Ft(n,e.currentInput,e.patternId,e)},async resumeDag(e,n,s){if(te(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let r=s?.input??e.input;return un(n,r,e.patternId,e)},async replay(e,n,s){if(te(),!se)throw new Error("[Directive MultiAgent] No checkpoint store configured");let r=await se.load(e);if(!r)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let g=JSON.parse(r.systemExport);if(!g||typeof g!="object")throw new Error("Parsed checkpoint state is not an object");let y=new Set(["__proto__","constructor","prototype"]);for(let A of Object.keys(g))if(y.has(A))throw new Error(`Checkpoint state contains blocked key: ${A}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal"]).has(g.type))throw new Error(`Unknown checkpoint pattern type: ${g.type}`);if(g.version!==1)throw new Error(`Unsupported checkpoint version: ${g.version}`);a=g;}catch(g){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${g instanceof Error?g.message:String(g)}`)}let d=lt(a),c=s?.input??("currentInput"in a?a.currentInput:"");switch(P&&P.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:d}),a.type){case "sequential":return sn(n,c,a.patternId,a);case "supervisor":return an(n,c,a.patternId,a);case "reflect":return Bt(n,c,a.patternId,a);case "debate":return Ft(n,c,a.patternId,a);case "dag":return un(n,c,a.patternId,a);case "goal":return Ht(n,a.facts,a.patternId,a)}},resumeBreakpoint(e,n){te(),n&&ft.set(e,n);for(let s of Object.keys(Y)){let r=fe(s);if(ze(r).pending.some(d=>d.id===e)){z.batch(()=>{let d=ze(r),c=[...d.resolved,e];Ze(r,{...d,pending:d.pending.filter(g=>g.id!==e),resolved:c.length>Ot?c.slice(-Ot):c});});return}}re&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,n){te(),n&&Tt.set(e,n);for(let s of Object.keys(Y)){let r=fe(s);if(ze(r).pending.some(d=>d.id===e)){z.batch(()=>{let d=ze(r),c=[...d.cancelled,e];Ze(r,{...d,pending:d.pending.filter(g=>g.id!==e),cancelled:c.length>Ot?c.slice(-Ot):c});});return}}re&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let n of Object.keys(Y)){let s=fe(n),r=ze(s);e.push(...r.pending);}return e},getLastReflectionHistory(){return Ne?[...Ne]:null},destroy(){tn||(On.reset(),Lt.clear(),gt.clear(),qt.clear(),Gt.clear(),tn=true,z.destroy());}};return $e(),On}exports.$=_r;exports.A=Ot;exports.Aa=Uo;exports.B=Fn;exports.Ba=Jo;exports.C=Hn;exports.Ca=Wo;exports.D=_t;exports.Da=ls;exports.E=Qe;exports.F=mn;exports.G=Jn;exports.H=Mt;exports.I=Kn;exports.J=bn;exports.K=oo;exports.L=so;exports.M=ao;exports.N=io;exports.O=uo;exports.P=lo;exports.Q=co;exports.R=po;exports.S=go;exports.T=fo;exports.U=Wn;exports.V=Ln;exports.W=Dt;exports.X=zr;exports.Y=yn;exports.Z=_e;exports._=lt;exports.a=Ve;exports.aa=Pr;exports.b=Bn;exports.ba=Ir;exports.c=Vt;exports.ca=kn;exports.d=yt;exports.da=yo;exports.e=kt;exports.ea=ko;exports.f=pn;exports.fa=vo;exports.g=dn;exports.ga=wo;exports.h=Fr;exports.ha=Ro;exports.i=jn;exports.ia=To;exports.j=$n;exports.ja=So;exports.k=Wt;exports.ka=xo;exports.l=Kt;exports.la=Eo;exports.m=qn;exports.ma=Ao;exports.n=Ct;exports.na=Do;exports.o=Ye;exports.oa=Oo;exports.p=vt;exports.pa=Io;exports.q=Xe;exports.qa=No;exports.r=gn;exports.ra=jo;exports.s=wt;exports.sa=$o;exports.t=fn;exports.ta=Go;exports.u=Rt;exports.ua=qo;exports.v=ze;exports.va=Lo;exports.w=Ze;exports.wa=Vn;exports.x=Oe;exports.xa=Bo;exports.y=zt;exports.ya=Fo;exports.z=Yr;exports.za=Ho;//# sourceMappingURL=chunk-KALRDVN5.cjs.map
72
- //# sourceMappingURL=chunk-KALRDVN5.cjs.map
71
+ Original task: ${n}`);}if(v.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let R=g?g(N):N;return {winnerId:U,result:R,rounds:v}}catch(R){throw k=R instanceof Error?R:new Error(String(R)),R}finally{A&&clearTimeout(A),M&&e.signal&&e.signal.removeEventListener("abort",M),s&&K("onPatternComplete",{patternId:F,patternType:"debate",durationMs:Date.now()-J,timestamp:Date.now(),error:k});}}let ur=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function ht(e,n){for(let s of Object.keys(n))ur.has(s)||(e[s]=n[s]);}function lr(e,n){let s=Object.create(null);for(let[y,E]of Object.entries(n))for(let A of E.produces)s[A]||(s[A]=[]),s[A].push(y);let r=Object.keys(n),a=Object.create(null),d=Object.create(null);for(let y of r)a[y]=0,d[y]=[];for(let[y,E]of Object.entries(n))for(let A of E.requires??[]){let M=s[A];if(M)for(let _ of M)_!==y&&(d[_].push(y),a[y]=(a[y]??0)+1);}let c=[];for(let y of r)a[y]===0&&c.push(y);let g=0;for(;c.length>0;){let y=c.shift();g++;for(let E of d[y]??[])a[E]--,a[E]===0&&c.push(E);}if(g!==r.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${g}/${r.length} nodes.`)}function cr(e,n){let s=Object.create(null);for(let[r,a]of Object.entries(n))for(let d of a.produces)s[d]||(s[d]=[]),s[d].push(r);for(let[r,a]of Object.entries(s))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${r}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function Te(e,...n){if(e)try{return e(...n)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}async function dr(e,...n){if(e)try{return await e(...n)}catch(s){console.error("[Directive MultiAgent] goal: user callback threw:",s);return}}function ln(e,n,s){let r=n.slice(-3),a=r.length>0?r.reduce((g,y)=>g+y.satisfactionDelta,0)/r.length:0,d=null;a>0&&e<1&&(d=Math.ceil((1-e)/a));let c=false;if(n.length>=6){let g=n.slice(-3),y=n.slice(-6,-3),E=g.reduce((M,_)=>M+_.satisfactionDelta,0)/3,A=y.reduce((M,_)=>M+_.satisfactionDelta,0)/3;c=E<A*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:d,decelerating:c}}function St(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Ht(e,n,s,r){let{nodes:a,when:d,satisfaction:c,maxSteps:g=50,extract:y,selectionStrategy:E,relaxation:A,onStep:M,onStall:_}=e,L=Object.create(null);for(let[ne,ie]of Object.entries(a))L[ne]={...ie};if(Object.keys(L).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let C=s??"__goal";for(let[ne,ie]of Object.entries(L))if(!Y[ie.handler]&&!ee[ie.handler])throw new Error(`[Directive MultiAgent] goal node "${ne}" references unregistered handler "${ie.handler}"`);lr(C,L),cr(C,L);for(let[ne,ie]of Object.entries(L))ie.extractOutput||console.warn(`[Directive MultiAgent] goal node "${ne}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let U=e.signal,N,q,B=e.timeout??3e5;if(B&&!U){let ne=new AbortController;N=setTimeout(()=>ne.abort(),B),U=ne.signal;}else if(B&&U){let ne=new AbortController;N=setTimeout(()=>ne.abort(),B),q=()=>ne.abort(),U.addEventListener("abort",q,{once:true}),U=ne.signal;}let D=Date.now();if(P){let ne=Object.values(L).map(ie=>ie.handler);P.record({type:"pattern_start",timestamp:D,snapshotId:null,patternId:C,patternType:"goal",handlers:ne,taskIds:ne.filter(ie=>ee[ie]!=null)});}K("onPatternStart",{patternId:C,patternType:"goal",input:typeof n=="string"?n:JSON.stringify(n),timestamp:D});let h=Object.create(null);r?ht(h,r.facts):typeof n=="string"?h.input=n:ht(h,n);let T=r?[...r.executionOrder]:[],F=Object.create(null);if(r)for(let[ne,ie]of Object.entries(r.nodeOutputs))F[ne]={output:ie.output,totalTokens:ie.totalTokens};let J=r?[...r.stepMetrics]:[],j=r?[...r.relaxations]:[],k=new Set(r?.completedNodes??[]),R=new Map(r?Object.entries(r.failedNodes).map(([ne,ie])=>[ne,ie]):[]),O=new Map(r?Object.entries(r.nodeInputHashes):[]),W=Object.create(null);if(r)for(let[ne,ie]of Object.entries(r.agentMetrics))W[ne]={runs:ie.runs,avgSatisfactionDelta:ie.runs>0?ie.totalDelta/ie.runs:0,tokens:ie.tokens,totalDelta:ie.totalDelta};let G=r?.stallSteps??0,me=r?.appliedRelaxationTiers??0,ae=r?.lastSatisfaction??0,ue,at=false,ye=r?.step??0,Pe=e.checkpoint,mr=Pe?.everyN??5,_n=Pe?.store??se,hr=Pe?.labelPrefix??"goal",Mn,br=3;try{for(let ge=ye;ge<g;ge++){if(Te(d,h)===!0){at=!0;let Z=Date.now()-D,X=Object.values(F).reduce((le,ke)=>le+ke.totalTokens,0);return {achieved:!0,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:X,durationMs:Z,stepMetrics:J,relaxations:j}}if(U?.aborted){let Z=Date.now()-D,X=Object.values(F).reduce((le,ke)=>le+ke.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:X,durationMs:Z,stepMetrics:J,relaxations:j,error:"Aborted or timed out"}}let it=[];for(let[Z,X]of Object.entries(L)){if((R.get(Z)??0)>=br)continue;let le=X.requires??[];if(le.every(he=>h[he]!=null)){if(k.has(Z)){if(!X.allowRerun)continue;let he=JSON.stringify(le.map(Se=>h[Se]));if(O.get(Z)===he)continue}it.push(Z);}}let Ke=it;if(E&&it.length>0){let Z=c?Te(c,h)??0:Te(d,h)===!0?1:0,X=St(Z),le=ln(X,J,ge),ke=Object.create(null);for(let[Se,ce]of Object.entries(W))ke[Se]={runs:ce.runs,avgSatisfactionDelta:ce.runs>0?ce.totalDelta/ce.runs:0,tokens:ce.tokens};let he=E.select(it,ke,le);Ke=he&&he.length>0?he:it;}if(Ke.sort((Z,X)=>(L[X].priority??0)-(L[Z].priority??0)),Te(M,ge,{...h},Ke),Ke.length===0){G++;let Z=!1;if(A)for(let X=me;X<A.length;X++){let le=A[X],ke=le.afterStallSteps??3;if(G>=ke){let he=le.strategy;switch(he.type){case "allow_rerun":for(let Se of he.nodes)k.delete(Se),O.delete(Se);break;case "alternative_nodes":for(let Se of he.nodes){let ce=`__relaxation_${X}_${Se.handler}`;L[ce]={...Se};}break;case "inject_facts":ht(h,he.facts);break;case "accept_partial":{let Se=Date.now()-D,ce=Object.values(F).reduce((ve,Ge)=>ve+Ge.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:ce,durationMs:Se,stepMetrics:J,relaxations:j,error:`Accepted partial result via relaxation tier "${le.label}"`}}case "custom":{let Se=Te(c,h)??0,ce={step:ge,facts:{...h},metrics:ln(St(Se),J,ge),completedNodes:new Set(k),failedNodes:new Map(R)};await dr(he.apply,ce);break}}j.push({step:ge,tierIndex:X,label:le.label,strategy:he.type}),me=X+1,G=0,Z=!0;break}}if(!Z){let X=Te(c,h)??0,le=ln(St(X),J,ge);if(Te(_,ge,le),!A||me>=A.length){let ke=Date.now()-D,he=Object.values(F).reduce((Se,ce)=>Se+ce.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:ge,totalTokens:he,durationMs:ke,stepMetrics:J,relaxations:j,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}G=0;let yr=Date.now(),kr=c?Te(c,h)??0:Te(d,h)===!0?1:0,vr=St(kr),Pn=0,bt=[],wr=Ke.map(async Z=>{let X=L[Z],le=X.requires??[],ke=JSON.stringify(le.map(ce=>h[ce]));O.set(Z,ke);let he,Se=Te(X.buildInput,h);if(Se!=null)he=Se;else {let ce=Object.create(null);for(let ve of le)h[ve]!=null&&(ce[ve]=h[ve]);Object.keys(ce).length>0?he=JSON.stringify(ce):h.input!=null?he=String(h.input):he=JSON.stringify(h);}try{let ce=await be(X.handler,he,{signal:U??void 0,patternId:C});if(F[Z]=ce,T.push(Z),k.add(Z),R.delete(Z),X.extractOutput){let ve=Te(X.extractOutput,ce);ve&&(ht(h,ve),bt.push(...Object.keys(ve)));}else {let ve=ce.output;if(ve&&typeof ve=="object")ht(h,ve),bt.push(...Object.keys(ve));else if(typeof ve=="string")try{let Ge=JSON.parse(ve);if(Ge&&typeof Ge=="object"&&!Array.isArray(Ge))ht(h,Ge),bt.push(...Object.keys(Ge));else for(let In of X.produces)h[In]=ve,bt.push(In);}catch{for(let Ge of X.produces)h[Ge]=ve,bt.push(Ge);}}return Pn+=ce.totalTokens,{nodeId:Z,success:!0}}catch(ce){let ve=(R.get(Z)??0)+1;return R.set(Z,ve),{nodeId:Z,success:!1,error:ce}}});await Promise.allSettled(wr);let Rr=c?Te(c,h)??0:Te(d,h)===!0?1:0,Ut=St(Rr),Jt=Ut-vr;if(J.push({step:ge,durationMs:Date.now()-yr,nodesRun:[...Ke],factsProduced:bt,satisfaction:Ut,satisfactionDelta:Jt,tokensConsumed:Pn}),P)for(let Z of Ke){let X=L[Z];P.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:X.handler,step:ge,nodeId:Z,satisfaction:Ut,satisfactionDelta:Jt});}for(let Z of Ke){let X=L[Z];W[X.handler]||(W[X.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let le=W[X.handler];le.runs++,le.totalDelta+=Jt,le.tokens+=F[Z]?.totalTokens??0;}if(ae=Ut,Jt<=0?G++:G=0,Pe&&_n&&ge>ye&&(ge-ye)%mr===0){let Z={type:"goal",version:1,id:Qe(),createdAt:new Date().toISOString(),label:`${hr}:step-${ge}`,patternId:C,stepsTotal:g,step:ge+1,facts:structuredClone(h),completedNodes:[...k],failedNodes:Object.fromEntries(R),nodeInputHashes:Object.fromEntries(O),nodeOutputs:Object.fromEntries(Object.entries(F).map(([le,ke])=>[le,{output:ke.output,totalTokens:ke.totalTokens}])),executionOrder:[...T],stepMetrics:[...J],relaxations:[...j],appliedRelaxationTiers:me,stallSteps:G,lastSatisfaction:ae,agentMetrics:Object.fromEntries(Object.entries(W).map(([le,ke])=>[le,{runs:ke.runs,totalDelta:ke.totalDelta,tokens:ke.tokens}]))},X=await mt(Z,_n,Pe);X&&(Mn=X);}}let ne=Date.now()-D,ie=Object.values(F).reduce((ge,it)=>ge+it.totalTokens,0);return {achieved:!1,result:Te(y,h)??h,facts:{...h},executionOrder:T,nodeResults:F,steps:g,totalTokens:ie,durationMs:ne,stepMetrics:J,relaxations:j,error:`Max steps (${g}) exhausted without achieving goal`}}catch(ne){throw ue=ne instanceof Error?ne:new Error(String(ne)),ne}finally{if(N!=null&&clearTimeout(N),q&&e.signal&&e.signal.removeEventListener("abort",q),P){let ne=Object.values(F).reduce((ie,ge)=>ie+ge.totalTokens,0);P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:C,patternType:"goal",durationMs:Date.now()-D,achieved:at,stepMetrics:J,relaxations:j,totalTokens:ne,...ue?{error:ue.message}:{}});}K("onPatternComplete",{patternId:C,patternType:"goal",durationMs:Date.now()-D,timestamp:Date.now(),error:ue});}}function pr(e){if(!V)return [];let n=[],s=new Set;if(s.add(e),V.equivalencyGroups){for(let r of Object.values(V.equivalencyGroups))if(r.includes(e))for(let a of r)!s.has(a)&&Y[a]&&(n.push(a),s.add(a));}if(V.useCapabilities!==false){let r=Y[e];if(r?.capabilities&&r.capabilities.length>0)for(let[a,d]of Object.entries(Y)){if(s.has(a))continue;let c=d.capabilities??[];r.capabilities.every(g=>c.includes(g))&&(n.push(a),s.add(a));}}if(Ce){let r=V.healthThreshold??30;return n.filter(a=>Ce.getHealthScore(a)>r)}return n}function gr(e){if(e.length===0)return null;if(!V||!Ce)return e[0]??null;if(V.selectionStrategy==="round-robin"&&He){let r=[...e].sort().join(","),a=He.get(r)??0,d=e[a%e.length];return He.set(r,a+1),d}let n=e[0],s=Ce.getHealthScore(n);for(let r=1;r<e.length;r++){let a=Ce.getHealthScore(e[r]);a>s&&(n=e[r],s=a);}return n}function fr(e){switch(e.type){case "parallel":return e.handlers;case "sequential":return e.handlers;case "supervisor":return [e.supervisor,...e.workers];case "dag":return Object.values(e.nodes).map(n=>n.handler);case "reflect":return [e.handler,e.evaluator];case "race":return e.handlers;case "debate":return [...e.handlers,e.evaluator];case "goal":return Object.values(e.nodes).map(n=>n.handler);default:return []}}let On={system:z,get facts(){return z.facts},get timeline(){return P},get healthMonitor(){return Ce},get derived(){return Object.freeze({...pt})},onDerivedChange(e){return qt.add(e),()=>{qt.delete(e);}},get scratchpad(){return nn},runAgent:be,runAgentStream:on,async runPattern(e,n){te();let s=u[e];if(!s){let d=Object.keys(u).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${d}`)}let r=Date.now();if(P){let d=fr(s);P.record({type:"pattern_start",timestamp:r,snapshotId:null,patternId:e,patternType:s.type,handlers:d,taskIds:d.filter(c=>ee[c]!=null)});}let a;try{switch(s.type){case "parallel":return await ir(s,n,e);case "sequential":return await sn(s,n,e);case "supervisor":return await an(s,n,e);case "dag":return await un(s,n,e);case "reflect":return await Bt(s,n,e);case "race":return (await Dn(s,n,e)).result;case "debate":return (await Ft(s,n,e)).result;case "goal":return (await Ht(s,n,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${s.type}`)}}catch(d){throw a=d instanceof Error?d:new Error(String(d)),d}finally{P&&P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:s.type,durationMs:Date.now()-r,...a?{error:a.message}:{}});}},async runParallel(e,n,s,r){te();let a=Array.isArray(n)?n:e.map(()=>n);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let d=new AbortController,c;r?.timeout&&(c=setTimeout(()=>d.abort(),r.timeout));try{let g=e.map((A,M)=>be(A,a[M],{signal:d.signal}).catch(_=>{if(r?.minSuccess!==void 0)return null;throw _})),y=await Promise.all(g),E=y.filter(A=>A!==null);if(r?.minSuccess!==void 0&&E.length<r.minSuccess){let A=y.length-E.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${E.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess}, failed: ${A})`)}return s(E)}finally{c&&clearTimeout(c);}},async runSequential(e,n,s){te();let r=[],a=n;for(let d=0;d<e.length;d++){let c=e[d],g=await be(c,a);r.push(g),d<e.length-1&&(s?.transform?a=s.transform(g.output,c,d):a=typeof g.output=="string"?g.output:internals.safeStringify(g.output));}return r},async handoff(e,n,s,r){if(te(),!Y[e]){let c=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${c}`)}if(!Y[n]){let c=Object.keys(Y).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${n}" not found. Registered: ${c}`)}{let c=await st("pre_handoff",e,Y[e].agent.name,s,void 0,{handoff:{fromAgent:e,toAgent:n}});if(c.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};s=c.input;}let a={id:`handoff-${++$t}`,fromAgent:e,toAgent:n,input:s,context:r,requestedAt:Date.now()};je.push(a);try{p?.(a);}catch(c){re&&console.debug("[Directive MultiAgent] onHandoff threw:",c);}K("onHandoff",a),P&&P.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n});let d=Y[n].memory??S;if(d&&r)try{let c=Object.entries(r).map(([g,y])=>`${g}: ${internals.safeStringify(y)}`).join(", ");d.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${c}`}]);}catch(c){re&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",c);}try{let c=await be(n,s),g={request:a,result:c,completedAt:Date.now()};nr(g);try{f?.(g);}catch(E){re&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",E);}K("onHandoffComplete",g),P&&P.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:n,durationMs:g.completedAt-a.requestedAt});let y=je.indexOf(a);return y>=0&&je.splice(y,1),c}catch(c){let g=je.indexOf(a);throw g>=0&&je.splice(g,1),c}},approve(e){te();let n=dt.get(e);if(n){dt.delete(e);let s=fe(n);z.batch(()=>{let r=vt(s),a=200,d=[...r.approved,e];Xe(s,{...r,pending:r.pending.filter(c=>c.id!==e),approved:d.length>a?d.slice(-a):d});});return}re&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,n){te();let s=dt.get(e);if(s){dt.delete(e);let r=fe(s);z.batch(()=>{let a=vt(r);n&&re&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${n}`);let d={id:e,reason:n,rejectedAt:Date.now()},c=200,g=[...a.rejected,d];Xe(r,{...a,pending:a.pending.filter(y=>y.id!==e),rejected:g.length>c?g.slice(-c):g});});return}re&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){te(),Ue="paused",re&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){te(),Ue==="paused"&&(Ue="idle",re&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let n=xe[e];return n?{...n}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(xe).map(([e,n])=>[e,{...n}]))},getPendingHandoffs(){return [...je]},get totalTokens(){return nt},waitForIdle(e){let n=()=>jt===0&&Object.values(xe).every(s=>s.status==="idle"||s.status==="completed"||s.status==="error");return n()?Promise.resolve():new Promise((s,r)=>{let a=null,d=()=>{Gt.delete(c),a&&clearTimeout(a);},c=()=>{n()&&(d(),s());};Gt.add(c),e!==void 0&&(a=setTimeout(()=>{d(),r(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,n,s){return be(e,n,s)},runStream(e,n,s){return on(e,n,s)},registerAgent(e,n){if(te(),It.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(Y[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(ee[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let s=n.constraints?zt(n.constraints):{},r=Object.create(null);if(n.resolvers)for(let[d,c]of Object.entries(n.resolvers))r[d]={requirement:c.requirement,key:c.key,resolve:async(g,y)=>{let E=Oe(y.facts),M={facts:{...y.facts,...E},runAgent:async(_,L,v)=>t(_,L,v),signal:y.signal};return c.resolve(g,M)}};let a=core.createModule(e,{schema:pn,init:d=>{Ye(d,{status:"idle",currentAgent:n.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(d,{pending:[],approved:[],rejected:[]}),wt(d,[]),Rt(d,[]),Ze(d,_t());},constraints:s,resolvers:Object.keys(r).length>0?r:void 0});z.registerModule(e,a),Y[e]=n,Je.set(e,new _e(n.maxConcurrent??1)),xe[e]={status:"idle",runCount:0,totalTokens:0},re&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${n.agent.name})`),$e();},unregisterAgent(e){if(te(),!Y[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(xe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,d]of Object.entries(u)){let c;switch(d.type){case "supervisor":c=[d.supervisor,...d.workers];break;case "dag":c=Object.values(d.nodes).map(g=>g.handler);break;case "reflect":c=[d.handler,d.evaluator];break;case "parallel":case "sequential":case "race":c=d.handlers;break;case "debate":c=[...d.handlers,d.evaluator];break;default:c=[];}c.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let s=Je.get(e);s&&(s.drain(),Je.delete(e));let r=fe(e);r&&z.batch(()=>{Ye(r,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(r,{pending:[],approved:[],rejected:[]}),wt(r,[]),Rt(r,[]),Ze(r,_t());}),delete Y[e],delete xe[e],re&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),$e();},getAgentIds(){return Object.keys(Y)},registerTask(e,n){if(te(),It.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(!e||typeof e!="string"||e.trim()!==e||e.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(Y[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(ee[e])throw new Error(`[Directive MultiAgent] Task "${e}" is already registered`);if(n.timeout!==void 0&&(!Number.isFinite(n.timeout)||n.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(n.maxConcurrent!==void 0&&(!Number.isFinite(n.maxConcurrent)||n.maxConcurrent<1||!Number.isInteger(n.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(n.retry){let{attempts:s,delayMs:r}=n.retry;if(!Number.isFinite(s)||s<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(r!==void 0&&(!Number.isFinite(r)||r<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}ee[e]=n,Ae[e]={status:"idle"},Fe.set(e,new _e(n.maxConcurrent??1)),re&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${n.label??e})`);},unregisterTask(e){if(te(),!ee[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(Ae[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let s=Fe.get(e);s&&(s.drain(),Fe.delete(e)),delete ee[e],delete Ae[e],re&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(ee)},getTaskRegistry(){let e=Object.create(null);for(let[n,s]of Object.entries(ee))e[n]={label:s.label,description:s.description};return e},getTaskState(e){let n=Ae[e];return n?Object.freeze(structuredClone(n)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[n,s]of Object.entries(Ae))e[n]=Object.freeze(structuredClone(s));return e},getNodeIds(){return [...Object.keys(Y),...Object.keys(ee)]},reset(){te();for(let n of Object.keys(Y)){let s=Y[n]?.maxConcurrent??1;xe[n]={status:"idle",runCount:0,totalTokens:0};let r=Je.get(n);r&&r.drain(),Je.set(n,new _e(s));let a=fe(n);z.batch(()=>{Ye(a,{status:"idle",currentAgent:Y[n].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Xe(a,{pending:[],approved:[],rejected:[]}),wt(a,[]),Rt(a,[]),Ze(a,_t());});}for(let n of Object.keys(ee)){Ae[n]={status:"idle"};let s=Fe.get(n);s&&s.drain(),Fe.set(n,new _e(ee[n].maxConcurrent??1));}ft.clear(),Tt.clear(),dt.clear(),je.length=0,rt.length=0,$t=0,nt=0,Ue="idle",jt=0,ot();let e=fe("__coord");z.batch(()=>{adapterUtils.setBridgeFact(e,"__globalTokens",0),adapterUtils.setBridgeFact(e,"__status","idle"),adapterUtils.setBridgeFact(e,"__handoffs",[]),adapterUtils.setBridgeFact(e,"__handoffResults",[]),adapterUtils.setBridgeFact(e,"__budgetWarningFired",false),Be&&adapterUtils.setBridgeFact(e,Ee,{...Be.init});}),Ce&&Ce.reset(),Ne=null;for(let n of Object.keys(pt))delete pt[n];$e();},async checkpoint(e){te();for(let[s,r]of Object.entries(xe))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${s}" is running`);for(let[s,r]of Object.entries(Ae))if(r.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${s}" is running`);if(!z.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let n={version:1,id:Qe(),createdAt:new Date().toISOString(),label:e?.label,systemExport:z.history.export(),timelineExport:P?.export()??null,localState:{type:"multi",globalTokenCount:nt,globalStatus:Ue,agentStates:Object.fromEntries(Object.entries(xe).map(([s,r])=>[s,structuredClone(r)])),handoffCounter:$t,pendingHandoffs:[...je],handoffResults:[...rt],roundRobinCounters:He?Object.fromEntries(He):null,taskStates:Object.fromEntries(Object.entries(Ae).map(([s,r])=>[s,{lastOutput:r.lastOutput!=null?String(r.lastOutput):void 0,lastError:r.lastError}]))},memoryExport:S?S.export?.()??null:null,orchestratorType:"multi"};return se&&await se.save(n),n},restore(e,n){if(te(),!mn(e))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(e.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${e.orchestratorType}"`);if(!z.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");z.history.import(e.systemExport),n?.restoreTimeline!==false&&e.timelineExport&&P&&P.import(e.timelineExport),e.memoryExport&&S&&S.import&&S.import(e.memoryExport);let s=e.localState;nt=s.globalTokenCount,Ue=s.globalStatus,$t=s.handoffCounter,je.length=0,je.push(...s.pendingHandoffs),rt.length=0,rt.push(...s.handoffResults);for(let[r,a]of Object.entries(s.agentStates))xe[r]&&(xe[r]={...a});if(s.roundRobinCounters&&He){He.clear();for(let[r,a]of Object.entries(s.roundRobinCounters))He.set(r,a);}for(let[r,a]of Object.entries(Y)){let d=Je.get(r);d&&d.drain(),Je.set(r,new _e(a.maxConcurrent??1));}if(s.taskStates){for(let[r,a]of Object.entries(s.taskStates)){if(!ee[r])throw new Error(`[Directive MultiAgent] Checkpoint references task "${r}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);Ae[r]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[r,a]of Object.entries(ee)){let d=Fe.get(r);d&&d.drain(),Fe.set(r,new _e(a.maxConcurrent??1));}}$e();},runParallelStream(e,n,s,r){te();let a=Array.isArray(n)?n:e.map(()=>n);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let d=new AbortController,c;r?.timeout&&(c=setTimeout(()=>d.abort(),r.timeout));let g=e.map((v,C)=>{let U=on(v,a[C],{signal:d.signal});return {agentId:v,streamResult:U}}),y=g.map(({agentId:v,streamResult:C})=>({agentId:v,stream:C.stream})),{stream:E,getDroppedCount:A}=Wn(y),M;r?.signal&&(M=()=>d.abort(),r.signal.addEventListener("abort",M,{once:true}));let _=Promise.allSettled(g.map(({streamResult:v})=>v.result)).then(v=>{c&&clearTimeout(c),M&&r?.signal&&r.signal.removeEventListener("abort",M);let C=[];for(let U of v)U.status==="fulfilled"&&C.push(U.value);if(r?.minSuccess!==void 0&&C.length<r.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${C.length}/${e.length} agents succeeded (minimum required: ${r.minSuccess})`);return C}),L=_.then(v=>s(v));return _.catch(()=>{}),L.catch(()=>{}),{stream:E,results:_,merge:L,getDroppedCount:A,abort:()=>{d.abort(),M&&r?.signal&&r.signal.removeEventListener("abort",M);for(let{streamResult:v}of g)v.abort();}}},async runRace(e,n,s){te();let r={type:"race",handlers:e,extract:s?.extract,timeout:s?.timeout,minSuccess:s?.minSuccess,signal:s?.signal};return Dn(r,n,"__imperative_race")},async runReflect(e,n,s,r){te();let a={type:"reflect",handler:e,evaluator:n,maxIterations:r?.maxIterations,parseEvaluation:r?.parseEvaluation,buildRetryInput:r?.buildRetryInput,extract:r?.extract,onExhausted:r?.onExhausted,onIteration:r?.onIteration,signal:r?.signal,timeout:r?.timeout,threshold:r?.threshold},d=await Bt(a,s,"__imperative_reflect"),c=Ne?[...Ne]:[],g=r?.maxIterations??2,y=c.length>0&&!c[c.length-1].passed&&c.length>=g;return {result:d,iterations:c.length,history:c,exhausted:y}},async runDebate(e,n,s,r){return te(),Ft({handlers:e,evaluator:n,maxRounds:r?.maxRounds,extract:r?.extract,parseJudgement:r?.parseJudgement,signal:r?.signal,timeout:r?.timeout},s,"__imperative_debate")},async runGoal(e,n,s,r){return te(),Ht({nodes:e,when:s,satisfaction:r?.satisfaction,maxSteps:r?.maxSteps,extract:r?.extract,timeout:r?.timeout,signal:r?.signal,selectionStrategy:r?.selectionStrategy,relaxation:r?.relaxation,onStep:r?.onStep,onStall:r?.onStall,checkpoint:r?.checkpoint},n,"__imperative_goal")},async resumeGoal(e,n){if(te(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Ht(n,{},e.patternId,e)},async resumeSequential(e,n){if(te(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return sn(n,e.currentInput,e.patternId,e)},async resumeSupervisor(e,n,s){if(te(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let r=s?.input??e.currentInput;return an(n,r,e.patternId,e)},async resumeReflect(e,n,s){if(te(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let r=s?.input??e.effectiveInput;return Bt(n,r,e.patternId,e)},async resumeDebate(e,n){if(te(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return Ft(n,e.currentInput,e.patternId,e)},async resumeDag(e,n,s){if(te(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let r=s?.input??e.input;return un(n,r,e.patternId,e)},async replay(e,n,s){if(te(),!se)throw new Error("[Directive MultiAgent] No checkpoint store configured");let r=await se.load(e);if(!r)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let g=JSON.parse(r.systemExport);if(!g||typeof g!="object")throw new Error("Parsed checkpoint state is not an object");let y=new Set(["__proto__","constructor","prototype"]);for(let A of Object.keys(g))if(y.has(A))throw new Error(`Checkpoint state contains blocked key: ${A}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal"]).has(g.type))throw new Error(`Unknown checkpoint pattern type: ${g.type}`);if(g.version!==1)throw new Error(`Unsupported checkpoint version: ${g.version}`);a=g;}catch(g){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${g instanceof Error?g.message:String(g)}`)}let d=lt(a),c=s?.input??("currentInput"in a?a.currentInput:"");switch(P&&P.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:d}),a.type){case "sequential":return sn(n,c,a.patternId,a);case "supervisor":return an(n,c,a.patternId,a);case "reflect":return Bt(n,c,a.patternId,a);case "debate":return Ft(n,c,a.patternId,a);case "dag":return un(n,c,a.patternId,a);case "goal":return Ht(n,a.facts,a.patternId,a)}},resumeBreakpoint(e,n){te(),n&&ft.set(e,n);for(let s of Object.keys(Y)){let r=fe(s);if(ze(r).pending.some(d=>d.id===e)){z.batch(()=>{let d=ze(r),c=[...d.resolved,e];Ze(r,{...d,pending:d.pending.filter(g=>g.id!==e),resolved:c.length>Ot?c.slice(-Ot):c});});return}}re&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,n){te(),n&&Tt.set(e,n);for(let s of Object.keys(Y)){let r=fe(s);if(ze(r).pending.some(d=>d.id===e)){z.batch(()=>{let d=ze(r),c=[...d.cancelled,e];Ze(r,{...d,pending:d.pending.filter(g=>g.id!==e),cancelled:c.length>Ot?c.slice(-Ot):c});});return}}re&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let n of Object.keys(Y)){let s=fe(n),r=ze(s);e.push(...r.pending);}return e},getLastReflectionHistory(){return Ne?[...Ne]:null},destroy(){tn||(On.reset(),Lt.clear(),gt.clear(),qt.clear(),Gt.clear(),tn=true,z.destroy());}};return $e(),On}exports.$=_r;exports.A=Ot;exports.Aa=Uo;exports.B=Fn;exports.Ba=Jo;exports.C=Hn;exports.Ca=Wo;exports.D=_t;exports.Da=ls;exports.E=Qe;exports.F=mn;exports.G=Jn;exports.H=Mt;exports.I=Kn;exports.J=bn;exports.K=oo;exports.L=so;exports.M=ao;exports.N=io;exports.O=uo;exports.P=lo;exports.Q=co;exports.R=po;exports.S=go;exports.T=fo;exports.U=Wn;exports.V=Ln;exports.W=Dt;exports.X=zr;exports.Y=yn;exports.Z=_e;exports._=lt;exports.a=Ve;exports.aa=Pr;exports.b=Bn;exports.ba=Ir;exports.c=Vt;exports.ca=kn;exports.d=yt;exports.da=yo;exports.e=kt;exports.ea=ko;exports.f=pn;exports.fa=vo;exports.g=dn;exports.ga=wo;exports.h=Fr;exports.ha=Ro;exports.i=jn;exports.ia=To;exports.j=$n;exports.ja=So;exports.k=Wt;exports.ka=xo;exports.l=Kt;exports.la=Eo;exports.m=qn;exports.ma=Ao;exports.n=Ct;exports.na=Do;exports.o=Ye;exports.oa=Oo;exports.p=vt;exports.pa=Io;exports.q=Xe;exports.qa=No;exports.r=gn;exports.ra=jo;exports.s=wt;exports.sa=$o;exports.t=fn;exports.ta=Go;exports.u=Rt;exports.ua=qo;exports.v=ze;exports.va=Lo;exports.w=Ze;exports.wa=Vn;exports.x=Oe;exports.xa=Bo;exports.y=zt;exports.ya=Fo;exports.z=Yr;exports.za=Ho;//# sourceMappingURL=chunk-X3VQ5F7D.cjs.map
72
+ //# sourceMappingURL=chunk-X3VQ5F7D.cjs.map