@directive-run/ai 0.8.5 → 0.8.7
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/README.md +7 -0
- package/dist/anthropic.cjs +2 -3
- package/dist/anthropic.cjs.map +1 -1
- package/dist/anthropic.d.cts +1 -1
- package/dist/anthropic.d.ts +1 -1
- package/dist/anthropic.js +2 -3
- package/dist/anthropic.js.map +1 -1
- package/dist/chunk-265ZKXYE.js +3 -0
- package/dist/chunk-265ZKXYE.js.map +1 -0
- package/dist/chunk-7EJPXKDP.js +50 -0
- package/dist/chunk-7EJPXKDP.js.map +1 -0
- package/dist/chunk-B4ATEGA2.cjs +50 -0
- package/dist/chunk-B4ATEGA2.cjs.map +1 -0
- package/dist/chunk-MNYANBNX.js +14 -0
- package/dist/chunk-MNYANBNX.js.map +1 -0
- package/dist/chunk-QXMXSHYS.cjs +3 -0
- package/dist/chunk-QXMXSHYS.cjs.map +1 -0
- package/dist/chunk-W6MVJKWN.cjs +3 -0
- package/dist/chunk-W6MVJKWN.cjs.map +1 -0
- package/dist/chunk-W6WZBQER.js +3 -0
- package/dist/chunk-W6WZBQER.js.map +1 -0
- package/dist/chunk-WCJFIC22.cjs +14 -0
- package/dist/chunk-WCJFIC22.cjs.map +1 -0
- package/dist/gemini.cjs +2 -3
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts +1 -1
- package/dist/gemini.d.ts +1 -1
- package/dist/gemini.js +2 -3
- package/dist/gemini.js.map +1 -1
- package/dist/index.cjs +30 -89
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +194 -27
- package/dist/index.d.ts +194 -27
- package/dist/index.js +30 -89
- package/dist/index.js.map +1 -1
- package/dist/multi-agent-orchestrator-FEHVHZXA.js +2 -0
- package/dist/multi-agent-orchestrator-FEHVHZXA.js.map +1 -0
- package/dist/multi-agent-orchestrator-QWJNM4EZ.cjs +2 -0
- package/dist/multi-agent-orchestrator-QWJNM4EZ.cjs.map +1 -0
- package/dist/ollama.cjs +2 -2
- package/dist/ollama.cjs.map +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 +2 -3
- package/dist/openai.cjs.map +1 -1
- package/dist/openai.d.cts +2 -2
- package/dist/openai.d.ts +2 -2
- package/dist/openai.js +2 -3
- package/dist/openai.js.map +1 -1
- package/dist/{multi-agent-orchestrator-DHp8gHXi.d.ts → orchestrator-types-DryFJyW9.d.ts} +6 -142
- package/dist/{multi-agent-orchestrator-C3VKkLzg.d.cts → orchestrator-types-tATJCBi5.d.cts} +6 -142
- package/dist/{semantic-cache-F0psCRuz.d.cts → semantic-cache-nBpQqILc.d.cts} +5 -5
- package/dist/{semantic-cache-F0psCRuz.d.ts → semantic-cache-nBpQqILc.d.ts} +5 -5
- package/dist/testing.cjs +1 -48
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +2 -2
- package/dist/testing.d.ts +2 -2
- package/dist/testing.js +1 -48
- package/dist/testing.js.map +1 -1
- package/dist/{types-BM-6xZf_.d.cts → types-CRmwFnVk.d.cts} +1 -1
- package/dist/{types-BM-6xZf_.d.ts → types-CRmwFnVk.d.ts} +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,108 +1,49 @@
|
|
|
1
|
-
'use strict';var core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils'),plugins=require('@directive-run/core/plugins'),Ln=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ln__default=/*#__PURE__*/_interopDefault(Ln);var lt=class extends Error{code;guardrailName;guardrailType;userMessage;agentName;constructor(e){super(e.message,{cause:e.cause}),this.name="GuardrailError",this.code=e.code,this.guardrailName=e.guardrailName,this.guardrailType=e.guardrailType,this.userMessage=e.userMessage??e.message,this.agentName=e.agentName,Object.defineProperty(this,"input",{value:e.input,enumerable:false,writable:false,configurable:false}),Object.defineProperty(this,"data",{value:e.data,enumerable:false,writable:false,configurable:false});}toJSON(){return {name:this.name,code:this.code,message:this.message,guardrailName:this.guardrailName,guardrailType:this.guardrailType,userMessage:this.userMessage,agentName:this.agentName}}};function Yn(t){return t instanceof lt}var en="__agent",qt="__approval",Nn="__conversation",$n="__toolCalls",Ut="__breakpoints";var pt="__scratchpad",mn={facts:{[en]:core.t.object(),[qt]:core.t.object(),[Nn]:core.t.array(),[$n]:core.t.array(),[Ut]:core.t.object()},derivations:{},events:{},requirements:{}};var Co=new Set(["agent_start","agent_complete","agent_error","agent_retry","guardrail_check","constraint_evaluate","resolver_start","resolver_complete","resolver_error","approval_request","approval_response","handoff_start","handoff_complete","pattern_start","pattern_complete","dag_node_update","breakpoint_hit","breakpoint_resumed","derivation_update","scratchpad_update","reflection_iteration","race_start","race_winner","race_cancelled","debate_round","reroute","checkpoint_save","checkpoint_restore","task_start","task_complete","task_error","task_progress","goal_step"]),Ar=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function fn(t={}){let e=t.maxEvents??2e3,n=t.goToSnapshot;if(!Number.isFinite(e)||e<1)throw new Error("[Directive DebugTimeline] maxEvents must be >= 1");let o=[],r=0,a=new Set;return {record(c){let u={...c,id:r++};o.push(u);let l=o.length-e;l>0&&o.splice(0,l);for(let d of a)try{d(u);}catch(f){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.error("[Directive DebugTimeline] Listener threw:",f instanceof Error?f.message:f);}return u},getEvents(){return [...o]},getEventsForAgent(c){return o.filter(u=>u.agentId===c)},getEventsByType(c){return o.filter(u=>u.type===c)},getEventsAtSnapshot(c){return o.filter(u=>u.snapshotId===c)},getEventsInRange(c,u){return o.filter(l=>l.timestamp>=c&&l.timestamp<=u)},forkFrom(c){let u=-1;for(let l=o.length-1;l>=0;l--)if(o[l].snapshotId!==null&&o[l].snapshotId<=c){u=o[l].id;break}if(u>=0){let l=o.length;for(let d=o.length-1;d>=0;d--)if(o[d].id<=u){l=d+1;break}o=o.slice(0,l);}else o=[];n&&n(c);},export(){return JSON.stringify({version:1,events:o,nextId:r})},import(c){let u;try{u=JSON.parse(c);}catch{throw new Error("[Directive DebugTimeline] Invalid JSON")}if(!u||typeof u!="object")throw new Error("[Directive DebugTimeline] Invalid timeline data");for(let f of Object.keys(u))if(Ar.has(f))throw new Error(`[Directive DebugTimeline] Blocked key in import: ${f}`);let l=u;if(!Array.isArray(l.events))throw new Error("[Directive DebugTimeline] Missing events array");let d=[];for(let f of l.events){if(!f||typeof f!="object")continue;for(let k of Object.keys(f))if(Ar.has(k))throw new Error(`[Directive DebugTimeline] Blocked key in event: ${k}`);let m=f;typeof m.id=="number"&&typeof m.type=="string"&&Co.has(m.type)&&typeof m.timestamp=="number"&&d.push(f);}o=d.length>e?d.slice(-e):d,r=typeof l.nextId=="number"?l.nextId:d.length;},clear(){o=[],r=0;},subscribe(c){return a.add(c),()=>{a.delete(c);}},get length(){return o.length}}}function hn(t,e){let n=new Map;return {name:"directive-ai-debug-timeline",onConstraintEvaluate(o,r){t.record({type:"constraint_evaluate",timestamp:Date.now(),snapshotId:e(),constraintId:o,fired:r});},onResolverStart(o,r){n.set(o,Date.now()),t.record({type:"resolver_start",timestamp:Date.now(),snapshotId:e(),resolverId:o,requirementType:r.requirement.type});},onResolverComplete(o){let r=n.get(o);n.delete(o),t.record({type:"resolver_complete",timestamp:Date.now(),snapshotId:e(),resolverId:o,durationMs:r?Date.now()-r:0});},onResolverError(o,r,a){let s=n.get(o);n.delete(o);let c=a instanceof Error?a.message:String(a);t.record({type:"resolver_error",timestamp:Date.now(),snapshotId:e(),resolverId:o,errorMessage:c,durationMs:s?Date.now()-s:0});}}}function At(t,e,n){return typeof t=="function"?{name:`${n}-guardrail-${e}`,fn:t,critical:true}:t}function Mo(t,e){let{backoff:n="exponential",baseDelayMs:o=100,maxDelayMs:r=5e3}=e,a;switch(n){case "exponential":a=o*2**(t-1);break;case "linear":a=o*t;break;default:a=o;}return Math.min(a,r)}function xr(t,e){return e?.aborted?Promise.reject(e.reason??new Error("Aborted")):new Promise((n,o)=>{if(!e){setTimeout(n,t);return}let r=()=>{clearTimeout(a),o(e.reason??new Error("Aborted"));},a=setTimeout(()=>{e.removeEventListener("abort",r),n();},t);e.addEventListener("abort",r,{once:true});})}async function xt(t,e,n,o){let{retry:r}=t,a=Math.max(r?.attempts??1,1),s;for(let c=1;c<=a;c++)try{return await t.fn(e,n)}catch(u){if(s=u instanceof Error?u:new Error(String(u)),c<a){let l=Mo(c,r??{});await xr(l,o);}}return {passed:false,reason:`Guardrail "${t.name}" failed after ${a} attempt(s): ${s.message}`}}function Do(t,e){let{backoff:n="exponential",baseDelayMs:o=1e3,maxDelayMs:r=3e4}=e,a;switch(n){case "exponential":a=o*2**(t-1);break;case "linear":a=o*t;break;default:a=o;}return Math.min(a,r)}async function yn(t,e,n,o,r){let a=Math.max(r?.attempts??1,1),s=r?.isRetryable??(()=>true),c=r?.onRetry,u;for(let l=1;l<=a;l++)try{return await t(e,n,o)}catch(d){if(u=d instanceof Error?d:new Error(String(d)),l<a){let f=true;try{f=s(u);}catch{break}if(!f)break;let m=Do(l,r??{});try{c?.(l,u,m);}catch{}await xr(m,o?.signal);}else break}throw u}function ot(t){return adapterUtils.getBridgeFact(t,en)}function st(t,e){adapterUtils.setBridgeFact(t,en,e);}function kt(t){return adapterUtils.getBridgeFact(t,qt)}function mt(t,e){adapterUtils.setBridgeFact(t,qt,e);}function tn(t){return adapterUtils.getBridgeFact(t,Nn)}function Ct(t,e){adapterUtils.setBridgeFact(t,Nn,e);}function nn(t){return adapterUtils.getBridgeFact(t,$n)}function Mt(t,e){adapterUtils.setBridgeFact(t,$n,e);}function yt(t){return adapterUtils.getBridgeFact(t,Ut)}function bt(t,e){adapterUtils.setBridgeFact(t,Ut,e);}function gt(t){return {agent:ot(t),approval:kt(t),conversation:tn(t),toolCalls:nn(t)}}function rn(t){let e=Object.create(null);for(let[n,o]of Object.entries(t))e[n]={priority:o.priority??0,when:r=>{let a=gt(r),s={...r,...a};return o.when(s)},require:r=>{let a=gt(r),s={...r,...a};return typeof o.require=="function"?o.require(s):o.require}};return e}function Cr(t,e,n){let o=Object.create(null);for(let[r,a]of Object.entries(t))o[r]={requirement:a.requirement,key:a.key,resolve:async(s,c)=>{let u=gt(c.facts),d={facts:{...c.facts,...u},runAgent:async(f,m,k)=>e(f,m,gt(n()),k),signal:c.signal};await a.resolve(s,d);}};return o}var Dt=200,Po=0;function kn(){return `bp_${Date.now().toString(36)}_${(++Po).toString(36)}`}function wn(t,e,n){for(let o of t)if(o.type===e){if(!o.when)return o;try{if(o.when(n))return o}catch{}}return null}function on(){return {pending:[],resolved:[],cancelled:[]}}var Mr=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Pt(){let t=Date.now().toString(36),e=crypto.randomUUID().slice(0,8);return `ckpt_${t}_${e}`}function sn(t){if(!t||typeof t!="object")return false;for(let o of Object.keys(t))if(Mr.has(o))return false;let e=t;if(e.version!==1||typeof e.id!="string"||e.id.length===0||typeof e.createdAt!="string"||typeof e.systemExport!="string"||e.timelineExport!==null&&typeof e.timelineExport!="string"||!e.localState||typeof e.localState!="object")return false;for(let o of Object.keys(e.localState))if(Mr.has(o))return false;let n=e.localState;return !(n.type!=="single"&&n.type!=="multi"||e.orchestratorType!=="single"&&e.orchestratorType!=="multi")}var Qn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(e){if(this.maxCheckpoints=e?.maxCheckpoints??100,this.retentionMs=e?.retentionMs??Number.POSITIVE_INFINITY,this.preserveLabeled=e?.preserveLabeled??false,!Number.isFinite(this.maxCheckpoints)||this.maxCheckpoints<1)throw new Error(`[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`)}async save(e){if(!sn(e))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let n=this.order.indexOf(e.id);return n>=0&&this.order.splice(n,1),this.store.set(e.id,e),this.order.push(e.id),e.id}async load(e){return this.store.get(e)??null}async list(){return this.order.map(e=>{let n=this.store.get(e);return {id:n.id,label:n.label,createdAt:n.createdAt}})}async delete(e){if(!this.store.has(e))return false;this.store.delete(e);let n=this.order.indexOf(e);return n>=0&&this.order.splice(n,1),true}async clear(){this.store.clear(),this.order.length=0;}async prune(){if(!Number.isFinite(this.retentionMs))return 0;let e=Date.now()-this.retentionMs,n=0,o=[];for(let r of this.order){let a=this.store.get(r);if(!a)continue;if(new Date(a.createdAt).getTime()>=e)break;this.preserveLabeled&&a.label||o.push(r);}for(let r of o){this.store.delete(r);let a=this.order.indexOf(r);a>=0&&this.order.splice(a,1),n++;}return n}evictOldest(){if(this.preserveLabeled)for(let n=0;n<this.order.length;n++){let o=this.order[n],r=this.store.get(o);if(r&&!r.label)return this.order.splice(n,1),this.store.delete(o),true}let e=this.order.shift();return e?(this.store.delete(e),true):false}};function an(t){if(t.length>1048576)throw new Error(`[Directive] Output too large for JSON extraction (${t.length} chars, max 1048576).`);let e=t.trim();try{return JSON.parse(e)}catch{}let n=e.indexOf("{"),o=e.indexOf("["),r,a,s;if(n===-1&&o===-1)throw new Error("[Directive] No JSON object or array found in output");n===-1?(r=o,a="[",s="]"):o===-1?(r=n,a="{",s="}"):(r=Math.min(n,o),a=r===n?"{":"[",s=r===n?"}":"]");let c=0,u=false,l=false;for(let d=r;d<e.length;d++){let f=e[d];if(l){l=false;continue}if(f==="\\"){l=true;continue}if(f==='"'){u=!u;continue}if(!u){if(f===a)c++;else if(f===s&&(c--,c===0)){let m=e.slice(r,d+1);try{return JSON.parse(m)}catch{let k=m.replace(/"(?:[^"\\]|\\.)*"/g,w=>w.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"));return JSON.parse(k)}}}}throw new Error("[Directive] No valid JSON found in output")}function Io(t){return t?t.issues&&t.issues.length>0?t.issues.map(e=>e.message).join("; "):t.message??"Validation failed":"Validation failed"}function Rn(t,e){let{schema:n,maxRetries:o=2,extractJson:r=an,schemaDescription:a}=e;if(!Number.isFinite(o)||o<0)throw new Error("[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.");let s=a??n.description??"the specified JSON schema";return async(c,u,l)=>{let d={...c,instructions:(c.instructions??"")+`
|
|
2
|
-
|
|
3
|
-
IMPORTANT: Respond with valid JSON matching `+s+". Output ONLY the JSON object, no additional text or markdown formatting."},f,m;for(let k=0;k<=o;k++){let w=k===0?u:`${u}
|
|
4
|
-
|
|
5
|
-
Your previous response was not valid JSON. Error: ${m}
|
|
6
|
-
Please try again with valid JSON only.`,y=await t(d,w,l);f=y;let T=typeof y.output=="string"?y.output:JSON.stringify(y.output);try{let R=r(T),v=n.safeParse(R);if(v.success)return {...y,output:v.data};m=Io(v.error);}catch(R){m=R instanceof Error?R.message:String(R);}}throw new jn(`[Directive] Failed to get valid structured output after ${o+1} attempts: ${m}`,f)}}var jn=class extends Error{lastResult;constructor(e,n){super(e),this.name="StructuredOutputError",this.lastResult=n;}};var Dr=500,Pr=200;function Bo(t){let{runner:e,factsSchema:n={},init:o,constraints:r={},resolvers:a={},guardrails:s={},onApprovalRequest:c,autoApproveToolCalls:u=true,maxTokenBudget:l,budgetWarningThreshold:d=.8,onBudgetWarning:f,plugins:m=[],debug:k=false,approvalTimeoutMs:w=3e5,agentRetry:y,hooks:T={},memory:R,circuitBreaker:v,selfHealing:C,outputSchema:P,maxSchemaRetries:H,checkpointStore:_,breakpoints:q,onBreakpoint:ye,breakpointTimeoutMs:x}=t,G=typeof k=="object"?true:!!k,J=5e3;if(G&&C&&!v&&console.warn("[Directive] selfHealing config has no effect without a circuitBreaker \u2014 fallback behavior requires the circuit breaker to detect failures."),d<0||d>1)throw new Error(`[Directive Orchestrator] budgetWarningThreshold must be between 0 and 1, got ${d}`);if(!u&&!c)throw new Error(`[Directive] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
|
|
7
|
-
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
8
|
-
- Provide an onApprovalRequest callback to handle approvals programmatically`);function se(D,U){try{T[D]?.(U);}catch(we){G&&console.debug(`[Directive] hooks.${D} threw:`,we);}}let B=["agent","approval","conversation","toolCalls"];for(let D of Object.keys(n))if(B.includes(D))throw new Error(`[Directive] Facts schema key "${D}" conflicts with orchestrator state. Reserved keys: ${B.join(", ")}. Rename your fact to avoid the collision.`);let ie={facts:{...mn.facts,...n,__budgetWarningFired:core.t.boolean()},derivations:{},events:{},requirements:{}},ae,I,pe=rn(r);l&&(pe.__budgetLimit={priority:100,when:D=>ot(D).tokenUsage>l,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let Ae=Cr(a,(D,U,we,fe)=>ae(D,U,we,fe),()=>I.facts);Ae.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async(D,U)=>{let we=ot(U.facts);st(U.facts,{...we,status:"paused"});}};let xe=null;G&&(xe=fn({goToSnapshot:D=>{try{I.history?.goTo?.(D);}catch{}}}));let ft=adapterUtils.createCallbackPlugin("directive-ai-callbacks",{}),Gt=core.createModule("directive-ai-orchestrator",{schema:ie,init:D=>{if(st(D,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(D,{pending:[],approved:[],rejected:[]}),Ct(D,[]),Mt(D,[]),bt(D,{pending:[],resolved:[],cancelled:[]}),adapterUtils.setBridgeFact(D,"__budgetWarningFired",false),o){let U=gt(D),we={...D,...U};o(we);}},constraints:pe,resolvers:Ae}),Bt=[...m,ft];G&&xe&&Bt.push(hn(xe,()=>{try{return I.history?.currentIndex??null}catch{return null}})),I=core.createSystem({module:Gt,plugins:Bt,history:G?true:void 0}),I.start();async function S(D,U,we,fe,K){if(v)try{return await v.execute(()=>z(D,U,we,fe,K))}catch(Te){if(C){if(C.fallbackRunners)for(let Ne of C.fallbackRunners)try{let He={originalAgent:D.name,reroutedTo:"fallback-runner",reason:Te instanceof Error?Te.message:String(Te),timestamp:Date.now()};try{C.onReroute?.(He);}catch{}return xe&&xe.record({type:"reroute",timestamp:Date.now(),agentId:D.name,snapshotId:null,from:D.name,to:"fallback-runner",reason:Te instanceof Error?Te.message:String(Te)}),await Ne(D,U,fe)}catch{}if(C.fallbackAgent)try{let Ne={originalAgent:D.name,reroutedTo:C.fallbackAgent.name,reason:Te instanceof Error?Te.message:String(Te),timestamp:Date.now()};try{C.onReroute?.(Ne);}catch{}return xe&&xe.record({type:"reroute",timestamp:Date.now(),agentId:D.name,snapshotId:null,from:D.name,to:C.fallbackAgent.name,reason:Te instanceof Error?Te.message:String(Te)}),await e(C.fallbackAgent,U,fe)}catch{}if(C.degradation==="fallback-response"&&C.fallbackResponse!==void 0)return {output:C.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}throw Te}return z(D,U,we,fe,K)}async function z(D,U,we,fe,K){let Te=Date.now();if(R){let ge=R.getContextMessages();if(ge.length>0){let he=ge.map(Ue=>`${Ue.role}: ${Ue.content}`).join(`
|
|
9
|
-
`);D={...D,instructions:(D.instructions??"")+`
|
|
10
|
-
|
|
11
|
-
Conversation context:
|
|
12
|
-
`+he};}}if(q&&q.length>0){let ge={agentId:D.name,agentName:D.name,input:U,state:I.facts.$store.toObject(),breakpointType:"pre_input_guardrails"},he=await at("pre_input_guardrails",ge,K?.signal??fe?.signal);if(he?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};he?.input&&(U=he.input);}let Ne=K?.inputGuardrails!==void 0?K.inputGuardrails:s.input??[],He=K?.outputGuardrails!==void 0?K.outputGuardrails:s.output??[],it=Ne.map((ge,he)=>At(ge,he,"input"));for(let ge of it){let{name:he}=ge,Ue={agentName:D.name,input:U,facts:I.facts.$store.toObject()},Me=Date.now(),_e=await xt(ge,{input:U,agentName:D.name},Ue);if(se("onGuardrailCheck",{agentId:D.name,guardrailName:he,guardrailType:"input",passed:_e.passed,reason:_e.reason,durationMs:Date.now()-Me,timestamp:Date.now()}),!_e.passed)throw new lt({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${he}" failed: ${_e.reason}`,guardrailName:he,guardrailType:"input",userMessage:_e.reason??"Input validation failed",agentName:D.name,input:U});_e.transformed!==void 0&&(U=_e.transformed);}if(se("onAgentStart",{agentName:D.name,input:U,timestamp:Te}),xe&&xe.record({type:"agent_start",timestamp:Date.now(),agentId:D.name,snapshotId:null,inputLength:U.length,modelId:D.model??void 0,...D.instructions?{instructions:D.instructions.slice(0,J)}:{},input:U.slice(0,J)}),I.batch(()=>{let ge=ot(I.facts);st(I.facts,{...ge,status:"running",currentAgent:D.name,input:U,startedAt:Date.now()});}),q&&q.length>0){let ge={agentId:D.name,agentName:D.name,input:U,state:I.facts.$store.toObject(),breakpointType:"pre_agent_run"},he=await at("pre_agent_run",ge,K?.signal??fe?.signal);if(he?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};he?.input&&(U=he.input);}let ut=K?.outputSchema!==void 0?K.outputSchema:P,ct=e;ut&&(ct=Rn(e,{schema:ut,maxRetries:K?.maxSchemaRetries??H??2}));let Ee=await yn(ct,D,U,{...fe,signal:fe?.signal,onMessage:ge=>{let Ue=[...tn(I.facts),ge];Ct(I.facts,Ue.length>Dr?Ue.slice(-Dr):Ue),fe?.onMessage?.(ge);},onToolCall:async ge=>{let he=(s.toolCall??[]).map((_e,Be)=>At(_e,Be,"toolCall"));for(let _e of he){let{name:Be}=_e,Rt={agentName:D.name,input:U,facts:I.facts.$store.toObject()},St=Date.now(),be=await xt(_e,{toolCall:ge,agentName:D.name,input:U},Rt);if(se("onGuardrailCheck",{agentId:D.name,guardrailName:Be,guardrailType:"toolCall",passed:be.passed,reason:be.reason,durationMs:Date.now()-St,timestamp:Date.now()}),!be.passed)throw new lt({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${Be}" failed: ${be.reason}`,guardrailName:Be,guardrailType:"toolCall",userMessage:be.reason??"Tool call blocked",data:{toolCall:ge},agentName:D.name,input:U})}if(!u){let _e=`tool-${ge.id}`,Be={id:_e,type:"tool_call",agentName:D.name,description:`Tool call: ${ge.name}`,data:ge,requestedAt:Date.now()};I.batch(()=>{let Rt=kt(I.facts);mt(I.facts,{...Rt,pending:[...Rt.pending,Be]});}),c?.(Be),await Ot(_e,K?.signal??fe?.signal);}let Me=[...nn(I.facts),ge];Mt(I.facts,Me.length>Pr?Me.slice(-Pr):Me),fe?.onToolCall?.(ge);}},y?{...y,onRetry:(ge,he,Ue)=>{y.onRetry?.(ge,he,Ue),se("onAgentRetry",{agentName:D.name,input:U,attempt:ge,error:he,delayMs:Ue,timestamp:Date.now()});}}:void 0);if(q&&q.length>0){let ge={agentId:D.name,agentName:D.name,input:U,state:I.facts.$store.toObject(),breakpointType:"pre_output_guardrails"},he=await at("pre_output_guardrails",ge,K?.signal??fe?.signal);if(he?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};he?.input&&(U=he.input);}let Ce=He.map((ge,he)=>At(ge,he,"output"));for(let ge of Ce){let{name:he}=ge,Ue={agentName:D.name,input:U,facts:I.facts.$store.toObject()},Me=Date.now(),_e=await xt(ge,{output:Ee.output,agentName:D.name,input:U,messages:Ee.messages},Ue);if(se("onGuardrailCheck",{agentId:D.name,guardrailName:he,guardrailType:"output",passed:_e.passed,reason:_e.reason,durationMs:Date.now()-Me,timestamp:Date.now()}),!_e.passed)throw new lt({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${he}" failed: ${_e.reason}`,guardrailName:he,guardrailType:"output",userMessage:_e.reason??"Output validation failed",agentName:D.name,input:U});_e.transformed!==void 0&&(Ee.output=_e.transformed);}let ht=false,Pe=0;if(I.batch(()=>{let ge=ot(I.facts),he=ge.tokenUsage+Ee.totalTokens;if(st(I.facts,{...ge,status:"completed",output:Ee.output,tokenUsage:he,turnCount:ge.turnCount+Ee.messages.length,completedAt:Date.now()}),l&&f){Pe=he/l;let Ue=adapterUtils.getBridgeFact(I.facts,"__budgetWarningFired");Pe>=d&&!Ue&&(adapterUtils.setBridgeFact(I.facts,"__budgetWarningFired",true),ht=true);}}),ht)try{f({currentTokens:ot(I.facts).tokenUsage,maxBudget:l,percentage:Pe});}catch(ge){G&&console.debug("[Directive Orchestrator] onBudgetWarning threw:",ge);}if(R&&Ee.messages.length>0)try{R.addMessages(Ee.messages);}catch(ge){G&&console.debug("[Directive] Memory addMessages failed:",ge);}if(se("onAgentComplete",{agentName:D.name,input:U,output:Ee.output,tokenUsage:Ee.totalTokens,durationMs:Date.now()-Te,timestamp:Date.now()}),xe){let ge=typeof Ee.output=="string"?Ee.output:JSON.stringify(Ee.output);xe.record({type:"agent_complete",timestamp:Date.now(),agentId:D.name,snapshotId:null,outputLength:ge?.length??0,totalTokens:Ee.totalTokens,inputTokens:Ee.tokenUsage?.inputTokens??0,outputTokens:Ee.tokenUsage?.outputTokens??0,durationMs:Date.now()-Te,modelId:D.model??void 0,output:ge.slice(0,J)});}if(q&&q.length>0){let ge={agentId:D.name,agentName:D.name,input:U,state:I.facts.$store.toObject(),breakpointType:"post_run"},he=await at("post_run",ge,K?.signal??fe?.signal);if(he?.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};he?.input&&(U=he.input);}return Ee}ae=S;let te=new Map,Se=new Map;function re(D,U){return U?.aborted?Promise.reject(U.reason??new Error("Aborted while waiting for breakpoint")):new Promise((we,fe)=>{let K=false,Te=null,Ne=()=>{K||(K=true,Te&&(clearTimeout(Te),Te=null),U&&U.removeEventListener("abort",He),it());},He=()=>{Ne(),fe(U.reason??new Error(`Breakpoint wait for ${D} aborted`));};U&&U.addEventListener("abort",He,{once:true});let it=I.facts.$store.subscribe([Ut],()=>{if(K)return;let ct=yt(I.facts);if(ct.resolved.includes(D)){Ne();let Ee=te.get(D)??null;te.delete(D),we(Ee);}else if(ct.cancelled.includes(D)){Ne(),te.delete(D);let Ee=Se.get(D);Se.delete(D),fe(new Error(Ee?`Breakpoint ${D} was cancelled: ${Ee}`:`Breakpoint ${D} was cancelled`));}}),ut=x??3e5;Te=setTimeout(()=>{K||(Ne(),te.delete(D),Se.delete(D),fe(new Error(`[Directive] Breakpoint timeout: ${D} not resolved within ${Math.round(ut/1e3)}s`)));},ut);})}async function at(D,U,we){if(!q||q.length===0)return null;let fe=wn(q,D,U);if(!fe)return null;let K=kn(),Te={id:K,type:D,agentId:U.agentId,input:U.input,label:fe.label,requestedAt:Date.now()};I.batch(()=>{let He=yt(I.facts);bt(I.facts,{...He,pending:[...He.pending,Te]});});try{ye?.(Te);}catch{}try{T.onBreakpoint?.(Te);}catch{}xe&&xe.record({type:"breakpoint_hit",timestamp:Date.now(),snapshotId:null,agentId:U.agentId,breakpointId:K,breakpointType:D,label:fe.label});let Ne=await re(K,we);return xe&&xe.record({type:"breakpoint_resumed",timestamp:Date.now(),snapshotId:null,agentId:U.agentId,breakpointId:K,modified:!!Ne?.input,skipped:!!Ne?.skip}),Ne}function Ot(D,U){return U?.aborted?Promise.reject(U.reason??new Error("Aborted while waiting for approval")):new Promise((we,fe)=>{let K=false,Te=null,Ne=()=>{K||(K=true,Te&&(clearTimeout(Te),Te=null),U&&U.removeEventListener("abort",He),it());},He=()=>{Ne(),fe(U.reason??new Error(`Approval wait for ${D} aborted`));};U&&U.addEventListener("abort",He,{once:true});let it=I.facts.$store.subscribe([qt],()=>{if(K)return;let ut=kt(I.facts);if(ut.approved.includes(D))Ne(),we();else {let ct=ut.rejected.find(Ee=>Ee.id===D);if(ct){Ne();let Ee=ct.reason?`Request ${D} rejected: ${ct.reason}`:`Request ${D} rejected`;fe(new Error(Ee));}}});Te=setTimeout(()=>{if(K)return;Ne();let ut=Math.round(w/1e3);fe(new Error(`[Directive] Approval timeout: Request ${D} not resolved within ${ut}s.
|
|
13
|
-
Solutions:
|
|
14
|
-
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
15
|
-
2. Set autoApproveToolCalls: true to auto-approve
|
|
16
|
-
3. Increase approvalTimeoutMs (current: ${w}ms)
|
|
17
|
-
See: https://directive.run/docs/ai/running-agents`));},w);})}function $t(){return {...gt(I.facts)}}return {system:I,get facts(){return $t()},get totalTokens(){return ot(I.facts).tokenUsage},get timeline(){return xe},async run(D,U,we){return S(D,U,$t(),void 0,we)},runStream(D,U,we={}){let fe=new AbortController,K=1e4,Te=[],Ne=[],He=false,it=Date.now(),ut=0,ct=1e5,Ee="",Ce;we.signal&&(Ce=()=>fe.abort(),we.signal.addEventListener("abort",Ce,{once:true}));let ht=()=>{Ce&&we.signal&&we.signal.removeEventListener("abort",Ce);},Pe=Me=>{if(He)return;let _e=Ne.shift();_e?_e(Me):(Te.push(Me),Te.length>K&&Te.shift());},ge=()=>{He=true,ht();for(let Me of Ne)Me(null);Ne.length=0;},he=(async()=>{Pe({type:"progress",phase:"starting",message:"Running input guardrails"});try{let Me=U,_e=(s.input??[]).map((be,Qe)=>At(be,Qe,"input"));for(let be of _e){let{name:Qe}=be,jt={agentName:D.name,input:Me,facts:I.facts.$store.toObject()},Ie=await xt(be,{input:Me,agentName:D.name},jt);if(!Ie.passed)throw Pe({type:"guardrail_triggered",guardrailName:Qe,reason:Ie.reason??"Input validation failed",partialOutput:Ee,stopped:!0}),new lt({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${Qe}" failed: ${Ie.reason}`,guardrailName:Qe,guardrailType:"input",userMessage:Ie.reason??"Input validation failed",agentName:D.name,input:Me});Ie.transformed!==void 0&&(Me=Ie.transformed);}Pe({type:"progress",phase:"generating",message:"Starting agent"}),I.batch(()=>{let be=ot(I.facts);st(I.facts,{...be,status:"running",currentAgent:D.name,input:Me,startedAt:Date.now()});});let Be=await yn(e,D,Me,{signal:fe.signal,onMessage:be=>{let Qe=tn(I.facts);if(Ct(I.facts,[...Qe,be]),Pe({type:"message",message:be}),be.role==="assistant"&&be.content){let jt=Math.ceil(be.content.length/4);ut+=jt,Ee+=be.content,Ee.length>ct&&(Ee=Ee.slice(-ct)),Pe({type:"token",data:be.content,tokenCount:ut});}},onToolCall:async be=>{Pe({type:"tool_start",tool:be.name,toolCallId:be.id,arguments:be.arguments});let Qe=(s.toolCall??[]).map((Ie,vt)=>At(Ie,vt,"toolCall"));for(let Ie of Qe){let{name:vt}=Ie,Tt={agentName:D.name,input:Me,facts:I.facts.$store.toObject()},Lt=await xt(Ie,{toolCall:be,agentName:D.name,input:Me},Tt);if(!Lt.passed)throw Pe({type:"guardrail_triggered",guardrailName:vt,reason:Lt.reason??"Tool call blocked",partialOutput:Ee,stopped:!0}),new lt({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${vt}" failed: ${Lt.reason}`,guardrailName:vt,guardrailType:"toolCall",userMessage:Lt.reason??"Tool call blocked",data:{toolCall:be},agentName:D.name,input:Me})}if(!u){let Ie=`tool-${be.id}`;Pe({type:"approval_required",requestId:Ie,toolName:be.name});let vt={id:Ie,type:"tool_call",agentName:D.name,description:`Tool call: ${be.name}`,data:be,requestedAt:Date.now()};I.batch(()=>{let Tt=kt(I.facts);mt(I.facts,{...Tt,pending:[...Tt.pending,vt]});}),c?.(vt),await Ot(Ie,fe.signal),Pe({type:"approval_resolved",requestId:Ie,approved:!0});}let jt=nn(I.facts);Mt(I.facts,[...jt,be]),be.result&&Pe({type:"tool_end",tool:be.name,toolCallId:be.id,result:be.result});}},y);Pe({type:"progress",phase:"finishing",message:"Running output guardrails"});let Rt=(s.output??[]).map((be,Qe)=>At(be,Qe,"output"));for(let be of Rt){let{name:Qe}=be,jt={agentName:D.name,input:Me,facts:I.facts.$store.toObject()},Ie=await xt(be,{output:Be.output,agentName:D.name,input:Me,messages:Be.messages},jt);if(!Ie.passed)throw Pe({type:"guardrail_triggered",guardrailName:Qe,reason:Ie.reason??"Output validation failed",partialOutput:typeof Be.output=="string"?Be.output:"",stopped:!0}),new lt({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${Qe}" failed: ${Ie.reason}`,guardrailName:Qe,guardrailType:"output",userMessage:Ie.reason??"Output validation failed",agentName:D.name,input:Me});Ie.transformed!==void 0&&(Be.output=Ie.transformed);}I.batch(()=>{let be=ot(I.facts);st(I.facts,{...be,status:"completed",output:Be.output,tokenUsage:be.tokenUsage+Be.totalTokens,turnCount:be.turnCount+Be.messages.length,completedAt:Date.now()});});let St=Date.now()-it;return Pe({type:"done",totalTokens:Be.totalTokens,duration:St,droppedTokens:0}),ge(),Be}catch(Me){throw Pe({type:"error",error:Me instanceof Error?Me:new Error(String(Me))}),ge(),Me}})();return he.catch(()=>{}),{stream:{[Symbol.asyncIterator](){return {async next(){return Te.length>0?{done:false,value:Te.shift()}:He?{done:true,value:void 0}:new Promise(Me=>{Ne.push(_e=>{Me(_e===null?{done:true,value:void 0}:{done:false,value:_e});});})}}}},result:he,abort:()=>{fe.abort(),ge();}}},async waitForIdle(D){let U=()=>ot(I.facts).status!=="running";if(U())return;let we=Date.now();for(;!U();){if(D!==void 0&&Date.now()-we>D)throw new Error("[Directive Orchestrator] waitForIdle timed out");await new Promise(fe=>setTimeout(fe,50));}},approve(D){I.batch(()=>{let U=kt(I.facts);if(!U.pending.some(K=>K.id===D)){G&&console.debug(`[Directive] approve() ignored: no pending request "${D}"`);return}let we=200,fe=[...U.approved,D];mt(I.facts,{...U,pending:U.pending.filter(K=>K.id!==D),approved:fe.length>we?fe.slice(-we):fe});});},reject(D,U){I.batch(()=>{let we=kt(I.facts);if(!we.pending.some(Ne=>Ne.id===D)){G&&console.debug(`[Directive] reject() ignored: no pending request "${D}"`);return}U&&G&&console.debug(`[Directive] Request ${D} rejected: ${U}`);let fe={id:D,reason:U,rejectedAt:Date.now()},K=200,Te=[...we.rejected,fe];mt(I.facts,{...we,pending:we.pending.filter(Ne=>Ne.id!==D),rejected:Te.length>K?Te.slice(-K):Te});});},pause(){let D=ot(I.facts);st(I.facts,{...D,status:"paused"});},resume(){let D=ot(I.facts);D.status==="paused"&&st(I.facts,{...D,status:D.currentAgent?"running":"idle"});},reset(){I.batch(()=>{st(I.facts,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(I.facts,{pending:[],approved:[],rejected:[]}),Ct(I.facts,[]),Mt(I.facts,[]),bt(I.facts,{pending:[],resolved:[],cancelled:[]}),adapterUtils.setBridgeFact(I.facts,"__budgetWarningFired",false);}),te.clear(),Se.clear();},async checkpoint(D){if(ot(I.facts).status==="running")throw new Error("[Directive] Cannot checkpoint while agent is running");if(!I.history?.export)throw new Error("[Directive] Checkpointing requires history. Set `debug: true` in orchestrator options.");let we={version:1,id:Pt(),createdAt:new Date().toISOString(),label:D?.label,systemExport:I.history.export(),timelineExport:xe?.export()??null,localState:{type:"single"},memoryExport:R?R.export?.()??null:null,orchestratorType:"single"};return _&&await _.save(we),we},restore(D,U){if(!sn(D))throw new Error("[Directive] Invalid checkpoint data");if(D.orchestratorType!=="single")throw new Error("[Directive] Cannot restore multi-agent checkpoint in single-agent orchestrator");if(!I.history?.import)throw new Error("[Directive] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");I.history.import(D.systemExport),U?.restoreTimeline!==false&&D.timelineExport&&xe&&xe.import(D.timelineExport),D.memoryExport!==null&&R&&R.import&&R.import(D.memoryExport);},resumeBreakpoint(D,U){U&&te.set(D,U),I.batch(()=>{let we=yt(I.facts),fe=[...we.resolved,D];bt(I.facts,{...we,pending:we.pending.filter(K=>K.id!==D),resolved:fe.length>Dt?fe.slice(-Dt):fe});});},cancelBreakpoint(D,U){U&&Se.set(D,U),I.batch(()=>{let we=yt(I.facts),fe=[...we.cancelled,D];bt(I.facts,{...we,pending:we.pending.filter(K=>K.id!==D),cancelled:fe.length>Dt?fe.slice(-Dt):fe});});},getPendingBreakpoints(){return [...yt(I.facts).pending]},dispose(){I.destroy();}}}var Ir=1e5;function Or(t){if(typeof t=="string")return t;try{let e=new WeakSet,n=JSON.stringify(t,(o,r)=>{if(typeof r=="object"&&r!==null){if(e.has(r))return "[Circular]";e.add(r);}return r});return n.length>Ir?n.slice(0,Ir)+"...[truncated]":n}catch{return String(t)}}function Lo(t){let{patterns:e=[/\b\d{3}-\d{2}-\d{4}\b/g,/\b\d{16}\b/g,/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi],redact:n=false,redactReplacement:o="[REDACTED]"}=t;return r=>{let a=r.input,s=false;for(let c of e)c.lastIndex=0,c.test(a)&&(s=true,n&&(c.lastIndex=0,a=a.replace(c,o)));return s&&!n?{passed:false,reason:"Input contains PII"}:{passed:true,transformed:n&&s?a:void 0}}}function Fo(t){let{checkFn:e,message:n="Content flagged by moderation"}=t;return async o=>{let r="output"in o?typeof o.output=="string"?o.output:JSON.stringify(o.output):o.input,a=await e(r);return {passed:!a,reason:a?n:void 0}}}function qo(t){let{maxTokensPerMinute:e=1e5,maxRequestsPerMinute:n=60}=t,o=Math.max(n,1e3),r=[],a=[],s=6e4;function c(l,d){let f=0,m=l.length;for(;f<m;){let k=f+m>>>1;(l[k]??0)<d?f=k+1:m=k;}return f}let u=(l,d)=>{let f=Date.now(),m=f-s,k=c(r,m);k>0&&(r=r.slice(k));let w=c(a,m);w>0&&(a=a.slice(w));let R=d.facts[en]?.tokenUsage??0,v=r.length,C=a.length;return v+R>e?{passed:false,reason:"Token rate limit exceeded"}:C>=n?{passed:false,reason:"Request rate limit exceeded"}:(a.length<o&&a.push(f),r.length<o&&r.push(f),{passed:true})};return u.reset=()=>{r=[],a=[];},u}function Uo(t){let{allowlist:e,denylist:n,caseSensitive:o=false}=t,r=e?.map(s=>o?s:s.toLowerCase()),a=n?.map(s=>o?s:s.toLowerCase());return s=>{let c=o?s.toolCall.name:s.toolCall.name.toLowerCase();return r&&!r.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" not in allowlist`}:a?.includes(c)?{passed:false,reason:`Tool "${s.toolCall.name}" is blocked`}:{passed:true}}}function Ho(t){let{validate:e,errorPrefix:n="Output schema validation failed"}=t;return o=>{let r=e(o.output);return typeof r=="boolean"?{passed:r,reason:r?void 0:n}:r.valid?{passed:true}:{passed:false,reason:r.errors?.length?`${n}: ${r.errors.join("; ")}`:n}}}function zo(t){let{type:e,requiredFields:n=[],minLength:o,maxLength:r,minStringLength:a,maxStringLength:s}=t;return c=>{let u=c.output;switch(e){case "string":return typeof u!="string"?{passed:false,reason:`Expected string, got ${typeof u}`}:a!==void 0&&u.length<a?{passed:false,reason:`String too short: ${u.length} < ${a}`}:s!==void 0&&u.length>s?{passed:false,reason:`String too long: ${u.length} > ${s}`}:{passed:true};case "number":return typeof u!="number"||Number.isNaN(u)?{passed:false,reason:`Expected number, got ${typeof u}`}:{passed:true};case "boolean":return typeof u!="boolean"?{passed:false,reason:`Expected boolean, got ${typeof u}`}:{passed:true};case "object":if(typeof u!="object"||u===null||Array.isArray(u))return {passed:false,reason:`Expected object, got ${Array.isArray(u)?"array":typeof u}`};for(let l of n)if(!(l in u))return {passed:false,reason:`Missing required field: ${l}`};return {passed:true};case "array":return Array.isArray(u)?o!==void 0&&u.length<o?{passed:false,reason:`Array too short: ${u.length} < ${o}`}:r!==void 0&&u.length>r?{passed:false,reason:`Array too long: ${u.length} > ${r}`}:{passed:true}:{passed:false,reason:`Expected array, got ${typeof u}`};default:return {passed:false,reason:`Unknown type: ${e}`}}}}function Jo(t){let{maxCharacters:e,maxTokens:n,estimateTokens:o=r=>Math.ceil(r.length/4)}=t;return r=>{let a=Or(r.output);if(e!==void 0&&a.length>e)return {passed:false,reason:`Output too long: ${a.length} characters (max: ${e})`};if(n!==void 0){let s=o(a);if(s>n)return {passed:false,reason:`Output too long: ~${s} tokens (max: ${n})`}}return {passed:true}}}function Wo(t){let{blockedPatterns:e,caseSensitive:n=false}=t;e.length===0&&console.warn("[Directive] createContentFilterGuardrail: blockedPatterns is empty \u2014 no content will be filtered");let o=e.map(r=>{if(r instanceof RegExp)return r;let a=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(a,n?"g":"gi")});return r=>{let a=Or(r.output);for(let s of o)if(s.lastIndex=0,s.test(a))return {passed:false,reason:`Output contains blocked content matching: ${s.source}`};return {passed:true}}}function Vo(t){return t.status==="running"}function Ko(t){return t.pending.length>0}function Xo(t,e){return t/1e6*e}var Yo=new Set(["http:","https:"]);function Qo(t){try{let e=new URL(t);if(!Yo.has(e.protocol))throw new Error(`[Directive] Invalid baseURL protocol "${e.protocol}" \u2013 only http: and https: are allowed`)}catch(e){throw e instanceof Error&&e.message.startsWith("[Directive]")?e:new Error(`[Directive] Invalid baseURL "${t}" \u2013 must be a valid URL (e.g. "https://api.openai.com/v1")`)}}function Zo(t){let{fetch:e=globalThis.fetch,buildRequest:n,parseResponse:o,parseOutput:r,hooks:a}=t,c=r??(u=>{try{return JSON.parse(u)}catch{return u}});return async(u,l,d)=>{let f=Date.now();a?.onBeforeCall?.({agent:u,input:l,timestamp:f});let m=[{role:"user",content:l}];try{let{url:k,init:w}=n(u,l,m),y=d?.signal?{...w,signal:d.signal}:w,T=await e(k,y);if(!T.ok){let _=await T.text().catch(()=>"");throw new Error(`[Directive] AgentRunner request failed: ${T.status} ${T.statusText}${_?` \u2013 ${_.slice(0,300)}`:""}`)}let R=await o(T,m),v={inputTokens:R.inputTokens??0,outputTokens:R.outputTokens??0},C={role:"assistant",content:R.text},P=[...m,C];d?.onMessage?.(C);let H=Date.now()-f;return a?.onAfterCall?.({agent:u,input:l,output:R.text,totalTokens:R.totalTokens,tokenUsage:v,durationMs:H,timestamp:Date.now()}),{output:c(R.text),messages:P,toolCalls:[],totalTokens:R.totalTokens,tokenUsage:v}}catch(k){let w=Date.now()-f;throw k instanceof Error&&a?.onError?.({agent:u,input:l,error:k,durationMs:w,timestamp:Date.now()}),k}}}function es(t,...e){let n=t;for(let o of e)n=o(n);return n}function Sn(t,e){let n=typeof t.content=="string"?t.content:JSON.stringify(t.content);return Math.ceil(n.length/4)}function er(t,e){return t.reduce((n,o)=>n+Sn(o),0)}function _r(t={}){return (e,n={})=>{let o={...t,...n},r=o.maxMessages??100,a=o.preserveRecentCount??5;if(e.length<=r)return {keep:[...e],toSummarize:[],estimatedTokens:er(e)};let s=e.slice(-a),c=e.slice(0,-a),u=Math.max(0,r-a),l=c.slice(-u),d=c.slice(0,-u||void 0),f=[...l,...s];return {keep:f,toSummarize:d.length>0?d:[],estimatedTokens:er(f)}}}function Nr(t={}){return (e,n={})=>{let o={...t,...n},r=o.maxTokens??4e3,a=o.preserveRecentCount??5,s=o.countSystemMessages??true,c=e.slice(-a),u=e.slice(0,-a),l=c.reduce((k,w)=>!s&&w.role==="system"?k:k+Sn(w),0),d=[],f=[],m=l;for(let k=u.length-1;k>=0;k--){let w=u[k],y=!s&&w.role==="system"?0:Sn(w);if(m+y<=r)d.unshift(w),m+=y;else {f.push(...u.slice(0,k+1));break}}return {keep:[...d,...c],toSummarize:f,estimatedTokens:m}}}function ts(t={}){let e=_r(t),n=Nr(t);return (o,r={})=>{let a={...t,...r},s=e(o,a),c=n(o,a);return s.keep.length<=c.keep.length?s:c}}function ns(t){let{strategy:e,summarizer:n,strategyConfig:o={},autoManage:r=false,onMemoryManaged:a,onManageError:s,maxContextTokens:c}=t,u={messages:[],summaries:[],totalMessagesProcessed:0,estimatedTokens:0},l=false;async function d(){if(l)return {messagesBefore:u.messages.length,messagesAfter:u.messages.length,messagesSummarized:0,estimatedTokensBefore:u.estimatedTokens,estimatedTokensAfter:u.estimatedTokens};l=true;try{let m=u.messages.length,k=u.estimatedTokens,w=e(u.messages,o);if(w.toSummarize.length===0)return {messagesBefore:m,messagesAfter:m,messagesSummarized:0,estimatedTokensBefore:k,estimatedTokensAfter:w.estimatedTokens};let y;n&&w.toSummarize.length>0&&(y=await n(w.toSummarize),u.summaries.push({content:y,messagesCount:w.toSummarize.length,createdAt:Date.now()})),u.messages=w.keep,u.estimatedTokens=w.estimatedTokens;let T={messagesBefore:m,messagesAfter:u.messages.length,messagesSummarized:w.toSummarize.length,summary:y,estimatedTokensBefore:k,estimatedTokensAfter:w.estimatedTokens};return a?.(T),T}finally{l=false;}}function f(){if(l)return;e(u.messages,o).toSummarize.length>0&&d().catch(k=>{let w=k instanceof Error?k:new Error(String(k));s?s(w):console.error("[Directive Memory] Auto-manage error:",w);});}return {getState(){return {...u,messages:[...u.messages],summaries:u.summaries.map(m=>({...m}))}},addMessage(m){u.messages.push(m),u.totalMessagesProcessed++,u.estimatedTokens+=Sn(m),r&&f();},addMessages(m){for(let k of m)u.messages.push(k),u.totalMessagesProcessed++,u.estimatedTokens+=Sn(k);r&&f();},getContextMessages(){let m=[];if(u.summaries.length>0){let k=u.summaries.map(w=>w.content).join(`
|
|
1
|
+
'use strict';var chunkWCJFIC22_cjs=require('./chunk-WCJFIC22.cjs'),chunkW6MVJKWN_cjs=require('./chunk-W6MVJKWN.cjs'),chunkB4ATEGA2_cjs=require('./chunk-B4ATEGA2.cjs'),internals=require('@directive-run/core/internals'),plugins=require('@directive-run/core/plugins'),re=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var re__default=/*#__PURE__*/_interopDefault(re);function cn(t){let{patterns:e=[/\b\d{3}-\d{2}-\d{4}\b/g,/\b\d{16}\b/g,/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi],redact:r=false,redactReplacement:s="[REDACTED]"}=t;return n=>{let o=n.input,a=false;for(let c of e)c.lastIndex=0,c.test(o)&&(a=true,r&&(c.lastIndex=0,o=o.replace(c,s)));return a&&!r?{passed:false,reason:"Input contains PII"}:{passed:true,transformed:r&&a?o:void 0}}}function un(t){let{checkFn:e,message:r="Content flagged by moderation"}=t;return async s=>{let n="output"in s?typeof s.output=="string"?s.output:JSON.stringify(s.output):s.input,o=await e(n);return {passed:!o,reason:o?r:void 0}}}function ln(t){let{maxTokensPerMinute:e=1e5,maxRequestsPerMinute:r=60}=t,s=Math.max(r,1e3),n=[],o=[],a=6e4;function c(u,l){let p=0,d=u.length;for(;p<d;){let y=p+d>>>1;(u[y]??0)<l?p=y+1:d=y;}return p}let i=(u,l)=>{let p=Date.now(),d=p-a,y=c(n,d);y>0&&(n=n.slice(y));let f=c(o,d);f>0&&(o=o.slice(f));let h=l.facts[chunkB4ATEGA2_cjs.c]?.tokenUsage??0,g=n.length,b=o.length;return g+h>e?{passed:false,reason:"Token rate limit exceeded"}:b>=r?{passed:false,reason:"Request rate limit exceeded"}:(o.length<s&&o.push(p),n.length<s&&n.push(p),{passed:true})};return i.reset=()=>{n=[],o=[];},i}function dn(t){let{allowlist:e,denylist:r,caseSensitive:s=false}=t,n=e?.map(a=>s?a:a.toLowerCase()),o=r?.map(a=>s?a:a.toLowerCase());return a=>{let c=s?a.toolCall.name:a.toolCall.name.toLowerCase();return n&&!n.includes(c)?{passed:false,reason:`Tool "${a.toolCall.name}" not in allowlist`}:o?.includes(c)?{passed:false,reason:`Tool "${a.toolCall.name}" is blocked`}:{passed:true}}}function pn(t){let{validate:e,errorPrefix:r="Output schema validation failed"}=t;return s=>{let n=e(s.output);return typeof n=="boolean"?{passed:n,reason:n?void 0:r}:n.valid?{passed:true}:{passed:false,reason:n.errors?.length?`${r}: ${n.errors.join("; ")}`:r}}}function gn(t){let{type:e,requiredFields:r=[],minLength:s,maxLength:n,minStringLength:o,maxStringLength:a}=t;return c=>{let i=c.output;switch(e){case "string":return typeof i!="string"?{passed:false,reason:`Expected string, got ${typeof i}`}:o!==void 0&&i.length<o?{passed:false,reason:`String too short: ${i.length} < ${o}`}:a!==void 0&&i.length>a?{passed:false,reason:`String too long: ${i.length} > ${a}`}:{passed:true};case "number":return typeof i!="number"||Number.isNaN(i)?{passed:false,reason:`Expected number, got ${typeof i}`}:{passed:true};case "boolean":return typeof i!="boolean"?{passed:false,reason:`Expected boolean, got ${typeof i}`}:{passed:true};case "object":if(typeof i!="object"||i===null||Array.isArray(i))return {passed:false,reason:`Expected object, got ${Array.isArray(i)?"array":typeof i}`};for(let u of r)if(!(u in i))return {passed:false,reason:`Missing required field: ${u}`};return {passed:true};case "array":return Array.isArray(i)?s!==void 0&&i.length<s?{passed:false,reason:`Array too short: ${i.length} < ${s}`}:n!==void 0&&i.length>n?{passed:false,reason:`Array too long: ${i.length} > ${n}`}:{passed:true}:{passed:false,reason:`Expected array, got ${typeof i}`};default:return {passed:false,reason:`Unknown type: ${e}`}}}}function mn(t){let{maxCharacters:e,maxTokens:r,estimateTokens:s=n=>Math.ceil(n.length/4)}=t;return n=>{let o=internals.safeStringify(n.output);if(e!==void 0&&o.length>e)return {passed:false,reason:`Output too long: ${o.length} characters (max: ${e})`};if(r!==void 0){let a=s(o);if(a>r)return {passed:false,reason:`Output too long: ~${a} tokens (max: ${r})`}}return {passed:true}}}function fn(t){let{blockedPatterns:e,caseSensitive:r=false}=t;e.length===0&&console.warn("[Directive] createContentFilterGuardrail: blockedPatterns is empty \u2014 no content will be filtered");let s=e.map(n=>{if(n instanceof RegExp)return n;let o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(o,r?"g":"gi")});return n=>{let o=internals.safeStringify(n.output);for(let a of s)if(a.lastIndex=0,a.test(o))return {passed:false,reason:`Output contains blocked content matching: ${a.source}`};return {passed:true}}}function yn(t,...e){let r=t;for(let s of e)r=s(r);return r}function K(t,e){let r=typeof t.content=="string"?t.content:JSON.stringify(t.content);return Math.ceil(r.length/4)}function de(t,e){return t.reduce((r,s)=>r+K(s),0)}function Ce(t={}){return (e,r={})=>{let s={...t,...r},n=s.maxMessages??100,o=s.preserveRecentCount??5;if(e.length<=n)return {keep:[...e],toSummarize:[],estimatedTokens:de(e)};let a=e.slice(-o),c=e.slice(0,-o),i=Math.max(0,n-o),u=c.slice(-i),l=c.slice(0,-i||void 0),p=[...u,...a];return {keep:p,toSummarize:l.length>0?l:[],estimatedTokens:de(p)}}}function Me(t={}){return (e,r={})=>{let s={...t,...r},n=s.maxTokens??4e3,o=s.preserveRecentCount??5,a=s.countSystemMessages??true,c=e.slice(-o),i=e.slice(0,-o),u=c.reduce((y,f)=>!a&&f.role==="system"?y:y+K(f),0),l=[],p=[],d=u;for(let y=i.length-1;y>=0;y--){let f=i[y],m=!a&&f.role==="system"?0:K(f);if(d+m<=n)l.unshift(f),d+=m;else {p.push(...i.slice(0,y+1));break}}return {keep:[...l,...c],toSummarize:p,estimatedTokens:d}}}function hn(t={}){let e=Ce(t),r=Me(t);return (s,n={})=>{let o={...t,...n},a=e(s,o),c=r(s,o);return a.keep.length<=c.keep.length?a:c}}function vn(t){let{strategy:e,summarizer:r,strategyConfig:s={},autoManage:n=false,onMemoryManaged:o,onManageError:a,maxContextTokens:c}=t,i={messages:[],summaries:[],totalMessagesProcessed:0,estimatedTokens:0},u=false;async function l(){if(u)return {messagesBefore:i.messages.length,messagesAfter:i.messages.length,messagesSummarized:0,estimatedTokensBefore:i.estimatedTokens,estimatedTokensAfter:i.estimatedTokens};u=true;try{let d=i.messages.length,y=i.estimatedTokens,f=e(i.messages,s);if(f.toSummarize.length===0)return {messagesBefore:d,messagesAfter:d,messagesSummarized:0,estimatedTokensBefore:y,estimatedTokensAfter:f.estimatedTokens};let m;r&&f.toSummarize.length>0&&(m=await r(f.toSummarize),i.summaries.push({content:m,messagesCount:f.toSummarize.length,createdAt:Date.now()})),i.messages=f.keep,i.estimatedTokens=f.estimatedTokens;let E={messagesBefore:d,messagesAfter:i.messages.length,messagesSummarized:f.toSummarize.length,summary:m,estimatedTokensBefore:y,estimatedTokensAfter:f.estimatedTokens};return o?.(E),E}finally{u=false;}}function p(){if(u)return;e(i.messages,s).toSummarize.length>0&&l().catch(y=>{let f=y instanceof Error?y:new Error(String(y));a?a(f):console.error("[Directive Memory] Auto-manage error:",f);});}return {getState(){return {...i,messages:[...i.messages],summaries:i.summaries.map(d=>({...d}))}},addMessage(d){i.messages.push(d),i.totalMessagesProcessed++,i.estimatedTokens+=K(d),n&&p();},addMessages(d){for(let y of d)i.messages.push(y),i.totalMessagesProcessed++,i.estimatedTokens+=K(y);n&&p();},getContextMessages(){let d=[];if(i.summaries.length>0){let y=i.summaries.map(f=>f.content).join(`
|
|
18
2
|
|
|
19
3
|
---
|
|
20
4
|
|
|
21
|
-
`);
|
|
5
|
+
`);d.push({role:"system",content:`[Previous conversation summary]
|
|
22
6
|
|
|
23
|
-
${
|
|
24
|
-
`);return
|
|
25
|
-
[truncated]`}}function
|
|
7
|
+
${y}`});}if(d.push(...i.messages),c){let y=de(d);y>c&&console.warn(`[Directive Memory] Context messages (${y} tokens) exceed maxContextTokens (${c}). Consider calling manage() or reducing message count.`);}return d},manage:l,isManaging(){return u},clear(){i={messages:[],summaries:[],totalMessagesProcessed:0,estimatedTokens:0};},export(){return {...i,messages:[...i.messages],summaries:i.summaries.map(d=>({...d}))}},import(d){i={...d,messages:[...d.messages],summaries:d.summaries.map(y=>({...y}))};}}}function bn(t=500){return async e=>{let r=e.filter(s=>s.role!=="system").map(s=>{let n=typeof s.content=="string"?s.content:JSON.stringify(s.content);return `${s.role}: ${n.slice(0,100)}${n.length>100?"...":""}`}).join(`
|
|
8
|
+
`);return r.length<=t?r:r.slice(0,t)+`
|
|
9
|
+
[truncated]`}}function Sn(){return async t=>{let e=[];for(let r of t)if(r.role==="user"){let n=(typeof r.content=="string"?r.content:JSON.stringify(r.content)).match(/[^.!?]*\?/g);n&&e.push(...n.map(o=>`Q: ${o.trim()}`));}return e.length===0?`[${t.length} messages processed - no key questions found]`:`Key topics discussed:
|
|
26
10
|
${e.join(`
|
|
27
|
-
`)}`}}function
|
|
11
|
+
`)}`}}function En(t,e={}){let{maxSummaryLength:r=500,preserveKeyFacts:s=true}=e;return async n=>{let o=n.filter(c=>c.role!=="system").map(c=>{let i=typeof c.content=="string"?c.content:JSON.stringify(c.content);return `${c.role.toUpperCase()}: ${i}`}).join(`
|
|
28
12
|
|
|
29
|
-
`),
|
|
30
|
-
${
|
|
13
|
+
`),a=`Summarize the following conversation in ${r} characters or less.
|
|
14
|
+
${s?"Preserve key facts, decisions, and action items.":""}
|
|
31
15
|
Focus on information that would be useful context for continuing the conversation.
|
|
32
16
|
|
|
33
17
|
CONVERSATION:
|
|
34
|
-
${
|
|
35
|
-
|
|
36
|
-
SUMMARY:`;return t(s)}}var tr=class{buffer=[];maxSize;strategy;pullWaiters=[];pushWaiters=[];closed=false;droppedCount=0;constructor(e="buffer",n=1e3){this.strategy=e,this.maxSize=n;}async push(e){if(this.closed)return false;let n=this.pullWaiters.shift();if(n)return n(e),true;if(this.buffer.length>=this.maxSize)switch(this.strategy){case "drop":return this.droppedCount++,false;case "block":if(await new Promise(o=>{this.pushWaiters.push(o);}),this.closed)return false;break;}return this.buffer.push(e),true}async pull(){let e=this.pushWaiters.shift();return e&&e(),this.buffer.length>0?this.buffer.shift():this.closed?null:new Promise(n=>{this.pullWaiters.push(n);})}close(){this.closed=true;for(let e of this.pullWaiters)e(null);this.pullWaiters=[];for(let e of this.pushWaiters)e();this.pushWaiters=[];}getDroppedCount(){return this.droppedCount}};function as(t,e={}){let{streamingGuardrails:n=[]}=e;return (o,r,a={})=>{let{signal:s,backpressure:c="buffer",bufferSize:u=1e3,guardrailCheckInterval:l=50,stopOnGuardrail:d=true}=a;if(l<=0||!Number.isFinite(l))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${l}`);let f=new tr(c,u),m=new AbortController,k="",w=0,y=false,T=Date.now(),R;s&&(R=()=>m.abort(),s.addEventListener("abort",R));let v=()=>{R&&s&&s.removeEventListener("abort",R);};async function C(){for(let _ of n)try{let q=await _.check(k,w);if(!q.passed){let ye=_.stopOnFail!==!1,x={type:"guardrail_triggered",guardrailName:_.name,reason:q.reason??"Guardrail check failed",partialOutput:k,stopped:ye};return await f.push(x),ye&&(typeof d=="function"?d:()=>d)(x)&&(y=!0,m.abort()),x}}catch{}return null}let P=(async()=>{await f.push({type:"progress",phase:"starting",message:"Starting agent"});try{let _=await t(o,r,{signal:m.signal,onToken:async x=>{y||(w++,k+=x,await f.push({type:"token",data:x,tokenCount:w}),w%l===0&&await C());},onToolStart:async(x,G,J)=>{await f.push({type:"progress",phase:"tool_calling",message:`Calling ${x}`}),await f.push({type:"tool_start",tool:x,toolCallId:G,arguments:J});},onToolEnd:async(x,G,J)=>{await f.push({type:"tool_end",tool:x,toolCallId:G,result:J}),await f.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async x=>{await f.push({type:"message",message:x});}});await C();let q=Date.now()-T,ye=f.getDroppedCount();return await f.push({type:"done",totalTokens:_.totalTokens,duration:q,droppedTokens:ye}),f.close(),_}catch(_){let q={type:"error",error:_ instanceof Error?_:new Error(String(_)),partialOutput:k||void 0};throw await f.push(q),f.close(),_}finally{v();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let _=await f.pull();return _===null?{done:true,value:void 0}:{done:false,value:_}}}}},result:P,abort:()=>m.abort()}}}function is(t){let{checkFn:e,threshold:n=.8,stopOnFail:o=true}=t;return {name:"toxicity-streaming",stopOnFail:o,async check(r){let a=await e(r);return a>n?{passed:false,reason:`Toxicity score ${a.toFixed(2)} exceeds threshold ${n}`,severity:"critical"}:{passed:true}}}}function us(t){let{maxTokens:e,warnAt:n,stopOnFail:o=true}=t,r=false;return {name:"length-streaming",stopOnFail:o,check(a,s){return s>=e?{passed:false,reason:`Output exceeded maximum length of ${e} tokens`,severity:"error"}:n&&s>=n&&!r?(r=true,{passed:true,warning:`Approaching maximum length: ${s}/${e} tokens`,severity:"warning"}):{passed:true}}}}function cs(t){let{patterns:e,stopOnFail:n=true}=t;return {name:"pattern-streaming",stopOnFail:n,check(o){for(let{regex:r,name:a}of e)if(r.lastIndex=0,r.test(o))return {passed:false,reason:`Detected ${a} pattern in output`,severity:"error"};return {passed:true}}}}function ls(t,e={}){let{name:n="combined-streaming",stopOnFirstFail:o=true}=e;return {name:n,stopOnFail:o,async check(r,a){let s=[];for(let c of t){let u=await c.check(r,a);if(!u.passed){if(o)return {...u,reason:`[${c.name}] ${u.reason}`};s.push(`[${c.name}] ${u.reason??"failed"}`);}}return s.length>0?{passed:false,reason:s.join("; ")}:{passed:true}}}}function ds(t,e,n={}){let{minTokens:o=0,stopOnFail:r=true}=n;return {name:t,stopOnFail:r,async check(a,s){if(s<o)return {passed:true};let c=await e({output:a,agentName:"streaming",input:"",messages:[]},{agentName:"streaming",input:"",facts:{}});return {passed:c.passed,reason:c.reason,severity:c.passed?void 0:"error"}}}}async function ps(t){let e="";for await(let n of t)n.type==="token"&&(e+=n.data);return e}async function*gs(t,e){for await(let n of t)await e(n),yield n;}async function*ms(t,e){let n=new Set(e);for await(let o of t)n.has(o.type)&&(yield o);}async function*fs(t,e){for await(let n of t)yield await e(n);}var hs=1e4;function nr(t){if(t.length===0)return {stream:{[Symbol.asyncIterator](){let d={done:true,value:void 0};return {async next(){return d},async return(){return d}}}},getDroppedCount:()=>0};let e=[],n=[],o=t.length,r=false,a=0;function s(l){if(r)return;let d=n.shift();if(d){d(l);return}e.length<hs?e.push(l):a++;}function c(){if(o--,o<=0){r=true;for(let l of n)l(null);n.length=0;}}for(let l of t)(async()=>{try{for await(let d of l.stream)s({chunk:d,agentId:l.agentId});}catch(d){s({chunk:{type:"error",error:d instanceof Error?d:new Error(String(d))},agentId:l.agentId});}finally{c();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return e.length>0?{done:false,value:e.shift()}:r?{done:true,value:void 0}:new Promise(l=>{n.push(d=>{l(d===null?{done:true,value:void 0}:{done:false,value:d});});})},return(){r=true,e.length=0;for(let l of n)l(null);return n.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>a}}var rr={successRate:.5,latency:.3,circuitState:.2};function or(t={}){let e=t.windowMs??6e4,n=t.maxNormalLatencyMs??5e3,o=t.maxEventsPerAgent??1e3,r={successRate:t.weights?.successRate??rr.successRate,latency:t.weights?.latency??rr.latency,circuitState:t.weights?.circuitState??rr.circuitState};if(!Number.isFinite(e)||e<=0)throw new Error("[Directive HealthMonitor] windowMs must be a positive number");if(!Number.isFinite(n)||n<=0)throw new Error("[Directive HealthMonitor] maxNormalLatencyMs must be a positive number");if(!Number.isFinite(o)||o<1)throw new Error("[Directive HealthMonitor] maxEventsPerAgent must be >= 1");for(let[y,T]of Object.entries(r))if(T<0||T>1)throw new Error(`[Directive HealthMonitor] weight "${y}" must be between 0 and 1 (got ${T})`);let a=r.successRate+r.latency+r.circuitState;if(Math.abs(a-1)>.01)throw new Error(`[Directive HealthMonitor] weights must sum to ~1.0 (tolerance: \xB10.01, got ${a.toFixed(4)})`);let s=new Map,c=new Map,u=0,l=null,d=-1;function f(y){let T=s.get(y);return T||(T=[],s.set(y,T)),T}function m(y,T){let R=T-e,v=0;for(;v<y.length&&y[v].timestamp<R;)v++;let C=y.length-v-o;C>0&&(v+=C),v>0&&y.splice(0,v);}function k(y){let T=s.get(y);if(!T||T.length===0)return 50;let R=Date.now();if(m(T,R),T.length===0)return 50;let C=T.filter(x=>x.success).length/T.length,P=T.reduce((x,G)=>x+G.latencyMs,0)/T.length,H=Math.min(P/n,1),_=c.get(y)??"CLOSED",q=_==="CLOSED"?1:_==="HALF_OPEN"?.5:0,ye=C*r.successRate+(1-H)*r.latency+q*r.circuitState;return Math.round(ye*100)}function w(y){let T=f(y),R=Date.now();m(T,R);let v=T.filter(q=>q.success).length,C=T.length-v,P=T.length>0?v/T.length:0,H=T.length>0?T.reduce((q,ye)=>q+ye.latencyMs,0)/T.length:0,_=[];for(let q=T.length-1;q>=0&&_.length<5;q--)T[q].errorMessage&&_.unshift(T[q].errorMessage);return {agentId:y,circuitState:c.get(y)??"CLOSED",successRate:P,avgLatencyMs:H,recentFailures:C,recentSuccesses:v,healthScore:k(y),lastErrors:_}}return {recordSuccess(y,T){let R=f(y);R.push({success:true,latencyMs:T,timestamp:Date.now()}),m(R,Date.now()),u++;},recordFailure(y,T,R){let v=f(y);v.push({success:false,latencyMs:T,timestamp:Date.now(),errorMessage:R?.message}),m(v,Date.now()),u++;},getMetrics(y){return w(y)},getAllMetrics(){if(u===d&&l)return l;let y=Object.create(null);for(let T of s.keys())y[T]=w(T);return l=y,d=u,y},getHealthScore(y){return k(y)},updateCircuitState(y,T){c.set(y,T),u++;},reset(){s.clear(),c.clear(),u++,l=null,d=-1;}}}var un=class extends Error{iterations;history;lastResult;totalTokens;constructor(e){super(`[Directive Reflection] Exhausted ${e.iterations} iterations without passing evaluation. Last feedback: ${e.history[e.history.length-1]?.feedback??"(none)"}`),this.name="ReflectionExhaustedError",this.iterations=e.iterations,this.history=e.history,this.lastResult=e.lastResult,this.totalTokens=e.totalTokens;}};function ys(t,e,n){return `${t}
|
|
37
|
-
|
|
38
|
-
Feedback on your previous response:
|
|
39
|
-
${e}
|
|
40
|
-
|
|
41
|
-
Please improve your response.`}function bs(t,e){let n=e.maxIterations??2,o=e.buildRetryInput??ys,r=e.onExhausted??"accept-last";if(n<1)throw new Error("[Directive Reflection] maxIterations must be >= 1");return typeof process<"u"&&process.env?.NODE_ENV!=="production"&&n>3&&console.warn("[Directive Reflection] maxIterations > 3 rarely improves quality. Consider using maxIterations <= 3 to avoid unbounded token burn."),async(a,s,c)=>{let u=[],l=s,d=0,f=null;for(let m=0;m<n;m++){let k=Date.now(),w=await t(a,l,c);f=w,d+=w.totalTokens;let y={input:s,iteration:m,result:w,history:[...u]},T=await e.evaluate(w.output,y);u.push(T);let R=Date.now()-k;try{e.onIteration?.({iteration:m,passed:T.passed,feedback:T.feedback,score:T.score,durationMs:R});}catch{}if(T.passed)return {...w,totalTokens:d};if(e.budgetThreshold!==void 0&&d>=e.budgetThreshold)break;m<n-1&&T.feedback&&(l=o(s,T.feedback,m));}if(r==="throw")throw new un({iterations:n,history:u,lastResult:f,totalTokens:d});return {...f,totalTokens:d}}}function vs(t,e,n){return {type:"parallel",handlers:t,merge:e,...n}}function ks(t,e){return {type:"sequential",handlers:t,...e}}function ws(t,e,n){return {type:"supervisor",supervisor:t,workers:e,...n}}function Rs(t,e,n){return {type:"dag",nodes:t,merge:e??(o=>o.outputs),...n}}function Ss(t,e,n){return {type:"reflect",handler:t,evaluator:e,...n}}function Ts(t,e){return {type:"race",handlers:t,...e}}function Es(t,e,n){return {type:"goal",nodes:t,when:e,...n}}function As(){return {select:t=>t}}function xs(t){let e=t?.topN??3;return {select:(n,o)=>[...n].sort((a,s)=>{let c=o[a]?.avgSatisfactionDelta??0;return (o[s]?.avgSatisfactionDelta??0)-c}).slice(0,e)}}function Cs(){return {select:(t,e)=>[...t].sort((o,r)=>{let a=e[o],s=e[r];if(!a||a.runs===0)return -1;if(!s||s.runs===0)return 1;let c=a.avgSatisfactionDelta>0?a.tokens/a.runs/a.avgSatisfactionDelta:Number.POSITIVE_INFINITY,u=s.avgSatisfactionDelta>0?s.tokens/s.runs/s.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return c-u})}}function sr(t){switch(t.type){case "parallel":return {type:"parallel",handlers:t.handlers,minSuccess:t.minSuccess,timeout:t.timeout};case "sequential":return {type:"sequential",handlers:t.handlers,continueOnError:t.continueOnError};case "supervisor":return {type:"supervisor",supervisor:t.supervisor,workers:t.workers,maxRounds:t.maxRounds};case "dag":{let e=Object.create(null);for(let[n,o]of Object.entries(t.nodes))e[n]={handler:o.handler,deps:o.deps,timeout:o.timeout,priority:o.priority};return {type:"dag",nodes:e,timeout:t.timeout,maxConcurrent:t.maxConcurrent,onNodeError:t.onNodeError}}case "reflect":return {type:"reflect",handler:t.handler,evaluator:t.evaluator,maxIterations:t.maxIterations,onExhausted:t.onExhausted,timeout:t.timeout,threshold:typeof t.threshold=="number"?t.threshold:void 0};case "race":return {type:"race",handlers:t.handlers,timeout:t.timeout,minSuccess:t.minSuccess};case "debate":return {type:"debate",handlers:t.handlers,evaluator:t.evaluator,maxRounds:t.maxRounds,timeout:t.timeout};case "goal":{let e=Object.create(null);for(let[n,o]of Object.entries(t.nodes))e[n]={handler:o.handler,produces:o.produces,requires:o.requires,allowRerun:o.allowRerun,priority:o.priority};return {type:"goal",nodes:e,maxSteps:t.maxSteps,timeout:t.timeout}}}}var Ms=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function Ds(t,e){let n=t&&typeof t=="object"&&t.type==="converge"?{...t,type:"goal"}:t;if(!n||typeof n!="object"||!Ms.has(n.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${t?.type}"`);let o=Object.create(null);for(let[a,s]of Object.entries(n))a!=="__proto__"&&a!=="constructor"&&a!=="prototype"&&(o[a]=s);let r=o;if(!r.handler&&r.agent&&typeof r.agent=="string"&&(r.handler=r.agent,delete r.agent),!r.handlers&&r.agents&&Array.isArray(r.agents)&&(r.handlers=r.agents,delete r.agents),r.nodes&&typeof r.nodes=="object")for(let a of Object.values(r.nodes))!a.handler&&a.agent&&typeof a.agent=="string"&&(a.handler=a.agent,delete a.agent);return {...o,...e}}function ar(t){if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}function Ps(t,e,n,o){return {when:t,require:r=>{let a=typeof e=="function"?e(r):e,s=typeof n=="function"?n(r):n;return {type:"RUN_AGENT",agent:a,input:s}},priority:o}}function Is(t,e,n){return {type:"RUN_AGENT",agent:t,input:e,context:n}}function Os(t,e=`
|
|
42
|
-
|
|
43
|
-
`){return t.map(n=>typeof n.output=="string"?n.output:ar(n.output)).join(e)}function _s(t,e){if(t.length===0)throw new Error("[Directive MultiAgent] No results to pick from");return t.reduce((n,o)=>e(o)>e(n)?o:n)}function Ns(t){return t.map(e=>e.output)}function $s(t){return t.reduce((e,n)=>e+n.totalTokens,0)}function js(...t){if(t.length===0)throw new Error("[Directive MultiAgent] composePatterns requires at least one pattern");return async(e,n)=>{let o=n,r;for(let a of t){switch(a.type){case "parallel":{let s=a,c=s.handlers.map(()=>o);r=await e.runParallel(s.handlers,c,s.merge,{minSuccess:s.minSuccess,timeout:s.timeout});break}case "sequential":{let s=a,c=await e.runSequential(s.handlers,o,{transform:s.transform}),u=c[c.length-1];r=s.extract?s.extract(u?.output):u?.output;break}case "supervisor":{let s=a,c=s.maxRounds??5;if(c<1||!Number.isFinite(c))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let u=[],l=await e.runAgent(s.supervisor,o);for(let d=0;d<c;d++){let f=l.output,m;if(typeof f=="string")try{m=JSON.parse(f);}catch{try{let w=f.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),y=an(w);if(y&&typeof y=="object"&&"action"in y)m=y;else break}catch{break}}else if(f&&typeof f=="object"&&"action"in f)m=f;else break;if(m.action==="complete"||!m.worker||!s.workers.includes(m.worker))break;let k=await e.runAgent(m.worker,m.workerInput??"");u.push(k),l=await e.runAgent(s.supervisor,`Worker ${m.worker} completed with result: ${ar(k.output)}`);}r=s.extract?s.extract(l.output,u):l.output;break}case "dag":{let s=a,c={input:o,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 u=Object.keys(s.nodes);for(let l of u){let d=s.nodes[l];c.statuses[l]="running";try{let f=o;if(d.transform)f=d.transform(c);else if(d.deps&&d.deps.length>0){let k=Object.create(null);for(let w of d.deps)c.outputs[w]!==void 0&&(k[w]=c.outputs[w]);f=JSON.stringify(k);}let m=await e.runAgent(d.handler,f);c.outputs[l]=m.output,c.results[l]=m,c.statuses[l]="completed";}catch(f){if(c.statuses[l]="error",c.errors[l]=f instanceof Error?f.message:String(f),s.onNodeError==="fail")throw f}}r=await s.merge(c);break}case "reflect":{let s=a,c=s.maxIterations??2,u=s.parseEvaluation??(m=>{if(typeof m=="string")try{return JSON.parse(m)}catch{return {passed:false,feedback:m}}return m&&typeof m=="object"&&"passed"in m?m:{passed:false,feedback:"Invalid evaluator output"}}),l=s.buildRetryInput??((m,k)=>`${m}
|
|
44
|
-
|
|
45
|
-
Feedback on your previous response:
|
|
46
|
-
${k}
|
|
47
|
-
|
|
48
|
-
Please improve your response.`),d=o,f;for(let m=0;m<c;m++){f=(await e.runAgent(s.handler,d)).output;let w=typeof f=="string"?f:JSON.stringify(f),y=await e.runAgent(s.evaluator,w),T=u(y.output);if(T.passed)break;m<c-1&&T.feedback&&(d=l(o,T.feedback,m));}r=s.extract?s.extract(f):f;break}case "race":{let s=a;r=(await e.runRace(s.handlers,o,{extract:s.extract,timeout:s.timeout})).result;break}case "debate":{let s=a;r=(await e.runDebate(s.handlers,s.evaluator,o,{maxRounds:s.maxRounds,extract:s.extract,parseJudgement:s.parseJudgement,signal:s.signal,timeout:s.timeout})).result;break}case "goal":{let s=a,c=typeof o=="string"?{input:o}:(()=>{try{return JSON.parse(o)}catch{return {input:o}}})();r=(await e.runGoal(s.nodes,c,s.when,{satisfaction:s.satisfaction,maxSteps:s.maxSteps,extract:s.extract,timeout:s.timeout,signal:s.signal,selectionStrategy:s.selectionStrategy,relaxation:s.relaxation,onStep:s.onStep,onStall:s.onStall})).result;break}default:throw new Error(`[Directive MultiAgent] composePatterns: unknown pattern type "${a.type}"`)}r!==void 0&&(o=typeof r=="string"?r:ar(r));}return r}}function ir(t,e){return Object.entries(t).filter(([,n])=>{let o=n.capabilities??[];return e.every(r=>o.includes(r))}).map(([n])=>n)}function Gs(t,e,n,o){let{priority:r,select:a}=o??{},s=[],c=0,u=-1;return {when:l=>{let d=e(l);return s=ir(t,d),c++,s.length>0},require:l=>{let d=c!==u&&s.length>0?(u=c,s):ir(t,e(l));if(d.length===0)throw new Error(`[Directive MultiAgent] No agent matches capabilities: ${e(l).join(", ")}`);return {type:"RUN_AGENT",agent:a?a(d,t):d[0],input:n(l)}},priority:r}}var $r=false;function Bs(t){let{when:e,agent:n,input:o,priority:r,context:a,options:s}=t;s&&!$r&&($r=true,console.warn("[Directive MultiAgent] spawnOnCondition `options` is deprecated. Use top-level `priority` and `context` instead."));let c=r??s?.priority,u=a??s?.context;return {when:e,require:l=>({type:"RUN_AGENT",agent:n,input:o(l),context:u}),priority:c}}function Ls(t){let{handlers:e,evaluator:n,maxRounds:o,extract:r,parseJudgement:a,signal:s,timeout:c}=t;if(e.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(o!=null&&(o<1||!Number.isFinite(o)))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");return {type:"debate",handlers:e,evaluator:n,maxRounds:o,extract:r,parseJudgement:a,signal:s,timeout:c}}async function Fs(t,e,n){return t.runDebate(e.handlers,e.evaluator,n,{maxRounds:e.maxRounds,extract:e.extract,parseJudgement:e.parseJudgement,signal:e.signal,timeout:e.timeout})}function qs(t,e,n){let o,r=0,a=-1;return {when:s=>{let u=s.__derived?.[t];return o=u,r++,e(u)},require:s=>{let c=r!==a?(a=r,o):s.__derived?.[t];return {type:"RUN_AGENT",agent:n.agent,input:n.input(c),context:n.context}},priority:n.priority}}function Us(t,e){let{agent:n,input:o,priority:r,context:a}=e;return {when:t,require:s=>({type:"RUN_AGENT",agent:n,input:o(s,0),context:a}),priority:r}}function Ht(t){if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}function Js(t,e){if(Object.is(t,e))return true;if(typeof t!=typeof e||t===null||e===null||typeof t!="object")return false;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return false;for(let s=0;s<t.length;s++)if(t[s]!==e[s])return false;return true}let n=t,o=e,r=Object.keys(n),a=Object.keys(o);if(r.length!==a.length)return false;for(let s of r)if(n[s]!==o[s])return false;return true}function cn(t){switch(t.type){case "sequential":return t.step;case "supervisor":return t.round;case "reflect":return t.iteration;case "debate":return t.round;case "dag":return t.completedCount;case "goal":return t.step}}function Ws(t){let e=cn(t),n=t.stepsTotal??null;switch(t.type){case "sequential":{let o=t.results.reduce((s,c)=>s+c.totalTokens,0),r=t.results.length>0?o/t.results.length:0,a=n!=null?n-e:null;return {percentage:n!=null&&n>0?Math.round(e/n*100):0,stepsCompleted:e,stepsTotal:n,tokensConsumed:o,estimatedTokensRemaining:r>0&&a!=null?Math.round(r*a):null,estimatedStepsRemaining:a}}case "supervisor":{let o=t.workerResults.reduce((a,s)=>a+s.totalTokens,0),r=n!=null?n-e:null;return {percentage:n!=null&&n>0?Math.round(e/n*100):0,stepsCompleted:e,stepsTotal:n,tokensConsumed:o,estimatedTokensRemaining:null,estimatedStepsRemaining:r}}case "reflect":{let o=t.history.reduce((a,s)=>a+s.producerTokens+s.evaluatorTokens,0),r=n!=null?n-e:null;return {percentage:n!=null&&n>0?Math.round(e/n*100):0,stepsCompleted:e,stepsTotal:n,tokensConsumed:o,estimatedTokensRemaining:null,estimatedStepsRemaining:r}}case "debate":{let o=t.tokensConsumed,r=n!=null?n-e:null;return {percentage:n!=null&&n>0?Math.round(e/n*100):0,stepsCompleted:e,stepsTotal:n,tokensConsumed:o,estimatedTokensRemaining:null,estimatedStepsRemaining:r}}case "dag":{let o=n??Object.keys(t.statuses).length,r=t.completedCount,a=Object.values(t.nodeResults).reduce((u,l)=>u+l.totalTokens,0),s=r>0?a/r:0,c=o-r;return {percentage:o>0?Math.round(r/o*100):0,stepsCompleted:r,stepsTotal:o,tokensConsumed:a,estimatedTokensRemaining:c>0?Math.round(s*c):0,estimatedStepsRemaining:c}}case "goal":{let o=Object.values(t.nodeOutputs).reduce((a,s)=>a+s.totalTokens,0),r=t.lastSatisfaction;return {percentage:Math.round(r*100),stepsCompleted:e,stepsTotal:n??null,tokensConsumed:o,estimatedTokensRemaining:null,estimatedStepsRemaining:t.stepMetrics.length>0?Vs(t):null}}}}function Vs(t){let e=t.stepMetrics;if(e.length<2)return null;let n=1-t.lastSatisfaction;if(n<=0)return 0;let r=e.reduce((a,s)=>a+Math.max(0,s.satisfactionDelta),0)/e.length;return r<=0?null:Math.ceil(n/r)}function Ks(t,e){if(t.type!==e.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${t.type} vs ${e.type}`);let n=r=>{switch(r.type){case "sequential":return r.results.reduce((a,s)=>a+s.totalTokens,0);case "supervisor":return r.workerResults.reduce((a,s)=>a+s.totalTokens,0);case "reflect":return r.history.reduce((a,s)=>a+s.producerTokens+s.evaluatorTokens,0);case "debate":return r.tokensConsumed;case "dag":return Object.values(r.nodeResults).reduce((a,s)=>a+s.totalTokens,0);case "goal":return Object.values(r.nodeOutputs).reduce((a,s)=>a+s.totalTokens,0)}},o={patternType:t.type,stepDelta:cn(e)-cn(t),tokensDelta:n(e)-n(t)};if(t.type==="goal"&&e.type==="goal"){let r=new Set(Object.keys(t.facts)),a=new Set(Object.keys(e.facts)),s=[],c=[],u=[];for(let l of a)r.has(l)?JSON.stringify(t.facts[l])!==JSON.stringify(e.facts[l])&&u.push({key:l,before:t.facts[l],after:e.facts[l]}):s.push(l);for(let l of r)a.has(l)||c.push(l);o.facts={added:s,removed:c,changed:u};}if(t.type==="dag"&&e.type==="dag"){let r=new Set(Object.entries(t.statuses).filter(([,a])=>a==="completed").map(([a])=>a));o.nodesCompleted=Object.entries(e.statuses).filter(([a,s])=>s==="completed"&&!r.has(a)).map(([a])=>a);}if(t.type==="goal"&&e.type==="goal"){let r=new Set(t.completedNodes);o.nodesCompleted=e.completedNodes.filter(a=>!r.has(a));}return o}async function Xs(t,e,n){let o=await e.load(n);if(!o)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${n}`);let r=structuredClone(o),a=Gr({...t,checkpointStore:e});return a.restore(r),a}var It=class{count;maxPermits;queue=[];constructor(e){if(e<1||!Number.isFinite(e))throw new Error(`[Directive Semaphore] Invalid max permits: ${e}. Must be a finite number >= 1.`);this.maxPermits=e,this.count=e;}createReleaseFn(){let e=false;return ()=>{e||(e=true,this.release());}}async acquire(e){if(e?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((n,o)=>{let r,a={resolve:s=>{r&&e&&e.removeEventListener("abort",r),n(s);},reject:o};this.queue.push(a),e&&(r=()=>{let s=this.queue.indexOf(a);s>=0&&(this.queue.splice(s,1),o(new Error("[Directive Semaphore] Aborted while waiting for permit")));},e.addEventListener("abort",r,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let e=this.queue.shift();e&&(this.count--,e.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let e=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),n=this.queue.splice(0,this.queue.length);for(let o of n)o.reject(e);this.count=this.maxPermits;}},Ys=adapterUtils.requirementGuard("RUN_AGENT");function Gr(t){let{runner:e,agents:n,patterns:o={},onHandoff:r,onHandoffComplete:a,maxHandoffHistory:s=1e3,debug:c=false,guardrails:u={},hooks:l={},memory:d,agentRetry:f,maxTokenBudget:m,plugins:k=[],onApprovalRequest:w,autoApproveToolCalls:y=true,approvalTimeoutMs:T=3e5,constraints:R={},resolvers:v={},circuitBreaker:C,budgetWarningThreshold:P=.8,onBudgetWarning:H,selfHealing:_,checkpointStore:q,breakpoints:ye=[],onBreakpoint:x,breakpointTimeoutMs:G=3e5,derive:J,scratchpad:se,tasks:B={}}=t,ie=typeof c=="object"?true:!!c,ae=5e3,I={...n},pe={...B},Ae=Object.create(null);for(let i of Object.keys(pe))Ae[i]={status:"idle"};let xe=new Map;if(!y&&!w)throw new Error(`[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. Tool calls would wait for approval indefinitely. Either:
|
|
49
|
-
- Set autoApproveToolCalls: true to auto-approve all tool calls
|
|
50
|
-
- Provide an onApprovalRequest callback to handle approvals programmatically`);if(P<0||P>1)throw new Error(`[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${P}`);let ft=new Set(["__coord","__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);for(let i of Object.keys(I))if(ft.has(i))throw new Error(`[Directive MultiAgent] Agent ID "${i}" is reserved and cannot be used`);for(let[i,p]of Object.entries(pe)){if(!i||i.trim()!==i)throw new Error(`[Directive MultiAgent] Task ID must be a non-empty trimmed string, got "${i}"`);if(ft.has(i))throw new Error(`[Directive MultiAgent] Task ID "${i}" is reserved and cannot be used`);if(p.timeout!==void 0&&(!Number.isFinite(p.timeout)||p.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${i}" timeout must be a finite number > 0`);if(p.maxConcurrent!==void 0&&(!Number.isFinite(p.maxConcurrent)||p.maxConcurrent<1||!Number.isInteger(p.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${i}" maxConcurrent must be a finite integer >= 1`);if(p.retry){let{attempts:h,delayMs:g}=p.retry;if(!Number.isFinite(h)||h<1)throw new Error(`[Directive MultiAgent] Task "${i}" retry attempts must be a finite number >= 1`);if(g!==void 0&&(!Number.isFinite(g)||g<0))throw new Error(`[Directive MultiAgent] Task "${i}" retry delayMs must be a finite number >= 0`)}}for(let[i,p]of Object.entries(pe))xe.set(i,new It(p.maxConcurrent??1));for(let i of Object.keys(pe))if(I[i])throw new Error(`[Directive MultiAgent] ID "${i}" is registered as both an agent and a task. IDs must be unique across both registries.`);let Gt=new Set([...Object.keys(I),...Object.keys(pe)]),Bt=[];for(let[i,p]of Object.entries(o)){let h=[];switch(p.type){case "parallel":h.push(...p.handlers);break;case "sequential":h.push(...p.handlers);break;case "supervisor":h.push(p.supervisor,...p.workers);break;case "dag":for(let g of Object.values(p.nodes))h.push(g.handler);break;case "reflect":h.push(p.handler,p.evaluator);break;case "race":h.push(...p.handlers);break;case "debate":h.push(...p.handlers,p.evaluator);break}for(let g of h)Gt.has(g)||Bt.push({patternId:i,agentId:g});}if(Bt.length>0){let i=Bt.map(({patternId:p,agentId:h})=>` - Pattern "${p}" references unknown agent "${h}"`).join(`
|
|
51
|
-
`);throw new Error(`[Directive MultiAgent] Pattern validation failed. The following agents are not registered:
|
|
52
|
-
${i}
|
|
53
|
-
|
|
54
|
-
Registered agents: ${[...Gt].join(", ")||"(none)"}`)}for(let[i,p]of Object.entries(o))p.type==="dag"&&Qs(i,p.nodes);let S=null,z=null;ie&&(S=fn({goToSnapshot:i=>{try{K.history?.goTo?.(i);}catch{}}}));let te=null,Se=null;_&&(te=or(_.healthMonitor),_.selectionStrategy==="round-robin"&&(Se=new Map));function re(i,p){try{l[i]?.(p);}catch(h){ie&&console.debug(`[Directive MultiAgent] hooks.${i} threw:`,h);}}let at={__globalTokens:core.t.number(),__status:core.t.string(),__handoffs:core.t.array(),__handoffResults:core.t.array(),__budgetWarningFired:core.t.boolean()};se&&(at[pt]=core.t.object()),J&&Object.keys(J).length>0&&(at.__derived=core.t.object());let Ot={facts:at,derivations:{},events:{},requirements:{}},$t=rn(R);m&&($t.__budgetLimit={priority:100,when:i=>adapterUtils.getBridgeFact(i,"__globalTokens")>m,require:{type:"__PAUSE_BUDGET_EXCEEDED"}});let ln=Object.create(null);for(let[i,p]of Object.entries(v))ln[i]={requirement:p.requirement,key:p.key,resolve:async(h,g)=>{let b=gt(g.facts),E={facts:{...g.facts,...b},runAgent:async(M,N,W)=>e(M,N,W),signal:g.signal};return p.resolve(h,E)}};ln.__pause={requirement:adapterUtils.requirementGuard("__PAUSE_BUDGET_EXCEEDED"),resolve:async()=>{it="paused",ie&&console.debug("[Directive MultiAgent] Budget exceeded \u2014 all agents paused");}},ln.__runAgent={requirement:Ys,resolve:async i=>{await Xe(i.agent,i.input);}};let D=core.createModule("__coord",{schema:Ot,init:i=>{adapterUtils.setBridgeFact(i,"__globalTokens",0),adapterUtils.setBridgeFact(i,"__status","idle"),adapterUtils.setBridgeFact(i,"__handoffs",[]),adapterUtils.setBridgeFact(i,"__handoffResults",[]),adapterUtils.setBridgeFact(i,"__budgetWarningFired",false),se&&adapterUtils.setBridgeFact(i,pt,{...se.init});},constraints:$t,resolvers:ln}),U=Object.create(null);U.__coord=D;for(let[i,p]of Object.entries(I)){let h=p.constraints?rn(p.constraints):{},g=Object.create(null);if(p.resolvers)for(let[b,A]of Object.entries(p.resolvers))g[b]={requirement:A.requirement,key:A.key,resolve:async(E,M)=>{let N=gt(M.facts),V={facts:{...M.facts,...N},runAgent:async(ee,Z,le)=>e(ee,Z,le),signal:M.signal};return A.resolve(E,V)}};U[i]=core.createModule(i,{schema:mn,init:b=>{st(b,{status:"idle",currentAgent:p.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(b,{pending:[],approved:[],rejected:[]}),Ct(b,[]),Mt(b,[]),bt(b,on());},constraints:h,resolvers:Object.keys(g).length>0?g:void 0});}let we=adapterUtils.createCallbackPlugin("directive-multi-agent-callbacks",{}),fe=[...k,we];ie&&S&&(z=hn(S,()=>{try{return K.history?.currentIndex??null}catch{return null}}),fe.push(z));let K=core.createSystem({modules:U,plugins:fe,history:ie?true:void 0});K.start();let Te=500,Ne=200,He=0,it="idle",ut=false,ct=0,Ee=null;function Ce(){if(ut)throw new Error("[Directive MultiAgent] Orchestrator has been disposed")}let ht=new Map;for(let[i,p]of Object.entries(I))ht.set(i,new It(p.maxConcurrent??1));let Pe=Object.create(null);for(let i of Object.keys(I))Pe[i]={status:"idle",runCount:0,totalTokens:0};let ge=s,he=[],Ue=[],Me=0;function _e(i){for(Ue.push(i);Ue.length>ge;)Ue.shift();}let Be=new Map,Rt=new Set;function St(){for(let i of Rt)i();}let be=Object.create(null),Qe=new Set;function jt(){let i=Object.create(null);for(let[g,b]of Object.entries(Pe))i[g]={status:b.status,lastInput:b.lastInput,lastOutput:b.lastOutput,lastError:b.lastError,runCount:b.runCount,totalTokens:b.totalTokens};let p=Je("__coord"),h={agents:i,coordinator:{globalTokens:He,status:it}};return se&&p&&(h.scratchpad=adapterUtils.getBridgeFact(p,pt)??{}),h}function Ie(){if(!J)return;let i=jt(),p=[],h=[];K.batch(()=>{for(let[b,A]of Object.entries(J))try{let E=A(i),M=be[b],N=!Js(E,M);be[b]=E,N&&p.push({derivId:b,newValue:E});}catch(E){h.push({derivId:b,derivError:E});}let g=Je("__coord");g&&adapterUtils.setBridgeFact(g,"__derived",{...be});});for(let{derivId:g,newValue:b}of p){S&&S.record({type:"derivation_update",timestamp:Date.now(),snapshotId:null,derivationId:g,valueType:typeof b}),re("onDerivationUpdate",{derivationId:g,value:b,timestamp:Date.now()});for(let A of Qe)try{A(g,b);}catch{}}for(let{derivId:g,derivError:b}of h)ie&&console.warn(`[Directive MultiAgent] Derivation "${g}" threw:`,b),re("onDerivationError",{derivationId:g,error:b instanceof Error?b:new Error(String(b)),timestamp:Date.now()});}let vt=new Set,Tt=new Map,Lt=se?{get(i){let p=Je("__coord"),h=adapterUtils.getBridgeFact(p,pt);if(!(h==null||!Object.hasOwn(h,i)))return h[i]},set(i,p){if(i==="__proto__"||i==="constructor"||i==="prototype")return;let h=Je("__coord"),g=[i];K.batch(()=>{let b=adapterUtils.getBridgeFact(h,pt)??{};adapterUtils.setBridgeFact(h,pt,{...b,[i]:p});}),zn(g,i,p),Ie();},has(i){let p=Je("__coord"),h=adapterUtils.getBridgeFact(p,pt);return h!=null&&Object.hasOwn(h,i)},delete(i){if(i==="__proto__"||i==="constructor"||i==="prototype")return;let p=Je("__coord");K.batch(()=>{let h=adapterUtils.getBridgeFact(p,pt)??{},{[i]:g,...b}=h;adapterUtils.setBridgeFact(p,pt,b);}),zn([i],i,void 0),Ie();},update(i){let p=Object.create(null);for(let b of Object.keys(i))b==="__proto__"||b==="constructor"||b==="prototype"||(p[b]=i[b]);let h=Je("__coord"),g=Object.keys(p);if(g.length!==0){K.batch(()=>{let b=adapterUtils.getBridgeFact(h,pt)??{};adapterUtils.setBridgeFact(h,pt,{...b,...p});});for(let[b,A]of Object.entries(p))zn(g,b,A);Ie();}},getAll(){let i=Je("__coord");return {...adapterUtils.getBridgeFact(i,pt)??{}}},subscribe(i,p){for(let h of i)Tt.has(h)||Tt.set(h,new Set),Tt.get(h).add(p);return ()=>{for(let h of i)Tt.get(h)?.delete(p);}},onChange(i){return vt.add(i),()=>{vt.delete(i);}},reset(){if(!se)return;let i=Je("__coord");K.batch(()=>{adapterUtils.setBridgeFact(i,pt,{...se.init});});}}:null;function zn(i,p,h){let g=Tt.get(p);if(g)for(let b of g)try{b(p,h);}catch{}for(let b of vt)try{b(p,h);}catch{}S&&p===i[i.length-1]&&S.record({type:"scratchpad_update",timestamp:Date.now(),snapshotId:null,keys:i}),p===i[i.length-1]&&re("onScratchpadUpdate",{keys:i,timestamp:Date.now()});}let Xt=new Map,dn=new Map;function uo(i,p,h){return new Promise((g,b)=>{let A=null,E=false,M,N=Je(i),W=()=>{E||(E=true,A&&(clearTimeout(A),A=null),M&&h&&h.removeEventListener("abort",M),V());},V=K.subscribe([`${i}.${Ut}`],()=>{let ee=yt(N);if(ee.resolved.includes(p)){W();let Z=Xt.get(p)??null;Xt.delete(p),g(Z);}else if(ee.cancelled.includes(p)){W(),Xt.delete(p);let Z=dn.get(p);dn.delete(p),b(new Error(Z?`[Directive MultiAgent] Breakpoint ${p} cancelled: ${Z}`:`[Directive MultiAgent] Breakpoint ${p} cancelled`));}});if(h){if(M=()=>{W(),b(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${p}`));},h.aborted){W(),b(new Error(`[Directive MultiAgent] Breakpoint wait aborted for ${p}`));return}h.addEventListener("abort",M,{once:true});}A=setTimeout(()=>{W(),Xt.delete(p),dn.delete(p),b(new Error(`[Directive MultiAgent] Breakpoint timeout: ${p} not resolved within ${Math.round(G/1e3)}s`));},G);})}async function zt(i,p,h,g,b,A){if(ye.length===0)return {input:g,skip:false};let E=Je(p),M={agentId:p,agentName:h,input:g,state:gt(E),breakpointType:i,patternId:A?.patternId,handoff:A?.handoff},N=wn(ye,i,M);if(!N)return {input:g,skip:false};let W=kn(),V={id:W,type:i,agentId:p,input:g,label:N.label,requestedAt:Date.now()};K.batch(()=>{let Z=yt(E);bt(E,{...Z,pending:[...Z.pending,V]});});try{x?.(V);}catch{}try{l.onBreakpoint?.(V);}catch{}S&&S.record({type:"breakpoint_hit",timestamp:Date.now(),agentId:p,snapshotId:null,breakpointId:W,breakpointType:i,label:N.label});let ee=await uo(p,W,b);return S&&S.record({type:"breakpoint_resumed",timestamp:Date.now(),agentId:p,snapshotId:null,breakpointId:W,modified:!!ee?.input,skipped:!!ee?.skip}),{input:ee?.input??g,skip:ee?.skip??false}}function Je(i){return K.facts[i]}function co(i,p,h){return new Promise((g,b)=>{let A=null,E=false,M,N=Je(i),W=()=>{E||(E=true,A&&(clearTimeout(A),A=null),M&&h&&h.removeEventListener("abort",M),V());},V=K.subscribe([`${i}.${qt}`],()=>{let ee=kt(N);if(ee.approved.includes(p))W(),g();else {let Z=ee.rejected.find(le=>le.id===p);if(Z){W();let le=Z.reason?`Request ${p} rejected: ${Z.reason}`:`Request ${p} rejected`;b(new Error(le));}}});if(h){if(M=()=>{W(),b(new Error(`[Directive MultiAgent] Approval wait aborted for request ${p}`));},h.aborted){W(),b(new Error(`[Directive MultiAgent] Approval wait aborted for request ${p}`));return}h.addEventListener("abort",M,{once:true});}A=setTimeout(()=>{W();let ee=Math.round(T/1e3);b(new Error(`[Directive MultiAgent] Approval timeout: Request ${p} not resolved within ${ee}s.
|
|
55
|
-
Solutions:
|
|
56
|
-
1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()
|
|
57
|
-
2. Set autoApproveToolCalls: true to auto-approve
|
|
58
|
-
3. Increase approvalTimeoutMs (current: ${T}ms)
|
|
59
|
-
See: https://directive.run/docs/ai/multi-agent`));},T);})}async function lo(i,p,h,g){let b=p.label??i,A=Date.now(),E=Ae[i]??(Ae[i]={status:"idle"});E.status="running",E.startTime=A,E.lastError=void 0;let M=h;if(ye.length>0)try{let ne=await zt("pre_agent_run",i,b,h,g?.signal);if(ne.skip)return E.status="completed",{output:void 0,messages:[],toolCalls:[],totalTokens:0};M=ne.input;}catch{}S&&S.record({type:"task_start",timestamp:A,agentId:i,snapshotId:null,taskId:i,label:b,description:p.description,inputLength:M.length,input:M.slice(0,ae)});let N=g?.patternId??"";re("onTaskStart",{patternId:N,taskId:i,label:b,timestamp:A});let W=xe.get(i),V=()=>({taskId:i,memory:d?structuredClone(d.getContextMessages?.()??[]):[],scratchpad:Object.freeze(Lt?structuredClone(Lt.getAll()):{}),readAgentState:ne=>{let ce=Pe[ne];if(ce)return Object.freeze({status:ce.status,lastOutput:ce.lastOutput!=null?String(ce.lastOutput):void 0,lastError:ce.lastError,totalTokens:ce.totalTokens});let de=Ae[ne];if(de)return Object.freeze({status:de.status,lastOutput:de.lastOutput!=null?String(de.lastOutput):void 0,lastError:de.lastError,totalTokens:0})},reportProgress:(ne,ce)=>{let de=Number.isFinite(ne)?Math.max(0,Math.min(100,ne)):0;S&&S.record({type:"task_progress",timestamp:Date.now(),agentId:i,snapshotId:null,taskId:i,label:b,percent:de,message:ce}),re("onTaskProgress",{patternId:N,taskId:i,label:b,percent:de,message:ce,timestamp:Date.now()});}}),ee=p.retry?.attempts??1,Z=p.retry?.backoff??"fixed",le=p.retry?.delayMs??1e3,j,X=async ne=>{let ce=V();return p.run(M,ne,ce)},ve=null;try{W&&(ve=await W.acquire());for(let ce=1;ce<=ee;ce++){let de=new AbortController,Y,O=()=>de.abort();if(g?.signal){if(g.signal.aborted)throw new Error(`[Directive MultiAgent] Task "${i}" aborted before starting`);g.signal.addEventListener("abort",O,{once:!0});}p.timeout&&(Y=setTimeout(()=>de.abort(),p.timeout));try{let F=await X(de.signal);Y&&clearTimeout(Y);let me=typeof F=="string"?F:Ht(F),ke=Date.now()-A;E.status="completed",E.lastOutput=me,E.durationMs=ke,S&&S.record({type:"task_complete",timestamp:Date.now(),agentId:i,snapshotId:null,taskId:i,label:b,durationMs:ke,output:me}),re("onTaskComplete",{patternId:g?.patternId??"",taskId:i,label:b,durationMs:ke,timestamp:Date.now()});try{let oe=K.read("__coord");adapterUtils.setBridgeFact(oe,"__lastTaskCompletion",{taskId:i,timestamp:Date.now()});}catch{}return {output:me,messages:[],toolCalls:[],totalTokens:0}}catch(F){if(Y&&clearTimeout(Y),j=F instanceof Error?F:new Error(String(F)),ce<ee){S&&S.record({type:"task_error",timestamp:Date.now(),agentId:i,snapshotId:null,taskId:i,label:b,error:j.message,durationMs:Date.now()-A,attempt:ce});let me=3e4,ke=Z==="exponential"?le*2**(ce-1):le,oe=Math.min(ke,me);await new Promise(($,L)=>{let Q=!1,Re=()=>{Q||(Q=!0,clearTimeout(ue),L(new Error(`[Directive MultiAgent] Task "${i}" aborted during retry backoff`)));},ue=setTimeout(()=>{Q=!0,g?.signal?.removeEventListener("abort",Re),$();},oe);g?.signal&&g.signal.addEventListener("abort",Re,{once:!0});});}}finally{g?.signal?.removeEventListener("abort",O);}}let ne=Date.now()-A;throw E.status="error",E.lastError=j?.message,E.durationMs=ne,S&&S.record({type:"task_error",timestamp:Date.now(),agentId:i,snapshotId:null,taskId:i,label:b,error:j?.message??"Unknown error",durationMs:ne}),re("onTaskError",{patternId:N,taskId:i,label:b,error:j,durationMs:ne,timestamp:Date.now()}),j}finally{ve?.();}}async function Xe(i,p,h){if(Ce(),h?.signal?.aborted)throw new Error(`[Directive MultiAgent] Handler "${i}" run aborted before starting`);if(it==="paused")throw new Error("[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)");ct++;try{let g=pe[i];if(g)return await lo(i,g,p,h);let b=I[i];if(!b){let E=[...Object.keys(I),...Object.keys(pe)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${i}". Registered handlers: ${E}`)}let A=b.circuitBreaker??C;return A?await A.execute(()=>vr(i,b,p,h)):await vr(i,b,p,h)}catch(g){if(_&&!pe[i]&&!h?.__isReroute){let A=yo(i),E=bo(A);if(E){let M={originalAgent:i,reroutedTo:E,reason:g instanceof Error?g.message:String(g),timestamp:Date.now()};try{_.onReroute?.(M);}catch{}return re("onReroute",M),S&&S.record({type:"reroute",timestamp:Date.now(),agentId:i,snapshotId:null,from:i,to:E,reason:g instanceof Error?g.message:String(g)}),Xe(E,p,{...h,__isReroute:true})}if(_.degradation==="fallback-response"&&_.fallbackResponse!==void 0)return {output:_.fallbackResponse,messages:[],toolCalls:[],totalTokens:0}}let b=Pe[i];throw b&&b.status!=="error"&&(b.status="error",b.lastError=g instanceof Error?g.message:String(g)),g}finally{ct--,St();}}async function vr(i,p,h,g){let b=Date.now(),A=Je(i),E=Pe[i],M=p.agent,N=h,W=ht.get(i);if(!W){let j=Object.keys(I).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown agent "${i}". Registered agents: ${j}`)}let V=await W.acquire(g?.signal),ee=new AbortController,Z,le;try{p.timeout&&(Z=setTimeout(()=>ee.abort(),p.timeout)),g?.signal&&(le=()=>ee.abort(),g.signal.addEventListener("abort",le,{once:!0}));let j=p.memory??d;if(j){let $=j.getContextMessages();if($.length>0){let L=$.map(Q=>`${Q.role}: ${Q.content}`).join(`
|
|
60
|
-
`);M={...M,instructions:(M.instructions??"")+`
|
|
61
|
-
|
|
62
|
-
Conversation context:
|
|
63
|
-
`+L};}}{let $=await zt("pre_input_guardrails",i,M.name,N,g?.signal);if($.skip)return E.status="completed",St(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};N=$.input;}let ve=[...u.input??[],...p.guardrails?.input??[]].map(($,L)=>At($,L,"input"));for(let $ of ve){let{name:L}=$,Q={agentName:M.name,input:N,facts:gt(A)},Re=Date.now(),ue=await xt($,{input:N,agentName:M.name},Q);if(re("onGuardrailCheck",{agentId:i,guardrailName:L,guardrailType:"input",passed:ue.passed,reason:ue.reason,durationMs:Date.now()-Re,timestamp:Date.now()}),!ue.passed)throw new lt({code:"INPUT_GUARDRAIL_FAILED",message:`Input guardrail "${L}" failed: ${ue.reason}`,guardrailName:L,guardrailType:"input",userMessage:ue.reason??"Input validation failed",agentName:M.name,input:N});ue.transformed!==void 0&&(N=ue.transformed);}re("onAgentStart",{agentId:i,agentName:M.name,input:N,timestamp:b}),S&&S.record({type:"agent_start",timestamp:Date.now(),agentId:i,snapshotId:null,inputLength:N.length,..."description"in M&&M.description?{description:String(M.description)}:{},...M.instructions?{instructions:M.instructions.slice(0,ae)}:{},input:N.slice(0,ae)}),K.batch(()=>{let $=ot(A);st(A,{...$,status:"running",input:N,startedAt:Date.now()});}),E.status="running",E.lastInput=N;{let $=await zt("pre_agent_run",i,M.name,N,g?.signal);if($.skip)return E.status="completed",St(),{output:void 0,messages:[],toolCalls:[],totalTokens:0};N=$.input;}let ne=e,ce=g?.outputSchema!==void 0?g.outputSchema:p.outputSchema;ce&&(ne=Rn(e,{schema:ce,maxRetries:g?.maxSchemaRetries??p.maxSchemaRetries??2,extractJson:p.extractJson,schemaDescription:p.schemaDescription}));let de=p.retry??f,Y=await yn(ne,M,N,{...p.runOptions,...g,signal:ee.signal,onMessage:$=>{let Q=[...tn(A),$];Ct(A,Q.length>Te?Q.slice(-Te):Q),g?.onMessage?.($);},onToolCall:async $=>{let Q=[...u.toolCall??[],...p.guardrails?.toolCall??[]].map((We,je)=>At(We,je,"toolCall"));for(let We of Q){let{name:je}=We,Le={agentName:M.name,input:N,facts:gt(A)},Jt=Date.now(),Ye=await xt(We,{toolCall:$,agentName:M.name,input:N},Le);if(re("onGuardrailCheck",{agentId:i,guardrailName:je,guardrailType:"toolCall",passed:Ye.passed,reason:Ye.reason,durationMs:Date.now()-Jt,timestamp:Date.now()}),!Ye.passed)throw new lt({code:"TOOL_CALL_GUARDRAIL_FAILED",message:`Tool call guardrail "${je}" failed: ${Ye.reason}`,guardrailName:je,guardrailType:"toolCall",userMessage:Ye.reason??"Tool call blocked",data:{toolCall:$},agentName:M.name,input:N})}if(!y){let We=`tool-${i}-${$.id}`,je={id:We,type:"tool_call",agentName:M.name,description:`Tool call: ${$.name}`,data:$,requestedAt:Date.now()};Be.set(We,i),K.batch(()=>{let Le=kt(A);mt(A,{...Le,pending:[...Le.pending,je]});}),w?.(je),await co(i,We,g?.signal);}let ue=[...nn(A),$];Mt(A,ue.length>Ne?ue.slice(-Ne):ue),g?.onToolCall?.($);}},de?{...de,onRetry:($,L,Q)=>{de.onRetry?.($,L,Q),re("onAgentRetry",{agentId:i,agentName:M.name,input:N,attempt:$,error:L,delayMs:Q,timestamp:Date.now()});}}:void 0);if((await zt("pre_output_guardrails",i,M.name,N,g?.signal)).skip)return E.status="completed",St(),Y;let F=[...u.output??[],...p.guardrails?.output??[]].map(($,L)=>At($,L,"output"));for(let $ of F){let{name:L}=$,Q={agentName:M.name,input:N,facts:gt(A)},Re=Date.now(),ue=await xt($,{output:Y.output,agentName:M.name,input:N,messages:Y.messages},Q);if(re("onGuardrailCheck",{agentId:i,guardrailName:L,guardrailType:"output",passed:ue.passed,reason:ue.reason,durationMs:Date.now()-Re,timestamp:Date.now()}),!ue.passed)throw new lt({code:"OUTPUT_GUARDRAIL_FAILED",message:`Output guardrail "${L}" failed: ${ue.reason}`,guardrailName:L,guardrailType:"output",userMessage:ue.reason??"Output validation failed",agentName:M.name,input:N});ue.transformed!==void 0&&(Y.output=ue.transformed);}K.batch(()=>{let $=ot(A);st(A,{...$,status:"completed",output:Y.output,tokenUsage:$.tokenUsage+Y.totalTokens,turnCount:$.turnCount+Y.messages.length,completedAt:Date.now()});}),E.status="completed",E.lastOutput=Y.output,E.runCount++,E.totalTokens+=Y.totalTokens,St();let me=Je("__coord"),ke=!1,oe=0;if(K.batch(()=>{let L=adapterUtils.getBridgeFact(me,"__globalTokens")+Y.totalTokens;if(He=L,adapterUtils.setBridgeFact(me,"__globalTokens",L),m&&H){oe=L/m;let Q=adapterUtils.getBridgeFact(me,"__budgetWarningFired");oe>=P&&!Q&&(adapterUtils.setBridgeFact(me,"__budgetWarningFired",!0),ke=!0);}}),ke)try{H({currentTokens:He,maxBudget:m,percentage:oe});}catch($){ie&&console.debug("[Directive MultiAgent] onBudgetWarning threw:",$);}if(j&&Y.messages.length>0)try{let Q=j.getContextMessages().some(Re=>Re.role==="user"&&Re.content===N)?Y.messages.filter(Re=>!(Re.role==="user"&&Re.content===N)):Y.messages;j.addMessages(Q);}catch($){ie&&console.debug("[Directive MultiAgent] Memory addMessages failed:",$);}if(re("onAgentComplete",{agentId:i,agentName:M.name,input:N,output:Y.output,tokenUsage:Y.totalTokens,durationMs:Date.now()-b,timestamp:Date.now()}),S){let $=typeof Y.output=="string"?Y.output:Ht(Y.output);S.record({type:"agent_complete",timestamp:Date.now(),agentId:i,snapshotId:null,outputLength:$.length,totalTokens:Y.totalTokens,inputTokens:Y.tokenUsage?.inputTokens??0,outputTokens:Y.tokenUsage?.outputTokens??0,durationMs:Date.now()-b,modelId:p.agent.model??void 0,output:$.slice(0,ae)});}return te&&te.recordSuccess(i,Date.now()-b),Ie(),await zt("post_run",i,M.name,N,g?.signal),Y}catch(j){if(E.status="error",E.lastError=j instanceof Error?j.message:String(j),St(),K.batch(()=>{let X=ot(A);st(A,{...X,status:"error",error:j instanceof Error?j.message:String(j),completedAt:Date.now()});}),re("onAgentError",{agentId:i,agentName:M.name,input:N,error:j instanceof Error?j:new Error(String(j)),durationMs:Date.now()-b,timestamp:Date.now()}),S){let X={type:"agent_error",timestamp:Date.now(),agentId:i,snapshotId:null,errorMessage:j instanceof Error?j.message:String(j),durationMs:Date.now()-b};Yn(j)&&(X.guardrailName=j.guardrailName,X.guardrailType=j.guardrailType,X.errorCode=j.code),S.record(X);}throw te&&te.recordFailure(i,Date.now()-b,j instanceof Error?j:new Error(String(j))),Ie(),j}finally{Z&&clearTimeout(Z),le&&g?.signal&&g.signal.removeEventListener("abort",le),V();}}function Jn(i,p,h={}){if(Ce(),pe[i]){let Y=[],O=[],F=false,me=Q=>{if(F)return;let Re=O.shift();Re?Re(Q):Y.push(Q);},ke=()=>{F=true;for(let Q of O)Q(null);O.length=0;},oe=new AbortController,$;h.signal&&(h.signal.aborted?oe.abort():($=()=>oe.abort(),h.signal.addEventListener("abort",$,{once:true})));let L=Xe(i,p,{signal:oe.signal}).then(Q=>{let Re=typeof Q.output=="string"?Q.output:Ht(Q.output);return me({type:"token",data:Re,tokenCount:0}),me({type:"done",totalTokens:0,duration:0,droppedTokens:0}),ke(),Q},Q=>{throw me({type:"error",error:Q}),ke(),Q}).finally(()=>{$&&h.signal&&h.signal.removeEventListener("abort",$);});return L.catch(()=>{}),{stream:{async*[Symbol.asyncIterator](){for(;;){let Q=Y.shift();if(Q){if(yield Q,Q.type==="done"||Q.type==="error")return}else {if(F)return;{let Re=await new Promise(ue=>O.push(ue));if(!Re||(yield Re,Re.type==="done"||Re.type==="error"))return}}}}},result:L,abort:()=>{oe.abort();}}}if(!I[i]){let Y=[...Object.keys(I),...Object.keys(pe)].join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown handler "${i}". Registered handlers: ${Y}`)}let A=1e4,E=1e5,M=new AbortController,N=[],W=[],V=false,ee=Date.now(),Z=0,le="",j;h.signal&&(j=()=>M.abort(),h.signal.addEventListener("abort",j,{once:true}));let X=()=>{j&&h.signal&&h.signal.removeEventListener("abort",j);},ve=Y=>{if(V)return;let O=W.shift();O?O(Y):(N.length>=A&&N.shift(),N.push(Y));},ne=()=>{V=true,X();for(let Y of W)Y(null);W.length=0;},ce=(async()=>{ve({type:"progress",phase:"starting",message:"Running input guardrails"});try{let Y=await Xe(i,p,{signal:M.signal,onMessage:F=>{if(ve({type:"message",message:F}),F.role==="assistant"&&F.content){let me=Math.ceil(F.content.length/4);Z+=me,le+=F.content,le.length>E&&(le=le.slice(-E)),ve({type:"token",data:F.content,tokenCount:Z});}},onToolCall:async F=>{ve({type:"tool_start",tool:F.name,toolCallId:F.id,arguments:F.arguments}),F.result&&ve({type:"tool_end",tool:F.name,toolCallId:F.id,result:F.result});}}),O=Date.now()-ee;return ve({type:"done",totalTokens:Y.totalTokens,duration:O,droppedTokens:0}),ne(),Y}catch(Y){throw Y instanceof lt&&ve({type:"guardrail_triggered",guardrailName:Y.guardrailName,reason:Y.message,partialOutput:le,stopped:true}),ve({type:"error",error:Y instanceof Error?Y:new Error(String(Y))}),ne(),Y}})(),de={[Symbol.asyncIterator](){return {async next(){return N.length>0?{done:false,value:N.shift()}:V?{done:true,value:void 0}:new Promise(Y=>{W.push(O=>{Y(O===null?{done:true,value:void 0}:{done:false,value:O});});})}}}};return ce.catch(()=>{}),{stream:de,result:ce,abort:()=>{M.abort(),ne();}}}async function po(i,p,h){let g=Date.now();h&&re("onPatternStart",{patternId:h,patternType:"parallel",input:p,timestamp:g});let b=new AbortController,A;i.timeout&&(A=setTimeout(()=>b.abort(),i.timeout));let E;try{let M=i.handlers.map(V=>Xe(V,p,{signal:b.signal,patternId:h}).catch(ee=>{if(i.minSuccess===void 0)throw ee;return null})),N=await Promise.all(M),W=N.filter(V=>V!==null);if(i.minSuccess!==void 0&&W.length<i.minSuccess){let V=N.length-W.length;throw new Error(`[Directive MultiAgent] Parallel pattern: Only ${W.length}/${i.handlers.length} agents succeeded (minimum required: ${i.minSuccess}, failed: ${V})`)}return i.merge(W)}catch(M){throw E=M instanceof Error?M:new Error(String(M)),M}finally{A&&clearTimeout(A),h&&re("onPatternComplete",{patternId:h,patternType:"parallel",durationMs:Date.now()-g,timestamp:Date.now(),error:E});}}async function Yt(i,p,h){let g=cn(i);if(h?.when)try{if(!h.when({step:g,patternType:i.type,facts:i.type==="goal"?i.facts:void 0,satisfaction:i.type==="goal"?i.lastSatisfaction:void 0}))return null}catch{return null}try{let b={version:1,id:i.id,createdAt:i.createdAt,label:i.label,systemExport:JSON.stringify(i),timelineExport:null,localState:{type:"multi",globalTokenCount:0,globalStatus:"idle",agentStates:{},handoffCounter:0,pendingHandoffs:[],handoffResults:[],roundRobinCounters:null},memoryExport:null,orchestratorType:"multi",metadata:{patternType:i.type}};return await p.save(b),S&&S.record({type:"checkpoint_save",timestamp:Date.now(),snapshotId:null,checkpointId:i.id,patternType:i.type,step:g}),re("onCheckpointSave",{checkpointId:i.id,patternType:i.type,step:g,timestamp:Date.now()}),i.id}catch(b){let A=b instanceof Error?b:new Error(String(b));return console.error(`[Directive MultiAgent] ${i.type}: checkpoint save failed:`,A),re("onCheckpointError",{patternType:i.type,step:g,error:A,timestamp:Date.now()}),null}}async function Wn(i,p,h,g){let b=Date.now(),A=h??"__inline_sequential";h&&re("onPatternStart",{patternId:h,patternType:"sequential",input:p,timestamp:b});let E=i.checkpoint,M=E?.store??q,N=E?.everyN??5,W=E?.labelPrefix??"sequential",V=g?.currentInput??p,ee,Z=g?.results?[...g.results]:[],le=g?.step??0,j;if(g&&Z.length>0){let X=Z[Z.length-1];ee={output:X.output,totalTokens:X.totalTokens,messages:[],toolCalls:[]};}try{for(let X=le;X<i.handlers.length;X++){let ve=i.handlers[X];{let ne=await zt("pre_pattern_step",ve,I[ve]?.agent.name??ve,V,void 0,{patternId:h});if(ne.skip)continue;V=ne.input;}try{if(ee=await Xe(ve,V,{patternId:h}),Z.push({agentId:ve,output:ee.output,totalTokens:ee.totalTokens}),X<i.handlers.length-1&&(i.transform?V=i.transform(ee.output,ve,X):V=typeof ee.output=="string"?ee.output:Ht(ee.output)),E&&M&&X>le&&(X-le)%N===0){let ne=X<i.handlers.length-1?V:p;await Yt({type:"sequential",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${W}:step-${X+1}`,patternId:A,stepsTotal:i.handlers.length,step:X+1,currentInput:ne,results:[...Z]},M,E);}}catch(ne){if(!i.continueOnError)throw ne}}if(!ee)throw new Error("[Directive MultiAgent] No successful results in sequential pattern");return i.extract?i.extract(ee.output):ee.output}catch(X){throw j=X instanceof Error?X:new Error(String(X)),X}finally{h&&re("onPatternComplete",{patternId:h,patternType:"sequential",durationMs:Date.now()-b,timestamp:Date.now(),error:j});}}async function Vn(i,p,h,g){let b=Date.now(),A=h??"__inline_supervisor";h&&re("onPatternStart",{patternId:h,patternType:"supervisor",input:p,timestamp:b});let E=i.checkpoint,M=E?.store??q,N=E?.everyN??5,W=E?.labelPrefix??"supervisor",V=[],ee=g?.workerResults?[...g.workerResults]:[],Z=i.maxRounds??5;if(Z<1||!Number.isFinite(Z))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let le;if(g)for(let X of g.workerResults)V.push({output:X.output,totalTokens:X.totalTokens,messages:[],toolCalls:[]});let j=g?.round??0;try{let X;g?X={output:g.supervisorOutput,totalTokens:0,messages:[],toolCalls:[]}:X=await Xe(i.supervisor,p);let ve=g?.currentInput??p;for(let ne=j;ne<Z;ne++){let ce=X.output,de;if(typeof ce=="string")try{let O=ce.replace(/```(?:json|JSON)?\s*\n?/g,"").trim();de=JSON.parse(O);}catch{try{let O=ce.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),F=an(O);if(F&&typeof F=="object"&&"action"in F)de=F;else throw new Error("extracted value missing 'action' property")}catch{throw new Error(`[Directive MultiAgent] Supervisor "${i.supervisor}" returned unparseable output (round ${ne+1}). Expected JSON with { action, worker?, workerInput? } but got: ${ce.slice(0,200)}`)}}else if(ce&&typeof ce=="object"&&"action"in ce)de=ce;else throw new Error(`[Directive MultiAgent] Supervisor "${i.supervisor}" returned invalid output (round ${ne+1}). Expected { action: "delegate"|"complete", worker?, workerInput? }`);if(de.action==="complete"||!de.worker)break;if(!i.workers.includes(de.worker)){let O=i.workers.join(", ");throw new Error(`[Directive MultiAgent] Supervisor delegated to unknown worker "${de.worker}". Available workers: ${O}`)}let Y=await Xe(de.worker,de.workerInput??"",{patternId:h});V.push(Y),ee.push({output:Y.output,totalTokens:Y.totalTokens}),ve=`Worker ${de.worker} completed with result: ${Ht(Y.output)}`,X=await Xe(i.supervisor,ve,{patternId:h}),E&&M&&ne>j&&(ne-j)%N===0&&await Yt({type:"supervisor",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${W}:round-${ne+1}`,patternId:A,stepsTotal:i.maxRounds??10,round:ne+1,supervisorOutput:X.output,workerResults:[...ee],currentInput:ve},M,E);}return i.extract?i.extract(X.output,V):X.output}catch(X){throw le=X instanceof Error?X:new Error(String(X)),X}finally{h&&re("onPatternComplete",{patternId:h,patternType:"supervisor",durationMs:Date.now()-b,timestamp:Date.now(),error:le});}}async function Kn(i,p,h,g){let b=Date.now(),A=h??"__inline_dag";h&&re("onPatternStart",{patternId:h,patternType:"dag",input:p,timestamp:b});let E=i.checkpoint,M=E?.store??q,N=E?.everyN??5,W=E?.labelPrefix??"dag",V=g?.completedCount??0,ee=0,Z=Promise.resolve(),le=Object.keys(i.nodes).length,j={input:g?.input??p,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};for(let O of Object.keys(i.nodes))j.statuses[O]="pending";if(g){for(let[O,F]of Object.entries(g.statuses))j.statuses[O]=F;for(let[O,F]of Object.entries(g.outputs))j.outputs[O]=F;for(let[O,F]of Object.entries(g.errors))j.errors[O]=F;for(let[O,F]of Object.entries(g.nodeResults))j.results[O]={output:F.output,totalTokens:F.totalTokens,messages:[],toolCalls:[]};}let X=i.onNodeError??"fail",ve=i.maxConcurrent??Number.POSITIVE_INFINITY,ne=new AbortController,ce,de;i.timeout&&(ce=setTimeout(()=>ne.abort(),i.timeout));try{let me=function(){for(let[oe,$]of Object.entries(i.nodes)){if(j.statuses[oe]!=="pending")continue;let L=X==="fail"?new Set(["completed","skipped"]):new Set(["completed","skipped","error"]);if(($.deps??[]).every(Re=>L.has(j.statuses[Re]))){if(X==="skip-downstream"&&($.deps??[]).some(ue=>j.statuses[ue]==="error"||j.statuses[ue]==="skipped")){j.statuses[oe]="skipped",S&&S.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:oe,status:"skipped",deps:$.deps??[]}),re("onDagNodeSkipped",{patternId:A,nodeId:oe,agentId:$.handler,nodeType:pe[$.handler]?"task":"agent",reason:"upstream dependency errored",timestamp:Date.now()});continue}if($.when)try{if(!$.when(j)){j.statuses[oe]="skipped",S&&S.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:oe,status:"skipped",deps:$.deps??[]}),re("onDagNodeSkipped",{patternId:A,nodeId:oe,agentId:$.handler,nodeType:pe[$.handler]?"task":"agent",reason:"when() returned false",timestamp:Date.now()});continue}}catch{j.statuses[oe]="skipped";continue}j.statuses[oe]="ready";}}};var Y=me;if(!g)for(let[oe,$]of Object.entries(i.nodes))(!$.deps||$.deps.length===0)&&(j.statuses[oe]="ready");let O=new Set,F=0;async function ke(oe,$){let L=Date.now();j.statuses[oe]="running",S&&S.record({type:"dag_node_update",timestamp:L,snapshotId:null,nodeId:oe,status:"running",deps:$.deps??[]}),re("onDagNodeStart",{patternId:A,nodeId:oe,agentId:$.handler,nodeType:pe[$.handler]?"task":"agent",timestamp:L});let Q;if($.transform)Q=$.transform(j);else if($.deps&&$.deps.length>0){let je=Object.create(null);for(let Le of $.deps)j.outputs[Le]!==void 0&&(je[Le]=j.outputs[Le]);Q=JSON.stringify(je);}else Q=p;let Re=new AbortController,ue;$.timeout&&(ue=setTimeout(()=>Re.abort(),$.timeout));let We=()=>Re.abort();ne.signal.addEventListener("abort",We,{once:!0});try{let je=await Xe($.handler,Q,{signal:Re.signal,patternId:A});if(j.outputs[oe]=je.output,j.results[oe]=je,j.statuses[oe]="completed",S&&S.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:oe,status:"completed",deps:$.deps??[]}),re("onDagNodeComplete",{patternId:A,nodeId:oe,agentId:$.handler,nodeType:pe[$.handler]?"task":"agent",durationMs:Date.now()-L,timestamp:Date.now()}),V++,E&&M&&V>ee&&V-ee>=N){ee=V;let Le=Object.create(null);for(let[Ye,Et]of Object.entries(j.results))Le[Ye]={output:Et.output,totalTokens:Et.totalTokens};let Jt={type:"dag",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${W}:node-${V}`,patternId:A,stepsTotal:le,statuses:{...j.statuses},outputs:{...j.outputs},errors:{...j.errors},completedCount:V,nodeResults:Le,input:j.input};Z=Z.then(()=>Yt(Jt,M,E)),await Z;}}catch(je){if(j.statuses[oe]="error",j.errors[oe]=je instanceof Error?je.message:String(je),S&&S.record({type:"dag_node_update",timestamp:Date.now(),snapshotId:null,nodeId:oe,status:"error",deps:$.deps??[]}),re("onDagNodeError",{patternId:A,nodeId:oe,agentId:$.handler,nodeType:pe[$.handler]?"task":"agent",error:je instanceof Error?je:new Error(String(je)),durationMs:Date.now()-L,timestamp:Date.now()}),X==="fail")throw ne.abort(),je}finally{ue&&clearTimeout(ue),ne.signal.removeEventListener("abort",We),F--;}}for(;!ne.signal.aborted;){me();let oe=Object.entries(i.nodes).filter(([L])=>j.statuses[L]==="ready").sort(([,L],[,Q])=>(Q.priority??0)-(L.priority??0));for(let[L,Q]of oe){if(F>=ve)break;F++;let Re=ke(L,Q).finally(()=>{O.delete(Re);});O.add(Re);}if(!Object.values(j.statuses).some(L=>L==="pending"||L==="running"||L==="ready"))break;if(O.size>0)await Promise.race(O);else break}return O.size>0&&await Promise.allSettled(O),await i.merge(j)}catch(O){throw de=O instanceof Error?O:new Error(String(O)),O}finally{ce&&clearTimeout(ce),h&&re("onPatternComplete",{patternId:h,patternType:"dag",durationMs:Date.now()-b,timestamp:Date.now(),error:de});}}async function Dn(i,p,h,g){let b=Date.now(),A=h??"__inline_reflect",E=i.maxIterations??2;if(E<1)throw new Error("[Directive MultiAgent] Reflect pattern maxIterations must be >= 1");ie&&E>3&&console.warn("[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.");let M=i.signal,N,W;if(i.timeout&&!M){let O=new AbortController;N=setTimeout(()=>O.abort(),i.timeout),M=O.signal;}else if(i.timeout&&M){let O=new AbortController;N=setTimeout(()=>O.abort(),i.timeout),W=()=>O.abort(),M.addEventListener("abort",W,{once:true}),M=O.signal;}let V=i.parseEvaluation??(O=>{if(typeof O=="string")try{return JSON.parse(O)}catch{return {passed:false,feedback:`Evaluator returned unparseable output: ${O.slice(0,200)}`}}return O&&typeof O=="object"&&"passed"in O?O:{passed:false,feedback:"Evaluator returned invalid format"}}),ee=i.buildRetryInput??((O,F,me)=>`${O}
|
|
64
|
-
|
|
65
|
-
Feedback on your previous response:
|
|
66
|
-
${F}
|
|
67
|
-
|
|
68
|
-
Please improve your response.`);h&&re("onPatternStart",{patternId:A,patternType:"reflect",input:p,timestamp:b});let Z=i.checkpoint,le=Z?.store??q,j=Z?.everyN??5,X=Z?.labelPrefix??"reflect",ve,ne,ce=g?.history?[...g.history]:[],de=g?.producerOutputs?[...g.producerOutputs]:[],Y=g?.iteration??0;g?.lastProducerOutput!=null&&(ne={output:g.lastProducerOutput,totalTokens:0,messages:[],toolCalls:[]});try{let O=g?.effectiveInput??p;for(let F=Y;F<E;F++){if(M?.aborted){if(ne)return Ee=ce,i.extract?i.extract(ne.output):ne.output;throw new DOMException("Reflect pattern aborted","AbortError")}let me=Date.now(),ke=await Xe(i.handler,O,{signal:M,patternId:h});ne=ke;let oe=typeof ke.output=="string"?ke.output:Ht(ke.output);if(M?.aborted)return Ee=ce,i.extract?i.extract(ke.output):ke.output;let $=await Xe(i.evaluator,oe,{signal:M,patternId:h}),L;try{L=V($.output);}catch(ue){L={passed:!1,feedback:`Evaluation parse error: ${ue instanceof Error?ue.message:String(ue)}`};}if(!L.passed&&i.threshold!=null&&L.score!=null){let ue=typeof i.threshold=="function"?i.threshold(F):i.threshold;L.score>=ue&&(L={...L,passed:!0});}let Q=Date.now()-me;de.push({output:ke.output,score:L.score});let Re={iteration:F,passed:L.passed,score:L.score,feedback:L.feedback,durationMs:Q,producerTokens:ke.totalTokens??0,evaluatorTokens:$.totalTokens??0};if(ce.push(Re),i.onIteration)try{i.onIteration(Re);}catch(ue){ie&&console.warn("[Directive MultiAgent] onIteration callback threw:",ue);}if(S&&S.record({type:"reflection_iteration",timestamp:Date.now(),snapshotId:null,iteration:F,passed:L.passed,score:L.score,durationMs:Q,producerTokens:ke.totalTokens,evaluatorTokens:$.totalTokens}),L.passed)return Ee=ce,i.extract?i.extract(ke.output):ke.output;if(F<E-1&&L.feedback)try{O=ee(p,L.feedback,F);}catch(ue){ie&&console.warn("[Directive MultiAgent] buildRetryInput threw, using default format:",ue),O=`${p}
|
|
69
|
-
|
|
70
|
-
Feedback on your previous response:
|
|
71
|
-
${L.feedback}
|
|
72
|
-
|
|
73
|
-
Please improve your response.`;}Z&&le&&F>=Y&&(F-Y+1)%j===0&&await Yt({type:"reflect",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${X}:iter-${F+1}`,patternId:A,stepsTotal:E,iteration:F+1,effectiveInput:O,history:[...ce],producerOutputs:[...de],lastProducerOutput:ke.output},le,Z);}if(Ee=ce,i.onExhausted==="throw")throw new un({iterations:E,history:ce.map(F=>({passed:F.passed,feedback:F.feedback,score:F.score})),lastResult:ne,totalTokens:ne.totalTokens??0});if(i.onExhausted==="accept-best"&&de.length>0){!de.some($=>$.score!=null)&&ie&&console.warn("[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.");let me=de.length-1,ke=Number.NEGATIVE_INFINITY;for(let $=0;$<de.length;$++){let L=de[$].score;L!=null&&L>ke&&(ke=L,me=$);}let oe=de[me].output;return i.extract?i.extract(oe):oe}return i.extract?i.extract(ne.output):ne.output}catch(O){throw Ee=ce,ve=O instanceof Error?O:new Error(String(O)),O}finally{N&&clearTimeout(N),W&&i.signal&&i.signal.removeEventListener("abort",W),h&&re("onPatternComplete",{patternId:A,patternType:"reflect",durationMs:Date.now()-b,timestamp:Date.now(),error:ve});}}async function kr(i,p,h){if(i.handlers.length===0)throw new Error("[Directive MultiAgent] Race pattern requires at least one agent");let g=i.minSuccess??1;if(!Number.isInteger(g)||g<1)throw new Error("[Directive MultiAgent] Race pattern minSuccess must be a positive integer");if(g>i.handlers.length)throw new Error(`[Directive MultiAgent] Race pattern minSuccess (${g}) exceeds agent count (${i.handlers.length})`);for(let Z of i.handlers)if(!I[Z]&&!pe[Z])throw new Error(`[Directive MultiAgent] Race: unknown handler "${Z}"`);let b=Date.now(),A=h??"__inline_race",E=new AbortController,M,N;i.signal&&(i.signal.aborted?E.abort():(N=()=>E.abort(),i.signal.addEventListener("abort",N,{once:true}))),h&&re("onPatternStart",{patternId:A,patternType:"race",input:p,timestamp:b}),S&&S.record({type:"race_start",timestamp:b,snapshotId:null,patternId:A,agents:i.handlers}),i.timeout&&(M=setTimeout(()=>E.abort(),i.timeout));let W,V=Object.create(null),ee=[...i.handlers];try{let Z=i.handlers.map(F=>({agentId:F,promise:Xe(F,p,{signal:E.signal,patternId:h}).then(me=>({agentId:F,result:me}))})),le=Z.map(F=>F.promise.catch(()=>{})),j=[],X=await new Promise((F,me)=>{let ke=0,oe=!1;for(let $ of Z)$.promise.then(L=>{ke++,!oe&&(j.push(L),j.length>=g&&(oe=!0,E.abort(),F([...j])));}).catch(L=>{if(V[$.agentId]=L instanceof Error?L.message:String(L),ke++,oe)return;let Q=Object.keys(V).length,Re=j.length+(Z.length-ke);ke===Z.length&&Q===Z.length?(oe=!0,me(new Error(`[Directive MultiAgent] Race: all ${Z.length} agents failed.
|
|
74
|
-
`+Object.entries(V).map(([ue,We])=>` - ${ue}: ${We}`).join(`
|
|
75
|
-
`)))):Re<g&&(oe=!0,me(new Error(`[Directive MultiAgent] Race: cannot reach minSuccess (${g}). ${Q} agent(s) failed.
|
|
76
|
-
`+Object.entries(V).map(([ue,We])=>` - ${ue}: ${We}`).join(`
|
|
77
|
-
`))));});});await Promise.all(le).catch(()=>{});let ve=X[0],ne=ve.agentId,ce=new Set(X.map(F=>F.agentId)),de=ee.filter(F=>!ce.has(F)&&!(F in V));S&&(S.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:A,winnerId:ne,durationMs:Date.now()-b}),de.length>0&&S.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:A,cancelledIds:de,reason:"winner_found"}));let Y=i.extract?i.extract(ve.result):ve.result.output,O=g>1?X.map(F=>({agentId:F.agentId,result:i.extract?i.extract(F.result):F.result.output})):void 0;return {winnerId:ne,result:Y,allResults:O}}catch(Z){throw W=Z instanceof Error?Z:new Error(String(Z)),S&&S.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:A,cancelledIds:ee,reason:E.signal.aborted?"timeout":"all_failed"}),Z}finally{M&&clearTimeout(M),N&&i.signal&&i.signal.removeEventListener("abort",N),h&&re("onPatternComplete",{patternId:A,patternType:"race",durationMs:Date.now()-b,timestamp:Date.now(),error:W});}}async function Pn(i,p,h,g){let{handlers:b,evaluator:A,maxRounds:E=2,extract:M,parseJudgement:N}=i;if(b.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(E<1||!Number.isFinite(E))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let W=i.signal,V,ee;if(i.timeout&&!W){let L=new AbortController;V=setTimeout(()=>L.abort(),i.timeout),W=L.signal;}else if(i.timeout&&W){let L=new AbortController;V=setTimeout(()=>L.abort(),i.timeout),ee=()=>L.abort(),W.addEventListener("abort",ee,{once:true}),W=L.signal;}let le=N??(L=>{if(typeof L=="string")try{let Q=JSON.parse(L);return Q&&typeof Q=="object"&&typeof Q.winnerId=="string"?Q:(ie&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:b[0]})}catch{return ie&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:b[0]}}return L&&typeof L=="object"&&"winnerId"in L&&typeof L.winnerId=="string"?L:(ie&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:b[0]})}),j=g?.rounds?[...g.rounds]:[],X=g?.currentInput??p,ve=g?.lastWinnerId??b[0],ne=g?.lastWinnerOutput??void 0,ce=g?.round??0,de=i.checkpoint,Y=de?.store??q,O=de?.everyN??5,F=de?.labelPrefix??"debate",me=h??"__inline_debate",ke=Date.now(),oe=g?.tokensConsumed??0;h&&re("onPatternStart",{patternId:me,patternType:"debate",input:p,timestamp:ke});let $;try{for(let Q=ce;Q<E&&!W?.aborted;Q++){let Re=b.map(async Ye=>{let Et=await Xe(Ye,X,{signal:W,patternId:me});return oe+=Et.totalTokens,{agentId:Ye,output:Et.output}}),ue=await Promise.all(Re);if(W?.aborted)break;let We=JSON.stringify({round:Q+1,totalRounds:E,proposals:ue.map(Ye=>({agentId:Ye.agentId,proposal:Ye.output}))}),je=await Xe(A,We,{signal:W,patternId:me});oe+=je.totalTokens;let Le=le(je.output);if(b.includes(Le.winnerId)||(Le.winnerId=b[0]),j.push({proposals:ue,judgement:Le}),S&&S.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:me,round:Q+1,totalRounds:E,winnerId:Le.winnerId,score:Le.score,agentCount:b.length}),ve=Le.winnerId,ne=ue.find(Ye=>Ye.agentId===Le.winnerId)?.output??ue[0].output,de&&Y&&Q>ce&&(Q-ce)%O===0){let Ye={type:"debate",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${F}:round-${Q+1}`,patternId:me,stepsTotal:E,round:Q+1,currentInput:X,rounds:[...j],lastWinnerId:ve,lastWinnerOutput:ne,tokensConsumed:oe};await Yt(Ye,Y,de);}Q<E-1&&Le.feedback&&(X=`Previous round feedback: ${Le.feedback}
|
|
18
|
+
${o}
|
|
78
19
|
|
|
79
|
-
Original task: ${p}`);}if(j.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let L=M?M(ne):ne;return {winnerId:ve,result:L,rounds:j}}catch(L){throw $=L instanceof Error?L:new Error(String(L)),L}finally{V&&clearTimeout(V),ee&&i.signal&&i.signal.removeEventListener("abort",ee),h&&re("onPatternComplete",{patternId:me,patternType:"debate",durationMs:Date.now()-ke,timestamp:Date.now(),error:$});}}let go=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Qt(i,p){for(let h of Object.keys(p))go.has(h)||(i[h]=p[h]);}function mo(i,p){let h=Object.create(null);for(let[N,W]of Object.entries(p))for(let V of W.produces)h[V]||(h[V]=[]),h[V].push(N);let g=Object.keys(p),b=Object.create(null),A=Object.create(null);for(let N of g)b[N]=0,A[N]=[];for(let[N,W]of Object.entries(p))for(let V of W.requires??[]){let ee=h[V];if(ee)for(let Z of ee)Z!==N&&(A[Z].push(N),b[N]=(b[N]??0)+1);}let E=[];for(let N of g)b[N]===0&&E.push(N);let M=0;for(;E.length>0;){let N=E.shift();M++;for(let W of A[N]??[])b[W]--,b[W]===0&&E.push(W);}if(M!==g.length)throw new Error(`[Directive MultiAgent] goal pattern "${i}": cycle detected in produces/requires graph. Visited ${M}/${g.length} nodes.`)}function fo(i,p){let h=Object.create(null);for(let[g,b]of Object.entries(p))for(let A of b.produces)h[A]||(h[A]=[]),h[A].push(g);for(let[g,b]of Object.entries(h))b.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${i}": fact key "${g}" is produced by multiple nodes: ${b.join(", ")}. Last writer wins.`);}function nt(i,...p){if(i)try{return i(...p)}catch(h){console.error("[Directive MultiAgent] goal: user callback threw:",h);return}}async function ho(i,...p){if(i)try{return await i(...p)}catch(h){console.error("[Directive MultiAgent] goal: user callback threw:",h);return}}function Xn(i,p,h){let g=p.slice(-3),b=g.length>0?g.reduce((M,N)=>M+N.satisfactionDelta,0)/g.length:0,A=null;b>0&&i<1&&(A=Math.ceil((1-i)/b));let E=false;if(p.length>=6){let M=p.slice(-3),N=p.slice(-6,-3),W=M.reduce((ee,Z)=>ee+Z.satisfactionDelta,0)/3,V=N.reduce((ee,Z)=>ee+Z.satisfactionDelta,0)/3;E=W<V*.5;}return {satisfaction:i,progressRate:b,estimatedStepsRemaining:A,decelerating:E}}function pn(i){return i==null||!Number.isFinite(i)?0:Math.max(0,Math.min(1,i))}async function In(i,p,h,g){let{nodes:b,when:A,satisfaction:E,maxSteps:M=50,extract:N,selectionStrategy:W,relaxation:V,onStep:ee,onStall:Z}=i,le=Object.create(null);for(let[$e,Ge]of Object.entries(b))le[$e]={...Ge};if(Object.keys(le).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let X=h??"__goal";for(let[$e,Ge]of Object.entries(le))if(!I[Ge.handler]&&!pe[Ge.handler])throw new Error(`[Directive MultiAgent] goal node "${$e}" references unregistered handler "${Ge.handler}"`);mo(X,le),fo(X,le);for(let[$e,Ge]of Object.entries(le))Ge.extractOutput||console.warn(`[Directive MultiAgent] goal node "${$e}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let ve=i.signal,ne,ce,de=i.timeout??3e5;if(de&&!ve){let $e=new AbortController;ne=setTimeout(()=>$e.abort(),de),ve=$e.signal;}else if(de&&ve){let $e=new AbortController;ne=setTimeout(()=>$e.abort(),de),ce=()=>$e.abort(),ve.addEventListener("abort",ce,{once:true}),ve=$e.signal;}let Y=Date.now();if(S){let $e=Object.values(le).map(Ge=>Ge.handler);S.record({type:"pattern_start",timestamp:Y,snapshotId:null,patternId:X,patternType:"goal",handlers:$e,taskIds:$e.filter(Ge=>pe[Ge]!=null)});}re("onPatternStart",{patternId:X,patternType:"goal",input:typeof p=="string"?p:JSON.stringify(p),timestamp:Y});let O=Object.create(null);g?Qt(O,g.facts):typeof p=="string"?O.input=p:Qt(O,p);let F=g?[...g.executionOrder]:[],me=Object.create(null);if(g)for(let[$e,Ge]of Object.entries(g.nodeOutputs))me[$e]={output:Ge.output,totalTokens:Ge.totalTokens};let ke=g?[...g.stepMetrics]:[],oe=g?[...g.relaxations]:[],$=new Set(g?.completedNodes??[]),L=new Map(g?Object.entries(g.failedNodes).map(([$e,Ge])=>[$e,Ge]):[]),Q=new Map(g?Object.entries(g.nodeInputHashes):[]),Re=Object.create(null);if(g)for(let[$e,Ge]of Object.entries(g.agentMetrics))Re[$e]={runs:Ge.runs,avgSatisfactionDelta:Ge.runs>0?Ge.totalDelta/Ge.runs:0,tokens:Ge.tokens,totalDelta:Ge.totalDelta};let ue=g?.stallSteps??0,We=g?.appliedRelaxationTiers??0,je=g?.lastSatisfaction??0,Le,Jt=false,Ye=g?.step??0,Et=i.checkpoint,ko=Et?.everyN??5,Rr=Et?.store??q,wo=Et?.labelPrefix??"goal",Sr,Ro=3;try{for(let ze=Ye;ze<M;ze++){if(nt(A,O)===!0){Jt=!0;let Oe=Date.now()-Y,De=Object.values(me).reduce((Fe,Ze)=>Fe+Ze.totalTokens,0);return {achieved:!0,result:nt(N,O)??O,facts:{...O},executionOrder:F,nodeResults:me,steps:ze,totalTokens:De,durationMs:Oe,stepMetrics:ke,relaxations:oe}}if(ve?.aborted){let Oe=Date.now()-Y,De=Object.values(me).reduce((Fe,Ze)=>Fe+Ze.totalTokens,0);return {achieved:!1,result:nt(N,O)??O,facts:{...O},executionOrder:F,nodeResults:me,steps:ze,totalTokens:De,durationMs:Oe,stepMetrics:ke,relaxations:oe,error:"Aborted or timed out"}}let Wt=[];for(let[Oe,De]of Object.entries(le)){if((L.get(Oe)??0)>=Ro)continue;let Fe=De.requires??[];if(Fe.every(Ve=>O[Ve]!=null)){if($.has(Oe)){if(!De.allowRerun)continue;let Ve=JSON.stringify(Fe.map(rt=>O[rt]));if(Q.get(Oe)===Ve)continue}Wt.push(Oe);}}let Ft=Wt;if(W&&Wt.length>0){let Oe=E?nt(E,O)??0:nt(A,O)===!0?1:0,De=pn(Oe),Fe=Xn(De,ke,ze),Ze=Object.create(null);for(let[rt,qe]of Object.entries(Re))Ze[rt]={runs:qe.runs,avgSatisfactionDelta:qe.runs>0?qe.totalDelta/qe.runs:0,tokens:qe.tokens};let Ve=W.select(Wt,Ze,Fe);Ft=Ve&&Ve.length>0?Ve:Wt;}if(Ft.sort((Oe,De)=>(le[De].priority??0)-(le[Oe].priority??0)),nt(ee,ze,{...O},Ft),Ft.length===0){ue++;let Oe=!1;if(V)for(let De=We;De<V.length;De++){let Fe=V[De],Ze=Fe.afterStallSteps??3;if(ue>=Ze){let Ve=Fe.strategy;switch(Ve.type){case "allow_rerun":for(let rt of Ve.nodes)$.delete(rt),Q.delete(rt);break;case "alternative_nodes":for(let rt of Ve.nodes){let qe=`__relaxation_${De}_${rt.handler}`;le[qe]={...rt};}break;case "inject_facts":Qt(O,Ve.facts);break;case "accept_partial":{let rt=Date.now()-Y,qe=Object.values(me).reduce((et,_t)=>et+_t.totalTokens,0);return {achieved:!1,result:nt(N,O)??O,facts:{...O},executionOrder:F,nodeResults:me,steps:ze,totalTokens:qe,durationMs:rt,stepMetrics:ke,relaxations:oe,error:`Accepted partial result via relaxation tier "${Fe.label}"`}}case "custom":{let rt=nt(E,O)??0,qe={step:ze,facts:{...O},metrics:Xn(pn(rt),ke,ze),completedNodes:new Set($),failedNodes:new Map(L)};await ho(Ve.apply,qe);break}}oe.push({step:ze,tierIndex:De,label:Fe.label,strategy:Ve.type}),We=De+1,ue=0,Oe=!0;break}}if(!Oe){let De=nt(E,O)??0,Fe=Xn(pn(De),ke,ze);if(nt(Z,ze,Fe),!V||We>=V.length){let Ze=Date.now()-Y,Ve=Object.values(me).reduce((rt,qe)=>rt+qe.totalTokens,0);return {achieved:!1,result:nt(N,O)??O,facts:{...O},executionOrder:F,nodeResults:me,steps:ze,totalTokens:Ve,durationMs:Ze,stepMetrics:ke,relaxations:oe,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}ue=0;let So=Date.now(),To=E?nt(E,O)??0:nt(A,O)===!0?1:0,Eo=pn(To),Tr=0,Zt=[],Ao=Ft.map(async Oe=>{let De=le[Oe],Fe=De.requires??[],Ze=JSON.stringify(Fe.map(qe=>O[qe]));Q.set(Oe,Ze);let Ve,rt=nt(De.buildInput,O);if(rt!=null)Ve=rt;else {let qe=Object.create(null);for(let et of Fe)O[et]!=null&&(qe[et]=O[et]);Object.keys(qe).length>0?Ve=JSON.stringify(qe):O.input!=null?Ve=String(O.input):Ve=JSON.stringify(O);}try{let qe=await Xe(De.handler,Ve,{signal:ve??void 0,patternId:X});if(me[Oe]=qe,F.push(Oe),$.add(Oe),L.delete(Oe),De.extractOutput){let et=nt(De.extractOutput,qe);et&&(Qt(O,et),Zt.push(...Object.keys(et)));}else {let et=qe.output;if(et&&typeof et=="object")Qt(O,et),Zt.push(...Object.keys(et));else if(typeof et=="string")try{let _t=JSON.parse(et);if(_t&&typeof _t=="object"&&!Array.isArray(_t))Qt(O,_t),Zt.push(...Object.keys(_t));else for(let Er of De.produces)O[Er]=et,Zt.push(Er);}catch{for(let _t of De.produces)O[_t]=et,Zt.push(_t);}}return Tr+=qe.totalTokens,{nodeId:Oe,success:!0}}catch(qe){let et=(L.get(Oe)??0)+1;return L.set(Oe,et),{nodeId:Oe,success:!1,error:qe}}});await Promise.allSettled(Ao);let xo=E?nt(E,O)??0:nt(A,O)===!0?1:0,On=pn(xo),_n=On-Eo;if(ke.push({step:ze,durationMs:Date.now()-So,nodesRun:[...Ft],factsProduced:Zt,satisfaction:On,satisfactionDelta:_n,tokensConsumed:Tr}),S)for(let Oe of Ft){let De=le[Oe];S.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:De.handler,step:ze,nodeId:Oe,satisfaction:On,satisfactionDelta:_n});}for(let Oe of Ft){let De=le[Oe];Re[De.handler]||(Re[De.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let Fe=Re[De.handler];Fe.runs++,Fe.totalDelta+=_n,Fe.tokens+=me[Oe]?.totalTokens??0;}if(je=On,_n<=0?ue++:ue=0,Et&&Rr&&ze>Ye&&(ze-Ye)%ko===0){let Oe={type:"goal",version:1,id:Pt(),createdAt:new Date().toISOString(),label:`${wo}:step-${ze}`,patternId:X,stepsTotal:M,step:ze+1,facts:structuredClone(O),completedNodes:[...$],failedNodes:Object.fromEntries(L),nodeInputHashes:Object.fromEntries(Q),nodeOutputs:Object.fromEntries(Object.entries(me).map(([Fe,Ze])=>[Fe,{output:Ze.output,totalTokens:Ze.totalTokens}])),executionOrder:[...F],stepMetrics:[...ke],relaxations:[...oe],appliedRelaxationTiers:We,stallSteps:ue,lastSatisfaction:je,agentMetrics:Object.fromEntries(Object.entries(Re).map(([Fe,Ze])=>[Fe,{runs:Ze.runs,totalDelta:Ze.totalDelta,tokens:Ze.tokens}]))},De=await Yt(Oe,Rr,Et);De&&(Sr=De);}}let $e=Date.now()-Y,Ge=Object.values(me).reduce((ze,Wt)=>ze+Wt.totalTokens,0);return {achieved:!1,result:nt(N,O)??O,facts:{...O},executionOrder:F,nodeResults:me,steps:M,totalTokens:Ge,durationMs:$e,stepMetrics:ke,relaxations:oe,error:`Max steps (${M}) exhausted without achieving goal`}}catch($e){throw Le=$e instanceof Error?$e:new Error(String($e)),$e}finally{if(ne!=null&&clearTimeout(ne),ce&&i.signal&&i.signal.removeEventListener("abort",ce),S){let $e=Object.values(me).reduce((Ge,ze)=>Ge+ze.totalTokens,0);S.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:X,patternType:"goal",durationMs:Date.now()-Y,achieved:Jt,stepMetrics:ke,relaxations:oe,totalTokens:$e,...Le?{error:Le.message}:{}});}re("onPatternComplete",{patternId:X,patternType:"goal",durationMs:Date.now()-Y,timestamp:Date.now(),error:Le});}}function yo(i){if(!_)return [];let p=[],h=new Set;if(h.add(i),_.equivalencyGroups){for(let g of Object.values(_.equivalencyGroups))if(g.includes(i))for(let b of g)!h.has(b)&&I[b]&&(p.push(b),h.add(b));}if(_.useCapabilities!==false){let g=I[i];if(g?.capabilities&&g.capabilities.length>0)for(let[b,A]of Object.entries(I)){if(h.has(b))continue;let E=A.capabilities??[];g.capabilities.every(M=>E.includes(M))&&(p.push(b),h.add(b));}}if(te){let g=_.healthThreshold??30;return p.filter(b=>te.getHealthScore(b)>g)}return p}function bo(i){if(i.length===0)return null;if(!_||!te)return i[0]??null;if(_.selectionStrategy==="round-robin"&&Se){let g=[...i].sort().join(","),b=Se.get(g)??0,A=i[b%i.length];return Se.set(g,b+1),A}let p=i[0],h=te.getHealthScore(p);for(let g=1;g<i.length;g++){let b=te.getHealthScore(i[g]);b>h&&(p=i[g],h=b);}return p}function vo(i){switch(i.type){case "parallel":return i.handlers;case "sequential":return i.handlers;case "supervisor":return [i.supervisor,...i.workers];case "dag":return Object.values(i.nodes).map(p=>p.handler);case "reflect":return [i.handler,i.evaluator];case "race":return i.handlers;case "debate":return [...i.handlers,i.evaluator];case "goal":return Object.values(i.nodes).map(p=>p.handler);default:return []}}let wr={system:K,get facts(){return K.facts},get timeline(){return S},get healthMonitor(){return te},get derived(){return Object.freeze({...be})},onDerivedChange(i){return Qe.add(i),()=>{Qe.delete(i);}},get scratchpad(){return Lt},runAgent:Xe,runAgentStream:Jn,async runPattern(i,p){Ce();let h=o[i];if(!h){let A=Object.keys(o).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${i}". Available patterns: ${A}`)}let g=Date.now();if(S){let A=vo(h);S.record({type:"pattern_start",timestamp:g,snapshotId:null,patternId:i,patternType:h.type,handlers:A,taskIds:A.filter(E=>pe[E]!=null)});}let b;try{switch(h.type){case "parallel":return await po(h,p,i);case "sequential":return await Wn(h,p,i);case "supervisor":return await Vn(h,p,i);case "dag":return await Kn(h,p,i);case "reflect":return await Dn(h,p,i);case "race":return (await kr(h,p,i)).result;case "debate":return (await Pn(h,p,i)).result;case "goal":return (await In(h,p,i)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${h.type}`)}}catch(A){throw b=A instanceof Error?A:new Error(String(A)),A}finally{S&&S.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:i,patternType:h.type,durationMs:Date.now()-g,...b?{error:b.message}:{}});}},async runParallel(i,p,h,g){Ce();let b=Array.isArray(p)?p:i.map(()=>p);if(b.length!==i.length)throw new Error(`[Directive MultiAgent] Input count (${b.length}) must match agent count (${i.length})`);let A=new AbortController,E;g?.timeout&&(E=setTimeout(()=>A.abort(),g.timeout));try{let M=i.map((V,ee)=>Xe(V,b[ee],{signal:A.signal}).catch(Z=>{if(g?.minSuccess!==void 0)return null;throw Z})),N=await Promise.all(M),W=N.filter(V=>V!==null);if(g?.minSuccess!==void 0&&W.length<g.minSuccess){let V=N.length-W.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${W.length}/${i.length} agents succeeded (minimum required: ${g.minSuccess}, failed: ${V})`)}return h(W)}finally{E&&clearTimeout(E);}},async runSequential(i,p,h){Ce();let g=[],b=p;for(let A=0;A<i.length;A++){let E=i[A],M=await Xe(E,b);g.push(M),A<i.length-1&&(h?.transform?b=h.transform(M.output,E,A):b=typeof M.output=="string"?M.output:Ht(M.output));}return g},async handoff(i,p,h,g){if(Ce(),!I[i]){let E=Object.keys(I).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${i}" not found. Registered: ${E}`)}if(!I[p]){let E=Object.keys(I).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${p}" not found. Registered: ${E}`)}{let E=await zt("pre_handoff",i,I[i].agent.name,h,void 0,{handoff:{fromAgent:i,toAgent:p}});if(E.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};h=E.input;}let b={id:`handoff-${++Me}`,fromAgent:i,toAgent:p,input:h,context:g,requestedAt:Date.now()};he.push(b);try{r?.(b);}catch(E){ie&&console.debug("[Directive MultiAgent] onHandoff threw:",E);}re("onHandoff",b),S&&S.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:i,toAgent:p});let A=I[p].memory??d;if(A&&g)try{let E=Object.entries(g).map(([M,N])=>`${M}: ${Ht(N)}`).join(", ");A.addMessages([{role:"system",content:`[Handoff from ${i}] Context: ${E}`}]);}catch(E){ie&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",E);}try{let E=await Xe(p,h),M={request:b,result:E,completedAt:Date.now()};_e(M);try{a?.(M);}catch(W){ie&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",W);}re("onHandoffComplete",M),S&&S.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:i,toAgent:p,durationMs:M.completedAt-b.requestedAt});let N=he.indexOf(b);return N>=0&&he.splice(N,1),E}catch(E){let M=he.indexOf(b);throw M>=0&&he.splice(M,1),E}},approve(i){Ce();let p=Be.get(i);if(p){Be.delete(i);let h=Je(p);K.batch(()=>{let g=kt(h),b=200,A=[...g.approved,i];mt(h,{...g,pending:g.pending.filter(E=>E.id!==i),approved:A.length>b?A.slice(-b):A});});return}ie&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${i}"`);},reject(i,p){Ce();let h=Be.get(i);if(h){Be.delete(i);let g=Je(h);K.batch(()=>{let b=kt(g);p&&ie&&console.debug(`[Directive MultiAgent] Request ${i} rejected: ${p}`);let A={id:i,reason:p,rejectedAt:Date.now()},E=200,M=[...b.rejected,A];mt(g,{...b,pending:b.pending.filter(N=>N.id!==i),rejected:M.length>E?M.slice(-E):M});});return}ie&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${i}"`);},pause(){Ce(),it="paused",ie&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){Ce(),it==="paused"&&(it="idle",ie&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(i){let p=Pe[i];return p?{...p}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(Pe).map(([i,p])=>[i,{...p}]))},getPendingHandoffs(){return [...he]},get totalTokens(){return He},waitForIdle(i){let p=()=>ct===0&&Object.values(Pe).every(h=>h.status==="idle"||h.status==="completed"||h.status==="error");return p()?Promise.resolve():new Promise((h,g)=>{let b=null,A=()=>{Rt.delete(E),b&&clearTimeout(b);},E=()=>{p()&&(A(),h());};Rt.add(E),i!==void 0&&(b=setTimeout(()=>{A(),g(new Error(`[Directive MultiAgent] waitForIdle timed out after ${i}ms`));},i));})},run(i,p,h){return Xe(i,p,h)},runStream(i,p,h){return Jn(i,p,h)},registerAgent(i,p){if(Ce(),ft.has(i))throw new Error(`[Directive MultiAgent] Agent ID "${i}" is reserved and cannot be used`);if(I[i])throw new Error(`[Directive MultiAgent] Agent "${i}" is already registered. Unregister first.`);if(pe[i])throw new Error(`[Directive MultiAgent] ID "${i}" is already registered as a task`);let h=p.constraints?rn(p.constraints):{},g=Object.create(null);if(p.resolvers)for(let[A,E]of Object.entries(p.resolvers))g[A]={requirement:E.requirement,key:E.key,resolve:async(M,N)=>{let W=gt(N.facts),ee={facts:{...N.facts,...W},runAgent:async(Z,le,j)=>e(Z,le,j),signal:N.signal};return E.resolve(M,ee)}};let b=core.createModule(i,{schema:mn,init:A=>{st(A,{status:"idle",currentAgent:p.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(A,{pending:[],approved:[],rejected:[]}),Ct(A,[]),Mt(A,[]),bt(A,on());},constraints:h,resolvers:Object.keys(g).length>0?g:void 0});K.registerModule(i,b),I[i]=p,ht.set(i,new It(p.maxConcurrent??1)),Pe[i]={status:"idle",runCount:0,totalTokens:0},ie&&console.debug(`[Directive MultiAgent] Registered agent "${i}" (${p.agent.name})`),Ie();},unregisterAgent(i){if(Ce(),!I[i])throw new Error(`[Directive MultiAgent] Agent "${i}" is not registered`);if(Pe[i]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${i}" while it is running`);for(let[b,A]of Object.entries(o)){let E;switch(A.type){case "supervisor":E=[A.supervisor,...A.workers];break;case "dag":E=Object.values(A.nodes).map(M=>M.handler);break;case "reflect":E=[A.handler,A.evaluator];break;case "parallel":case "sequential":case "race":E=A.handlers;break;case "debate":E=[...A.handlers,A.evaluator];break;default:E=[];}E.includes(i)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${b}" references unregistered agent "${i}"`);}let h=ht.get(i);h&&(h.drain(),ht.delete(i));let g=Je(i);g&&K.batch(()=>{st(g,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(g,{pending:[],approved:[],rejected:[]}),Ct(g,[]),Mt(g,[]),bt(g,on());}),delete I[i],delete Pe[i],ie&&console.debug(`[Directive MultiAgent] Unregistered agent "${i}"`),Ie();},getAgentIds(){return Object.keys(I)},registerTask(i,p){if(Ce(),ft.has(i))throw new Error(`[Directive MultiAgent] Task ID "${i}" is reserved and cannot be used`);if(!i||typeof i!="string"||i.trim()!==i||i.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(I[i])throw new Error(`[Directive MultiAgent] ID "${i}" is already registered as an agent`);if(pe[i])throw new Error(`[Directive MultiAgent] Task "${i}" is already registered`);if(p.timeout!==void 0&&(!Number.isFinite(p.timeout)||p.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${i}" timeout must be a finite number > 0`);if(p.maxConcurrent!==void 0&&(!Number.isFinite(p.maxConcurrent)||p.maxConcurrent<1||!Number.isInteger(p.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${i}" maxConcurrent must be a finite integer >= 1`);if(p.retry){let{attempts:h,delayMs:g}=p.retry;if(!Number.isFinite(h)||h<1)throw new Error(`[Directive MultiAgent] Task "${i}" retry attempts must be a finite number >= 1`);if(g!==void 0&&(!Number.isFinite(g)||g<0))throw new Error(`[Directive MultiAgent] Task "${i}" retry delayMs must be a finite number >= 0`)}pe[i]=p,Ae[i]={status:"idle"},xe.set(i,new It(p.maxConcurrent??1)),ie&&console.debug(`[Directive MultiAgent] Registered task "${i}" (${p.label??i})`);},unregisterTask(i){if(Ce(),!pe[i])throw new Error(`[Directive MultiAgent] Task "${i}" is not registered`);if(Ae[i]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${i}" while it is running`);let h=xe.get(i);h&&(h.drain(),xe.delete(i)),delete pe[i],delete Ae[i],ie&&console.debug(`[Directive MultiAgent] Unregistered task "${i}"`);},getTaskIds(){return Object.keys(pe)},getTaskRegistry(){let i=Object.create(null);for(let[p,h]of Object.entries(pe))i[p]={label:h.label,description:h.description};return i},getTaskState(i){let p=Ae[i];return p?Object.freeze(structuredClone(p)):void 0},getAllTaskStates(){let i=Object.create(null);for(let[p,h]of Object.entries(Ae))i[p]=Object.freeze(structuredClone(h));return i},getNodeIds(){return [...Object.keys(I),...Object.keys(pe)]},reset(){Ce();for(let p of Object.keys(I)){let h=I[p]?.maxConcurrent??1;Pe[p]={status:"idle",runCount:0,totalTokens:0};let g=ht.get(p);g&&g.drain(),ht.set(p,new It(h));let b=Je(p);K.batch(()=>{st(b,{status:"idle",currentAgent:I[p].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),mt(b,{pending:[],approved:[],rejected:[]}),Ct(b,[]),Mt(b,[]),bt(b,on());});}for(let p of Object.keys(pe)){Ae[p]={status:"idle"};let h=xe.get(p);h&&h.drain(),xe.set(p,new It(pe[p].maxConcurrent??1));}Xt.clear(),dn.clear(),Be.clear(),he.length=0,Ue.length=0,Me=0,He=0,it="idle",ct=0,St();let i=Je("__coord");K.batch(()=>{adapterUtils.setBridgeFact(i,"__globalTokens",0),adapterUtils.setBridgeFact(i,"__status","idle"),adapterUtils.setBridgeFact(i,"__handoffs",[]),adapterUtils.setBridgeFact(i,"__handoffResults",[]),adapterUtils.setBridgeFact(i,"__budgetWarningFired",false),se&&adapterUtils.setBridgeFact(i,pt,{...se.init});}),te&&te.reset(),Ee=null;for(let p of Object.keys(be))delete be[p];Ie();},async checkpoint(i){Ce();for(let[h,g]of Object.entries(Pe))if(g.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${h}" is running`);for(let[h,g]of Object.entries(Ae))if(g.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${h}" is running`);if(!K.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let p={version:1,id:Pt(),createdAt:new Date().toISOString(),label:i?.label,systemExport:K.history.export(),timelineExport:S?.export()??null,localState:{type:"multi",globalTokenCount:He,globalStatus:it,agentStates:Object.fromEntries(Object.entries(Pe).map(([h,g])=>[h,structuredClone(g)])),handoffCounter:Me,pendingHandoffs:[...he],handoffResults:[...Ue],roundRobinCounters:Se?Object.fromEntries(Se):null,taskStates:Object.fromEntries(Object.entries(Ae).map(([h,g])=>[h,{lastOutput:g.lastOutput!=null?String(g.lastOutput):void 0,lastError:g.lastError}]))},memoryExport:d?d.export?.()??null:null,orchestratorType:"multi"};return q&&await q.save(p),p},restore(i,p){if(Ce(),!sn(i))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(i.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${i.orchestratorType}"`);if(!K.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");K.history.import(i.systemExport),p?.restoreTimeline!==false&&i.timelineExport&&S&&S.import(i.timelineExport),i.memoryExport&&d&&d.import&&d.import(i.memoryExport);let h=i.localState;He=h.globalTokenCount,it=h.globalStatus,Me=h.handoffCounter,he.length=0,he.push(...h.pendingHandoffs),Ue.length=0,Ue.push(...h.handoffResults);for(let[g,b]of Object.entries(h.agentStates))Pe[g]&&(Pe[g]={...b});if(h.roundRobinCounters&&Se){Se.clear();for(let[g,b]of Object.entries(h.roundRobinCounters))Se.set(g,b);}for(let[g,b]of Object.entries(I)){let A=ht.get(g);A&&A.drain(),ht.set(g,new It(b.maxConcurrent??1));}if(h.taskStates){for(let[g,b]of Object.entries(h.taskStates)){if(!pe[g])throw new Error(`[Directive MultiAgent] Checkpoint references task "${g}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);Ae[g]={status:"idle",lastOutput:b.lastOutput,lastError:b.lastError};}for(let[g,b]of Object.entries(pe)){let A=xe.get(g);A&&A.drain(),xe.set(g,new It(b.maxConcurrent??1));}}Ie();},runParallelStream(i,p,h,g){Ce();let b=Array.isArray(p)?p:i.map(()=>p);if(b.length!==i.length)throw new Error(`[Directive MultiAgent] Input count (${b.length}) must match agent count (${i.length})`);let A=new AbortController,E;g?.timeout&&(E=setTimeout(()=>A.abort(),g.timeout));let M=i.map((j,X)=>{let ve=Jn(j,b[X],{signal:A.signal});return {agentId:j,streamResult:ve}}),N=M.map(({agentId:j,streamResult:X})=>({agentId:j,stream:X.stream})),{stream:W,getDroppedCount:V}=nr(N),ee;g?.signal&&(ee=()=>A.abort(),g.signal.addEventListener("abort",ee,{once:true}));let Z=Promise.allSettled(M.map(({streamResult:j})=>j.result)).then(j=>{E&&clearTimeout(E),ee&&g?.signal&&g.signal.removeEventListener("abort",ee);let X=[];for(let ve of j)ve.status==="fulfilled"&&X.push(ve.value);if(g?.minSuccess!==void 0&&X.length<g.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${X.length}/${i.length} agents succeeded (minimum required: ${g.minSuccess})`);return X}),le=Z.then(j=>h(j));return Z.catch(()=>{}),le.catch(()=>{}),{stream:W,results:Z,merge:le,getDroppedCount:V,abort:()=>{A.abort(),ee&&g?.signal&&g.signal.removeEventListener("abort",ee);for(let{streamResult:j}of M)j.abort();}}},async runRace(i,p,h){Ce();let g={type:"race",handlers:i,extract:h?.extract,timeout:h?.timeout,minSuccess:h?.minSuccess,signal:h?.signal};return kr(g,p,"__imperative_race")},async runReflect(i,p,h,g){Ce();let b={type:"reflect",handler:i,evaluator:p,maxIterations:g?.maxIterations,parseEvaluation:g?.parseEvaluation,buildRetryInput:g?.buildRetryInput,extract:g?.extract,onExhausted:g?.onExhausted,onIteration:g?.onIteration,signal:g?.signal,timeout:g?.timeout,threshold:g?.threshold},A=await Dn(b,h,"__imperative_reflect"),E=Ee?[...Ee]:[],M=g?.maxIterations??2,N=E.length>0&&!E[E.length-1].passed&&E.length>=M;return {result:A,iterations:E.length,history:E,exhausted:N}},async runDebate(i,p,h,g){return Ce(),Pn({handlers:i,evaluator:p,maxRounds:g?.maxRounds,extract:g?.extract,parseJudgement:g?.parseJudgement,signal:g?.signal,timeout:g?.timeout},h,"__imperative_debate")},async runGoal(i,p,h,g){return Ce(),In({nodes:i,when:h,satisfaction:g?.satisfaction,maxSteps:g?.maxSteps,extract:g?.extract,timeout:g?.timeout,signal:g?.signal,selectionStrategy:g?.selectionStrategy,relaxation:g?.relaxation,onStep:g?.onStep,onStall:g?.onStall,checkpoint:g?.checkpoint},p,"__imperative_goal")},async resumeGoal(i,p){if(Ce(),!i||i.version!==1||i.type!=="goal"&&i.type!=="converge")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");let h=i.type==="converge"?{...i}:i;return In(p,{},h.patternId,h)},async resumeSequential(i,p){if(Ce(),!i||i.version!==1||i.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return Wn(p,i.currentInput,i.patternId,i)},async resumeSupervisor(i,p,h){if(Ce(),!i||i.version!==1||i.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let g=h?.input??i.currentInput;return Vn(p,g,i.patternId,i)},async resumeReflect(i,p,h){if(Ce(),!i||i.version!==1||i.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let g=h?.input??i.effectiveInput;return Dn(p,g,i.patternId,i)},async resumeDebate(i,p){if(Ce(),!i||i.version!==1||i.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return Pn(p,i.currentInput,i.patternId,i)},async resumeDag(i,p,h){if(Ce(),!i||i.version!==1||i.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let g=h?.input??i.input;return Kn(p,g,i.patternId,i)},async replay(i,p,h){if(Ce(),!q)throw new Error("[Directive MultiAgent] No checkpoint store configured");let g=await q.load(i);if(!g)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let b;try{let M=JSON.parse(g.systemExport);if(!M||typeof M!="object")throw new Error("Parsed checkpoint state is not an object");let N=new Set(["__proto__","constructor","prototype"]);for(let V of Object.keys(M))if(N.has(V))throw new Error(`Checkpoint state contains blocked key: ${V}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal","converge"]).has(M.type))throw new Error(`Unknown checkpoint pattern type: ${M.type}`);if(M.version!==1)throw new Error(`Unsupported checkpoint version: ${M.version}`);b=M;}catch(M){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${M instanceof Error?M.message:String(M)}`)}let A=cn(b),E=h?.input??("currentInput"in b?b.currentInput:"");switch(S&&S.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:i,patternType:b.type,step:A}),b.type){case "sequential":return Wn(p,E,b.patternId,b);case "supervisor":return Vn(p,E,b.patternId,b);case "reflect":return Dn(p,E,b.patternId,b);case "debate":return Pn(p,E,b.patternId,b);case "dag":return Kn(p,E,b.patternId,b);case "goal":return In(p,b.facts,b.patternId,b)}},resumeBreakpoint(i,p){Ce(),p&&Xt.set(i,p);for(let h of Object.keys(I)){let g=Je(h);if(yt(g).pending.some(A=>A.id===i)){K.batch(()=>{let A=yt(g),E=[...A.resolved,i];bt(g,{...A,pending:A.pending.filter(M=>M.id!==i),resolved:E.length>Dt?E.slice(-Dt):E});});return}}ie&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${i}"`);},cancelBreakpoint(i,p){Ce(),p&&dn.set(i,p);for(let h of Object.keys(I)){let g=Je(h);if(yt(g).pending.some(A=>A.id===i)){K.batch(()=>{let A=yt(g),E=[...A.cancelled,i];bt(g,{...A,pending:A.pending.filter(M=>M.id!==i),cancelled:E.length>Dt?E.slice(-Dt):E});});return}}ie&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${i}"`);},getPendingBreakpoints(){let i=[];for(let p of Object.keys(I)){let h=Je(p),g=yt(h);i.push(...g.pending);}return i},getLastReflectionHistory(){return Ee?[...Ee]:null},dispose(){ut||(wr.reset(),vt.clear(),Tt.clear(),Qe.clear(),Rt.clear(),ut=true,K.destroy());}};return Ie(),wr}function Qs(t,e){let n=Object.keys(e);for(let[u,l]of Object.entries(e))for(let d of l.deps??[])if(!e[d])throw new Error(`[Directive MultiAgent] DAG pattern "${t}": node "${u}" depends on unknown node "${d}"`);if(!n.some(u=>{let l=e[u]?.deps;return !l||l.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${t}": no root nodes (every node has dependencies)`);let r=Object.create(null),a=Object.create(null);for(let u of n)a[u]=[];for(let[u,l]of Object.entries(e)){r[u]=(l.deps??[]).length;for(let d of l.deps??[])a[d].push(u);}let s=[];for(let u of n)r[u]===0&&s.push(u);let c=0;for(;s.length>0;){let u=s.shift();c++;for(let l of a[u]??[])r[l]--,r[l]===0&&s.push(l);}if(c!==n.length)throw new Error(`[Directive MultiAgent] DAG pattern "${t}": cycle detected. Visited ${c}/${n.length} nodes.`)}function wt(t){return t.replace(/[^a-zA-Z0-9]/g,"_")}function Br(t){return t.replace(/[\r\n]+/g," ").replace(/[[\](){}|<>"]/g,e=>`#${e.charCodeAt(0)};`)}var Zs={square:["[","]"],round:["(",")"],stadium:["([","])"],hexagon:["{{","}}"],circle:["((","))"]};function Ke(t,e,n,o){let r;n==="task"?r=o?.task??"hexagon":n==="agent"?r=o?.agent??"square":r=o?.virtual??"circle";let[a,s]=Zs[r];return `${t}${a}${Br(e)}${s}`}function cr(t){let e=new Map;for(let r of t)e.set(r,(e.get(r)??0)+1);let n=new Map,o=[];for(let r of t){let a=wt(r);if(e.get(r)>1){let s=(n.get(r)??0)+1;n.set(r,s),o.push({id:`${a}_${s}`,label:`${r} #${s}`});}else o.push({id:a,label:r});}return o}function ea(t){let e=new Map,n=new Map;for(let a of Object.keys(t))e.has(a)||e.set(a,0),n.has(a)||n.set(a,[]);for(let[a,s]of Object.entries(t))for(let c of s.deps??[])n.get(c).push(a),e.set(a,(e.get(a)??0)+1);let o=[];for(let[a,s]of e)s===0&&o.push(a);o.sort();let r=[];for(;o.length>0;){let a=o.shift();r.push(a);let s=n.get(a)??[];s.sort();for(let c of s){let u=e.get(c)-1;if(e.set(c,u),u===0){let l=o.findIndex(d=>d>c);l===-1?o.push(c):o.splice(l,0,c);}}}return r}function ta(t){let e=t;if(e.type==="parallel"&&typeof e.merge=="function"||e.type==="sequential"&&typeof e.transform=="function"||e.type==="supervisor"&&typeof e.extract=="function"||e.type==="dag"&&typeof e.merge=="function"||e.type==="reflect"&&typeof e.parseEvaluation=="function"||e.type==="race"&&typeof e.extract=="function"||e.type==="debate"&&typeof e.extract=="function"||e.type==="goal"&&(typeof e.when=="function"||typeof e.satisfaction=="function"||typeof e.extract=="function"))return false;if(e.type==="dag"&&e.nodes)for(let n of Object.values(e.nodes)){let o=n;if(typeof o.when=="function"||typeof o.transform=="function")return false}if(e.type==="goal"&&e.nodes)for(let n of Object.values(e.nodes)){let o=n;if(typeof o.buildInput=="function"||typeof o.extractOutput=="function")return false}return true}function na(t,e){let n=[];return e&&n.push(`%%{init: {'theme': '${e}'}}%%`),n.push(`graph ${t}`),n.join(`
|
|
80
|
-
`)}var
|
|
20
|
+
SUMMARY:`;return t(a)}}function z(t){return t.replace(/[^a-zA-Z0-9]/g,"_")}function Ae(t){return t.replace(/[\r\n]+/g," ").replace(/[[\](){}|<>"]/g,e=>`#${e.charCodeAt(0)};`)}var Rn={square:["[","]"],round:["(",")"],stadium:["([","])"],hexagon:["{{","}}"],circle:["((","))"]};function j(t,e,r,s){let n;r==="task"?n=s?.task??"hexagon":r==="agent"?n=s?.agent??"square":n=s?.virtual??"circle";let[o,a]=Rn[n];return `${t}${o}${Ae(e)}${a}`}function pe(t){let e=new Map;for(let n of t)e.set(n,(e.get(n)??0)+1);let r=new Map,s=[];for(let n of t){let o=z(n);if(e.get(n)>1){let a=(r.get(n)??0)+1;r.set(n,a),s.push({id:`${o}_${a}`,label:`${n} #${a}`});}else s.push({id:o,label:n});}return s}function wn(t){let e=new Map,r=new Map;for(let o of Object.keys(t))e.has(o)||e.set(o,0),r.has(o)||r.set(o,[]);for(let[o,a]of Object.entries(t))for(let c of a.deps??[])r.get(c).push(o),e.set(o,(e.get(o)??0)+1);let s=[];for(let[o,a]of e)a===0&&s.push(o);s.sort();let n=[];for(;s.length>0;){let o=s.shift();n.push(o);let a=r.get(o)??[];a.sort();for(let c of a){let i=e.get(c)-1;if(e.set(c,i),i===0){let u=s.findIndex(l=>l>c);u===-1?s.push(c):s.splice(u,0,c);}}}return n}function Cn(t){let e=t;if(e.type==="parallel"&&typeof e.merge=="function"||e.type==="sequential"&&typeof e.transform=="function"||e.type==="supervisor"&&typeof e.extract=="function"||e.type==="dag"&&typeof e.merge=="function"||e.type==="reflect"&&typeof e.parseEvaluation=="function"||e.type==="race"&&typeof e.extract=="function"||e.type==="debate"&&typeof e.extract=="function"||e.type==="goal"&&(typeof e.when=="function"||typeof e.satisfaction=="function"||typeof e.extract=="function"))return false;if(e.type==="dag"&&e.nodes)for(let r of Object.values(e.nodes)){let s=r;if(typeof s.when=="function"||typeof s.transform=="function")return false}if(e.type==="goal"&&e.nodes)for(let r of Object.values(e.nodes)){let s=r;if(typeof s.buildInput=="function"||typeof s.extractOutput=="function")return false}return true}function Mn(t,e){let r=[];return e&&r.push(`%%{init: {'theme': '${e}'}}%%`),r.push(`graph ${t}`),r.join(`
|
|
21
|
+
`)}var An=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function xn(t,e,r){let s=pe(t.handlers),n=j("__input","Input","virtual",e),o=j("__merge","Merge","virtual",e),a=[];for(let c of s){let i=r?.has(c.label)?"task":"agent",u=j(c.id,c.label,i,e);a.push(` ${n} --> ${u}`),a.push(` ${u} --> ${o}`);}return a}function Tn(t,e,r){return t.handlers.length===0?[]:[` ${t.handlers.map(o=>({id:z(o),label:o})).map(o=>j(o.id,o.label,r?.has(o.label)?"task":"agent",e)).join(" --> ")}`]}function Pn(t,e){let r=z(t.supervisor),s=j(r,t.supervisor,"agent",e),n=[];for(let o of t.workers){let a=z(o),c=j(a,o,"agent",e);n.push(` ${s} -->|delegate| ${c}`),n.push(` ${c} -->|result| ${s}`);}return n}function kn(t,e,r){let s=wn(t.nodes),n=[],o=new Set;for(let a of s){let c=t.nodes[a],i=z(a),u=c.handler,l=r?.has(c.handler)?"task":"agent";(!c.deps||c.deps.length===0)&&(o.has(i)||(n.push(` ${j(i,u,l,e)}`),o.add(i)));let p=[...c.deps??[]].sort();for(let d of p){let y=z(d),f=t.nodes[d],m=f.handler,E=r?.has(f.handler)?"task":"agent",h=j(y,m,E,e),g=j(i,u,l,e);n.push(` ${h} --> ${g}`),o.add(y),o.add(i);}}return n}function In(t,e,r){let s=pe(t.handlers),n=j("__input","Input","virtual",e),o=j("__output","Output","virtual",e),a=[];for(let c of s){let i=r?.has(c.label)?"task":"agent",u=j(c.id,c.label,i,e);a.push(` ${n} --> ${u}`),a.push(` ${u} -.-> ${o}`);}return a}function Dn(t,e,r){let s=z(t.handler),n=z(t.evaluator),o=r?.has(t.handler)?"task":"agent",a=j(s,t.handler,o,e),c=j(n,t.evaluator,"agent",e),i=j("__output","Output","virtual",e);return [` ${a} --> ${c}`,` ${c} -->|feedback| ${a}`,` ${c} -->|pass| ${i}`]}function On(t,e,r){let s=Object.entries(t.nodes),n=[],o=new Map;for(let[u,l]of s)for(let p of l.produces)o.set(p,u);let a=new Set,c=new Set,i=[...s].sort(([u],[l])=>u.localeCompare(l));for(let[u,l]of i){let p=z(u),d=[...l.requires??[]].sort();if(d.length===0&&!a.has(p)){let y=r?.has(l.handler)?"task":"agent";n.push(` ${j(p,l.handler,y,e)}`),a.add(p);}for(let y of d){let f=o.get(y);if(f&&f!==u){let m=t.nodes[f];if(!m)continue;let E=`${f}->${u}`;if(!c.has(E)){let h=z(f),g=r?.has(m.handler)?"task":"agent",b=r?.has(l.handler)?"task":"agent",R=j(h,m.handler,g,e),A=j(p,l.handler,b,e);n.push(` ${R} -->|${Ae(y)}| ${A}`),a.add(h),a.add(p),c.add(E);}}}}for(let[u,l]of i){let p=z(u);if(!a.has(p)){let d=r?.has(l.handler)?"task":"agent";n.push(` ${j(p,l.handler,d,e)}`),a.add(p);}}return n}function Nn(t,e,r){let s=pe(t.handlers),n=z(t.evaluator),o=j(n,t.evaluator,"agent",e),a=j("__output","Output","virtual",e),c=[];for(let i of s){let u=r?.has(i.label)?"task":"agent",l=j(i.id,i.label,u,e);c.push(` ${l} --> ${o}`),c.push(` ${o} -->|next round| ${l}`);}return c.push(` ${o} --> ${a}`),c}function $n(t,e){let r=e?.direction??"LR",s=e?.shapes,n=e?.taskIds,o=Cn(t)?t:chunkB4ATEGA2_cjs.la(t);if(!An.has(o.type))throw new Error(`[Directive] patternToMermaid: unknown pattern type "${o.type}"`);let a=Mn(r,e?.theme),c=[];switch(o.type){case "parallel":c=xn(o,s,n);break;case "sequential":c=Tn(o,s,n);break;case "supervisor":c=Pn(o,s);break;case "dag":c=kn(o,s,n);break;case "race":c=In(o,s,n);break;case "reflect":c=Dn(o,s,n);break;case "debate":c=Nn(o,s,n);break;case "goal":c=On(o,s,n);break}return a+`
|
|
81
22
|
`+c.join(`
|
|
82
23
|
`)+`
|
|
83
|
-
`}function Tn(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function ga(t={}){let{maxHistory:e=1e3,defaultTtlMs:n=36e5,maxPendingPerAgent:o=100,persistence:r,onDelivery:a,onDeliveryError:s}=t,c=new Map,u=[],l=new Map,d=new Map;function f(y,T){if(T.types&&!T.types.includes(y.type)||T.from&&!(Array.isArray(T.from)?T.from:[T.from]).includes(y.from))return false;if(T.topics){let R=y.topic;if(R&&!T.topics.includes(R))return false}return !(T.priority&&y.priority&&!T.priority.includes(y.priority)||T.custom&&!T.custom(y))}function m(y){return y.ttlMs?Date.now()-y.timestamp>y.ttlMs:false}function k(y){return y.to==="*"?Array.from(c.keys()):Array.isArray(y.to)?y.to:[y.to]}async function w(y){if(m(y))return;let T=k(y),R=[],v=[];for(let C of T){let P=c.get(C)??[];if(P.length===0){let H=d.get(C)??[];for(H.push(y);H.length>o;)H.shift();d.set(C,H);continue}for(let H of P)(!H.filter||f(y,H.filter))&&v.push(Promise.resolve(H.handler(y)).then(()=>{R.push(C);},_=>{s?.(y,_ instanceof Error?_:new Error(String(_)));}));}v.length>0&&await Promise.allSettled(v),R.length>0&&a?.(y,R),r&&await r.save(y);}return {publish(y){let T={...y,id:Tn(),timestamp:Date.now(),priority:y.priority??"normal",ttlMs:y.ttlMs??n};for(u.push(T),l.set(T.id,T);u.length>e;){let R=u.shift();R&&l.delete(R.id);}return w(T).catch(R=>{let v=R instanceof Error?R:new Error(String(R));s?s(T,v):console.error("[Directive MessageBus] Delivery error:",v);}),T.id},subscribe(y,T,R){let v=Tn(),C={id:v,agentId:y,handler:T,filter:R,unsubscribe:()=>{let _=c.get(y)??[],q=_.findIndex(ye=>ye.id===v);q>=0&&_.splice(q,1);}},P=c.get(y)??[];P.push(C),c.set(y,P);let H=d.get(y)??[];d.delete(y);for(let _ of H)if(!R||f(_,R)){let q=T(_);q instanceof Promise&&q.catch(ye=>{let x=ye instanceof Error?ye:new Error(String(ye));s?s(_,x):console.error("[Directive MessageBus] Pending delivery error:",x);});}return C},getHistory(y,T=100){let R=u.filter(v=>!m(v));return y&&(R=R.filter(v=>f(v,y))),R.slice(-T)},getMessage(y){let T=l.get(y);if(!(T&&m(T)))return T},getPending(y){return (d.get(y)??[]).filter(R=>!m(R))},clear(){u.length=0,l.clear(),d.clear();},dispose(){u.length=0,l.clear(),d.clear(),c.clear();}}}function ma(t){let{bus:e,agents:n={},defaultTimeout:o=3e4,onAgentOnline:r,onAgentOffline:a}=t,s=new Map,c=new Map;for(let[l,d]of Object.entries(n))s.set(l,{...d,id:l,status:"offline",lastSeen:Date.now()});function u(l){if(l.type!=="RESPONSE"&&l.type!=="DELEGATION_RESULT")return;let d=l.correlationId??l.replyTo;if(!d)return;let f=c.get(d);f&&(clearTimeout(f.timer),c.delete(d),f.resolve(l));}return {register(l,d){let f=!s.has(l)||s.get(l)?.status==="offline";s.set(l,{...d,id:l,status:"online",lastSeen:Date.now()}),f&&r?.(l);},unregister(l){let d=s.get(l);d&&(d.status="offline",a?.(l));},getAgent(l){return s.get(l)},getAgents(){return Array.from(s.values())},findByCapability(l){return Array.from(s.values()).filter(d=>d.capabilities.includes(l)&&d.status==="online")},send(l,d,f){let m=s.get(l);return m&&(m.lastSeen=Date.now(),m.status="online"),e.publish({...f,from:l,to:d,type:f.type??"CUSTOM"})},async request(l,d,f,m,k=o){return new Promise((w,y)=>{let T=Tn(),R=e.subscribe(l,C=>{(C.correlationId===T||C.replyTo===T)&&(R.unsubscribe(),u(C));},{types:["RESPONSE"]}),v=setTimeout(()=>{R.unsubscribe(),c.delete(T),y(new Error(`[Directive Communication] Request timeout after ${k}ms`));},k);c.set(T,{resolve:w,reject:y,timer:v}),e.publish({type:"REQUEST",from:l,to:d,action:f,payload:m,timeout:k,correlationId:T});})},async delegate(l,d,f,m){return new Promise((k,w)=>{let y=Tn(),T=e.subscribe(l,v=>{(v.correlationId===y||v.replyTo===y)&&(T.unsubscribe(),u(v));},{types:["DELEGATION_RESULT"]}),R=setTimeout(()=>{T.unsubscribe(),c.delete(y),w(new Error(`[Directive Communication] Delegation timeout after ${o}ms`));},o);c.set(y,{resolve:k,reject:w,timer:R}),e.publish({type:"DELEGATION",from:l,to:d,task:f,context:m,correlationId:y});})},async query(l,d,f,m){return new Promise((k,w)=>{let y=Tn(),T=e.subscribe(l,v=>{(v.correlationId===y||v.replyTo===y)&&(T.unsubscribe(),u(v));},{types:["RESPONSE"]}),R=setTimeout(()=>{T.unsubscribe(),c.delete(y),w(new Error(`[Directive Communication] Query timeout after ${o}ms`));},o);c.set(y,{resolve:k,reject:w,timer:R}),e.publish({type:"QUERY",from:l,to:d,question:f,context:m,correlationId:y});})},broadcast(l,d){return e.publish({...d,from:l,to:"*",type:d.type??"INFORM"})},listen(l,d,f){let m=s.get(l);return m&&(m.status="online",m.lastSeen=Date.now(),r?.(l)),e.subscribe(l,d,f)},getBus(){return e},dispose(){for(let[,l]of c)clearTimeout(l.timer);c.clear(),s.clear();}}}function fa(t,e){let n=new Map,o=t.listen(e,async r=>{if(r.type==="REQUEST"){let a=r,s=n.get(a.action),c;if(s)try{let u=await s(a.payload);c={type:"RESPONSE",success:u.success,result:u.result,error:u.error};}catch(u){c={type:"RESPONSE",success:false,error:u instanceof Error?u.message:String(u)};}else c={type:"RESPONSE",success:false,error:`Unknown action: ${a.action}`};t.send(e,r.from,{...c,correlationId:r.correlationId??r.id,replyTo:r.correlationId??r.id});}},{types:["REQUEST"]});return {onRequest(r,a){n.set(r,a);},offRequest(r){n.delete(r);},dispose(){o.unsubscribe(),n.clear();}}}function ha(t,e){let n=null,o=t.listen(e,async r=>{if(r.type==="DELEGATION"&&n){let a=r,s=Date.now(),c;try{let u=await n(a.task,a.context);c={type:"DELEGATION_RESULT",success:u.success,result:u.result,error:u.error,metrics:u.metrics??{durationMs:Date.now()-s}};}catch(u){c={type:"DELEGATION_RESULT",success:false,error:u instanceof Error?u.message:String(u),metrics:{durationMs:Date.now()-s}};}t.send(e,r.from,{...c,correlationId:r.correlationId??r.id,replyTo:r.correlationId??r.id});}},{types:["DELEGATION"]});return {onDelegation(r){n=r;},offDelegation(){n=null;},dispose(){o.unsubscribe(),n=null;}}}function ya(t,e){let n=new Map,o=t.listen(e,r=>{if(r.type==="UPDATE"){let a=r,s=n.get(a.topic)??[];for(let c of s)c(a.content);}},{types:["UPDATE"]});return {subscribe(r,a){let s=new Map;for(let c of r){let u=n.get(c)??[],l=d=>a(c,d);s.set(c,l),u.push(l),n.set(c,u);}return t.broadcast(e,{type:"SUBSCRIBE",topics:r}),()=>{for(let[c,u]of s){let l=n.get(c);if(l){let d=l.indexOf(u);d>=0&&l.splice(d,1),l.length===0&&n.delete(c);}}s.clear(),t.broadcast(e,{type:"UNSUBSCRIBE",topics:r});}},publish(r,a){t.broadcast(e,{type:"UPDATE",topic:r,content:a});},dispose(){o.unsubscribe(),n.clear();}}}var ba=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:t=>{let e=t.replace(/[-\s]/g,"");return !(e.startsWith("000")||e.startsWith("666")||e.startsWith("9")||e.slice(3,5)==="00"||e.slice(5)==="0000")},confidence:.95},{type:"credit_card",pattern:/\b(\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4})\b|\b(\d{15,16})\b/g,validate:t=>{let e=t.replace(/[-\s]/g,"");if(e.length<13||e.length>19)return false;let n=0,o=false;for(let r=e.length-1;r>=0;r--){let a=e[r];if(!a)continue;let s=Number.parseInt(a,10);o&&(s*=2,s>9&&(s-=9)),n+=s,o=!o;}return n%10===0},confidence:.95},{type:"email",pattern:/\b([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})\b/gi,confidence:.9},{type:"phone",pattern:/\b(\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4})\b/g,validate:t=>{let e=t.replace(/\D/g,"");return e.length>=10&&e.length<=11},confidence:.8},{type:"date_of_birth",pattern:/\b(born|dob|birth.?date|date.?of.?birth)[:.\s]+(\d{1,4}[-/]\d{1,2}[-/]\d{1,4})\b/gi,confidence:.85},{type:"ip_address",pattern:/\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/g,validate:t=>t.split(".").every(n=>{let o=Number.parseInt(n,10);return o>=0&&o<=255}),confidence:.9},{type:"bank_account",pattern:/\b(account|acct)[\s#:]+(\d{8,17})\b/gi,confidence:.7},{type:"passport",pattern:/\b(passport)[\s#:]+([A-Z0-9]{6,9})\b/gi,confidence:.75},{type:"driver_license",pattern:/\b(driver'?s?\s*licen[cs]e|dl)[\s#:]+([A-Z0-9]{5,15})\b/gi,confidence:.7},{type:"medical_id",pattern:/\b(mrn|medical.?record|patient.?id)[\s#:]+([A-Z0-9-]{6,15})\b/gi,confidence:.7}];function va(t){let e=[],n="street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|way|boulevard|blvd|circle|cir|place|pl",o=new RegExp(`\\b(\\d{1,5}\\s+(?:\\w+\\s+){1,4}(?:${n})\\b[^\\n]{0,50}\\b[A-Z]{2}\\s+\\d{5}(?:-\\d{4})?)\\b`,"gi"),r;for(;(r=o.exec(t))!==null;)e.push({type:"address",value:r[0],position:{start:r.index,end:r.index+r[0].length},confidence:.7});return e}var Lr=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function ka(t){let e=[],n=Lr.join("|"),o=new RegExp(`\\b(${n})[.,:]?\\s+([A-Z][a-z]{1,20}(?:\\s[A-Z][a-z]{1,20}){0,2})\\b`,"gi"),r;for(;(r=o.exec(t))!==null;){let a=r[2],s=r[1];a&&(a.split(/\s+/).length>=2||s&&Lr.some(c=>s.toLowerCase().includes(c)))&&e.push({type:"name",value:a,position:{start:r.index,end:r.index+r[0].length},confidence:.6,context:r[0]});}return e}var Fr=1e5,Gn={name:"regex",async detect(t,e){if(t.length>Fr)throw new Error(`[Directive] Input exceeds maximum length of ${Fr} characters for PII detection. Truncate input or process in chunks.`);let n=[],o=new Set(e);for(let r of ba){if(!o.has(r.type))continue;let a=new RegExp(r.pattern.source,r.pattern.flags),s;for(;(s=a.exec(t))!==null;){let c=s[1]||s[0],u=t.slice(Math.max(0,s.index-20),s.index+c.length+20);r.validate&&!r.validate(c,u)||n.push({type:r.type,value:c,position:{start:s.index,end:s.index+c.length},confidence:r.confidence,context:u});}}return o.has("address")&&n.push(...va(t)),o.has("name")&&n.push(...ka(t)),n}};function Bn(t,e,n="typed"){let o=[...e].sort((a,s)=>s.position.start-a.position.start),r=t;for(let a of o){let s;switch(n){case "placeholder":s="[REDACTED]";break;case "typed":s=`[${a.type.toUpperCase()}]`;break;case "masked":s="*".repeat(a.value.length);break;case "hashed":s=`[HASH:${wa(a.value)}]`;break}r=r.slice(0,a.position.start)+s+r.slice(a.position.end);}return r}function wa(t){let o=2166136261;for(let r=0;r<t.length;r++)o^=t.charCodeAt(r),o=Math.imul(o,16777619);return (o>>>0).toString(16).padStart(8,"0")}var qr=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function Ur(t={}){let{types:e=qr,detector:n="regex",redact:o=false,redactionStyle:r="typed",minConfidence:a=.7,onDetected:s,allowlist:c=[],minItemsToBlock:u=1,detectorTimeout:l=5e3}=t,d=n==="regex"?Gn:n,f=new Set(c.map(k=>k.toLowerCase().trim()));async function m(k,w){if(d===Gn)return d.detect(k,w);let y;try{return await Promise.race([d.detect(k,w),new Promise((T,R)=>{y=setTimeout(()=>R(new Error(`[Directive] PII detector '${d.name}' timed out after ${l}ms`)),l);})])}finally{clearTimeout(y);}}return async k=>{let y=(await m(k.input,e)).filter(T=>!(T.confidence<a||f.has(T.value.toLowerCase().trim())));if(y.length>0&&s?.(y),y.length>=u){if(o)return {passed:true,transformed:Bn(k.input,y,r)};let T={};for(let v of y)T[v.type]=(T[v.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(T).map(([v,C])=>`${v}: ${C}`).join(", ")})`}}return {passed:true}}}function Ra(t={}){let e=Ur(t);return async(n,o)=>{let r=typeof n.output=="string"?n.output:JSON.stringify(n.output);return e({input:r,agentName:n.agentName},o)}}async function lr(t,e={}){let{types:n=qr,detector:o="regex",minConfidence:r=.7,timeout:a=5e3}=e,s=o==="regex"?Gn:o,c;if(s===Gn)c=await s.detect(t,n);else {let d;try{c=await Promise.race([s.detect(t,n),new Promise((f,m)=>{d=setTimeout(()=>m(new Error(`[Directive] PII detector '${s.name}' timed out after ${a}ms`)),a);})]);}finally{clearTimeout(d);}}let u=c.filter(d=>d.confidence>=r),l={};for(let d of u)l[d.type]=(l[d.type]||0)+1;return {detected:u.length>0,items:u,typeCounts:l}}var Sa=1e4,Ta=10080*60*1e3,Ea=6e4,Hr="0".repeat(64);function Aa(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function xa(t){return new TextEncoder().encode(t)}function Ca(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function zr(t){let e=xa(t),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Ca(new Uint8Array(n))}function Jr(t){let{id:e,timestamp:n,eventType:o,previousHash:r,payload:a,actorId:s,sessionId:c}=t;return JSON.stringify({id:e,timestamp:n,eventType:o,previousHash:r,payload:a,actorId:s,sessionId:c})}function Ma(t){return JSON.parse(JSON.stringify(t))}async function Da(t,e){let n=Ma(t);async function o(r){if(typeof r=="string"){let a=await lr(r,{types:e.types,minConfidence:e.minConfidence??.7});if(a.detected){let s=e.allowlist?a.items.filter(c=>!e.allowlist.includes(c.value.toLowerCase())):a.items;if(s.length>0)return Bn(r,s,e.redactionStyle)}return r}if(Array.isArray(r))return Promise.all(r.map(o));if(r&&typeof r=="object"){let a={};for(let[s,c]of Object.entries(r))a[s]=await o(c);return a}return r}for(let[r,a]of Object.entries(n))n[r]=await o(a);return n}function Pa(t={}){let{maxEntries:e=Sa,retentionMs:n=Ta,exportInterval:o=Ea,exporter:r,piiMasking:a,signing:s,sessionId:c,actorId:u,events:l={}}=t,d=[],f=0,m=0,k=0,w=true,y;function T(){return d.length===0?Hr:d[d.length-1].hash}async function R(v,C,P){let H={id:Aa(),timestamp:Date.now(),eventType:v,previousHash:T(),payload:C,actorId:u,sessionId:c};a?.enabled&&(H.maskedPayload=await Da(C,a));let _=Jr(H),q=await zr(_),ye={...H,hash:q};for(s&&(ye.signature=await s.signFn(q)),d.push(ye);d.length>e;)d.shift(),m++,f>0&&f--;return l.onEntryAdded?.(ye),ye}return r&&o>0&&(y=setInterval(async()=>{try{let v=d.slice(f);v.length>0&&(await r(v),k+=v.length,f=d.length);}catch(v){l.onExportError?.(v instanceof Error?v:new Error(String(v)),d.slice(f));}},o)),{getEntries(v){let C=[...d];if(v){if(v.eventTypes?.length){let P=new Set(v.eventTypes);C=C.filter(H=>P.has(H.eventType));}v.actorId&&(C=C.filter(P=>P.actorId===v.actorId)),v.sessionId&&(C=C.filter(P=>P.sessionId===v.sessionId)),v.since!==void 0&&(C=C.filter(P=>P.timestamp>=v.since)),v.until!==void 0&&(C=C.filter(P=>P.timestamp<=v.until)),v.offset!==void 0&&(C=C.slice(v.offset)),v.limit!==void 0&&(C=C.slice(0,v.limit));}return C},async verifyChain(){if(d.length===0)return {valid:true,entriesVerified:0,verifiedAt:Date.now()};d[0].previousHash;for(let C=0;C<d.length;C++){let P=d[C],H=Jr({id:P.id,timestamp:P.timestamp,eventType:P.eventType,previousHash:P.previousHash,payload:P.payload,actorId:P.actorId,sessionId:P.sessionId}),_=await zr(H);if(P.hash!==_){w=false;let q={valid:false,entriesVerified:C,brokenAt:{index:C,entryId:P.id,expectedHash:_,actualHash:P.hash},verifiedAt:Date.now()};return l.onChainBroken?.(q),q}if(C>0){let q=d[C-1];if(P.previousHash!==q.hash){w=false;let ye={valid:false,entriesVerified:C,brokenAt:{index:C,entryId:P.id,expectedHash:q.hash,actualHash:P.previousHash},verifiedAt:Date.now()};return l.onChainBroken?.(ye),ye}}if(s?.verifyFn&&P.signature&&!await s.verifyFn(P.hash,P.signature)){w=false;let ye={valid:false,entriesVerified:C,brokenAt:{index:C,entryId:P.id,expectedHash:"signature-invalid",actualHash:P.signature},verifiedAt:Date.now()};return l.onChainBroken?.(ye),ye}}return w=true,{valid:true,entriesVerified:d.length,verifiedAt:Date.now()}},async export(v){let C=[...d];return v!==void 0&&(C=C.filter(P=>P.timestamp>=v)),r&&C.length>0&&(await r(C),k+=C.length),C},prune(){let v=Date.now()-n,C=d.length;for(;d.length>0&&d[0].timestamp<v;)d.shift(),f>0&&f--;let P=C-d.length;return m+=P,P},getStats(){let v={};for(let C of d)v[C.eventType]=(v[C.eventType]??0)+1;return {totalEntries:d.length,byEventType:v,oldestEntry:d[0]?.timestamp,newestEntry:d[d.length-1]?.timestamp,entriesPruned:m,entriesExported:k,chainIntegrity:w}},async dispose(){if(y&&(clearInterval(y),y=void 0),r)try{let v=d.slice(f);v.length>0&&(await r(v),k+=v.length);}catch(v){l.onExportError?.(v instanceof Error?v:new Error(String(v)),d.slice(f));}},addEntry(v,C){return R(v,C)},createPlugin(){return {name:"audit-trail",onFactSet:(v,C,P)=>{R("fact.set",{key:v,value:C,prev:P}).catch(console.error);},onFactsBatch:v=>{R("fact.batch",{changes:v.map(C=>({key:C.key,value:C.value,prev:C.prev}))}).catch(console.error);},onRequirementCreated:v=>{R("requirement.created",{id:v.id,type:v.requirement.type,payload:v.requirement}).catch(console.error);},onRequirementMet:(v,C)=>{R("requirement.met",{id:v.id,type:v.requirement.type,byResolver:C}).catch(console.error);},onResolverStart:(v,C)=>{R("resolver.start",{resolver:v,requirementId:C.id,requirementType:C.requirement.type}).catch(console.error);},onResolverComplete:(v,C,P)=>{R("resolver.complete",{resolver:v,requirementId:C.id,requirementType:C.requirement.type,duration:P}).catch(console.error);},onResolverError:(v,C,P)=>{R("resolver.error",{resolver:v,requirementId:C.id,requirementType:C.requirement.type,error:P instanceof Error?P.message:String(P)}).catch(console.error);},onError:v=>{R("error.occurred",{source:v.source,sourceId:v.sourceId,message:v.message,context:v.context}).catch(console.error);},onErrorRecovery:(v,C)=>{R("error.recovery",{source:v.source,message:v.message,strategy:C}).catch(console.error);}}}}}function Ia(t){return {onAgentStart:(e,n)=>{t.addEntry("agent.run.start",{agentName:e,input:n});},onAgentComplete:(e,n,o,r)=>{t.addEntry("agent.run.complete",{agentName:e,output:n,tokens:o,cost:r});},onAgentError:(e,n)=>{t.addEntry("agent.run.error",{agentName:e,error:n.message,stack:n.stack});},onToolStart:(e,n,o)=>{t.addEntry("tool.call.start",{toolName:e,toolCallId:n,args:o});},onToolComplete:(e,n,o)=>{t.addEntry("tool.call.complete",{toolName:e,toolCallId:n,result:o});},onToolError:(e,n,o)=>{t.addEntry("tool.call.error",{toolName:e,toolCallId:n,error:o.message});},onApprovalRequested:(e,n,o)=>{t.addEntry("approval.requested",{toolName:e,toolCallId:n,args:o});},onApprovalGranted:(e,n)=>{t.addEntry("approval.granted",{toolName:e,toolCallId:n});},onApprovalDenied:(e,n,o)=>{t.addEntry("approval.denied",{toolName:e,toolCallId:n,reason:o});}}}var En=[{pattern:/ignore\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?|rules?|guidelines?)/i,name:"ignore-previous",severity:"critical",category:"instruction_override"},{pattern:/disregard\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?)/i,name:"disregard-previous",severity:"critical",category:"instruction_override"},{pattern:/forget\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?)/i,name:"forget-previous",severity:"critical",category:"instruction_override"},{pattern:/override\s+(the\s+)?(system|base)\s+(prompt|instructions?)/i,name:"override-system",severity:"critical",category:"instruction_override"},{pattern:/\bDAN\s+(mode|jailbreak)\b/i,name:"dan-mode",severity:"critical",category:"jailbreak"},{pattern:/\bjailbreak(ed)?\s*(mode)?\b/i,name:"jailbreak-keyword",severity:"high",category:"jailbreak"},{pattern:/developer\s+mode\s+(enabled|activated|on)/i,name:"developer-mode",severity:"critical",category:"jailbreak"},{pattern:/pretend\s+(you\s+)?(are|can|have)\s+(no\s+)?(restrictions?|limits?|boundaries?|ethics)/i,name:"pretend-no-restrictions",severity:"high",category:"jailbreak"},{pattern:/you\s+(now\s+)?have\s+no\s+(ethical\s+)?(restrictions?|guidelines?|boundaries?)/i,name:"no-restrictions",severity:"high",category:"jailbreak"},{pattern:/you\s+are\s+now\s+(a|an)\s+\w+\s+(that|who)\s+(can|will|must)/i,name:"role-assignment",severity:"medium",category:"role_manipulation"},{pattern:/from\s+now\s+on,?\s+(you\s+)?(will|must|should)\s+(only\s+)?/i,name:"from-now-on",severity:"medium",category:"role_manipulation"},{pattern:/^(system|assistant|user):\s*/im,name:"fake-role-marker",severity:"high",category:"context_manipulation"},{pattern:/<\|?(system|endofprompt|im_start|im_end)\|?>/i,name:"special-token-injection",severity:"critical",category:"context_manipulation"},{pattern:/```(system|assistant|instructions?)\n/i,name:"markdown-code-injection",severity:"medium",category:"delimiter_injection"},{pattern:/<system>|<\/system>|<instructions?>|<\/instructions?>/i,name:"xml-tag-injection",severity:"high",category:"delimiter_injection"},{pattern:/fetch\s+(content\s+)?(from|at)\s+(the\s+)?url/i,name:"url-fetch-instruction",severity:"medium",category:"indirect_injection"},{pattern:/execute\s+(the\s+)?(code|script|command)\s+(from|in|at)/i,name:"execute-from-source",severity:"high",category:"indirect_injection"}],dr=[...En,{pattern:/act\s+as\s+(if\s+)?(you\s+)?(were|are|can)/i,name:"act-as",severity:"low",category:"role_manipulation"},{pattern:/new\s+instructions?:/i,name:"new-instructions",severity:"medium",category:"instruction_override"},{pattern:/\[system\]|\[admin\]|\[developer\]/i,name:"bracket-role-marker",severity:"medium",category:"context_manipulation"},{pattern:/base64|rot13|decode\s+(this|the)/i,name:"encoding-reference",severity:"low",category:"encoding_evasion"},{pattern:/\u200b|\u200c|\u200d|\u2060|\ufeff/,name:"zero-width-chars",severity:"medium",category:"encoding_evasion"}],Wr=1e5;function pr(t,e=En){if(t.length>Wr)throw new Error(`[Directive] Input exceeds maximum length of ${Wr} characters for injection detection. Truncate input or process in chunks.`);let n=[];for(let{pattern:s,name:c,severity:u,category:l}of e){let f=new RegExp(s.source,s.flags).exec(t);f&&n.push({name:c,category:l,severity:u,match:f[0],position:f.index});}let o={low:10,medium:25,high:50,critical:100},r=n.reduce((s,c)=>s+o[c.severity],0),a=Math.min(100,r);return {detected:n.length>0,patterns:n,riskScore:a}}function Vr(t,e=En){let n=t.replace(/\u200b|\u200c|\u200d|\u2060|\ufeff/g,""),o=e.map(l=>`(${l.pattern.source})`);if(o.length===0)return n;let r=e.some(l=>l.pattern.flags.includes("g")),a=e.some(l=>l.pattern.flags.includes("i")),s=e.some(l=>l.pattern.flags.includes("m")),c=`${r?"g":""}${a?"i":""}${s?"m":""}`,u=new RegExp(o.join("|"),c||"gi");return n=n.replace(u,"[REDACTED]"),n}function Kr(t={}){let{additionalPatterns:e=[],replacePatterns:n,strictMode:o=false,blockThreshold:r=50,sanitize:a=false,onBlocked:s,ignoreCategories:c=[]}=t,u;if(n?u=n:u=o?[...dr]:[...En],u=[...u,...e],c.length>0){let l=new Set(c);u=u.filter(d=>!l.has(d.category));}return l=>{let d=pr(l.input,u);if(d.detected&&d.riskScore>=r){if(s?.(l.input,d),a)return {passed:true,transformed:Vr(l.input,u)};let f=d.patterns.sort((m,k)=>{let w={critical:0,high:1,medium:2,low:3};return w[m.severity]-w[k.severity]}).slice(0,3).map(m=>m.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${d.riskScore}%, patterns: ${f})`}}return {passed:true}}}function Oa(t,e){return `[UNTRUSTED_CONTENT source="${e}"]
|
|
24
|
+
`}function W(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function _n(t={}){let{maxHistory:e=1e3,defaultTtlMs:r=36e5,maxPendingPerAgent:s=100,persistence:n,onDelivery:o,onDeliveryError:a}=t,c=new Map,i=[],u=new Map,l=new Map;function p(m,E){if(E.types&&!E.types.includes(m.type)||E.from&&!(Array.isArray(E.from)?E.from:[E.from]).includes(m.from))return false;if(E.topics){let h=m.topic;if(h&&!E.topics.includes(h))return false}return !(E.priority&&m.priority&&!E.priority.includes(m.priority)||E.custom&&!E.custom(m))}function d(m){return m.ttlMs?Date.now()-m.timestamp>m.ttlMs:false}function y(m){return m.to==="*"?Array.from(c.keys()):Array.isArray(m.to)?m.to:[m.to]}async function f(m){if(d(m))return;let E=y(m),h=[],g=[];for(let b of E){let R=c.get(b)??[];if(R.length===0){let A=l.get(b)??[];for(A.push(m);A.length>s;)A.shift();l.set(b,A);continue}for(let A of R)(!A.filter||p(m,A.filter))&&g.push(Promise.resolve(A.handler(m)).then(()=>{h.push(b);},x=>{a?.(m,x instanceof Error?x:new Error(String(x)));}));}g.length>0&&await Promise.allSettled(g),h.length>0&&o?.(m,h),n&&await n.save(m);}return {publish(m){let E={...m,id:W(),timestamp:Date.now(),priority:m.priority??"normal",ttlMs:m.ttlMs??r};for(i.push(E),u.set(E.id,E);i.length>e;){let h=i.shift();h&&u.delete(h.id);}return f(E).catch(h=>{let g=h instanceof Error?h:new Error(String(h));a?a(E,g):console.error("[Directive MessageBus] Delivery error:",g);}),E.id},subscribe(m,E,h){let g=W(),b={id:g,agentId:m,handler:E,filter:h,unsubscribe:()=>{let x=c.get(m)??[],k=x.findIndex(O=>O.id===g);k>=0&&x.splice(k,1);}},R=c.get(m)??[];R.push(b),c.set(m,R);let A=l.get(m)??[];l.delete(m);for(let x of A)if(!h||p(x,h)){let k=E(x);k instanceof Promise&&k.catch(O=>{let v=O instanceof Error?O:new Error(String(O));a?a(x,v):console.error("[Directive MessageBus] Pending delivery error:",v);});}return b},getHistory(m,E=100){let h=i.filter(g=>!d(g));return m&&(h=h.filter(g=>p(g,m))),h.slice(-E)},getMessage(m){let E=u.get(m);if(!(E&&d(E)))return E},getPending(m){return (l.get(m)??[]).filter(h=>!d(h))},clear(){i.length=0,u.clear(),l.clear();},destroy(){i.length=0,u.clear(),l.clear(),c.clear();}}}function jn(t){let{bus:e,agents:r={},defaultTimeout:s=3e4,onAgentOnline:n,onAgentOffline:o}=t,a=new Map,c=new Map;for(let[u,l]of Object.entries(r))a.set(u,{...l,id:u,status:"offline",lastSeen:Date.now()});function i(u){if(u.type!=="RESPONSE"&&u.type!=="DELEGATION_RESULT")return;let l=u.correlationId??u.replyTo;if(!l)return;let p=c.get(l);p&&(clearTimeout(p.timer),c.delete(l),p.resolve(u));}return {register(u,l){let p=!a.has(u)||a.get(u)?.status==="offline";a.set(u,{...l,id:u,status:"online",lastSeen:Date.now()}),p&&n?.(u);},unregister(u){let l=a.get(u);l&&(l.status="offline",o?.(u));},getAgent(u){return a.get(u)},getAgents(){return Array.from(a.values())},findByCapability(u){return Array.from(a.values()).filter(l=>l.capabilities.includes(u)&&l.status==="online")},send(u,l,p){let d=a.get(u);return d&&(d.lastSeen=Date.now(),d.status="online"),e.publish({...p,from:u,to:l,type:p.type??"CUSTOM"})},async request(u,l,p,d,y=s){return new Promise((f,m)=>{let E=W(),h=e.subscribe(u,b=>{(b.correlationId===E||b.replyTo===E)&&(h.unsubscribe(),i(b));},{types:["RESPONSE"]}),g=setTimeout(()=>{h.unsubscribe(),c.delete(E),m(new Error(`[Directive Communication] Request timeout after ${y}ms`));},y);c.set(E,{resolve:f,reject:m,timer:g}),e.publish({type:"REQUEST",from:u,to:l,action:p,payload:d,timeout:y,correlationId:E});})},async delegate(u,l,p,d){return new Promise((y,f)=>{let m=W(),E=e.subscribe(u,g=>{(g.correlationId===m||g.replyTo===m)&&(E.unsubscribe(),i(g));},{types:["DELEGATION_RESULT"]}),h=setTimeout(()=>{E.unsubscribe(),c.delete(m),f(new Error(`[Directive Communication] Delegation timeout after ${s}ms`));},s);c.set(m,{resolve:y,reject:f,timer:h}),e.publish({type:"DELEGATION",from:u,to:l,task:p,context:d,correlationId:m});})},async query(u,l,p,d){return new Promise((y,f)=>{let m=W(),E=e.subscribe(u,g=>{(g.correlationId===m||g.replyTo===m)&&(E.unsubscribe(),i(g));},{types:["RESPONSE"]}),h=setTimeout(()=>{E.unsubscribe(),c.delete(m),f(new Error(`[Directive Communication] Query timeout after ${s}ms`));},s);c.set(m,{resolve:y,reject:f,timer:h}),e.publish({type:"QUERY",from:u,to:l,question:p,context:d,correlationId:m});})},broadcast(u,l){return e.publish({...l,from:u,to:"*",type:l.type??"INFORM"})},listen(u,l,p){let d=a.get(u);return d&&(d.status="online",d.lastSeen=Date.now(),n?.(u)),e.subscribe(u,l,p)},getBus(){return e},destroy(){for(let[,u]of c)clearTimeout(u.timer);c.clear(),a.clear();}}}function Gn(t,e){let r=new Map,s=t.listen(e,async n=>{if(n.type==="REQUEST"){let o=n,a=r.get(o.action),c;if(a)try{let i=await a(o.payload);c={type:"RESPONSE",success:i.success,result:i.result,error:i.error};}catch(i){c={type:"RESPONSE",success:false,error:i instanceof Error?i.message:String(i)};}else c={type:"RESPONSE",success:false,error:`Unknown action: ${o.action}`};t.send(e,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["REQUEST"]});return {onRequest(n,o){r.set(n,o);},offRequest(n){r.delete(n);},destroy(){s.unsubscribe(),r.clear();}}}function Bn(t,e){let r=null,s=t.listen(e,async n=>{if(n.type==="DELEGATION"&&r){let o=n,a=Date.now(),c;try{let i=await r(o.task,o.context);c={type:"DELEGATION_RESULT",success:i.success,result:i.result,error:i.error,metrics:i.metrics??{durationMs:Date.now()-a}};}catch(i){c={type:"DELEGATION_RESULT",success:false,error:i instanceof Error?i.message:String(i),metrics:{durationMs:Date.now()-a}};}t.send(e,n.from,{...c,correlationId:n.correlationId??n.id,replyTo:n.correlationId??n.id});}},{types:["DELEGATION"]});return {onDelegation(n){r=n;},offDelegation(){r=null;},destroy(){s.unsubscribe(),r=null;}}}function Fn(t,e){let r=new Map,s=t.listen(e,n=>{if(n.type==="UPDATE"){let o=n,a=r.get(o.topic)??[];for(let c of a)c(o.content);}},{types:["UPDATE"]});return {subscribe(n,o){let a=new Map;for(let c of n){let i=r.get(c)??[],u=l=>o(c,l);a.set(c,u),i.push(u),r.set(c,i);}return t.broadcast(e,{type:"SUBSCRIBE",topics:n}),()=>{for(let[c,i]of a){let u=r.get(c);if(u){let l=u.indexOf(i);l>=0&&u.splice(l,1),u.length===0&&r.delete(c);}}a.clear(),t.broadcast(e,{type:"UNSUBSCRIBE",topics:n});}},publish(n,o){t.broadcast(e,{type:"UPDATE",topic:n,content:o});},destroy(){s.unsubscribe(),r.clear();}}}var Ln=[{type:"ssn",pattern:/\b(\d{3}[-\s]?\d{2}[-\s]?\d{4})\b/g,validate:t=>{let e=t.replace(/[-\s]/g,"");return !(e.startsWith("000")||e.startsWith("666")||e.startsWith("9")||e.slice(3,5)==="00"||e.slice(5)==="0000")},confidence:.95},{type:"credit_card",pattern:/\b(\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4})\b|\b(\d{15,16})\b/g,validate:t=>{let e=t.replace(/[-\s]/g,"");if(e.length<13||e.length>19)return false;let r=0,s=false;for(let n=e.length-1;n>=0;n--){let o=e[n];if(!o)continue;let a=Number.parseInt(o,10);s&&(a*=2,a>9&&(a-=9)),r+=a,s=!s;}return r%10===0},confidence:.95},{type:"email",pattern:/\b([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})\b/gi,confidence:.9},{type:"phone",pattern:/\b(\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4})\b/g,validate:t=>{let e=t.replace(/\D/g,"");return e.length>=10&&e.length<=11},confidence:.8},{type:"date_of_birth",pattern:/\b(born|dob|birth.?date|date.?of.?birth)[:.\s]+(\d{1,4}[-/]\d{1,2}[-/]\d{1,4})\b/gi,confidence:.85},{type:"ip_address",pattern:/\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/g,validate:t=>t.split(".").every(r=>{let s=Number.parseInt(r,10);return s>=0&&s<=255}),confidence:.9},{type:"bank_account",pattern:/\b(account|acct)[\s#:]+(\d{8,17})\b/gi,confidence:.7},{type:"passport",pattern:/\b(passport)[\s#:]+([A-Z0-9]{6,9})\b/gi,confidence:.75},{type:"driver_license",pattern:/\b(driver'?s?\s*licen[cs]e|dl)[\s#:]+([A-Z0-9]{5,15})\b/gi,confidence:.7},{type:"medical_id",pattern:/\b(mrn|medical.?record|patient.?id)[\s#:]+([A-Z0-9-]{6,15})\b/gi,confidence:.7}];function Un(t){let e=[],r="street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|way|boulevard|blvd|circle|cir|place|pl",s=new RegExp(`\\b(\\d{1,5}\\s+(?:\\w+\\s+){1,4}(?:${r})\\b[^\\n]{0,50}\\b[A-Z]{2}\\s+\\d{5}(?:-\\d{4})?)\\b`,"gi"),n;for(;(n=s.exec(t))!==null;)e.push({type:"address",value:n[0],position:{start:n.index,end:n.index+n[0].length},confidence:.7});return e}var xe=["mr","mrs","ms","miss","dr","prof","sir","madam","name is","called","known as","signed by","from","dear","hi","hello","contact","recipient"];function zn(t){let e=[],r=xe.join("|"),s=new RegExp(`\\b(${r})[.,:]?\\s+([A-Z][a-z]{1,20}(?:\\s[A-Z][a-z]{1,20}){0,2})\\b`,"gi"),n;for(;(n=s.exec(t))!==null;){let o=n[2],a=n[1];o&&(o.split(/\s+/).length>=2||a&&xe.some(c=>a.toLowerCase().includes(c)))&&e.push({type:"name",value:o,position:{start:n.index,end:n.index+n[0].length},confidence:.6,context:n[0]});}return e}var Te=1e5,te={name:"regex",async detect(t,e){if(t.length>Te)throw new Error(`[Directive] Input exceeds maximum length of ${Te} characters for PII detection. Truncate input or process in chunks.`);let r=[],s=new Set(e);for(let n of Ln){if(!s.has(n.type))continue;let o=new RegExp(n.pattern.source,n.pattern.flags),a;for(;(a=o.exec(t))!==null;){let c=a[1]||a[0],i=t.slice(Math.max(0,a.index-20),a.index+c.length+20);n.validate&&!n.validate(c,i)||r.push({type:n.type,value:c,position:{start:a.index,end:a.index+c.length},confidence:n.confidence,context:i});}}return s.has("address")&&r.push(...Un(t)),s.has("name")&&r.push(...zn(t)),r}};function ne(t,e,r="typed"){let s=[...e].sort((o,a)=>a.position.start-o.position.start),n=t;for(let o of s){let a;switch(r){case "placeholder":a="[REDACTED]";break;case "typed":a=`[${o.type.toUpperCase()}]`;break;case "masked":a="*".repeat(o.value.length);break;case "hashed":a=`[HASH:${Hn(o.value)}]`;break}n=n.slice(0,o.position.start)+a+n.slice(o.position.end);}return n}function Hn(t){let s=2166136261;for(let n=0;n<t.length;n++)s^=t.charCodeAt(n),s=Math.imul(s,16777619);return (s>>>0).toString(16).padStart(8,"0")}var Pe=["ssn","credit_card","email","phone","date_of_birth","bank_account"];function ke(t={}){let{types:e=Pe,detector:r="regex",redact:s=false,redactionStyle:n="typed",minConfidence:o=.7,onDetected:a,allowlist:c=[],minItemsToBlock:i=1,detectorTimeout:u=5e3}=t,l=r==="regex"?te:r,p=new Set(c.map(y=>y.toLowerCase().trim()));async function d(y,f){if(l===te)return l.detect(y,f);let m;try{return await Promise.race([l.detect(y,f),new Promise((E,h)=>{m=setTimeout(()=>h(new Error(`[Directive] PII detector '${l.name}' timed out after ${u}ms`)),u);})])}finally{clearTimeout(m);}}return async y=>{let m=(await d(y.input,e)).filter(E=>!(E.confidence<o||p.has(E.value.toLowerCase().trim())));if(m.length>0&&a?.(m),m.length>=i){if(s)return {passed:true,transformed:ne(y.input,m,n)};let E={};for(let g of m)E[g.type]=(E[g.type]||0)+1;return {passed:false,reason:`PII detected (${Object.entries(E).map(([g,b])=>`${g}: ${b}`).join(", ")})`}}return {passed:true}}}function qn(t={}){let e=ke(t);return async(r,s)=>{let n=typeof r.output=="string"?r.output:JSON.stringify(r.output);return e({input:n,agentName:r.agentName},s)}}async function ge(t,e={}){let{types:r=Pe,detector:s="regex",minConfidence:n=.7,timeout:o=5e3}=e,a=s==="regex"?te:s,c;if(a===te)c=await a.detect(t,r);else {let l;try{c=await Promise.race([a.detect(t,r),new Promise((p,d)=>{l=setTimeout(()=>d(new Error(`[Directive] PII detector '${a.name}' timed out after ${o}ms`)),o);})]);}finally{clearTimeout(l);}}let i=c.filter(l=>l.confidence>=n),u={};for(let l of i)u[l.type]=(u[l.type]||0)+1;return {detected:i.length>0,items:i,typeCounts:u}}var Vn=1e4,Jn=10080*60*1e3,Kn=6e4,Ie="0".repeat(64);function Wn(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Qn(t){return new TextEncoder().encode(t)}function Xn(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function De(t){let e=Qn(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return Xn(new Uint8Array(r))}function Oe(t){let{id:e,timestamp:r,eventType:s,previousHash:n,payload:o,actorId:a,sessionId:c}=t;return JSON.stringify({id:e,timestamp:r,eventType:s,previousHash:n,payload:o,actorId:a,sessionId:c})}function Yn(t){return JSON.parse(JSON.stringify(t))}async function Zn(t,e){let r=Yn(t);async function s(n){if(typeof n=="string"){let o=await ge(n,{types:e.types,minConfidence:e.minConfidence??.7});if(o.detected){let a=e.allowlist?o.items.filter(c=>!e.allowlist.includes(c.value.toLowerCase())):o.items;if(a.length>0)return ne(n,a,e.redactionStyle)}return n}if(Array.isArray(n))return Promise.all(n.map(s));if(n&&typeof n=="object"){let o={};for(let[a,c]of Object.entries(n))o[a]=await s(c);return o}return n}for(let[n,o]of Object.entries(r))r[n]=await s(o);return r}function er(t={}){let{maxEntries:e=Vn,retentionMs:r=Jn,exportInterval:s=Kn,exporter:n,piiMasking:o,signing:a,sessionId:c,actorId:i,events:u={}}=t,l=[],p=0,d=0,y=0,f=true,m;function E(){return l.length===0?Ie:l[l.length-1].hash}async function h(g,b,R){let A={id:Wn(),timestamp:Date.now(),eventType:g,previousHash:E(),payload:b,actorId:i,sessionId:c};o?.enabled&&(A.maskedPayload=await Zn(b,o));let x=Oe(A),k=await De(x),O={...A,hash:k};for(a&&(O.signature=await a.signFn(k)),l.push(O);l.length>e;)l.shift(),d++,p>0&&p--;return u.onEntryAdded?.(O),O}return n&&s>0&&(m=setInterval(async()=>{try{let g=l.slice(p);g.length>0&&(await n(g),y+=g.length,p=l.length);}catch(g){u.onExportError?.(g instanceof Error?g:new Error(String(g)),l.slice(p));}},s)),{getEntries(g){let b=[...l];if(g){if(g.eventTypes?.length){let R=new Set(g.eventTypes);b=b.filter(A=>R.has(A.eventType));}g.actorId&&(b=b.filter(R=>R.actorId===g.actorId)),g.sessionId&&(b=b.filter(R=>R.sessionId===g.sessionId)),g.since!==void 0&&(b=b.filter(R=>R.timestamp>=g.since)),g.until!==void 0&&(b=b.filter(R=>R.timestamp<=g.until)),g.offset!==void 0&&(b=b.slice(g.offset)),g.limit!==void 0&&(b=b.slice(0,g.limit));}return b},async verifyChain(){if(l.length===0)return {valid:true,entriesVerified:0,verifiedAt:Date.now()};l[0].previousHash;for(let b=0;b<l.length;b++){let R=l[b],A=Oe({id:R.id,timestamp:R.timestamp,eventType:R.eventType,previousHash:R.previousHash,payload:R.payload,actorId:R.actorId,sessionId:R.sessionId}),x=await De(A);if(R.hash!==x){f=false;let k={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:x,actualHash:R.hash},verifiedAt:Date.now()};return u.onChainBroken?.(k),k}if(b>0){let k=l[b-1];if(R.previousHash!==k.hash){f=false;let O={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:k.hash,actualHash:R.previousHash},verifiedAt:Date.now()};return u.onChainBroken?.(O),O}}if(a?.verifyFn&&R.signature&&!await a.verifyFn(R.hash,R.signature)){f=false;let O={valid:false,entriesVerified:b,brokenAt:{index:b,entryId:R.id,expectedHash:"signature-invalid",actualHash:R.signature},verifiedAt:Date.now()};return u.onChainBroken?.(O),O}}return f=true,{valid:true,entriesVerified:l.length,verifiedAt:Date.now()}},async export(g){let b=[...l];return g!==void 0&&(b=b.filter(R=>R.timestamp>=g)),n&&b.length>0&&(await n(b),y+=b.length),b},prune(){let g=Date.now()-r,b=l.length;for(;l.length>0&&l[0].timestamp<g;)l.shift(),p>0&&p--;let R=b-l.length;return d+=R,R},getStats(){let g={};for(let b of l)g[b.eventType]=(g[b.eventType]??0)+1;return {totalEntries:l.length,byEventType:g,oldestEntry:l[0]?.timestamp,newestEntry:l[l.length-1]?.timestamp,entriesPruned:d,entriesExported:y,chainIntegrity:f}},async destroy(){if(m&&(clearInterval(m),m=void 0),n)try{let g=l.slice(p);g.length>0&&(await n(g),y+=g.length);}catch(g){u.onExportError?.(g instanceof Error?g:new Error(String(g)),l.slice(p));}},addEntry(g,b){return h(g,b)},createPlugin(){return {name:"audit-trail",onFactSet:(g,b,R)=>{h("fact.set",{key:g,value:b,prev:R}).catch(console.error);},onFactsBatch:g=>{h("fact.batch",{changes:g.map(b=>({key:b.key,value:b.value,prev:b.prev}))}).catch(console.error);},onRequirementCreated:g=>{h("requirement.created",{id:g.id,type:g.requirement.type,payload:g.requirement}).catch(console.error);},onRequirementMet:(g,b)=>{h("requirement.met",{id:g.id,type:g.requirement.type,byResolver:b}).catch(console.error);},onResolverStart:(g,b)=>{h("resolver.start",{resolver:g,requirementId:b.id,requirementType:b.requirement.type}).catch(console.error);},onResolverComplete:(g,b,R)=>{h("resolver.complete",{resolver:g,requirementId:b.id,requirementType:b.requirement.type,duration:R}).catch(console.error);},onResolverError:(g,b,R)=>{h("resolver.error",{resolver:g,requirementId:b.id,requirementType:b.requirement.type,error:R instanceof Error?R.message:String(R)}).catch(console.error);},onError:g=>{h("error.occurred",{source:g.source,sourceId:g.sourceId,message:g.message,context:g.context}).catch(console.error);},onErrorRecovery:(g,b)=>{h("error.recovery",{source:g.source,message:g.message,strategy:b}).catch(console.error);}}}}}function tr(t){return {onAgentStart:(e,r)=>{t.addEntry("agent.run.start",{agentName:e,input:r});},onAgentComplete:(e,r,s,n)=>{t.addEntry("agent.run.complete",{agentName:e,output:r,tokens:s,cost:n});},onAgentError:(e,r)=>{t.addEntry("agent.run.error",{agentName:e,error:r.message,stack:r.stack});},onToolStart:(e,r,s)=>{t.addEntry("tool.call.start",{toolName:e,toolCallId:r,args:s});},onToolComplete:(e,r,s)=>{t.addEntry("tool.call.complete",{toolName:e,toolCallId:r,result:s});},onToolError:(e,r,s)=>{t.addEntry("tool.call.error",{toolName:e,toolCallId:r,error:s.message});},onApprovalRequested:(e,r,s)=>{t.addEntry("approval.requested",{toolName:e,toolCallId:r,args:s});},onApprovalGranted:(e,r)=>{t.addEntry("approval.granted",{toolName:e,toolCallId:r});},onApprovalDenied:(e,r,s)=>{t.addEntry("approval.denied",{toolName:e,toolCallId:r,reason:s});}}}var Q=[{pattern:/ignore\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?|rules?|guidelines?)/i,name:"ignore-previous",severity:"critical",category:"instruction_override"},{pattern:/disregard\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?)/i,name:"disregard-previous",severity:"critical",category:"instruction_override"},{pattern:/forget\s+(all\s+)?(previous|prior|above|earlier)\s+(instructions?|prompts?)/i,name:"forget-previous",severity:"critical",category:"instruction_override"},{pattern:/override\s+(the\s+)?(system|base)\s+(prompt|instructions?)/i,name:"override-system",severity:"critical",category:"instruction_override"},{pattern:/\bDAN\s+(mode|jailbreak)\b/i,name:"dan-mode",severity:"critical",category:"jailbreak"},{pattern:/\bjailbreak(ed)?\s*(mode)?\b/i,name:"jailbreak-keyword",severity:"high",category:"jailbreak"},{pattern:/developer\s+mode\s+(enabled|activated|on)/i,name:"developer-mode",severity:"critical",category:"jailbreak"},{pattern:/pretend\s+(you\s+)?(are|can|have)\s+(no\s+)?(restrictions?|limits?|boundaries?|ethics)/i,name:"pretend-no-restrictions",severity:"high",category:"jailbreak"},{pattern:/you\s+(now\s+)?have\s+no\s+(ethical\s+)?(restrictions?|guidelines?|boundaries?)/i,name:"no-restrictions",severity:"high",category:"jailbreak"},{pattern:/you\s+are\s+now\s+(a|an)\s+\w+\s+(that|who)\s+(can|will|must)/i,name:"role-assignment",severity:"medium",category:"role_manipulation"},{pattern:/from\s+now\s+on,?\s+(you\s+)?(will|must|should)\s+(only\s+)?/i,name:"from-now-on",severity:"medium",category:"role_manipulation"},{pattern:/^(system|assistant|user):\s*/im,name:"fake-role-marker",severity:"high",category:"context_manipulation"},{pattern:/<\|?(system|endofprompt|im_start|im_end)\|?>/i,name:"special-token-injection",severity:"critical",category:"context_manipulation"},{pattern:/```(system|assistant|instructions?)\n/i,name:"markdown-code-injection",severity:"medium",category:"delimiter_injection"},{pattern:/<system>|<\/system>|<instructions?>|<\/instructions?>/i,name:"xml-tag-injection",severity:"high",category:"delimiter_injection"},{pattern:/fetch\s+(content\s+)?(from|at)\s+(the\s+)?url/i,name:"url-fetch-instruction",severity:"medium",category:"indirect_injection"},{pattern:/execute\s+(the\s+)?(code|script|command)\s+(from|in|at)/i,name:"execute-from-source",severity:"high",category:"indirect_injection"}],me=[...Q,{pattern:/act\s+as\s+(if\s+)?(you\s+)?(were|are|can)/i,name:"act-as",severity:"low",category:"role_manipulation"},{pattern:/new\s+instructions?:/i,name:"new-instructions",severity:"medium",category:"instruction_override"},{pattern:/\[system\]|\[admin\]|\[developer\]/i,name:"bracket-role-marker",severity:"medium",category:"context_manipulation"},{pattern:/base64|rot13|decode\s+(this|the)/i,name:"encoding-reference",severity:"low",category:"encoding_evasion"},{pattern:/\u200b|\u200c|\u200d|\u2060|\ufeff/,name:"zero-width-chars",severity:"medium",category:"encoding_evasion"}],Ne=1e5;function fe(t,e=Q){if(t.length>Ne)throw new Error(`[Directive] Input exceeds maximum length of ${Ne} characters for injection detection. Truncate input or process in chunks.`);let r=[];for(let{pattern:a,name:c,severity:i,category:u}of e){let p=new RegExp(a.source,a.flags).exec(t);p&&r.push({name:c,category:u,severity:i,match:p[0],position:p.index});}let s={low:10,medium:25,high:50,critical:100},n=r.reduce((a,c)=>a+s[c.severity],0),o=Math.min(100,n);return {detected:r.length>0,patterns:r,riskScore:o}}function $e(t,e=Q){let r=t.replace(/\u200b|\u200c|\u200d|\u2060|\ufeff/g,""),s=e.map(u=>`(${u.pattern.source})`);if(s.length===0)return r;let n=e.some(u=>u.pattern.flags.includes("g")),o=e.some(u=>u.pattern.flags.includes("i")),a=e.some(u=>u.pattern.flags.includes("m")),c=`${n?"g":""}${o?"i":""}${a?"m":""}`,i=new RegExp(s.join("|"),c||"gi");return r=r.replace(i,"[REDACTED]"),r}function _e(t={}){let{additionalPatterns:e=[],replacePatterns:r,strictMode:s=false,blockThreshold:n=50,sanitize:o=false,onBlocked:a,ignoreCategories:c=[]}=t,i;if(r?i=r:i=s?[...me]:[...Q],i=[...i,...e],c.length>0){let u=new Set(c);i=i.filter(l=>!u.has(l.category));}return u=>{let l=fe(u.input,i);if(l.detected&&l.riskScore>=n){if(a?.(u.input,l),o)return {passed:true,transformed:$e(u.input,i)};let p=l.patterns.sort((d,y)=>{let f={critical:0,high:1,medium:2,low:3};return f[d.severity]-f[y.severity]}).slice(0,3).map(d=>d.name).join(", ");return {passed:false,reason:`Prompt injection detected (risk: ${l.riskScore}%, patterns: ${p})`}}return {passed:true}}}function nr(t,e){return `[UNTRUSTED_CONTENT source="${e}"]
|
|
84
25
|
${t}
|
|
85
|
-
[/UNTRUSTED_CONTENT]`}function
|
|
86
|
-
`)||
|
|
87
|
-
`)}function Ba(){let t=new Map,e=new Map,n=new Map;return {async getSubjectData(o,r){let a=[];for(let[s,c]of t){if(r&&!r.includes(s))continue;let u=c.get(o);u&&u.length>0&&a.push({category:s,records:[...u]});}return a},async deleteSubjectData(o,r){let a=0;for(let[s,c]of t){if(r&&!r.includes(s))continue;let u=c.get(o);u&&(a+=u.length,c.delete(o));}return a},async anonymizeSubjectData(o,r){let a=0;for(let[s,c]of t){if(r&&!r.includes(s))continue;let u=c.get(o);if(u)for(let l of u)l.data={...l.data,_anonymized:true,_anonymizedAt:Date.now()},a++;}return a},async getExpiredData(o,r){let a=[],s=t.get(o);if(s)for(let c of s.values())for(let u of c)u.createdAt<r&&a.push({id:u.id,createdAt:u.createdAt});return a},async deleteByIds(o){let r=new Set(o),a=0;for(let s of t.values())for(let[c,u]of s){let l=u.filter(d=>!r.has(d.id));l.length!==u.length&&(a+=u.length-l.length,l.length===0?s.delete(c):s.set(c,l));}return a},async storeConsent(o){e.set(`${o.subjectId}:${o.purpose}`,o);},async getConsent(o,r){return e.get(`${o}:${r}`)??null},async getConsentsBySubject(o){let r=[];for(let[a,s]of e)a.startsWith(`${o}:`)&&r.push(s);return r},async getConsentsByPurpose(o){let r=[];for(let[a,s]of e)a.endsWith(`:${o}`)&&r.push(s);return r},async storeDeletionCertificate(o){n.set(o.subjectId,o);}}}function La(t){let{storage:e,retention:n,exportExpirationMs:o=864e5,events:r={}}=t,a={async grant(s,c,u={}){let l={subjectId:s,purpose:c,granted:true,grantedAt:Date.now(),expiresAt:u.expiresAt,source:u.source,version:u.version};return await e.storeConsent(l),r.onConsentChange?.(l),l},async revoke(s,c){let u=await e.getConsent(s,c);if(!u)return null;let l={...u,granted:false,revokedAt:Date.now()};return await e.storeConsent(l),r.onConsentChange?.(l),l},async check(s,c){let u=await e.getConsent(s,c);return !(!u||!u.granted||u.expiresAt&&u.expiresAt<Date.now())},async getForSubject(s){return e.getConsentsBySubject(s)},async getForPurpose(s){return e.getConsentsByPurpose(s)}};return {async exportData(s){try{let c=await e.getSubjectData(s.subjectId,s.categories),u=[],l=[];for(let{category:k,records:w}of c){l.push(k);for(let y of w)u.push({category:k,...y});}if(s.includeAudit&&e.getAuditEntries){let k=await e.getAuditEntries(s.subjectId);l.push("audit");for(let w of k)u.push({category:"audit",id:w.id,data:w.payload,createdAt:w.timestamp});}let d;s.format==="csv"?d=Ga(u.map(k=>({category:k.category,id:k.id,createdAt:new Date(k.createdAt).toISOString(),...k.data}))):d=JSON.stringify({subjectId:s.subjectId,exportedAt:new Date().toISOString(),recordCount:u.length,categories:l,records:u},null,2);let f=await Xr(d),m={success:!0,subjectId:s.subjectId,format:s.format,data:d,categories:l,recordCount:u.length,checksum:f,exportedAt:Date.now(),expiresAt:Date.now()+o};return r.onExport?.(m),m}catch(c){return {success:false,subjectId:s.subjectId,format:s.format,data:"",categories:[],recordCount:0,checksum:"",exportedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},async deleteData(s){try{let c=0,u=[];s.anonymize?c=await e.anonymizeSubjectData(s.subjectId,s.categories):c=await e.deleteSubjectData(s.subjectId,s.categories),s.categories?u.push(...s.categories):s.scope==="all"&&u.push("all");let l=JSON.stringify({subjectId:s.subjectId,type:s.anonymize?"anonymization":"hard",scope:s.scope,categories:u,recordCount:c,deletedAt:Date.now(),reason:s.reason}),d={id:Na(),subjectId:s.subjectId,type:s.anonymize?"anonymization":"hard",scope:s.scope,categories:u,recordCount:c,deletedAt:Date.now(),reason:s.reason,hash:await Xr(l)};await e.storeDeletionCertificate(d);let f={success:!0,subjectId:s.subjectId,scope:s.scope,anonymized:s.anonymize??!1,recordsAffected:c,categoriesAffected:u,certificate:d,deletedAt:Date.now()};return r.onDelete?.(f),f}catch(c){return {success:false,subjectId:s.subjectId,scope:s.scope,anonymized:s.anonymize??false,recordsAffected:0,categoriesAffected:[],certificate:{id:"error",subjectId:s.subjectId,type:"hard",scope:s.scope,categories:[],recordCount:0,deletedAt:Date.now(),hash:""},deletedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},consent:a,async enforceRetention(){if(!n)return 0;let s=0,c=Date.now(),u=new Set;if(n.categoryRetention)for(let l of Object.keys(n.categoryRetention))u.add(l);u.add("default");for(let l of u){let d=n.categoryRetention?.[l]??n.defaultRetentionMs,f=c-d,m=await e.getExpiredData(l,f);if(m.length>0){await n.onBeforeDelete?.({category:l,count:m.length});let k=await e.deleteByIds(m.map(w=>w.id));s+=k,n.onAfterDelete?.({category:l,count:k}),r.onRetentionEnforced?.(l,k);}}return s},createConsentGuardrail(s){return async c=>{let l=c.input.match(/user[_-]?id[:\s]*([a-zA-Z0-9-]+)/i)?.[1];return l?await a.check(l,s)?{passed:true}:{passed:false,reason:`No consent for '${s}' from subject ${l}`}:{passed:true}}},async getDeletionCertificate(s){return null}}}function Kt(t,e){if(t.length!==e.length)throw new Error(`Vector dimensions must match: ${t.length} vs ${e.length}`);let n=0,o=0,r=0;for(let a=0;a<t.length;a++){let s=t[a],c=e[a];n+=s*c,o+=s*s,r+=c*c;}return o=Math.sqrt(o),r=Math.sqrt(r),o===0||r===0?0:n/(o*r)}function Fa(t,e,n,o){let r=null;for(let a of e){if(o&&a.agentName&&a.agentName!==o)continue;let s=Kt(t,a.queryEmbedding);s>=n&&(!r||s>r.similarity)&&(r={entry:a,similarity:s});}return r}function Yr(){let t=new Map;function e(n){let o=t.get(n);return o||(o=new Map,t.set(n,o)),o}return {async getEntries(n){return Array.from(e(n).values())},async addEntry(n,o){e(n).set(o.id,o);},async updateEntry(n,o,r){let a=e(n),s=a.get(o);s&&a.set(o,{...s,...r});},async removeEntry(n,o){e(n).delete(o);},async clear(n){t.delete(n);}}}function qa(t){let{embedder:e,similarityThreshold:n=.9,maxCacheSize:o=1e3,ttlMs:r=36e5,namespace:a="default",storage:s=Yr(),onHit:c,onMiss:u,onError:l,perAgent:d=false}=t,f={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},m=0;function k(y){if(f.totalEntries=y.length,f.hitRate=f.totalHits+f.totalMisses>0?f.totalHits/(f.totalHits+f.totalMisses):0,f.avgSimilarityOnHit=f.totalHits>0?m/f.totalHits:0,y.length>0){let T=y.map(R=>R.createdAt);f.oldestEntry=Math.min(...T),f.newestEntry=Math.max(...T);}else f.oldestEntry=null,f.newestEntry=null;}async function w(){let y=await s.getEntries(a),T=Date.now();for(let v of y)T-v.createdAt>r&&await s.removeEntry(a,v.id);let R=await s.getEntries(a);if(R.length>o){let C=R.sort((P,H)=>P.accessedAt-H.accessedAt).slice(0,R.length-o);for(let P of C)await s.removeEntry(a,P.id);}}return {async lookup(y,T){let R=Date.now();try{let v=await e(y),C=await s.getEntries(a),P=Fa(v,C,n,d?T:void 0);return P?(await s.updateEntry(a,P.entry.id,{accessedAt:Date.now(),accessCount:P.entry.accessCount+1}),f.totalHits++,m+=P.similarity,k(C),c?.(P.entry,P.similarity),{hit:!0,entry:P.entry,similarity:P.similarity,latencyMs:Date.now()-R}):(f.totalMisses++,k(C),u?.(y),{hit:!1,latencyMs:Date.now()-R})}catch(v){return f.totalMisses++,l?.(v instanceof Error?v:new Error(String(v))),{hit:false,latencyMs:Date.now()-R}}},async store(y,T,R,v={}){let C=await e(y),P={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:y,queryEmbedding:C,response:T,metadata:v,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:d?R:void 0};await s.addEntry(a,P),await w();let H=await s.getEntries(a);k(H);},async invalidate(y){let T=await s.getEntries(a),R=0;for(let C of T)y(C)&&(await s.removeEntry(a,C.id),R++);let v=await s.getEntries(a);return k(v),R},async clear(){await s.clear(a),f={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},m=0;},getStats(){return {...f}},async export(){return s.getEntries(a)},async import(y){for(let R of y)await s.addEntry(a,R);await w();let T=await s.getEntries(a);k(T);}}}function Ua(t){let{cache:e}=t;return async n=>{let o=await e.lookup(n.input,n.agentName);return o.hit&&o.entry?{passed:false,cacheHit:true,reason:`Cache hit (similarity: ${(o.similarity*100).toFixed(1)}%)`,cachedResponse:o.entry.response,similarity:o.similarity}:{passed:true,cacheHit:false}}}function Ha(t=128){return async e=>{let n=new Array(t).fill(0);for(let r=0;r<e.length;r++){let a=e.charCodeAt(r);n[r%t]+=a/256;}let o=Math.sqrt(n.reduce((r,a)=>r+a*a,0));if(o>0)for(let r=0;r<t;r++)n[r]/=o;return n}}function za(t){let{batchSize:e=20,embedBatch:n,maxWaitMs:o=50}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${e}`);let r=[],a=null,s=false;async function c(){if(r.length===0)return;let u=r;r=[],a&&(clearTimeout(a),a=null);try{let l=u.map(f=>f.text),d=await n(l);if(d.length!==u.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${d.length} embeddings for ${u.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let f=0;f<u.length;f++)u[f].resolve(d[f]);}catch(l){let d=l instanceof Error?l:new Error(String(l));for(let f of u)f.reject(d);}}return {async embed(u){if(s)throw new Error("BatchedEmbedder has been disposed");return new Promise((l,d)=>{r.push({text:u,resolve:l,reject:d}),r.length>=e?c():a||(a=setTimeout(c,o));})},async flush(){await c();},dispose(){s=true,a&&(clearTimeout(a),a=null);let u=r;r=[];let l=new Error("BatchedEmbedder disposed");for(let d of u)d.reject(l);}}}function Ja(){let t=new Map,e=null;function n(o){if(e===null)e=o.length;else if(o.length!==e)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${e}, got ${o.length}`)}return {add(o,r){n(r),t.set(o,r);},remove(o){t.delete(o);},search(o,r,a=0){if(e!==null&&o.length!==e)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${e}, got ${o.length}`);let s=[];for(let[c,u]of t){let l=Kt(o,u);l>=a&&s.push({id:c,similarity:l});}return s.sort((c,u)=>u.similarity-c.similarity),s.slice(0,r)},rebuild(){},size(){return t.size},clear(){t.clear(),e=null;},needsRebuild(){return false}}}function Qr(t,e){return 1-Kt(t,e)}function gr(t,e){if(t.length===0)return null;let n=Math.floor(e()*t.length),o=t[n],r=t.filter((d,f)=>f!==n);if(r.length===0)return {id:o.id,embedding:o.embedding,mu:0,left:null,right:null};let a=r.map(d=>({item:d,distance:Qr(o.embedding,d.embedding)}));a.sort((d,f)=>d.distance-f.distance);let s=Math.floor(a.length/2),c=a[s].distance,u=a.slice(0,s).map(d=>d.item),l=a.slice(s).map(d=>d.item);return {id:o.id,embedding:o.embedding,mu:c,left:gr(u,e),right:gr(l,e)}}function An(t,e,n,o,r,a){if(!t)return;let s=Qr(e,t.embedding),c=1-s;c>=o&&(r.push({id:t.id,similarity:c}),r.sort((u,l)=>l.similarity-u.similarity),r.length>n&&r.pop(),r.length===n&&(a.value=1-r[r.length-1].similarity)),s<t.mu?(An(t.left,e,n,o,r,a),s+a.value>=t.mu&&An(t.right,e,n,o,r,a)):(An(t.right,e,n,o,r,a),s-a.value<=t.mu&&An(t.left,e,n,o,r,a));}function Wa(t={}){let{random:e=Math.random}=t,n=new Map,o=null,r=false,a=null;function s(c){if(a===null)a=c.length;else if(c.length!==a)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${a}, got ${c.length}`)}return {add(c,u){s(u),n.set(c,u),r=true;},remove(c){n.delete(c),r=true;},search(c,u,l=0){if(a!==null&&c.length!==a)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${a}, got ${c.length}`);if(r||!o){let m=[];for(let[k,w]of n){let y=Kt(c,w);y>=l&&m.push({id:k,similarity:y});}return m.sort((k,w)=>w.similarity-k.similarity),m.slice(0,u)}let d=[],f={value:Number.POSITIVE_INFINITY};return An(o,c,u,l,d,f),d},rebuild(){let c=Array.from(n.entries()).map(([u,l])=>({id:u,embedding:l}));o=gr(c,e),r=false;},size(){return n.size},clear(){n.clear(),o=null,r=false,a=null;},needsRebuild(){return r}}}function mr(t={}){let{bufferSize:e=100}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive StreamChannel] bufferSize must be >= 1, got ${e}`);let n=[],o="open",r=null,a=null,s=null,c=false;function u(k){if(a){let w=a;a=null,w.resolve({value:k,done:false});}}function l(){if(a){let k=a;a=null,k.resolve({value:void 0,done:true});}}function d(k){if(a){let w=a;a=null,c=false,w.reject(k);}}function f(){if(s){let k=s;s=null,k();}}return {async send(k){if(o!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${o} channel${t.name?` "${t.name}"`:""}`);if(a){u(k);return}if(n.length>=e){if(await new Promise(w=>{s=w;}),o!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${o} channel${t.name?` "${t.name}"`:""}`);if(a){u(k);return}}n.push(k);},end(){o==="open"&&(o="closed",l());},error(k){o==="open"&&(o="error",r=k,d(k),f());},getState(){return o},bufferedCount(){return n.length},[Symbol.asyncIterator](){if(c)throw new Error("[Directive StreamChannel] Channel only supports a single consumer. Create a separate channel for each consumer.");return c=true,{next(){if(o==="error"&&r)return c=false,Promise.reject(r);if(n.length>0){let k=n.shift();return f(),Promise.resolve({value:k,done:false})}return o==="closed"?(c=false,Promise.resolve({value:void 0,done:true})):new Promise((k,w)=>{a={resolve:k,reject:w};})},return(){return o="closed",n.length=0,c=false,f(),Promise.resolve({value:void 0,done:true})}}}}}function Va(t){let e=mr(t),n=mr(t);return {sideA:{send:o=>e.send(o),receive:n,close(){e.end(),n.end();}},sideB:{send:o=>n.send(o),receive:e,close(){e.end(),n.end();}}}}async function Ka(t,e,n){try{for await(let o of t){let r=await n(o);await e.send(r);}e.end();}catch(o){e.error(o instanceof Error?o:new Error(String(o)));}}function Xa(...t){return {[Symbol.asyncIterator](){let n=[],o=0,r=null,a=null,s=false,c=false,u=[];function l(d){if(r){let f=r;return r=null,f(d),true}return false}for(let d of t){let f=d[Symbol.asyncIterator]();u.push(f),(async()=>{try{for(;!s;){let m=await f.next();if(m.done||s)break;l({value:m.value,done:!1})||(n.length<1e4?n.push(m.value):c||(c=!0,console.warn("[Directive mergeStreams] Buffer exceeded 10000 items. Values are being dropped. Ensure the consumer keeps up or use bounded StreamChannel sources.")));}}catch(m){s||(s=true,a=m instanceof Error?m:new Error(String(m)),l({value:void 0,done:true}));}o++,o>=t.length&&!s&&l({value:void 0,done:true});})();}return {next(){return a?Promise.reject(a):n.length>0?Promise.resolve({value:n.shift(),done:false}):o>=t.length?Promise.resolve({value:void 0,done:true}):new Promise(d=>{r=d;})},return(){s=true,n.length=0;for(let d of u)d.return?.({value:void 0,done:true});if(r){let d=r;r=null,d({value:void 0,done:true});}return Promise.resolve({value:void 0,done:true})}}}}}function Ya(t,e){let n=t.metadata.title??"",o=t.metadata.section??"",r=t.metadata.url??"";return `${n&&o&&r?`[${n} \u2014 ${o}](${r})`:n||t.id}
|
|
88
|
-
${t.content}`}function
|
|
26
|
+
[/UNTRUSTED_CONTENT]`}function rr(t){let{baseGuardrail:e=_e({strictMode:true,blockThreshold:25}),additionalPatterns:r=[]}=t,s=/\[UNTRUSTED_CONTENT source="([^"]+)"\]([\s\S]*?)\[\/UNTRUSTED_CONTENT\]/g;return async(n,o)=>{let a=await e(n,o);if(!a.passed)return a;let c=n.input.matchAll(s);for(let i of c){let[,u,l]=i;if(!l)continue;let p=fe(l,[...me,...r]);if(p.detected&&p.riskScore>=25)return {passed:false,reason:`Untrusted content from "${u}" contains potential injection (risk: ${p.riskScore}%)`}}return {passed:true}}}function sr(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function or(t){return new TextEncoder().encode(t)}function ar(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}async function je(t){let e=or(t),r=await globalThis.crypto.subtle.digest("SHA-256",e);return ar(new Uint8Array(r))}function ir(t){if(t.length===0)return "";let e=new Set;for(let n of t)for(let o of Object.keys(n))e.add(o);let r=Array.from(e),s=[r.join(",")];for(let n of t){let o=r.map(a=>{let c=n[a];if(c==null)return "";if(typeof c=="object")return JSON.stringify(c).replace(/"/g,'""');let i=String(c);return i.includes(",")||i.includes(`
|
|
27
|
+
`)||i.includes('"')?`"${i.replace(/"/g,'""')}"`:i});s.push(o.join(","));}return s.join(`
|
|
28
|
+
`)}function cr(){let t=new Map,e=new Map,r=new Map;return {async getSubjectData(s,n){let o=[];for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);i&&i.length>0&&o.push({category:a,records:[...i]});}return o},async deleteSubjectData(s,n){let o=0;for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);i&&(o+=i.length,c.delete(s));}return o},async anonymizeSubjectData(s,n){let o=0;for(let[a,c]of t){if(n&&!n.includes(a))continue;let i=c.get(s);if(i)for(let u of i)u.data={...u.data,_anonymized:true,_anonymizedAt:Date.now()},o++;}return o},async getExpiredData(s,n){let o=[],a=t.get(s);if(a)for(let c of a.values())for(let i of c)i.createdAt<n&&o.push({id:i.id,createdAt:i.createdAt});return o},async deleteByIds(s){let n=new Set(s),o=0;for(let a of t.values())for(let[c,i]of a){let u=i.filter(l=>!n.has(l.id));u.length!==i.length&&(o+=i.length-u.length,u.length===0?a.delete(c):a.set(c,u));}return o},async storeConsent(s){e.set(`${s.subjectId}:${s.purpose}`,s);},async getConsent(s,n){return e.get(`${s}:${n}`)??null},async getConsentsBySubject(s){let n=[];for(let[o,a]of e)o.startsWith(`${s}:`)&&n.push(a);return n},async getConsentsByPurpose(s){let n=[];for(let[o,a]of e)o.endsWith(`:${s}`)&&n.push(a);return n},async storeDeletionCertificate(s){r.set(s.subjectId,s);}}}function ur(t){let{storage:e,retention:r,exportExpirationMs:s=864e5,events:n={}}=t,o={async grant(a,c,i={}){let u={subjectId:a,purpose:c,granted:true,grantedAt:Date.now(),expiresAt:i.expiresAt,source:i.source,version:i.version};return await e.storeConsent(u),n.onConsentChange?.(u),u},async revoke(a,c){let i=await e.getConsent(a,c);if(!i)return null;let u={...i,granted:false,revokedAt:Date.now()};return await e.storeConsent(u),n.onConsentChange?.(u),u},async check(a,c){let i=await e.getConsent(a,c);return !(!i||!i.granted||i.expiresAt&&i.expiresAt<Date.now())},async getForSubject(a){return e.getConsentsBySubject(a)},async getForPurpose(a){return e.getConsentsByPurpose(a)}};return {async exportData(a){try{let c=await e.getSubjectData(a.subjectId,a.categories),i=[],u=[];for(let{category:y,records:f}of c){u.push(y);for(let m of f)i.push({category:y,...m});}if(a.includeAudit&&e.getAuditEntries){let y=await e.getAuditEntries(a.subjectId);u.push("audit");for(let f of y)i.push({category:"audit",id:f.id,data:f.payload,createdAt:f.timestamp});}let l;a.format==="csv"?l=ir(i.map(y=>({category:y.category,id:y.id,createdAt:new Date(y.createdAt).toISOString(),...y.data}))):l=JSON.stringify({subjectId:a.subjectId,exportedAt:new Date().toISOString(),recordCount:i.length,categories:u,records:i},null,2);let p=await je(l),d={success:!0,subjectId:a.subjectId,format:a.format,data:l,categories:u,recordCount:i.length,checksum:p,exportedAt:Date.now(),expiresAt:Date.now()+s};return n.onExport?.(d),d}catch(c){return {success:false,subjectId:a.subjectId,format:a.format,data:"",categories:[],recordCount:0,checksum:"",exportedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},async deleteData(a){try{let c=0,i=[];a.anonymize?c=await e.anonymizeSubjectData(a.subjectId,a.categories):c=await e.deleteSubjectData(a.subjectId,a.categories),a.categories?i.push(...a.categories):a.scope==="all"&&i.push("all");let u=JSON.stringify({subjectId:a.subjectId,type:a.anonymize?"anonymization":"hard",scope:a.scope,categories:i,recordCount:c,deletedAt:Date.now(),reason:a.reason}),l={id:sr(),subjectId:a.subjectId,type:a.anonymize?"anonymization":"hard",scope:a.scope,categories:i,recordCount:c,deletedAt:Date.now(),reason:a.reason,hash:await je(u)};await e.storeDeletionCertificate(l);let p={success:!0,subjectId:a.subjectId,scope:a.scope,anonymized:a.anonymize??!1,recordsAffected:c,categoriesAffected:i,certificate:l,deletedAt:Date.now()};return n.onDelete?.(p),p}catch(c){return {success:false,subjectId:a.subjectId,scope:a.scope,anonymized:a.anonymize??false,recordsAffected:0,categoriesAffected:[],certificate:{id:"error",subjectId:a.subjectId,type:"hard",scope:a.scope,categories:[],recordCount:0,deletedAt:Date.now(),hash:""},deletedAt:Date.now(),error:c instanceof Error?c.message:String(c)}}},consent:o,async enforceRetention(){if(!r)return 0;let a=0,c=Date.now(),i=new Set;if(r.categoryRetention)for(let u of Object.keys(r.categoryRetention))i.add(u);i.add("default");for(let u of i){let l=r.categoryRetention?.[u]??r.defaultRetentionMs,p=c-l,d=await e.getExpiredData(u,p);if(d.length>0){await r.onBeforeDelete?.({category:u,count:d.length});let y=await e.deleteByIds(d.map(f=>f.id));a+=y,r.onAfterDelete?.({category:u,count:y}),n.onRetentionEnforced?.(u,y);}}return a},createConsentGuardrail(a){return async c=>{let u=c.input.match(/user[_-]?id[:\s]*([a-zA-Z0-9-]+)/i)?.[1];return u?await o.check(u,a)?{passed:true}:{passed:false,reason:`No consent for '${a}' from subject ${u}`}:{passed:true}}},async getDeletionCertificate(a){return null}}}function V(t,e){if(t.length!==e.length)throw new Error(`Vector dimensions must match: ${t.length} vs ${e.length}`);let r=0,s=0,n=0;for(let o=0;o<t.length;o++){let a=t[o],c=e[o];r+=a*c,s+=a*a,n+=c*c;}return s=Math.sqrt(s),n=Math.sqrt(n),s===0||n===0?0:r/(s*n)}function lr(t,e,r,s){let n=null;for(let o of e){if(s&&o.agentName&&o.agentName!==s)continue;let a=V(t,o.queryEmbedding);a>=r&&(!n||a>n.similarity)&&(n={entry:o,similarity:a});}return n}function Ge(){let t=new Map;function e(r){let s=t.get(r);return s||(s=new Map,t.set(r,s)),s}return {async getEntries(r){return Array.from(e(r).values())},async addEntry(r,s){e(r).set(s.id,s);},async updateEntry(r,s,n){let o=e(r),a=o.get(s);a&&o.set(s,{...a,...n});},async removeEntry(r,s){e(r).delete(s);},async clear(r){t.delete(r);}}}function dr(t){let{embedder:e,similarityThreshold:r=.9,maxCacheSize:s=1e3,ttlMs:n=36e5,namespace:o="default",storage:a=Ge(),onHit:c,onMiss:i,onError:u,perAgent:l=false}=t,p={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},d=0;function y(m){if(p.totalEntries=m.length,p.hitRate=p.totalHits+p.totalMisses>0?p.totalHits/(p.totalHits+p.totalMisses):0,p.avgSimilarityOnHit=p.totalHits>0?d/p.totalHits:0,m.length>0){let E=m.map(h=>h.createdAt);p.oldestEntry=Math.min(...E),p.newestEntry=Math.max(...E);}else p.oldestEntry=null,p.newestEntry=null;}async function f(){let m=await a.getEntries(o),E=Date.now();for(let g of m)E-g.createdAt>n&&await a.removeEntry(o,g.id);let h=await a.getEntries(o);if(h.length>s){let b=h.sort((R,A)=>R.accessedAt-A.accessedAt).slice(0,h.length-s);for(let R of b)await a.removeEntry(o,R.id);}}return {async lookup(m,E){let h=Date.now();try{let g=await e(m),b=await a.getEntries(o),R=lr(g,b,r,l?E:void 0);return R?(await a.updateEntry(o,R.entry.id,{accessedAt:Date.now(),accessCount:R.entry.accessCount+1}),p.totalHits++,d+=R.similarity,y(b),c?.(R.entry,R.similarity),{hit:!0,entry:R.entry,similarity:R.similarity,latencyMs:Date.now()-h}):(p.totalMisses++,y(b),i?.(m),{hit:!1,latencyMs:Date.now()-h})}catch(g){return p.totalMisses++,u?.(g instanceof Error?g:new Error(String(g))),{hit:false,latencyMs:Date.now()-h}}},async store(m,E,h,g={}){let b=await e(m),R={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,query:m,queryEmbedding:b,response:E,metadata:g,createdAt:Date.now(),accessedAt:Date.now(),accessCount:0,agentName:l?h:void 0};await a.addEntry(o,R),await f();let A=await a.getEntries(o);y(A);},async invalidate(m){let E=await a.getEntries(o),h=0;for(let b of E)m(b)&&(await a.removeEntry(o,b.id),h++);let g=await a.getEntries(o);return y(g),h},async clear(){await a.clear(o),p={totalEntries:0,totalHits:0,totalMisses:0,hitRate:0,avgSimilarityOnHit:0,oldestEntry:null,newestEntry:null},d=0;},getStats(){return {...p}},async export(){return a.getEntries(o)},async import(m){for(let h of m)await a.addEntry(o,h);await f();let E=await a.getEntries(o);y(E);}}}function pr(t){let{cache:e}=t;return async r=>{let s=await e.lookup(r.input,r.agentName);return s.hit&&s.entry?{passed:false,cacheHit:true,reason:`Cache hit (similarity: ${(s.similarity*100).toFixed(1)}%)`,cachedResponse:s.entry.response,similarity:s.similarity}:{passed:true,cacheHit:false}}}function gr(t=128){return async e=>{let r=new Array(t).fill(0);for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r[n%t]+=o/256;}let s=Math.sqrt(r.reduce((n,o)=>n+o*o,0));if(s>0)for(let n=0;n<t;n++)r[n]/=s;return r}}function mr(t){let{batchSize:e=20,embedBatch:r,maxWaitMs:s=50}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive SemanticCache] batchSize must be >= 1, got ${e}`);let n=[],o=null,a=false;async function c(){if(n.length===0)return;let i=n;n=[],o&&(clearTimeout(o),o=null);try{let u=i.map(p=>p.text),l=await r(u);if(l.length!==i.length)throw new Error(`[Directive SemanticCache] embedBatch returned ${l.length} embeddings for ${i.length} texts. The embedBatch function must return exactly one embedding per input text.`);for(let p=0;p<i.length;p++)i[p].resolve(l[p]);}catch(u){let l=u instanceof Error?u:new Error(String(u));for(let p of i)p.reject(l);}}return {async embed(i){if(a)throw new Error("BatchedEmbedder has been destroyed");return new Promise((u,l)=>{n.push({text:i,resolve:u,reject:l}),n.length>=e?c():o||(o=setTimeout(c,s));})},async flush(){await c();},destroy(){a=true,o&&(clearTimeout(o),o=null);let i=n;n=[];let u=new Error("BatchedEmbedder destroyed");for(let l of i)l.reject(u);}}}function fr(){let t=new Map,e=null;function r(s){if(e===null)e=s.length;else if(s.length!==e)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${e}, got ${s.length}`)}return {add(s,n){r(n),t.set(s,n);},remove(s){t.delete(s);},search(s,n,o=0){if(e!==null&&s.length!==e)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${e}, got ${s.length}`);let a=[];for(let[c,i]of t){let u=V(s,i);u>=o&&a.push({id:c,similarity:u});}return a.sort((c,i)=>i.similarity-c.similarity),a.slice(0,n)},rebuild(){},size(){return t.size},clear(){t.clear(),e=null;},needsRebuild(){return false}}}function Be(t,e){return 1-V(t,e)}function ye(t,e){if(t.length===0)return null;let r=Math.floor(e()*t.length),s=t[r],n=t.filter((l,p)=>p!==r);if(n.length===0)return {id:s.id,embedding:s.embedding,mu:0,left:null,right:null};let o=n.map(l=>({item:l,distance:Be(s.embedding,l.embedding)}));o.sort((l,p)=>l.distance-p.distance);let a=Math.floor(o.length/2),c=o[a].distance,i=o.slice(0,a).map(l=>l.item),u=o.slice(a).map(l=>l.item);return {id:s.id,embedding:s.embedding,mu:c,left:ye(i,e),right:ye(u,e)}}function X(t,e,r,s,n,o){if(!t)return;let a=Be(e,t.embedding),c=1-a;c>=s&&(n.push({id:t.id,similarity:c}),n.sort((i,u)=>u.similarity-i.similarity),n.length>r&&n.pop(),n.length===r&&(o.value=1-n[n.length-1].similarity)),a<t.mu?(X(t.left,e,r,s,n,o),a+o.value>=t.mu&&X(t.right,e,r,s,n,o)):(X(t.right,e,r,s,n,o),a-o.value<=t.mu&&X(t.left,e,r,s,n,o));}function yr(t={}){let{random:e=Math.random}=t,r=new Map,s=null,n=false,o=null;function a(c){if(o===null)o=c.length;else if(c.length!==o)throw new Error(`[Directive ANNIndex] Dimension mismatch: expected ${o}, got ${c.length}`)}return {add(c,i){a(i),r.set(c,i),n=true;},remove(c){r.delete(c),n=true;},search(c,i,u=0){if(o!==null&&c.length!==o)throw new Error(`[Directive ANNIndex] Query dimension mismatch: expected ${o}, got ${c.length}`);if(n||!s){let d=[];for(let[y,f]of r){let m=V(c,f);m>=u&&d.push({id:y,similarity:m});}return d.sort((y,f)=>f.similarity-y.similarity),d.slice(0,i)}let l=[],p={value:Number.POSITIVE_INFINITY};return X(s,c,i,u,l,p),l},rebuild(){let c=Array.from(r.entries()).map(([i,u])=>({id:i,embedding:u}));s=ye(c,e),n=false;},size(){return r.size},clear(){r.clear(),s=null,n=false,o=null;},needsRebuild(){return n}}}function he(t={}){let{bufferSize:e=100}=t;if(e<1||!Number.isFinite(e))throw new Error(`[Directive StreamChannel] bufferSize must be >= 1, got ${e}`);let r=[],s="open",n=null,o=null,a=null,c=false;function i(y){if(o){let f=o;o=null,f.resolve({value:y,done:false});}}function u(){if(o){let y=o;o=null,y.resolve({value:void 0,done:true});}}function l(y){if(o){let f=o;o=null,c=false,f.reject(y);}}function p(){if(a){let y=a;a=null,y();}}return {async send(y){if(s!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${s} channel${t.name?` "${t.name}"`:""}`);if(o){i(y);return}if(r.length>=e){if(await new Promise(f=>{a=f;}),s!=="open")throw new Error(`[Directive StreamChannel] Cannot send to ${s} channel${t.name?` "${t.name}"`:""}`);if(o){i(y);return}}r.push(y);},end(){s==="open"&&(s="closed",u());},error(y){s==="open"&&(s="error",n=y,l(y),p());},getState(){return s},bufferedCount(){return r.length},[Symbol.asyncIterator](){if(c)throw new Error("[Directive StreamChannel] Channel only supports a single consumer. Create a separate channel for each consumer.");return c=true,{next(){if(s==="error"&&n)return c=false,Promise.reject(n);if(r.length>0){let y=r.shift();return p(),Promise.resolve({value:y,done:false})}return s==="closed"?(c=false,Promise.resolve({value:void 0,done:true})):new Promise((y,f)=>{o={resolve:y,reject:f};})},return(){return s="closed",r.length=0,c=false,p(),Promise.resolve({value:void 0,done:true})}}}}}function hr(t){let e=he(t),r=he(t);return {sideA:{send:s=>e.send(s),receive:r,close(){e.end(),r.end();}},sideB:{send:s=>r.send(s),receive:e,close(){e.end(),r.end();}}}}async function vr(t,e,r){try{for await(let s of t){let n=await r(s);await e.send(n);}e.end();}catch(s){e.error(s instanceof Error?s:new Error(String(s)));}}function br(...t){return {[Symbol.asyncIterator](){let r=[],s=0,n=null,o=null,a=false,c=false,i=[];function u(l){if(n){let p=n;return n=null,p(l),true}return false}for(let l of t){let p=l[Symbol.asyncIterator]();i.push(p),(async()=>{try{for(;!a;){let d=await p.next();if(d.done||a)break;u({value:d.value,done:!1})||(r.length<1e4?r.push(d.value):c||(c=!0,console.warn("[Directive mergeStreams] Buffer exceeded 10000 items. Values are being dropped. Ensure the consumer keeps up or use bounded StreamChannel sources.")));}}catch(d){a||(a=true,o=d instanceof Error?d:new Error(String(d)),u({value:void 0,done:true}));}s++,s>=t.length&&!a&&u({value:void 0,done:true});})();}return {next(){return o?Promise.reject(o):r.length>0?Promise.resolve({value:r.shift(),done:false}):s>=t.length?Promise.resolve({value:void 0,done:true}):new Promise(l=>{n=l;})},return(){a=true,r.length=0;for(let l of i)l.return?.({value:void 0,done:true});if(n){let l=n;n=null,l({value:void 0,done:true});}return Promise.resolve({value:void 0,done:true})}}}}}function Sr(t,e){let r=t.metadata.title??"",s=t.metadata.section??"",n=t.metadata.url??"";return `${r&&s&&n?`[${r} \u2014 ${s}](${n})`:r||t.id}
|
|
29
|
+
${t.content}`}function Er(t,e){return t.length===0?"":`Relevant documentation context:
|
|
89
30
|
|
|
90
31
|
${t.join(`
|
|
91
32
|
|
|
92
|
-
`)}`}function
|
|
33
|
+
`)}`}function Rr(t,e,r){return Math.max(e,Math.min(r,t))}function wr(t){let{embedder:e,storage:r,topK:s=5,minSimilarity:n=.3,formatChunk:o=Sr,formatContext:a=Er,onError:c}=t,i=Rr(n,0,1);typeof process<"u"&&process.env?.NODE_ENV==="development"&&n!==i&&console.warn(`[Directive] RAG: minSimilarity ${n} clamped to ${i} (valid range: 0-1)`);async function u(p,d){let y=Math.max(1,Math.floor(d??s));if(r.search)return r.search(await e(p),y,i);let f=await e(p),E=(await r.getChunks()).map(h=>({...h,similarity:V(f,h.embedding)}));return E.sort((h,g)=>g.similarity-h.similarity),E.filter(h=>h.similarity>=i).slice(0,y)}async function l(p,d={}){let{prefix:y,history:f,topK:m,filter:E}=d,h=[];try{h=await u(p,m);}catch(A){c?.(A instanceof Error?A:new Error(String(A)));}E&&(h=h.filter(A=>E(A)));let g=h.map(A=>o(A,A.similarity)),b=a(g,p),R=[];if(y&&R.push(y),b&&R.push(b),f&&f.length>0){let A=f.map(x=>`${x.role.charAt(0).toUpperCase()+x.role.slice(1)}: ${x.content}`).join(`
|
|
93
34
|
|
|
94
|
-
`);
|
|
95
|
-
${
|
|
35
|
+
`);R.push(`Previous conversation:
|
|
36
|
+
${A}`);}return R.push(p),R.join(`
|
|
96
37
|
|
|
97
38
|
---
|
|
98
39
|
|
|
99
|
-
`)}return {retrieve:
|
|
40
|
+
`)}return {retrieve:u,enrich:l}}function Cr(t,e){let r=re__default.default.resolve(t);if(r.split(re__default.default.sep).includes(".."))throw new Error(`[Directive] File path escapes allowed directory: ${t}`);if(e){let n=re__default.default.resolve(e)+re__default.default.sep;if(!r.startsWith(n)&&r!==n.slice(0,-1))throw new Error(`[Directive] File path escapes allowed directory: ${t}`)}return r}function Mr(t){let{filePath:e,mapEntry:r,ttlMs:s=0,baseDir:n}=t,o=Cr(e,n),a=null,c=0;async function i(){if(a&&(s===0||Date.now()-c<s))return a;try{let l=await(await import('fs')).promises.readFile(o,"utf-8"),p=JSON.parse(l);return a=r?p.map(r):p,c=Date.now(),a}catch(u){return typeof process<"u"&&process.env?.NODE_ENV==="development"&&console.warn(`[Directive] JSONFileStore: failed to load ${o}:`,u),a=[],c=Date.now(),a}}return {async getChunks(){return i()},async size(){return (await i()).length},async reload(){a=null,c=0,await i();},destroy(){a=null,c=0;}}}var Fe="AI service temporarily unavailable. Please try again.";function Ar(t={}){let{maxResponseChars:e=Number.POSITIVE_INFINITY,truncationMessage:r=`
|
|
100
41
|
|
|
101
|
-
*[Response truncated]*`,heartbeatIntervalMs:
|
|
42
|
+
*[Response truncated]*`,heartbeatIntervalMs:s=0,errorMessages:n,headers:o}=t;if(e<0)throw new RangeError("maxResponseChars must be non-negative");if(s<0)throw new RangeError("heartbeatIntervalMs must be non-negative");function a(u){if(typeof n=="function")try{return n(u)}catch{return Fe}if(n&&typeof n=="object"){let l=u!=null&&typeof u=="object"&&"code"in u&&typeof u.code=="string"?u.code:void 0;if(l&&l in n)return n[l]}return Fe}function c(u,l,p,d){let y=new TextEncoder;function f(m){return y.encode(`data: ${JSON.stringify(m)}
|
|
102
43
|
|
|
103
|
-
`)}return new ReadableStream({async start(
|
|
44
|
+
`)}return new ReadableStream({async start(m){let E=null,h=null;try{s>0&&(E=setInterval(()=>{try{m.enqueue(f({type:"heartbeat",timestamp:Date.now()}));}catch{}},s)),h=u.stream(l,p,{signal:d?.signal});let g=0,b=!1;for await(let R of h){if(g+=R.length,g>e){m.enqueue(f({type:"truncated",text:r})),m.enqueue(f({type:"done"})),b=!0,h.abort();break}m.enqueue(f({type:"text",text:R}));}try{await h.result;}catch{}b||m.enqueue(f({type:"done"}));}catch(g){let b=a(g);m.enqueue(f({type:"error",message:b}));}finally{E&&clearInterval(E),m.close();}}})}let i={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive",...o};return {toResponse(u,l,p,d){let y=c(u,l,p,d);return new Response(y,{headers:i})},toStream(u,l,p,d){return c(u,l,p,d)}}}var se=class extends Error{retryCount;lastError;constructor(e,r){super(`[Directive] All ${e} retries exhausted: ${r.message}`),this.name="RetryExhaustedError",this.retryCount=e,this.lastError=r,this.cause=r;}},xr=new Set([400,401,403,404,422]);function ve(t){let e=t;if(typeof e.status=="number"&&e.status>=100&&e.status<=599)return e.status;if(typeof e.statusCode=="number"&&e.statusCode>=100&&e.statusCode<=599)return e.statusCode;let s=(t.message.length>1e3?t.message.slice(0,1e3):t.message).match(/(?:failed|error|status|http)[:\s]+(\d{3})\b/i);if(!s)return null;let n=Number(s[1]);return n>=100&&n<=599?n:null}function Le(t){let e=t;if(typeof e.retryAfter=="number"&&e.retryAfter>0)return e.retryAfter*1e3;let s=(t.message.length>1e3?t.message.slice(0,1e3):t.message).match(/retry[- ]?after[:\s]+(\d+)/i);if(!s)return null;let n=Number(s[1]);return n>0?n*1e3:null}function Tr(t,e,r){let s=e*2**(t-1),n=Math.random()*e*.5,o=s+n;return Math.min(o,r)}function Pr(t,e,r,s){if(ve(t)===429){let o=Le(t);if(o!==null)return Math.min(o,s)}return Tr(e,r,s)}function kr(t){let e=ve(t);return e===null?true:!xr.has(e)}function Ir(t,e={}){let{maxRetries:r=3,baseDelayMs:s=1e3,maxDelayMs:n=3e4,isRetryable:o,onRetry:a}=e;if(!Number.isFinite(r)||r<0)throw new Error("[Directive] withRetry: maxRetries must be a non-negative finite number.");if(!Number.isFinite(s)||s<0)throw new Error("[Directive] withRetry: baseDelayMs must be a non-negative finite number.");if(!Number.isFinite(n)||n<0)throw new Error("[Directive] withRetry: maxDelayMs must be a non-negative finite number.");return async(c,i,u)=>{let l;for(let p=0;p<=r;p++)try{return await t(c,i,u)}catch(d){if(l=d instanceof Error?d:new Error(String(d)),p>=r)break;if(o)try{if(!o(l))break}catch{break}if(!kr(l))break;let y=Pr(l,p+1,s,n);try{a?.(p+1,l,y);}catch{}let f=u?.signal;if(f?.aborted)break;await new Promise((m,E)=>{let h=setTimeout(()=>{f?.removeEventListener("abort",g),m();},y);function g(){clearTimeout(h),E(f.reason??new Error("Aborted"));}f&&f.addEventListener("abort",g,{once:true});});}throw new se(r,l)}}var oe=class extends Error{errors;constructor(e){let r=e.map((s,n)=>` [${n}] ${s.message}`).join(`
|
|
104
45
|
`);super(`[Directive] All ${e.length} providers failed:
|
|
105
|
-
${n}`),this.name="AllProvidersFailedError",this.errors=Object.freeze([...e]),e.length>0&&(this.cause=e[e.length-1]);}};function ci(t,e={}){if(t.length===0)throw new Error("[Directive] withFallback requires at least one runner.");let{shouldFallback:n,onFallback:o}=e;return async(r,a,s)=>{let c=[];for(let u=0;u<t.length;u++)try{return await t[u](r,a,s)}catch(l){let d=l instanceof Error?l:new Error(String(l));if(c.push(d),u<t.length-1){if(n)try{if(!n(d))break}catch{break}try{o?.(u,u+1,d);}catch{}}}throw new qn(c)}}var xn=class extends Error{estimated;remaining;window;constructor(e){super(`[Directive] Budget exceeded (${e.window}): estimated $${e.estimated.toFixed(4)}, remaining $${e.remaining.toFixed(4)}`),this.name="BudgetExceededError",this.estimated=e.estimated,this.remaining=e.remaining,this.window=e.window;}},Un=class{entries=[];record(e){this.entries.push({timestamp:Date.now(),cost:e});}getCostInWindow(e){let n=Date.now()-e;this.prune(n);let o=0;for(let r of this.entries)r.timestamp>=n&&(o+=r.cost);return o}prune(e){let n=0;for(;n<this.entries.length&&this.entries[n].timestamp<e;)n++;n>0&&this.entries.splice(0,n);}clear(){this.entries=[];}},to={hour:3600*1e3,day:1440*60*1e3};function li(t,e){return Math.ceil(t.length/e)}function no(t,e){return t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function ro(t,e,n=1){let o=Math.ceil(t*n);return t/1e6*e.inputPerMillion+o/1e6*e.outputPerMillion}function di(t,e){let{maxCostPerCall:n,budgets:o=[],pricing:r,charsPerToken:a=4,estimatedOutputMultiplier:s=1,onBudgetExceeded:c}=e;if(!Number.isFinite(a)||a<=0)throw new Error("[Directive] withBudget: charsPerToken must be a positive finite number.");if(n!=null&&(!Number.isFinite(n)||n<0))throw new Error("[Directive] withBudget: maxCostPerCall must be a non-negative finite number.");if(!Number.isFinite(s)||s<0)throw new Error("[Directive] withBudget: estimatedOutputMultiplier must be a non-negative finite number.");n!=null&&!r&&console.warn("[Directive] withBudget: maxCostPerCall has no effect without pricing. Provide a pricing config to enable per-call cost estimation.");for(let m of o)if(!Number.isFinite(m.maxCost)||m.maxCost<0)throw new Error(`[Directive] withBudget: budgets[${m.window}].maxCost must be a non-negative finite number.`);let u=new Map;for(let m of o)u.set(m.window,new Un);let l=new Un,d=async(m,k,w)=>{let y=li(k,a);if(n!=null&&r){let R=ro(y,r,s);if(R>n){let v={estimated:R,remaining:n,window:"per-call"};try{c?.(v);}catch{}throw new xn(v)}}for(let R of o){let v=to[R.window],P=u.get(R.window).getCostInWindow(v),H=R.maxCost-P,_=ro(y,R.pricing,s);if(_>H){let q={estimated:_,remaining:Math.max(0,H),window:R.window};try{c?.(q);}catch{}throw new xn(q)}}let T=await t(m,k,w);if(T.tokenUsage){for(let R of o){let v=u.get(R.window),C=no(T.tokenUsage,R.pricing);v.record(C);}if(r&&o.length===0){let R=no(T.tokenUsage,r);l.record(R);}}return T};function f(m){let k=u.get(m);if(!k)return 0;let w=to[m];return k.getCostInWindow(w)}return d.getSpent=f,d}function pi(t,e){return {match:(n,o)=>o.length<=t,model:e}}function gi(t,e){return {match:n=>n.name===t,model:e}}function mi(t,e){return {match:(n,o)=>(t.lastIndex=0,t.test(o)),model:e}}function fi(t,e){let n=Array.isArray(e)?{rules:e}:e,{rules:o,onModelSelected:r}=n;return async(a,s,c)=>{let u=a.model;for(let d of o)try{if(d.match(a,s)){u=d.model;break}}catch{}try{r?.(a.model,u);}catch{}let l=u!==a.model?{...a,model:u}:a;return t(l,s,c)}}function hi(t,e={}){let{maxBatchSize:n=20,maxWaitMs:o=5e3,concurrency:r=5}=e;if(!Number.isFinite(n)||n<1)throw new Error("[Directive] createBatchQueue: maxBatchSize must be a positive finite number (>= 1).");if(!Number.isFinite(o)||o<0)throw new Error("[Directive] createBatchQueue: maxWaitMs must be a non-negative finite number.");if(!Number.isFinite(r)||r<1)throw new Error("[Directive] createBatchQueue: concurrency must be a positive finite number (>= 1).");let a=[],s=null,c=false,u=null;function l(){s===null&&(s=setTimeout(()=>{s=null,m().catch(()=>{});},o));}function d(){s!==null&&(clearTimeout(s),s=null);}async function f(k){let w=0;async function y(){for(;w<k.length;){let R=w++,v=k[R];try{let C=await t(v.agent,v.input,v.options);v.resolve(C);}catch(C){v.reject(C instanceof Error?C:new Error(String(C)));}}}let T=Array.from({length:Math.min(r,k.length)},()=>y());await Promise.all(T);}async function m(){if(u&&await u,a.length===0)return;d();let k=a.splice(0);u=f(k).finally(()=>{u=null,a.length>0&&l();}),await u;}return {submit(k,w,y){return c?Promise.reject(new Error("[Directive] BatchQueue has been disposed.")):new Promise((T,R)=>{a.push({agent:k,input:w,options:y,resolve:T,reject:R}),a.length>=n?(d(),m().catch(()=>{})):l();})},async flush(){await m();},get pending(){return a.length},async dispose(){c||(c=true,d(),a.length>0&&await m());}}}function oo(){return {callCount:0,errorCount:0,totalCost:0,avgLatencyMs:0,lastErrorAt:null}}function yi(t,e){return !t||!e?0:t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function bi(t){let{providers:e,defaultProvider:n,constraints:o=[],onProviderSelected:r,errorCooldownMs:a=3e4,preferCheapest:s=false}=t;if(!Number.isFinite(a)||a<0)throw new Error("[Directive] createConstraintRouter: errorCooldownMs must be a non-negative finite number.");let c=new Map;for(let w of e)c.set(w.name,w);if(!c.has(n))throw new Error(`[Directive] Default provider "${n}" not found in providers list.`);let u={totalCost:0,callCount:0,errorCount:0,lastProvider:null,avgLatencyMs:0,providers:Object.create(null)};for(let w of e)u.providers[w.name]=oo();let l=0,d=[...o].sort((w,y)=>(y.priority??0)-(w.priority??0));function f(){let w=Date.now();for(let T of d)try{if(T.when(u)){let R=c.get(T.provider);if(R)return {provider:R,reason:"constraint"}}}catch{}let y=e.filter(T=>{let R=u.providers[T.name];return R?!(R.lastErrorAt&&w-R.lastErrorAt<a):true});if(s&&y.length>0){let T=[...y].sort((R,v)=>{let C=R.pricing?R.pricing.inputPerMillion+R.pricing.outputPerMillion:Number.POSITIVE_INFINITY,P=v.pricing?v.pricing.inputPerMillion+v.pricing.outputPerMillion:Number.POSITIVE_INFINITY;return C!==P?C-P:R.name===n?-1:v.name===n?1:0});if(T[0]!==c.get(n))return {provider:T[0],reason:"cheapest"}}return y.length>0&&!y.some(T=>T.name===n)?{provider:y[0],reason:"default"}:{provider:c.get(n),reason:"default"}}function m(w,y,T,R,v){let C=u.providers[w]??oo();if(C.callCount++,u.callCount++,v)C.errorCount++,u.errorCount++,C.lastErrorAt=Date.now();else {let H=yi(T,R);C.totalCost+=H,u.totalCost+=H;}l+=y,u.avgLatencyMs=l/u.callCount;let P=C.callCount>0?(C.avgLatencyMs*(C.callCount-1)+y)/C.callCount:y;C.avgLatencyMs=P,u.providers[w]=C,u.lastProvider=w;}let k=async(w,y,T)=>{let{provider:R,reason:v}=f();try{r?.(R.name,v);}catch{}let C=Date.now();try{let P=await R.runner(w,y,T),H=Date.now()-C;return m(R.name,H,P.tokenUsage,R.pricing),P}catch(P){let H=Date.now()-C,_=P instanceof Error?P:new Error(String(P));throw m(R.name,H,void 0,R.pricing,_),_}};return Object.defineProperty(k,"facts",{get:()=>{let w=Object.create(null);for(let y of Object.keys(u.providers))w[y]={...u.providers[y]};return {...u,providers:w}},enumerable:true}),k}function so(t){let{transport:e,timeline:n,healthMonitor:o,getSnapshot:r,getBreakpointState:a,onResumeBreakpoint:s,onCancelBreakpoint:c,getScratchpadState:u,getDerivedState:l,onForkFromSnapshot:d,batchSize:f=1,batchIntervalMs:m=50,healthPushIntervalMs:k=0,authenticate:w}=t,y=t.maxClients??50,T=`devtools_${crypto.randomUUID()}`,R=new Set,v=new Set,C=[],P=null,H=null;function _(B,ie){try{B.send(JSON.stringify(ie));}catch{R.delete(B);}}function q(B){let ie=JSON.stringify(B),ae=[...R];for(let I of ae)try{I.send(ie);}catch{R.delete(I);}}function ye(){C.length!==0&&(C.length===1?q({type:"event",event:C[0]}):q({type:"event_batch",events:C}),C=[]);}let x=n.subscribe(B=>{if(R.size!==0){if(f<=1){q({type:"event",event:B});return}C.push(B),C.length>=f&&ye();}});f>1&&m>0&&(P=setInterval(ye,m)),k>0&&o&&(H=setInterval(()=>{R.size>0&&q({type:"health",metrics:o.getAllMetrics()});},k));function G(B,ie){let ae;try{ae=JSON.parse(ie);}catch{_(B,{type:"error",code:"INVALID_JSON",message:"Could not parse message"});return}if(!ae||typeof ae!="object"||typeof ae.type!="string"){_(B,{type:"error",code:"INVALID_MESSAGE",message:"Missing type field"});return}let I=Date.now(),pe=J.get(B)??0;if(I-pe<se){_(B,{type:"error",code:"RATE_LIMITED",message:"Too many requests"});return}if(J.set(B,I),ae.type==="authenticate"){if(!w){_(B,{type:"error",code:"UNKNOWN_COMMAND",message:"Authentication not configured on this server"});return}if(!v.has(B)){_(B,{type:"error",code:"ALREADY_AUTHENTICATED",message:"Already authenticated"});return}if(typeof ae.token!="string"){_(B,{type:"error",code:"AUTH_FAILED",message:"Missing token"}),B.close(),v.delete(B);return}let Ae=w(ae.token),xe=ft=>{ft?(v.delete(B),R.add(B),_(B,{type:"welcome",version:1,sessionId:T,timestamp:Date.now()})):(_(B,{type:"error",code:"AUTH_FAILED",message:"Invalid token"}),v.delete(B),B.close());};Ae instanceof Promise?Ae.then(xe).catch(()=>{_(B,{type:"error",code:"AUTH_FAILED",message:"Authentication error"}),v.delete(B),B.close();}):xe(Ae);return}if(v.has(B)){_(B,{type:"error",code:"AUTH_REQUIRED",message:"Authentication required"});return}switch(ae.type){case "ping":_(B,{type:"pong",timestamp:Date.now()});break;case "request_snapshot":r?_(B,{type:"snapshot",data:r()}):_(B,{type:"error",code:"NO_SNAPSHOT",message:"Snapshot provider not configured"});break;case "request_health":o?_(B,{type:"health",metrics:o.getAllMetrics()}):_(B,{type:"error",code:"NO_HEALTH",message:"Health monitor not configured"});break;case "request_events":{let Ae=n.getEvents(),xe=ae.since,ft=xe!=null?Ae.filter(Gt=>Gt.id>xe):Ae;_(B,{type:"event_batch",events:ft});break}case "request_breakpoints":a?_(B,{type:"breakpoints",state:a()}):_(B,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint provider not configured"});break;case "resume_breakpoint":if(s&&typeof ae.breakpointId=="string"){let Ae=ae.modifications?{input:ae.modifications.input,skip:ae.modifications.skip}:void 0;s(ae.breakpointId,Ae);}else _(B,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint resume not configured"});break;case "cancel_breakpoint":if(c&&typeof ae.breakpointId=="string"){let Ae=typeof ae.reason=="string"?ae.reason:void 0;c(ae.breakpointId,Ae);}else _(B,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint cancel not configured"});break;case "export_session":_(B,{type:"event_batch",events:n.getEvents()});break;case "import_session":{if(typeof ae.data!="string")_(B,{type:"error",code:"INVALID_DATA",message:"Missing data field for import"});else if(ae.data.length>10485760)_(B,{type:"error",code:"IMPORT_TOO_LARGE",message:`Import data exceeds ${10485760/1024/1024} MB limit`});else try{n.import(ae.data),_(B,{type:"event_batch",events:n.getEvents()});}catch(xe){let ft=xe instanceof Error?xe.message:String(xe);_(B,{type:"error",code:"IMPORT_FAILED",message:ft});}break}case "request_scratchpad":u?_(B,{type:"scratchpad_state",data:u()}):_(B,{type:"error",code:"NO_SCRATCHPAD",message:"Scratchpad provider not configured"});break;case "request_derived":l?_(B,{type:"derived_state",data:l()}):_(B,{type:"error",code:"NO_DERIVED",message:"Derived state provider not configured"});break;case "fork_from_snapshot":{if(d&&typeof ae.eventId=="number")try{let Ae=d(ae.eventId);_(B,{type:"fork_complete",eventId:ae.eventId,newEventCount:Ae.newEventCount});}catch(Ae){let xe=Ae instanceof Error?Ae.message:String(Ae);_(B,{type:"error",code:"FORK_FAILED",message:xe});}else _(B,{type:"error",code:"NO_FORK",message:"Fork provider not configured"});break}default:_(B,{type:"error",code:"UNKNOWN_COMMAND",message:`Unknown message type: ${String(ae.type).slice(0,100)}`});}}let J=new Map,se=50;return e.onConnection((B,ie,ae)=>{if(R.size+v.size>=y){try{let I={type:"error",code:"MAX_CLIENTS",message:"Connection limit reached"};B.send(JSON.stringify(I));}catch{}B.close();return}w?v.add(B):(R.add(B),_(B,{type:"welcome",version:1,sessionId:T,timestamp:Date.now()})),ie(I=>G(B,I)),ae(()=>{R.delete(B),v.delete(B),J.delete(B);});}),{get clientCount(){return R.size},broadcast(B){q(B);},pushHealth(){o&&R.size>0&&q({type:"health",metrics:o.getAllMetrics()});},pushBreakpoints(){a&&R.size>0&&q({type:"breakpoints",state:a()});},pushScratchpadUpdate(B,ie){R.size>0&&q({type:"scratchpad_update",key:B,value:ie});},pushDerivedUpdate(B,ie){R.size>0&&q({type:"derived_update",id:B,value:ie});},pushTokenStream(B,ie,ae){R.size>0&&q({type:"token_stream",agentId:B,tokens:ie,tokenCount:ae});},pushStreamDone(B,ie){R.size>0&&q({type:"stream_done",agentId:B,totalTokens:ie});},close(){x(),P&&(clearInterval(P),P=null),H&&(clearInterval(H),H=null),ye();for(let B of R)try{B.close();}catch{}for(let B of v)try{B.close();}catch{}R.clear(),v.clear(),J.clear(),e.close();}}}async function vi(t,e={}){if(!t.timeline)throw new Error("[Directive DevTools] Orchestrator must have debug: true to use DevTools");let n=await ao({port:e.port??4040,host:e.host??"localhost"});return so({transport:n,timeline:t.timeline,healthMonitor:t.healthMonitor,healthPushIntervalMs:e.healthPushIntervalMs??5e3,batchSize:e.batchSize,authenticate:e.authenticate,getSnapshot:t.getAllAgentStates?()=>{let o=t.getAllAgentStates();return {timestamp:Date.now(),agents:o,eventCount:t.timeline.getEvents().length}}:void 0,getBreakpointState:t.getPendingBreakpoints?()=>({pending:t.getPendingBreakpoints(),resolved:[],cancelled:[]}):void 0,onResumeBreakpoint:t.resumeBreakpoint,onCancelBreakpoint:t.cancelBreakpoint,getScratchpadState:t.getScratchpadState,getDerivedState:t.getDerivedState,onForkFromSnapshot:t.timeline?.forkFrom?o=>(t.timeline.forkFrom(o),{newEventCount:t.timeline.getEvents().length}):void 0})}async function ao(t={}){let e=t.port??4040,n=t.host??"localhost",{WebSocketServer:o}=await import('ws'),r=new o({port:e,host:n,maxPayload:t.maxPayloadBytes??1048576}),a=null;return r.on("connection",s=>{let c=null,u=null,l={send(d){s.readyState===s.OPEN&&s.send(d);},close(){s.close();}};s.on("message",d=>{c&&c(d.toString());}),s.on("close",()=>{u&&u();}),a?.(l,d=>{c=d;},d=>{u=d;});}),{onConnection(s){a=s;},close(){r.close();}}}function Cn(t){return Number.isFinite(t)?t:0}function hr(t){let e=Object.keys(t),n=new Map;for(let[m,k]of Object.entries(t))for(let w of k.produces){if(n.has(w))throw new Error(`[Directive Goal] Fact key "${w}" is produced by both "${n.get(w)}" and "${m}". Each fact key must have exactly one producer.`);n.set(w,m);}let o=[],r=new Map,a=new Map;for(let m of e)r.set(m,0),a.set(m,[]);for(let[m,k]of Object.entries(t))for(let w of k.requires??[]){let y=n.get(w);y&&y!==m&&(o.push({from:y,to:m,factKey:w}),a.get(y).push(m),r.set(m,(r.get(m)??0)+1));}let s=[];for(let[m,k]of r)k===0&&s.push(m);let c=[],u=0;for(;u<s.length;){let m=s[u++];c.push(m);for(let k of a.get(m)??[]){let w=(r.get(k)??1)-1;r.set(k,w),w===0&&s.push(k);}}if(c.length!==e.length){let m=new Set(c),k=e.filter(w=>!m.has(w));throw new Error(`[Directive Goal] Circular dependency detected among agents: ${k.join(", ")}. Review their produces/requires declarations.`)}let l=c.filter(m=>(t[m].requires??[]).every(y=>!n.has(y)||n.get(y)===m)),d=new Set;for(let m of o)d.add(m.from);let f=e.filter(m=>!d.has(m));return {order:c,edges:o,roots:l,leaves:f,producers:n}}function ki(t){let e=hr(t);return {order:[...e.order],edges:[...e.edges],roots:[...e.roots],leaves:[...e.leaves],producers:new Map(e.producers)}}function wi(t){let e=[],n=[];Object.keys(t).length===0&&e.push("No agents declared");for(let[r,a]of Object.entries(t))a.produces.length===0&&n.push(`Agent "${r}" has no produces \u2014 it will never contribute`);let o=new Set;for(let r of Object.values(t))for(let a of r.produces)o.add(a);for(let[r,a]of Object.entries(t))for(let s of a.requires??[])o.has(s)||n.push(`Agent "${r}" requires "${s}" which no agent produces \u2014 must be in initial facts`);try{hr(t);}catch(r){e.push(r instanceof Error?r.message:String(r));}return {valid:e.length===0,errors:e,warnings:n}}function Ri(t,e=[],n=50){let o=hr(t),r=new Set;for(let d of Object.values(t))for(let f of d.produces)r.add(f);let a=[];for(let d of Object.values(t))for(let f of d.requires??[])r.has(f)||a.push(f);let s=new Set(e),c=new Set,u=[];for(let d=1;d<=n;d++){let f=o.order.filter(k=>c.has(k)?false:(t[k].requires??[]).every(T=>s.has(T)));if(f.length===0)break;let m=[];for(let k of f){c.add(k);for(let w of t[k].produces)s.has(w)||(m.push(w),s.add(w));}u.push({step:d,agents:f,availableFacts:[...s],producedFacts:m});}let l=Object.keys(t).filter(d=>!c.has(d));return {steps:u,unreachableAgents:l,externalDeps:[...new Set(a)],feasible:l.length===0}}function Si(t){let e=t.stepMetrics.map(l=>{let d=Cn(l.satisfaction),f=Cn(l.satisfactionDelta),m=l.nodesRun.join(", "),k=l.factsProduced.length>0?l.factsProduced.join(", "):"none",w=+Cn(d-f).toFixed(3),y=f>=0?`+${f.toFixed(3)}`:f.toFixed(3),T=`Step ${l.step}: Ran ${m}. Produced: ${k}. Satisfaction: ${w} \u2192 ${d.toFixed(3)} (${y}). ${l.tokensConsumed} tokens, ${l.durationMs}ms.`;return {step:l.step,agents:l.nodesRun,factsProduced:l.factsProduced,satisfaction:d,satisfactionDelta:f,durationMs:l.durationMs,tokensConsumed:l.tokensConsumed,description:T}}),n=t.relaxations.map(l=>{let d;switch(l.strategy){case "allow_rerun":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 re-enabled completed nodes for another run.`;break;case "inject_facts":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 injected fact values to unblock dependencies.`;break;case "accept_partial":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 accepted current facts as partial result.`;break;case "alternative_nodes":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 added alternative nodes to the graph.`;break;case "custom":d=`Step ${l.step}: Applied relaxation "${l.label}" \u2014 ran custom recovery logic.`;break;default:d=`Step ${l.step}: Applied relaxation "${l.label}" (${l.strategy}).`;}return {step:l.step,label:l.label,strategy:l.strategy,description:d}}),o=t.stepMetrics.length>0?Cn(t.stepMetrics[0].satisfaction-t.stepMetrics[0].satisfactionDelta).toFixed(3):"0",r=t.stepMetrics.length>0?Cn(t.stepMetrics[t.stepMetrics.length-1].satisfaction).toFixed(3):"0",a=t.achieved?"Goal achieved":"Goal not achieved",s=t.relaxations.length>0?` ${t.relaxations.length} relaxation(s) applied.`:"",c=t.error?` Error: ${t.error}`:"",u=`${a} in ${t.steps} step(s) (${t.totalTokens.toLocaleString()} tokens, ${t.durationMs}ms). Satisfaction: ${o} \u2192 ${r}.`+s+c;return {achieved:t.achieved,summary:u,steps:e,relaxations:n,totalTokens:t.totalTokens,durationMs:t.durationMs}}function Ti(t,e=false){let n=false,o=[],r=[],a=e?(s,...c)=>console.debug(`[MCP Stub] ${s}`,...c):()=>{};return {async connect(){a(`Connecting to ${t.name} (${t.transport})`),n=true;},async disconnect(){n=false;},isConnected(){return n},getCapabilities(){return {tools:true,resources:true,prompts:true}},async listTools(){return o},async callTool(s,c){return a(`Calling tool ${s}`,c),{content:[{type:"text",text:`Stub result for ${s}`}]}},async listResources(){return r},async readResource(s){return a(`Reading resource ${s}`),{contents:[{uri:s,text:`Stub content for ${s}`}]}},async listPrompts(){return []},async getPrompt(s){return {messages:[{role:"user",content:{type:"text",text:`Stub prompt ${s}`}}]}}}}function Ei(t,e,n){let o=Date.now(),r=t.get(e);return !r||o>r.resetTime?(t.set(e,{count:1,resetTime:o+6e4}),true):r.count>=n?false:(r.count++,true)}function Ai(t){let{servers:e,toolConstraints:n={},resourceMappings:o=[],events:r={},autoConnect:a=false,autoReconnect:s=true,debug:c=false,allowDirectCalls:u=false}=t;!t.clientFactory&&(typeof process<"u"&&process.env?.NODE_ENV==="production"?console.warn(`[Directive MCP] WARNING: Using stub MCP client in production!
|
|
46
|
+
${r}`),this.name="AllProvidersFailedError",this.errors=Object.freeze([...e]),e.length>0&&(this.cause=e[e.length-1]);}};function Dr(t,e={}){if(t.length===0)throw new Error("[Directive] withFallback requires at least one runner.");let{shouldFallback:r,onFallback:s}=e;return async(n,o,a)=>{let c=[];for(let i=0;i<t.length;i++)try{return await t[i](n,o,a)}catch(u){let l=u instanceof Error?u:new Error(String(u));if(c.push(l),i<t.length-1){if(r)try{if(!r(l))break}catch{break}try{s?.(i,i+1,l);}catch{}}}throw new oe(c)}}var Y=class extends Error{estimated;remaining;window;constructor(e){super(`[Directive] Budget exceeded (${e.window}): estimated $${e.estimated.toFixed(4)}, remaining $${e.remaining.toFixed(4)}`),this.name="BudgetExceededError",this.estimated=e.estimated,this.remaining=e.remaining,this.window=e.window;}},ae=class{entries=[];record(e){this.entries.push({timestamp:Date.now(),cost:e});}getCostInWindow(e){let r=Date.now()-e;this.prune(r);let s=0;for(let n of this.entries)n.timestamp>=r&&(s+=n.cost);return s}prune(e){let r=0;for(;r<this.entries.length&&this.entries[r].timestamp<e;)r++;r>0&&this.entries.splice(0,r);}clear(){this.entries=[];}},Ue={hour:3600*1e3,day:1440*60*1e3};function Or(t,e){return Math.ceil(t.length/e)}function ze(t,e){return t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function He(t,e,r=1){let s=Math.ceil(t*r);return t/1e6*e.inputPerMillion+s/1e6*e.outputPerMillion}function Nr(t,e){let{maxCostPerCall:r,budgets:s=[],pricing:n,charsPerToken:o=4,estimatedOutputMultiplier:a=1,onBudgetExceeded:c}=e;if(!Number.isFinite(o)||o<=0)throw new Error("[Directive] withBudget: charsPerToken must be a positive finite number.");if(r!=null&&(!Number.isFinite(r)||r<0))throw new Error("[Directive] withBudget: maxCostPerCall must be a non-negative finite number.");if(!Number.isFinite(a)||a<0)throw new Error("[Directive] withBudget: estimatedOutputMultiplier must be a non-negative finite number.");r!=null&&!n&&console.warn("[Directive] withBudget: maxCostPerCall has no effect without pricing. Provide a pricing config to enable per-call cost estimation.");for(let d of s)if(!Number.isFinite(d.maxCost)||d.maxCost<0)throw new Error(`[Directive] withBudget: budgets[${d.window}].maxCost must be a non-negative finite number.`);let i=new Map;for(let d of s)i.set(d.window,new ae);let u=new ae,l=async(d,y,f)=>{let m=Or(y,o);if(r!=null&&n){let h=He(m,n,a);if(h>r){let g={estimated:h,remaining:r,window:"per-call"};try{c?.(g);}catch{}throw new Y(g)}}for(let h of s){let g=Ue[h.window],R=i.get(h.window).getCostInWindow(g),A=h.maxCost-R,x=He(m,h.pricing,a);if(x>A){let k={estimated:x,remaining:Math.max(0,A),window:h.window};try{c?.(k);}catch{}throw new Y(k)}}let E=await t(d,y,f);if(E.tokenUsage){for(let h of s){let g=i.get(h.window),b=ze(E.tokenUsage,h.pricing);g.record(b);}if(n&&s.length===0){let h=ze(E.tokenUsage,n);u.record(h);}}return E};function p(d){let y=i.get(d);if(!y)return 0;let f=Ue[d];return y.getCostInWindow(f)}return l.getSpent=p,l}function $r(t,e){return {match:(r,s)=>s.length<=t,model:e}}function _r(t,e){return {match:r=>r.name===t,model:e}}function jr(t,e){return {match:(r,s)=>(t.lastIndex=0,t.test(s)),model:e}}function Gr(t,e){let r=Array.isArray(e)?{rules:e}:e,{rules:s,onModelSelected:n}=r;return async(o,a,c)=>{let i=o.model;for(let l of s)try{if(l.match(o,a)){i=l.model;break}}catch{}try{n?.(o.model,i);}catch{}let u=i!==o.model?{...o,model:i}:o;return t(u,a,c)}}function Br(t,e={}){let{maxBatchSize:r=20,maxWaitMs:s=5e3,concurrency:n=5}=e;if(!Number.isFinite(r)||r<1)throw new Error("[Directive] createBatchQueue: maxBatchSize must be a positive finite number (>= 1).");if(!Number.isFinite(s)||s<0)throw new Error("[Directive] createBatchQueue: maxWaitMs must be a non-negative finite number.");if(!Number.isFinite(n)||n<1)throw new Error("[Directive] createBatchQueue: concurrency must be a positive finite number (>= 1).");let o=[],a=null,c=false,i=null;function u(){a===null&&(a=setTimeout(()=>{a=null,d().catch(()=>{});},s));}function l(){a!==null&&(clearTimeout(a),a=null);}async function p(y){let f=0;async function m(){for(;f<y.length;){let h=f++,g=y[h];try{let b=await t(g.agent,g.input,g.options);g.resolve(b);}catch(b){g.reject(b instanceof Error?b:new Error(String(b)));}}}let E=Array.from({length:Math.min(n,y.length)},()=>m());await Promise.all(E);}async function d(){if(i&&await i,o.length===0)return;l();let y=o.splice(0);i=p(y).finally(()=>{i=null,o.length>0&&u();}),await i;}return {submit(y,f,m){return c?Promise.reject(new Error("[Directive] BatchQueue has been destroyed.")):new Promise((E,h)=>{o.push({agent:y,input:f,options:m,resolve:E,reject:h}),o.length>=r?(l(),d().catch(()=>{})):u();})},async flush(){await d();},get pending(){return o.length},async destroy(){c||(c=true,l(),o.length>0&&await d());}}}function qe(){return {callCount:0,errorCount:0,totalCost:0,avgLatencyMs:0,lastErrorAt:null}}function Fr(t,e){return !t||!e?0:t.inputTokens/1e6*e.inputPerMillion+t.outputTokens/1e6*e.outputPerMillion}function Lr(t){let{providers:e,defaultProvider:r,constraints:s=[],onProviderSelected:n,errorCooldownMs:o=3e4,preferCheapest:a=false}=t;if(!Number.isFinite(o)||o<0)throw new Error("[Directive] createConstraintRouter: errorCooldownMs must be a non-negative finite number.");let c=new Map;for(let f of e)c.set(f.name,f);if(!c.has(r))throw new Error(`[Directive] Default provider "${r}" not found in providers list.`);let i={totalCost:0,callCount:0,errorCount:0,lastProvider:null,avgLatencyMs:0,providers:Object.create(null)};for(let f of e)i.providers[f.name]=qe();let u=0,l=[...s].sort((f,m)=>(m.priority??0)-(f.priority??0));function p(){let f=Date.now();for(let E of l)try{if(E.when(i)){let h=c.get(E.provider);if(h)return {provider:h,reason:"constraint"}}}catch{}let m=e.filter(E=>{let h=i.providers[E.name];return h?!(h.lastErrorAt&&f-h.lastErrorAt<o):true});if(a&&m.length>0){let E=[...m].sort((h,g)=>{let b=h.pricing?h.pricing.inputPerMillion+h.pricing.outputPerMillion:Number.POSITIVE_INFINITY,R=g.pricing?g.pricing.inputPerMillion+g.pricing.outputPerMillion:Number.POSITIVE_INFINITY;return b!==R?b-R:h.name===r?-1:g.name===r?1:0});if(E[0]!==c.get(r))return {provider:E[0],reason:"cheapest"}}return m.length>0&&!m.some(E=>E.name===r)?{provider:m[0],reason:"default"}:{provider:c.get(r),reason:"default"}}function d(f,m,E,h,g){let b=i.providers[f]??qe();if(b.callCount++,i.callCount++,g)b.errorCount++,i.errorCount++,b.lastErrorAt=Date.now();else {let A=Fr(E,h);b.totalCost+=A,i.totalCost+=A;}u+=m,i.avgLatencyMs=u/i.callCount;let R=b.callCount>0?(b.avgLatencyMs*(b.callCount-1)+m)/b.callCount:m;b.avgLatencyMs=R,i.providers[f]=b,i.lastProvider=f;}let y=async(f,m,E)=>{let{provider:h,reason:g}=p();try{n?.(h.name,g);}catch{}let b=Date.now();try{let R=await h.runner(f,m,E),A=Date.now()-b;return d(h.name,A,R.tokenUsage,h.pricing),R}catch(R){let A=Date.now()-b,x=R instanceof Error?R:new Error(String(R));throw d(h.name,A,void 0,h.pricing,x),x}};return Object.defineProperty(y,"facts",{get:()=>{let f=Object.create(null);for(let m of Object.keys(i.providers))f[m]={...i.providers[m]};return {...i,providers:f}},enumerable:true}),y}function Ve(t){let{transport:e,timeline:r,healthMonitor:s,getSnapshot:n,getBreakpointState:o,onResumeBreakpoint:a,onCancelBreakpoint:c,getScratchpadState:i,getDerivedState:u,onForkFromSnapshot:l,batchSize:p=1,batchIntervalMs:d=50,healthPushIntervalMs:y=0,authenticate:f}=t,m=t.maxClients??50,E=`devtools_${crypto.randomUUID()}`,h=new Set,g=new Set,b=[],R=null,A=null;function x(w,_){try{w.send(JSON.stringify(_));}catch{h.delete(w);}}function k(w){let _=JSON.stringify(w),P=[...h];for(let F of P)try{F.send(_);}catch{h.delete(F);}}function O(){b.length!==0&&(b.length===1?k({type:"event",event:b[0]}):k({type:"event_batch",events:b}),b=[]);}let v=r.subscribe(w=>{if(h.size!==0){if(p<=1){k({type:"event",event:w});return}b.push(w),b.length>=p&&O();}});p>1&&d>0&&(R=setInterval(O,d)),y>0&&s&&(A=setInterval(()=>{h.size>0&&k({type:"health",metrics:s.getAllMetrics()});},y));function C(w,_){let P;try{P=JSON.parse(_);}catch{x(w,{type:"error",code:"INVALID_JSON",message:"Could not parse message"});return}if(!P||typeof P!="object"||typeof P.type!="string"){x(w,{type:"error",code:"INVALID_MESSAGE",message:"Missing type field"});return}let F=Date.now(),B=T.get(w)??0;if(F-B<D){x(w,{type:"error",code:"RATE_LIMITED",message:"Too many requests"});return}if(T.set(w,F),P.type==="authenticate"){if(!f){x(w,{type:"error",code:"UNKNOWN_COMMAND",message:"Authentication not configured on this server"});return}if(!g.has(w)){x(w,{type:"error",code:"ALREADY_AUTHENTICATED",message:"Already authenticated"});return}if(typeof P.token!="string"){x(w,{type:"error",code:"AUTH_FAILED",message:"Missing token"}),w.close(),g.delete(w);return}let $=f(P.token),U=q=>{q?(g.delete(w),h.add(w),x(w,{type:"welcome",version:1,sessionId:E,timestamp:Date.now()})):(x(w,{type:"error",code:"AUTH_FAILED",message:"Invalid token"}),g.delete(w),w.close());};$ instanceof Promise?$.then(U).catch(()=>{x(w,{type:"error",code:"AUTH_FAILED",message:"Authentication error"}),g.delete(w),w.close();}):U($);return}if(g.has(w)){x(w,{type:"error",code:"AUTH_REQUIRED",message:"Authentication required"});return}switch(P.type){case "ping":x(w,{type:"pong",timestamp:Date.now()});break;case "request_snapshot":n?x(w,{type:"snapshot",data:n()}):x(w,{type:"error",code:"NO_SNAPSHOT",message:"Snapshot provider not configured"});break;case "request_health":s?x(w,{type:"health",metrics:s.getAllMetrics()}):x(w,{type:"error",code:"NO_HEALTH",message:"Health monitor not configured"});break;case "request_events":{let $=r.getEvents(),U=P.since,q=U!=null?$.filter(ce=>ce.id>U):$;x(w,{type:"event_batch",events:q});break}case "request_breakpoints":o?x(w,{type:"breakpoints",state:o()}):x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint provider not configured"});break;case "resume_breakpoint":if(a&&typeof P.breakpointId=="string"){let $=P.modifications?{input:P.modifications.input,skip:P.modifications.skip}:void 0;a(P.breakpointId,$);}else x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint resume not configured"});break;case "cancel_breakpoint":if(c&&typeof P.breakpointId=="string"){let $=typeof P.reason=="string"?P.reason:void 0;c(P.breakpointId,$);}else x(w,{type:"error",code:"NO_BREAKPOINTS",message:"Breakpoint cancel not configured"});break;case "export_session":x(w,{type:"event_batch",events:r.getEvents()});break;case "import_session":{if(typeof P.data!="string")x(w,{type:"error",code:"INVALID_DATA",message:"Missing data field for import"});else if(P.data.length>10485760)x(w,{type:"error",code:"IMPORT_TOO_LARGE",message:`Import data exceeds ${10485760/1024/1024} MB limit`});else try{r.import(P.data),x(w,{type:"event_batch",events:r.getEvents()});}catch(U){let q=U instanceof Error?U.message:String(U);x(w,{type:"error",code:"IMPORT_FAILED",message:q});}break}case "request_scratchpad":i?x(w,{type:"scratchpad_state",data:i()}):x(w,{type:"error",code:"NO_SCRATCHPAD",message:"Scratchpad provider not configured"});break;case "request_derived":u?x(w,{type:"derived_state",data:u()}):x(w,{type:"error",code:"NO_DERIVED",message:"Derived state provider not configured"});break;case "fork_from_snapshot":{if(l&&typeof P.eventId=="number")try{let $=l(P.eventId);x(w,{type:"fork_complete",eventId:P.eventId,newEventCount:$.newEventCount});}catch($){let U=$ instanceof Error?$.message:String($);x(w,{type:"error",code:"FORK_FAILED",message:U});}else x(w,{type:"error",code:"NO_FORK",message:"Fork provider not configured"});break}default:x(w,{type:"error",code:"UNKNOWN_COMMAND",message:`Unknown message type: ${String(P.type).slice(0,100)}`});}}let T=new Map,D=50;return e.onConnection((w,_,P)=>{if(h.size+g.size>=m){try{let F={type:"error",code:"MAX_CLIENTS",message:"Connection limit reached"};w.send(JSON.stringify(F));}catch{}w.close();return}f?g.add(w):(h.add(w),x(w,{type:"welcome",version:1,sessionId:E,timestamp:Date.now()})),_(F=>C(w,F)),P(()=>{h.delete(w),g.delete(w),T.delete(w);});}),{get clientCount(){return h.size},broadcast(w){k(w);},pushHealth(){s&&h.size>0&&k({type:"health",metrics:s.getAllMetrics()});},pushBreakpoints(){o&&h.size>0&&k({type:"breakpoints",state:o()});},pushScratchpadUpdate(w,_){h.size>0&&k({type:"scratchpad_update",key:w,value:_});},pushDerivedUpdate(w,_){h.size>0&&k({type:"derived_update",id:w,value:_});},pushTokenStream(w,_,P){h.size>0&&k({type:"token_stream",agentId:w,tokens:_,tokenCount:P});},pushStreamDone(w,_){h.size>0&&k({type:"stream_done",agentId:w,totalTokens:_});},close(){v(),R&&(clearInterval(R),R=null),A&&(clearInterval(A),A=null),O();for(let w of h)try{w.close();}catch{}for(let w of g)try{w.close();}catch{}h.clear(),g.clear(),T.clear(),e.close();}}}async function Ur(t,e={}){if(!t.timeline)throw new Error("[Directive DevTools] Orchestrator must have debug: true to use DevTools");let r=await Je({port:e.port??4040,host:e.host??"localhost"});return Ve({transport:r,timeline:t.timeline,healthMonitor:t.healthMonitor,healthPushIntervalMs:e.healthPushIntervalMs??5e3,batchSize:e.batchSize,authenticate:e.authenticate,getSnapshot:t.getAllAgentStates?()=>{let s=t.getAllAgentStates();return {timestamp:Date.now(),agents:s,eventCount:t.timeline.getEvents().length}}:void 0,getBreakpointState:t.getPendingBreakpoints?()=>({pending:t.getPendingBreakpoints(),resolved:[],cancelled:[]}):void 0,onResumeBreakpoint:t.resumeBreakpoint,onCancelBreakpoint:t.cancelBreakpoint,getScratchpadState:t.getScratchpadState,getDerivedState:t.getDerivedState,onForkFromSnapshot:t.timeline?.forkFrom?s=>(t.timeline.forkFrom(s),{newEventCount:t.timeline.getEvents().length}):void 0})}async function Je(t={}){let e=t.port??4040,r=t.host??"localhost",{WebSocketServer:s}=await import('ws'),n=new s({port:e,host:r,maxPayload:t.maxPayloadBytes??1048576}),o=null;return n.on("connection",a=>{let c=null,i=null,u={send(l){a.readyState===a.OPEN&&a.send(l);},close(){a.close();}};a.on("message",l=>{c&&c(l.toString());}),a.on("close",()=>{i&&i();}),o?.(u,l=>{c=l;},l=>{i=l;});}),{onConnection(a){o=a;},close(){n.close();}}}function Z(t){return Number.isFinite(t)?t:0}function be(t){let e=Object.keys(t),r=new Map;for(let[d,y]of Object.entries(t))for(let f of y.produces){if(r.has(f))throw new Error(`[Directive Goal] Fact key "${f}" is produced by both "${r.get(f)}" and "${d}". Each fact key must have exactly one producer.`);r.set(f,d);}let s=[],n=new Map,o=new Map;for(let d of e)n.set(d,0),o.set(d,[]);for(let[d,y]of Object.entries(t))for(let f of y.requires??[]){let m=r.get(f);m&&m!==d&&(s.push({from:m,to:d,factKey:f}),o.get(m).push(d),n.set(d,(n.get(d)??0)+1));}let a=[];for(let[d,y]of n)y===0&&a.push(d);let c=[],i=0;for(;i<a.length;){let d=a[i++];c.push(d);for(let y of o.get(d)??[]){let f=(n.get(y)??1)-1;n.set(y,f),f===0&&a.push(y);}}if(c.length!==e.length){let d=new Set(c),y=e.filter(f=>!d.has(f));throw new Error(`[Directive Goal] Circular dependency detected among agents: ${y.join(", ")}. Review their produces/requires declarations.`)}let u=c.filter(d=>(t[d].requires??[]).every(m=>!r.has(m)||r.get(m)===d)),l=new Set;for(let d of s)l.add(d.from);let p=e.filter(d=>!l.has(d));return {order:c,edges:s,roots:u,leaves:p,producers:r}}function zr(t){let e=be(t);return {order:[...e.order],edges:[...e.edges],roots:[...e.roots],leaves:[...e.leaves],producers:new Map(e.producers)}}function Hr(t){let e=[],r=[];Object.keys(t).length===0&&e.push("No agents declared");for(let[n,o]of Object.entries(t))o.produces.length===0&&r.push(`Agent "${n}" has no produces \u2014 it will never contribute`);let s=new Set;for(let n of Object.values(t))for(let o of n.produces)s.add(o);for(let[n,o]of Object.entries(t))for(let a of o.requires??[])s.has(a)||r.push(`Agent "${n}" requires "${a}" which no agent produces \u2014 must be in initial facts`);try{be(t);}catch(n){e.push(n instanceof Error?n.message:String(n));}return {valid:e.length===0,errors:e,warnings:r}}function qr(t,e=[],r=50){let s=be(t),n=new Set;for(let l of Object.values(t))for(let p of l.produces)n.add(p);let o=[];for(let l of Object.values(t))for(let p of l.requires??[])n.has(p)||o.push(p);let a=new Set(e),c=new Set,i=[];for(let l=1;l<=r;l++){let p=s.order.filter(y=>c.has(y)?false:(t[y].requires??[]).every(E=>a.has(E)));if(p.length===0)break;let d=[];for(let y of p){c.add(y);for(let f of t[y].produces)a.has(f)||(d.push(f),a.add(f));}i.push({step:l,agents:p,availableFacts:[...a],producedFacts:d});}let u=Object.keys(t).filter(l=>!c.has(l));return {steps:i,unreachableAgents:u,externalDeps:[...new Set(o)],feasible:u.length===0}}function Vr(t){let e=t.stepMetrics.map(u=>{let l=Z(u.satisfaction),p=Z(u.satisfactionDelta),d=u.nodesRun.join(", "),y=u.factsProduced.length>0?u.factsProduced.join(", "):"none",f=+Z(l-p).toFixed(3),m=p>=0?`+${p.toFixed(3)}`:p.toFixed(3),E=`Step ${u.step}: Ran ${d}. Produced: ${y}. Satisfaction: ${f} \u2192 ${l.toFixed(3)} (${m}). ${u.tokensConsumed} tokens, ${u.durationMs}ms.`;return {step:u.step,agents:u.nodesRun,factsProduced:u.factsProduced,satisfaction:l,satisfactionDelta:p,durationMs:u.durationMs,tokensConsumed:u.tokensConsumed,description:E}}),r=t.relaxations.map(u=>{let l;switch(u.strategy){case "allow_rerun":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 re-enabled completed nodes for another run.`;break;case "inject_facts":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 injected fact values to unblock dependencies.`;break;case "accept_partial":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 accepted current facts as partial result.`;break;case "alternative_nodes":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 added alternative nodes to the graph.`;break;case "custom":l=`Step ${u.step}: Applied relaxation "${u.label}" \u2014 ran custom recovery logic.`;break;default:l=`Step ${u.step}: Applied relaxation "${u.label}" (${u.strategy}).`;}return {step:u.step,label:u.label,strategy:u.strategy,description:l}}),s=t.stepMetrics.length>0?Z(t.stepMetrics[0].satisfaction-t.stepMetrics[0].satisfactionDelta).toFixed(3):"0",n=t.stepMetrics.length>0?Z(t.stepMetrics[t.stepMetrics.length-1].satisfaction).toFixed(3):"0",o=t.achieved?"Goal achieved":"Goal not achieved",a=t.relaxations.length>0?` ${t.relaxations.length} relaxation(s) applied.`:"",c=t.error?` Error: ${t.error}`:"",i=`${o} in ${t.steps} step(s) (${t.totalTokens.toLocaleString()} tokens, ${t.durationMs}ms). Satisfaction: ${s} \u2192 ${n}.`+a+c;return {achieved:t.achieved,summary:i,steps:e,relaxations:r,totalTokens:t.totalTokens,durationMs:t.durationMs}}function Jr(t,e=false){let r=false,s=[],n=[],o=e?(a,...c)=>console.debug(`[MCP Stub] ${a}`,...c):()=>{};return {async connect(){o(`Connecting to ${t.name} (${t.transport})`),r=true;},async disconnect(){r=false;},isConnected(){return r},getCapabilities(){return {tools:true,resources:true,prompts:true}},async listTools(){return s},async callTool(a,c){return o(`Calling tool ${a}`,c),{content:[{type:"text",text:`Stub result for ${a}`}]}},async listResources(){return n},async readResource(a){return o(`Reading resource ${a}`),{contents:[{uri:a,text:`Stub content for ${a}`}]}},async listPrompts(){return []},async getPrompt(a){return {messages:[{role:"user",content:{type:"text",text:`Stub prompt ${a}`}}]}}}}function Kr(t,e,r){let s=Date.now(),n=t.get(e);return !n||s>n.resetTime?(t.set(e,{count:1,resetTime:s+6e4}),true):n.count>=r?false:(n.count++,true)}function Wr(t){let{servers:e,toolConstraints:r={},resourceMappings:s=[],events:n={},autoConnect:o=false,autoReconnect:a=true,debug:c=false,allowDirectCalls:i=false}=t;!t.clientFactory&&(typeof process<"u"&&process.env?.NODE_ENV==="production"?console.warn(`[Directive MCP] WARNING: Using stub MCP client in production!
|
|
106
47
|
The stub client returns mock data and does not connect to real MCP servers.
|
|
107
48
|
Provide a real 'clientFactory' option to connect to actual MCP servers:
|
|
108
49
|
|
|
@@ -111,13 +52,13 @@ Provide a real 'clientFactory' option to connect to actual MCP servers:
|
|
|
111
52
|
const adapter = createMCPAdapter({
|
|
112
53
|
servers: [...],
|
|
113
54
|
clientFactory: (config) => new Client(config),
|
|
114
|
-
});`):c&&console.debug("[Directive MCP] Using stub client for development. Provide 'clientFactory' for production use."));let d=t.clientFactory??(x=>Ti(x,c)),f=t.approvalTimeoutMs??3e5,m={servers:new Map,toolConstraints:new Map(Object.entries(n)),rateLimiters:new Map,pendingApprovals:new Map,approvedRequests:new Set,rejectedRequests:new Set},k=0,w=new Map,y=new Map;function T(x){return new Promise((G,J)=>{if(m.approvedRequests.has(x)){m.approvedRequests.delete(x),m.pendingApprovals.delete(x),r.onApprovalResolved?.(x,true),G();return}if(m.rejectedRequests.has(x)){m.rejectedRequests.delete(x),m.pendingApprovals.delete(x);let B=y.get(x);y.delete(x),r.onApprovalResolved?.(x,false),J(new Error(`[Directive MCP] Tool call request ${x} was rejected${B?`: ${B}`:""}`));return}let se=setTimeout(()=>{w.delete(x),m.pendingApprovals.delete(x),J(new Error(`[Directive MCP] Approval timeout: Request ${x} was not approved or rejected within ${f}ms. Call adapter.approve("${x}") or adapter.reject("${x}") to resolve.`));},f);w.set(x,{resolve:G,reject:J,timeoutId:se});})}function R(x,G,J){let se=w.get(x);se?(clearTimeout(se.timeoutId),w.delete(x),m.pendingApprovals.delete(x),r.onApprovalResolved?.(x,G),G?se.resolve():se.reject(new Error(`[Directive MCP] Tool call request ${x} was rejected${J?`: ${J}`:""}`))):(G?m.approvedRequests.add(x):(m.rejectedRequests.add(x),J&&y.set(x,J)),setTimeout(()=>{m.approvedRequests.delete(x),m.rejectedRequests.delete(x),y.delete(x),m.pendingApprovals.delete(x);},f));}let v=new Map;for(let x of e)m.servers.set(x.name,{config:x,client:null,tools:[],resources:[],status:"disconnected"}),v.set(x.name,{timer:null,attempts:0,maxAttempts:x.retry?.maxAttempts??10,baseDelay:x.retry?.backoffMs??5e3});function C(x){let G=/[;|&$`><]/;if(x.command&&G.test(x.command))throw new Error(`[Directive MCP] Stdio command for server '${x.name}' contains shell metacharacters: '${x.command}'. This may indicate a command injection vulnerability. Use 'args' for command arguments instead.`);if(x.args){for(let J of x.args)if(G.test(J))throw new Error(`[Directive MCP] Stdio argument for server '${x.name}' contains shell metacharacters: '${J}'. This may indicate a command injection vulnerability.`)}}async function P(x){let G=m.servers.get(x);if(!G)throw new Error(`Unknown MCP server: ${x}`);if(G.status!=="connected"){G.config.transport==="stdio"&&C(G.config),G.status="connecting";try{let J=d(G.config);await J.connect(),G.client=J,G.status="connected";let se=v.get(x);se&&(se.attempts=0,se.timer&&(clearTimeout(se.timer),se.timer=null)),J.getCapabilities().tools&&(G.tools=await J.listTools()),J.getCapabilities().resources&&(G.resources=await J.listResources()),G.lastSync=Date.now(),r.onConnect?.(x);}catch(J){if(G.status="error",G.error=J instanceof Error?J:new Error(String(J)),r.onError?.(x,G.error),s){let se=v.get(x);if(se&&se.attempts<se.maxAttempts){se.attempts++;let B=Math.min(se.baseDelay*2**(se.attempts-1)+Math.random()*1e3,6e4);se.timer=setTimeout(()=>{se.timer=null,P(x).catch(()=>{});},B);}else se&&console.error(`[Directive MCP] Max reconnect attempts (${se.maxAttempts}) reached for server '${x}'. Call adapter.connectServer("${x}") to retry manually.`);}throw G.error}}}async function H(x){let G=v.get(x);G?.timer&&(clearTimeout(G.timer),G.timer=null,G.attempts=0);let J=m.servers.get(x);if(!(!J||!J.client))try{await J.client.disconnect();}finally{J.status="disconnected",J.client=null,r.onDisconnect?.(x);}}async function _(x,G,J,se){let B=m.servers.get(x);if(!B)throw new Error(`[Directive MCP] Unknown server '${x}'. Available servers: ${Array.from(m.servers.keys()).join(", ")||"(none)"}`);if(!B.client)throw new Error(`[Directive MCP] Server '${x}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${x}")' first.`);let ie=`${x}.${G}`,ae=m.toolConstraints.get(ie);if(ae){if(ae.rateLimit){let pe=m.rateLimiters.get(ie);if(!Ei(m.rateLimiters,ie,ae.rateLimit)){let Ae=pe?.resetTime?new Date(pe.resetTime).toISOString():"unknown";throw new Error(`[Directive MCP] Rate limit exceeded for '${ie}': ${pe?.count??0}/${ae.rateLimit} requests per minute. Resets at ${Ae}.`)}}if(ae.maxArgSize){let pe=JSON.stringify(J).length;if(pe>ae.maxArgSize)throw new Error(`Arguments exceed max size (${pe} > ${ae.maxArgSize})`)}if(ae.when&&!await ae.when(se,J))throw new Error(`Constraint not satisfied for ${ie}`);if(ae.requireApproval){let pe=`approval-${++k}-${Date.now()}`,Ae={id:pe,server:x,tool:G,args:J,requestedAt:Date.now()};m.pendingApprovals.set(pe,Ae),r.onApprovalRequest?.(Ae),await T(pe);}}r.onToolCall?.(x,G,J);let I=await Promise.race([B.client.callTool(G,J),new Promise((pe,Ae)=>setTimeout(()=>Ae(new Error(`Tool call timeout: ${ie}`)),ae?.timeout??3e4))]);return r.onToolResult?.(x,G,I),I}let q={name:"mcp-adapter",onInit:async()=>{a&&await Promise.all(Array.from(m.servers.keys()).map(x=>P(x).catch(G=>console.error(`Failed to connect to ${x}:`,G))));},onDestroy:async()=>{for(let x of v.values())x.timer&&(clearTimeout(x.timer),x.timer=null);for(let[,x]of w)clearTimeout(x.timeoutId),x.reject(new Error("[Directive MCP] Adapter destroyed while awaiting approval"));w.clear(),await Promise.all(Array.from(m.servers.keys()).map(x=>H(x).catch(G=>console.error(`Failed to disconnect from ${x}:`,G))));}};async function ye(x){for(let G of o)for(let[J,se]of m.servers)if(se.client){for(let B of se.resources)if(typeof G.pattern=="string"?Ci(B.uri,G.pattern):G.pattern.test(B.uri))try{let ae=await se.client.readResource(B.uri),I=ae.contents[0]?.text??"",pe=G.transform?G.transform(I):I;x[G.factKey]=pe,r.onResourceUpdate?.(J,B.uri,ae);}catch(ae){console.error(`Failed to sync resource ${B.uri}:`,ae);}}}return {plugin:q,async connect(){await Promise.all(Array.from(m.servers.keys()).map(P));},connectServer:P,async disconnect(){await Promise.all(Array.from(m.servers.keys()).map(H));},disconnectServer:H,getTools(){let x=new Map;for(let[G,J]of m.servers)x.set(G,J.tools);return x},getResources(){let x=new Map;for(let[G,J]of m.servers)x.set(G,J.resources);return x},async callTool(x,G,J,se){return _(x,G,J,se)},async callToolDirect(x,G,J){if(!u)throw new Error("[Directive] callToolDirect is disabled by default. Pass { allowDirectCalls: true } to enable unconstrained tool calls.");process.env.NODE_ENV!=="production"&&console.warn("[Directive] callToolDirect bypasses all constraints (rate limits, approvals, timeouts).");let se=m.servers.get(x);if(!se)throw new Error(`[Directive MCP] Unknown server '${x}'. Available servers: ${Array.from(m.servers.keys()).join(", ")||"(none)"}`);if(!se.client)throw new Error(`[Directive MCP] Server '${x}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${x}")' first.`);r.onToolCall?.(x,G,J);let B=await se.client.callTool(G,J);return r.onToolResult?.(x,G,B),B},async readResource(x,G){let J=m.servers.get(x);if(!J)throw new Error(`[Directive MCP] Unknown server '${x}'. Available servers: ${Array.from(m.servers.keys()).join(", ")||"(none)"}`);if(!J.client)throw new Error(`[Directive MCP] Server '${x}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${x}")' first.`);let se=await J.client.readResource(G);return r.onResourceUpdate?.(x,G,se),se},syncResources:ye,getServerStatus(x){return m.servers.get(x)},getAllServerStatuses(){return new Map(m.servers)},approve(x){if(!m.pendingApprovals.get(x)&&!w.has(x))throw new Error(`[Directive MCP] No pending approval request with ID '${x}'. Pending requests: ${Array.from(m.pendingApprovals.keys()).join(", ")||"(none)"}`);R(x,true);},reject(x,G){if(!m.pendingApprovals.get(x)&&!w.has(x))throw new Error(`[Directive MCP] No pending approval request with ID '${x}'. Pending requests: ${Array.from(m.pendingApprovals.keys()).join(", ")||"(none)"}`);R(x,false,G);},getPendingApprovals(){return Array.from(m.pendingApprovals.values())},getRejectionReason(x){return y.get(x)}}}var Mn=new Map,xi=200;function Ci(t,e){let n=Mn.get(e);if(!n){let o=e.replace(/\*\*/g,"\0GLOBSTAR\0").replace(/\*/g,"\0STAR\0").replace(/\?/g,"\0QUESTION\0").replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\0GLOBSTAR\0/g,".*").replace(/\0STAR\0/g,"[^/]*").replace(/\0QUESTION\0/g,".");if(n=new RegExp(`^${o}$`),Mn.size>=xi){let r=Mn.keys().next().value;r!==void 0&&Mn.delete(r);}Mn.set(e,n);}return n.test(t)}function Mi(t){let e=[];for(let[n,o]of t)for(let r of o)e.push({type:"function",function:{name:`${n}.${r.name}`,description:r.description??`Tool: ${r.name}`,parameters:r.inputSchema}});return e}function Di(t,e,n){return {type:"MCP_CALL_TOOL",server:t,tool:e,args:n}}function Pi(t,e){return {type:"MCP_READ_RESOURCE",server:t,uri:e}}function Ii(t,e,n){return {type:"MCP_GET_PROMPT",server:t,prompt:e,args:n}}function Oi(t,e){return {type:"MCP_SYNC_RESOURCES",server:t,pattern:e}}var yr=class{constructor(e){this.max=e;if(e<1)throw new Error(`[Directive Evals] concurrency must be >= 1, got ${e}`)}queue=[];active=0;async acquire(e){if(this.active<this.max){this.active++;return}return new Promise((n,o)=>{let r={resolve:n,reject:o};this.queue.push(r),e&&e.addEventListener("abort",()=>{let a=this.queue.indexOf(r);a!==-1&&(this.queue.splice(a,1),o(new Error("Semaphore acquire aborted")));},{once:true});})}release(){if(this.active<=0)return;this.active--;let e=this.queue.shift();e&&(this.active++,e.resolve());}};function _i(t,e){return typeof e=="function"?{name:t,fn:e,threshold:.5,weight:1}:{...e,name:t,threshold:e.threshold??.5,weight:e.weight??1}}function Ni(t,e){let n=0,o=0;for(let[r,a]of Object.entries(t)){let c=e[r]?.weight??1,u=Number.isFinite(a.score)?a.score:0;n+=u*c,o+=c;}return o===0?0:n/o}function $i(t,e){let n=0,o=0;for(let[r,a]of Object.entries(t)){let c=e[r]?.weight??1,u=Number.isFinite(a)?a:0;n+=u*c,o+=c;}return o===0?0:n/o}var io={pii:[/\b\d{3}-\d{2}-\d{4}\b/,/\b(?:4\d{3}|5[1-5]\d{2}|6011)\d{12}\b/,/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/],violence:[/\b(kill|murder|attack|bomb|weapon|shoot|stab)\b/i],self_harm:[/\b(suicide|self[- ]harm|cut myself)\b/i],illegal:[/\b(hack into|break into|steal|counterfeit)\b/i]};function ji(t){return {name:"cost",fn:e=>{let n=Date.now(),o=e.result.totalTokens,r=o/t.maxTokensPerRun,a;return r<=.5?a=1:r>=2?a=0:a=1-(r-.5)/1.5,{score:a,passed:o<=t.maxTokensPerRun,reason:`${o} tokens (budget: ${t.maxTokensPerRun})`,durationMs:Date.now()-n}},threshold:.5,weight:1}}function Gi(t){return {name:"latency",fn:e=>{let n=Date.now(),o=e.runDurationMs,r=o/t.maxMs,a;return r<=.5?a=1:r>=2?a=0:a=1-(r-.5)/1.5,{score:a,passed:o<=t.maxMs,reason:`${Math.round(o)}ms (max: ${t.maxMs}ms)`,durationMs:Date.now()-n}},threshold:.5,weight:1}}function Bi(t){if(t.minLength!==void 0&&t.maxLength!==void 0&&t.minLength>t.maxLength)throw new Error("[Directive Evals] evalOutputLength: minLength must be <= maxLength");return {name:"outputLength",fn:e=>{let n=Date.now(),r=String(e.result.output).length,a=t.minLength??0,s=t.maxLength??Number.POSITIVE_INFINITY,c=r>=a&&r<=s,u;return c?u=1:r<a?u=a>0?Math.max(0,r/a):0:u=s>0&&s!==Number.POSITIVE_INFINITY?Math.max(0,1-(r-s)/s):0,{score:u,passed:c,reason:`${r} chars (range: ${a}-${s===Number.POSITIVE_INFINITY?"\u221E":s})`,durationMs:Date.now()-n}},threshold:.5,weight:1}}function Li(t={}){let e;if(t.blockedPatterns)e=t.blockedPatterns;else if(t.categories&&t.categories.length>0){e=[];for(let n of t.categories){let o=io[n];o&&e.push(...o);}}else {e=[];for(let n of Object.values(io))e.push(...n);}return {name:"safety",fn:n=>{let o=Date.now(),r=String(n.result.output),a=[];for(let c of e)c.test(r)&&a.push(c.source);return {score:a.length===0?1:0,passed:a.length===0,reason:a.length===0?"No unsafe patterns detected":`Matched patterns: ${a.join(", ")}`,durationMs:Date.now()-o}},threshold:1,weight:2}}function Fi(t){return {name:"structure",fn:e=>{let n=Date.now(),o=e.result.output;if(t.type==="json")try{let a=typeof o=="string"?JSON.parse(o):o;if(!a||typeof a!="object"||Array.isArray(a))return {score:0,passed:!1,reason:"Output is not a valid JSON object",durationMs:Date.now()-n};if(t.requiredKeys&&a&&typeof a=="object"){let s=t.requiredKeys.filter(c=>!Object.hasOwn(a,c));if(s.length>0)return {score:1-s.length/t.requiredKeys.length,passed:!1,reason:`Missing keys: ${s.join(", ")}`,durationMs:Date.now()-n}}return {score:1,passed:!0,reason:"Valid JSON with all required keys",durationMs:Date.now()-n}}catch{return {score:0,passed:false,reason:"Output is not valid JSON",durationMs:Date.now()-n}}let r=String(o);return {score:r.length>0?1:0,passed:r.length>0,reason:r.length>0?"Non-empty output":"Empty output",durationMs:Date.now()-n}},threshold:.5,weight:1}}function qi(t){let e=t.promptTemplate??`You are evaluating an AI agent's output. Score it from 0.0 to 1.0.
|
|
55
|
+
});`):c&&console.debug("[Directive MCP] Using stub client for development. Provide 'clientFactory' for production use."));let l=t.clientFactory??(v=>Jr(v,c)),p=t.approvalTimeoutMs??3e5,d={servers:new Map,toolConstraints:new Map(Object.entries(r)),rateLimiters:new Map,pendingApprovals:new Map,approvedRequests:new Set,rejectedRequests:new Set},y=0,f=new Map,m=new Map;function E(v){return new Promise((C,T)=>{if(d.approvedRequests.has(v)){d.approvedRequests.delete(v),d.pendingApprovals.delete(v),n.onApprovalResolved?.(v,true),C();return}if(d.rejectedRequests.has(v)){d.rejectedRequests.delete(v),d.pendingApprovals.delete(v);let w=m.get(v);m.delete(v),n.onApprovalResolved?.(v,false),T(new Error(`[Directive MCP] Tool call request ${v} was rejected${w?`: ${w}`:""}`));return}let D=setTimeout(()=>{f.delete(v),d.pendingApprovals.delete(v),T(new Error(`[Directive MCP] Approval timeout: Request ${v} was not approved or rejected within ${p}ms. Call adapter.approve("${v}") or adapter.reject("${v}") to resolve.`));},p);f.set(v,{resolve:C,reject:T,timeoutId:D});})}function h(v,C,T){let D=f.get(v);D?(clearTimeout(D.timeoutId),f.delete(v),d.pendingApprovals.delete(v),n.onApprovalResolved?.(v,C),C?D.resolve():D.reject(new Error(`[Directive MCP] Tool call request ${v} was rejected${T?`: ${T}`:""}`))):(C?d.approvedRequests.add(v):(d.rejectedRequests.add(v),T&&m.set(v,T)),setTimeout(()=>{d.approvedRequests.delete(v),d.rejectedRequests.delete(v),m.delete(v),d.pendingApprovals.delete(v);},p));}let g=new Map;for(let v of e)d.servers.set(v.name,{config:v,client:null,tools:[],resources:[],status:"disconnected"}),g.set(v.name,{timer:null,attempts:0,maxAttempts:v.retry?.maxAttempts??10,baseDelay:v.retry?.backoffMs??5e3});function b(v){let C=/[;|&$`><]/;if(v.command&&C.test(v.command))throw new Error(`[Directive MCP] Stdio command for server '${v.name}' contains shell metacharacters: '${v.command}'. This may indicate a command injection vulnerability. Use 'args' for command arguments instead.`);if(v.args){for(let T of v.args)if(C.test(T))throw new Error(`[Directive MCP] Stdio argument for server '${v.name}' contains shell metacharacters: '${T}'. This may indicate a command injection vulnerability.`)}}async function R(v){let C=d.servers.get(v);if(!C)throw new Error(`Unknown MCP server: ${v}`);if(C.status!=="connected"){C.config.transport==="stdio"&&b(C.config),C.status="connecting";try{let T=l(C.config);await T.connect(),C.client=T,C.status="connected";let D=g.get(v);D&&(D.attempts=0,D.timer&&(clearTimeout(D.timer),D.timer=null)),T.getCapabilities().tools&&(C.tools=await T.listTools()),T.getCapabilities().resources&&(C.resources=await T.listResources()),C.lastSync=Date.now(),n.onConnect?.(v);}catch(T){if(C.status="error",C.error=T instanceof Error?T:new Error(String(T)),n.onError?.(v,C.error),a){let D=g.get(v);if(D&&D.attempts<D.maxAttempts){D.attempts++;let w=Math.min(D.baseDelay*2**(D.attempts-1)+Math.random()*1e3,6e4);D.timer=setTimeout(()=>{D.timer=null,R(v).catch(()=>{});},w);}else D&&console.error(`[Directive MCP] Max reconnect attempts (${D.maxAttempts}) reached for server '${v}'. Call adapter.connectServer("${v}") to retry manually.`);}throw C.error}}}async function A(v){let C=g.get(v);C?.timer&&(clearTimeout(C.timer),C.timer=null,C.attempts=0);let T=d.servers.get(v);if(!(!T||!T.client))try{await T.client.disconnect();}finally{T.status="disconnected",T.client=null,n.onDisconnect?.(v);}}async function x(v,C,T,D){let w=d.servers.get(v);if(!w)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!w.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);let _=`${v}.${C}`,P=d.toolConstraints.get(_);if(P){if(P.rateLimit){let B=d.rateLimiters.get(_);if(!Kr(d.rateLimiters,_,P.rateLimit)){let $=B?.resetTime?new Date(B.resetTime).toISOString():"unknown";throw new Error(`[Directive MCP] Rate limit exceeded for '${_}': ${B?.count??0}/${P.rateLimit} requests per minute. Resets at ${$}.`)}}if(P.maxArgSize){let B=JSON.stringify(T).length;if(B>P.maxArgSize)throw new Error(`Arguments exceed max size (${B} > ${P.maxArgSize})`)}if(P.when&&!await P.when(D,T))throw new Error(`Constraint not satisfied for ${_}`);if(P.requireApproval){let B=`approval-${++y}-${Date.now()}`,$={id:B,server:v,tool:C,args:T,requestedAt:Date.now()};d.pendingApprovals.set(B,$),n.onApprovalRequest?.($),await E(B);}}n.onToolCall?.(v,C,T);let F=await Promise.race([w.client.callTool(C,T),new Promise((B,$)=>setTimeout(()=>$(new Error(`Tool call timeout: ${_}`)),P?.timeout??3e4))]);return n.onToolResult?.(v,C,F),F}let k={name:"mcp-adapter",onInit:async()=>{o&&await Promise.all(Array.from(d.servers.keys()).map(v=>R(v).catch(C=>console.error(`Failed to connect to ${v}:`,C))));},onDestroy:async()=>{for(let v of g.values())v.timer&&(clearTimeout(v.timer),v.timer=null);for(let[,v]of f)clearTimeout(v.timeoutId),v.reject(new Error("[Directive MCP] Adapter destroyed while awaiting approval"));f.clear(),await Promise.all(Array.from(d.servers.keys()).map(v=>A(v).catch(C=>console.error(`Failed to disconnect from ${v}:`,C))));}};async function O(v){for(let C of s)for(let[T,D]of d.servers)if(D.client){for(let w of D.resources)if(typeof C.pattern=="string"?Xr(w.uri,C.pattern):C.pattern.test(w.uri))try{let P=await D.client.readResource(w.uri),F=P.contents[0]?.text??"",B=C.transform?C.transform(F):F;v[C.factKey]=B,n.onResourceUpdate?.(T,w.uri,P);}catch(P){console.error(`Failed to sync resource ${w.uri}:`,P);}}}return {plugin:k,async connect(){await Promise.all(Array.from(d.servers.keys()).map(R));},connectServer:R,async disconnect(){await Promise.all(Array.from(d.servers.keys()).map(A));},disconnectServer:A,getTools(){let v=new Map;for(let[C,T]of d.servers)v.set(C,T.tools);return v},getResources(){let v=new Map;for(let[C,T]of d.servers)v.set(C,T.resources);return v},async callTool(v,C,T,D){return x(v,C,T,D)},async callToolDirect(v,C,T){if(!i)throw new Error("[Directive] callToolDirect is disabled by default. Pass { allowDirectCalls: true } to enable unconstrained tool calls.");process.env.NODE_ENV!=="production"&&console.warn("[Directive] callToolDirect bypasses all constraints (rate limits, approvals, timeouts).");let D=d.servers.get(v);if(!D)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!D.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);n.onToolCall?.(v,C,T);let w=await D.client.callTool(C,T);return n.onToolResult?.(v,C,w),w},async readResource(v,C){let T=d.servers.get(v);if(!T)throw new Error(`[Directive MCP] Unknown server '${v}'. Available servers: ${Array.from(d.servers.keys()).join(", ")||"(none)"}`);if(!T.client)throw new Error(`[Directive MCP] Server '${v}' is not connected. Call 'adapter.connect()' or 'adapter.connectServer("${v}")' first.`);let D=await T.client.readResource(C);return n.onResourceUpdate?.(v,C,D),D},syncResources:O,getServerStatus(v){return d.servers.get(v)},getAllServerStatuses(){return new Map(d.servers)},approve(v){if(!d.pendingApprovals.get(v)&&!f.has(v))throw new Error(`[Directive MCP] No pending approval request with ID '${v}'. Pending requests: ${Array.from(d.pendingApprovals.keys()).join(", ")||"(none)"}`);h(v,true);},reject(v,C){if(!d.pendingApprovals.get(v)&&!f.has(v))throw new Error(`[Directive MCP] No pending approval request with ID '${v}'. Pending requests: ${Array.from(d.pendingApprovals.keys()).join(", ")||"(none)"}`);h(v,false,C);},getPendingApprovals(){return Array.from(d.pendingApprovals.values())},getRejectionReason(v){return m.get(v)}}}var ee=new Map,Qr=200;function Xr(t,e){let r=ee.get(e);if(!r){let s=e.replace(/\*\*/g,"\0GLOBSTAR\0").replace(/\*/g,"\0STAR\0").replace(/\?/g,"\0QUESTION\0").replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\0GLOBSTAR\0/g,".*").replace(/\0STAR\0/g,"[^/]*").replace(/\0QUESTION\0/g,".");if(r=new RegExp(`^${s}$`),ee.size>=Qr){let n=ee.keys().next().value;n!==void 0&&ee.delete(n);}ee.set(e,r);}return r.test(t)}function Yr(t){let e=[];for(let[r,s]of t)for(let n of s)e.push({type:"function",function:{name:`${r}.${n.name}`,description:n.description??`Tool: ${n.name}`,parameters:n.inputSchema}});return e}function Zr(t,e,r){return {type:"MCP_CALL_TOOL",server:t,tool:e,args:r}}function es(t,e){return {type:"MCP_READ_RESOURCE",server:t,uri:e}}function ts(t,e,r){return {type:"MCP_GET_PROMPT",server:t,prompt:e,args:r}}function ns(t,e){return {type:"MCP_SYNC_RESOURCES",server:t,pattern:e}}var Se=class{constructor(e){this.max=e;if(e<1)throw new Error(`[Directive Evals] concurrency must be >= 1, got ${e}`)}queue=[];active=0;async acquire(e){if(this.active<this.max){this.active++;return}return new Promise((r,s)=>{let n={resolve:r,reject:s};this.queue.push(n),e&&e.addEventListener("abort",()=>{let o=this.queue.indexOf(n);o!==-1&&(this.queue.splice(o,1),s(new Error("Semaphore acquire aborted")));},{once:true});})}release(){if(this.active<=0)return;this.active--;let e=this.queue.shift();e&&(this.active++,e.resolve());}};function rs(t,e){return typeof e=="function"?{name:t,fn:e,threshold:.5,weight:1}:{...e,name:t,threshold:e.threshold??.5,weight:e.weight??1}}function ss(t,e){let r=0,s=0;for(let[n,o]of Object.entries(t)){let c=e[n]?.weight??1,i=Number.isFinite(o.score)?o.score:0;r+=i*c,s+=c;}return s===0?0:r/s}function os(t,e){let r=0,s=0;for(let[n,o]of Object.entries(t)){let c=e[n]?.weight??1,i=Number.isFinite(o)?o:0;r+=i*c,s+=c;}return s===0?0:r/s}var Ke={pii:[/\b\d{3}-\d{2}-\d{4}\b/,/\b(?:4\d{3}|5[1-5]\d{2}|6011)\d{12}\b/,/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/],violence:[/\b(kill|murder|attack|bomb|weapon|shoot|stab)\b/i],self_harm:[/\b(suicide|self[- ]harm|cut myself)\b/i],illegal:[/\b(hack into|break into|steal|counterfeit)\b/i]};function as(t){return {name:"cost",fn:e=>{let r=Date.now(),s=e.result.totalTokens,n=s/t.maxTokensPerRun,o;return n<=.5?o=1:n>=2?o=0:o=1-(n-.5)/1.5,{score:o,passed:s<=t.maxTokensPerRun,reason:`${s} tokens (budget: ${t.maxTokensPerRun})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function is(t){return {name:"latency",fn:e=>{let r=Date.now(),s=e.runDurationMs,n=s/t.maxMs,o;return n<=.5?o=1:n>=2?o=0:o=1-(n-.5)/1.5,{score:o,passed:s<=t.maxMs,reason:`${Math.round(s)}ms (max: ${t.maxMs}ms)`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function cs(t){if(t.minLength!==void 0&&t.maxLength!==void 0&&t.minLength>t.maxLength)throw new Error("[Directive Evals] evalOutputLength: minLength must be <= maxLength");return {name:"outputLength",fn:e=>{let r=Date.now(),n=String(e.result.output).length,o=t.minLength??0,a=t.maxLength??Number.POSITIVE_INFINITY,c=n>=o&&n<=a,i;return c?i=1:n<o?i=o>0?Math.max(0,n/o):0:i=a>0&&a!==Number.POSITIVE_INFINITY?Math.max(0,1-(n-a)/a):0,{score:i,passed:c,reason:`${n} chars (range: ${o}-${a===Number.POSITIVE_INFINITY?"\u221E":a})`,durationMs:Date.now()-r}},threshold:.5,weight:1}}function us(t={}){let e;if(t.blockedPatterns)e=t.blockedPatterns;else if(t.categories&&t.categories.length>0){e=[];for(let r of t.categories){let s=Ke[r];s&&e.push(...s);}}else {e=[];for(let r of Object.values(Ke))e.push(...r);}return {name:"safety",fn:r=>{let s=Date.now(),n=String(r.result.output),o=[];for(let c of e)c.test(n)&&o.push(c.source);return {score:o.length===0?1:0,passed:o.length===0,reason:o.length===0?"No unsafe patterns detected":`Matched patterns: ${o.join(", ")}`,durationMs:Date.now()-s}},threshold:1,weight:2}}function ls(t){return {name:"structure",fn:e=>{let r=Date.now(),s=e.result.output;if(t.type==="json")try{let o=typeof s=="string"?JSON.parse(s):s;if(!o||typeof o!="object"||Array.isArray(o))return {score:0,passed:!1,reason:"Output is not a valid JSON object",durationMs:Date.now()-r};if(t.requiredKeys&&o&&typeof o=="object"){let a=t.requiredKeys.filter(c=>!Object.hasOwn(o,c));if(a.length>0)return {score:1-a.length/t.requiredKeys.length,passed:!1,reason:`Missing keys: ${a.join(", ")}`,durationMs:Date.now()-r}}return {score:1,passed:!0,reason:"Valid JSON with all required keys",durationMs:Date.now()-r}}catch{return {score:0,passed:false,reason:"Output is not valid JSON",durationMs:Date.now()-r}}let n=String(s);return {score:n.length>0?1:0,passed:n.length>0,reason:n.length>0?"Non-empty output":"Empty output",durationMs:Date.now()-r}},threshold:.5,weight:1}}function ds(t){let e=t.promptTemplate??`You are evaluating an AI agent's output. Score it from 0.0 to 1.0.
|
|
115
56
|
|
|
116
57
|
Input: {{input}}
|
|
117
58
|
Expected: {{expected}}
|
|
118
59
|
Actual Output: {{output}}
|
|
119
60
|
|
|
120
|
-
Respond with ONLY a JSON object: {"score": <number>, "reason": "<brief explanation>"}`;return {name:"judge",fn:async
|
|
61
|
+
Respond with ONLY a JSON object: {"score": <number>, "reason": "<brief explanation>"}`;return {name:"judge",fn:async r=>{let s=Date.now(),n=e.replaceAll("{{input}}",r.testCase.input).replaceAll("{{expected}}",r.testCase.expected??"N/A").replaceAll("{{output}}",String(r.result.output)),o=t.timeoutMs??3e4,a=new AbortController,c=setTimeout(()=>a.abort(),o),i=t.signal?AbortSignal.any([t.signal,a.signal]):a.signal;try{let l=(await t.runner(t.judge,n,{signal:i})).output;if(typeof l!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-s};let p=JSON.parse(l),d=Math.max(0,Math.min(1,p.score));return {score:d,passed:d>=.5,reason:p.reason??`Judge score: ${d}`,durationMs:Date.now()-s}}catch(u){return {score:0,passed:false,reason:`Judge error: ${u instanceof Error?u.message:String(u)}`,durationMs:Date.now()-s}}finally{clearTimeout(c);}},threshold:.5,weight:1.5}}function ps(t={}){let e=t.mode??"contains",r=t.caseInsensitive??true;return {name:"match",fn:s=>{let n=Date.now(),o=s.testCase.expected;if(!o)return {score:1,passed:true,reason:"No expected output to match",durationMs:Date.now()-n};let a=String(s.result.output),c=r?a.toLowerCase():a,i=r?o.toLowerCase():o,u=false;if(e==="exact")u=c===i;else if(e==="contains")u=c.includes(i);else if(e==="regex"){if(o.length>500)return {score:0,passed:false,reason:`Regex pattern too long (${o.length} chars, max 500)`,durationMs:Date.now()-n};if(/([+*}])\)([+*{])/.test(o)||/([+*}])\]([+*{])/.test(o))return {score:0,passed:false,reason:"Pattern contains dangerous nested quantifiers",durationMs:Date.now()-n};try{u=new RegExp(o,r?"i":"").test(a);}catch{return {score:0,passed:false,reason:`Invalid regex pattern: ${o}`,durationMs:Date.now()-n}}}return {score:u?1:0,passed:u,reason:u?`Output ${e} match`:`Output does not ${e} match expected`,durationMs:Date.now()-n}},threshold:1,weight:1}}var gs=`You are evaluating an AI agent's output for faithfulness to the provided context.
|
|
121
62
|
|
|
122
63
|
Faithfulness measures whether all claims in the output are supported by the context.
|
|
123
64
|
Score 1.0 if every claim is grounded in the context.
|
|
@@ -126,7 +67,7 @@ Score 0.0 if the output contains fabricated information not in the context.
|
|
|
126
67
|
Context: {{context}}
|
|
127
68
|
Agent Output: {{output}}
|
|
128
69
|
|
|
129
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
70
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function ms(t){return {name:"faithfulness",fn:async e=>{let r=Date.now(),s=e.testCase.context??e.testCase.expected;if(!s)return {score:1,passed:true,reason:"No context provided for faithfulness check",durationMs:Date.now()-r};let n=gs.replaceAll("{{context}}",s).replaceAll("{{output}}",String(e.result.output)),o=t.timeoutMs??3e4,a=new AbortController,c=setTimeout(()=>a.abort(),o),i=t.signal?AbortSignal.any([t.signal,a.signal]):a.signal;try{let l=(await t.runner(t.judge,n,{signal:i})).output;if(typeof l!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let p=JSON.parse(l),d=Math.max(0,Math.min(1,p.score));return {score:d,passed:d>=.7,reason:p.reason??`Faithfulness score: ${d}`,durationMs:Date.now()-r}}catch(u){return {score:0,passed:false,reason:`Faithfulness eval error: ${u instanceof Error?u.message:String(u)}`,durationMs:Date.now()-r}}finally{clearTimeout(c);}},threshold:.7,weight:1.5}}var fs=`You are evaluating an AI agent's output for relevance to the user's question.
|
|
130
71
|
|
|
131
72
|
Relevance measures whether the output directly addresses the question asked.
|
|
132
73
|
Score 1.0 if the output fully and directly answers the question.
|
|
@@ -135,7 +76,7 @@ Score 0.0 if the output is completely off-topic or irrelevant.
|
|
|
135
76
|
User Question: {{input}}
|
|
136
77
|
Agent Output: {{output}}
|
|
137
78
|
|
|
138
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
79
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function ys(t){return {name:"relevance",fn:async e=>{let r=Date.now(),s=fs.replaceAll("{{input}}",e.testCase.input).replaceAll("{{output}}",String(e.result.output)),n=t.timeoutMs??3e4,o=new AbortController,a=setTimeout(()=>o.abort(),n),c=t.signal?AbortSignal.any([t.signal,o.signal]):o.signal;try{let u=(await t.runner(t.judge,s,{signal:c})).output;if(typeof u!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let l=JSON.parse(u),p=Math.max(0,Math.min(1,l.score));return {score:p,passed:p>=.7,reason:l.reason??`Relevance score: ${p}`,durationMs:Date.now()-r}}catch(i){return {score:0,passed:false,reason:`Relevance eval error: ${i instanceof Error?i.message:String(i)}`,durationMs:Date.now()-r}}finally{clearTimeout(a);}},threshold:.7,weight:1.5}}var hs=`You are evaluating an AI agent's output for coherence and logical consistency.
|
|
139
80
|
|
|
140
81
|
Coherence measures whether the output is well-structured, logically consistent,
|
|
141
82
|
and flows naturally. Check for contradictions, non-sequiturs, and clarity.
|
|
@@ -144,7 +85,7 @@ Score 0.0 if the output is incoherent, contradictory, or disorganized.
|
|
|
144
85
|
|
|
145
86
|
Agent Output: {{output}}
|
|
146
87
|
|
|
147
|
-
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function
|
|
148
|
-
${
|
|
149
|
-
`)}`)}var dt={UNSET:0,OK:1,ERROR:2},Hn=class{constructor(e,n,o,r,a,s){this.name=e;this.spanId=n;this.traceId=o;this.parentSpanId=r;this.onEnd=s;if(this.startTime=Date.now(),a)for(let[c,u]of Object.entries(a))this.attributes[c]=u;}attributes=Object.create(null);spanEvents=[];status={code:dt.UNSET};startTime;endTime=0;setAttribute(e,n){this.attributes[e]=n;}addEvent(e,n){this.spanEvents.push({name:e,attributes:n,timestamp:Date.now()});}setStatus(e){this.status=e;}end(){this.endTime=Date.now(),this.onEnd?.(this);}toSpanData(){return {name:this.name,traceId:this.traceId,spanId:this.spanId,parentSpanId:this.parentSpanId,attributes:{...this.attributes},events:[...this.spanEvents],status:{...this.status},startTime:this.startTime,endTime:this.endTime,durationMs:this.endTime-this.startTime}}},br=class{spans=[];startSpan(e,n){let o=n?.spanId??`fallback-${crypto.randomUUID()}`,r=n?.traceId??`fallback-${crypto.randomUUID()}`,a=n?.parentSpanId;return new Hn(e,o,r,a,n?.attributes,s=>{this.spans.push(s.toSpanData());})}clear(){this.spans.length=0;}};function Qi(t){let e=t.spanPrefix??"directive.ai",n=t.instrumentEvents,o=t.spanTtlMs??3e5,r=!t.tracer,a=r?new br:null,s=t.tracer??a,c=0;function u(){return `${Date.now().toString(36)}-${(c++).toString(36)}`}function l(){return `${Date.now().toString(36)}-${crypto.randomUUID().slice(0,8)}`}let d=new Map,f=0,m=new Map,k=[],w=null,y=false;function T(S){return n?n.has(S):true}function R(S,z){return `${S}:${z}:${f++}`}function v(S,z){let te=`${S}:${z}`,Se=m.get(te);if(Se){for(let re=Se.length-1;re>=0;re--){let at=d.get(Se[re]);if(at)return {key:Se[re],entry:at}}m.delete(te);}return null}function C(S,z,te,Se){let re=`${S}:${z}`;Se.indexKey=re,d.set(te,Se);let at=m.get(re);at?at.push(te):m.set(re,[te]);}function P(S){let z=d.get(S);d.delete(S);let te=z?.indexKey;if(te){let Se=m.get(te);if(Se){let re=Se.indexOf(S);re!==-1&&Se.splice(re,1),Se.length===0&&m.delete(te);}}}function H(){let S=Date.now();if(d.size<1e4){for(let[te,Se]of d)S-Se.startTime>o&&(x(Se,"directive.stale",true),J(Se,{code:dt.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),q(Se),P(te),true);return void 0}for(let[z,te]of d)S-te.startTime>o&&(x(te,"directive.stale",true),J(te,{code:dt.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),q(te),P(z));}function _(S,z,te){let Se=u(),re=te?.traceId??l(),at=te?.spanId,Ot;r?Ot=s.startSpan(S,{attributes:z,spanId:Se,traceId:re,parentSpanId:at}):Ot=s.startSpan(S,{attributes:z});let $t={span:Ot,spanId:Se,traceId:re,startTime:Date.now()};return r||($t.shadow={span:Ot,name:S,spanId:Se,traceId:re,parentSpanId:at,attributes:{...z},events:[],status:{code:dt.UNSET},startTime:$t.startTime}),{span:Ot,entry:$t}}function q(S){S.span.end(),t.onSpanEnd&&t.onSpanEnd(ye(S));}function ye(S){if(S.span instanceof Hn)return S.span.toSpanData();if(S.shadow){let te=Date.now();return {name:S.shadow.name,traceId:S.shadow.traceId,spanId:S.shadow.spanId,parentSpanId:S.shadow.parentSpanId,attributes:{...S.shadow.attributes},events:[...S.shadow.events],status:{...S.shadow.status},startTime:S.shadow.startTime,endTime:te,durationMs:te-S.shadow.startTime}}let z=Date.now();return {name:"unknown",traceId:S.traceId,spanId:S.spanId,attributes:{},events:[],status:{code:dt.UNSET},startTime:S.startTime,endTime:z,durationMs:z-S.startTime}}function x(S,z,te){S.span.setAttribute(z,te),S.shadow&&(S.shadow.attributes[z]=te);}function G(S,z,te){S.span.addEvent(z,te),S.shadow&&S.shadow.events.push({name:z,attributes:te,timestamp:Date.now()});}function J(S,z){S.span.setStatus(z),S.shadow&&(S.shadow.status={...z});}function se(S){if(T(S.type))switch(H(),S.type){case "agent_start":B(S);break;case "agent_complete":ie(S);break;case "agent_error":ae(S);break;case "guardrail_check":I(S);break;case "constraint_evaluate":pe(S);break;case "resolver_start":Ae(S);break;case "resolver_complete":xe(S);break;case "resolver_error":ft(S);break;case "pattern_start":Gt(S);break;case "pattern_complete":Bt(S);break;default:if(S.agentId){let z=v("agent",S.agentId);z&&G(z.entry,S.type,{"event.id":S.id,"event.timestamp":S.timestamp});}}}function B(S){let z=k.length>0?k[k.length-1]:null,{entry:te}=_(`${e}.agent.run`,{"directive.service":t.serviceName,"directive.agent.name":S.agentId,"directive.agent.input_length":S.inputLength,"gen_ai.operation.name":"agent.run","gen_ai.agent.name":S.agentId},z),Se=R("agent",S.agentId);C("agent",S.agentId,Se,te);}function ie(S){let z=v("agent",S.agentId);z&&(x(z.entry,"directive.agent.output_length",S.outputLength),x(z.entry,"directive.agent.total_tokens",S.totalTokens),x(z.entry,"directive.agent.duration_ms",S.durationMs),x(z.entry,"gen_ai.usage.total_tokens",S.totalTokens),J(z.entry,{code:dt.OK}),q(z.entry),P(z.key));}function ae(S){let z=v("agent",S.agentId);z&&(x(z.entry,"directive.agent.duration_ms",S.durationMs),x(z.entry,"directive.agent.error",S.errorMessage),x(z.entry,"gen_ai.error.message",S.errorMessage),J(z.entry,{code:dt.ERROR,message:S.errorMessage}),q(z.entry),P(z.key));}function I(S){let z=S.agentId?v("agent",S.agentId)?.entry??null:null,{entry:te}=_(`${e}.guardrail.check`,{"directive.service":t.serviceName,"directive.guardrail.name":S.guardrailName,"directive.guardrail.type":S.guardrailType,"directive.guardrail.passed":S.passed,"directive.guardrail.duration_ms":S.durationMs,"gen_ai.guardrail.name":S.guardrailName,"gen_ai.guardrail.type":S.guardrailType,"gen_ai.guardrail.passed":S.passed},z);S.reason&&x(te,"directive.guardrail.reason",S.reason),J(te,{code:S.passed?dt.OK:dt.ERROR,message:S.passed?void 0:S.reason}),q(te);}function pe(S){if(S.agentId){let te=v("agent",S.agentId);if(te){G(te.entry,"constraint_evaluate",{"directive.constraint.id":S.constraintId,"directive.constraint.fired":S.fired});return}}let{entry:z}=_(`${e}.constraint.evaluate`,{"directive.service":t.serviceName,"directive.constraint.id":S.constraintId,"directive.constraint.fired":S.fired},null);J(z,{code:dt.OK}),q(z);}function Ae(S){let te=(S.agentId?v("agent",S.agentId)?.entry??null:null)??(k.length>0?k[k.length-1]:null),{entry:Se}=_(`${e}.resolver.execute`,{"directive.service":t.serviceName,"directive.resolver.id":S.resolverId,"directive.resolver.requirement_type":S.requirementType},te),re=R("resolver",S.resolverId);C("resolver",S.resolverId,re,Se);}function xe(S){let z=v("resolver",S.resolverId);z&&(x(z.entry,"directive.resolver.duration_ms",S.durationMs),J(z.entry,{code:dt.OK}),q(z.entry),P(z.key));}function ft(S){let z=v("resolver",S.resolverId);z&&(x(z.entry,"directive.resolver.duration_ms",S.durationMs),x(z.entry,"directive.resolver.error",S.errorMessage),J(z.entry,{code:dt.ERROR,message:S.errorMessage}),q(z.entry),P(z.key));}function Gt(S){let z=k.length>0?k[k.length-1]:null,{entry:te}=_(`${e}.pattern.${S.patternType}`,{"directive.service":t.serviceName,"directive.pattern.id":S.patternId,"directive.pattern.type":S.patternType},z),Se=R("pattern",S.patternId);C("pattern",S.patternId,Se,te),k.length<100&&k.push(te);}function Bt(S){let z=v("pattern",S.patternId);if(z){x(z.entry,"directive.pattern.duration_ms",S.durationMs),S.error?(x(z.entry,"directive.pattern.error",S.error),J(z.entry,{code:dt.ERROR,message:S.error})):J(z.entry,{code:dt.OK}),q(z.entry),P(z.key);let te=k.indexOf(z.entry);te!==-1&&k.splice(te,1);}}return {attach(S){if(w&&w!==S)throw new Error("[Directive OTEL] Plugin already attached to a different timeline. Create a new plugin instance.");w=S;let z=S.subscribe(se),te=setInterval(H,Math.min(o,6e4));return ()=>{z(),clearInterval(te),w=null;for(let[Se,re]of d)x(re,"directive.detached",true),J(re,{code:dt.ERROR,message:"Plugin detached while span was active"}),q(re);d.clear(),m.clear(),k.length=0;}},getSpans(){return a?[...a.spans]:(y||(y=true,typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.warn("[Directive OTEL] getSpans() returns [] when using an external tracer. Use the onSpanEnd callback to collect span data instead.")),[])},clearSpans(){a?.clear();},getTracer(){return s},getActiveSpanCount(){return d.size}}}Object.defineProperty(exports,"CircuitBreakerOpenError",{enumerable:true,get:function(){return plugins.CircuitBreakerOpenError}});Object.defineProperty(exports,"createCircuitBreaker",{enumerable:true,get:function(){return plugins.createCircuitBreaker}});Object.defineProperty(exports,"createOTLPExporter",{enumerable:true,get:function(){return plugins.createOTLPExporter}});exports.AllProvidersFailedError=qn;exports.BudgetExceededError=xn;exports.DEFAULT_INJECTION_PATTERNS=En;exports.GuardrailError=lt;exports.InMemoryCheckpointStore=Qn;exports.MAX_BREAKPOINT_HISTORY=Dt;exports.OtelStatusCode=dt;exports.ReflectionExhaustedError=un;exports.RetryExhaustedError=Fn;exports.STRICT_INJECTION_PATTERNS=dr;exports.Semaphore=It;exports.StructuredOutputError=jn;exports.adaptOutputGuardrail=ds;exports.aggregateTokens=$s;exports.allReadyStrategy=As;exports.byAgentName=gi;exports.byInputLength=pi;exports.byPattern=mi;exports.capabilityRoute=Gs;exports.collectOutputs=Ns;exports.collectTokens=ps;exports.combineStreamingGuardrails=ls;exports.composePatterns=js;exports.concatResults=Os;exports.connectDevTools=vi;exports.convertToolsForLLM=Mi;exports.costEfficientStrategy=Cs;exports.createAgentAuditHandlers=Ia;exports.createAgentMemory=ns;exports.createAgentNetwork=ma;exports.createAgentOrchestrator=Bo;exports.createAuditTrail=Pa;exports.createBatchQueue=hi;exports.createBatchedEmbedder=za;exports.createBidirectionalStream=Va;exports.createBreakpointId=kn;exports.createBruteForceIndex=Ja;exports.createCheckpointId=Pt;exports.createCompliance=La;exports.createConstraintRouter=bi;exports.createContentFilterGuardrail=Wo;exports.createDebugTimeline=fn;exports.createDebugTimelinePlugin=hn;exports.createDelegator=ha;exports.createDevToolsServer=so;exports.createEnhancedPIIGuardrail=Ur;exports.createEvalSuite=Xi;exports.createHealthMonitor=or;exports.createHybridStrategy=ts;exports.createInMemoryComplianceStorage=Ba;exports.createInMemoryStorage=Yr;exports.createInitialBreakpointState=on;exports.createJSONFileStore=ni;exports.createKeyPointsSummarizer=os;exports.createLLMSummarizer=ss;exports.createLengthGuardrail=Jo;exports.createLengthStreamingGuardrail=us;exports.createMCPAdapter=Ai;exports.createMessageBus=ga;exports.createModerationGuardrail=Fo;exports.createMultiAgentOrchestrator=Gr;exports.createOtelPlugin=Qi;exports.createOutputPIIGuardrail=Ra;exports.createOutputSchemaGuardrail=Ho;exports.createOutputTypeGuardrail=zo;exports.createPIIGuardrail=Lo;exports.createPatternStreamingGuardrail=cs;exports.createPromptInjectionGuardrail=Kr;exports.createPubSub=ya;exports.createRAGEnricher=ei;exports.createRateLimitGuardrail=qo;exports.createResponder=fa;exports.createRunner=Zo;exports.createSSETransport=ri;exports.createSemanticCache=qa;exports.createSemanticCacheGuardrail=Ua;exports.createSlidingWindowStrategy=_r;exports.createStreamChannel=mr;exports.createStreamingRunner=as;exports.createTestEmbedder=Ha;exports.createTokenBasedStrategy=Nr;exports.createToolGuardrail=Uo;exports.createToxicityStreamingGuardrail=is;exports.createTruncationSummarizer=rs;exports.createUntrustedContentGuardrail=_a;exports.createVPTreeIndex=Wa;exports.createWsTransport=ao;exports.dag=Rs;exports.debate=Ls;exports.derivedConstraint=qs;exports.detectPII=lr;exports.detectPromptInjection=pr;exports.diffCheckpoints=Ks;exports.estimateCost=Xo;exports.evalAssert=Yi;exports.evalCoherence=Ki;exports.evalCost=ji;exports.evalFaithfulness=zi;exports.evalJudge=qi;exports.evalLatency=Gi;exports.evalMatch=Ui;exports.evalOutputLength=Bi;exports.evalRelevance=Wi;exports.evalSafety=Li;exports.evalStructure=Fi;exports.explainGoal=Si;exports.extractJsonFromOutput=an;exports.filterStream=ms;exports.findAgentsByCapability=ir;exports.forkFromCheckpoint=Xs;exports.getCheckpointProgress=Ws;exports.getDependencyGraph=ki;exports.getPatternStep=cn;exports.goal=Es;exports.hasPendingApprovals=Ko;exports.highestImpactStrategy=xs;exports.isAgentRunning=Vo;exports.isGuardrailError=Yn;exports.mapStream=fs;exports.markUntrustedContent=Oa;exports.matchBreakpoint=wn;exports.mcpCallTool=Di;exports.mcpGetPrompt=Ii;exports.mcpReadResource=Pi;exports.mcpSyncResources=Oi;exports.mergeStreams=Xa;exports.mergeTaggedStreams=nr;exports.parallel=vs;exports.parseHttpStatus=fr;exports.parseRetryAfter=eo;exports.patternFromJSON=Ds;exports.patternToJSON=sr;exports.patternToMermaid=pa;exports.pickBestResult=_s;exports.pipe=es;exports.pipeThrough=Ka;exports.planGoal=Ri;exports.race=Ts;exports.redactPII=Bn;exports.reflect=Ss;exports.runAgentRequirement=Is;exports.runDebate=Fs;exports.sanitizeInjection=Vr;exports.selectAgent=Ps;exports.sequential=ks;exports.spawnOnCondition=Bs;exports.spawnPool=Us;exports.supervisor=ws;exports.tapStream=gs;exports.validateBaseURL=Qo;exports.validateCheckpoint=sn;exports.validateGoal=wi;exports.withBudget=di;exports.withFallback=ci;exports.withModelSelection=fi;exports.withReflection=bs;exports.withRetry=ui;exports.withStructuredOutput=Rn;//# sourceMappingURL=index.cjs.map
|
|
88
|
+
Respond with ONLY a JSON object: {"score": <number 0.0-1.0>, "reason": "<brief explanation>"}`;function vs(t){return {name:"coherence",fn:async e=>{let r=Date.now(),s=hs.replaceAll("{{output}}",String(e.result.output)),n=t.timeoutMs??3e4,o=new AbortController,a=setTimeout(()=>o.abort(),n),c=t.signal?AbortSignal.any([t.signal,o.signal]):o.signal;try{let u=(await t.runner(t.judge,s,{signal:c})).output;if(typeof u!="string")return {score:0,passed:!1,reason:"Judge returned non-string output",durationMs:Date.now()-r};let l=JSON.parse(u),p=Math.max(0,Math.min(1,l.score));return {score:p,passed:p>=.7,reason:l.reason??`Coherence score: ${p}`,durationMs:Date.now()-r}}catch(i){return {score:0,passed:false,reason:`Coherence eval error: ${i instanceof Error?i.message:String(i)}`,durationMs:Date.now()-r}}finally{clearTimeout(a);}},threshold:.7,weight:1}}function bs(t){let{agents:e,runner:r,dataset:s,runOptions:n,concurrency:o=5,timeline:a,onCaseComplete:c,onAgentComplete:i,signal:u}=t;if(s.length===0)throw new Error("[Directive Evals] Dataset must contain at least one test case");let l=new Se(o),p={};for(let[f,m]of Object.entries(t.criteria))p[f]=rs(f,m);async function d(f,m){try{await l.acquire(u);}catch{let E={};for(let h of Object.keys(p))E[h]={score:0,passed:false,reason:"Evaluation aborted",durationMs:0};return {testCase:m,agentName:f.name,runResult:{output:"",messages:[],toolCalls:[],totalTokens:0},scores:E,overallScore:0,allPassed:false,runDurationMs:0}}try{let E=Date.now(),h;try{h=await r(f,m.input,{...n,signal:u});}catch(O){let v={output:"",messages:[],toolCalls:[],totalTokens:0},C={};for(let T of Object.keys(p))C[T]={score:0,passed:!1,reason:`Agent error: ${O instanceof Error?`${O.name}: ${O.message}`:String(O)}`,durationMs:0};return {testCase:m,agentName:f.name,runResult:v,scores:C,overallScore:0,allPassed:!1,runDurationMs:Date.now()-E}}let g=Date.now()-E,b={agent:f,testCase:m,result:h,runDurationMs:g},R={};for(let[O,v]of Object.entries(p))try{let C=await v.fn(b);R[O]={...C,passed:C.score>=(v.threshold??.5)};}catch(C){R[O]={score:0,passed:!1,reason:`Criterion error: ${C instanceof Error?`${C.name}: ${C.message}`:String(C)}`,durationMs:0};}let A=ss(R,p),x=Object.values(R).every(O=>O.passed),k={testCase:m,agentName:f.name,runResult:h,scores:R,overallScore:A,allPassed:x,runDurationMs:g};return a&&a.record({type:"agent_complete",timestamp:Date.now(),agentId:`eval:${f.name}`,outputLength:String(h.output).length,totalTokens:h.totalTokens,durationMs:g,snapshotId:null}),c?.(k),k}finally{l.release();}}function y(f,m){let E={},h={},g=0,b=0,R=0;for(let v of Object.keys(p))E[v]=0,h[v]=0;for(let v of m){g+=v.runResult.totalTokens,b+=v.runDurationMs,v.allPassed&&R++;for(let[C,T]of Object.entries(v.scores))E[C]=(E[C]??0)+T.score,T.passed&&(h[C]=(h[C]??0)+1);}let A=m.length,x={},k={};for(let v of Object.keys(p))x[v]=A>0?(E[v]??0)/A:0,k[v]=A>0?(h[v]??0)/A:0;let O=A>0?os(x,p):0;return {agentName:f,criterionAverages:x,criterionPassRates:k,overallScore:O,passRate:A>0?R/A:0,totalTokens:g,avgLatencyMs:A>0?b/A:0,totalCases:A,passedCases:R}}return {getAgents:()=>[...e],getCriteria:()=>Object.keys(p),getDataset:()=>[...s],async run(){let f=Date.now(),m=[],E={},h=e.map(async R=>{if(u?.aborted)return;let A=await Promise.all(s.map(x=>d(R,x)));return {agent:R,agentResults:A}}),g=await Promise.all(h);for(let R of g){if(!R)continue;m.push(...R.agentResults);let A=y(R.agent.name,R.agentResults);E[R.agent.name]=A,i?.(A);}let b=Date.now();return {summary:E,details:m,durationMs:b-f,totalTokens:m.reduce((R,A)=>R+A.runResult.totalTokens,0),startedAt:f,completedAt:b}},async runAgent(f){let m=e.find(g=>g.name===f);if(!m)throw new Error(`[Directive Evals] Unknown agent: "${f}"`);let E=await Promise.all(s.map(g=>d(m,g))),h=y(m.name,E);return i?.(h),h}}}function Ss(t,e){let r=[];for(let[s,n]of Object.entries(t.summary))if(e.minScore!==void 0&&n.overallScore<e.minScore&&r.push(`Agent "${s}" score ${n.overallScore.toFixed(3)} < minimum ${e.minScore}`),e.minPassRate!==void 0&&n.passRate<e.minPassRate&&r.push(`Agent "${s}" pass rate ${n.passRate.toFixed(3)} < minimum ${e.minPassRate}`),e.failOn)for(let o of e.failOn){let a=n.criterionPassRates[o];a!==void 0&&a<1&&r.push(`Agent "${s}" criterion "${o}" pass rate ${a.toFixed(3)} < 1.0 (failOn)`);}if(r.length>0)throw new Error(`[Directive Evals] Assertion failed:
|
|
89
|
+
${r.join(`
|
|
90
|
+
`)}`)}var L={UNSET:0,OK:1,ERROR:2},ie=class{constructor(e,r,s,n,o,a){this.name=e;this.spanId=r;this.traceId=s;this.parentSpanId=n;this.onEnd=a;if(this.startTime=Date.now(),o)for(let[c,i]of Object.entries(o))this.attributes[c]=i;}attributes=Object.create(null);spanEvents=[];status={code:L.UNSET};startTime;endTime=0;setAttribute(e,r){this.attributes[e]=r;}addEvent(e,r){this.spanEvents.push({name:e,attributes:r,timestamp:Date.now()});}setStatus(e){this.status=e;}end(){this.endTime=Date.now(),this.onEnd?.(this);}toSpanData(){return {name:this.name,traceId:this.traceId,spanId:this.spanId,parentSpanId:this.parentSpanId,attributes:{...this.attributes},events:[...this.spanEvents],status:{...this.status},startTime:this.startTime,endTime:this.endTime,durationMs:this.endTime-this.startTime}}},Ee=class{spans=[];startSpan(e,r){let s=r?.spanId??`fallback-${crypto.randomUUID()}`,n=r?.traceId??`fallback-${crypto.randomUUID()}`,o=r?.parentSpanId;return new ie(e,s,n,o,r?.attributes,a=>{this.spans.push(a.toSpanData());})}clear(){this.spans.length=0;}};function Es(t){let e=t.spanPrefix??"directive.ai",r=t.instrumentEvents,s=t.spanTtlMs??3e5,n=!t.tracer,o=n?new Ee:null,a=t.tracer??o,c=0;function i(){return `${Date.now().toString(36)}-${(c++).toString(36)}`}function u(){return `${Date.now().toString(36)}-${crypto.randomUUID().slice(0,8)}`}let l=new Map,p=0,d=new Map,y=[],f=null,m=false;function E(S){return r?r.has(S):true}function h(S,M){return `${S}:${M}:${p++}`}function g(S,M){let I=`${S}:${M}`,N=d.get(I);if(N){for(let G=N.length-1;G>=0;G--){let H=l.get(N[G]);if(H)return {key:N[G],entry:H}}d.delete(I);}return null}function b(S,M,I,N){let G=`${S}:${M}`;N.indexKey=G,l.set(I,N);let H=d.get(G);H?H.push(I):d.set(G,[I]);}function R(S){let M=l.get(S);l.delete(S);let I=M?.indexKey;if(I){let N=d.get(I);if(N){let G=N.indexOf(S);G!==-1&&N.splice(G,1),N.length===0&&d.delete(I);}}}function A(){let S=Date.now();if(l.size<1e4){for(let[I,N]of l)S-N.startTime>s&&(v(N,"directive.stale",true),T(N,{code:L.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),k(N),R(I),true);return void 0}for(let[M,I]of l)S-I.startTime>s&&(v(I,"directive.stale",true),T(I,{code:L.ERROR,message:"Span TTL exceeded \u2014 cleaned up"}),k(I),R(M));}function x(S,M,I){let N=i(),G=I?.traceId??u(),H=I?.spanId,J;n?J=a.startSpan(S,{attributes:M,spanId:N,traceId:G,parentSpanId:H}):J=a.startSpan(S,{attributes:M});let ue={span:J,spanId:N,traceId:G,startTime:Date.now()};return n||(ue.shadow={span:J,name:S,spanId:N,traceId:G,parentSpanId:H,attributes:{...M},events:[],status:{code:L.UNSET},startTime:ue.startTime}),{span:J,entry:ue}}function k(S){S.span.end(),t.onSpanEnd&&t.onSpanEnd(O(S));}function O(S){if(S.span instanceof ie)return S.span.toSpanData();if(S.shadow){let I=Date.now();return {name:S.shadow.name,traceId:S.shadow.traceId,spanId:S.shadow.spanId,parentSpanId:S.shadow.parentSpanId,attributes:{...S.shadow.attributes},events:[...S.shadow.events],status:{...S.shadow.status},startTime:S.shadow.startTime,endTime:I,durationMs:I-S.shadow.startTime}}let M=Date.now();return {name:"unknown",traceId:S.traceId,spanId:S.spanId,attributes:{},events:[],status:{code:L.UNSET},startTime:S.startTime,endTime:M,durationMs:M-S.startTime}}function v(S,M,I){S.span.setAttribute(M,I),S.shadow&&(S.shadow.attributes[M]=I);}function C(S,M,I){S.span.addEvent(M,I),S.shadow&&S.shadow.events.push({name:M,attributes:I,timestamp:Date.now()});}function T(S,M){S.span.setStatus(M),S.shadow&&(S.shadow.status={...M});}function D(S){if(E(S.type))switch(A(),S.type){case "agent_start":w(S);break;case "agent_complete":_(S);break;case "agent_error":P(S);break;case "guardrail_check":F(S);break;case "constraint_evaluate":B(S);break;case "resolver_start":$(S);break;case "resolver_complete":U(S);break;case "resolver_error":q(S);break;case "pattern_start":ce(S);break;case "pattern_complete":We(S);break;default:if(S.agentId){let M=g("agent",S.agentId);M&&C(M.entry,S.type,{"event.id":S.id,"event.timestamp":S.timestamp});}}}function w(S){let M=y.length>0?y[y.length-1]:null,{entry:I}=x(`${e}.agent.run`,{"directive.service":t.serviceName,"directive.agent.name":S.agentId,"directive.agent.input_length":S.inputLength,"gen_ai.operation.name":"agent.run","gen_ai.agent.name":S.agentId},M),N=h("agent",S.agentId);b("agent",S.agentId,N,I);}function _(S){let M=g("agent",S.agentId);M&&(v(M.entry,"directive.agent.output_length",S.outputLength),v(M.entry,"directive.agent.total_tokens",S.totalTokens),v(M.entry,"directive.agent.duration_ms",S.durationMs),v(M.entry,"gen_ai.usage.total_tokens",S.totalTokens),T(M.entry,{code:L.OK}),k(M.entry),R(M.key));}function P(S){let M=g("agent",S.agentId);M&&(v(M.entry,"directive.agent.duration_ms",S.durationMs),v(M.entry,"directive.agent.error",S.errorMessage),v(M.entry,"gen_ai.error.message",S.errorMessage),T(M.entry,{code:L.ERROR,message:S.errorMessage}),k(M.entry),R(M.key));}function F(S){let M=S.agentId?g("agent",S.agentId)?.entry??null:null,{entry:I}=x(`${e}.guardrail.check`,{"directive.service":t.serviceName,"directive.guardrail.name":S.guardrailName,"directive.guardrail.type":S.guardrailType,"directive.guardrail.passed":S.passed,"directive.guardrail.duration_ms":S.durationMs,"gen_ai.guardrail.name":S.guardrailName,"gen_ai.guardrail.type":S.guardrailType,"gen_ai.guardrail.passed":S.passed},M);S.reason&&v(I,"directive.guardrail.reason",S.reason),T(I,{code:S.passed?L.OK:L.ERROR,message:S.passed?void 0:S.reason}),k(I);}function B(S){if(S.agentId){let I=g("agent",S.agentId);if(I){C(I.entry,"constraint_evaluate",{"directive.constraint.id":S.constraintId,"directive.constraint.fired":S.fired});return}}let{entry:M}=x(`${e}.constraint.evaluate`,{"directive.service":t.serviceName,"directive.constraint.id":S.constraintId,"directive.constraint.fired":S.fired},null);T(M,{code:L.OK}),k(M);}function $(S){let I=(S.agentId?g("agent",S.agentId)?.entry??null:null)??(y.length>0?y[y.length-1]:null),{entry:N}=x(`${e}.resolver.execute`,{"directive.service":t.serviceName,"directive.resolver.id":S.resolverId,"directive.resolver.requirement_type":S.requirementType},I),G=h("resolver",S.resolverId);b("resolver",S.resolverId,G,N);}function U(S){let M=g("resolver",S.resolverId);M&&(v(M.entry,"directive.resolver.duration_ms",S.durationMs),T(M.entry,{code:L.OK}),k(M.entry),R(M.key));}function q(S){let M=g("resolver",S.resolverId);M&&(v(M.entry,"directive.resolver.duration_ms",S.durationMs),v(M.entry,"directive.resolver.error",S.errorMessage),T(M.entry,{code:L.ERROR,message:S.errorMessage}),k(M.entry),R(M.key));}function ce(S){let M=y.length>0?y[y.length-1]:null,{entry:I}=x(`${e}.pattern.${S.patternType}`,{"directive.service":t.serviceName,"directive.pattern.id":S.patternId,"directive.pattern.type":S.patternType},M),N=h("pattern",S.patternId);b("pattern",S.patternId,N,I),y.length<100&&y.push(I);}function We(S){let M=g("pattern",S.patternId);if(M){v(M.entry,"directive.pattern.duration_ms",S.durationMs),S.error?(v(M.entry,"directive.pattern.error",S.error),T(M.entry,{code:L.ERROR,message:S.error})):T(M.entry,{code:L.OK}),k(M.entry),R(M.key);let I=y.indexOf(M.entry);I!==-1&&y.splice(I,1);}}return {attach(S){if(f&&f!==S)throw new Error("[Directive OTEL] Plugin already attached to a different timeline. Create a new plugin instance.");f=S;let M=S.subscribe(D),I=setInterval(A,Math.min(s,6e4));return ()=>{M(),clearInterval(I),f=null;for(let[N,G]of l)v(G,"directive.detached",true),T(G,{code:L.ERROR,message:"Plugin detached while span was active"}),k(G);l.clear(),d.clear(),y.length=0;}},getSpans(){return o?[...o.spans]:(m||(m=true,typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.warn("[Directive OTEL] getSpans() returns [] when using an external tracer. Use the onSpanEnd callback to collect span data instead.")),[])},clearSpans(){o?.clear();},getTracer(){return a},getActiveSpanCount(){return l.size}}}Object.defineProperty(exports,"createAgentOrchestrator",{enumerable:true,get:function(){return chunkWCJFIC22_cjs.a}});Object.defineProperty(exports,"createRunner",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.e}});Object.defineProperty(exports,"estimateCost",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.c}});Object.defineProperty(exports,"hasPendingApprovals",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.b}});Object.defineProperty(exports,"isAgentRunning",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.a}});Object.defineProperty(exports,"validateBaseURL",{enumerable:true,get:function(){return chunkW6MVJKWN_cjs.d}});Object.defineProperty(exports,"GuardrailError",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.a}});Object.defineProperty(exports,"InMemoryCheckpointStore",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.E}});Object.defineProperty(exports,"MAX_BREAKPOINT_HISTORY",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.y}});Object.defineProperty(exports,"ReflectionExhaustedError",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.U}});Object.defineProperty(exports,"Semaphore",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.X}});Object.defineProperty(exports,"StructuredOutputError",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.H}});Object.defineProperty(exports,"adaptOutputGuardrail",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.N}});Object.defineProperty(exports,"aggregateTokens",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.sa}});Object.defineProperty(exports,"allReadyStrategy",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ia}});Object.defineProperty(exports,"capabilityRoute",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.va}});Object.defineProperty(exports,"collectOutputs",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ra}});Object.defineProperty(exports,"collectTokens",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.O}});Object.defineProperty(exports,"combineStreamingGuardrails",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.M}});Object.defineProperty(exports,"composePatterns",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ta}});Object.defineProperty(exports,"concatResults",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.pa}});Object.defineProperty(exports,"costEfficientStrategy",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ka}});Object.defineProperty(exports,"createBreakpointId",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.z}});Object.defineProperty(exports,"createCheckpointId",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.C}});Object.defineProperty(exports,"createDebugTimeline",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.g}});Object.defineProperty(exports,"createDebugTimelinePlugin",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.h}});Object.defineProperty(exports,"createHealthMonitor",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.T}});Object.defineProperty(exports,"createInitialBreakpointState",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.B}});Object.defineProperty(exports,"createLengthStreamingGuardrail",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.K}});Object.defineProperty(exports,"createMultiAgentOrchestrator",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.Ba}});Object.defineProperty(exports,"createPatternStreamingGuardrail",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.L}});Object.defineProperty(exports,"createStreamingRunner",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.I}});Object.defineProperty(exports,"createToxicityStreamingGuardrail",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.J}});Object.defineProperty(exports,"dag",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ea}});Object.defineProperty(exports,"debate",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.xa}});Object.defineProperty(exports,"derivedConstraint",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.za}});Object.defineProperty(exports,"diffCheckpoints",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs._}});Object.defineProperty(exports,"extractJsonFromOutput",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.F}});Object.defineProperty(exports,"filterStream",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.Q}});Object.defineProperty(exports,"findAgentsByCapability",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ua}});Object.defineProperty(exports,"forkFromCheckpoint",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.$}});Object.defineProperty(exports,"getCheckpointProgress",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.Z}});Object.defineProperty(exports,"getPatternStep",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.Y}});Object.defineProperty(exports,"goal",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ha}});Object.defineProperty(exports,"highestImpactStrategy",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ja}});Object.defineProperty(exports,"isGuardrailError",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.b}});Object.defineProperty(exports,"mapStream",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.R}});Object.defineProperty(exports,"matchBreakpoint",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.A}});Object.defineProperty(exports,"mergeTaggedStreams",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.S}});Object.defineProperty(exports,"parallel",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ba}});Object.defineProperty(exports,"patternFromJSON",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ma}});Object.defineProperty(exports,"patternToJSON",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.la}});Object.defineProperty(exports,"pickBestResult",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.qa}});Object.defineProperty(exports,"race",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ga}});Object.defineProperty(exports,"reflect",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.fa}});Object.defineProperty(exports,"runAgentRequirement",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.oa}});Object.defineProperty(exports,"runDebate",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ya}});Object.defineProperty(exports,"selectAgent",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.na}});Object.defineProperty(exports,"sequential",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.ca}});Object.defineProperty(exports,"spawnOnCondition",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.wa}});Object.defineProperty(exports,"spawnPool",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.Aa}});Object.defineProperty(exports,"supervisor",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.da}});Object.defineProperty(exports,"tapStream",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.P}});Object.defineProperty(exports,"validateCheckpoint",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.D}});Object.defineProperty(exports,"withReflection",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.V}});Object.defineProperty(exports,"withStructuredOutput",{enumerable:true,get:function(){return chunkB4ATEGA2_cjs.G}});Object.defineProperty(exports,"CircuitBreakerOpenError",{enumerable:true,get:function(){return plugins.CircuitBreakerOpenError}});Object.defineProperty(exports,"createCircuitBreaker",{enumerable:true,get:function(){return plugins.createCircuitBreaker}});Object.defineProperty(exports,"createOTLPExporter",{enumerable:true,get:function(){return plugins.createOTLPExporter}});exports.AllProvidersFailedError=oe;exports.BudgetExceededError=Y;exports.DEFAULT_INJECTION_PATTERNS=Q;exports.OtelStatusCode=L;exports.RetryExhaustedError=se;exports.STRICT_INJECTION_PATTERNS=me;exports.byAgentName=_r;exports.byInputLength=$r;exports.byPattern=jr;exports.connectDevTools=Ur;exports.convertToolsForLLM=Yr;exports.createAgentAuditHandlers=tr;exports.createAgentMemory=vn;exports.createAgentNetwork=jn;exports.createAuditTrail=er;exports.createBatchQueue=Br;exports.createBatchedEmbedder=mr;exports.createBidirectionalStream=hr;exports.createBruteForceIndex=fr;exports.createCompliance=ur;exports.createConstraintRouter=Lr;exports.createContentFilterGuardrail=fn;exports.createDelegator=Bn;exports.createDevToolsServer=Ve;exports.createEnhancedPIIGuardrail=ke;exports.createEvalSuite=bs;exports.createHybridStrategy=hn;exports.createInMemoryComplianceStorage=cr;exports.createInMemoryStorage=Ge;exports.createJSONFileStore=Mr;exports.createKeyPointsSummarizer=Sn;exports.createLLMSummarizer=En;exports.createLengthGuardrail=mn;exports.createMCPAdapter=Wr;exports.createMessageBus=_n;exports.createModerationGuardrail=un;exports.createOtelPlugin=Es;exports.createOutputPIIGuardrail=qn;exports.createOutputSchemaGuardrail=pn;exports.createOutputTypeGuardrail=gn;exports.createPIIGuardrail=cn;exports.createPromptInjectionGuardrail=_e;exports.createPubSub=Fn;exports.createRAGEnricher=wr;exports.createRateLimitGuardrail=ln;exports.createResponder=Gn;exports.createSSETransport=Ar;exports.createSemanticCache=dr;exports.createSemanticCacheGuardrail=pr;exports.createSlidingWindowStrategy=Ce;exports.createStreamChannel=he;exports.createTestEmbedder=gr;exports.createTokenBasedStrategy=Me;exports.createToolGuardrail=dn;exports.createTruncationSummarizer=bn;exports.createUntrustedContentGuardrail=rr;exports.createVPTreeIndex=yr;exports.createWsTransport=Je;exports.detectPII=ge;exports.detectPromptInjection=fe;exports.evalAssert=Ss;exports.evalCoherence=vs;exports.evalCost=as;exports.evalFaithfulness=ms;exports.evalJudge=ds;exports.evalLatency=is;exports.evalMatch=ps;exports.evalOutputLength=cs;exports.evalRelevance=ys;exports.evalSafety=us;exports.evalStructure=ls;exports.explainGoal=Vr;exports.getDependencyGraph=zr;exports.markUntrustedContent=nr;exports.mcpCallTool=Zr;exports.mcpGetPrompt=ts;exports.mcpReadResource=es;exports.mcpSyncResources=ns;exports.mergeStreams=br;exports.parseHttpStatus=ve;exports.parseRetryAfter=Le;exports.patternToMermaid=$n;exports.pipe=yn;exports.pipeThrough=vr;exports.planGoal=qr;exports.redactPII=ne;exports.sanitizeInjection=$e;exports.validateGoal=Hr;exports.withBudget=Nr;exports.withFallback=Dr;exports.withModelSelection=Gr;exports.withRetry=Ir;//# sourceMappingURL=index.cjs.map
|
|
150
91
|
//# sourceMappingURL=index.cjs.map
|