@directive-run/ai 1.12.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anthropic.cjs +1 -1
- package/dist/anthropic.d.cts +1 -1
- package/dist/anthropic.d.ts +1 -1
- package/dist/anthropic.js +1 -1
- package/dist/anthropic.js.map +1 -1
- package/dist/{chunk-XV2QSBBE.cjs → chunk-2TD4ZSGZ.cjs} +7 -7
- package/dist/{chunk-XV2QSBBE.cjs.map → chunk-2TD4ZSGZ.cjs.map} +1 -1
- package/dist/chunk-3WO4MWJM.cjs +3 -0
- package/dist/chunk-3WO4MWJM.cjs.map +1 -0
- package/dist/chunk-5JQ2A3JK.js +2 -0
- package/dist/chunk-5JQ2A3JK.js.map +1 -0
- package/dist/chunk-A22KLB23.cjs +67 -0
- package/dist/chunk-A22KLB23.cjs.map +1 -0
- package/dist/chunk-A5K77UDX.cjs +4 -0
- package/dist/chunk-A5K77UDX.cjs.map +1 -0
- package/dist/chunk-DN5NAJM6.js +6 -0
- package/dist/chunk-DN5NAJM6.js.map +1 -0
- package/dist/chunk-FABDFT74.cjs +6 -0
- package/dist/chunk-FABDFT74.cjs.map +1 -0
- package/dist/chunk-FBT73WFY.js +2 -0
- package/dist/chunk-FBT73WFY.js.map +1 -0
- package/dist/chunk-FFRWQNK7.cjs +7 -0
- package/dist/chunk-FFRWQNK7.cjs.map +1 -0
- package/dist/chunk-IR3IHBVQ.cjs +2 -0
- package/dist/chunk-IR3IHBVQ.cjs.map +1 -0
- package/dist/chunk-IUGSMTBE.js +16 -0
- package/dist/{chunk-Q3PQLWBR.js.map → chunk-IUGSMTBE.js.map} +1 -1
- package/dist/chunk-J2Q5KKPN.js +37 -0
- package/dist/chunk-J2Q5KKPN.js.map +1 -0
- package/dist/chunk-K64WKZ22.cjs +2 -0
- package/dist/chunk-K64WKZ22.cjs.map +1 -0
- package/dist/chunk-LKY4K5TV.cjs +11 -0
- package/dist/chunk-LKY4K5TV.cjs.map +1 -0
- package/dist/chunk-LXUMJKGJ.js +67 -0
- package/dist/chunk-LXUMJKGJ.js.map +1 -0
- package/dist/chunk-NNAQ4ZH2.js +11 -0
- package/dist/chunk-NNAQ4ZH2.js.map +1 -0
- package/dist/chunk-PD772MSE.cjs +30 -0
- package/dist/chunk-PD772MSE.cjs.map +1 -0
- package/dist/chunk-POBEEJR6.js +30 -0
- package/dist/chunk-POBEEJR6.js.map +1 -0
- package/dist/chunk-QRXWLD6H.js +4 -0
- package/dist/chunk-QRXWLD6H.js.map +1 -0
- package/dist/chunk-UR4ZGO7V.js +7 -0
- package/dist/chunk-UR4ZGO7V.js.map +1 -0
- package/dist/chunk-UR5BMWEN.js +2 -0
- package/dist/chunk-UR5BMWEN.js.map +1 -0
- package/dist/chunk-WOFIBIPW.cjs +2 -0
- package/dist/chunk-WOFIBIPW.cjs.map +1 -0
- package/dist/chunk-XN5LUOVS.cjs +37 -0
- package/dist/chunk-XN5LUOVS.cjs.map +1 -0
- package/dist/chunk-ZFLHWJ56.js +3 -0
- package/dist/chunk-ZFLHWJ56.js.map +1 -0
- package/dist/debug-timeline-DpnRMnLU.d.cts +87 -0
- package/dist/debug-timeline-L13P-U2I.d.ts +87 -0
- package/dist/devtools.cjs +2 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.cts +354 -0
- package/dist/devtools.d.ts +354 -0
- package/dist/devtools.js +2 -0
- package/dist/devtools.js.map +1 -0
- package/dist/evals.cjs +2 -0
- package/dist/evals.cjs.map +1 -0
- package/dist/evals.d.cts +361 -0
- package/dist/evals.d.ts +361 -0
- package/dist/evals.js +2 -0
- package/dist/evals.js.map +1 -0
- package/dist/gemini.cjs +1 -1
- package/dist/gemini.d.cts +1 -1
- package/dist/gemini.d.ts +1 -1
- package/dist/gemini.js +1 -1
- package/dist/gemini.js.map +1 -1
- package/dist/guardrails.cjs +2 -0
- package/dist/guardrails.cjs.map +1 -0
- package/dist/guardrails.d.cts +618 -0
- package/dist/guardrails.d.ts +618 -0
- package/dist/guardrails.js +2 -0
- package/dist/guardrails.js.map +1 -0
- package/dist/health-monitor-C6xoXrQz.d.cts +55 -0
- package/dist/health-monitor-qL9RNMH3.d.ts +55 -0
- package/dist/index.cjs +21 -99
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1202 -4542
- package/dist/index.d.ts +1202 -4542
- package/dist/index.js +21 -99
- package/dist/index.js.map +1 -1
- package/dist/mcp.cjs +2 -0
- package/dist/mcp.cjs.map +1 -0
- package/dist/mcp.d.cts +450 -0
- package/dist/mcp.d.ts +450 -0
- package/dist/mcp.js +2 -0
- package/dist/mcp.js.map +1 -0
- package/dist/multi-agent-orchestrator-QWWQKKGX.js +2 -0
- package/dist/{multi-agent-orchestrator-4PXNYRHB.js.map → multi-agent-orchestrator-QWWQKKGX.js.map} +1 -1
- package/dist/multi-agent-orchestrator-Y5U4JCFO.cjs +2 -0
- package/dist/{multi-agent-orchestrator-KFGTEGE5.cjs.map → multi-agent-orchestrator-Y5U4JCFO.cjs.map} +1 -1
- package/dist/multi-agent.cjs +2 -0
- package/dist/multi-agent.cjs.map +1 -0
- package/dist/multi-agent.d.cts +1429 -0
- package/dist/multi-agent.d.ts +1429 -0
- package/dist/multi-agent.js +2 -0
- package/dist/multi-agent.js.map +1 -0
- package/dist/ollama.cjs +1 -1
- package/dist/ollama.d.cts +1 -1
- package/dist/ollama.d.ts +1 -1
- package/dist/ollama.js +2 -2
- package/dist/ollama.js.map +1 -1
- package/dist/openai.cjs +1 -1
- package/dist/openai.d.cts +2 -2
- package/dist/openai.d.ts +2 -2
- package/dist/openai.js +1 -1
- package/dist/openai.js.map +1 -1
- package/dist/{orchestrator-types-CTfIKk0W.d.ts → orchestrator-types-DGBhL6mc.d.ts} +5 -138
- package/dist/{orchestrator-types-Bh8r3_Sq.d.cts → orchestrator-types-DeIMRLR7.d.cts} +5 -138
- package/dist/predicate.cjs +2 -0
- package/dist/predicate.cjs.map +1 -0
- package/dist/predicate.d.cts +371 -0
- package/dist/predicate.d.ts +371 -0
- package/dist/predicate.js +2 -0
- package/dist/predicate.js.map +1 -0
- package/dist/{semantic-cache-nBpQqILc.d.cts → semantic-cache-DM7ev7NQ.d.cts} +1 -1
- package/dist/{semantic-cache-nBpQqILc.d.ts → semantic-cache-DM7ev7NQ.d.ts} +1 -1
- package/dist/testing.cjs +1 -1
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +4 -2
- package/dist/testing.d.ts +4 -2
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/{types-CRmwFnVk.d.cts → types-DJ09LjZX.d.cts} +1 -1
- package/dist/{types-CRmwFnVk.d.ts → types-DJ09LjZX.d.ts} +1 -1
- package/package.json +32 -2
- package/dist/chunk-Q3PQLWBR.js +0 -16
- package/dist/chunk-RW4R3O5P.js +0 -72
- package/dist/chunk-RW4R3O5P.js.map +0 -1
- package/dist/chunk-W6MVJKWN.cjs +0 -3
- package/dist/chunk-W6MVJKWN.cjs.map +0 -1
- package/dist/chunk-W6WZBQER.js +0 -3
- package/dist/chunk-W6WZBQER.js.map +0 -1
- package/dist/chunk-X3VQ5F7D.cjs +0 -72
- package/dist/chunk-X3VQ5F7D.cjs.map +0 -1
- package/dist/multi-agent-orchestrator-4PXNYRHB.js +0 -2
- package/dist/multi-agent-orchestrator-KFGTEGE5.cjs +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function L(o){let{transport:c,timeline:v,healthMonitor:i,getSnapshot:f,getBreakpointState:h,onResumeBreakpoint:p,onCancelBreakpoint:b,getScratchpadState:k,getDerivedState:T,onForkFromSnapshot:g,batchSize:M=1,batchIntervalMs:E=50,healthPushIntervalMs:O=0,authenticate:C}=o,w=o.maxClients??50,R=`devtools_${crypto.randomUUID()}`,s=new Set,d=new Set,y=[],D=null,_=null;function t(e,a){try{e.send(JSON.stringify(a));}catch{s.delete(e);}}function l(e){let a=JSON.stringify(e),n=[...s];for(let m of n)try{m.send(a);}catch{s.delete(m);}}function A(){y.length!==0&&(y.length===1?l({type:"event",event:y[0]}):l({type:"event_batch",events:y}),y=[]);}let N=v.subscribe(e=>{if(s.size!==0){if(M<=1){l({type:"event",event:e});return}y.push(e),y.length>=M&&A();}});M>1&&E>0&&(D=setInterval(A,E)),O>0&&i&&(_=setInterval(()=>{s.size>0&&l({type:"health",metrics:i.getAllMetrics()});},O));function B(e,a){let n;try{n=JSON.parse(a);}catch{t(e,{type:"error",code:"INVALID_JSON",message:"Could not parse message"});return}if(!n||typeof n!="object"||typeof n.type!="string"){t(e,{type:"error",code:"INVALID_MESSAGE",message:"Missing type field"});return}let m=Date.now(),x=I.get(e)??0;if(m-x<P){t(e,{type:"error",code:"RATE_LIMITED",message:"Too many requests"});return}if(I.set(e,m),n.type==="authenticate"){if(!C){t(e,{type:"error",code:"UNKNOWN_COMMAND",message:"Authentication not configured on this server"});return}if(!d.has(e)){t(e,{type:"error",code:"ALREADY_AUTHENTICATED",message:"Already authenticated"});return}if(typeof n.token!="string"){t(e,{type:"error",code:"AUTH_FAILED",message:"Missing token"}),e.close(),d.delete(e);return}let r=C(n.token),u=S=>{S?(d.delete(e),s.add(e),t(e,{type:"welcome",version:1,sessionId:R,timestamp:Date.now()})):(t(e,{type:"error",code:"AUTH_FAILED",message:"Invalid token"}),d.delete(e),e.close());};r instanceof Promise?r.then(u).catch(()=>{t(e,{type:"error",code:"AUTH_FAILED",message:"Authentication error"}),d.delete(e),e.close();}):u(r);return}if(d.has(e)){t(e,{type:"error",code:"AUTH_REQUIRED",message:"Authentication required"});return}switch(n.type){case "ping":t(e,{type:"pong",timestamp:Date.now()});break;case "request_snapshot":f?t(e,{type:"snapshot",data:f()}):t(e,{type:"error",code:"NO_SNAPSHOT",message:"Snapshot provider not configured"});break;case "request_health":i?t(e,{type:"health",metrics:i.getAllMetrics()}):t(e,{type:"error",code:"NO_HEALTH",message:"Health monitor not configured"});break;case "request_events":{let r=v.getEvents(),u=n.since,S=u!=null?r.filter(H=>H.id>u):r;t(e,{type:"event_batch",events:S});break}case "request_breakpoints":h?t(e,{type:"breakpoints",state:h()}):t(e,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint provider not configured"});break;case "resume_breakpoint":if(p&&typeof n.breakpointId=="string"){let r=n.modifications?{input:n.modifications.input,skip:n.modifications.skip}:void 0;p(n.breakpointId,r);}else t(e,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint resume not configured"});break;case "cancel_breakpoint":if(b&&typeof n.breakpointId=="string"){let r=typeof n.reason=="string"?n.reason:void 0;b(n.breakpointId,r);}else t(e,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint cancel not configured"});break;case "export_session":t(e,{type:"event_batch",events:v.getEvents()});break;case "import_session":{if(typeof n.data!="string")t(e,{type:"error",code:"INVALID_DATA",message:"Missing data field for import"});else if(n.data.length>10485760)t(e,{type:"error",code:"IMPORT_TOO_LARGE",message:`Import data exceeds ${10485760/1024/1024} MB limit`});else try{v.import(n.data),t(e,{type:"event_batch",events:v.getEvents()});}catch(u){let S=u instanceof Error?u.message:String(u);t(e,{type:"error",code:"IMPORT_FAILED",message:S});}break}case "request_scratchpad":k?t(e,{type:"scratchpad_state",data:k()}):t(e,{type:"error",code:"NO_SCRATCHPAD",message:"Scratchpad provider not configured"});break;case "request_derived":T?t(e,{type:"derived_state",data:T()}):t(e,{type:"error",code:"NO_DERIVED",message:"Derived state provider not configured"});break;case "fork_from_snapshot":{if(g&&typeof n.eventId=="number")try{let r=g(n.eventId);t(e,{type:"fork_complete",eventId:n.eventId,newEventCount:r.newEventCount});}catch(r){let u=r instanceof Error?r.message:String(r);t(e,{type:"error",code:"FORK_FAILED",message:u});}else t(e,{type:"error",code:"NO_FORK",message:"Fork provider not configured"});break}default:t(e,{type:"error",code:"UNKNOWN_COMMAND",message:`Unknown message type: ${String(n.type).slice(0,100)}`});}}let I=new Map,P=50;return c.onConnection((e,a,n)=>{if(s.size+d.size>=w){try{let m={type:"error",code:"MAX_CLIENTS",message:"Connection limit reached"};e.send(JSON.stringify(m));}catch{}e.close();return}C?d.add(e):(s.add(e),t(e,{type:"welcome",version:1,sessionId:R,timestamp:Date.now()})),a(m=>B(e,m)),n(()=>{s.delete(e),d.delete(e),I.delete(e);});}),{get clientCount(){return s.size},broadcast(e){l(e);},pushHealth(){i&&s.size>0&&l({type:"health",metrics:i.getAllMetrics()});},pushBreakpoints(){h&&s.size>0&&l({type:"breakpoints",state:h()});},pushScratchpadUpdate(e,a){s.size>0&&l({type:"scratchpad_update",key:e,value:a});},pushDerivedUpdate(e,a){s.size>0&&l({type:"derived_update",id:e,value:a});},pushTokenStream(e,a,n){s.size>0&&l({type:"token_stream",agentId:e,tokens:a,tokenCount:n});},pushStreamDone(e,a){s.size>0&&l({type:"stream_done",agentId:e,totalTokens:a});},close(){N(),D&&(clearInterval(D),D=null),_&&(clearInterval(_),_=null),A();for(let e of s)try{e.close();}catch{}for(let e of d)try{e.close();}catch{}s.clear(),d.clear(),I.clear(),c.close();}}}async function z(o,c={}){if(!o.timeline)throw new Error("[Directive DevTools] Orchestrator must have debug: true to use DevTools");let v=await F({port:c.port??4040,host:c.host??"localhost"});return L({transport:v,timeline:o.timeline,healthMonitor:o.healthMonitor,healthPushIntervalMs:c.healthPushIntervalMs??5e3,batchSize:c.batchSize,authenticate:c.authenticate,getSnapshot:o.getAllAgentStates?()=>{let i=o.getAllAgentStates();return {timestamp:Date.now(),agents:i,eventCount:o.timeline.getEvents().length}}:void 0,getBreakpointState:o.getPendingBreakpoints?()=>({pending:o.getPendingBreakpoints(),resolved:[],cancelled:[]}):void 0,onResumeBreakpoint:o.resumeBreakpoint,onCancelBreakpoint:o.cancelBreakpoint,getScratchpadState:o.getScratchpadState,getDerivedState:o.getDerivedState,onForkFromSnapshot:o.timeline?.forkFrom?i=>(o.timeline.forkFrom(i),{newEventCount:o.timeline.getEvents().length}):void 0})}async function F(o={}){let c=o.port??4040,v=o.host??"localhost",{WebSocketServer:i}=await import('ws'),f=new i({port:c,host:v,maxPayload:o.maxPayloadBytes??1048576}),h=null;return f.on("connection",p=>{let b=null,k=null,T={send(g){p.readyState===p.OPEN&&p.send(g);},close(){p.close();}};p.on("message",g=>{b&&b(g.toString());}),p.on("close",()=>{k&&k();}),h?.(T,g=>{b=g;},g=>{k=g;});}),{onConnection(p){h=p;},close(){f.close();}}}export{L as a,z as b,F as c};//# sourceMappingURL=chunk-5JQ2A3JK.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-5JQ2A3JK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/devtools-server.ts"],"names":["createDevToolsServer","config","transport","timeline","healthMonitor","getSnapshot","getBreakpointState","onResumeBreakpoint","onCancelBreakpoint","getScratchpadState","getDerivedState","onForkFromSnapshot","batchSize","batchIntervalMs","healthPushIntervalMs","authenticate","maxClients","sessionId","clients","pendingAuthClients","batchBuffer","batchTimer","healthTimer","sendToClient","client","message","broadcastMessage","data","snapshot","flushBatch","unsubscribeTimeline","event","handleClientMessage","raw","msg","now","last","clientLastMessage","MIN_MESSAGE_INTERVAL_MS","result","handleResult","valid","events","since","filtered","e","mods","safeReason","err","errMsg","onMessage","onClose","key","value","id","agentId","tokens","tokenCount","totalTokens","connectDevTools","orchestrator","options","createWsTransport","agents","eventId","port","host","WebSocketServer","wss","connectionHandler","ws","messageHandler","closeHandler","handler"],"mappings":"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","file":"chunk-5JQ2A3JK.js","sourcesContent":["/**\n * DevTools Server — WebSocket-based bridge between orchestrators and DevTools UI.\n *\n * Streams debug timeline events, health metrics, breakpoint state, and system\n * snapshots in real-time to connected DevTools clients. Accepts commands from\n * clients to resume/cancel breakpoints and request snapshots.\n *\n * Transport-agnostic: works with any WebSocket implementation (ws, Bun, Deno)\n * via the {@link DevToolsTransport} interface.\n *\n * @module\n */\n\nimport type { DebugTimeline } from \"./debug-timeline.js\";\nimport type { AgentHealthMetrics, HealthMonitor } from \"./health-monitor.js\";\nimport type { BreakpointState, DebugEvent } from \"./types.js\";\n\n// ============================================================================\n// Transport Interface (WebSocket abstraction)\n// ============================================================================\n\n/** A connected DevTools client */\nexport interface DevToolsClient {\n /** Send a JSON-serializable message to this client */\n send(data: string): void;\n /** Close the connection */\n close(): void;\n}\n\n/**\n * Transport layer for the DevTools server.\n *\n * Implement this interface to bridge any WebSocket library (ws, Bun.serve, Deno.serve).\n *\n * @example Node.js with `ws`:\n * ```typescript\n * import { WebSocketServer } from \"ws\";\n *\n * function createWsTransport(port: number): DevToolsTransport {\n * const wss = new WebSocketServer({ port });\n * let onConnect: ((client: DevToolsClient) => void) | null = null;\n *\n * wss.on(\"connection\", (ws) => {\n * const client: DevToolsClient = {\n * send: (data) => { if (ws.readyState === ws.OPEN) ws.send(data); },\n * close: () => ws.close(),\n * };\n * ws.on(\"message\", (raw) => {\n * if (client._onMessage) client._onMessage(raw.toString());\n * });\n * ws.on(\"close\", () => {\n * if (client._onClose) client._onClose();\n * });\n * onConnect?.(client);\n * });\n *\n * return {\n * onConnection(handler) { onConnect = handler; },\n * close() { wss.close(); },\n * };\n * }\n * ```\n */\nexport interface DevToolsTransport {\n /** Register a handler for new client connections */\n onConnection(\n handler: (\n client: DevToolsClient,\n onMessage: (handler: (data: string) => void) => void,\n onClose: (handler: () => void) => void,\n ) => void,\n ): void;\n /** Shut down the transport */\n close(): void;\n}\n\n// ============================================================================\n// Protocol Messages\n// ============================================================================\n\n/** Messages sent FROM the server TO clients */\nexport type DevToolsServerMessage =\n | { type: \"welcome\"; version: number; sessionId: string; timestamp: number }\n | { type: \"event\"; event: DebugEvent }\n | { type: \"event_batch\"; events: DebugEvent[] }\n | { type: \"snapshot\"; data: DevToolsSnapshot }\n | { type: \"health\"; metrics: Record<string, AgentHealthMetrics> }\n | { type: \"breakpoints\"; state: BreakpointState }\n | { type: \"pong\"; timestamp: number }\n // Scratchpad & derived state\n | { type: \"scratchpad_state\"; data: Record<string, unknown> }\n | { type: \"scratchpad_update\"; key: string; value: unknown }\n | { type: \"derived_state\"; data: Record<string, unknown> }\n | { type: \"derived_update\"; id: string; value: unknown }\n // Fork\n | { type: \"fork_complete\"; eventId: number; newEventCount: number }\n // Token streaming\n | {\n type: \"token_stream\";\n agentId: string;\n tokens: string;\n tokenCount: number;\n }\n | { type: \"stream_done\"; agentId: string; totalTokens: number }\n | { type: \"error\"; code: string; message: string };\n\n/** Messages sent FROM clients TO the server */\nexport type DevToolsClientMessage =\n | { type: \"authenticate\"; token: string }\n | { type: \"request_snapshot\" }\n | { type: \"request_health\" }\n | { type: \"request_events\"; since?: number }\n | { type: \"request_breakpoints\" }\n | {\n type: \"resume_breakpoint\";\n breakpointId: string;\n modifications?: { input?: string; skip?: boolean };\n }\n | { type: \"cancel_breakpoint\"; breakpointId: string; reason?: string }\n | { type: \"export_session\" }\n | { type: \"import_session\"; data: string }\n // Scratchpad & derived requests\n | { type: \"request_scratchpad\" }\n | { type: \"request_derived\" }\n // Fork\n | { type: \"fork_from_snapshot\"; eventId: number }\n | { type: \"ping\" };\n\n/** System snapshot sent to clients on demand */\nexport interface DevToolsSnapshot {\n timestamp: number;\n agents: Record<\n string,\n {\n status: string;\n lastInput?: string;\n lastOutput?: unknown;\n totalTokens: number;\n runCount: number;\n }\n >;\n coordinator?: { globalTokens: number; status: string };\n derived?: Record<string, unknown>;\n eventCount: number;\n}\n\n// ============================================================================\n// Server Configuration\n// ============================================================================\n\n/** Configuration for the DevTools server */\nexport interface DevToolsServerConfig {\n /** Transport to use for WebSocket connections */\n transport: DevToolsTransport;\n /** Debug timeline to subscribe to */\n timeline: DebugTimeline;\n /** Health monitor for metrics (optional) */\n healthMonitor?: HealthMonitor | null;\n /** Callback to get current agent states for snapshots */\n getSnapshot?: () => DevToolsSnapshot;\n /** Callback to get current breakpoint state */\n getBreakpointState?: () => BreakpointState;\n /** Callback to resume a breakpoint */\n onResumeBreakpoint?: (\n id: string,\n modifications?: { input?: string; skip?: boolean },\n ) => void;\n /** Callback to cancel a breakpoint */\n onCancelBreakpoint?: (id: string, reason?: string) => void;\n /** Callback to get current scratchpad state */\n getScratchpadState?: () => Record<string, unknown>;\n /** Callback to get current derived state */\n getDerivedState?: () => Record<string, unknown>;\n /** Callback to fork from a snapshot event */\n onForkFromSnapshot?: (eventId: number) => { newEventCount: number };\n /** Maximum events to batch before flushing. Default: 1 (no batching) */\n batchSize?: number;\n /** Flush interval for batched events (ms). Default: 50 */\n batchIntervalMs?: number;\n /** Health metrics push interval (ms). 0 = no auto-push. Default: 0 */\n healthPushIntervalMs?: number;\n /** Maximum connected clients. Default: 50 */\n maxClients?: number;\n /** Token authentication callback. When set, new connections must send an `authenticate` message before receiving data. */\n authenticate?: (token: string) => boolean | Promise<boolean>;\n}\n\n// ============================================================================\n// Server Instance\n// ============================================================================\n\n/** DevTools server instance */\nexport interface DevToolsServer {\n /** Number of connected clients */\n readonly clientCount: number;\n /** Broadcast a message to all connected clients */\n broadcast(message: DevToolsServerMessage): void;\n /** Push current health metrics to all clients */\n pushHealth(): void;\n /** Push current breakpoint state to all clients */\n pushBreakpoints(): void;\n /** Push a scratchpad key update to all clients */\n pushScratchpadUpdate(key: string, value: unknown): void;\n /** Push a derived value update to all clients */\n pushDerivedUpdate(id: string, value: unknown): void;\n /** Push streaming tokens to all clients */\n pushTokenStream(agentId: string, tokens: string, tokenCount: number): void;\n /** Signal stream completion to all clients */\n pushStreamDone(agentId: string, totalTokens: number): void;\n /** Shut down the server and disconnect all clients */\n close(): void;\n}\n\nconst PROTOCOL_VERSION = 1;\n\n/**\n * Create a DevTools server that bridges orchestrator state to DevTools UI clients.\n *\n * @example\n * ```typescript\n * const server = createDevToolsServer({\n * transport: createWsTransport(4040),\n * timeline: orchestrator.timeline!,\n * healthMonitor: orchestrator.healthMonitor,\n * getSnapshot: () => buildSnapshot(orchestrator),\n * getBreakpointState: () => orchestrator.getBreakpointState(),\n * onResumeBreakpoint: (id, mods) => orchestrator.resumeBreakpoint(id, mods),\n * onCancelBreakpoint: (id, reason) => orchestrator.cancelBreakpoint(id, reason),\n * });\n * ```\n */\nexport function createDevToolsServer(\n config: DevToolsServerConfig,\n): DevToolsServer {\n const {\n transport,\n timeline,\n healthMonitor,\n getSnapshot,\n getBreakpointState,\n onResumeBreakpoint,\n onCancelBreakpoint,\n getScratchpadState,\n getDerivedState,\n onForkFromSnapshot,\n batchSize = 1,\n batchIntervalMs = 50,\n healthPushIntervalMs = 0,\n authenticate,\n } = config;\n const maxClients = config.maxClients ?? 50;\n\n const sessionId = `devtools_${crypto.randomUUID()}`;\n const clients = new Set<DevToolsClient>();\n const pendingAuthClients = new Set<DevToolsClient>();\n let batchBuffer: DebugEvent[] = [];\n let batchTimer: ReturnType<typeof setInterval> | null = null;\n let healthTimer: ReturnType<typeof setInterval> | null = null;\n\n // ------------------------------------------------------------------\n // Helpers\n // ------------------------------------------------------------------\n\n function sendToClient(\n client: DevToolsClient,\n message: DevToolsServerMessage,\n ): void {\n try {\n client.send(JSON.stringify(message));\n } catch {\n // Client may have disconnected — remove silently\n clients.delete(client);\n }\n }\n\n function broadcastMessage(message: DevToolsServerMessage): void {\n const data = JSON.stringify(message);\n const snapshot = [...clients];\n for (const client of snapshot) {\n try {\n client.send(data);\n } catch {\n clients.delete(client);\n }\n }\n }\n\n function flushBatch(): void {\n if (batchBuffer.length === 0) {\n return;\n }\n\n if (batchBuffer.length === 1) {\n broadcastMessage({ type: \"event\", event: batchBuffer[0]! });\n } else {\n broadcastMessage({ type: \"event_batch\", events: batchBuffer });\n }\n\n batchBuffer = [];\n }\n\n // ------------------------------------------------------------------\n // Timeline subscription\n // ------------------------------------------------------------------\n\n const unsubscribeTimeline: () => void = timeline.subscribe(\n (event: DebugEvent) => {\n if (clients.size === 0) {\n return;\n }\n\n if (batchSize <= 1) {\n broadcastMessage({ type: \"event\", event });\n\n return;\n }\n\n batchBuffer.push(event);\n if (batchBuffer.length >= batchSize) {\n flushBatch();\n }\n },\n );\n\n // Start batch flush timer if batching enabled\n if (batchSize > 1 && batchIntervalMs > 0) {\n batchTimer = setInterval(flushBatch, batchIntervalMs);\n }\n\n // Start health push timer if configured\n if (healthPushIntervalMs > 0 && healthMonitor) {\n healthTimer = setInterval(() => {\n if (clients.size > 0) {\n broadcastMessage({\n type: \"health\",\n metrics: healthMonitor.getAllMetrics(),\n });\n }\n }, healthPushIntervalMs);\n }\n\n // ------------------------------------------------------------------\n // Client message handler\n // ------------------------------------------------------------------\n\n function handleClientMessage(client: DevToolsClient, raw: string): void {\n let msg: DevToolsClientMessage;\n try {\n msg = JSON.parse(raw) as DevToolsClientMessage;\n } catch {\n sendToClient(client, {\n type: \"error\",\n code: \"INVALID_JSON\",\n message: \"Could not parse message\",\n });\n\n return;\n }\n\n if (!msg || typeof msg !== \"object\" || typeof msg.type !== \"string\") {\n sendToClient(client, {\n type: \"error\",\n code: \"INVALID_MESSAGE\",\n message: \"Missing type field\",\n });\n\n return;\n }\n\n const now = Date.now();\n const last = clientLastMessage.get(client) ?? 0;\n if (now - last < MIN_MESSAGE_INTERVAL_MS) {\n sendToClient(client, {\n type: \"error\",\n code: \"RATE_LIMITED\",\n message: \"Too many requests\",\n });\n\n return;\n }\n clientLastMessage.set(client, now);\n\n // Handle authenticate message\n if (msg.type === \"authenticate\") {\n if (!authenticate) {\n // No auth configured — treat as unknown command\n sendToClient(client, {\n type: \"error\",\n code: \"UNKNOWN_COMMAND\",\n message: \"Authentication not configured on this server\",\n });\n\n return;\n }\n\n if (!pendingAuthClients.has(client)) {\n // Already authenticated\n sendToClient(client, {\n type: \"error\",\n code: \"ALREADY_AUTHENTICATED\",\n message: \"Already authenticated\",\n });\n\n return;\n }\n\n if (typeof msg.token !== \"string\") {\n sendToClient(client, {\n type: \"error\",\n code: \"AUTH_FAILED\",\n message: \"Missing token\",\n });\n client.close();\n pendingAuthClients.delete(client);\n\n return;\n }\n\n const result = authenticate(msg.token);\n const handleResult = (valid: boolean) => {\n if (valid) {\n pendingAuthClients.delete(client);\n clients.add(client);\n sendToClient(client, {\n type: \"welcome\",\n version: PROTOCOL_VERSION,\n sessionId,\n timestamp: Date.now(),\n });\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"AUTH_FAILED\",\n message: \"Invalid token\",\n });\n pendingAuthClients.delete(client);\n client.close();\n }\n };\n\n if (result instanceof Promise) {\n result.then(handleResult).catch(() => {\n sendToClient(client, {\n type: \"error\",\n code: \"AUTH_FAILED\",\n message: \"Authentication error\",\n });\n pendingAuthClients.delete(client);\n client.close();\n });\n } else {\n handleResult(result);\n }\n\n return;\n }\n\n // Reject commands from clients pending authentication\n if (pendingAuthClients.has(client)) {\n sendToClient(client, {\n type: \"error\",\n code: \"AUTH_REQUIRED\",\n message: \"Authentication required\",\n });\n\n return;\n }\n\n switch (msg.type) {\n case \"ping\":\n sendToClient(client, { type: \"pong\", timestamp: Date.now() });\n break;\n\n case \"request_snapshot\":\n if (getSnapshot) {\n sendToClient(client, { type: \"snapshot\", data: getSnapshot() });\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"NO_SNAPSHOT\",\n message: \"Snapshot provider not configured\",\n });\n }\n break;\n\n case \"request_health\":\n if (healthMonitor) {\n sendToClient(client, {\n type: \"health\",\n metrics: healthMonitor.getAllMetrics(),\n });\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"NO_HEALTH\",\n message: \"Health monitor not configured\",\n });\n }\n break;\n\n case \"request_events\": {\n const events = timeline.getEvents();\n const since = msg.since;\n const filtered =\n since != null ? events.filter((e) => e.id > since) : events;\n sendToClient(client, { type: \"event_batch\", events: filtered });\n break;\n }\n\n case \"request_breakpoints\":\n if (getBreakpointState) {\n sendToClient(client, {\n type: \"breakpoints\",\n state: getBreakpointState(),\n });\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"NO_BREAKPOINTS\",\n message: \"Breakpoint provider not configured\",\n });\n }\n break;\n\n case \"resume_breakpoint\":\n if (onResumeBreakpoint && typeof msg.breakpointId === \"string\") {\n // Sanitize: only extract known fields to prevent prototype pollution\n const mods = msg.modifications\n ? { input: msg.modifications.input, skip: msg.modifications.skip }\n : undefined;\n onResumeBreakpoint(msg.breakpointId, mods);\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"NO_BREAKPOINTS\",\n message: \"Breakpoint resume not configured\",\n });\n }\n break;\n\n case \"cancel_breakpoint\":\n if (onCancelBreakpoint && typeof msg.breakpointId === \"string\") {\n const safeReason =\n typeof msg.reason === \"string\" ? msg.reason : undefined;\n onCancelBreakpoint(msg.breakpointId, safeReason);\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"NO_BREAKPOINTS\",\n message: \"Breakpoint cancel not configured\",\n });\n }\n break;\n\n case \"export_session\":\n sendToClient(client, {\n type: \"event_batch\",\n events: timeline.getEvents(),\n });\n break;\n\n case \"import_session\": {\n const MAX_IMPORT_SIZE = 10 * 1024 * 1024; // ~10M characters (string .length check, not byte size)\n if (typeof msg.data !== \"string\") {\n sendToClient(client, {\n type: \"error\",\n code: \"INVALID_DATA\",\n message: \"Missing data field for import\",\n });\n } else if (msg.data.length > MAX_IMPORT_SIZE) {\n sendToClient(client, {\n type: \"error\",\n code: \"IMPORT_TOO_LARGE\",\n message: `Import data exceeds ${MAX_IMPORT_SIZE / 1024 / 1024} MB limit`,\n });\n } else {\n try {\n timeline.import(msg.data);\n sendToClient(client, {\n type: \"event_batch\",\n events: timeline.getEvents(),\n });\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n sendToClient(client, {\n type: \"error\",\n code: \"IMPORT_FAILED\",\n message: errMsg,\n });\n }\n }\n break;\n }\n\n case \"request_scratchpad\":\n if (getScratchpadState) {\n sendToClient(client, {\n type: \"scratchpad_state\",\n data: getScratchpadState(),\n });\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"NO_SCRATCHPAD\",\n message: \"Scratchpad provider not configured\",\n });\n }\n break;\n\n case \"request_derived\":\n if (getDerivedState) {\n sendToClient(client, {\n type: \"derived_state\",\n data: getDerivedState(),\n });\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"NO_DERIVED\",\n message: \"Derived state provider not configured\",\n });\n }\n break;\n\n case \"fork_from_snapshot\": {\n if (onForkFromSnapshot && typeof msg.eventId === \"number\") {\n try {\n const result = onForkFromSnapshot(msg.eventId);\n sendToClient(client, {\n type: \"fork_complete\",\n eventId: msg.eventId,\n newEventCount: result.newEventCount,\n });\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n sendToClient(client, {\n type: \"error\",\n code: \"FORK_FAILED\",\n message: errMsg,\n });\n }\n } else {\n sendToClient(client, {\n type: \"error\",\n code: \"NO_FORK\",\n message: \"Fork provider not configured\",\n });\n }\n break;\n }\n\n default:\n sendToClient(client, {\n type: \"error\",\n code: \"UNKNOWN_COMMAND\",\n message: `Unknown message type: ${String((msg as { type: string }).type).slice(0, 100)}`,\n });\n }\n }\n\n // ------------------------------------------------------------------\n // Rate limiting\n // ------------------------------------------------------------------\n\n const clientLastMessage = new Map<DevToolsClient, number>();\n const MIN_MESSAGE_INTERVAL_MS = 50;\n\n // ------------------------------------------------------------------\n // Connection handler\n // ------------------------------------------------------------------\n\n transport.onConnection((client, onMessage, onClose) => {\n if (clients.size + pendingAuthClients.size >= maxClients) {\n try {\n const msg: DevToolsServerMessage = {\n type: \"error\",\n code: \"MAX_CLIENTS\",\n message: \"Connection limit reached\",\n };\n client.send(JSON.stringify(msg));\n } catch {\n /* ignore */\n }\n client.close();\n\n return;\n }\n\n if (authenticate) {\n // Hold in pending state until client sends authenticate message\n pendingAuthClients.add(client);\n } else {\n // No auth — add directly and send welcome\n clients.add(client);\n sendToClient(client, {\n type: \"welcome\",\n version: PROTOCOL_VERSION,\n sessionId,\n timestamp: Date.now(),\n });\n }\n\n onMessage((data) => handleClientMessage(client, data));\n onClose(() => {\n clients.delete(client);\n pendingAuthClients.delete(client);\n clientLastMessage.delete(client);\n });\n });\n\n // ------------------------------------------------------------------\n // Public interface\n // ------------------------------------------------------------------\n\n return {\n get clientCount(): number {\n return clients.size;\n },\n\n broadcast(message: DevToolsServerMessage): void {\n broadcastMessage(message);\n },\n\n pushHealth(): void {\n if (healthMonitor && clients.size > 0) {\n broadcastMessage({\n type: \"health\",\n metrics: healthMonitor.getAllMetrics(),\n });\n }\n },\n\n pushBreakpoints(): void {\n if (getBreakpointState && clients.size > 0) {\n broadcastMessage({ type: \"breakpoints\", state: getBreakpointState() });\n }\n },\n\n pushScratchpadUpdate(key: string, value: unknown): void {\n if (clients.size > 0) {\n broadcastMessage({ type: \"scratchpad_update\", key, value });\n }\n },\n\n pushDerivedUpdate(id: string, value: unknown): void {\n if (clients.size > 0) {\n broadcastMessage({ type: \"derived_update\", id, value });\n }\n },\n\n pushTokenStream(agentId: string, tokens: string, tokenCount: number): void {\n if (clients.size > 0) {\n broadcastMessage({ type: \"token_stream\", agentId, tokens, tokenCount });\n }\n },\n\n pushStreamDone(agentId: string, totalTokens: number): void {\n if (clients.size > 0) {\n broadcastMessage({ type: \"stream_done\", agentId, totalTokens });\n }\n },\n\n close(): void {\n unsubscribeTimeline();\n\n if (batchTimer) {\n clearInterval(batchTimer);\n batchTimer = null;\n }\n\n if (healthTimer) {\n clearInterval(healthTimer);\n healthTimer = null;\n }\n\n flushBatch();\n\n for (const client of clients) {\n try {\n client.close();\n } catch {\n // Ignore close errors\n }\n }\n for (const client of pendingAuthClients) {\n try {\n client.close();\n } catch {\n // Ignore close errors\n }\n }\n clients.clear();\n pendingAuthClients.clear();\n clientLastMessage.clear();\n\n transport.close();\n },\n };\n}\n\n// ============================================================================\n// Orchestrator Connector\n// ============================================================================\n\n/** Options for connecting DevTools to an orchestrator */\nexport interface ConnectDevToolsOptions {\n /** Port for the WebSocket server. Default: 4040 */\n port?: number;\n /** Host to bind to. Default: \"localhost\" */\n host?: string;\n /** Health metrics push interval (ms). Default: 5000 */\n healthPushIntervalMs?: number;\n /** Event batching size. Default: 1 (no batching) */\n batchSize?: number;\n /** Token authentication callback. When set, clients must authenticate before receiving data. */\n authenticate?: (token: string) => boolean | Promise<boolean>;\n}\n\n/** Minimal orchestrator interface for DevTools connection */\nexport interface DevToolsCompatibleOrchestrator {\n timeline: {\n subscribe: (listener: (event: DebugEvent) => void) => () => void;\n getEvents: () => DebugEvent[];\n import: (json: string) => void;\n export: () => string;\n forkFrom?: (eventId: number) => void;\n } | null;\n healthMonitor?: {\n getAllMetrics: () => Record<string, AgentHealthMetrics>;\n } | null;\n getPendingBreakpoints?: () => Array<{\n id: string;\n type: string;\n agentId: string;\n input: string;\n label?: string;\n requestedAt: number;\n }>;\n resumeBreakpoint?: (\n id: string,\n modifications?: { input?: string; skip?: boolean },\n ) => void;\n cancelBreakpoint?: (id: string, reason?: string) => void;\n getAllAgentStates?: () => Record<\n string,\n {\n status: string;\n lastInput?: string;\n lastOutput?: unknown;\n totalTokens: number;\n runCount: number;\n }\n >;\n /** Get current scratchpad state (multi-agent only) */\n getScratchpadState?: () => Record<string, unknown>;\n /** Get current derived values (multi-agent only) */\n getDerivedState?: () => Record<string, unknown>;\n}\n\n/**\n * Connect DevTools to an orchestrator instance.\n *\n * Convenience function that creates a WebSocket transport and DevTools server,\n * automatically wiring up the orchestrator's timeline, health monitor, and breakpoint system.\n *\n * Requires the `ws` package: `npm install ws`\n *\n * **Security:** Binding to `0.0.0.0` exposes the server to all network interfaces.\n * Only do this behind a firewall or with proper authentication.\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({ debug: true, ... });\n * const devtools = await connectDevTools(orchestrator, { port: 4040 });\n *\n * // Later, clean up:\n * devtools.close();\n * ```\n */\nexport async function connectDevTools(\n orchestrator: DevToolsCompatibleOrchestrator,\n options: ConnectDevToolsOptions = {},\n): Promise<DevToolsServer> {\n if (!orchestrator.timeline) {\n throw new Error(\n \"[Directive DevTools] Orchestrator must have debug: true to use DevTools\",\n );\n }\n\n const transport = await createWsTransport({\n port: options.port ?? 4040,\n host: options.host ?? \"localhost\",\n });\n\n return createDevToolsServer({\n transport,\n timeline: orchestrator.timeline as unknown as DebugTimeline,\n healthMonitor: orchestrator.healthMonitor as HealthMonitor | undefined,\n healthPushIntervalMs: options.healthPushIntervalMs ?? 5000,\n batchSize: options.batchSize,\n authenticate: options.authenticate,\n getSnapshot: orchestrator.getAllAgentStates\n ? () => {\n const agents = orchestrator.getAllAgentStates!();\n\n return {\n timestamp: Date.now(),\n agents,\n eventCount: orchestrator.timeline!.getEvents().length,\n };\n }\n : undefined,\n getBreakpointState: orchestrator.getPendingBreakpoints\n ? () => ({\n pending: orchestrator.getPendingBreakpoints!(),\n resolved: [],\n cancelled: [],\n })\n : undefined,\n onResumeBreakpoint: orchestrator.resumeBreakpoint,\n onCancelBreakpoint: orchestrator.cancelBreakpoint,\n getScratchpadState: orchestrator.getScratchpadState,\n getDerivedState: orchestrator.getDerivedState,\n onForkFromSnapshot: orchestrator.timeline?.forkFrom\n ? (eventId: number) => {\n orchestrator.timeline!.forkFrom!(eventId);\n const newEventCount = orchestrator.timeline!.getEvents().length;\n\n return { newEventCount };\n }\n : undefined,\n });\n}\n\n// ============================================================================\n// Node.js ws Transport Helper\n// ============================================================================\n\n/**\n * Configuration for the built-in Node.js `ws` transport.\n *\n * Requires the `ws` package to be installed: `npm install ws`\n */\nexport interface WsTransportConfig {\n /** Port to listen on. Default: 4040 */\n port?: number;\n /** Host to bind to. Default: \"localhost\" */\n host?: string;\n /** Maximum incoming message size in bytes. Default: 1048576 (1MB) */\n maxPayloadBytes?: number;\n}\n\n/**\n * Create a DevTools transport using the Node.js `ws` WebSocket library.\n *\n * This is a convenience helper — you can implement {@link DevToolsTransport}\n * with any WebSocket library.\n *\n * @example\n * ```typescript\n * const transport = await createWsTransport({ port: 4040 });\n * const server = createDevToolsServer({ transport, timeline });\n * ```\n */\nexport async function createWsTransport(\n config: WsTransportConfig = {},\n): Promise<DevToolsTransport> {\n const port = config.port ?? 4040;\n const host = config.host ?? \"localhost\";\n\n // Dynamic import so ws is not a hard dependency\n const { WebSocketServer } = await import(\"ws\");\n // maxPayload is supported at runtime but missing from @types/ws ServerOptions\n const wss = new WebSocketServer({\n port,\n host,\n ...{ maxPayload: config.maxPayloadBytes ?? 1_048_576 },\n });\n\n let connectionHandler:\n | ((\n client: DevToolsClient,\n onMessage: (handler: (data: string) => void) => void,\n onClose: (handler: () => void) => void,\n ) => void)\n | null = null;\n\n // biome-ignore lint/suspicious/noExplicitAny: ws types resolved at runtime via dynamic import\n wss.on(\"connection\", (ws: any) => {\n let messageHandler: ((data: string) => void) | null = null;\n let closeHandler: (() => void) | null = null;\n\n const client: DevToolsClient = {\n send(data: string) {\n if (ws.readyState === ws.OPEN) {\n ws.send(data);\n }\n },\n close() {\n ws.close();\n },\n };\n\n ws.on(\"message\", (raw: any) => {\n if (messageHandler) {\n messageHandler(raw.toString());\n }\n });\n\n ws.on(\"close\", () => {\n if (closeHandler) {\n closeHandler();\n }\n });\n\n connectionHandler?.(\n client,\n (handler) => {\n messageHandler = handler;\n },\n (handler) => {\n closeHandler = handler;\n },\n );\n });\n\n return {\n onConnection(handler) {\n connectionHandler = handler;\n },\n close() {\n wss.close();\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use strict';var chunkK64WKZ22_cjs=require('./chunk-K64WKZ22.cjs'),chunkWOFIBIPW_cjs=require('./chunk-WOFIBIPW.cjs'),chunkFFRWQNK7_cjs=require('./chunk-FFRWQNK7.cjs'),core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils'),internals=require('@directive-run/core/internals');function Ht(s,r,i){return typeof s=="function"?{name:`${i}-guardrail-${r}`,fn:s,critical:true}:s}function kr(s,r){let{backoff:i="exponential",baseDelayMs:d=100,maxDelayMs:f=5e3}=r,g;switch(i){case "exponential":g=d*2**(s-1);break;case "linear":g=d*s;break;default:g=d;}return Math.min(g,f)}function Nn(s,r){return r?.aborted?Promise.reject(r.reason??new Error("Aborted")):new Promise((i,d)=>{if(!r){setTimeout(i,s);return}let f=()=>{clearTimeout(g),d(r.reason??new Error("Aborted"));},g=setTimeout(()=>{r.removeEventListener("abort",f),i();},s);r.addEventListener("abort",f,{once:true});})}async function Ut(s,r,i,d){let{retry:f}=s,g=Math.max(f?.attempts??1,1),c;for(let R=1;R<=g;R++)try{return await s.fn(r,i)}catch(P){if(c=P instanceof Error?P:new Error(String(P)),R<g){let y=kr(R,f??{});await Nn(y,d);}}return {passed:false,reason:`Guardrail "${s.name}" failed after ${g} attempt(s): ${c.message}`}}function wr(s,r){let{backoff:i="exponential",baseDelayMs:d=1e3,maxDelayMs:f=3e4}=r,g;switch(i){case "exponential":g=d*2**(s-1);break;case "linear":g=d*s;break;default:g=d;}return Math.min(g,f)}async function qn(s,r,i,d,f){let g=Math.max(f?.attempts??1,1),c=f?.isRetryable??(()=>true),R=f?.onRetry,P;for(let y=1;y<=g;y++)try{return await s(r,i,d)}catch(M){if(P=M instanceof Error?M:new Error(String(M)),y<g){let I=true;try{I=c(P);}catch{break}if(!I)break;let B=wr(y,f??{});try{R?.(y,P,B);}catch{}await Nn(B,d?.signal);}else break}throw P}function vr(s){let r=[];if(s.category&&r.push(s.category),s.tags?.length)for(let i of s.tags)i!==s.category&&r.push(i);return r.length>0?` [${r.join(", ")}]`:""}function rt(s,r){if(!r)return null;let i=r.label??s,d=r.description?`: ${r.description}`:"",f=vr(r);return `- ${r.label?`${s} (${i})`:s}${d}${f}`}function cn(s){let r=[],i=s.modules.map(y=>rt(y.id,y.meta)).filter(Boolean);i.length>0&&r.push(`### Modules
|
|
2
|
+
${i.join(`
|
|
3
|
+
`)}`);let d=s.constraints.filter(y=>y.active&&y.meta).map(y=>rt(y.id,y.meta)).filter(Boolean);if(d.length>0&&r.push(`### Active Constraints
|
|
4
|
+
${d.join(`
|
|
5
|
+
`)}`),s.unmet.length>0){let y=new Map(s.constraints.filter(I=>I.meta?.label).map(I=>[I.id,I.meta.label])),M=s.unmet.map(I=>{let B=y.get(I.fromConstraint)??I.fromConstraint;return `- ${I.requirement.type} \u2014 from "${B}"`});r.push(`### Unmet Requirements
|
|
6
|
+
${M.join(`
|
|
7
|
+
`)}`);}let f=s.resolverDefs.map(y=>rt(y.id,y.meta)).filter(Boolean);f.length>0&&r.push(`### Resolvers
|
|
8
|
+
${f.join(`
|
|
9
|
+
`)}`);let g=s.events.map(y=>rt(y.name,y.meta)).filter(Boolean);g.length>0&&r.push(`### Events
|
|
10
|
+
${g.join(`
|
|
11
|
+
`)}`);let c=s.facts.map(y=>rt(y.key,y.meta)).filter(Boolean);c.length>0&&r.push(`### Annotated Facts
|
|
12
|
+
${c.join(`
|
|
13
|
+
`)}`);let R=s.effects.map(y=>rt(y.id,y.meta)).filter(Boolean);R.length>0&&r.push(`### Effects
|
|
14
|
+
${R.join(`
|
|
15
|
+
`)}`);let P=s.derivations.map(y=>rt(y.id,y.meta)).filter(Boolean);return P.length>0&&r.push(`### Derivations
|
|
16
|
+
${P.join(`
|
|
17
|
+
`)}`),r.length===0?"":`## System Context
|
|
18
|
+
|
|
19
|
+
${r.join(`
|
|
20
|
+
|
|
21
|
+
`)}`}function jr(s){return cn(s.inspect())}function St(s){return adapterUtils.getBridgeFact(s,chunkK64WKZ22_cjs.c)}function Ue(s,r){adapterUtils.setBridgeFact(s,chunkK64WKZ22_cjs.c,r);}function gt(s){return adapterUtils.getBridgeFact(s,chunkK64WKZ22_cjs.d)}function Je(s,r){adapterUtils.setBridgeFact(s,chunkK64WKZ22_cjs.d,r);}function dn(s){return adapterUtils.getBridgeFact(s,chunkK64WKZ22_cjs.e)}function mt(s,r){adapterUtils.setBridgeFact(s,chunkK64WKZ22_cjs.e,r);}function pn(s){return adapterUtils.getBridgeFact(s,chunkK64WKZ22_cjs.f)}function ht(s,r){adapterUtils.setBridgeFact(s,chunkK64WKZ22_cjs.f,r);}function We(s){return adapterUtils.getBridgeFact(s,chunkK64WKZ22_cjs.g)}function ze(s,r){adapterUtils.setBridgeFact(s,chunkK64WKZ22_cjs.g,r);}function Ce(s){return {agent:St(s),approval:gt(s),conversation:dn(s),toolCalls:pn(s)}}function Jt(s){let r=Object.create(null);for(let[i,d]of Object.entries(s))r[i]={priority:d.priority??0,when:f=>{let g=Ce(f),c={...f,...g};return d.when(c)},require:f=>{let g=Ce(f),c={...f,...g};return typeof d.require=="function"?d.require(c):d.require}};return r}function Gr(s,r,i){let d=Object.create(null);for(let[f,g]of Object.entries(s))d[f]={requirement:g.requirement,key:g.key,resolve:async(c,R)=>{let P=Ce(R.facts),M={facts:{...R.facts,...P},runAgent:async(I,B,he)=>r(I,B,Ce(i()),he),signal:R.signal};await g.resolve(c,M);}};return d}var xt=class extends Error{iterations;history;lastResult;totalTokens;constructor(r){super(`[Directive Reflection] Exhausted ${r.iterations} iterations without passing evaluation. Last feedback: ${r.history[r.history.length-1]?.feedback??"(none)"}`),this.name="ReflectionExhaustedError",this.iterations=r.iterations,this.history=r.history,this.lastResult=r.lastResult,this.totalTokens=r.totalTokens;}};function Rr(s,r,i){return `${s}
|
|
22
|
+
|
|
23
|
+
Feedback on your previous response:
|
|
24
|
+
${r}
|
|
25
|
+
|
|
26
|
+
Please improve your response.`}function Br(s,r){let i=r.maxIterations??2,d=r.buildRetryInput??Rr,f=r.onExhausted??"accept-last";if(i<1)throw new Error("[Directive Reflection] maxIterations must be >= 1");return typeof process<"u"&&process.env?.NODE_ENV!=="production"&&i>3&&console.warn("[Directive Reflection] maxIterations > 3 rarely improves quality. Consider using maxIterations <= 3 to avoid unbounded token burn."),async(g,c,R)=>{let P=[],y=c,M=0,I=null;for(let B=0;B<i;B++){let he=Date.now(),ce=await s(g,y,R);I=ce,M+=ce.totalTokens;let Se={input:c,iteration:B,result:ce,history:[...P]},ke=await r.evaluate(ce.output,Se);P.push(ke);let Le=Date.now()-he;try{r.onIteration?.({iteration:B,passed:ke.passed,feedback:ke.feedback,score:ke.score,durationMs:Le});}catch{}if(ke.passed)return {...ce,totalTokens:M};if(r.budgetThreshold!==void 0&&M>=r.budgetThreshold)break;B<i-1&&ke.feedback&&(y=d(c,ke.feedback,B));}if(f==="throw")throw new xt({iterations:i,history:P,lastResult:I,totalTokens:M});return {...I,totalTokens:M}}}var At=200,Tr=0;function Gn(){return `bp_${Date.now().toString(36)}_${(++Tr).toString(36)}`}function Ln(s,r,i){for(let d of s)if(d.type===r){if(!d.when)return d;try{if(d.when(i))return d}catch{}}return null}function Ct(){return {pending:[],resolved:[],cancelled:[]}}var Bn=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ke(){let s=Date.now().toString(36),r=crypto.randomUUID().slice(0,8);return `ckpt_${s}_${r}`}function fn(s){if(!s||typeof s!="object")return false;for(let d of Object.keys(s))if(Bn.has(d))return false;let r=s;if(r.version!==1||typeof r.id!="string"||r.id.length===0||typeof r.createdAt!="string"||typeof r.systemExport!="string"||r.timelineExport!==null&&typeof r.timelineExport!="string"||!r.localState||typeof r.localState!="object")return false;for(let d of Object.keys(r.localState))if(Bn.has(d))return false;let i=r.localState;return !(i.type!=="single"&&i.type!=="multi"||r.orchestratorType!=="single"&&r.orchestratorType!=="multi")}var Fn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(r){if(this.maxCheckpoints=r?.maxCheckpoints??100,this.retentionMs=r?.retentionMs??Number.POSITIVE_INFINITY,this.preserveLabeled=r?.preserveLabeled??false,!Number.isFinite(this.maxCheckpoints)||this.maxCheckpoints<1)throw new Error(`[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`)}async save(r){if(!fn(r))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let i=this.order.indexOf(r.id);return i>=0&&this.order.splice(i,1),this.store.set(r.id,r),this.order.push(r.id),r.id}async load(r){return this.store.get(r)??null}async list(){return this.order.map(r=>{let i=this.store.get(r);return {id:i.id,label:i.label,createdAt:i.createdAt}})}async delete(r){if(!this.store.has(r))return false;this.store.delete(r);let i=this.order.indexOf(r);return i>=0&&this.order.splice(i,1),true}async clear(){this.store.clear(),this.order.length=0;}async prune(){if(!Number.isFinite(this.retentionMs))return 0;let r=Date.now()-this.retentionMs,i=0,d=[];for(let f of this.order){let g=this.store.get(f);if(!g)continue;if(new Date(g.createdAt).getTime()>=r)break;this.preserveLabeled&&g.label||d.push(f);}for(let f of d){this.store.delete(f);let g=this.order.indexOf(f);g>=0&&this.order.splice(g,1),i++;}return i}evictOldest(){if(this.preserveLabeled)for(let i=0;i<this.order.length;i++){let d=this.order[i],f=this.store.get(d);if(f&&!f.label)return this.order.splice(i,1),this.store.delete(d),true}let r=this.order.shift();return r?(this.store.delete(r),true):false}};var gn=class{buffer=[];maxSize;strategy;pullWaiters=[];pushWaiters=[];closed=false;droppedCount=0;constructor(r="buffer",i=1e3){this.strategy=r,this.maxSize=i;}async push(r){if(this.closed)return false;let i=this.pullWaiters.shift();if(i)return i(r),true;if(this.buffer.length>=this.maxSize)switch(this.strategy){case "drop":return this.droppedCount++,false;case "block":if(await new Promise(d=>{this.pushWaiters.push(d);}),this.closed)return false;break;}return this.buffer.push(r),true}async pull(){let r=this.pushWaiters.shift();return r&&r(),this.buffer.length>0?this.buffer.shift():this.closed?null:new Promise(i=>{this.pullWaiters.push(i);})}close(){this.closed=true;for(let r of this.pullWaiters)r(null);this.pullWaiters=[];for(let r of this.pushWaiters)r();this.pushWaiters=[];}getDroppedCount(){return this.droppedCount}};function Kr(s,r={}){let{streamingGuardrails:i=[]}=r;return (d,f,g={})=>{let{signal:c,backpressure:R="buffer",bufferSize:P=1e3,guardrailCheckInterval:y=50,stopOnGuardrail:M=true}=g;if(y<=0||!Number.isFinite(y))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${y}`);let I=new gn(R,P),B=new AbortController,he="",ce=0,Se=false,ke=Date.now(),Le;c&&(Le=()=>B.abort(),c.addEventListener("abort",Le));let Wt=()=>{Le&&c&&c.removeEventListener("abort",Le);};async function Et(){for(let Z of i)try{let we=await Z.check(he,ce);if(!we.passed){let Be=Z.stopOnFail!==!1,Re={type:"guardrail_triggered",guardrailName:Z.name,reason:we.reason??"Guardrail check failed",partialOutput:he,stopped:Be};return await I.push(Re),Be&&(typeof M=="function"?M:()=>M)(Re)&&(Se=!0,B.abort()),Re}}catch{}return null}let at=(async()=>{await I.push({type:"progress",phase:"starting",message:"Starting agent"});try{let Z=await s(d,f,{signal:B.signal,onToken:async Re=>{Se||(ce++,he+=Re,await I.push({type:"token",data:Re,tokenCount:ce}),ce%y===0&&await Et());},onToolStart:async(Re,Ye,Fe)=>{await I.push({type:"progress",phase:"tool_calling",message:`Calling ${Re}`}),await I.push({type:"tool_start",tool:Re,toolCallId:Ye,arguments:Fe});},onToolEnd:async(Re,Ye,Fe)=>{await I.push({type:"tool_end",tool:Re,toolCallId:Ye,result:Fe}),await I.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async Re=>{await I.push({type:"message",message:Re});}});await Et();let we=Date.now()-ke,Be=I.getDroppedCount();return await I.push({type:"done",totalTokens:Z.totalTokens,duration:we,droppedTokens:Be}),I.close(),Z}catch(Z){let we={type:"error",error:Z instanceof Error?Z:new Error(String(Z)),partialOutput:he||void 0};throw await I.push(we),I.close(),Z}finally{Wt();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let Z=await I.pull();return Z===null?{done:true,value:void 0}:{done:false,value:Z}}}}},result:at,abort:()=>B.abort()}}}function Vr(s){let{checkFn:r,threshold:i=.8,stopOnFail:d=true}=s;return {name:"toxicity-streaming",stopOnFail:d,async check(f){let g=await r(f);return g>i?{passed:false,reason:`Toxicity score ${g.toFixed(2)} exceeds threshold ${i}`,severity:"critical"}:{passed:true}}}}function Yr(s){let{maxTokens:r,warnAt:i,stopOnFail:d=true}=s,f=false;return {name:"length-streaming",stopOnFail:d,check(g,c){return c>=r?{passed:false,reason:`Output exceeded maximum length of ${r} tokens`,severity:"error"}:i&&c>=i&&!f?(f=true,{passed:true,warning:`Approaching maximum length: ${c}/${r} tokens`,severity:"warning"}):{passed:true}}}}function Xr(s){let{patterns:r,stopOnFail:i=true}=s;return {name:"pattern-streaming",stopOnFail:i,check(d){for(let{regex:f,name:g}of r)if(f.lastIndex=0,f.test(d))return {passed:false,reason:`Detected ${g} pattern in output`,severity:"error"};return {passed:true}}}}function Zr(s,r={}){let{name:i="combined-streaming",stopOnFirstFail:d=true}=r;return {name:i,stopOnFail:d,async check(f,g){let c=[];for(let R of s){let P=await R.check(f,g);if(!P.passed){if(d)return {...P,reason:`[${R.name}] ${P.reason}`};c.push(`[${R.name}] ${P.reason??"failed"}`);}}return c.length>0?{passed:false,reason:c.join("; ")}:{passed:true}}}}function Qr(s,r,i={}){let{minTokens:d=0,stopOnFail:f=true}=i;return {name:s,stopOnFail:f,async check(g,c){if(c<d)return {passed:true};let R=await r({output:g,agentName:"streaming",input:"",messages:[]},{agentName:"streaming",input:"",facts:{}});return {passed:R.passed,reason:R.reason,severity:R.passed?void 0:"error"}}}}async function eo(s){let r="";for await(let i of s)i.type==="token"&&(r+=i.data);return r}async function*to(s,r){for await(let i of s)await r(i),yield i;}async function*no(s,r){let i=new Set(r);for await(let d of s)i.has(d.type)&&(yield d);}async function*ro(s,r){for await(let i of s)yield await r(i);}var Sr=1e4;function Hn(s){if(s.length===0)return {stream:{[Symbol.asyncIterator](){let M={done:true,value:void 0};return {async next(){return M},async return(){return M}}}},getDroppedCount:()=>0};let r=[],i=[],d=s.length,f=false,g=0;function c(y){if(f)return;let M=i.shift();if(M){M(y);return}r.length<Sr?r.push(y):g++;}function R(){if(d--,d<=0){f=true;for(let y of i)y(null);i.length=0;}}for(let y of s)(async()=>{try{for await(let M of y.stream)c({chunk:M,agentId:y.agentId});}catch(M){c({chunk:{type:"error",error:M instanceof Error?M:new Error(String(M))},agentId:y.agentId});}finally{R();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return r.length>0?{done:false,value:r.shift()}:f?{done:true,value:void 0}:new Promise(y=>{i.push(M=>{y(M===null?{done:true,value:void 0}:{done:false,value:M});});})},return(){f=true,r.length=0;for(let y of i)y(null);return i.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>g}}function mn(s,r){if(Object.is(s,r))return true;if(typeof s!=typeof r||s===null||r===null||typeof s!="object")return false;if(Array.isArray(s)){if(!Array.isArray(r)||s.length!==r.length)return false;for(let c=0;c<s.length;c++)if(s[c]!==r[c])return false;return true}let i=s,d=r,f=Object.keys(i),g=Object.keys(d);if(f.length!==g.length)return false;for(let c of f)if(i[c]!==d[c])return false;return true}var Ee=class{count;maxPermits;queue=[];constructor(r){if(r<1||!Number.isFinite(r))throw new Error(`[Directive Semaphore] Invalid max permits: ${r}. Must be a finite number >= 1.`);this.maxPermits=r,this.count=r;}createReleaseFn(){let r=false;return ()=>{r||(r=true,this.release());}}async acquire(r){if(r?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((i,d)=>{let f,g={resolve:c=>{f&&r&&r.removeEventListener("abort",f),i(c);},reject:d};this.queue.push(g),r&&(f=()=>{let c=this.queue.indexOf(g);c>=0&&(this.queue.splice(c,1),d(new Error("[Directive Semaphore] Aborted while waiting for permit")));},r.addEventListener("abort",f,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let r=this.queue.shift();r&&(this.count--,r.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let r=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),i=this.queue.splice(0,this.queue.length);for(let d of i)d.reject(r);this.count=this.maxPermits;}};function ot(s){switch(s.type){case "sequential":return s.step;case "supervisor":return s.round;case "reflect":return s.iteration;case "debate":return s.round;case "dag":return s.completedCount;case "goal":return s.step}}function xr(s){let r=ot(s),i=s.stepsTotal??null;switch(s.type){case "sequential":{let d=s.results.reduce((c,R)=>c+R.totalTokens,0),f=s.results.length>0?d/s.results.length:0,g=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:f>0&&g!=null?Math.round(f*g):null,estimatedStepsRemaining:g}}case "supervisor":{let d=s.workerResults.reduce((g,c)=>g+c.totalTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "reflect":{let d=s.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "debate":{let d=s.tokensConsumed,f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "dag":{let d=i??Object.keys(s.statuses).length,f=s.completedCount,g=Object.values(s.nodeResults).reduce((P,y)=>P+y.totalTokens,0),c=f>0?g/f:0,R=d-f;return {percentage:d>0?Math.round(f/d*100):0,stepsCompleted:f,stepsTotal:d,tokensConsumed:g,estimatedTokensRemaining:R>0?Math.round(c*R):0,estimatedStepsRemaining:R}}case "goal":{let d=Object.values(s.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0),f=s.lastSatisfaction;return {percentage:Math.round(f*100),stepsCompleted:r,stepsTotal:i??null,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:s.stepMetrics.length>0?Ar(s):null}}}}function Ar(s){let r=s.stepMetrics;if(r.length<2)return null;let i=1-s.lastSatisfaction;if(i<=0)return 0;let f=r.reduce((g,c)=>g+Math.max(0,c.satisfactionDelta),0)/r.length;return f<=0?null:Math.ceil(i/f)}function Cr(s,r){if(s.type!==r.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${s.type} vs ${r.type}`);let i=f=>{switch(f.type){case "sequential":return f.results.reduce((g,c)=>g+c.totalTokens,0);case "supervisor":return f.workerResults.reduce((g,c)=>g+c.totalTokens,0);case "reflect":return f.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0);case "debate":return f.tokensConsumed;case "dag":return Object.values(f.nodeResults).reduce((g,c)=>g+c.totalTokens,0);case "goal":return Object.values(f.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0)}},d={patternType:s.type,stepDelta:ot(r)-ot(s),tokensDelta:i(r)-i(s)};if(s.type==="goal"&&r.type==="goal"){let f=new Set(Object.keys(s.facts)),g=new Set(Object.keys(r.facts)),c=[],R=[],P=[];for(let y of g)f.has(y)?JSON.stringify(s.facts[y])!==JSON.stringify(r.facts[y])&&P.push({key:y,before:s.facts[y],after:r.facts[y]}):c.push(y);for(let y of f)g.has(y)||R.push(y);d.facts={added:c,removed:R,changed:P};}if(s.type==="dag"&&r.type==="dag"){let f=new Set(Object.entries(s.statuses).filter(([,g])=>g==="completed").map(([g])=>g));d.nodesCompleted=Object.entries(r.statuses).filter(([g,c])=>c==="completed"&&!f.has(g)).map(([g])=>g);}if(s.type==="goal"&&r.type==="goal"){let f=new Set(s.completedNodes);d.nodesCompleted=r.completedNodes.filter(g=>!f.has(g));}return d}async function Er(s,r,i){let{createMultiAgentOrchestrator:d}=await import('./multi-agent-orchestrator-Y5U4JCFO.cjs'),f=await r.load(i);if(!f)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let g=structuredClone(f),c=d({...s,checkpointStore:r});return c.restore(g),c}function hn(s,r){let i=Object.keys(r);for(let[P,y]of Object.entries(r))for(let M of y.deps??[])if(!r[M])throw new Error(`[Directive MultiAgent] DAG pattern "${s}": node "${P}" depends on unknown node "${M}"`);if(!i.some(P=>{let y=r[P]?.deps;return !y||y.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${s}": no root nodes (every node has dependencies)`);let f=Object.create(null),g=Object.create(null);for(let P of i)g[P]=[];for(let[P,y]of Object.entries(r)){f[P]=(y.deps??[]).length;for(let M of y.deps??[])g[M].push(P);}let c=[];for(let P of i)f[P]===0&&c.push(P);let R=0;for(;c.length>0;){let P=c.shift();R++;for(let y of g[P]??[])f[y]--,f[y]===0&&c.push(y);}if(R!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${s}": cycle detected. Visited ${R}/${i.length} nodes.`)}function ao(s,r,i){return {type:"parallel",handlers:s,merge:r,...i}}function io(s,r){return {type:"sequential",handlers:s,...r}}function uo(s,r,i){return {type:"supervisor",supervisor:s,workers:r,...i}}function lo(s,r,i){return {type:"dag",nodes:s,merge:r??(d=>d.outputs),...i}}function co(s,r,i){return {type:"reflect",handler:s,evaluator:r,...i}}function po(s,r){return {type:"race",handlers:s,...r}}function fo(s,r,i){return {type:"goal",nodes:s,when:r,...i}}function go(){return {select:s=>s}}function mo(s){let r=s?.topN??3;return {select:(i,d)=>[...i].sort((g,c)=>{let R=d[g]?.avgSatisfactionDelta??0;return (d[c]?.avgSatisfactionDelta??0)-R}).slice(0,r)}}function ho(){return {select:(s,r)=>[...s].sort((d,f)=>{let g=r[d],c=r[f];if(!g||g.runs===0)return -1;if(!c||c.runs===0)return 1;let R=g.avgSatisfactionDelta>0?g.tokens/g.runs/g.avgSatisfactionDelta:Number.POSITIVE_INFINITY,P=c.avgSatisfactionDelta>0?c.tokens/c.runs/c.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return R-P})}}function yo(s){switch(s.type){case "parallel":return {type:"parallel",handlers:s.handlers,minSuccess:s.minSuccess,timeout:s.timeout};case "sequential":return {type:"sequential",handlers:s.handlers,continueOnError:s.continueOnError};case "supervisor":return {type:"supervisor",supervisor:s.supervisor,workers:s.workers,maxRounds:s.maxRounds};case "dag":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,deps:d.deps,timeout:d.timeout,priority:d.priority};return {type:"dag",nodes:r,timeout:s.timeout,maxConcurrent:s.maxConcurrent,onNodeError:s.onNodeError}}case "reflect":return {type:"reflect",handler:s.handler,evaluator:s.evaluator,maxIterations:s.maxIterations,onExhausted:s.onExhausted,timeout:s.timeout,threshold:typeof s.threshold=="number"?s.threshold:void 0};case "race":return {type:"race",handlers:s.handlers,timeout:s.timeout,minSuccess:s.minSuccess};case "debate":return {type:"debate",handlers:s.handlers,evaluator:s.evaluator,maxRounds:s.maxRounds,timeout:s.timeout};case "goal":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,produces:d.produces,requires:d.requires,allowRerun:d.allowRerun,priority:d.priority};return {type:"goal",nodes:r,maxSteps:s.maxSteps,timeout:s.timeout}}}}var Dr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function ko(s,r){if(!s||typeof s!="object"||!Dr.has(s.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${s?.type}"`);let i=Object.create(null);for(let[d,f]of Object.entries(s))d!=="__proto__"&&d!=="constructor"&&d!=="prototype"&&(i[d]=f);return {...i,...r}}function To(s,r,i,d){return {when:s,require:f=>{let g=typeof r=="function"?r(f):r,c=typeof i=="function"?i(f):i;return {type:"RUN_AGENT",agent:g,input:c}},priority:d}}function So(s,r,i){return {type:"RUN_AGENT",agent:s,input:r,context:i}}function xo(s,r=`
|
|
27
|
+
|
|
28
|
+
`){return s.map(i=>typeof i.output=="string"?i.output:internals.safeStringify(i.output)).join(r)}function Ao(s,r){if(s.length===0)throw new Error("[Directive MultiAgent] No results to pick from");return s.reduce((i,d)=>r(d)>r(i)?d:i)}function Co(s){return s.map(r=>r.output)}function Eo(s){return s.reduce((r,i)=>r+i.totalTokens,0)}function Do(...s){if(s.length===0)throw new Error("[Directive MultiAgent] composePatterns requires at least one pattern");return async(r,i)=>{let d=i,f;for(let g of s){switch(g.type){case "parallel":{let c=g,R=c.handlers.map(()=>d);f=await r.runParallel(c.handlers,R,c.merge,{minSuccess:c.minSuccess,timeout:c.timeout});break}case "sequential":{let c=g,R=await r.runSequential(c.handlers,d,{transform:c.transform}),P=R[R.length-1];f=c.extract?c.extract(P?.output):P?.output;break}case "supervisor":{let c=g,R=c.maxRounds??5;if(R<1||!Number.isFinite(R))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let P=[],y=await r.runAgent(c.supervisor,d);for(let M=0;M<R;M++){let I=y.output,B;if(typeof I=="string")try{B=JSON.parse(I);}catch{try{let ce=I.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),Se=chunkFFRWQNK7_cjs.a(ce);if(Se&&typeof Se=="object"&&"action"in Se)B=Se;else break}catch{break}}else if(I&&typeof I=="object"&&"action"in I)B=I;else break;if(B.action==="complete"||!B.worker||!c.workers.includes(B.worker))break;let he=await r.runAgent(B.worker,B.workerInput??"");P.push(he),y=await r.runAgent(c.supervisor,`Worker ${B.worker} completed with result: ${internals.safeStringify(he.output)}`);}f=c.extract?c.extract(y.output,P):y.output;break}case "dag":{let c=g,R={input:d,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.debug("[Directive MultiAgent] composePatterns: DAG nodes executed sequentially \u2014 use runPattern() for full parallel DAG execution");let P=Object.keys(c.nodes);for(let y of P){let M=c.nodes[y];R.statuses[y]="running";try{let I=d;if(M.transform)I=M.transform(R);else if(M.deps&&M.deps.length>0){let he=Object.create(null);for(let ce of M.deps)R.outputs[ce]!==void 0&&(he[ce]=R.outputs[ce]);I=JSON.stringify(he);}let B=await r.runAgent(M.handler,I);R.outputs[y]=B.output,R.results[y]=B,R.statuses[y]="completed";}catch(I){if(R.statuses[y]="error",R.errors[y]=I instanceof Error?I.message:String(I),c.onNodeError==="fail")throw I}}f=await c.merge(R);break}case "reflect":{let c=g,R=c.maxIterations??2,P=c.parseEvaluation??(B=>{if(typeof B=="string")try{return JSON.parse(B)}catch{return {passed:false,feedback:B}}return B&&typeof B=="object"&&"passed"in B?B:{passed:false,feedback:"Invalid evaluator output"}}),y=c.buildRetryInput??((B,he)=>`${B}
|
|
29
|
+
|
|
30
|
+
Feedback on your previous response:
|
|
31
|
+
${he}
|
|
32
|
+
|
|
33
|
+
Please improve your response.`),M=d,I;for(let B=0;B<R;B++){I=(await r.runAgent(c.handler,M)).output;let ce=typeof I=="string"?I:JSON.stringify(I),Se=await r.runAgent(c.evaluator,ce),ke=P(Se.output);if(ke.passed)break;B<R-1&&ke.feedback&&(M=y(d,ke.feedback,B));}f=c.extract?c.extract(I):I;break}case "race":{let c=g;f=(await r.runRace(c.handlers,d,{extract:c.extract,timeout:c.timeout})).result;break}case "debate":{let c=g;f=(await r.runDebate(c.handlers,c.evaluator,d,{maxRounds:c.maxRounds,extract:c.extract,parseJudgement:c.parseJudgement,signal:c.signal,timeout:c.timeout})).result;break}case "goal":{let c=g,R=typeof d=="string"?{input:d}:(()=>{try{return JSON.parse(d)}catch{return {input:d}}})();f=(await r.runGoal(c.nodes,R,c.when,{satisfaction:c.satisfaction,maxSteps:c.maxSteps,extract:c.extract,timeout:c.timeout,signal:c.signal,selectionStrategy:c.selectionStrategy,relaxation:c.relaxation,onStep:c.onStep,onStall:c.onStall})).result;break}default:throw new Error(`[Directive MultiAgent] composePatterns: unknown pattern type "${g.type}"`)}f!==void 0&&(d=typeof f=="string"?f:internals.safeStringify(f));}return f}}function Un(s,r){return Object.entries(s).filter(([,i])=>{let d=i.capabilities??[];return r.every(f=>d.includes(f))}).map(([i])=>i)}function Oo(s,r,i,d){let{priority:f,select:g}=d??{},c=[],R=0,P=-1;return {when:y=>{let M=r(y);return c=Un(s,M),R++,c.length>0},require:y=>{let M=R!==P&&c.length>0?(P=R,c):Un(s,r(y));if(M.length===0)throw new Error(`[Directive MultiAgent] No agent matches capabilities: ${r(y).join(", ")}`);return {type:"RUN_AGENT",agent:g?g(M,s):M[0],input:i(y)}},priority:f}}var Jn=false;function Po(s){let{when:r,agent:i,input:d,priority:f,context:g,options:c}=s;c&&!Jn&&(Jn=true,console.warn("[Directive MultiAgent] spawnOnCondition `options` is deprecated. Use top-level `priority` and `context` instead."));let R=f??c?.priority,P=g??c?.context;return {when:r,require:y=>({type:"RUN_AGENT",agent:i,input:d(y),context:P}),priority:R}}function Mo(s){let{handlers:r,evaluator:i,maxRounds:d,extract:f,parseJudgement:g,signal:c,timeout:R}=s;if(r.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(d!=null&&(d<1||!Number.isFinite(d)))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");return {type:"debate",handlers:r,evaluator:i,maxRounds:d,extract:f,parseJudgement:g,signal:c,timeout:R}}async function _o(s,r,i){return s.runDebate(r.handlers,r.evaluator,i,{maxRounds:r.maxRounds,extract:r.extract,parseJudgement:r.parseJudgement,signal:r.signal,timeout:r.timeout})}function jo(s,r,i){let d,f=0,g=-1;return {when:c=>{let P=c.__derived?.[s];return d=P,f++,r(P)},require:c=>{let R=f!==g?(g=f,d):c.__derived?.[s];return {type:"RUN_AGENT",agent:i.agent,input:i.input(R),context:i.context}},priority:i.priority}}function Io(s,r){let{agent:i,input:d,priority:f,context:g}=r;return {when:s,require:c=>({type:"RUN_AGENT",agent:i,input:d(c,0),context:g}),priority:f}}var Mr=adapterUtils.requirementGuard("RUN_AGENT");function Zo(s){let{runner:r,agents:i,patterns:d={},onHandoff:f,onHandoffComplete:g,maxHandoffHistory:c=1e3,debug:R=false,guardrails:P={},hooks:y={},memory:M,agentRetry:I,maxTokenBudget:B,plugins:he=[],onApprovalRequest:ce,autoApproveToolCalls:Se=true,approvalTimeoutMs:ke=3e5,constraints:Le={},resolvers:Wt={},circuitBreaker:Et,budgetWarningThreshold:at=.8,onBudgetWarning:zt,selfHealing:Z,checkpointStore:we,breakpoints:Be=[],onBreakpoint:Re,breakpointTimeoutMs:Ye=3e5,derive:Fe,scratchpad:Ie,tasks:zn={}}=s,ee=typeof R=="object"?true:!!R,Dt=5e3,W={...i},Y={...zn},xe=Object.create(null);for(let e of Object.keys(Y))xe[e]={status:"idle"};let $e=new Map;if(!Se&&!ce)throw new Error(`[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
|
|
34
|
+
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
35
|
+
- Provide an onApprovalRequest callback to handle approvals programmatically`);if(at<0||at>1)throw new Error(`[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${at}`);let Ot=new Set(["__coord","__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);for(let e of Object.keys(W))if(Ot.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);for(let[e,t]of Object.entries(Y)){if(!e||e.trim()!==e)throw new Error(`[Directive MultiAgent] Task ID must be a non-empty trimmed string, got "${e}"`);if(Ot.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(t.timeout!==void 0&&(!Number.isFinite(t.timeout)||t.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(t.maxConcurrent!==void 0&&(!Number.isFinite(t.maxConcurrent)||t.maxConcurrent<1||!Number.isInteger(t.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(t.retry){let{attempts:o,delayMs:n}=t.retry;if(!Number.isFinite(o)||o<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(n!==void 0&&(!Number.isFinite(n)||n<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}}for(let[e,t]of Object.entries(Y))$e.set(e,new Ee(t.maxConcurrent??1));for(let e of Object.keys(Y))if(W[e])throw new Error(`[Directive MultiAgent] ID "${e}" is registered as both an agent and a task. IDs must be unique across both registries.`);let kn=new Set([...Object.keys(W),...Object.keys(Y)]),Kt=[];for(let[e,t]of Object.entries(d)){let o=[];switch(t.type){case "parallel":o.push(...t.handlers);break;case "sequential":o.push(...t.handlers);break;case "supervisor":o.push(t.supervisor,...t.workers);break;case "dag":for(let n of Object.values(t.nodes))o.push(n.handler);break;case "reflect":o.push(t.handler,t.evaluator);break;case "race":o.push(...t.handlers);break;case "debate":o.push(...t.handlers,t.evaluator);break}for(let n of o)kn.has(n)||Kt.push({patternId:e,agentId:n});}if(Kt.length>0){let e=Kt.map(({patternId:t,agentId:o})=>` - Pattern "${t}" references unknown agent "${o}"`).join(`
|
|
36
|
+
`);throw new Error(`[Directive MultiAgent] Pattern validation failed. The following agents are not registered:
|
|
37
|
+
${e}
|
|
38
|
+
|
|
39
|
+
Registered agents: ${[...kn].join(", ")||"(none)"}`)}for(let[e,t]of Object.entries(d))t.type==="dag"&&hn(e,t.nodes);let O=null,wn=null;ee&&(O=chunkWOFIBIPW_cjs.a({getSnapshotId:()=>{try{return K.history?.currentIndex??null}catch{return null}},goToSnapshot:e=>{try{K.history?.goTo?.(e);}catch{}}}));let Ae=null,Ne=null;Z&&(Ae=chunkWOFIBIPW_cjs.c(Z.healthMonitor),Z.selectionStrategy==="round-robin"&&(Ne=new Map));function J(e,t){try{y[e]?.(t);}catch(o){ee&&console.debug(`[Directive MultiAgent] hooks.${e} threw:`,o);}}let Vt={__globalTokens:core.t.number(),__status:core.t.string(),__handoffs:core.t.array(),__handoffResults:core.t.array(),__budgetWarningFired:core.t.boolean()};Ie&&(Vt[chunkK64WKZ22_cjs.h]=core.t.object()),Fe&&Object.keys(Fe).length>0&&(Vt.__derived=core.t.object());let Kn={facts:Vt,derivations:{},events:{},requirements:{}},vn=Jt(Le);B&&(vn.__budgetLimit={priority:100,when:e=>adapterUtils.getBridgeFact(e,"__globalTokens")>B,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let Pt=Object.create(null);for(let[e,t]of Object.entries(Wt))Pt[e]={requirement:t.requirement,key:t.key,resolve:async(o,n)=>{let a=Ce(n.facts),u={facts:{...n.facts,...a},runAgent:async(p,h,T)=>r(p,h,T),signal:n.signal};return t.resolve(o,u)}};Pt.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async()=>{qe="paused",ee&&console.debug("[Directive MultiAgent] Budget exceeded \u2014 all agents paused");}},Pt.__runAgent={requirement:Mr,resolve:async e=>{await de(e.agent,e.input);}};let Vn=core.createModule("__coord",{schema:Kn,init:e=>{adapterUtils.setBridgeFact(e,"__globalTokens",0),adapterUtils.setBridgeFact(e,"__status","idle"),adapterUtils.setBridgeFact(e,"__handoffs",[]),adapterUtils.setBridgeFact(e,"__handoffResults",[]),adapterUtils.setBridgeFact(e,"__budgetWarningFired",false),Ie&&adapterUtils.setBridgeFact(e,chunkK64WKZ22_cjs.h,{...Ie.init});},constraints:vn,resolvers:Pt}),Yt=Object.create(null);Yt.__coord=Vn;for(let[e,t]of Object.entries(W)){let o=t.constraints?Jt(t.constraints):{},n=Object.create(null);if(t.resolvers)for(let[a,l]of Object.entries(t.resolvers))n[a]={requirement:l.requirement,key:l.key,resolve:async(u,p)=>{let h=Ce(p.facts),S={facts:{...p.facts,...h},runAgent:async(D,E,q)=>r(D,E,q),signal:p.signal};return l.resolve(u,S)}};Yt[e]=core.createModule(e,{schema:chunkK64WKZ22_cjs.i,init:a=>{Ue(a,{status:"idle",currentAgent:t.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(a,{pending:[],approved:[],rejected:[]}),mt(a,[]),ht(a,[]),ze(a,Ct());},constraints:o,resolvers:Object.keys(n).length>0?n:void 0});}let Yn=adapterUtils.createCallbackPlugin("directive-multi-agent-callbacks",{}),Rn=[...he,Yn];ee&&O&&(wn=chunkWOFIBIPW_cjs.b(O,()=>{try{return K.history?.currentIndex??null}catch{return null}}),Rn.push(wn));let K=core.createSystem({modules:Yt,plugins:Rn,history:ee?true:void 0});K.start();let Tn=500,Sn=200,Xe=0,qe="idle",Xt=false,Mt=0,Oe=null;function X(){if(Xt)throw new Error("[Directive MultiAgent] Orchestrator has been destroyed")}let Ge=new Map;for(let[e,t]of Object.entries(W))Ge.set(e,new Ee(t.maxConcurrent??1));let ve=Object.create(null);for(let e of Object.keys(W))ve[e]={status:"idle",runCount:0,totalTokens:0};let Xn=c,Pe=[],Ze=[],_t=0;function Zn(e){for(Ze.push(e);Ze.length>Xn;)Ze.shift();}let it=new Map,jt=new Set;function Qe(){for(let e of jt)e();}let ut=Object.create(null),It=new Set;function Qn(){let e=Object.create(null);for(let[n,a]of Object.entries(ve))e[n]={status:a.status,lastInput:a.lastInput,lastOutput:a.lastOutput,lastError:a.lastError,runCount:a.runCount,totalTokens:a.totalTokens};let t=ie("__coord"),o={agents:e,coordinator:{globalTokens:Xe,status:qe}};return Ie&&t&&(o.scratchpad=adapterUtils.getBridgeFact(t,chunkK64WKZ22_cjs.h)??{}),o}function Me(){if(!Fe)return;let e=Qn(),t=[],o=[];K.batch(()=>{for(let[a,l]of Object.entries(Fe))try{let u=l(e),p=ut[a],h=!mn(u,p);ut[a]=u,h&&t.push({derivId:a,newValue:u});}catch(u){o.push({derivId:a,derivError:u});}let n=ie("__coord");n&&adapterUtils.setBridgeFact(n,"__derived",{...ut});});for(let{derivId:n,newValue:a}of t){O&&O.record({type:"derivation_update",timestamp:Date.now(),snapshotId:null,derivationId:n,valueType:typeof a}),J("onDerivationUpdate",{derivationId:n,value:a,timestamp:Date.now()});for(let l of It)try{l(n,a);}catch{}}for(let{derivId:n,derivError:a}of o)ee&&console.warn(`[Directive MultiAgent] Derivation "${n}" threw:`,a),J("onDerivationError",{derivationId:n,error:a instanceof Error?a:new Error(String(a)),timestamp:Date.now()});}let $t=new Set,lt=new Map,Zt=Ie?{get(e){let t=ie("__coord"),o=adapterUtils.getBridgeFact(t,chunkK64WKZ22_cjs.h);if(!(o==null||!Object.hasOwn(o,e)))return o[e]},set(e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let o=ie("__coord"),n=[e];K.batch(()=>{let a=adapterUtils.getBridgeFact(o,chunkK64WKZ22_cjs.h)??{};adapterUtils.setBridgeFact(o,chunkK64WKZ22_cjs.h,{...a,[e]:t});}),Qt(n,e,t),Me();},has(e){let t=ie("__coord"),o=adapterUtils.getBridgeFact(t,chunkK64WKZ22_cjs.h);return o!=null&&Object.hasOwn(o,e)},delete(e){if(e==="__proto__"||e==="constructor"||e==="prototype")return;let t=ie("__coord");K.batch(()=>{let o=adapterUtils.getBridgeFact(t,chunkK64WKZ22_cjs.h)??{},{[e]:n,...a}=o;adapterUtils.setBridgeFact(t,chunkK64WKZ22_cjs.h,a);}),Qt([e],e,void 0),Me();},update(e){let t=Object.create(null);for(let a of Object.keys(e))a==="__proto__"||a==="constructor"||a==="prototype"||(t[a]=e[a]);let o=ie("__coord"),n=Object.keys(t);if(n.length!==0){K.batch(()=>{let a=adapterUtils.getBridgeFact(o,chunkK64WKZ22_cjs.h)??{};adapterUtils.setBridgeFact(o,chunkK64WKZ22_cjs.h,{...a,...t});});for(let[a,l]of Object.entries(t))Qt(n,a,l);Me();}},getAll(){let e=ie("__coord");return {...adapterUtils.getBridgeFact(e,chunkK64WKZ22_cjs.h)??{}}},subscribe(e,t){for(let o of e)lt.has(o)||lt.set(o,new Set),lt.get(o).add(t);return ()=>{for(let o of e)lt.get(o)?.delete(t);}},onChange(e){return $t.add(e),()=>{$t.delete(e);}},reset(){if(!Ie)return;let e=ie("__coord");K.batch(()=>{adapterUtils.setBridgeFact(e,chunkK64WKZ22_cjs.h,{...Ie.init});});}}:null;function Qt(e,t,o){let n=lt.get(t);if(n)for(let a of n)try{a(t,o);}catch{}for(let a of $t)try{a(t,o);}catch{}O&&t===e[e.length-1]&&O.record({type:"scratchpad_update",timestamp:Date.now(),snapshotId:null,keys:e}),t===e[e.length-1]&&J("onScratchpadUpdate",{keys:e,timestamp:Date.now()});}let ct=new Map,bt=new Map;function er(e,t,o){return new Promise((n,a)=>{let l=null,u=false,p,h=ie(e),T=()=>{u||(u=true,l&&(clearTimeout(l),l=null),p&&o&&o.removeEventListener("abort",p),S());},S=K.subscribe([`${e}.${chunkK64WKZ22_cjs.g}`],()=>{let D=We(h);if(D.resolved.includes(t)){T();let E=ct.get(t)??null;ct.delete(t),n(E);}else if(D.cancelled.includes(t)){T(),ct.delete(t);let E=bt.get(t);bt.delete(t),a(new Error(E?`[Directive MultiAgent] Breakpoint ${t} cancelled: ${E}`:`[Directive MultiAgent] Breakpoint ${t} cancelled`));}});if(o){if(p=()=>{T(),a(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${t}`));},o.aborted){T(),a(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${t}`));return}o.addEventListener("abort",p,{once:true});}l=setTimeout(()=>{T(),ct.delete(t),bt.delete(t),a(new Error(`[Directive MultiAgent] Breakpoint timeout: ${t} not resolved within ${Math.round(Ye/1e3)}s`));},Ye);})}async function et(e,t,o,n,a,l){if(Be.length===0)return {input:n,skip:false};let u=ie(t),p={agentId:t,agentName:o,input:n,state:Ce(u),breakpointType:e,patternId:l?.patternId,handoff:l?.handoff},h=Ln(Be,e,p);if(!h)return {input:n,skip:false};let T=Gn(),S={id:T,type:e,agentId:t,input:n,label:h.label,requestedAt:Date.now()};K.batch(()=>{let E=We(u);ze(u,{...E,pending:[...E.pending,S]});});try{Re?.(S);}catch{}try{y.onBreakpoint?.(S);}catch{}O&&O.record({type:"breakpoint_hit",timestamp:Date.now(),agentId:t,snapshotId:null,breakpointId:T,breakpointType:e,label:h.label});let D=await er(t,T,a);return O&&O.record({type:"breakpoint_resumed",timestamp:Date.now(),agentId:t,snapshotId:null,breakpointId:T,modified:!!D?.input,skipped:!!D?.skip}),{input:D?.input??n,skip:D?.skip??false}}function ie(e){return K.facts[e]}function tr(e,t,o){return new Promise((n,a)=>{let l=null,u=false,p,h=ie(e),T=()=>{u||(u=true,l&&(clearTimeout(l),l=null),p&&o&&o.removeEventListener("abort",p),S());},S=K.subscribe([`${e}.${chunkK64WKZ22_cjs.d}`],()=>{let D=gt(h);if(D.approved.includes(t))T(),n();else {let E=D.rejected.find(q=>q.id===t);if(E){T();let q=E.reason?`Request ${t} rejected: ${E.reason}`:`Request ${t} rejected`;a(new Error(q));}}});if(o){if(p=()=>{T(),a(new Error(`[Directive MultiAgent] Approval wait aborted for request ${t}`));},o.aborted){T(),a(new Error(`[Directive MultiAgent] Approval wait aborted for request ${t}`));return}o.addEventListener("abort",p,{once:true});}l=setTimeout(()=>{T();let D=Math.round(ke/1e3);a(new Error(`[Directive MultiAgent] Approval timeout: Request ${t} not resolved within ${D}s.
|
|
40
|
+
Solutions:
|
|
41
|
+
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
42
|
+
2. Set autoApproveToolCalls: true to auto-approve
|
|
43
|
+
3. Increase approvalTimeoutMs (current: ${ke}ms)
|
|
44
|
+
See: https://directive.run/docs/ai/multi-agent`));},ke);})}async function nr(e,t,o,n){let a=t.label??e,l=Date.now(),u=xe[e]??(xe[e]={status:"idle"});u.status="running",u.startTime=l,u.lastError=void 0;let p=o;if(Be.length>0)try{let _=await et("pre_agent_run",e,a,o,n?.signal);if(_.skip)return u.status="completed",{output:void 0,messages:[],toolCalls:[],totalTokens:0};p=_.input;}catch{}O&&O.record({type:"task_start",timestamp:l,agentId:e,snapshotId:null,taskId:e,label:a,description:t.description,inputLength:p.length,input:p.slice(0,Dt)});let h=n?.patternId??"";J("onTaskStart",{patternId:h,taskId:e,label:a,timestamp:l});let T=$e.get(e),S=()=>({taskId:e,memory:M?structuredClone(M.getContextMessages?.()??[]):[],scratchpad:Object.freeze(Zt?structuredClone(Zt.getAll()):{}),readAgentState:_=>{let N=ve[_];if(N)return Object.freeze({status:N.status,lastOutput:N.lastOutput!=null?String(N.lastOutput):void 0,lastError:N.lastError,totalTokens:N.totalTokens});let G=xe[_];if(G)return Object.freeze({status:G.status,lastOutput:G.lastOutput!=null?String(G.lastOutput):void 0,lastError:G.lastError,totalTokens:0})},reportProgress:(_,N)=>{let G=Number.isFinite(_)?Math.max(0,Math.min(100,_)):0;O&&O.record({type:"task_progress",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,percent:G,message:N}),J("onTaskProgress",{patternId:h,taskId:e,label:a,percent:G,message:N,timestamp:Date.now()});}}),D=t.retry?.attempts??1,E=t.retry?.backoff??"fixed",q=t.retry?.delayMs??1e3,k,x=async _=>{let N=S();return t.run(p,_,N)},F=null;try{T&&(F=await T.acquire());for(let N=1;N<=D;N++){let G=new AbortController,A,m=()=>G.abort();if(n?.signal){if(n.signal.aborted)throw new Error(`[Directive MultiAgent] Task "${e}" aborted before starting`);n.signal.addEventListener("abort",m,{once:!0});}t.timeout&&(A=setTimeout(()=>G.abort(),t.timeout));try{let v=await x(G.signal);A&&clearTimeout(A);let L=typeof v=="string"?v:internals.safeStringify(v),H=Date.now()-l;u.status="completed",u.lastOutput=L,u.durationMs=H,O&&O.record({type:"task_complete",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,durationMs:H,output:L}),J("onTaskComplete",{patternId:n?.patternId??"",taskId:e,label:a,durationMs:H,timestamp:Date.now()});try{let j=K.read("__coord");adapterUtils.setBridgeFact(j,"__lastTaskCompletion",{taskId:e,timestamp:Date.now()});}catch{}return {output:L,messages:[],toolCalls:[],totalTokens:0}}catch(v){if(A&&clearTimeout(A),k=v instanceof Error?v:new Error(String(v)),N<D){O&&O.record({type:"task_error",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,error:k.message,durationMs:Date.now()-l,attempt:N});let L=3e4,H=E==="exponential"?q*2**(N-1):q,j=Math.min(H,L);await new Promise((b,w)=>{let C=!1,U=()=>{C||(C=!0,clearTimeout($),w(new Error(`[Directive MultiAgent] Task "${e}" aborted during retry backoff`)));},$=setTimeout(()=>{C=!0,n?.signal?.removeEventListener("abort",U),b();},j);n?.signal&&n.signal.addEventListener("abort",U,{once:!0});});}}finally{n?.signal?.removeEventListener("abort",m);}}let _=Date.now()-l;throw u.status="error",u.lastError=k?.message,u.durationMs=_,O&&O.record({type:"task_error",timestamp:Date.now(),agentId:e,snapshotId:null,taskId:e,label:a,error:k?.message??"Unknown error",durationMs:_}),J("onTaskError",{patternId:h,taskId:e,label:a,error:k,durationMs:_,timestamp:Date.now()}),k}finally{F?.();}}async function de(e,t,o){if(X(),o?.signal?.aborted)throw new Error(`[Directive MultiAgent] Handler "${e}" run aborted before starting`);if(qe==="paused")throw new Error("[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)");Mt++;try{let n=Y[e];if(n)return await nr(e,n,t,o);let a=W[e];if(!a){let u=[...Object.keys(W),...Object.keys(Y)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${u}`)}let l=a.circuitBreaker??Et;return l?await l.execute(()=>xn(e,a,t,o)):await xn(e,a,t,o)}catch(n){if(Z&&!Y[e]&&!o?.__isReroute){let l=ur(e),u=lr(l);if(u){let p={originalAgent:e,reroutedTo:u,reason:n instanceof Error?n.message:String(n),timestamp:Date.now()};try{Z.onReroute?.(p);}catch{}return J("onReroute",p),O&&O.record({type:"reroute",timestamp:Date.now(),agentId:e,snapshotId:null,from:e,to:u,reason:n instanceof Error?n.message:String(n)}),de(u,t,{...o,__isReroute:true})}if(Z.degradation==="fallback-response"&&Z.fallbackResponse!==void 0)return {output:Z.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}let a=ve[e];throw a&&a.status!=="error"&&(a.status="error",a.lastError=n instanceof Error?n.message:String(n)),n}finally{Mt--,Qe();}}async function xn(e,t,o,n){let a=Date.now(),l=ie(e),u=ve[e],p=t.agent,h=o,T=Ge.get(e);if(!T){let k=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${e}". Registered agents: ${k}`)}let S=await T.acquire(n?.signal),D=new AbortController,E,q;try{t.timeout&&(E=setTimeout(()=>D.abort(),t.timeout)),n?.signal&&(q=()=>D.abort(),n.signal.addEventListener("abort",q,{once:!0}));let k=t.memory??M;if(k){let b=k.getContextMessages();if(b.length>0){let w=b.map(C=>`${C.role}: ${C.content}`).join(`
|
|
45
|
+
`);p={...p,instructions:(p.instructions??"")+`
|
|
46
|
+
|
|
47
|
+
Conversation context:
|
|
48
|
+
`+w};}}if(s.metaContext){let b=cn(K.inspect());b&&(p={...p,instructions:(p.instructions??"")+`
|
|
49
|
+
|
|
50
|
+
`+b});}{let b=await et("pre_input_guardrails",e,p.name,h,n?.signal);if(b.skip)return u.status="completed",Qe(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=b.input;}let F=[...P.input??[],...t.guardrails?.input??[]].map((b,w)=>Ht(b,w,"input"));for(let b of F){let{name:w}=b,C={agentName:p.name,input:h,facts:Ce(l)},U=Date.now(),$=await Ut(b,{input:h,agentName:p.name},C);if(J("onGuardrailCheck",{agentId:e,guardrailName:w,guardrailType:"input",passed:$.passed,reason:$.reason,durationMs:Date.now()-U,timestamp:Date.now()}),!$.passed)throw new chunkK64WKZ22_cjs.a({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${w}" failed: ${$.reason}`,guardrailName:w,guardrailType:"input",userMessage:$.reason??"Input validation failed",agentName:p.name,input:h});$.transformed!==void 0&&(h=$.transformed);}J("onAgentStart",{agentId:e,agentName:p.name,input:h,timestamp:a}),O&&O.record({type:"agent_start",timestamp:Date.now(),agentId:e,snapshotId:null,inputLength:h.length,..."description"in p&&p.description?{description:String(p.description)}:{},...p.instructions?{instructions:p.instructions.slice(0,Dt)}:{},input:h.slice(0,Dt)}),K.batch(()=>{let b=St(l);Ue(l,{...b,status:"running",input:h,startedAt:Date.now()});}),u.status="running",u.lastInput=h;{let b=await et("pre_agent_run",e,p.name,h,n?.signal);if(b.skip)return u.status="completed",Qe(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};h=b.input;}let _=r,N=n?.outputSchema!==void 0?n.outputSchema:t.outputSchema;N&&(_=chunkFFRWQNK7_cjs.b(r,{schema:N,maxRetries:n?.maxSchemaRetries??t.maxSchemaRetries??2,extractJson:t.extractJson,schemaDescription:t.schemaDescription}));let G=t.retry??I,A=await qn(_,p,h,{...t.runOptions,...n,signal:D.signal,onMessage:b=>{let C=[...dn(l),b];mt(l,C.length>Tn?C.slice(-Tn):C),n?.onMessage?.(b);},onToolCall:async b=>{let C=[...P.toolCall??[],...t.guardrails?.toolCall??[]].map((ue,te)=>Ht(ue,te,"toolCall"));for(let ue of C){let{name:te}=ue,re={agentName:p.name,input:h,facts:Ce(l)},tt=Date.now(),pe=await Ut(ue,{toolCall:b,agentName:p.name,input:h},re);if(J("onGuardrailCheck",{agentId:e,guardrailName:te,guardrailType:"toolCall",passed:pe.passed,reason:pe.reason,durationMs:Date.now()-tt,timestamp:Date.now()}),!pe.passed)throw new chunkK64WKZ22_cjs.a({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${te}" failed: ${pe.reason}`,guardrailName:te,guardrailType:"toolCall",userMessage:pe.reason??"Tool call blocked",data:{toolCall:b},agentName:p.name,input:h})}if(!Se){let ue=`tool-${e}-${b.id}`,te={id:ue,type:"tool_call",agentName:p.name,description:`Tool call: ${b.name}`,data:b,requestedAt:Date.now()};it.set(ue,e),K.batch(()=>{let re=gt(l);Je(l,{...re,pending:[...re.pending,te]});}),ce?.(te),await tr(e,ue,n?.signal);}let $=[...pn(l),b];ht(l,$.length>Sn?$.slice(-Sn):$),n?.onToolCall?.(b);}},G?{...G,onRetry:(b,w,C)=>{G.onRetry?.(b,w,C),J("onAgentRetry",{agentId:e,agentName:p.name,input:h,attempt:b,error:w,delayMs:C,timestamp:Date.now()});}}:void 0);if((await et("pre_output_guardrails",e,p.name,h,n?.signal)).skip)return u.status="completed",Qe(),A;let v=[...P.output??[],...t.guardrails?.output??[]].map((b,w)=>Ht(b,w,"output"));for(let b of v){let{name:w}=b,C={agentName:p.name,input:h,facts:Ce(l)},U=Date.now(),$=await Ut(b,{output:A.output,agentName:p.name,input:h,messages:A.messages},C);if(J("onGuardrailCheck",{agentId:e,guardrailName:w,guardrailType:"output",passed:$.passed,reason:$.reason,durationMs:Date.now()-U,timestamp:Date.now()}),!$.passed)throw new chunkK64WKZ22_cjs.a({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${w}" failed: ${$.reason}`,guardrailName:w,guardrailType:"output",userMessage:$.reason??"Output validation failed",agentName:p.name,input:h});$.transformed!==void 0&&(A.output=$.transformed);}K.batch(()=>{let b=St(l);Ue(l,{...b,status:"completed",output:A.output,tokenUsage:b.tokenUsage+A.totalTokens,turnCount:b.turnCount+A.messages.length,completedAt:Date.now()});}),u.status="completed",u.lastOutput=A.output,u.runCount++,u.totalTokens+=A.totalTokens,Qe();let L=ie("__coord"),H=!1,j=0;if(K.batch(()=>{let w=adapterUtils.getBridgeFact(L,"__globalTokens")+A.totalTokens;if(Xe=w,adapterUtils.setBridgeFact(L,"__globalTokens",w),B&&zt){j=w/B;let C=adapterUtils.getBridgeFact(L,"__budgetWarningFired");j>=at&&!C&&(adapterUtils.setBridgeFact(L,"__budgetWarningFired",!0),H=!0);}}),H)try{zt({currentTokens:Xe,maxBudget:B,percentage:j});}catch(b){ee&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",b);}if(k&&A.messages.length>0)try{let C=k.getContextMessages().some(U=>U.role==="user"&&U.content===h)?A.messages.filter(U=>!(U.role==="user"&&U.content===h)):A.messages;k.addMessages(C);}catch(b){ee&&console.debug("[Directive MultiAgent] Memory addMessages failed:",b);}if(J("onAgentComplete",{agentId:e,agentName:p.name,input:h,output:A.output,tokenUsage:A.totalTokens,durationMs:Date.now()-a,timestamp:Date.now()}),O){let b=typeof A.output=="string"?A.output:internals.safeStringify(A.output);O.record({type:"agent_complete",timestamp:Date.now(),agentId:e,snapshotId:null,outputLength:b.length,totalTokens:A.totalTokens,inputTokens:A.tokenUsage?.inputTokens??0,outputTokens:A.tokenUsage?.outputTokens??0,durationMs:Date.now()-a,modelId:t.agent.model??void 0,output:b.slice(0,Dt)});}return Ae&&Ae.recordSuccess(e,Date.now()-a),Me(),await et("post_run",e,p.name,h,n?.signal),A}catch(k){if(u.status="error",u.lastError=k instanceof Error?k.message:String(k),Qe(),K.batch(()=>{let x=St(l);Ue(l,{...x,status:"error",error:k instanceof Error?k.message:String(k),completedAt:Date.now()});}),J("onAgentError",{agentId:e,agentName:p.name,input:h,error:k instanceof Error?k:new Error(String(k)),durationMs:Date.now()-a,timestamp:Date.now()}),O){let x={type:"agent_error",timestamp:Date.now(),agentId:e,snapshotId:null,errorMessage:k instanceof Error?k.message:String(k),durationMs:Date.now()-a};chunkK64WKZ22_cjs.b(k)&&(x.guardrailName=k.guardrailName,x.guardrailType=k.guardrailType,x.errorCode=k.code),O.record(x);}throw Ae&&Ae.recordFailure(e,Date.now()-a,k instanceof Error?k:new Error(String(k))),Me(),k}finally{E&&clearTimeout(E),q&&n?.signal&&n.signal.removeEventListener("abort",q),S();}}function en(e,t,o={}){if(X(),Y[e]){let A=[],m=[],v=false,L=C=>{if(v)return;let U=m.shift();U?U(C):A.push(C);},H=()=>{v=true;for(let C of m)C(null);m.length=0;},j=new AbortController,b;o.signal&&(o.signal.aborted?j.abort():(b=()=>j.abort(),o.signal.addEventListener("abort",b,{once:true})));let w=de(e,t,{signal:j.signal}).then(C=>{let U=typeof C.output=="string"?C.output:internals.safeStringify(C.output);return L({type:"token",data:U,tokenCount:0}),L({type:"done",totalTokens:0,duration:0,droppedTokens:0}),H(),C},C=>{throw L({type:"error",error:C}),H(),C}).finally(()=>{b&&o.signal&&o.signal.removeEventListener("abort",b);});return w.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let C=A.shift();if(C){if(yield C,C.type==="done"||C.type==="error")return}else {if(v)return;{let U=await new Promise($=>m.push($));if(!U||(yield U,U.type==="done"||U.type==="error"))return}}}}},result:w,abort:()=>{j.abort();}}}if(!W[e]){let A=[...Object.keys(W),...Object.keys(Y)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${e}". Registered handlers: ${A}`)}let l=1e4,u=1e5,p=new AbortController,h=[],T=[],S=false,D=Date.now(),E=0,q="",k;o.signal&&(k=()=>p.abort(),o.signal.addEventListener("abort",k,{once:true}));let x=()=>{k&&o.signal&&o.signal.removeEventListener("abort",k);},F=A=>{if(S)return;let m=T.shift();m?m(A):(h.length>=l&&h.shift(),h.push(A));},_=()=>{S=true,x();for(let A of T)A(null);T.length=0;},N=(async()=>{F({type:"progress",phase:"starting",message:"Running input guardrails"});try{let A=await de(e,t,{signal:p.signal,onMessage:v=>{if(F({type:"message",message:v}),v.role==="assistant"&&v.content){let L=Math.ceil(v.content.length/4);E+=L,q+=v.content,q.length>u&&(q=q.slice(-u)),F({type:"token",data:v.content,tokenCount:E});}},onToolCall:async v=>{F({type:"tool_start",tool:v.name,toolCallId:v.id,arguments:v.arguments}),v.result&&F({type:"tool_end",tool:v.name,toolCallId:v.id,result:v.result});}}),m=Date.now()-D;return F({type:"done",totalTokens:A.totalTokens,duration:m,droppedTokens:0}),_(),A}catch(A){throw A instanceof chunkK64WKZ22_cjs.a&&F({type:"guardrail_triggered",guardrailName:A.guardrailName,reason:A.message,partialOutput:q,stopped:true}),F({type:"error",error:A instanceof Error?A:new Error(String(A))}),_(),A}})(),G={[Symbol.asyncIterator](){return {async next(){return h.length>0?{done:false,value:h.shift()}:S?{done:true,value:void 0}:new Promise(A=>{T.push(m=>{A(m===null?{done:true,value:void 0}:{done:false,value:m});});})}}}};return N.catch(()=>{}),{stream:G,result:N,abort:()=>{p.abort(),_();}}}async function rr(e,t,o){let n=Date.now();o&&J("onPatternStart",{patternId:o,patternType:"parallel",input:t,timestamp:n});let a=new AbortController,l;e.timeout&&(l=setTimeout(()=>a.abort(),e.timeout));let u;try{let p=e.handlers.map(S=>de(S,t,{signal:a.signal,patternId:o}).catch(D=>{if(e.minSuccess===void 0)throw D;return null})),h=await Promise.all(p),T=h.filter(S=>S!==null);if(e.minSuccess!==void 0&&T.length<e.minSuccess){let S=h.length-T.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${T.length}/${e.handlers.length} agents succeeded (minimum required: ${e.minSuccess}, failed: ${S})`)}return e.merge(T)}catch(p){throw u=p instanceof Error?p:new Error(String(p)),p}finally{l&&clearTimeout(l),o&&J("onPatternComplete",{patternId:o,patternType:"parallel",durationMs:Date.now()-n,timestamp:Date.now(),error:u});}}async function dt(e,t,o){let n=ot(e);if(o?.when)try{if(!o.when({step:n,patternType:e.type,facts:e.type==="goal"?e.facts:void 0,satisfaction:e.type==="goal"?e.lastSatisfaction:void 0}))return null}catch{return null}try{let a={version:1,id:e.id,createdAt:e.createdAt,label:e.label,systemExport:JSON.stringify(e),timelineExport:null,localState:{type:"multi",globalTokenCount:0,globalStatus:"idle",agentStates:{},handoffCounter:0,pendingHandoffs:[],handoffResults:[],roundRobinCounters:null},memoryExport:null,orchestratorType:"multi",metadata:{patternType:e.type}};return await t.save(a),O&&O.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:e.id,patternType:e.type,step:n}),J("onCheckpointSave",{checkpointId:e.id,patternType:e.type,step:n,timestamp:Date.now()}),e.id}catch(a){let l=a instanceof Error?a:new Error(String(a));return console.error(`[Directive MultiAgent] ${e.type}: checkpoint save failed:`,l),J("onCheckpointError",{patternType:e.type,step:n,error:l,timestamp:Date.now()}),null}}async function tn(e,t,o,n){let a=Date.now(),l=o??"__inline_sequential";o&&J("onPatternStart",{patternId:o,patternType:"sequential",input:t,timestamp:a});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"sequential",S=n?.currentInput??t,D,E=n?.results?[...n.results]:[],q=n?.step??0,k;if(n&&E.length>0){let x=E[E.length-1];D={output:x.output,totalTokens:x.totalTokens,messages:[],toolCalls:[]};}try{for(let x=q;x<e.handlers.length;x++){let F=e.handlers[x];{let _=await et("pre_pattern_step",F,W[F]?.agent.name??F,S,void 0,{patternId:o});if(_.skip)continue;S=_.input;}try{if(D=await de(F,S,{patternId:o}),E.push({agentId:F,output:D.output,totalTokens:D.totalTokens}),x<e.handlers.length-1&&(e.transform?S=e.transform(D.output,F,x):S=typeof D.output=="string"?D.output:internals.safeStringify(D.output)),u&&p&&x>q&&(x-q)%h===0){let _=x<e.handlers.length-1?S:t;await dt({type:"sequential",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:step-${x+1}`,patternId:l,stepsTotal:e.handlers.length,step:x+1,currentInput:_,results:[...E]},p,u);}}catch(_){if(!e.continueOnError)throw _}}if(!D)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return e.extract?e.extract(D.output):D.output}catch(x){throw k=x instanceof Error?x:new Error(String(x)),x}finally{o&&J("onPatternComplete",{patternId:o,patternType:"sequential",durationMs:Date.now()-a,timestamp:Date.now(),error:k});}}async function nn(e,t,o,n){let a=Date.now(),l=o??"__inline_supervisor";o&&J("onPatternStart",{patternId:o,patternType:"supervisor",input:t,timestamp:a});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"supervisor",S=[],D=n?.workerResults?[...n.workerResults]:[],E=e.maxRounds??5;if(E<1||!Number.isFinite(E))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let q;if(n)for(let x of n.workerResults)S.push({output:x.output,totalTokens:x.totalTokens,messages:[],toolCalls:[]});let k=n?.round??0;try{let x;n?x={output:n.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:x=await de(e.supervisor,t);let F=n?.currentInput??t;for(let _=k;_<E;_++){let N=x.output,G;if(typeof N=="string")try{let m=N.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();G=JSON.parse(m);}catch{try{let m=N.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),v=chunkFFRWQNK7_cjs.a(m);if(v&&typeof v=="object"&&"action"in v)G=v;else throw new Error("extracted value missing 'action' property")}catch{throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned unparseable output (round ${_+1}). Expected JSON with { action, worker?, workerInput? } but got: ${N.slice(0,200)}`)}}else if(N&&typeof N=="object"&&"action"in N)G=N;else throw new Error(`[Directive MultiAgent] Supervisor "${e.supervisor}" returned invalid output (round ${_+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(G.action==="complete"||!G.worker)break;if(!e.workers.includes(G.worker)){let m=e.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${G.worker}". Available workers: ${m}`)}let A=await de(G.worker,G.workerInput??"",{patternId:o});S.push(A),D.push({output:A.output,totalTokens:A.totalTokens}),F=`Worker ${G.worker} completed with result: ${internals.safeStringify(A.output)}`,x=await de(e.supervisor,F,{patternId:o}),u&&p&&_>k&&(_-k)%h===0&&await dt({type:"supervisor",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:round-${_+1}`,patternId:l,stepsTotal:e.maxRounds??10,round:_+1,supervisorOutput:x.output,workerResults:[...D],currentInput:F},p,u);}return e.extract?e.extract(x.output,S):x.output}catch(x){throw q=x instanceof Error?x:new Error(String(x)),x}finally{o&&J("onPatternComplete",{patternId:o,patternType:"supervisor",durationMs:Date.now()-a,timestamp:Date.now(),error:q});}}async function rn(e,t,o,n){let a=Date.now(),l=o??"__inline_dag";o&&J("onPatternStart",{patternId:o,patternType:"dag",input:t,timestamp:a});let u=e.checkpoint,p=u?.store??we,h=u?.everyN??5,T=u?.labelPrefix??"dag",S=n?.completedCount??0,D=0,E=Promise.resolve(),q=Object.keys(e.nodes).length,k={input:n?.input??t,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};for(let m of Object.keys(e.nodes))k.statuses[m]="pending";if(n){for(let[m,v]of Object.entries(n.statuses))k.statuses[m]=v;for(let[m,v]of Object.entries(n.outputs))k.outputs[m]=v;for(let[m,v]of Object.entries(n.errors))k.errors[m]=v;for(let[m,v]of Object.entries(n.nodeResults))k.results[m]={output:v.output,totalTokens:v.totalTokens,messages:[],toolCalls:[]};}let x=e.onNodeError??"fail",F=e.maxConcurrent??Number.POSITIVE_INFINITY,_=new AbortController,N,G;e.timeout&&(N=setTimeout(()=>_.abort(),e.timeout));try{let L=function(){for(let[j,b]of Object.entries(e.nodes)){if(k.statuses[j]!=="pending")continue;let w=x==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if((b.deps??[]).every(U=>w.has(k.statuses[U]))){if(x==="skip-downstream"&&(b.deps??[]).some($=>k.statuses[$]==="error"||k.statuses[$]==="skipped")){k.statuses[j]="skipped",O&&O.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"skipped",deps:b.deps??[]}),J("onDagNodeSkipped",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",reason:"upstream dependency errored",timestamp:Date.now()});continue}if(b.when)try{if(!b.when(k)){k.statuses[j]="skipped",O&&O.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"skipped",deps:b.deps??[]}),J("onDagNodeSkipped",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",reason:"when() returned false",timestamp:Date.now()});continue}}catch{k.statuses[j]="skipped";continue}k.statuses[j]="ready";}}};var A=L;if(!n)for(let[j,b]of Object.entries(e.nodes))(!b.deps||b.deps.length===0)&&(k.statuses[j]="ready");let m=new Set,v=0;async function H(j,b){let w=Date.now();k.statuses[j]="running",O&&O.record({type:"dag_node_update",timestamp:w,snapshotId:null,nodeId:j,status:"running",deps:b.deps??[]}),J("onDagNodeStart",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",timestamp:w});let C;if(b.transform)C=b.transform(k);else if(b.deps&&b.deps.length>0){let te=Object.create(null);for(let re of b.deps)k.outputs[re]!==void 0&&(te[re]=k.outputs[re]);C=JSON.stringify(te);}else C=t;let U=new AbortController,$;b.timeout&&($=setTimeout(()=>U.abort(),b.timeout));let ue=()=>U.abort();_.signal.addEventListener("abort",ue,{once:!0});try{let te=await de(b.handler,C,{signal:U.signal,patternId:l});if(k.outputs[j]=te.output,k.results[j]=te,k.statuses[j]="completed",O&&O.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"completed",deps:b.deps??[]}),J("onDagNodeComplete",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",durationMs:Date.now()-w,timestamp:Date.now()}),S++,u&&p&&S>D&&S-D>=h){D=S;let re=Object.create(null);for(let[pe,De]of Object.entries(k.results))re[pe]={output:De.output,totalTokens:De.totalTokens};let tt={type:"dag",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${T}:node-${S}`,patternId:l,stepsTotal:q,statuses:{...k.statuses},outputs:{...k.outputs},errors:{...k.errors},completedCount:S,nodeResults:re,input:k.input};E=E.then(()=>dt(tt,p,u)),await E;}}catch(te){if(k.statuses[j]="error",k.errors[j]=te instanceof Error?te.message:String(te),O&&O.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:j,status:"error",deps:b.deps??[]}),J("onDagNodeError",{patternId:l,nodeId:j,agentId:b.handler,nodeType:Y[b.handler]?"task":"agent",error:te instanceof Error?te:new Error(String(te)),durationMs:Date.now()-w,timestamp:Date.now()}),x==="fail")throw _.abort(),te}finally{$&&clearTimeout($),_.signal.removeEventListener("abort",ue),v--;}}for(;!_.signal.aborted;){L();let j=Object.entries(e.nodes).filter(([w])=>k.statuses[w]==="ready").sort(([,w],[,C])=>(C.priority??0)-(w.priority??0));for(let[w,C]of j){if(v>=F)break;v++;let U=H(w,C).finally(()=>{m.delete(U);});m.add(U);}if(!Object.values(k.statuses).some(w=>w==="pending"||w==="running"||w==="ready"))break;if(m.size>0)await Promise.race(m);else break}return m.size>0&&await Promise.allSettled(m),await e.merge(k)}catch(m){throw G=m instanceof Error?m:new Error(String(m)),m}finally{N&&clearTimeout(N),o&&J("onPatternComplete",{patternId:o,patternType:"dag",durationMs:Date.now()-a,timestamp:Date.now(),error:G});}}async function Nt(e,t,o,n){let a=Date.now(),l=o??"__inline_reflect",u=e.maxIterations??2;if(u<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");ee&&u>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let p=e.signal,h,T;if(e.timeout&&!p){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),p=m.signal;}else if(e.timeout&&p){let m=new AbortController;h=setTimeout(()=>m.abort(),e.timeout),T=()=>m.abort(),p.addEventListener("abort",T,{once:true}),p=m.signal;}let S=e.parseEvaluation??(m=>{if(typeof m=="string")try{return JSON.parse(m)}catch{return {passed:false,feedback:`Evaluator returned unparseable output: ${m.slice(0,200)}`}}return m&&typeof m=="object"&&"passed"in m?m:{passed:false,feedback:"Evaluator returned invalid format"}}),D=e.buildRetryInput??((m,v,L)=>`${m}
|
|
51
|
+
|
|
52
|
+
Feedback on your previous response:
|
|
53
|
+
${v}
|
|
54
|
+
|
|
55
|
+
Please improve your response.`);o&&J("onPatternStart",{patternId:l,patternType:"reflect",input:t,timestamp:a});let E=e.checkpoint,q=E?.store??we,k=E?.everyN??5,x=E?.labelPrefix??"reflect",F,_,N=n?.history?[...n.history]:[],G=n?.producerOutputs?[...n.producerOutputs]:[],A=n?.iteration??0;n?.lastProducerOutput!=null&&(_={output:n.lastProducerOutput,totalTokens:0,messages:[],toolCalls:[]});try{let m=n?.effectiveInput??t;for(let v=A;v<u;v++){if(p?.aborted){if(_)return Oe=N,e.extract?e.extract(_.output):_.output;throw new DOMException("Reflect pattern aborted","AbortError")}let L=Date.now(),H=await de(e.handler,m,{signal:p,patternId:o});_=H;let j=typeof H.output=="string"?H.output:internals.safeStringify(H.output);if(p?.aborted)return Oe=N,e.extract?e.extract(H.output):H.output;let b=await de(e.evaluator,j,{signal:p,patternId:o}),w;try{w=S(b.output);}catch($){w={passed:!1,feedback:`Evaluation parse error: ${$ instanceof Error?$.message:String($)}`};}if(!w.passed&&e.threshold!=null&&w.score!=null){let $=typeof e.threshold=="function"?e.threshold(v):e.threshold;w.score>=$&&(w={...w,passed:!0});}let C=Date.now()-L;G.push({output:H.output,score:w.score});let U={iteration:v,passed:w.passed,score:w.score,feedback:w.feedback,durationMs:C,producerTokens:H.totalTokens??0,evaluatorTokens:b.totalTokens??0};if(N.push(U),e.onIteration)try{e.onIteration(U);}catch($){ee&&console.warn("[Directive MultiAgent] onIteration callback threw:",$);}if(O&&O.record({type:"reflection_iteration",timestamp:Date.now(),snapshotId:null,iteration:v,passed:w.passed,score:w.score,durationMs:C,producerTokens:H.totalTokens,evaluatorTokens:b.totalTokens}),w.passed)return Oe=N,e.extract?e.extract(H.output):H.output;if(v<u-1&&w.feedback)try{m=D(t,w.feedback,v);}catch($){ee&&console.warn("[Directive MultiAgent] buildRetryInput threw, using default format:",$),m=`${t}
|
|
56
|
+
|
|
57
|
+
Feedback on your previous response:
|
|
58
|
+
${w.feedback}
|
|
59
|
+
|
|
60
|
+
Please improve your response.`;}E&&q&&v>=A&&(v-A+1)%k===0&&await dt({type:"reflect",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${x}:iter-${v+1}`,patternId:l,stepsTotal:u,iteration:v+1,effectiveInput:m,history:[...N],producerOutputs:[...G],lastProducerOutput:H.output},q,E);}if(Oe=N,e.onExhausted==="throw")throw new xt({iterations:u,history:N.map(v=>({passed:v.passed,feedback:v.feedback,score:v.score})),lastResult:_,totalTokens:_.totalTokens??0});if(e.onExhausted==="accept-best"&&G.length>0){!G.some(b=>b.score!=null)&&ee&&console.warn("[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.");let L=G.length-1,H=Number.NEGATIVE_INFINITY;for(let b=0;b<G.length;b++){let w=G[b].score;w!=null&&w>H&&(H=w,L=b);}let j=G[L].output;return e.extract?e.extract(j):j}return e.extract?e.extract(_.output):_.output}catch(m){throw Oe=N,F=m instanceof Error?m:new Error(String(m)),m}finally{h&&clearTimeout(h),T&&e.signal&&e.signal.removeEventListener("abort",T),o&&J("onPatternComplete",{patternId:l,patternType:"reflect",durationMs:Date.now()-a,timestamp:Date.now(),error:F});}}async function An(e,t,o){if(e.handlers.length===0)throw new Error("[Directive MultiAgent] Race pattern requires at least one agent");let n=e.minSuccess??1;if(!Number.isInteger(n)||n<1)throw new Error("[Directive MultiAgent] Race pattern minSuccess must be a positive integer");if(n>e.handlers.length)throw new Error(`[Directive MultiAgent] Race pattern minSuccess (${n}) exceeds agent count (${e.handlers.length})`);for(let E of e.handlers)if(!W[E]&&!Y[E])throw new Error(`[Directive MultiAgent] Race: unknown handler "${E}"`);let a=Date.now(),l=o??"__inline_race",u=new AbortController,p,h;e.signal&&(e.signal.aborted?u.abort():(h=()=>u.abort(),e.signal.addEventListener("abort",h,{once:true}))),o&&J("onPatternStart",{patternId:l,patternType:"race",input:t,timestamp:a}),O&&O.record({type:"race_start",timestamp:a,snapshotId:null,patternId:l,agents:e.handlers}),e.timeout&&(p=setTimeout(()=>u.abort(),e.timeout));let T,S=Object.create(null),D=[...e.handlers];try{let E=e.handlers.map(v=>({agentId:v,promise:de(v,t,{signal:u.signal,patternId:o}).then(L=>({agentId:v,result:L}))})),q=E.map(v=>v.promise.catch(()=>{})),k=[],x=await new Promise((v,L)=>{let H=0,j=!1;for(let b of E)b.promise.then(w=>{H++,!j&&(k.push(w),k.length>=n&&(j=!0,u.abort(),v([...k])));}).catch(w=>{if(S[b.agentId]=w instanceof Error?w.message:String(w),H++,j)return;let C=Object.keys(S).length,U=k.length+(E.length-H);H===E.length&&C===E.length?(j=!0,L(new Error(`[Directive MultiAgent] Race: all ${E.length} agents failed.
|
|
61
|
+
`+Object.entries(S).map(([$,ue])=>` - ${$}: ${ue}`).join(`
|
|
62
|
+
`)))):U<n&&(j=!0,L(new Error(`[Directive MultiAgent] Race: cannot reach minSuccess (${n}). ${C} agent(s) failed.
|
|
63
|
+
`+Object.entries(S).map(([$,ue])=>` - ${$}: ${ue}`).join(`
|
|
64
|
+
`))));});});await Promise.all(q).catch(()=>{});let F=x[0],_=F.agentId,N=new Set(x.map(v=>v.agentId)),G=D.filter(v=>!N.has(v)&&!(v in S));O&&(O.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:l,winnerId:_,durationMs:Date.now()-a}),G.length>0&&O.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:l,cancelledIds:G,reason:"winner_found"}));let A=e.extract?e.extract(F.result):F.result.output,m=n>1?x.map(v=>({agentId:v.agentId,result:e.extract?e.extract(v.result):v.result.output})):void 0;return {winnerId:_,result:A,allResults:m}}catch(E){throw T=E instanceof Error?E:new Error(String(E)),O&&O.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:l,cancelledIds:D,reason:u.signal.aborted?"timeout":"all_failed"}),E}finally{p&&clearTimeout(p),h&&e.signal&&e.signal.removeEventListener("abort",h),o&&J("onPatternComplete",{patternId:l,patternType:"race",durationMs:Date.now()-a,timestamp:Date.now(),error:T});}}async function qt(e,t,o,n){let{handlers:a,evaluator:l,maxRounds:u=2,extract:p,parseJudgement:h}=e;if(a.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(u<1||!Number.isFinite(u))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let T=e.signal,S,D;if(e.timeout&&!T){let w=new AbortController;S=setTimeout(()=>w.abort(),e.timeout),T=w.signal;}else if(e.timeout&&T){let w=new AbortController;S=setTimeout(()=>w.abort(),e.timeout),D=()=>w.abort(),T.addEventListener("abort",D,{once:true}),T=w.signal;}let q=h??(w=>{if(typeof w=="string")try{let C=JSON.parse(w);return C&&typeof C=="object"&&typeof C.winnerId=="string"?C:(ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:a[0]})}catch{return ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:a[0]}}return w&&typeof w=="object"&&"winnerId"in w&&typeof w.winnerId=="string"?w:(ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:a[0]})}),k=n?.rounds?[...n.rounds]:[],x=n?.currentInput??t,F=n?.lastWinnerId??a[0],_=n?.lastWinnerOutput??void 0,N=n?.round??0,G=e.checkpoint,A=G?.store??we,m=G?.everyN??5,v=G?.labelPrefix??"debate",L=o??"__inline_debate",H=Date.now(),j=n?.tokensConsumed??0;o&&J("onPatternStart",{patternId:L,patternType:"debate",input:t,timestamp:H});let b;try{for(let C=N;C<u&&!T?.aborted;C++){let U=a.map(async pe=>{let De=await de(pe,x,{signal:T,patternId:L});return j+=De.totalTokens,{agentId:pe,output:De.output}}),$=await Promise.all(U);if(T?.aborted)break;let ue=JSON.stringify({round:C+1,totalRounds:u,proposals:$.map(pe=>({agentId:pe.agentId,proposal:pe.output}))}),te=await de(l,ue,{signal:T,patternId:L});j+=te.totalTokens;let re=q(te.output);if(a.includes(re.winnerId)||(re.winnerId=a[0]),k.push({proposals:$,judgement:re}),O&&O.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:L,round:C+1,totalRounds:u,winnerId:re.winnerId,score:re.score,agentCount:a.length}),F=re.winnerId,_=$.find(pe=>pe.agentId===re.winnerId)?.output??$[0].output,G&&A&&C>N&&(C-N)%m===0){let pe={type:"debate",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${v}:round-${C+1}`,patternId:L,stepsTotal:u,round:C+1,currentInput:x,rounds:[...k],lastWinnerId:F,lastWinnerOutput:_,tokensConsumed:j};await dt(pe,A,G);}C<u-1&&re.feedback&&(x=`Previous round feedback: ${re.feedback}
|
|
65
|
+
|
|
66
|
+
Original task: ${t}`);}if(k.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let w=p?p(_):_;return {winnerId:F,result:w,rounds:k}}catch(w){throw b=w instanceof Error?w:new Error(String(w)),w}finally{S&&clearTimeout(S),D&&e.signal&&e.signal.removeEventListener("abort",D),o&&J("onPatternComplete",{patternId:L,patternType:"debate",durationMs:Date.now()-H,timestamp:Date.now(),error:b});}}let or=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function pt(e,t){for(let o of Object.keys(t))or.has(o)||(e[o]=t[o]);}function sr(e,t){let o=Object.create(null);for(let[h,T]of Object.entries(t))for(let S of T.produces)o[S]||(o[S]=[]),o[S].push(h);let n=Object.keys(t),a=Object.create(null),l=Object.create(null);for(let h of n)a[h]=0,l[h]=[];for(let[h,T]of Object.entries(t))for(let S of T.requires??[]){let D=o[S];if(D)for(let E of D)E!==h&&(l[E].push(h),a[h]=(a[h]??0)+1);}let u=[];for(let h of n)a[h]===0&&u.push(h);let p=0;for(;u.length>0;){let h=u.shift();p++;for(let T of l[h]??[])a[T]--,a[T]===0&&u.push(T);}if(p!==n.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${p}/${n.length} nodes.`)}function ar(e,t){let o=Object.create(null);for(let[n,a]of Object.entries(t))for(let l of a.produces)o[l]||(o[l]=[]),o[l].push(n);for(let[n,a]of Object.entries(o))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${n}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function be(e,...t){if(e)try{return e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}async function ir(e,...t){if(e)try{return await e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}function on(e,t,o){let n=t.slice(-3),a=n.length>0?n.reduce((p,h)=>p+h.satisfactionDelta,0)/n.length:0,l=null;a>0&&e<1&&(l=Math.ceil((1-e)/a));let u=false;if(t.length>=6){let p=t.slice(-3),h=t.slice(-6,-3),T=p.reduce((D,E)=>D+E.satisfactionDelta,0)/3,S=h.reduce((D,E)=>D+E.satisfactionDelta,0)/3;u=T<S*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:l,decelerating:u}}function yt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Gt(e,t,o,n){let{nodes:a,when:l,satisfaction:u,maxSteps:p=50,extract:h,selectionStrategy:T,relaxation:S,onStep:D,onStall:E}=e,q=Object.create(null);for(let[Q,ne]of Object.entries(a))q[Q]={...ne};if(Object.keys(q).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let x=o??"__goal";for(let[Q,ne]of Object.entries(q))if(!W[ne.handler]&&!Y[ne.handler])throw new Error(`[Directive MultiAgent] goal node "${Q}" references unregistered handler "${ne.handler}"`);sr(x,q),ar(x,q);for(let[Q,ne]of Object.entries(q))ne.extractOutput||console.warn(`[Directive MultiAgent] goal node "${Q}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let F=e.signal,_,N,G=e.timeout??3e5;if(G&&!F){let Q=new AbortController;_=setTimeout(()=>Q.abort(),G),F=Q.signal;}else if(G&&F){let Q=new AbortController;_=setTimeout(()=>Q.abort(),G),N=()=>Q.abort(),F.addEventListener("abort",N,{once:true}),F=Q.signal;}let A=Date.now();if(O){let Q=Object.values(q).map(ne=>ne.handler);O.record({type:"pattern_start",timestamp:A,snapshotId:null,patternId:x,patternType:"goal",handlers:Q,taskIds:Q.filter(ne=>Y[ne]!=null)});}J("onPatternStart",{patternId:x,patternType:"goal",input:typeof t=="string"?t:JSON.stringify(t),timestamp:A});let m=Object.create(null);n?pt(m,n.facts):typeof t=="string"?m.input=t:pt(m,t);let v=n?[...n.executionOrder]:[],L=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.nodeOutputs))L[Q]={output:ne.output,totalTokens:ne.totalTokens};let H=n?[...n.stepMetrics]:[],j=n?[...n.relaxations]:[],b=new Set(n?.completedNodes??[]),w=new Map(n?Object.entries(n.failedNodes).map(([Q,ne])=>[Q,ne]):[]),C=new Map(n?Object.entries(n.nodeInputHashes):[]),U=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.agentMetrics))U[Q]={runs:ne.runs,avgSatisfactionDelta:ne.runs>0?ne.totalDelta/ne.runs:0,tokens:ne.tokens,totalDelta:ne.totalDelta};let $=n?.stallSteps??0,ue=n?.appliedRelaxationTiers??0,te=n?.lastSatisfaction??0,re,tt=false,pe=n?.step??0,De=e.checkpoint,dr=De?.everyN??5,En=De?.store??we,pr=De?.labelPrefix??"goal",Dn,fr=3;try{for(let ae=pe;ae<p;ae++){if(be(l,m)===!0){tt=!0;let V=Date.now()-A,z=Object.values(L).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!0,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j}}if(F?.aborted){let V=Date.now()-A,z=Object.values(L).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j,error:"Aborted or timed out"}}let nt=[];for(let[V,z]of Object.entries(q)){if((w.get(V)??0)>=fr)continue;let oe=z.requires??[];if(oe.every(le=>m[le]!=null)){if(b.has(V)){if(!z.allowRerun)continue;let le=JSON.stringify(oe.map(ye=>m[ye]));if(C.get(V)===le)continue}nt.push(V);}}let He=nt;if(T&&nt.length>0){let V=u?be(u,m)??0:be(l,m)===!0?1:0,z=yt(V),oe=on(z,H,ae),fe=Object.create(null);for(let[ye,se]of Object.entries(U))fe[ye]={runs:se.runs,avgSatisfactionDelta:se.runs>0?se.totalDelta/se.runs:0,tokens:se.tokens};let le=T.select(nt,fe,oe);He=le&&le.length>0?le:nt;}if(He.sort((V,z)=>(q[z].priority??0)-(q[V].priority??0)),be(D,ae,{...m},He),He.length===0){$++;let V=!1;if(S)for(let z=ue;z<S.length;z++){let oe=S[z],fe=oe.afterStallSteps??3;if($>=fe){let le=oe.strategy;switch(le.type){case "allow_rerun":for(let ye of le.nodes)b.delete(ye),C.delete(ye);break;case "alternative_nodes":for(let ye of le.nodes){let se=`__relaxation_${z}_${ye.handler}`;q[se]={...ye};}break;case "inject_facts":pt(m,le.facts);break;case "accept_partial":{let ye=Date.now()-A,se=Object.values(L).reduce((ge,_e)=>ge+_e.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:se,durationMs:ye,stepMetrics:H,relaxations:j,error:`Accepted partial result via relaxation tier "${oe.label}"`}}case "custom":{let ye=be(u,m)??0,se={step:ae,facts:{...m},metrics:on(yt(ye),H,ae),completedNodes:new Set(b),failedNodes:new Map(w)};await ir(le.apply,se);break}}j.push({step:ae,tierIndex:z,label:oe.label,strategy:le.type}),ue=z+1,$=0,V=!0;break}}if(!V){let z=be(u,m)??0,oe=on(yt(z),H,ae);if(be(E,ae,oe),!S||ue>=S.length){let fe=Date.now()-A,le=Object.values(L).reduce((ye,se)=>ye+se.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:le,durationMs:fe,stepMetrics:H,relaxations:j,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}$=0;let gr=Date.now(),mr=u?be(u,m)??0:be(l,m)===!0?1:0,hr=yt(mr),On=0,ft=[],br=He.map(async V=>{let z=q[V],oe=z.requires??[],fe=JSON.stringify(oe.map(se=>m[se]));C.set(V,fe);let le,ye=be(z.buildInput,m);if(ye!=null)le=ye;else {let se=Object.create(null);for(let ge of oe)m[ge]!=null&&(se[ge]=m[ge]);Object.keys(se).length>0?le=JSON.stringify(se):m.input!=null?le=String(m.input):le=JSON.stringify(m);}try{let se=await de(z.handler,le,{signal:F??void 0,patternId:x});if(L[V]=se,v.push(V),b.add(V),w.delete(V),z.extractOutput){let ge=be(z.extractOutput,se);ge&&(pt(m,ge),ft.push(...Object.keys(ge)));}else {let ge=se.output;if(ge&&typeof ge=="object")pt(m,ge),ft.push(...Object.keys(ge));else if(typeof ge=="string")try{let _e=JSON.parse(ge);if(_e&&typeof _e=="object"&&!Array.isArray(_e))pt(m,_e),ft.push(...Object.keys(_e));else for(let Pn of z.produces)m[Pn]=ge,ft.push(Pn);}catch{for(let _e of z.produces)m[_e]=ge,ft.push(_e);}}return On+=se.totalTokens,{nodeId:V,success:!0}}catch(se){let ge=(w.get(V)??0)+1;return w.set(V,ge),{nodeId:V,success:!1,error:se}}});await Promise.allSettled(br);let yr=u?be(u,m)??0:be(l,m)===!0?1:0,Lt=yt(yr),Bt=Lt-hr;if(H.push({step:ae,durationMs:Date.now()-gr,nodesRun:[...He],factsProduced:ft,satisfaction:Lt,satisfactionDelta:Bt,tokensConsumed:On}),O)for(let V of He){let z=q[V];O.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:z.handler,step:ae,nodeId:V,satisfaction:Lt,satisfactionDelta:Bt});}for(let V of He){let z=q[V];U[z.handler]||(U[z.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let oe=U[z.handler];oe.runs++,oe.totalDelta+=Bt,oe.tokens+=L[V]?.totalTokens??0;}if(te=Lt,Bt<=0?$++:$=0,De&&En&&ae>pe&&(ae-pe)%dr===0){let V={type:"goal",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${pr}:step-${ae}`,patternId:x,stepsTotal:p,step:ae+1,facts:structuredClone(m),completedNodes:[...b],failedNodes:Object.fromEntries(w),nodeInputHashes:Object.fromEntries(C),nodeOutputs:Object.fromEntries(Object.entries(L).map(([oe,fe])=>[oe,{output:fe.output,totalTokens:fe.totalTokens}])),executionOrder:[...v],stepMetrics:[...H],relaxations:[...j],appliedRelaxationTiers:ue,stallSteps:$,lastSatisfaction:te,agentMetrics:Object.fromEntries(Object.entries(U).map(([oe,fe])=>[oe,{runs:fe.runs,totalDelta:fe.totalDelta,tokens:fe.tokens}]))},z=await dt(V,En,De);z&&(Dn=z);}}let Q=Date.now()-A,ne=Object.values(L).reduce((ae,nt)=>ae+nt.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:p,totalTokens:ne,durationMs:Q,stepMetrics:H,relaxations:j,error:`Max steps (${p}) exhausted without achieving goal`}}catch(Q){throw re=Q instanceof Error?Q:new Error(String(Q)),Q}finally{if(_!=null&&clearTimeout(_),N&&e.signal&&e.signal.removeEventListener("abort",N),O){let Q=Object.values(L).reduce((ne,ae)=>ne+ae.totalTokens,0);O.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:x,patternType:"goal",durationMs:Date.now()-A,achieved:tt,stepMetrics:H,relaxations:j,totalTokens:Q,...re?{error:re.message}:{}});}J("onPatternComplete",{patternId:x,patternType:"goal",durationMs:Date.now()-A,timestamp:Date.now(),error:re});}}function ur(e){if(!Z)return [];let t=[],o=new Set;if(o.add(e),Z.equivalencyGroups){for(let n of Object.values(Z.equivalencyGroups))if(n.includes(e))for(let a of n)!o.has(a)&&W[a]&&(t.push(a),o.add(a));}if(Z.useCapabilities!==false){let n=W[e];if(n?.capabilities&&n.capabilities.length>0)for(let[a,l]of Object.entries(W)){if(o.has(a))continue;let u=l.capabilities??[];n.capabilities.every(p=>u.includes(p))&&(t.push(a),o.add(a));}}if(Ae){let n=Z.healthThreshold??30;return t.filter(a=>Ae.getHealthScore(a)>n)}return t}function lr(e){if(e.length===0)return null;if(!Z||!Ae)return e[0]??null;if(Z.selectionStrategy==="round-robin"&&Ne){let n=[...e].sort().join(","),a=Ne.get(n)??0,l=e[a%e.length];return Ne.set(n,a+1),l}let t=e[0],o=Ae.getHealthScore(t);for(let n=1;n<e.length;n++){let a=Ae.getHealthScore(e[n]);a>o&&(t=e[n],o=a);}return t}function cr(e){switch(e.type){case "parallel":return e.handlers;case "sequential":return e.handlers;case "supervisor":return [e.supervisor,...e.workers];case "dag":return Object.values(e.nodes).map(t=>t.handler);case "reflect":return [e.handler,e.evaluator];case "race":return e.handlers;case "debate":return [...e.handlers,e.evaluator];case "goal":return Object.values(e.nodes).map(t=>t.handler);default:return []}}let Cn={system:K,get facts(){return K.facts},get timeline(){return O},get healthMonitor(){return Ae},get derived(){return Object.freeze({...ut})},onDerivedChange(e){return It.add(e),()=>{It.delete(e);}},get scratchpad(){return Zt},runAgent:de,runAgentStream:en,async runPattern(e,t){X();let o=d[e];if(!o){let l=Object.keys(d).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${l}`)}let n=Date.now();if(O){let l=cr(o);O.record({type:"pattern_start",timestamp:n,snapshotId:null,patternId:e,patternType:o.type,handlers:l,taskIds:l.filter(u=>Y[u]!=null)});}let a;try{switch(o.type){case "parallel":return await rr(o,t,e);case "sequential":return await tn(o,t,e);case "supervisor":return await nn(o,t,e);case "dag":return await rn(o,t,e);case "reflect":return await Nt(o,t,e);case "race":return (await An(o,t,e)).result;case "debate":return (await qt(o,t,e)).result;case "goal":return (await Gt(o,t,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${o.type}`)}}catch(l){throw a=l instanceof Error?l:new Error(String(l)),l}finally{O&&O.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:o.type,durationMs:Date.now()-n,...a?{error:a.message}:{}});}},async runParallel(e,t,o,n){X();let a=Array.isArray(t)?t:e.map(()=>t);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));try{let p=e.map((S,D)=>de(S,a[D],{signal:l.signal}).catch(E=>{if(n?.minSuccess!==void 0)return null;throw E})),h=await Promise.all(p),T=h.filter(S=>S!==null);if(n?.minSuccess!==void 0&&T.length<n.minSuccess){let S=h.length-T.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${T.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess}, failed: ${S})`)}return o(T)}finally{u&&clearTimeout(u);}},async runSequential(e,t,o){X();let n=[],a=t;for(let l=0;l<e.length;l++){let u=e[l],p=await de(u,a);n.push(p),l<e.length-1&&(o?.transform?a=o.transform(p.output,u,l):a=typeof p.output=="string"?p.output:internals.safeStringify(p.output));}return n},async handoff(e,t,o,n){if(X(),!W[e]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${u}`)}if(!W[t]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${t}" not found. Registered: ${u}`)}{let u=await et("pre_handoff",e,W[e].agent.name,o,void 0,{handoff:{fromAgent:e,toAgent:t}});if(u.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};o=u.input;}let a={id:`handoff-${++_t}`,fromAgent:e,toAgent:t,input:o,context:n,requestedAt:Date.now()};Pe.push(a);try{f?.(a);}catch(u){ee&&console.debug("[Directive MultiAgent] onHandoff threw:",u);}J("onHandoff",a),O&&O.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t});let l=W[t].memory??M;if(l&&n)try{let u=Object.entries(n).map(([p,h])=>`${p}: ${internals.safeStringify(h)}`).join(", ");l.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${u}`}]);}catch(u){ee&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",u);}try{let u=await de(t,o),p={request:a,result:u,completedAt:Date.now()};Zn(p);try{g?.(p);}catch(T){ee&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",T);}J("onHandoffComplete",p),O&&O.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t,durationMs:p.completedAt-a.requestedAt});let h=Pe.indexOf(a);return h>=0&&Pe.splice(h,1),u}catch(u){let p=Pe.indexOf(a);throw p>=0&&Pe.splice(p,1),u}},approve(e){X();let t=it.get(e);if(t){it.delete(e);let o=ie(t);K.batch(()=>{let n=gt(o),a=200,l=[...n.approved,e];Je(o,{...n,pending:n.pending.filter(u=>u.id!==e),approved:l.length>a?l.slice(-a):l});});return}ee&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,t){X();let o=it.get(e);if(o){it.delete(e);let n=ie(o);K.batch(()=>{let a=gt(n);t&&ee&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${t}`);let l={id:e,reason:t,rejectedAt:Date.now()},u=200,p=[...a.rejected,l];Je(n,{...a,pending:a.pending.filter(h=>h.id!==e),rejected:p.length>u?p.slice(-u):p});});return}ee&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){X(),qe="paused",ee&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){X(),qe==="paused"&&(qe="idle",ee&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let t=ve[e];return t?{...t}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(ve).map(([e,t])=>[e,{...t}]))},getPendingHandoffs(){return [...Pe]},get totalTokens(){return Xe},waitForIdle(e){let t=()=>Mt===0&&Object.values(ve).every(o=>o.status==="idle"||o.status==="completed"||o.status==="error");return t()?Promise.resolve():new Promise((o,n)=>{let a=null,l=()=>{jt.delete(u),a&&clearTimeout(a);},u=()=>{t()&&(l(),o());};jt.add(u),e!==void 0&&(a=setTimeout(()=>{l(),n(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,t,o){return de(e,t,o)},runStream(e,t,o){return en(e,t,o)},registerAgent(e,t){if(X(),Ot.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(Y[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let o=t.constraints?Jt(t.constraints):{},n=Object.create(null);if(t.resolvers)for(let[l,u]of Object.entries(t.resolvers))n[l]={requirement:u.requirement,key:u.key,resolve:async(p,h)=>{let T=Ce(h.facts),D={facts:{...h.facts,...T},runAgent:async(E,q,k)=>r(E,q,k),signal:h.signal};return u.resolve(p,D)}};let a=core.createModule(e,{schema:chunkK64WKZ22_cjs.i,init:l=>{Ue(l,{status:"idle",currentAgent:t.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(l,{pending:[],approved:[],rejected:[]}),mt(l,[]),ht(l,[]),ze(l,Ct());},constraints:o,resolvers:Object.keys(n).length>0?n:void 0});K.registerModule(e,a),W[e]=t,Ge.set(e,new Ee(t.maxConcurrent??1)),ve[e]={status:"idle",runCount:0,totalTokens:0},ee&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${t.agent.name})`),Me();},unregisterAgent(e){if(X(),!W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(ve[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,l]of Object.entries(d)){let u;switch(l.type){case "supervisor":u=[l.supervisor,...l.workers];break;case "dag":u=Object.values(l.nodes).map(p=>p.handler);break;case "reflect":u=[l.handler,l.evaluator];break;case "parallel":case "sequential":case "race":u=l.handlers;break;case "debate":u=[...l.handlers,l.evaluator];break;default:u=[];}u.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let o=Ge.get(e);o&&(o.drain(),Ge.delete(e));let n=ie(e);n&&K.batch(()=>{Ue(n,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(n,{pending:[],approved:[],rejected:[]}),mt(n,[]),ht(n,[]),ze(n,Ct());}),delete W[e],delete ve[e],ee&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),Me();},getAgentIds(){return Object.keys(W)},registerTask(e,t){if(X(),Ot.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(!e||typeof e!="string"||e.trim()!==e||e.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(W[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(Y[e])throw new Error(`[Directive MultiAgent] Task "${e}" is already registered`);if(t.timeout!==void 0&&(!Number.isFinite(t.timeout)||t.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(t.maxConcurrent!==void 0&&(!Number.isFinite(t.maxConcurrent)||t.maxConcurrent<1||!Number.isInteger(t.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(t.retry){let{attempts:o,delayMs:n}=t.retry;if(!Number.isFinite(o)||o<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(n!==void 0&&(!Number.isFinite(n)||n<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}Y[e]=t,xe[e]={status:"idle"},$e.set(e,new Ee(t.maxConcurrent??1)),ee&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${t.label??e})`);},unregisterTask(e){if(X(),!Y[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(xe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let o=$e.get(e);o&&(o.drain(),$e.delete(e)),delete Y[e],delete xe[e],ee&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(Y)},getTaskRegistry(){let e=Object.create(null);for(let[t,o]of Object.entries(Y))e[t]={label:o.label,description:o.description};return e},getTaskState(e){let t=xe[e];return t?Object.freeze(structuredClone(t)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[t,o]of Object.entries(xe))e[t]=Object.freeze(structuredClone(o));return e},getNodeIds(){return [...Object.keys(W),...Object.keys(Y)]},reset(){X();for(let t of Object.keys(W)){let o=W[t]?.maxConcurrent??1;ve[t]={status:"idle",runCount:0,totalTokens:0};let n=Ge.get(t);n&&n.drain(),Ge.set(t,new Ee(o));let a=ie(t);K.batch(()=>{Ue(a,{status:"idle",currentAgent:W[t].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(a,{pending:[],approved:[],rejected:[]}),mt(a,[]),ht(a,[]),ze(a,Ct());});}for(let t of Object.keys(Y)){xe[t]={status:"idle"};let o=$e.get(t);o&&o.drain(),$e.set(t,new Ee(Y[t].maxConcurrent??1));}ct.clear(),bt.clear(),it.clear(),Pe.length=0,Ze.length=0,_t=0,Xe=0,qe="idle",Mt=0,Qe();let e=ie("__coord");K.batch(()=>{adapterUtils.setBridgeFact(e,"__globalTokens",0),adapterUtils.setBridgeFact(e,"__status","idle"),adapterUtils.setBridgeFact(e,"__handoffs",[]),adapterUtils.setBridgeFact(e,"__handoffResults",[]),adapterUtils.setBridgeFact(e,"__budgetWarningFired",false),Ie&&adapterUtils.setBridgeFact(e,chunkK64WKZ22_cjs.h,{...Ie.init});}),Ae&&Ae.reset(),Oe=null;for(let t of Object.keys(ut))delete ut[t];Me();},async checkpoint(e){X();for(let[o,n]of Object.entries(ve))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${o}" is running`);for(let[o,n]of Object.entries(xe))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${o}" is running`);if(!K.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let t={version:1,id:Ke(),createdAt:new Date().toISOString(),label:e?.label,systemExport:K.history.export(),timelineExport:O?.export()??null,localState:{type:"multi",globalTokenCount:Xe,globalStatus:qe,agentStates:Object.fromEntries(Object.entries(ve).map(([o,n])=>[o,structuredClone(n)])),handoffCounter:_t,pendingHandoffs:[...Pe],handoffResults:[...Ze],roundRobinCounters:Ne?Object.fromEntries(Ne):null,taskStates:Object.fromEntries(Object.entries(xe).map(([o,n])=>[o,{lastOutput:n.lastOutput!=null?String(n.lastOutput):void 0,lastError:n.lastError}]))},memoryExport:M?M.export?.()??null:null,orchestratorType:"multi"};return we&&await we.save(t),t},restore(e,t){if(X(),!fn(e))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(e.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${e.orchestratorType}"`);if(!K.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");K.history.import(e.systemExport),t?.restoreTimeline!==false&&e.timelineExport&&O&&O.import(e.timelineExport),e.memoryExport&&M&&M.import&&M.import(e.memoryExport);let o=e.localState;Xe=o.globalTokenCount,qe=o.globalStatus,_t=o.handoffCounter,Pe.length=0,Pe.push(...o.pendingHandoffs),Ze.length=0,Ze.push(...o.handoffResults);for(let[n,a]of Object.entries(o.agentStates))ve[n]&&(ve[n]={...a});if(o.roundRobinCounters&&Ne){Ne.clear();for(let[n,a]of Object.entries(o.roundRobinCounters))Ne.set(n,a);}for(let[n,a]of Object.entries(W)){let l=Ge.get(n);l&&l.drain(),Ge.set(n,new Ee(a.maxConcurrent??1));}if(o.taskStates){for(let[n,a]of Object.entries(o.taskStates)){if(!Y[n])throw new Error(`[Directive MultiAgent] Checkpoint references task "${n}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);xe[n]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[n,a]of Object.entries(Y)){let l=$e.get(n);l&&l.drain(),$e.set(n,new Ee(a.maxConcurrent??1));}}Me();},runParallelStream(e,t,o,n){X();let a=Array.isArray(t)?t:e.map(()=>t);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));let p=e.map((k,x)=>{let F=en(k,a[x],{signal:l.signal});return {agentId:k,streamResult:F}}),h=p.map(({agentId:k,streamResult:x})=>({agentId:k,stream:x.stream})),{stream:T,getDroppedCount:S}=Hn(h),D;n?.signal&&(D=()=>l.abort(),n.signal.addEventListener("abort",D,{once:true}));let E=Promise.allSettled(p.map(({streamResult:k})=>k.result)).then(k=>{u&&clearTimeout(u),D&&n?.signal&&n.signal.removeEventListener("abort",D);let x=[];for(let F of k)F.status==="fulfilled"&&x.push(F.value);if(n?.minSuccess!==void 0&&x.length<n.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${x.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess})`);return x}),q=E.then(k=>o(k));return E.catch(()=>{}),q.catch(()=>{}),{stream:T,results:E,merge:q,getDroppedCount:S,abort:()=>{l.abort(),D&&n?.signal&&n.signal.removeEventListener("abort",D);for(let{streamResult:k}of p)k.abort();}}},async runRace(e,t,o){X();let n={type:"race",handlers:e,extract:o?.extract,timeout:o?.timeout,minSuccess:o?.minSuccess,signal:o?.signal};return An(n,t,"__imperative_race")},async runReflect(e,t,o,n){X();let a={type:"reflect",handler:e,evaluator:t,maxIterations:n?.maxIterations,parseEvaluation:n?.parseEvaluation,buildRetryInput:n?.buildRetryInput,extract:n?.extract,onExhausted:n?.onExhausted,onIteration:n?.onIteration,signal:n?.signal,timeout:n?.timeout,threshold:n?.threshold},l=await Nt(a,o,"__imperative_reflect"),u=Oe?[...Oe]:[],p=n?.maxIterations??2,h=u.length>0&&!u[u.length-1].passed&&u.length>=p;return {result:l,iterations:u.length,history:u,exhausted:h}},async runDebate(e,t,o,n){return X(),qt({handlers:e,evaluator:t,maxRounds:n?.maxRounds,extract:n?.extract,parseJudgement:n?.parseJudgement,signal:n?.signal,timeout:n?.timeout},o,"__imperative_debate")},async runGoal(e,t,o,n){return X(),Gt({nodes:e,when:o,satisfaction:n?.satisfaction,maxSteps:n?.maxSteps,extract:n?.extract,timeout:n?.timeout,signal:n?.signal,selectionStrategy:n?.selectionStrategy,relaxation:n?.relaxation,onStep:n?.onStep,onStall:n?.onStall,checkpoint:n?.checkpoint},t,"__imperative_goal")},async resumeGoal(e,t){if(X(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Gt(t,{},e.patternId,e)},async resumeSequential(e,t){if(X(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return tn(t,e.currentInput,e.patternId,e)},async resumeSupervisor(e,t,o){if(X(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let n=o?.input??e.currentInput;return nn(t,n,e.patternId,e)},async resumeReflect(e,t,o){if(X(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let n=o?.input??e.effectiveInput;return Nt(t,n,e.patternId,e)},async resumeDebate(e,t){if(X(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return qt(t,e.currentInput,e.patternId,e)},async resumeDag(e,t,o){if(X(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let n=o?.input??e.input;return rn(t,n,e.patternId,e)},async replay(e,t,o){if(X(),!we)throw new Error("[Directive MultiAgent] No checkpoint store configured");let n=await we.load(e);if(!n)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let p=JSON.parse(n.systemExport);if(!p||typeof p!="object")throw new Error("Parsed checkpoint state is not an object");let h=new Set(["__proto__","constructor","prototype"]);for(let S of Object.keys(p))if(h.has(S))throw new Error(`Checkpoint state contains blocked key: ${S}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal"]).has(p.type))throw new Error(`Unknown checkpoint pattern type: ${p.type}`);if(p.version!==1)throw new Error(`Unsupported checkpoint version: ${p.version}`);a=p;}catch(p){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${p instanceof Error?p.message:String(p)}`)}let l=ot(a),u=o?.input??("currentInput"in a?a.currentInput:"");switch(O&&O.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:l}),a.type){case "sequential":return tn(t,u,a.patternId,a);case "supervisor":return nn(t,u,a.patternId,a);case "reflect":return Nt(t,u,a.patternId,a);case "debate":return qt(t,u,a.patternId,a);case "dag":return rn(t,u,a.patternId,a);case "goal":return Gt(t,a.facts,a.patternId,a)}},resumeBreakpoint(e,t){X(),t&&ct.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.resolved,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),resolved:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,t){X(),t&&bt.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.cancelled,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),cancelled:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let t of Object.keys(W)){let o=ie(t),n=We(o);e.push(...n.pending);}return e},getLastReflectionHistory(){return Oe?[...Oe]:null},destroy(){Xt||(Cn.reset(),$t.clear(),lt.clear(),It.clear(),jt.clear(),Xt=true,K.destroy());}};return Me(),Cn}exports.$=mo;exports.A=Vr;exports.B=Yr;exports.C=Xr;exports.D=Zr;exports.E=Qr;exports.F=eo;exports.G=to;exports.H=no;exports.I=ro;exports.J=Hn;exports.K=xt;exports.L=Br;exports.M=mn;exports.N=Ee;exports.O=ot;exports.P=xr;exports.Q=Cr;exports.R=Er;exports.S=hn;exports.T=ao;exports.U=io;exports.V=uo;exports.W=lo;exports.X=co;exports.Y=po;exports.Z=fo;exports._=go;exports.a=cn;exports.aa=ho;exports.b=jr;exports.ba=yo;exports.c=Ht;exports.ca=ko;exports.d=Ut;exports.da=To;exports.e=qn;exports.ea=So;exports.f=St;exports.fa=xo;exports.g=Ue;exports.ga=Ao;exports.h=gt;exports.ha=Co;exports.i=Je;exports.ia=Eo;exports.j=dn;exports.ja=Do;exports.k=mt;exports.ka=Un;exports.l=pn;exports.la=Oo;exports.m=ht;exports.ma=Po;exports.n=We;exports.na=Mo;exports.o=ze;exports.oa=_o;exports.p=Ce;exports.pa=jo;exports.q=Jt;exports.qa=Io;exports.r=Gr;exports.ra=Zo;exports.s=At;exports.t=Gn;exports.u=Ln;exports.v=Ct;exports.w=Ke;exports.x=fn;exports.y=Fn;exports.z=Kr;//# sourceMappingURL=chunk-A22KLB23.cjs.map
|
|
67
|
+
//# sourceMappingURL=chunk-A22KLB23.cjs.map
|