@directive-run/core 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/plugins/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {e}from'../chunk-T6IJUWYR.js';var Ae={debug:0,info:1,warn:2,error:3};function Ke(n={}){let{level:c="info",filter:o=()=>true,logger:r=console,prefix:u="[Directive]"}=n,g=Ae[c],l=(t,i,...s)=>{Ae[t]<g||o(i)&&r[t](`${u} ${i}`,...s);};return {name:"logging",onInit:()=>l("debug","init"),onStart:()=>l("info","start"),onStop:()=>l("info","stop"),onDestroy:()=>l("debug","destroy"),onFactSet:(t,i,s)=>{l("debug","fact.set",{key:t,value:i,prev:s});},onFactDelete:(t,i)=>{l("debug","fact.delete",{key:t,prev:i});},onFactsBatch:t=>{l("debug","facts.batch",{count:t.length,changes:t});},onDerivationCompute:(t,i,s)=>{l("debug","derivation.compute",{id:t,value:i,deps:s});},onDerivationInvalidate:t=>{l("debug","derivation.invalidate",{id:t});},onReconcileStart:()=>{l("debug","reconcile.start");},onReconcileEnd:t=>{l("debug","reconcile.end",{unmet:t.unmet.length,inflight:t.inflight.length,completed:t.completed.length,canceled:t.canceled.length});},onConstraintEvaluate:(t,i,s)=>{if(s){let p=s.filter(S=>S.pass).length;l("debug","constraint.evaluate",{id:t,active:i,clauses:{total:s.length,passed:p}});return}l("debug","constraint.evaluate",{id:t,active:i});},onConstraintError:(t,i)=>{l("error","constraint.error",{id:t,error:i});},onRequirementCreated:t=>{l("debug","requirement.created",{id:t.id,type:t.requirement.type});},onRequirementMet:(t,i)=>{l("info","requirement.met",{id:t.id,byResolver:i});},onRequirementCanceled:t=>{l("debug","requirement.canceled",{id:t.id});},onResolverStart:(t,i)=>{l("debug","resolver.start",{resolver:t,requirementId:i.id});},onResolverComplete:(t,i,s)=>{l("info","resolver.complete",{resolver:t,requirementId:i.id,duration:s});},onResolverError:(t,i,s)=>{l("error","resolver.error",{resolver:t,requirementId:i.id,error:s});},onResolverRetry:(t,i,s)=>{l("warn","resolver.retry",{resolver:t,requirementId:i.id,attempt:s});},onResolverCancel:(t,i)=>{l("debug","resolver.cancel",{resolver:t,requirementId:i.id});},onResolverWriteRejected:t=>{l("warn","resolver.write.rejected",t.kind==="summary"?{kind:t.kind,resolver:t.resolver,requirementId:t.req.id,reason:t.reason,dropped:t.dropped}:{kind:t.kind,resolver:t.resolver,requirementId:t.req.id,reason:t.reason,fact:t.fact,expected:t.expected,actual:t.actual});},onEffectRun:t=>{l("debug","effect.run",{id:t});},onEffectError:(t,i)=>{l("error","effect.error",{id:t,error:i});},onSnapshot:t=>{l("debug","timetravel.snapshot",{id:t.id,trigger:t.trigger});},onHistoryNavigate:(t,i)=>{l("info","timetravel.jump",{from:t,to:i});},onError:t=>{l("error","error",{source:t.source,sourceId:t.sourceId,message:t.message});},onErrorRecovery:(t,i)=>{l("warn","error.recovery",{source:t.source,sourceId:t.sourceId,strategy:i});},onDefinitionRegister:(t,i)=>{l("info","definition.register",{type:t,id:i});},onDefinitionAssign:(t,i)=>{l("info","definition.assign",{type:t,id:i});},onDefinitionUnregister:(t,i)=>{l("info","definition.unregister",{type:t,id:i});},onDefinitionCall:(t,i,s)=>{l("debug","definition.call",{type:t,id:i,props:s});},onTraceComplete:t=>{l("debug","trace.complete",{id:t.id,status:t.status,duration:t.duration,factChanges:t.factChanges.length,derivationsRecomputed:t.derivationsRecomputed.length,constraintsHit:t.constraintsHit.length,resolversStarted:t.resolversStarted.length,effectsRun:t.effectsRun.length});}}}var se=class{constructor(c){this.capacity=c;this.buf=new Array(c);}buf;head=0;_size=0;get size(){return this._size}push(c){this.buf[this.head]=c,this.head=(this.head+1)%this.capacity,this._size<this.capacity&&this._size++;}toArray(){return this._size===0?[]:this._size<this.capacity?this.buf.slice(0,this._size):[...this.buf.slice(this.head),...this.buf.slice(0,this.head)]}clear(){this.buf=new Array(this.capacity),this.head=0,this._size=0;}};function ue(){try{if(typeof process<"u"&&process.env?.NODE_ENV==="production")return !1}catch{}try{if(typeof import.meta<"u"&&import.meta.env?.MODE==="production")return !1}catch{}return true}function fe(n){try{if(n===void 0)return "undefined";if(n===null)return "null";if(typeof n=="bigint")return String(n)+"n";if(typeof n=="symbol")return String(n);if(typeof n=="object"){let c=JSON.stringify(n,(o,r)=>typeof r=="bigint"?String(r)+"n":typeof r=="symbol"?String(r):r);return c.length>120?c.slice(0,117)+"...":c}return String(n)}catch{return "<error>"}}function J(n,c){return n.length<=c?n:n.slice(0,c-3)+"..."}function te(n){try{return n.inspect()}catch{return null}}function ke(n){try{return n==null||typeof n!="object"?n:JSON.parse(JSON.stringify(n))}catch{return null}}function Oe(n){return n===void 0?1e3:!Number.isFinite(n)||n<1?(ue()&&console.warn(`[directive:devtools] Invalid maxEvents value (${n}), using default 1000`),1e3):Math.floor(n)}function Le(){return {reconcileCount:0,reconcileTotalMs:0,resolverStats:new Map,effectRunCount:0,effectErrorCount:0,lastReconcileStartMs:0}}var Je=200,ne=340,re=16,oe=80,be=2,ve=["#8b9aff","#4ade80","#fbbf24","#c084fc","#f472b6","#22d3ee"];function Pe(){return {entries:new se(Je),inflight:new Map}}function Ie(){return {derivationDeps:new Map,activeConstraints:new Set,recentlyChangedFacts:new Set,recentlyComputedDerivations:new Set,recentlyActiveConstraints:new Set,animationTimer:null}}var _e=1e4,Ne=100;function $e(){return {isRecording:false,recordedEvents:[],snapshots:[]}}var Be=50,ye=200,y={bg:"#1a1a2e",text:"#e0e0e0",accent:"#8b9aff",muted:"#b0b0d0",border:"#333",rowBorder:"#2a2a4a",green:"#4ade80",yellow:"#fbbf24",red:"#f87171",closeBtn:"#aaa",font:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace"},V={nodeW:90,nodeH:16,nodeGap:6,startY:16,colGap:20,fontSize:10,labelMaxChars:11};function He(n,c,o,r){let u=false,g={position:"fixed",zIndex:"99999",...c.includes("bottom")?{bottom:"12px"}:{top:"12px"},...c.includes("right")?{right:"12px"}:{left:"12px"}},l=document.createElement("style");l.textContent=`[data-directive-devtools] summary:focus-visible{outline:2px solid ${y.accent};outline-offset:2px;border-radius:2px}[data-directive-devtools] button:focus-visible{outline:2px solid ${y.accent};outline-offset:2px}`,document.head.appendChild(l);let t=document.createElement("button");t.setAttribute("aria-label","Open Directive DevTools"),t.setAttribute("aria-expanded",String(o)),t.title="Ctrl+Shift+D to toggle",Object.assign(t.style,{...g,background:y.bg,color:y.text,border:`1px solid ${y.border}`,borderRadius:"6px",padding:"10px 14px",minWidth:"44px",minHeight:"44px",cursor:"pointer",fontFamily:y.font,fontSize:"12px",display:o?"none":"block"}),t.textContent="Directive";let i=document.createElement("div");i.setAttribute("role","region"),i.setAttribute("aria-label","Directive DevTools"),i.setAttribute("data-directive-devtools",""),i.tabIndex=-1,Object.assign(i.style,{...g,background:y.bg,color:y.text,border:`1px solid ${y.border}`,borderRadius:"8px",padding:"12px",fontFamily:y.font,fontSize:"11px",maxWidth:"min(380px, calc(100vw - 24px))",maxHeight:"min(500px, calc(100vh - 24px))",overflow:"auto",boxShadow:"0 4px 20px rgba(0,0,0,0.5)",display:o?"block":"none"});let s=document.createElement("div");Object.assign(s.style,{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"8px"});let p=document.createElement("strong");p.style.color=y.accent,p.textContent=n==="default"?"Directive DevTools":`DevTools (${n})`;let S=document.createElement("button");S.setAttribute("aria-label","Close DevTools"),Object.assign(S.style,{background:"none",border:"none",color:y.closeBtn,cursor:"pointer",fontSize:"16px",padding:"8px 12px",minWidth:"44px",minHeight:"44px",lineHeight:"1",display:"flex",alignItems:"center",justifyContent:"center"}),S.textContent="\xD7",s.appendChild(p),s.appendChild(S),i.appendChild(s);let k=document.createElement("div");k.style.marginBottom="6px",k.setAttribute("aria-live","polite");let _=document.createElement("span");_.style.color=y.green,_.textContent="Settled",k.appendChild(_),i.appendChild(k);let T=document.createElement("div");Object.assign(T.style,{display:"none",marginBottom:"8px",padding:"4px 8px",background:"#252545",borderRadius:"4px",alignItems:"center",gap:"6px"});let w=document.createElement("button");Object.assign(w.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"4px 10px",borderRadius:"3px",fontFamily:y.font,fontSize:"11px",minWidth:"44px",minHeight:"44px"}),w.textContent="\u25C0 Undo",w.disabled=true;let m=document.createElement("button");Object.assign(m.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"4px 10px",borderRadius:"3px",fontFamily:y.font,fontSize:"11px",minWidth:"44px",minHeight:"44px"}),m.textContent="Redo \u25B6",m.disabled=true;let v=document.createElement("span");v.style.color=y.muted,v.style.fontSize="10px",T.appendChild(w),T.appendChild(m),T.appendChild(v),i.appendChild(T);function D(z,Y){let G=document.createElement("details");Y&&(G.open=true),G.style.marginBottom="4px";let K=document.createElement("summary");Object.assign(K.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"});let ee=document.createElement("span");K.textContent=`${z} (`,K.appendChild(ee),K.appendChild(document.createTextNode(")")),ee.textContent="0",G.appendChild(K);let Q=document.createElement("table");Object.assign(Q.style,{width:"100%",borderCollapse:"collapse",fontSize:"11px"});let Me=document.createElement("thead"),Te=document.createElement("tr");for(let Ye of ["Key","Value"]){let le=document.createElement("th");le.scope="col",Object.assign(le.style,{textAlign:"left",padding:"2px 4px",color:y.accent}),le.textContent=Ye,Te.appendChild(le);}Me.appendChild(Te),Q.appendChild(Me);let De=document.createElement("tbody");return Q.appendChild(De),G.appendChild(Q),{details:G,tbody:De,countSpan:ee}}function M(z,Y){let G=document.createElement("details");G.style.marginBottom="4px";let K=document.createElement("summary");Object.assign(K.style,{cursor:"pointer",color:Y,marginBottom:"4px"});let ee=document.createElement("span");K.textContent=`${z} (`,K.appendChild(ee),K.appendChild(document.createTextNode(")")),ee.textContent="0",G.appendChild(K);let Q=document.createElement("ul");return Object.assign(Q.style,{margin:"0",paddingLeft:"16px"}),G.appendChild(Q),{details:G,list:Q,countSpan:ee}}let O=D("Facts",true);i.appendChild(O.details);let H=D("Derivations",false);i.appendChild(H.details);let A=M("Inflight",y.yellow);i.appendChild(A.details);let F=M("Unmet",y.red);i.appendChild(F.details);let L=document.createElement("details");L.style.marginBottom="4px";let j=document.createElement("summary");Object.assign(j.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),j.textContent="Performance",L.appendChild(j);let P=document.createElement("div");P.style.fontSize="10px",P.style.color=y.muted,P.textContent="No data yet",L.appendChild(P),i.appendChild(L);let $=document.createElement("details");$.style.marginBottom="4px";let x=document.createElement("summary");Object.assign(x.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),x.textContent="Dependency Graph",$.appendChild(x);let E=document.createElementNS("http://www.w3.org/2000/svg","svg");E.setAttribute("width","100%"),E.setAttribute("height","120"),E.setAttribute("role","img"),E.setAttribute("aria-label","System dependency graph"),E.style.display="block",E.setAttribute("viewBox","0 0 460 120"),E.setAttribute("preserveAspectRatio","xMinYMin meet"),$.appendChild(E),i.appendChild($);let C=document.createElement("details");C.style.marginBottom="4px";let N=document.createElement("summary");Object.assign(N.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),N.textContent="Timeline",C.appendChild(N);let I=document.createElementNS("http://www.w3.org/2000/svg","svg");I.setAttribute("width","100%"),I.setAttribute("height","60"),I.setAttribute("role","img"),I.setAttribute("aria-label","Resolver execution timeline"),I.style.display="block",I.setAttribute("viewBox",`0 0 ${ne} 60`),I.setAttribute("preserveAspectRatio","xMinYMin meet");let d=document.createElementNS("http://www.w3.org/2000/svg","text");d.setAttribute("x",String(ne/2)),d.setAttribute("y","30"),d.setAttribute("text-anchor","middle"),d.setAttribute("fill",y.muted),d.setAttribute("font-size","10"),d.setAttribute("font-family",y.font),d.textContent="No resolver activity yet",I.appendChild(d),C.appendChild(I),i.appendChild(C);let b,f,e,a;if(r){let z=document.createElement("details");z.style.marginBottom="4px";let Y=document.createElement("summary");Object.assign(Y.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),e=document.createElement("span"),e.textContent="0",Y.textContent="Events (",Y.appendChild(e),Y.appendChild(document.createTextNode(")")),z.appendChild(Y),f=document.createElement("div"),Object.assign(f.style,{maxHeight:"150px",overflow:"auto",fontSize:"10px"}),f.setAttribute("role","log"),f.setAttribute("aria-live","polite"),f.tabIndex=0;let G=document.createElement("div");G.style.color=y.muted,G.style.padding="4px",G.textContent="Waiting for events...",G.className="dt-events-empty",f.appendChild(G),z.appendChild(f),i.appendChild(z),b=z,a=document.createElement("div");}else b=document.createElement("details"),f=document.createElement("div"),e=document.createElement("span"),a=document.createElement("div"),a.style.fontSize="10px",a.style.color=y.muted,a.style.marginTop="4px",a.style.fontStyle="italic",a.textContent="Enable trace: true for event log",i.appendChild(a);let h=document.createElement("div");Object.assign(h.style,{display:"flex",gap:"6px",marginTop:"6px"});let R=document.createElement("button");Object.assign(R.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"8px 12px",borderRadius:"3px",fontFamily:y.font,fontSize:"10px",minWidth:"44px",minHeight:"44px"}),R.textContent="\u23FA Record";let B=document.createElement("button");Object.assign(B.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"8px 12px",borderRadius:"3px",fontFamily:y.font,fontSize:"10px",minWidth:"44px",minHeight:"44px"}),B.textContent="\u2913 Export",h.appendChild(R),h.appendChild(B),i.appendChild(h),i.addEventListener("wheel",z=>{let Y=i,G=Y.scrollTop===0&&z.deltaY<0,K=Y.scrollTop+Y.clientHeight>=Y.scrollHeight&&z.deltaY>0;(G||K)&&z.preventDefault();},{passive:false});let q=o,X=new Set;function W(){q=true,i.style.display="block",t.style.display="none",t.setAttribute("aria-expanded","true"),S.focus();}function U(){q=false,i.style.display="none",t.style.display="block",t.setAttribute("aria-expanded","false"),t.focus();}t.addEventListener("click",W),S.addEventListener("click",U);function ie(z){z.key==="Escape"&&q&&U();}i.addEventListener("keydown",ie);function we(z){z.key==="d"&&z.shiftKey&&(z.ctrlKey||z.metaKey)&&(z.preventDefault(),q?U():W());}document.addEventListener("keydown",we);function ge(){u||(document.body.appendChild(t),document.body.appendChild(i));}document.body?ge():document.addEventListener("DOMContentLoaded",ge,{once:true});function Xe(){u=true,t.removeEventListener("click",W),S.removeEventListener("click",U),i.removeEventListener("keydown",ie),document.removeEventListener("keydown",we),document.removeEventListener("DOMContentLoaded",ge);for(let z of X)clearTimeout(z);X.clear(),t.remove(),i.remove(),l.remove();}return {refs:{container:i,toggleBtn:t,titleEl:p,statusEl:_,factsBody:O.tbody,factsCount:O.countSpan,derivBody:H.tbody,derivCount:H.countSpan,derivSection:H.details,inflightList:A.list,inflightSection:A.details,inflightCount:A.countSpan,unmetList:F.list,unmetSection:F.details,unmetCount:F.countSpan,perfSection:L,perfBody:P,historySection:T,historyLabel:v,undoBtn:w,redoBtn:m,flowSection:$,flowSvg:E,timelineSection:C,timelineSvg:I,eventsSection:b,eventsList:f,eventsCount:e,traceHint:a,recordBtn:R,exportBtn:B},destroy:Xe,isOpen:()=>q,flashTimers:X}}function ae(n,c,o,r,u,g){let l=fe(r),t=n.get(o);if(t){let i=t.cells;if(i[1]&&(i[1].textContent=l,u&&g)){let s=i[1];s.style.background="rgba(139, 154, 255, 0.25)";let p=setTimeout(()=>{s.style.background="",g.delete(p);},300);g.add(p);}}else {t=document.createElement("tr"),t.style.borderBottom=`1px solid ${y.rowBorder}`;let i=document.createElement("td");Object.assign(i.style,{padding:"2px 4px",color:y.muted}),i.textContent=o;let s=document.createElement("td");s.style.padding="2px 4px",s.textContent=l,t.appendChild(i),t.appendChild(s),c.appendChild(t),n.set(o,t);}}function je(n,c){let o=n.get(c);o&&(o.remove(),n.delete(c));}function de(n,c,o){if(n.inflightList.replaceChildren(),n.inflightCount.textContent=String(c.length),c.length>0)for(let r of c){let u=document.createElement("li");u.style.fontSize="11px",u.textContent=`${r.resolverId} (${r.id})`,n.inflightList.appendChild(u);}else {let r=document.createElement("li");r.style.fontSize="10px",r.style.color=y.muted,r.textContent="None",n.inflightList.appendChild(r);}if(n.unmetList.replaceChildren(),n.unmetCount.textContent=String(o.length),o.length>0)for(let r of o){let u=document.createElement("li");u.style.fontSize="11px",u.textContent=`${r.requirement.type} from ${r.fromConstraint}`,n.unmetList.appendChild(u);}else {let r=document.createElement("li");r.style.fontSize="10px",r.style.color=y.muted,r.textContent="None",n.unmetList.appendChild(r);}}function me(n,c,o){let r=c===0&&o===0;n.statusEl.style.color=r?y.green:y.yellow,n.statusEl.textContent=r?"Settled":"Working...",n.toggleBtn.textContent=r?"Directive":"Directive...",n.toggleBtn.setAttribute("aria-label",`Open Directive DevTools${r?"":" (system working)"}`);}function he(n,c,o,r){let u=Object.keys(o.derive);if(n.derivCount.textContent=String(u.length),u.length===0){c.clear(),n.derivBody.replaceChildren();let l=document.createElement("tr"),t=document.createElement("td");t.colSpan=2,t.style.color=y.muted,t.style.fontSize="10px",t.textContent="No derivations defined",l.appendChild(t),n.derivBody.appendChild(l);return}let g=new Set(u);for(let[l,t]of c)g.has(l)||(t.remove(),c.delete(l));for(let l of u){let t;try{t=fe(o.read(l));}catch{t="<error>";}ae(c,n.derivBody,l,t,true,r);}}function Fe(n,c,o,r){let u=n.eventsList.querySelector(".dt-events-empty");u&&u.remove();let g=document.createElement("div");Object.assign(g.style,{padding:"2px 4px",borderBottom:`1px solid ${y.rowBorder}`,fontFamily:"inherit"});let l=new Date,t=`${String(l.getHours()).padStart(2,"0")}:${String(l.getMinutes()).padStart(2,"0")}:${String(l.getSeconds()).padStart(2,"0")}.${String(l.getMilliseconds()).padStart(3,"0")}`,i;try{let k=JSON.stringify(o);i=J(k,60);}catch{i="{}";}let s=document.createElement("span");s.style.color=y.closeBtn,s.textContent=t;let p=document.createElement("span");p.style.color=y.accent,p.textContent=` ${c} `;let S=document.createElement("span");for(S.style.color=y.muted,S.textContent=i,g.appendChild(s),g.appendChild(p),g.appendChild(S),n.eventsList.prepend(g);n.eventsList.childElementCount>Be;)n.eventsList.lastElementChild?.remove();n.eventsCount.textContent=String(r);}function qe(n,c){n.perfBody.replaceChildren();let o=c.reconcileCount>0?(c.reconcileTotalMs/c.reconcileCount).toFixed(1):"\u2014",r=[`Reconciles: ${c.reconcileCount} (avg ${o}ms)`,`Effects: ${c.effectRunCount} run, ${c.effectErrorCount} errors`];for(let u of r){let g=document.createElement("div");g.style.marginBottom="2px",g.textContent=u,n.perfBody.appendChild(g);}if(c.resolverStats.size>0){let u=document.createElement("div");u.style.marginTop="4px",u.style.marginBottom="2px",u.style.color=y.accent,u.textContent="Resolvers:",n.perfBody.appendChild(u);let g=[...c.resolverStats.entries()].sort((l,t)=>t[1].totalMs-l[1].totalMs);for(let[l,t]of g){let i=t.count>0?(t.totalMs/t.count).toFixed(1):"0",s=document.createElement("div");s.style.paddingLeft="8px",s.textContent=`${l}: ${t.count}x, avg ${i}ms${t.errors>0?`, ${t.errors} err`:""}`,t.errors>0&&(s.style.color=y.red),n.perfBody.appendChild(s);}}}function Se(n,c){let o=c.history;if(!o){n.historySection.style.display="none";return}n.historySection.style.display="flex";let r=o.currentIndex,u=o.snapshots.length;n.historyLabel.textContent=u>0?`${r+1} / ${u}`:"0 snapshots";let g=r>0,l=r<u-1;n.undoBtn.disabled=!g,n.undoBtn.style.opacity=g?"1":"0.4",n.redoBtn.disabled=!l,n.redoBtn.style.opacity=l?"1":"0.4";}function Ve(n,c){n.undoBtn.addEventListener("click",()=>{c.history&&c.history.currentIndex>0&&c.history.goBack(1);}),n.redoBtn.addEventListener("click",()=>{c.history&&c.history.currentIndex<c.history.snapshots.length-1&&c.history.goForward(1);});}var xe=new WeakMap;function Qe(n,c,o,r,u,g){return [n.join(","),c.join(","),o.map(l=>`${l.id}:${l.active}`).join(","),[...r.entries()].map(([l,t])=>`${l}:${t.status}:${t.type}`).join(","),u.join(","),g.join(",")].join("|")}function Ze(n,c,o,r,u){for(let g of o){let l=n.nodes.get(`0:${g}`);if(!l)continue;let t=c.recentlyChangedFacts.has(g);l.rect.setAttribute("fill",t?y.text+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}for(let g of r){let l=n.nodes.get(`1:${g}`);if(!l)continue;let t=c.recentlyComputedDerivations.has(g);l.rect.setAttribute("fill",t?y.accent+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}for(let g of u){let l=n.nodes.get(`2:${g}`);if(!l)continue;let t=c.recentlyActiveConstraints.has(g),i=l.rect.getAttribute("stroke")??y.muted;l.rect.setAttribute("fill",t?i+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}}function Ee(n,c,o){let r=te(c);if(!r)return;let u;try{u=Object.keys(c.facts.$store.toObject());}catch{u=[];}let g=Object.keys(c.derive),l=r.constraints,t=r.unmet,i=r.inflight,s=Object.keys(r.resolvers),p=new Map;for(let d of t)p.set(d.id,{type:d.requirement.type,fromConstraint:d.fromConstraint,status:"unmet"});for(let d of i)p.set(d.id,{type:d.resolverId,fromConstraint:"",status:"inflight"});if(u.length===0&&g.length===0&&l.length===0&&s.length===0){xe.delete(n.flowSvg),n.flowSvg.replaceChildren(),n.flowSvg.setAttribute("viewBox","0 0 460 40");let d=document.createElementNS("http://www.w3.org/2000/svg","text");d.setAttribute("x","230"),d.setAttribute("y","24"),d.setAttribute("text-anchor","middle"),d.setAttribute("fill",y.muted),d.setAttribute("font-size","10"),d.setAttribute("font-family",y.font),d.textContent="No system topology",n.flowSvg.appendChild(d);return}let S=i.map(d=>d.resolverId).sort(),k=Qe(u,g,l,p,s,S),_=xe.get(n.flowSvg);if(_&&_.fingerprint===k){Ze(_,o,u,g,l.map(d=>d.id));return}let T=V.nodeW+V.colGap,w=[5,5+T,5+T*2,5+T*3,5+T*4],m=w[4]+V.nodeW+5;function v(d){let b=V.startY+12;return d.map(f=>{let e={...f,y:b};return b+=V.nodeH+V.nodeGap,e})}let D=v(u.map(d=>{let b=r.facts.find(f=>f.key===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),M=v(g.map(d=>{let b=r.derivations.find(f=>f.id===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),O=v(l.map(d=>({id:d.id,label:J(d.meta?.label??d.id,V.labelMaxChars),active:d.active,priority:d.priority}))),H=v([...p.entries()].map(([d,b])=>({id:d,type:b.type,fromConstraint:b.fromConstraint,status:b.status}))),A=v(s.map(d=>{let b=r.resolverDefs.find(f=>f.id===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),F=Math.max(D.length,M.length,O.length,H.length,A.length,1),L=V.startY+12+F*(V.nodeH+V.nodeGap)+8;n.flowSvg.replaceChildren(),n.flowSvg.setAttribute("viewBox",`0 0 ${m} ${L}`),n.flowSvg.setAttribute("aria-label",`Dependency graph: ${u.length} facts, ${g.length} derivations, ${l.length} constraints, ${p.size} requirements, ${s.length} resolvers`);let j=["Facts","Derivations","Constraints","Reqs","Resolvers"];for(let[d,b]of j.entries()){let f=document.createElementNS("http://www.w3.org/2000/svg","text");f.setAttribute("x",String(w[d]??0)),f.setAttribute("y","10"),f.setAttribute("fill",y.accent),f.setAttribute("font-size",String(V.fontSize)),f.setAttribute("font-family",y.font),f.textContent=b,n.flowSvg.appendChild(f);}let P={fingerprint:k,nodes:new Map};function $(d,b,f,e,a,h,R,B,q){let X=document.createElementNS("http://www.w3.org/2000/svg","g");if(q){let ie=document.createElementNS("http://www.w3.org/2000/svg","title");ie.textContent=q,X.appendChild(ie);}let W=document.createElementNS("http://www.w3.org/2000/svg","rect");W.setAttribute("x",String(b)),W.setAttribute("y",String(f-6)),W.setAttribute("width",String(V.nodeW)),W.setAttribute("height",String(V.nodeH)),W.setAttribute("rx","3"),W.setAttribute("fill",B?h+"33":"none"),W.setAttribute("stroke",h),W.setAttribute("stroke-width",B?"2":"1"),W.setAttribute("opacity",R?"0.35":"1"),X.appendChild(W);let U=document.createElementNS("http://www.w3.org/2000/svg","text");return U.setAttribute("x",String(b+4)),U.setAttribute("y",String(f+4)),U.setAttribute("fill",h),U.setAttribute("font-size",String(V.fontSize)),U.setAttribute("font-family",y.font),U.setAttribute("opacity",R?"0.35":"1"),U.textContent=a,X.appendChild(U),n.flowSvg.appendChild(X),P.nodes.set(`${d}:${e}`,{g:X,rect:W,text:U}),{midX:b+V.nodeW/2,midY:f}}function x(d,b,f,e,a,h){let R=document.createElementNS("http://www.w3.org/2000/svg","line");R.setAttribute("x1",String(d)),R.setAttribute("y1",String(b)),R.setAttribute("x2",String(f)),R.setAttribute("y2",String(e)),R.setAttribute("stroke",a),R.setAttribute("stroke-width","1"),R.setAttribute("stroke-dasharray","3,2"),R.setAttribute("opacity","0.7"),n.flowSvg.appendChild(R);}let E=new Map,C=new Map,N=new Map,I=new Map;for(let d of D){let b=o.recentlyChangedFacts.has(d.id),f=r.facts.find(a=>a.key===d.id)?.meta,e=$(0,w[0],d.y,d.id,d.label,y.text,false,b,f?.description);E.set(d.id,e);}for(let d of M){let b=o.recentlyComputedDerivations.has(d.id),f=r.derivations.find(a=>a.id===d.id)?.meta,e=$(1,w[1],d.y,d.id,d.label,y.accent,false,b,f?.description);C.set(d.id,e);}for(let d of O){let b=o.recentlyActiveConstraints.has(d.id),f=l.find(a=>a.id===d.id)?.meta,e=$(2,w[2],d.y,d.id,d.label,f?.color??(d.active?y.yellow:y.muted),!d.active,b,f?.description);N.set(d.id,e);}for(let d of H){let b=d.status==="unmet"?y.red:y.yellow,f=$(3,w[3],d.y,d.id,J(d.type,V.labelMaxChars),b,false,false);I.set(d.id,f);}for(let d of A){let b=i.some(e=>e.resolverId===d.id),f=r.resolverDefs.find(e=>e.id===d.id)?.meta;$(4,w[4],d.y,d.id,d.label,f?.color??(b?y.green:y.muted),!b,false,f?.description);}for(let d of M){let b=o.derivationDeps.get(d.id),f=C.get(d.id);if(b&&f)for(let e of b){let a=E.get(e);a&&x(a.midX+V.nodeW/2,a.midY,f.midX-V.nodeW/2,f.midY,y.accent);}}for(let d of H){let b=N.get(d.fromConstraint),f=I.get(d.id);b&&f&&x(b.midX+V.nodeW/2,b.midY,f.midX-V.nodeW/2,f.midY,y.muted);}for(let d of i){let b=I.get(d.id);if(b){let f=A.find(e=>e.id===d.resolverId);f&&x(b.midX+V.nodeW/2,b.midY,w[4],f.y,y.green);}}xe.set(n.flowSvg,P);}function ze(n){n.animationTimer&&clearTimeout(n.animationTimer),n.animationTimer=setTimeout(()=>{n.recentlyChangedFacts.clear(),n.recentlyComputedDerivations.clear(),n.recentlyActiveConstraints.clear(),n.animationTimer=null;},600);}function We(n,c){let o=c.entries.toArray();if(o.length===0)return;n.timelineSvg.replaceChildren();let r=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY;for(let T of o)T.startMs<r&&(r=T.startMs),T.endMs>u&&(u=T.endMs);let g=performance.now();for(let T of c.inflight.values())T<r&&(r=T),g>u&&(u=g);let l=u-r||1,t=ne-oe-10,i=[],s=new Set;for(let T of o)s.has(T.resolver)||(s.add(T.resolver),i.push(T.resolver));for(let T of c.inflight.keys())s.has(T)||(s.add(T),i.push(T));let S=i.slice(-12),k=re*S.length+20;n.timelineSvg.setAttribute("viewBox",`0 0 ${ne} ${k}`),n.timelineSvg.setAttribute("height",String(Math.min(k,200)));let _=5;for(let T=0;T<=_;T++){let w=oe+t*T/_,m=l*T/_,v=document.createElementNS("http://www.w3.org/2000/svg","text");v.setAttribute("x",String(w)),v.setAttribute("y","8"),v.setAttribute("fill",y.muted),v.setAttribute("font-size","6"),v.setAttribute("font-family",y.font),v.setAttribute("text-anchor","middle"),v.textContent=m<1e3?`${m.toFixed(0)}ms`:`${(m/1e3).toFixed(1)}s`,n.timelineSvg.appendChild(v);let D=document.createElementNS("http://www.w3.org/2000/svg","line");D.setAttribute("x1",String(w)),D.setAttribute("y1","10"),D.setAttribute("x2",String(w)),D.setAttribute("y2",String(k)),D.setAttribute("stroke",y.border),D.setAttribute("stroke-width","0.5"),n.timelineSvg.appendChild(D);}for(let T=0;T<S.length;T++){let w=S[T],m=12+T*re,v=T%ve.length,D=ve[v],M=document.createElementNS("http://www.w3.org/2000/svg","text");M.setAttribute("x",String(oe-4)),M.setAttribute("y",String(m+re/2+3)),M.setAttribute("fill",y.muted),M.setAttribute("font-size","7"),M.setAttribute("font-family",y.font),M.setAttribute("text-anchor","end"),M.textContent=J(w,12),n.timelineSvg.appendChild(M);let O=o.filter(A=>A.resolver===w);for(let A of O){let F=oe+(A.startMs-r)/l*t,L=Math.max((A.endMs-A.startMs)/l*t,be),j=document.createElementNS("http://www.w3.org/2000/svg","rect");j.setAttribute("x",String(F)),j.setAttribute("y",String(m+2)),j.setAttribute("width",String(L)),j.setAttribute("height",String(re-4)),j.setAttribute("rx","2"),j.setAttribute("fill",A.error?y.red:D),j.setAttribute("opacity","0.8");let P=document.createElementNS("http://www.w3.org/2000/svg","title"),$=A.endMs-A.startMs;P.textContent=`${w}: ${$.toFixed(1)}ms${A.error?" (error)":""}`,j.appendChild(P),n.timelineSvg.appendChild(j);}let H=c.inflight.get(w);if(H!==void 0){let A=oe+(H-r)/l*t,F=Math.max((g-H)/l*t,be),L=document.createElementNS("http://www.w3.org/2000/svg","rect");L.setAttribute("x",String(A)),L.setAttribute("y",String(m+2)),L.setAttribute("width",String(F)),L.setAttribute("height",String(re-4)),L.setAttribute("rx","2"),L.setAttribute("fill",D),L.setAttribute("opacity","0.4"),L.setAttribute("stroke",D),L.setAttribute("stroke-width","1"),L.setAttribute("stroke-dasharray","3,2");let j=document.createElementNS("http://www.w3.org/2000/svg","title");j.textContent=`${w}: inflight ${(g-H).toFixed(0)}ms`,L.appendChild(j),n.timelineSvg.appendChild(L);}}n.timelineSvg.setAttribute("aria-label",`Timeline: ${o.length} resolver executions across ${S.length} resolvers`);}function et(){if(typeof window>"u")return {systems:new Map,getSystem:()=>null,getSystems:()=>[],inspect:()=>null,getEvents:()=>[],explain:()=>null,exportSession:()=>null,importSession:()=>false,clearEvents:()=>{},subscribe:()=>()=>{}};if(!window.__DIRECTIVE__){let n=new Map,c={systems:n,getSystem(o){return o?n.get(o)?.system??null:n.values().next().value?.system??null},getSystems(){return [...n.keys()]},inspect(o){let r=this.getSystem(o),u=o?n.get(o):n.values().next().value,g=r?.inspect()??null;return g&&u&&(g.resolverStats=u.resolverStats?Object.fromEntries(u.resolverStats):{}),g},getEvents(o){return o?n.get(o)?.events.toArray()??[]:n.values().next().value?.events.toArray()??[]},explain(o,r){return this.getSystem(r)?.explain(o)??null},subscribe(o,r){let u=r?n.get(r):n.values().next().value;if(!u){let g=false,t=setInterval(()=>{let s=r?n.get(r):n.values().next().value;s&&!g&&(g=true,s.subscribers.add(o));},100),i=setTimeout(()=>clearInterval(t),1e4);return ()=>{clearInterval(t),clearTimeout(i);for(let s of n.values())s.subscribers.delete(o);}}return u.subscribers.add(o),()=>{u.subscribers.delete(o);}},exportSession(o){let r=o?n.get(o):n.values().next().value;return r?JSON.stringify({version:1,name:o??n.keys().next().value??"default",exportedAt:Date.now(),events:r.events.toArray()}):null},importSession(o,r){try{if(o.length>10*1024*1024)return !1;let u=JSON.parse(o);if(!u||typeof u!="object"||Array.isArray(u)||!Array.isArray(u.events))return !1;let g=r?n.get(r):n.values().next().value;if(!g)return !1;let l=g.maxEvents,t=u.events,i=t.length>l?t.length-l:0;g.events.clear();for(let s=i;s<t.length;s++){let p=t[s];p&&typeof p=="object"&&!Array.isArray(p)&&typeof p.timestamp=="number"&&typeof p.type=="string"&&p.type!=="__proto__"&&p.type!=="constructor"&&p.type!=="prototype"&&g.events.push({timestamp:p.timestamp,type:p.type,data:p.data??null});}return !0}catch{return false}},clearEvents(o){let r=o?n.get(o):n.values().next().value;r&&r.events.clear();}};return Object.defineProperty(window,"__DIRECTIVE__",{value:c,writable:false,configurable:ue(),enumerable:true}),c}return window.__DIRECTIVE__}function tt(n={}){let{name:c="default",trace:o=false,maxEvents:r,panel:u=false,position:g="bottom-right",defaultOpen:l=false}=n,t=Oe(r),i=et(),s={system:null,events:new se(t),maxEvents:t,subscribers:new Set,resolverStats:new Map};i.systems.set(c,s);let p=(e,a)=>{let h={timestamp:Date.now(),type:e,data:a};o&&s.events.push(h);for(let R of s.subscribers)try{R(h);}catch{}},S=null,k=new Map,_=new Map,T=Le(),w=Ie(),m=$e(),v=Pe(),D=u&&typeof window<"u"&&typeof document<"u"&&ue(),M=null,O=0,H=1,A=2,F=4,L=8,j=16,P=32,$=64,x=128,E=new Map,C=new Set,N=null;function I(e){O|=e,M===null&&typeof requestAnimationFrame<"u"&&(M=requestAnimationFrame(d));}function d(){if(M=null,!S||!s.system){O=0;return}let e=S.refs,a=s.system,h=O;if(O=0,h&H){for(let R of C)je(k,R);C.clear();for(let[R,{value:B,flash:q}]of E)ae(k,e.factsBody,R,B,q,S.flashTimers);E.clear(),e.factsCount.textContent=String(k.size);}if(h&A&&he(e,_,a,S.flashTimers),h&L)if(N)me(e,N.inflight.length,N.unmet.length);else {let R=te(a);R&&me(e,R.inflight.length,R.unmet.length);}if(h&F)if(N)de(e,N.inflight,N.unmet);else {let R=te(a);R&&de(e,R.inflight,R.unmet);}h&j&&qe(e,T),h&P&&Ee(e,a,w),h&$&&Se(e,a),h&x&&We(e,v);}function b(e,a){S&&o&&Fe(S.refs,e,a,s.events.size);}function f(e,a){m.isRecording&&m.recordedEvents.length<_e&&m.recordedEvents.push({timestamp:Date.now(),type:e,data:ke(a)});}return {name:"devtools",onInit:e=>{if(s.system=e,p("init",{}),typeof window<"u"&&console.log(`%c[Directive Devtools]%c System "${c}" initialized. Access via window.__DIRECTIVE__`,"color: #7c3aed; font-weight: bold","color: inherit"),D){let a=s.system;S=He(c,g,l,o);let h=S.refs;try{let B=a.facts.$store.toObject();for(let[q,X]of Object.entries(B))ae(k,h.factsBody,q,X,!1);h.factsCount.textContent=String(Object.keys(B).length);}catch{}he(h,_,a);let R=te(a);R&&(me(h,R.inflight.length,R.unmet.length),de(h,R.inflight,R.unmet)),Se(h,a),Ve(h,a),Ee(h,a,w),h.recordBtn.addEventListener("click",()=>{if(m.isRecording=!m.isRecording,h.recordBtn.textContent=m.isRecording?"\u23F9 Stop":"\u23FA Record",h.recordBtn.style.color=m.isRecording?y.red:y.text,m.isRecording){m.recordedEvents=[],m.snapshots=[];try{m.snapshots.push({timestamp:Date.now(),facts:a.facts.$store.toObject()});}catch{}}}),h.exportBtn.addEventListener("click",()=>{let B=m.recordedEvents.length>0?m.recordedEvents:s.events.toArray(),q=JSON.stringify({version:1,name:c,exportedAt:Date.now(),events:B,snapshots:m.snapshots},null,2),X=new Blob([q],{type:"application/json"}),W=URL.createObjectURL(X),U=document.createElement("a");U.href=W,U.download=`directive-session-${c}-${Date.now()}.json`,U.click(),URL.revokeObjectURL(W);});}},onStart:e=>{p("start",{}),b("start",{}),f("start",{});},onStop:e=>{p("stop",{}),b("stop",{}),f("stop",{});},onDestroy:e=>{p("destroy",{}),i.systems.delete(c),M!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(M),M=null),w.animationTimer&&clearTimeout(w.animationTimer),S&&(S.destroy(),S=null,k.clear(),_.clear());},onFactSet:(e,a,h)=>{p("fact.set",{key:e,value:a,prev:h}),f("fact.set",{key:e,value:a,prev:h}),w.recentlyChangedFacts.add(e),S&&s.system&&(E.set(e,{value:a,flash:true}),C.delete(e),I(H),b("fact.set",{key:e,value:a}));},onFactDelete:(e,a)=>{p("fact.delete",{key:e,prev:a}),f("fact.delete",{key:e,prev:a}),S&&(C.add(e),E.delete(e),I(H),b("fact.delete",{key:e}));},onFactsBatch:e=>{if(p("facts.batch",{changes:e}),f("facts.batch",{count:e.length}),S&&s.system){for(let a of e)a.type==="delete"?(C.add(a.key),E.delete(a.key)):(w.recentlyChangedFacts.add(a.key),E.set(a.key,{value:a.value,flash:true}),C.delete(a.key));I(H),b("facts.batch",{count:e.length});}},onDerivationCompute:(e,a,h)=>{p("derivation.compute",{id:e,value:a,deps:h}),f("derivation.compute",{id:e,deps:h}),w.derivationDeps.set(e,h),w.recentlyComputedDerivations.add(e),b("derivation.compute",{id:e,deps:h});},onDerivationInvalidate:e=>{p("derivation.invalidate",{id:e}),b("derivation.invalidate",{id:e});},onReconcileStart:e=>{p("reconcile.start",{}),T.lastReconcileStartMs=performance.now(),b("reconcile.start",{}),f("reconcile.start",{});},onReconcileEnd:e=>{if(p("reconcile.end",e),f("reconcile.end",{unmet:e.unmet.length,inflight:e.inflight.length,completed:e.completed.length}),T.lastReconcileStartMs>0){let a=performance.now()-T.lastReconcileStartMs;T.reconcileCount++,T.reconcileTotalMs+=a,T.lastReconcileStartMs=0;}if(m.isRecording&&s.system&&m.snapshots.length<Ne)try{m.snapshots.push({timestamp:Date.now(),facts:s.system.facts.$store.toObject()});}catch{}S&&s.system&&(N=e,ze(w),I(A|L|F|j|P|$),b("reconcile.end",{unmet:e.unmet.length,inflight:e.inflight.length}));},onConstraintEvaluate:(e,a,h)=>{let R=s.system?.meta?.constraint(e)?.label,B=R?{id:e,active:a,label:R}:{id:e,active:a},q=h?{...B,whenExplain:h}:B;p("constraint.evaluate",q),f("constraint.evaluate",q),a?(w.activeConstraints.add(e),w.recentlyActiveConstraints.add(e)):w.activeConstraints.delete(e),b("constraint.evaluate",{id:e,active:a});},onConstraintError:(e,a)=>{p("constraint.error",{id:e,error:String(a)}),b("constraint.error",{id:e,error:String(a)});},onRequirementCreated:e=>{p("requirement.created",{id:e.id,type:e.requirement.type}),f("requirement.created",{id:e.id,type:e.requirement.type}),b("requirement.created",{id:e.id,type:e.requirement.type});},onRequirementMet:(e,a)=>{p("requirement.met",{id:e.id,byResolver:a}),f("requirement.met",{id:e.id,byResolver:a}),b("requirement.met",{id:e.id,byResolver:a});},onRequirementCanceled:e=>{p("requirement.canceled",{id:e.id}),f("requirement.canceled",{id:e.id}),b("requirement.canceled",{id:e.id});},onResolverStart:(e,a)=>{let h=s.system?.meta?.resolver(e)?.label,R={resolver:e,requirementId:a.id},B=h?{...R,label:h}:R;p("resolver.start",B),f("resolver.start",B),v.inflight.set(e,performance.now()),S&&s.system&&(I(F|L|x),b("resolver.start",{resolver:e,requirementId:a.id}));},onResolverComplete:(e,a,h)=>{let R=s.system?.meta?.resolver(e)?.label;p("resolver.complete",{resolver:e,requirementId:a.id,duration:h,...R?{label:R}:{}}),f("resolver.complete",{resolver:e,requirementId:a.id,duration:h});let B=s.resolverStats.get(e)??{count:0,totalMs:0,errors:0};if(B.count++,B.totalMs+=h,s.resolverStats.set(e,B),s.resolverStats.size>ye){let X=s.resolverStats.keys().next().value;X!==void 0&&s.resolverStats.delete(X);}T.resolverStats.set(e,{...B});let q=v.inflight.get(e);v.inflight.delete(e),q!==void 0&&v.entries.push({resolver:e,startMs:q,endMs:performance.now(),error:false}),S&&s.system&&(I(F|L|j|x),b("resolver.complete",{resolver:e,duration:h}));},onResolverError:(e,a,h)=>{p("resolver.error",{resolver:e,requirementId:a.id,error:String(h)}),f("resolver.error",{resolver:e,requirementId:a.id,error:String(h)});let R=s.resolverStats.get(e)??{count:0,totalMs:0,errors:0};if(R.errors++,s.resolverStats.set(e,R),s.resolverStats.size>ye){let q=s.resolverStats.keys().next().value;q!==void 0&&s.resolverStats.delete(q);}T.resolverStats.set(e,{...R});let B=v.inflight.get(e);v.inflight.delete(e),B!==void 0&&v.entries.push({resolver:e,startMs:B,endMs:performance.now(),error:true}),S&&s.system&&(I(F|L|j|x),b("resolver.error",{resolver:e,error:String(h)}));},onResolverRetry:(e,a,h)=>{p("resolver.retry",{resolver:e,requirementId:a.id,attempt:h}),f("resolver.retry",{resolver:e,requirementId:a.id,attempt:h}),b("resolver.retry",{resolver:e,attempt:h});},onResolverCancel:(e,a)=>{p("resolver.cancel",{resolver:e,requirementId:a.id}),f("resolver.cancel",{resolver:e,requirementId:a.id}),v.inflight.delete(e),b("resolver.cancel",{resolver:e});},onResolverWriteRejected:e=>{let a=e.kind==="summary"?{kind:e.kind,resolver:e.resolver,requirementId:e.req.id,reason:e.reason,dropped:e.dropped}:{kind:e.kind,resolver:e.resolver,requirementId:e.req.id,reason:e.reason,fact:e.fact,expected:e.expected,actual:e.actual};p("resolver.write.rejected",a),f("resolver.write.rejected",a),b("resolver.write.rejected",e.kind==="summary"?{resolver:e.resolver,dropped:e.dropped}:{resolver:e.resolver,fact:e.fact});},onEffectRun:e=>{let a=s.system?.meta?.effect(e)?.label,h=a?{id:e,label:a}:{id:e};p("effect.run",h),f("effect.run",h),T.effectRunCount++,b("effect.run",{id:e});},onEffectError:(e,a)=>{p("effect.error",{id:e,error:String(a)}),T.effectErrorCount++,b("effect.error",{id:e,error:String(a)});},onSnapshot:e=>{p("timetravel.snapshot",{id:e.id,trigger:e.trigger}),S&&s.system&&I($),b("timetravel.snapshot",{id:e.id,trigger:e.trigger});},onHistoryNavigate:(e,a)=>{if(p("timetravel.jump",{from:e,to:a}),f("timetravel.jump",{from:e,to:a}),S&&s.system){let h=s.system;try{let R=h.facts.$store.toObject();k.clear(),S.refs.factsBody.replaceChildren();for(let[B,q]of Object.entries(R))ae(k,S.refs.factsBody,B,q,!1);S.refs.factsCount.textContent=String(Object.keys(R).length);}catch{}_.clear(),w.derivationDeps.clear(),S.refs.derivBody.replaceChildren(),N=null,I(A|L|F|P|$),b("timetravel.jump",{from:e,to:a});}},onError:e=>{p("error",{source:e.source,sourceId:e.sourceId,message:e.message}),f("error",{source:e.source,message:e.message}),b("error",{source:e.source,message:e.message});},onErrorRecovery:(e,a)=>{p("error.recovery",{source:e.source,sourceId:e.sourceId,strategy:a}),b("error.recovery",{source:e.source,strategy:a});},onTraceComplete:e=>{p("trace.complete",{id:e.id,status:e.status,facts:e.factChanges.length,constraints:e.constraintsHit.length,requirements:e.requirementsAdded.length,resolvers:e.resolversStarted.length,effects:e.effectsRun.length}),b("trace.complete",{id:e.id});},onDefinitionRegister:(e,a)=>{p("definition.register",{type:e,id:a}),f("definition.register",{type:e,id:a}),b("definition.register",{type:e,id:a});},onDefinitionAssign:(e,a)=>{p("definition.assign",{type:e,id:a}),f("definition.assign",{type:e,id:a}),b("definition.assign",{type:e,id:a});},onDefinitionUnregister:(e,a)=>{p("definition.unregister",{type:e,id:a}),f("definition.unregister",{type:e,id:a}),b("definition.unregister",{type:e,id:a});},onDefinitionCall:(e,a,h)=>{p("definition.call",{type:e,id:a,props:h}),f("definition.call",{type:e,id:a,props:h}),b("definition.call",{type:e,id:a,props:h});}}}var Ge="directive-devtools-event",Ue=new Set(["__proto__","constructor","prototype"]),nt=Math.random().toString(36).slice(2,8);function rt(){if(typeof window<"u"){let n=`__DIRECTIVE_BRIDGE_ID_${nt}__`,c=window,o=c[n]??0;return c[n]=o+1,o+1}return 1}function ot(n){let c=false;for(let r of Ue)if(r in n){c=true;break}if(!c)return n;let o=Object.create(null);for(let[r,u]of Object.entries(n))Ue.has(r)||(o[r]=u);return o}function it(n){if(!(typeof window>"u"))try{let c=ot(n),o={id:rt(),timestamp:Date.now(),snapshotId:null,...c};window.dispatchEvent(new CustomEvent(Ge,{detail:o}));}catch{}}function st(n){let{storage:c,key:o,include:r,exclude:u=[],debounce:g=100,onRestore:l,onSave:t,onError:i}=n,s=null,p=null,S=new Set,k=m=>u.includes(m)?false:r?r.includes(m):true,_=()=>{try{let m=c.getItem(o);if(!m)return null;let v=JSON.parse(m);return typeof v!="object"||v===null?null:e(v)?v:(i?.(new Error("Potential prototype pollution detected in stored data")),null)}catch(m){return i?.(m instanceof Error?m:new Error(String(m))),null}},T=()=>{if(p)try{let m={};for(let v of S)k(v)&&(m[v]=p.facts[v]);c.setItem(o,JSON.stringify(m)),t?.(m);}catch(m){i?.(m instanceof Error?m:new Error(String(m)));}},w=()=>{s&&clearTimeout(s),s=setTimeout(T,g);};return {name:"persistence",onInit:m=>{p=m;let v=_();v&&(p.facts.$store.batch(()=>{for(let[D,M]of Object.entries(v))k(D)&&(p.facts[D]=M,S.add(D));}),l?.(v));},onDestroy:()=>{s&&clearTimeout(s),T();},onFactSet:m=>{S.add(m),k(m)&&w();},onFactDelete:m=>{S.delete(m),k(m)&&w();},onFactsBatch:m=>{let v=false;for(let D of m)D.type==="set"?S.add(D.key):S.delete(D.key),k(D.key)&&(v=true);v&&w();}}}function at(n={}){let{onSlowConstraint:c,onSlowResolver:o,slowConstraintThresholdMs:r=16,slowResolverThresholdMs:u=1e3}=n,g=new Map,l=new Map,t=new Map,i={runs:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0},s=0,p=0,S=0;function k(m){let v=g.get(m);return v||(v={evaluations:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0,lastEvaluatedAt:0},g.set(m,v)),v}function _(m){let v=l.get(m);return v||(v={starts:0,completions:0,errors:0,retries:0,cancellations:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0,lastCompletedAt:0},l.set(m,v)),v}function T(m){let v=t.get(m);return v||(v={runs:0,errors:0,lastRunAt:0},t.set(m,v)),v}let w={name:"performance",onStart(){s=Date.now();},onConstraintEvaluate(m,v){let D=performance.now(),M=k(m);if(M.evaluations++,M.lastEvaluatedAt=Date.now(),S>0){let O=D-S;M.totalDurationMs+=O;let H=M.evaluations;M.avgDurationMs=M.totalDurationMs/H,O>M.maxDurationMs&&(M.maxDurationMs=O),O>r&&c?.(m,O);}S=D;},onResolverStart(m,v){let D=_(m);D.starts++;},onResolverComplete(m,v,D){let M=_(m);M.completions++,M.totalDurationMs+=D,M.avgDurationMs=M.totalDurationMs/M.completions,D>M.maxDurationMs&&(M.maxDurationMs=D),M.lastCompletedAt=Date.now(),D>u&&o?.(m,D);},onResolverError(m,v,D){_(m).errors++;},onResolverRetry(m,v,D){_(m).retries++;},onResolverCancel(m,v){_(m).cancellations++;},onEffectRun(m){let v=T(m);v.runs++,v.lastRunAt=Date.now();},onEffectError(m,v){T(m).errors++;},onReconcileStart(){p=performance.now(),S=0;},onReconcileEnd(){let m=performance.now()-p;i.runs++,i.totalDurationMs+=m,i.avgDurationMs=i.totalDurationMs/i.runs,m>i.maxDurationMs&&(i.maxDurationMs=m);},onDestroy(){w.reset();},getSnapshot(){let m={};for(let[M,O]of g)m[M]={...O};let v={};for(let[M,O]of l)v[M]={...O};let D={};for(let[M,O]of t)D[M]={...O};return {constraints:m,resolvers:v,effects:D,reconcile:{...i},uptime:s?Date.now()-s:0}},reset(){g.clear(),l.clear(),t.clear(),i.runs=0,i.totalDurationMs=0,i.avgDurationMs=0,i.maxDurationMs=0,S=0;}};return w}function pe(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Ce(n,c){if(n.length===0)return 0;let o=[...n].sort((u,g)=>u-g),r=Math.ceil(c/100*o.length)-1;return o[Math.max(0,r)]??0}function ct(n={}){let{serviceName:c="directive-agents",metrics:o={},tracing:r={},alerts:u=[],summaryMetrics:g={},events:l={}}=n,t={requests:g.requests??"agent.requests",errors:g.errors??"agent.errors",latency:g.latency??"agent.latency",tokens:g.tokens??"agent.tokens",cost:g.cost??"agent.cost"},{enabled:i=true,exportInterval:s,exporter:p,maxDataPoints:S=1e3}=o,{enabled:k=true,sampleRate:_=1,maxSpans:T=1e3,exporter:w}=r,m=Date.now(),v=new Map,D=new Map,M=[],O=[],H=new Map,A=new Map,F;s&&(p||w)&&(F=setInterval(async()=>{try{if(p&&i&&await p(Array.from(A.values())),w&&k){let x=M.splice(0,100);x.length>0&&await w(x);}}catch(x){console.error("[Directive Observability] Export error:",x);}},s));function L(x){if(!i)return;let E=`${x.name}:${JSON.stringify(Object.fromEntries(Object.entries(x.labels).sort()))}`,C=v.get(E);C||(C=[],v.set(E,C)),C.push(x),C.length>S&&C.shift(),j(x.name,C),l.onMetricRecorded?.(x),P(x.name);}function j(x,E){if(E.length===0)return;let C=E.map(f=>f.value),N=C.reduce((f,e)=>f+e,0),I=E[0],d=C[C.length-1],b={name:x,type:I.type,count:E.length,sum:N,min:Math.min(...C),max:Math.max(...C),avg:N/E.length,lastValue:d,lastUpdated:Date.now()};A.set(x,b);}function P(x){for(let E of u){if(E.metric!==x)continue;let C=A.get(x);if(!C)continue;let N=`${E.metric}:${E.threshold}`,I=H.get(N),d=E.cooldownMs??6e4;if(I&&Date.now()-I<d)continue;let b=E.operator??">",f=C.lastValue,e=E.threshold,a=false;switch(b){case ">":a=f>e;break;case "<":a=f<e;break;case ">=":a=f>=e;break;case "<=":a=f<=e;break;case "==":a=f===e;break}if(a){let h={alertId:pe(),metric:x,currentValue:f,threshold:e,operator:b,action:E.action,timestamp:Date.now(),message:`Alert: ${x} ${b} ${e} (current: ${f})`};switch(O.push(h),O.length>1e3&&O.splice(0,O.length-1e3),H.set(N,Date.now()),l.onAlert?.(h),E.action){case "log":console.log(`[Observability] ${h.message}`);break;case "warn":console.warn(`[Observability] ${h.message}`);break;case "alert":console.error(`[Observability ALERT] ${h.message}`);break;case "callback":E.callback?.(C,e);break}}}}function $(x){let E=[];for(let[C,N]of v)if(C.startsWith(`${x}:`))for(let I of N)E.push(I.value);return E.length===0?{}:{p50:Ce(E,50),p90:Ce(E,90),p99:Ce(E,99)}}return {incrementCounter(x,E={},C=1){L({name:x,type:"counter",value:C,labels:E,timestamp:Date.now()});},setGauge(x,E,C={}){L({name:x,type:"gauge",value:E,labels:C,timestamp:Date.now()});},observeHistogram(x,E,C={}){L({name:x,type:"histogram",value:E,labels:C,timestamp:Date.now()});},startSpan(x,E){if(Math.random()>_)return {traceId:"sampled-out",spanId:"sampled-out",operationName:x,serviceName:c,startTime:Date.now(),status:"ok",tags:{},logs:[]};let C={traceId:E?D.get(E)?.traceId??pe():pe(),spanId:pe(),parentSpanId:E,operationName:x,serviceName:c,startTime:Date.now(),status:"ok",tags:{},logs:[]};return k&&(D.set(C.spanId,C),l.onSpanStart?.(C)),C},endSpan(x,E="ok"){if(x==="sampled-out")return;let C=D.get(x);if(C){for(C.endTime=Date.now(),C.duration=C.endTime-C.startTime,C.status=E,D.delete(x),M.push(C);M.length>T;)M.shift();L({name:`${C.operationName}.latency`,type:"histogram",value:C.duration,labels:{},timestamp:Date.now()}),E==="error"&&L({name:`${C.operationName}.errors`,type:"counter",value:1,labels:{},timestamp:Date.now()}),l.onSpanEnd?.(C);}},addSpanLog(x,E,C="info"){if(x==="sampled-out")return;let N=D.get(x);N&&N.logs.push({timestamp:Date.now(),message:E,level:C});},addSpanTag(x,E,C){if(x==="sampled-out")return;let N=D.get(x);N&&(N.tags[E]=C);},getDashboard(){let x=A.get(t.requests),E=A.get(t.errors),C=A.get(t.latency),N=A.get(t.tokens),I=A.get(t.cost),d=x?.sum??0,b=E?.sum??0,f=d>0?b/d:0,e=C?$(t.latency):{};return {service:{name:c,uptime:Date.now()-m,startTime:m},metrics:Object.fromEntries(A),traces:[...M].slice(-100),alerts:[...O].slice(-50),summary:{totalRequests:d,totalErrors:b,errorRate:f,avgLatency:C?.avg??0,p99Latency:e.p99??0,activeSpans:D.size,totalTokens:N?.sum??0,totalCost:I?.sum??0}}},getMetric(x){let E=A.get(x);if(!E)return;let C=$(x);return {...E,...C}},getTraces(x=100){return [...M].slice(-x)},getAlerts(){return [...O]},export(){return {metrics:Array.from(A.values()),traces:[...M],alerts:[...O]}},clear(){v.clear(),A.clear(),D.clear(),M.length=0,O.length=0,H.clear();},async destroy(){F&&(clearInterval(F),F=void 0);try{p&&i&&A.size>0&&await p(Array.from(A.values())),w&&k&&M.length>0&&await w([...M]);}catch(x){console.error("[Directive Observability] Error flushing data during destroy:",x);}v.clear(),A.clear(),D.clear(),M.length=0,O.length=0,H.clear();},getHealthStatus(){let x=A.get(t.requests),E=A.get(t.errors),C=x?.sum??0,N=E?.sum??0,I=C>0?N/C:0,d=O.filter(b=>Date.now()-b.timestamp<3e5).length;return {healthy:I<.1&&d===0,uptime:Date.now()-m,errorRate:I,activeAlerts:d}}}}function lt(n){return {trackRun(c,o){let r={agent:c};n.incrementCounter("agent.requests",r),o.success||n.incrementCounter("agent.errors",r),n.observeHistogram("agent.latency",o.latencyMs,r),o.inputTokens!==void 0&&(n.incrementCounter("agent.tokens.input",r,o.inputTokens),n.incrementCounter("agent.tokens",r,o.inputTokens)),o.outputTokens!==void 0&&(n.incrementCounter("agent.tokens.output",r,o.outputTokens),n.incrementCounter("agent.tokens",r,o.outputTokens)),o.cost!==void 0&&n.incrementCounter("agent.cost",r,o.cost),o.toolCalls!==void 0&&n.incrementCounter("agent.tool_calls",r,o.toolCalls);},trackGuardrail(c,o){let r={guardrail:c};n.incrementCounter("guardrail.checks",r),o.passed||n.incrementCounter("guardrail.failures",r),o.blocked&&n.incrementCounter("guardrail.blocks",r),n.observeHistogram("guardrail.latency",o.latencyMs,r);},trackApproval(c,o){let r={tool:c};n.incrementCounter("approval.requests",r),o.approved?n.incrementCounter("approval.approved",r):n.incrementCounter("approval.rejected",r),o.timedOut&&n.incrementCounter("approval.timeouts",r),n.observeHistogram("approval.wait_time",o.waitTimeMs,r);},trackHandoff(c,o,r){n.incrementCounter("handoff.count",{from:c,to:o}),n.observeHistogram("handoff.latency",r);}}}function ut(n){let c=[{key:"service.name",value:{stringValue:n.serviceName??"directive-agents"}}];if(n.serviceVersion&&c.push({key:"service.version",value:{stringValue:n.serviceVersion}}),n.resourceAttributes)for(let[o,r]of Object.entries(n.resourceAttributes))c.push({key:o,value:{stringValue:r}});return {attributes:c}}function Z(n){return `${BigInt(n)*BigInt(1e6)}`}function dt(n){switch(n){case "counter":return "sum";case "gauge":return "gauge";case "histogram":return "histogram";default:return "gauge"}}function mt(n,c,o){let r=n.map(u=>{let g=u.lastUpdated-6e4,l=[{asInt:u.type==="counter"?u.sum:void 0,asDouble:u.type!=="counter"?u.lastValue:void 0,timeUnixNano:Z(u.lastUpdated),startTimeUnixNano:Z(g),attributes:[]}],t=dt(u.type),i={name:u.name,unit:""};return t==="sum"?i.sum={dataPoints:l,aggregationTemporality:2,isMonotonic:true}:t==="histogram"?i.histogram={dataPoints:[{count:u.count,sum:u.sum,min:u.min,max:u.max,timeUnixNano:Z(u.lastUpdated),startTimeUnixNano:Z(g),attributes:[]}],aggregationTemporality:2}:i.gauge={dataPoints:l},i});return {resourceMetrics:[{resource:c,scopeMetrics:[{scope:{name:"directive",version:o},metrics:r}]}]}}function pt(n,c,o){let r=n.map(u=>{let g=u.logs.map(i=>({timeUnixNano:Z(i.timestamp),name:i.level,attributes:[{key:"message",value:{stringValue:i.message}},{key:"level",value:{stringValue:i.level}}]})),l=Object.entries(u.tags).map(([i,s])=>({key:i,value:typeof s=="string"?{stringValue:s}:typeof s=="number"?{intValue:`${s}`}:{boolValue:s}})),t=u.status==="ok"?1:u.status==="error"?2:0;return {traceId:u.traceId.replace(/-/g,"").padEnd(32,"0").slice(0,32),spanId:u.spanId.replace(/-/g,"").padEnd(16,"0").slice(0,16),parentSpanId:u.parentSpanId?u.parentSpanId.replace(/-/g,"").padEnd(16,"0").slice(0,16):void 0,name:u.operationName,kind:1,startTimeUnixNano:Z(u.startTime),endTimeUnixNano:u.endTime?Z(u.endTime):Z(u.startTime),attributes:l,events:g,status:{code:t}}});return {resourceSpans:[{resource:c,scopeSpans:[{scope:{name:"directive",version:o},spans:r}]}]}}function gt(n){let{endpoint:c,headers:o={},scopeVersion:r="0.1.0",timeoutMs:u=1e4,fetch:g=globalThis.fetch,onError:l}=n;try{let s=new URL(c);if(s.protocol!=="http:"&&s.protocol!=="https:")throw new Error("[Directive] Only http: and https: protocols are supported")}catch(s){throw new Error(`[Directive OTLP] Invalid endpoint URL "${c}": ${s instanceof Error?s.message:String(s)}`)}if(/\/v1\/(metrics|traces)/.test(c)&&console.warn(`[Directive OTLP] Endpoint "${c}" already contains a /v1/metrics or /v1/traces path. The exporter will append /v1/metrics or /v1/traces automatically. Use the base URL (e.g., "http://localhost:4318") instead.`),u<=0||!Number.isFinite(u))throw new Error(`[Directive OTLP] timeoutMs must be > 0, got ${u}`);let t=ut(n);async function i(s,p,S){let k=`${c.replace(/\/$/,"")}${s}`,_=new AbortController,T=setTimeout(()=>_.abort(),u);try{let w=await g(k,{method:"POST",headers:{"Content-Type":"application/json",...o},body:JSON.stringify(p),signal:_.signal});if(!w.ok)throw new Error(`[Directive] OTLP export failed: ${w.status} ${w.statusText}`)}catch(w){let m=w instanceof Error?w:new Error(String(w));l?l(m,S):console.error(`[Directive OTLP] Export ${S} error:`,m.message);}finally{clearTimeout(T);}}return {async exportMetrics(s){if(s.length===0)return;let p=mt(s,t,r);await i("/v1/metrics",p,"metrics");},async exportTraces(s){if(s.length===0)return;let p=pt(s,t,r);await i("/v1/traces",p,"traces");}}}var ce=class extends Error{code="CIRCUIT_OPEN";retryAfterMs;state;constructor(c,o,r="OPEN",u){let g=u?`[Directive CircuitBreaker] Circuit "${c}" is ${r}. ${u}`:`[Directive CircuitBreaker] Circuit "${c}" is ${r}. Request rejected. Try again in ${Math.ceil(o/1e3)}s.`;super(g),this.name="CircuitBreakerOpenError",this.retryAfterMs=o,this.state=r;}};function ft(n={}){let{failureThreshold:c=5,recoveryTimeMs:o=3e4,halfOpenMaxRequests:r=3,failureWindowMs:u=6e4,observability:g,metricPrefix:l="circuit_breaker",name:t="default",isFailure:i=()=>true,onStateChange:s}=n;if(c<1||!Number.isFinite(c))throw new Error(`[Directive CircuitBreaker] failureThreshold must be >= 1, got ${c}`);if(o<=0||!Number.isFinite(o))throw new Error(`[Directive CircuitBreaker] recoveryTimeMs must be > 0, got ${o}`);if(r<1||!Number.isFinite(r))throw new Error(`[Directive CircuitBreaker] halfOpenMaxRequests must be >= 1, got ${r}`);if(u<=0||!Number.isFinite(u))throw new Error(`[Directive CircuitBreaker] failureWindowMs must be > 0, got ${u}`);let p="CLOSED",S=[],k=0,_=0,T=Date.now(),w=0,m=0,v=0,D=0,M=0,O=null,H=null;function A(P){if(p===P)return;let $=p;p=P,T=Date.now(),P==="OPEN"&&(w=Date.now()),P==="HALF_OPEN"&&(k=0,_=0),s?.($,P),g&&g.incrementCounter(`${l}.state_change`,{name:t,from:$,to:P});}function F(){let P=Date.now()-u;return S=S.filter($=>$>P),S.length}function L(){D++,H=Date.now(),g&&g.incrementCounter(`${l}.success`,{name:t}),p==="HALF_OPEN"&&(_++,_>=r&&(A("CLOSED"),S=[]));}function j(P){if(!i(P)){L();return}v++,O=Date.now(),S.push(Date.now());let $=c*2;if(S.length>$&&(S=S.slice(-$)),g&&g.incrementCounter(`${l}.failure`,{name:t}),p==="HALF_OPEN"){A("OPEN");return}p==="CLOSED"&&F()>=c&&A("OPEN");}return {async execute(P){if(m++,g&&g.incrementCounter(`${l}.requests`,{name:t}),p==="OPEN")if(Date.now()-w>=o)A("HALF_OPEN");else throw M++,g&&g.incrementCounter(`${l}.rejected`,{name:t}),new ce(t,o-(Date.now()-w));if(p==="HALF_OPEN"){if(k>=r)throw M++,new ce(t,o,"HALF_OPEN",`Max trial requests (${r}) reached.`);k++;}let $=Date.now();try{let x=await P();return L(),g&&g.observeHistogram(`${l}.latency`,Date.now()-$,{name:t}),x}catch(x){let E=x instanceof Error?x:new Error(String(x));throw j(E),g&&g.observeHistogram(`${l}.latency`,Date.now()-$,{name:t}),x}},getState(){return p==="OPEN"&&Date.now()-w>=o&&A("HALF_OPEN"),p},getStats(){return {state:this.getState(),totalRequests:m,totalFailures:v,totalSuccesses:D,totalRejected:M,recentFailures:F(),lastFailureTime:O,lastSuccessTime:H,lastStateChange:T}},forceState(P){A(P);},reset(){let P=p;p="CLOSED",S=[],k=0,_=0,T=Date.now(),w=0,m=0,v=0,D=0,M=0,O=null,H=null,P!=="CLOSED"&&s?.(P,"CLOSED");},isAllowed(){return p==="CLOSED"?true:p==="OPEN"?Date.now()-w>=o:k<r}}}
|
|
2
|
-
export{
|
|
1
|
+
import {e}from'../chunk-T6IJUWYR.js';var Oe={debug:0,info:1,warn:2,error:3};function rt(e={}){let{level:s="info",filter:o=()=>true,logger:r=console,prefix:a="[Directive]"}=e,p=Oe[s],l=(t,i,...c)=>{Oe[t]<p||o(i)&&r[t](`${a} ${i}`,...c);};return {name:"logging",onInit:()=>l("debug","init"),onStart:()=>l("info","start"),onStop:()=>l("info","stop"),onDestroy:()=>l("debug","destroy"),onFactSet:(t,i,c)=>{l("debug","fact.set",{key:t,value:i,prev:c});},onFactDelete:(t,i)=>{l("debug","fact.delete",{key:t,prev:i});},onFactsBatch:t=>{l("debug","facts.batch",{count:t.length,changes:t});},onDerivationCompute:(t,i,c)=>{l("debug","derivation.compute",{id:t,value:i,deps:c});},onDerivationInvalidate:t=>{l("debug","derivation.invalidate",{id:t});},onReconcileStart:()=>{l("debug","reconcile.start");},onReconcileEnd:t=>{l("debug","reconcile.end",{unmet:t.unmet.length,inflight:t.inflight.length,completed:t.completed.length,canceled:t.canceled.length});},onConstraintEvaluate:(t,i,c)=>{if(c){let d=c.filter(y=>y.pass).length;l("debug","constraint.evaluate",{id:t,active:i,clauses:{total:c.length,passed:d}});return}l("debug","constraint.evaluate",{id:t,active:i});},onConstraintError:(t,i)=>{l("error","constraint.error",{id:t,error:i});},onRequirementCreated:t=>{l("debug","requirement.created",{id:t.id,type:t.requirement.type});},onRequirementMet:(t,i)=>{l("info","requirement.met",{id:t.id,byResolver:i});},onRequirementCanceled:t=>{l("debug","requirement.canceled",{id:t.id});},onResolverStart:(t,i)=>{l("debug","resolver.start",{resolver:t,requirementId:i.id});},onResolverComplete:(t,i,c)=>{l("info","resolver.complete",{resolver:t,requirementId:i.id,duration:c});},onResolverError:(t,i,c)=>{l("error","resolver.error",{resolver:t,requirementId:i.id,error:c});},onResolverRetry:(t,i,c)=>{l("warn","resolver.retry",{resolver:t,requirementId:i.id,attempt:c});},onResolverCancel:(t,i)=>{l("debug","resolver.cancel",{resolver:t,requirementId:i.id});},onResolverWriteRejected:t=>{l("warn","resolver.write.rejected",t.kind==="summary"?{kind:t.kind,resolver:t.resolver,requirementId:t.req.id,reason:t.reason,dropped:t.dropped}:{kind:t.kind,resolver:t.resolver,requirementId:t.req.id,reason:t.reason,fact:t.fact,expected:t.expected,actual:t.actual});},onEffectRun:t=>{l("debug","effect.run",{id:t});},onEffectError:(t,i)=>{l("error","effect.error",{id:t,error:i});},onSnapshot:t=>{l("debug","timetravel.snapshot",{id:t.id,trigger:t.trigger});},onHistoryNavigate:(t,i)=>{l("info","timetravel.jump",{from:t,to:i});},onError:t=>{l("error","error",{source:t.source,sourceId:t.sourceId,message:t.message});},onErrorRecovery:(t,i)=>{l("warn","error.recovery",{source:t.source,sourceId:t.sourceId,strategy:i});},onDefinitionRegister:(t,i)=>{l("info","definition.register",{type:t,id:i});},onDefinitionAssign:(t,i)=>{l("info","definition.assign",{type:t,id:i});},onDefinitionUnregister:(t,i)=>{l("info","definition.unregister",{type:t,id:i});},onDefinitionCall:(t,i,c)=>{l("debug","definition.call",{type:t,id:i,props:c});},onTraceComplete:t=>{l("debug","trace.complete",{id:t.id,status:t.status,duration:t.duration,factChanges:t.factChanges.length,derivationsRecomputed:t.derivationsRecomputed.length,constraintsHit:t.constraintsHit.length,resolversStarted:t.resolversStarted.length,effectsRun:t.effectsRun.length});}}}var ue=class{constructor(s){this.capacity=s;this.buf=new Array(s);}buf;head=0;_size=0;get size(){return this._size}push(s){this.buf[this.head]=s,this.head=(this.head+1)%this.capacity,this._size<this.capacity&&this._size++;}toArray(){return this._size===0?[]:this._size<this.capacity?this.buf.slice(0,this._size):[...this.buf.slice(this.head),...this.buf.slice(0,this.head)]}clear(){this.buf=new Array(this.capacity),this.head=0,this._size=0;}};function ge(){try{if(typeof process<"u"&&process.env?.NODE_ENV==="production")return !1}catch{}try{if(typeof import.meta<"u"&&import.meta.env?.MODE==="production")return !1}catch{}return true}function fe(e){try{if(e===void 0)return "undefined";if(e===null)return "null";if(typeof e=="bigint")return String(e)+"n";if(typeof e=="symbol")return String(e);if(typeof e=="object"){let s=JSON.stringify(e,(o,r)=>typeof r=="bigint"?String(r)+"n":typeof r=="symbol"?String(r):r);return s.length>120?s.slice(0,117)+"...":s}return String(e)}catch{return "<error>"}}function ee(e,s){return e.length<=s?e:e.slice(0,s-3)+"..."}function se(e){try{return e.inspect()}catch{return null}}function Le(e){try{return e==null||typeof e!="object"?e:JSON.parse(JSON.stringify(e))}catch{return null}}function Pe(e){return e===void 0?1e3:!Number.isFinite(e)||e<1?(ge()&&console.warn(`[directive:devtools] Invalid maxEvents value (${e}), using default 1000`),1e3):Math.floor(e)}function Ie(){return {reconcileCount:0,reconcileTotalMs:0,resolverStats:new Map,effectRunCount:0,effectErrorCount:0,lastReconcileStartMs:0}}var ot=200,ie=340,ae=16,ce=80,he=2,Se=["#8b9aff","#4ade80","#fbbf24","#c084fc","#f472b6","#22d3ee"];function $e(){return {entries:new ue(ot),inflight:new Map}}function _e(){return {derivationDeps:new Map,activeConstraints:new Set,recentlyChangedFacts:new Set,recentlyComputedDerivations:new Set,recentlyActiveConstraints:new Set,animationTimer:null}}var Ne=1e4,Be=100;function je(){return {isRecording:false,recordedEvents:[],snapshots:[]}}var He=50,xe=200,b={bg:"#1a1a2e",text:"#e0e0e0",accent:"#8b9aff",muted:"#b0b0d0",border:"#333",rowBorder:"#2a2a4a",green:"#4ade80",yellow:"#fbbf24",red:"#f87171",closeBtn:"#aaa",font:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace"},G={nodeW:90,nodeH:16,nodeGap:6,startY:16,colGap:20,fontSize:10,labelMaxChars:11};function Ve(e,s,o,r){let a=false,p={position:"fixed",zIndex:"99999",...s.includes("bottom")?{bottom:"12px"}:{top:"12px"},...s.includes("right")?{right:"12px"}:{left:"12px"}},l=document.createElement("style");l.textContent=`[data-directive-devtools] summary:focus-visible{outline:2px solid ${b.accent};outline-offset:2px;border-radius:2px}[data-directive-devtools] button:focus-visible{outline:2px solid ${b.accent};outline-offset:2px}`,document.head.appendChild(l);let t=document.createElement("button");t.setAttribute("aria-label","Open Directive DevTools"),t.setAttribute("aria-expanded",String(o)),t.title="Ctrl+Shift+D to toggle",Object.assign(t.style,{...p,background:b.bg,color:b.text,border:`1px solid ${b.border}`,borderRadius:"6px",padding:"10px 14px",minWidth:"44px",minHeight:"44px",cursor:"pointer",fontFamily:b.font,fontSize:"12px",display:o?"none":"block"}),t.textContent="Directive";let i=document.createElement("div");i.setAttribute("role","region"),i.setAttribute("aria-label","Directive DevTools"),i.setAttribute("data-directive-devtools",""),i.tabIndex=-1,Object.assign(i.style,{...p,background:b.bg,color:b.text,border:`1px solid ${b.border}`,borderRadius:"8px",padding:"12px",fontFamily:b.font,fontSize:"11px",maxWidth:"min(380px, calc(100vw - 24px))",maxHeight:"min(500px, calc(100vh - 24px))",overflow:"auto",boxShadow:"0 4px 20px rgba(0,0,0,0.5)",display:o?"block":"none"});let c=document.createElement("div");Object.assign(c.style,{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"8px"});let d=document.createElement("strong");d.style.color=b.accent,d.textContent=e==="default"?"Directive DevTools":`DevTools (${e})`;let y=document.createElement("button");y.setAttribute("aria-label","Close DevTools"),Object.assign(y.style,{background:"none",border:"none",color:b.closeBtn,cursor:"pointer",fontSize:"16px",padding:"8px 12px",minWidth:"44px",minHeight:"44px",lineHeight:"1",display:"flex",alignItems:"center",justifyContent:"center"}),y.textContent="\xD7",c.appendChild(d),c.appendChild(y),i.appendChild(c);let I=document.createElement("div");I.style.marginBottom="6px",I.setAttribute("aria-live","polite");let N=document.createElement("span");N.style.color=b.green,N.textContent="Settled",I.appendChild(N),i.appendChild(I);let R=document.createElement("div");Object.assign(R.style,{display:"none",marginBottom:"8px",padding:"4px 8px",background:"#252545",borderRadius:"4px",alignItems:"center",gap:"6px"});let w=document.createElement("button");Object.assign(w.style,{background:"none",border:`1px solid ${b.border}`,color:b.text,cursor:"pointer",padding:"4px 10px",borderRadius:"3px",fontFamily:b.font,fontSize:"11px",minWidth:"44px",minHeight:"44px"}),w.textContent="\u25C0 Undo",w.disabled=true;let g=document.createElement("button");Object.assign(g.style,{background:"none",border:`1px solid ${b.border}`,color:b.text,cursor:"pointer",padding:"4px 10px",borderRadius:"3px",fontFamily:b.font,fontSize:"11px",minWidth:"44px",minHeight:"44px"}),g.textContent="Redo \u25B6",g.disabled=true;let f=document.createElement("span");f.style.color=b.muted,f.style.fontSize="10px",R.appendChild(w),R.appendChild(g),R.appendChild(f),i.appendChild(R);function E(z,K){let X=document.createElement("details");K&&(X.open=true),X.style.marginBottom="4px";let J=document.createElement("summary");Object.assign(J.style,{cursor:"pointer",color:b.accent,marginBottom:"4px"});let Q=document.createElement("span");J.textContent=`${z} (`,J.appendChild(Q),J.appendChild(document.createTextNode(")")),Q.textContent="0",X.appendChild(J);let te=document.createElement("table");Object.assign(te.style,{width:"100%",borderCollapse:"collapse",fontSize:"11px"});let Re=document.createElement("thead"),De=document.createElement("tr");for(let nt of ["Key","Value"]){let pe=document.createElement("th");pe.scope="col",Object.assign(pe.style,{textAlign:"left",padding:"2px 4px",color:b.accent}),pe.textContent=nt,De.appendChild(pe);}Re.appendChild(De),te.appendChild(Re);let Ae=document.createElement("tbody");return te.appendChild(Ae),X.appendChild(te),{details:X,tbody:Ae,countSpan:Q}}function T(z,K){let X=document.createElement("details");X.style.marginBottom="4px";let J=document.createElement("summary");Object.assign(J.style,{cursor:"pointer",color:K,marginBottom:"4px"});let Q=document.createElement("span");J.textContent=`${z} (`,J.appendChild(Q),J.appendChild(document.createTextNode(")")),Q.textContent="0",X.appendChild(J);let te=document.createElement("ul");return Object.assign(te.style,{margin:"0",paddingLeft:"16px"}),X.appendChild(te),{details:X,list:te,countSpan:Q}}let P=E("Facts",true);i.appendChild(P.details);let F=E("Derivations",false);i.appendChild(F.details);let O=T("Inflight",b.yellow);i.appendChild(O.details);let Y=T("Unmet",b.red);i.appendChild(Y.details);let $=document.createElement("details");$.style.marginBottom="4px";let V=document.createElement("summary");Object.assign(V.style,{cursor:"pointer",color:b.accent,marginBottom:"4px"}),V.textContent="Performance",$.appendChild(V);let _=document.createElement("div");_.style.fontSize="10px",_.style.color=b.muted,_.textContent="No data yet",$.appendChild(_),i.appendChild($);let H=document.createElement("details");H.style.marginBottom="4px";let h=document.createElement("summary");Object.assign(h.style,{cursor:"pointer",color:b.accent,marginBottom:"4px"}),h.textContent="Dependency Graph",H.appendChild(h);let x=document.createElementNS("http://www.w3.org/2000/svg","svg");x.setAttribute("width","100%"),x.setAttribute("height","120"),x.setAttribute("role","img"),x.setAttribute("aria-label","System dependency graph"),x.style.display="block",x.setAttribute("viewBox","0 0 460 120"),x.setAttribute("preserveAspectRatio","xMinYMin meet"),H.appendChild(x),i.appendChild(H);let C=document.createElement("details");C.style.marginBottom="4px";let q=document.createElement("summary");Object.assign(q.style,{cursor:"pointer",color:b.accent,marginBottom:"4px"}),q.textContent="Timeline",C.appendChild(q);let j=document.createElementNS("http://www.w3.org/2000/svg","svg");j.setAttribute("width","100%"),j.setAttribute("height","60"),j.setAttribute("role","img"),j.setAttribute("aria-label","Resolver execution timeline"),j.style.display="block",j.setAttribute("viewBox",`0 0 ${ie} 60`),j.setAttribute("preserveAspectRatio","xMinYMin meet");let u=document.createElementNS("http://www.w3.org/2000/svg","text");u.setAttribute("x",String(ie/2)),u.setAttribute("y","30"),u.setAttribute("text-anchor","middle"),u.setAttribute("fill",b.muted),u.setAttribute("font-size","10"),u.setAttribute("font-family",b.font),u.textContent="No resolver activity yet",j.appendChild(u),C.appendChild(j),i.appendChild(C);let M=(()=>{let z=document.createElement("details");z.style.marginBottom="4px";let K=document.createElement("summary");Object.assign(K.style,{cursor:"pointer",color:b.accent,marginBottom:"4px"});let X=document.createElement("span");X.textContent="0",K.textContent="Constraints (",K.appendChild(X),K.appendChild(document.createTextNode(")")),z.appendChild(K);let J=document.createElement("div");Object.assign(J.style,{fontSize:"11px"});let Q=document.createElement("div");return Q.style.color=b.muted,Q.style.padding="4px",Q.style.fontStyle="italic",Q.textContent="Waiting for first evaluation\u2026",Q.className="dt-constraints-empty",J.appendChild(Q),z.appendChild(J),i.appendChild(z),{details:z,body:J,countSpan:X}})(),S,A,W,k;if(r){let z=document.createElement("details");z.style.marginBottom="4px";let K=document.createElement("summary");Object.assign(K.style,{cursor:"pointer",color:b.accent,marginBottom:"4px"}),W=document.createElement("span"),W.textContent="0",K.textContent="Events (",K.appendChild(W),K.appendChild(document.createTextNode(")")),z.appendChild(K),A=document.createElement("div"),Object.assign(A.style,{maxHeight:"150px",overflow:"auto",fontSize:"10px"}),A.setAttribute("role","log"),A.setAttribute("aria-live","polite"),A.tabIndex=0;let X=document.createElement("div");X.style.color=b.muted,X.style.padding="4px",X.textContent="Waiting for events...",X.className="dt-events-empty",A.appendChild(X),z.appendChild(A),i.appendChild(z),S=z,k=document.createElement("div");}else S=document.createElement("details"),A=document.createElement("div"),W=document.createElement("span"),k=document.createElement("div"),k.style.fontSize="10px",k.style.color=b.muted,k.style.marginTop="4px",k.style.fontStyle="italic",k.textContent="Enable trace: true for event log",i.appendChild(k);let L=document.createElement("div");Object.assign(L.style,{display:"flex",gap:"6px",marginTop:"6px"});let n=document.createElement("button");Object.assign(n.style,{background:"none",border:`1px solid ${b.border}`,color:b.text,cursor:"pointer",padding:"8px 12px",borderRadius:"3px",fontFamily:b.font,fontSize:"10px",minWidth:"44px",minHeight:"44px"}),n.textContent="\u23FA Record";let m=document.createElement("button");Object.assign(m.style,{background:"none",border:`1px solid ${b.border}`,color:b.text,cursor:"pointer",padding:"8px 12px",borderRadius:"3px",fontFamily:b.font,fontSize:"10px",minWidth:"44px",minHeight:"44px"}),m.textContent="\u2913 Export",L.appendChild(n),L.appendChild(m),i.appendChild(L),i.addEventListener("wheel",z=>{let K=i,X=K.scrollTop===0&&z.deltaY<0,J=K.scrollTop+K.clientHeight>=K.scrollHeight&&z.deltaY>0;(X||J)&&z.preventDefault();},{passive:false});let v=o,D=new Set;function B(){v=true,i.style.display="block",t.style.display="none",t.setAttribute("aria-expanded","true"),y.focus();}function U(){v=false,i.style.display="none",t.style.display="block",t.setAttribute("aria-expanded","false"),t.focus();}t.addEventListener("click",B),y.addEventListener("click",U);function Z(z){z.key==="Escape"&&v&&U();}i.addEventListener("keydown",Z);function re(z){z.key==="d"&&z.shiftKey&&(z.ctrlKey||z.metaKey)&&(z.preventDefault(),v?U():B());}document.addEventListener("keydown",re);function oe(){a||(document.body.appendChild(t),document.body.appendChild(i));}document.body?oe():document.addEventListener("DOMContentLoaded",oe,{once:true});function le(){a=true,t.removeEventListener("click",B),y.removeEventListener("click",U),i.removeEventListener("keydown",Z),document.removeEventListener("keydown",re),document.removeEventListener("DOMContentLoaded",oe);for(let z of D)clearTimeout(z);D.clear(),t.remove(),i.remove(),l.remove();}return {refs:{container:i,toggleBtn:t,titleEl:d,statusEl:N,factsBody:P.tbody,factsCount:P.countSpan,derivBody:F.tbody,derivCount:F.countSpan,derivSection:F.details,inflightList:O.list,inflightSection:O.details,inflightCount:O.countSpan,unmetList:Y.list,unmetSection:Y.details,unmetCount:Y.countSpan,perfSection:$,perfBody:_,historySection:R,historyLabel:f,undoBtn:w,redoBtn:g,flowSection:H,flowSvg:x,timelineSection:C,timelineSvg:j,eventsSection:S,eventsList:A,eventsCount:W,traceHint:k,recordBtn:n,exportBtn:m,constraintsSection:M.details,constraintsBody:M.body,constraintsCount:M.countSpan},destroy:le,isOpen:()=>v,flashTimers:D}}function de(e,s,o,r,a,p){let l=fe(r),t=e.get(o);if(t){let i=t.cells;if(i[1]&&(i[1].textContent=l,a&&p)){let c=i[1];c.style.background="rgba(139, 154, 255, 0.25)";let d=setTimeout(()=>{c.style.background="",p.delete(d);},300);p.add(d);}}else {t=document.createElement("tr"),t.style.borderBottom=`1px solid ${b.rowBorder}`;let i=document.createElement("td");Object.assign(i.style,{padding:"2px 4px",color:b.muted}),i.textContent=o;let c=document.createElement("td");c.style.padding="2px 4px",c.textContent=l,t.appendChild(i),t.appendChild(c),s.appendChild(t),e.set(o,t);}}function ze(e,s){let o=e.get(s);o&&(o.remove(),e.delete(s));}function be(e,s,o){if(e.inflightList.replaceChildren(),e.inflightCount.textContent=String(s.length),s.length>0)for(let r of s){let a=document.createElement("li");a.style.fontSize="11px",a.textContent=`${r.resolverId} (${r.id})`,e.inflightList.appendChild(a);}else {let r=document.createElement("li");r.style.fontSize="10px",r.style.color=b.muted,r.textContent="None",e.inflightList.appendChild(r);}if(e.unmetList.replaceChildren(),e.unmetCount.textContent=String(o.length),o.length>0)for(let r of o){let a=document.createElement("li");a.style.fontSize="11px",a.textContent=`${r.requirement.type} from ${r.fromConstraint}`,e.unmetList.appendChild(a);}else {let r=document.createElement("li");r.style.fontSize="10px",r.style.color=b.muted,r.textContent="None",e.unmetList.appendChild(r);}}function ye(e,s,o){let r=s===0&&o===0;e.statusEl.style.color=r?b.green:b.yellow,e.statusEl.textContent=r?"Settled":"Working...",e.toggleBtn.textContent=r?"Directive":"Directive...",e.toggleBtn.setAttribute("aria-label",`Open Directive DevTools${r?"":" (system working)"}`);}function Ce(e,s,o,r){let a=Object.keys(o.derive);if(e.derivCount.textContent=String(a.length),a.length===0){s.clear(),e.derivBody.replaceChildren();let l=document.createElement("tr"),t=document.createElement("td");t.colSpan=2,t.style.color=b.muted,t.style.fontSize="10px",t.textContent="No derivations defined",l.appendChild(t),e.derivBody.appendChild(l);return}let p=new Set(a);for(let[l,t]of s)p.has(l)||(t.remove(),s.delete(l));for(let l of a){let t;try{t=fe(o.read(l));}catch{t="<error>";}de(s,e.derivBody,l,t,true,r);}}function We(e,s,o,r){let a=e.eventsList.querySelector(".dt-events-empty");a&&a.remove();let p=document.createElement("div");Object.assign(p.style,{padding:"2px 4px",borderBottom:`1px solid ${b.rowBorder}`,fontFamily:"inherit"});let l=new Date,t=`${String(l.getHours()).padStart(2,"0")}:${String(l.getMinutes()).padStart(2,"0")}:${String(l.getSeconds()).padStart(2,"0")}.${String(l.getMilliseconds()).padStart(3,"0")}`,i;try{let I=JSON.stringify(o);i=ee(I,60);}catch{i="{}";}let c=document.createElement("span");c.style.color=b.closeBtn,c.textContent=t;let d=document.createElement("span");d.style.color=b.accent,d.textContent=` ${s} `;let y=document.createElement("span");for(y.style.color=b.muted,y.textContent=i,p.appendChild(c),p.appendChild(d),p.appendChild(y),e.eventsList.prepend(p);e.eventsList.childElementCount>He;)e.eventsList.lastElementChild?.remove();e.eventsCount.textContent=String(r);}function Ue(e,s){e.perfBody.replaceChildren();let o=s.reconcileCount>0?(s.reconcileTotalMs/s.reconcileCount).toFixed(1):"\u2014",r=[`Reconciles: ${s.reconcileCount} (avg ${o}ms)`,`Effects: ${s.effectRunCount} run, ${s.effectErrorCount} errors`];for(let a of r){let p=document.createElement("div");p.style.marginBottom="2px",p.textContent=a,e.perfBody.appendChild(p);}if(s.resolverStats.size>0){let a=document.createElement("div");a.style.marginTop="4px",a.style.marginBottom="2px",a.style.color=b.accent,a.textContent="Resolvers:",e.perfBody.appendChild(a);let p=[...s.resolverStats.entries()].sort((l,t)=>t[1].totalMs-l[1].totalMs);for(let[l,t]of p){let i=t.count>0?(t.totalMs/t.count).toFixed(1):"0",c=document.createElement("div");c.style.paddingLeft="8px",c.textContent=`${l}: ${t.count}x, avg ${i}ms${t.errors>0?`, ${t.errors} err`:""}`,t.errors>0&&(c.style.color=b.red),e.perfBody.appendChild(c);}}}function Ee(e,s){let o=s.history;if(!o){e.historySection.style.display="none";return}e.historySection.style.display="flex";let r=o.currentIndex,a=o.snapshots.length;e.historyLabel.textContent=a>0?`${r+1} / ${a}`:"0 snapshots";let p=r>0,l=r<a-1;e.undoBtn.disabled=!p,e.undoBtn.style.opacity=p?"1":"0.4",e.redoBtn.disabled=!l,e.redoBtn.style.opacity=l?"1":"0.4";}function Ge(e,s){e.undoBtn.addEventListener("click",()=>{s.history&&s.history.currentIndex>0&&s.history.goBack(1);}),e.redoBtn.addEventListener("click",()=>{s.history&&s.history.currentIndex<s.history.snapshots.length-1&&s.history.goForward(1);});}var qe=Object.assign(Object.create(null),{$eq:"=",$ne:"\u2260",$gt:">",$gte:"\u2265",$lt:"<",$lte:"\u2264",$in:"\u2208",$nin:"\u2209",$exists:"exists",$between:"in",$startsWith:"starts with",$endsWith:"ends with",$contains:"contains",$matches:"matches",$changed:"changed"});function st(e){return Object.hasOwn(qe,e)?qe[e]:e}function Fe(e){return e instanceof RegExp?ee(String(e),40):fe(e)}var it=new Set(["$all","$any","$not"]);function Ye(e){let s=document.createElement("li"),o=e.pass?"\u2713":"\u2717";if(s.style.color=e.pass?b.green:b.red,s.style.listStyle="none",it.has(e.op)){let r=e.path?` @ ${e.path}`:"";if(s.textContent=`${o} ${e.op}${r}`,e.children&&e.children.length>0){let a=document.createElement("ul");Object.assign(a.style,{margin:"0",paddingLeft:"14px",listStyle:"none"});for(let p of e.children)a.appendChild(Ye(p));s.appendChild(a);}}else {let r=st(e.op),a=Fe(e.expected);if(e.pass)s.textContent=`${o} ${e.path} ${r} ${a}`;else {let p=Fe(e.actual);s.textContent=`${o} ${e.path} ${r} ${a} (actual: ${p})`;}}return s}function Xe(e,s,o){let r=s.get(o);if(r&&(r.remove(),s.delete(o),e.constraintsCount.textContent=String(s.size)),s.size===0&&!e.constraintsBody.querySelector(".dt-constraints-empty")){let a=document.createElement("div");a.style.color=b.muted,a.style.padding="4px",a.style.fontStyle="italic",a.textContent="Waiting for first evaluation\u2026",a.className="dt-constraints-empty",e.constraintsBody.appendChild(a);}}function Ke(e,s){let o=e.constraintsBody.querySelector(".dt-constraints-empty");o&&(o.textContent=s?"Waiting for first evaluation\u2026":"This system has no constraints");}function Je(e,s,o,r,a,p){let l=e.constraintsBody.querySelector(".dt-constraints-empty");l&&l.remove();let t=s.get(o);t||(t=document.createElement("div"),Object.assign(t.style,{marginBottom:"6px",paddingBottom:"4px",borderBottom:`1px solid ${b.rowBorder}`}),s.set(o,t),e.constraintsBody.appendChild(t),e.constraintsCount.textContent=String(s.size)),t.replaceChildren();let i=document.createElement("div");Object.assign(i.style,{fontWeight:"bold",color:r?b.green:b.muted});let c=r?"\u2713":"\u2717";if(i.textContent=p?`${c} ${o} (${p})`:`${c} ${o}`,t.appendChild(i),a&&a.length>0){let d=document.createElement("ul");Object.assign(d.style,{margin:"2px 0 0 0",paddingLeft:"14px",listStyle:"none"});for(let y of a)d.appendChild(Ye(y));t.appendChild(d);}else if(!a){let d=document.createElement("div");Object.assign(d.style,{color:b.muted,fontSize:"10px",fontStyle:"italic",paddingLeft:"14px"}),d.textContent="function-form when (no clause tree)",t.appendChild(d);}}var we=new WeakMap;function at(e,s,o,r,a,p){return [e.join(","),s.join(","),o.map(l=>`${l.id}:${l.active}`).join(","),[...r.entries()].map(([l,t])=>`${l}:${t.status}:${t.type}`).join(","),a.join(","),p.join(",")].join("|")}function ct(e,s,o,r,a){for(let p of o){let l=e.nodes.get(`0:${p}`);if(!l)continue;let t=s.recentlyChangedFacts.has(p);l.rect.setAttribute("fill",t?b.text+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}for(let p of r){let l=e.nodes.get(`1:${p}`);if(!l)continue;let t=s.recentlyComputedDerivations.has(p);l.rect.setAttribute("fill",t?b.accent+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}for(let p of a){let l=e.nodes.get(`2:${p}`);if(!l)continue;let t=s.recentlyActiveConstraints.has(p),i=l.rect.getAttribute("stroke")??b.muted;l.rect.setAttribute("fill",t?i+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}}function Me(e,s,o){let r=se(s);if(!r)return;let a;try{a=Object.keys(s.facts.$store.toObject());}catch{a=[];}let p=Object.keys(s.derive),l=r.constraints,t=r.unmet,i=r.inflight,c=Object.keys(r.resolvers),d=new Map;for(let u of t)d.set(u.id,{type:u.requirement.type,fromConstraint:u.fromConstraint,status:"unmet"});for(let u of i)d.set(u.id,{type:u.resolverId,fromConstraint:"",status:"inflight"});if(a.length===0&&p.length===0&&l.length===0&&c.length===0){we.delete(e.flowSvg),e.flowSvg.replaceChildren(),e.flowSvg.setAttribute("viewBox","0 0 460 40");let u=document.createElementNS("http://www.w3.org/2000/svg","text");u.setAttribute("x","230"),u.setAttribute("y","24"),u.setAttribute("text-anchor","middle"),u.setAttribute("fill",b.muted),u.setAttribute("font-size","10"),u.setAttribute("font-family",b.font),u.textContent="No system topology",e.flowSvg.appendChild(u);return}let y=i.map(u=>u.resolverId).sort(),I=at(a,p,l,d,c,y),N=we.get(e.flowSvg);if(N&&N.fingerprint===I){ct(N,o,a,p,l.map(u=>u.id));return}let R=G.nodeW+G.colGap,w=[5,5+R,5+R*2,5+R*3,5+R*4],g=w[4]+G.nodeW+5;function f(u){let M=G.startY+12;return u.map(S=>{let A={...S,y:M};return M+=G.nodeH+G.nodeGap,A})}let E=f(a.map(u=>{let M=r.facts.find(S=>S.key===u);return {id:u,label:ee(M?.meta?.label??u,G.labelMaxChars)}})),T=f(p.map(u=>{let M=r.derivations.find(S=>S.id===u);return {id:u,label:ee(M?.meta?.label??u,G.labelMaxChars)}})),P=f(l.map(u=>({id:u.id,label:ee(u.meta?.label??u.id,G.labelMaxChars),active:u.active,priority:u.priority}))),F=f([...d.entries()].map(([u,M])=>({id:u,type:M.type,fromConstraint:M.fromConstraint,status:M.status}))),O=f(c.map(u=>{let M=r.resolverDefs.find(S=>S.id===u);return {id:u,label:ee(M?.meta?.label??u,G.labelMaxChars)}})),Y=Math.max(E.length,T.length,P.length,F.length,O.length,1),$=G.startY+12+Y*(G.nodeH+G.nodeGap)+8;e.flowSvg.replaceChildren(),e.flowSvg.setAttribute("viewBox",`0 0 ${g} ${$}`),e.flowSvg.setAttribute("aria-label",`Dependency graph: ${a.length} facts, ${p.length} derivations, ${l.length} constraints, ${d.size} requirements, ${c.length} resolvers`);let V=["Facts","Derivations","Constraints","Reqs","Resolvers"];for(let[u,M]of V.entries()){let S=document.createElementNS("http://www.w3.org/2000/svg","text");S.setAttribute("x",String(w[u]??0)),S.setAttribute("y","10"),S.setAttribute("fill",b.accent),S.setAttribute("font-size",String(G.fontSize)),S.setAttribute("font-family",b.font),S.textContent=M,e.flowSvg.appendChild(S);}let _={fingerprint:I,nodes:new Map};function H(u,M,S,A,W,k,L,n,m){let v=document.createElementNS("http://www.w3.org/2000/svg","g");if(m){let U=document.createElementNS("http://www.w3.org/2000/svg","title");U.textContent=m,v.appendChild(U);}let D=document.createElementNS("http://www.w3.org/2000/svg","rect");D.setAttribute("x",String(M)),D.setAttribute("y",String(S-6)),D.setAttribute("width",String(G.nodeW)),D.setAttribute("height",String(G.nodeH)),D.setAttribute("rx","3"),D.setAttribute("fill",n?k+"33":"none"),D.setAttribute("stroke",k),D.setAttribute("stroke-width",n?"2":"1"),D.setAttribute("opacity",L?"0.35":"1"),v.appendChild(D);let B=document.createElementNS("http://www.w3.org/2000/svg","text");return B.setAttribute("x",String(M+4)),B.setAttribute("y",String(S+4)),B.setAttribute("fill",k),B.setAttribute("font-size",String(G.fontSize)),B.setAttribute("font-family",b.font),B.setAttribute("opacity",L?"0.35":"1"),B.textContent=W,v.appendChild(B),e.flowSvg.appendChild(v),_.nodes.set(`${u}:${A}`,{g:v,rect:D,text:B}),{midX:M+G.nodeW/2,midY:S}}function h(u,M,S,A,W,k){let L=document.createElementNS("http://www.w3.org/2000/svg","line");L.setAttribute("x1",String(u)),L.setAttribute("y1",String(M)),L.setAttribute("x2",String(S)),L.setAttribute("y2",String(A)),L.setAttribute("stroke",W),L.setAttribute("stroke-width","1"),L.setAttribute("stroke-dasharray","3,2"),L.setAttribute("opacity","0.7"),e.flowSvg.appendChild(L);}let x=new Map,C=new Map,q=new Map,j=new Map;for(let u of E){let M=o.recentlyChangedFacts.has(u.id),S=r.facts.find(W=>W.key===u.id)?.meta,A=H(0,w[0],u.y,u.id,u.label,b.text,false,M,S?.description);x.set(u.id,A);}for(let u of T){let M=o.recentlyComputedDerivations.has(u.id),S=r.derivations.find(W=>W.id===u.id)?.meta,A=H(1,w[1],u.y,u.id,u.label,b.accent,false,M,S?.description);C.set(u.id,A);}for(let u of P){let M=o.recentlyActiveConstraints.has(u.id),S=l.find(W=>W.id===u.id)?.meta,A=H(2,w[2],u.y,u.id,u.label,S?.color??(u.active?b.yellow:b.muted),!u.active,M,S?.description);q.set(u.id,A);}for(let u of F){let M=u.status==="unmet"?b.red:b.yellow,S=H(3,w[3],u.y,u.id,ee(u.type,G.labelMaxChars),M,false,false);j.set(u.id,S);}for(let u of O){let M=i.some(A=>A.resolverId===u.id),S=r.resolverDefs.find(A=>A.id===u.id)?.meta;H(4,w[4],u.y,u.id,u.label,S?.color??(M?b.green:b.muted),!M,false,S?.description);}for(let u of T){let M=o.derivationDeps.get(u.id),S=C.get(u.id);if(M&&S)for(let A of M){let W=x.get(A);W&&h(W.midX+G.nodeW/2,W.midY,S.midX-G.nodeW/2,S.midY,b.accent);}}for(let u of F){let M=q.get(u.fromConstraint),S=j.get(u.id);M&&S&&h(M.midX+G.nodeW/2,M.midY,S.midX-G.nodeW/2,S.midY,b.muted);}for(let u of i){let M=j.get(u.id);if(M){let S=O.find(A=>A.id===u.resolverId);S&&h(M.midX+G.nodeW/2,M.midY,w[4],S.y,b.green);}}we.set(e.flowSvg,_);}function Qe(e){e.animationTimer&&clearTimeout(e.animationTimer),e.animationTimer=setTimeout(()=>{e.recentlyChangedFacts.clear(),e.recentlyComputedDerivations.clear(),e.recentlyActiveConstraints.clear(),e.animationTimer=null;},600);}function Ze(e,s){let o=s.entries.toArray();if(o.length===0)return;e.timelineSvg.replaceChildren();let r=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(let R of o)R.startMs<r&&(r=R.startMs),R.endMs>a&&(a=R.endMs);let p=performance.now();for(let R of s.inflight.values())R<r&&(r=R),p>a&&(a=p);let l=a-r||1,t=ie-ce-10,i=[],c=new Set;for(let R of o)c.has(R.resolver)||(c.add(R.resolver),i.push(R.resolver));for(let R of s.inflight.keys())c.has(R)||(c.add(R),i.push(R));let y=i.slice(-12),I=ae*y.length+20;e.timelineSvg.setAttribute("viewBox",`0 0 ${ie} ${I}`),e.timelineSvg.setAttribute("height",String(Math.min(I,200)));let N=5;for(let R=0;R<=N;R++){let w=ce+t*R/N,g=l*R/N,f=document.createElementNS("http://www.w3.org/2000/svg","text");f.setAttribute("x",String(w)),f.setAttribute("y","8"),f.setAttribute("fill",b.muted),f.setAttribute("font-size","6"),f.setAttribute("font-family",b.font),f.setAttribute("text-anchor","middle"),f.textContent=g<1e3?`${g.toFixed(0)}ms`:`${(g/1e3).toFixed(1)}s`,e.timelineSvg.appendChild(f);let E=document.createElementNS("http://www.w3.org/2000/svg","line");E.setAttribute("x1",String(w)),E.setAttribute("y1","10"),E.setAttribute("x2",String(w)),E.setAttribute("y2",String(I)),E.setAttribute("stroke",b.border),E.setAttribute("stroke-width","0.5"),e.timelineSvg.appendChild(E);}for(let R=0;R<y.length;R++){let w=y[R],g=12+R*ae,f=R%Se.length,E=Se[f],T=document.createElementNS("http://www.w3.org/2000/svg","text");T.setAttribute("x",String(ce-4)),T.setAttribute("y",String(g+ae/2+3)),T.setAttribute("fill",b.muted),T.setAttribute("font-size","7"),T.setAttribute("font-family",b.font),T.setAttribute("text-anchor","end"),T.textContent=ee(w,12),e.timelineSvg.appendChild(T);let P=o.filter(O=>O.resolver===w);for(let O of P){let Y=ce+(O.startMs-r)/l*t,$=Math.max((O.endMs-O.startMs)/l*t,he),V=document.createElementNS("http://www.w3.org/2000/svg","rect");V.setAttribute("x",String(Y)),V.setAttribute("y",String(g+2)),V.setAttribute("width",String($)),V.setAttribute("height",String(ae-4)),V.setAttribute("rx","2"),V.setAttribute("fill",O.error?b.red:E),V.setAttribute("opacity","0.8");let _=document.createElementNS("http://www.w3.org/2000/svg","title"),H=O.endMs-O.startMs;_.textContent=`${w}: ${H.toFixed(1)}ms${O.error?" (error)":""}`,V.appendChild(_),e.timelineSvg.appendChild(V);}let F=s.inflight.get(w);if(F!==void 0){let O=ce+(F-r)/l*t,Y=Math.max((p-F)/l*t,he),$=document.createElementNS("http://www.w3.org/2000/svg","rect");$.setAttribute("x",String(O)),$.setAttribute("y",String(g+2)),$.setAttribute("width",String(Y)),$.setAttribute("height",String(ae-4)),$.setAttribute("rx","2"),$.setAttribute("fill",E),$.setAttribute("opacity","0.4"),$.setAttribute("stroke",E),$.setAttribute("stroke-width","1"),$.setAttribute("stroke-dasharray","3,2");let V=document.createElementNS("http://www.w3.org/2000/svg","title");V.textContent=`${w}: inflight ${(p-F).toFixed(0)}ms`,$.appendChild(V),e.timelineSvg.appendChild($);}}e.timelineSvg.setAttribute("aria-label",`Timeline: ${o.length} resolver executions across ${y.length} resolvers`);}function lt(){if(typeof window>"u")return {systems:new Map,getSystem:()=>null,getSystems:()=>[],inspect:()=>null,getEvents:()=>[],explain:()=>null,exportSession:()=>null,importSession:()=>false,clearEvents:()=>{},subscribe:()=>()=>{}};if(!window.__DIRECTIVE__){let e=new Map,s={systems:e,getSystem(o){return o?e.get(o)?.system??null:e.values().next().value?.system??null},getSystems(){return [...e.keys()]},inspect(o){let r=this.getSystem(o),a=o?e.get(o):e.values().next().value,p=r?.inspect()??null;return p&&a&&(p.resolverStats=a.resolverStats?Object.fromEntries(a.resolverStats):{}),p},getEvents(o){return o?e.get(o)?.events.toArray()??[]:e.values().next().value?.events.toArray()??[]},explain(o,r){return this.getSystem(r)?.explain(o)??null},subscribe(o,r){let a=r?e.get(r):e.values().next().value;if(!a){let p=false,t=setInterval(()=>{let c=r?e.get(r):e.values().next().value;c&&!p&&(p=true,c.subscribers.add(o));},100),i=setTimeout(()=>clearInterval(t),1e4);return ()=>{clearInterval(t),clearTimeout(i);for(let c of e.values())c.subscribers.delete(o);}}return a.subscribers.add(o),()=>{a.subscribers.delete(o);}},exportSession(o){let r=o?e.get(o):e.values().next().value;return r?JSON.stringify({version:1,name:o??e.keys().next().value??"default",exportedAt:Date.now(),events:r.events.toArray()}):null},importSession(o,r){try{if(o.length>10*1024*1024)return !1;let a=JSON.parse(o);if(!a||typeof a!="object"||Array.isArray(a)||!Array.isArray(a.events))return !1;let p=r?e.get(r):e.values().next().value;if(!p)return !1;let l=p.maxEvents,t=a.events,i=t.length>l?t.length-l:0;p.events.clear();for(let c=i;c<t.length;c++){let d=t[c];d&&typeof d=="object"&&!Array.isArray(d)&&typeof d.timestamp=="number"&&typeof d.type=="string"&&d.type!=="__proto__"&&d.type!=="constructor"&&d.type!=="prototype"&&p.events.push({timestamp:d.timestamp,type:d.type,data:d.data??null});}return !0}catch{return false}},clearEvents(o){let r=o?e.get(o):e.values().next().value;r&&r.events.clear();}};return Object.defineProperty(window,"__DIRECTIVE__",{value:s,writable:false,configurable:ge(),enumerable:true}),s}return window.__DIRECTIVE__}function ut(e={}){let{name:s="default",trace:o=false,maxEvents:r,panel:a=false,position:p="bottom-right",defaultOpen:l=false}=e,t=Pe(r),i=lt(),c={system:null,events:new ue(t),maxEvents:t,subscribers:new Set,resolverStats:new Map};i.systems.set(s,c);let d=(n,m)=>{let v={timestamp:Date.now(),type:n,data:m};o&&c.events.push(v);for(let D of c.subscribers)try{D(v);}catch{}},y=null,I=new Map,N=new Map,R=new Map,w=Ie(),g=_e(),f=je(),E=$e(),T=a&&typeof window<"u"&&typeof document<"u"&&ge(),P=null,F=0,O=1,Y=2,$=4,V=8,_=16,H=32,h=64,x=128,C=256,q=new Map,j=new Set,u=new Map,M=new Set,S=null;function A(n){F|=n,P===null&&typeof requestAnimationFrame<"u"&&(P=requestAnimationFrame(W));}function W(){if(P=null,!y||!c.system){F=0;return}let n=y.refs,m=c.system,v=F;if(F=0,v&O){for(let D of j)ze(I,D);j.clear();for(let[D,{value:B,flash:U}]of q)de(I,n.factsBody,D,B,U,y.flashTimers);q.clear(),n.factsCount.textContent=String(I.size);}if(v&Y&&Ce(n,N,m,y.flashTimers),v&C){for(let D of M)Xe(n,R,D);M.clear();for(let[D,{active:B,whenExplain:U,label:Z}]of u)Je(n,R,D,B,U,Z);u.clear();}if(v&V)if(S)ye(n,S.inflight.length,S.unmet.length);else {let D=se(m);D&&ye(n,D.inflight.length,D.unmet.length);}if(v&$)if(S)be(n,S.inflight,S.unmet);else {let D=se(m);D&&be(n,D.inflight,D.unmet);}v&_&&Ue(n,w),v&H&&Me(n,m,g),v&h&&Ee(n,m),v&x&&Ze(n,E);}function k(n,m){y&&o&&We(y.refs,n,m,c.events.size);}function L(n,m){f.isRecording&&f.recordedEvents.length<Ne&&f.recordedEvents.push({timestamp:Date.now(),type:n,data:Le(m)});}return {name:"devtools",onInit:n=>{if(c.system=n,d("init",{}),typeof window<"u"&&console.log(`%c[Directive Devtools]%c System "${s}" initialized. Access via window.__DIRECTIVE__`,"color: #7c3aed; font-weight: bold","color: inherit"),T){let m=c.system;y=Ve(s,p,l,o);let v=y.refs;try{let U=m.facts.$store.toObject();for(let[Z,re]of Object.entries(U))de(I,v.factsBody,Z,re,!1);v.factsCount.textContent=String(Object.keys(U).length);}catch{}Ce(v,N,m);let D=se(m);D&&(ye(v,D.inflight.length,D.unmet.length),be(v,D.inflight,D.unmet)),Ee(v,m),Ge(v,m),Me(v,m,g);let B=(D?.constraints?.length??0)>0;Ke(v,B),v.recordBtn.addEventListener("click",()=>{if(f.isRecording=!f.isRecording,v.recordBtn.textContent=f.isRecording?"\u23F9 Stop":"\u23FA Record",v.recordBtn.style.color=f.isRecording?b.red:b.text,f.isRecording){f.recordedEvents=[],f.snapshots=[];try{f.snapshots.push({timestamp:Date.now(),facts:m.facts.$store.toObject()});}catch{}}}),v.exportBtn.addEventListener("click",()=>{let U=f.recordedEvents.length>0?f.recordedEvents:c.events.toArray(),Z=JSON.stringify({version:1,name:s,exportedAt:Date.now(),events:U,snapshots:f.snapshots},null,2),re=new Blob([Z],{type:"application/json"}),oe=URL.createObjectURL(re),le=document.createElement("a");le.href=oe,le.download=`directive-session-${s}-${Date.now()}.json`,le.click(),URL.revokeObjectURL(oe);});}},onStart:n=>{d("start",{}),k("start",{}),L("start",{});},onStop:n=>{d("stop",{}),k("stop",{}),L("stop",{});},onDestroy:n=>{d("destroy",{}),i.systems.delete(s),P!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(P),P=null),g.animationTimer&&clearTimeout(g.animationTimer),y&&(y.destroy(),y=null,I.clear(),N.clear(),R.clear());},onFactSet:(n,m,v)=>{d("fact.set",{key:n,value:m,prev:v}),L("fact.set",{key:n,value:m,prev:v}),g.recentlyChangedFacts.add(n),y&&c.system&&(q.set(n,{value:m,flash:true}),j.delete(n),A(O),k("fact.set",{key:n,value:m}));},onFactDelete:(n,m)=>{d("fact.delete",{key:n,prev:m}),L("fact.delete",{key:n,prev:m}),y&&(j.add(n),q.delete(n),A(O),k("fact.delete",{key:n}));},onFactsBatch:n=>{if(d("facts.batch",{changes:n}),L("facts.batch",{count:n.length}),y&&c.system){for(let m of n)m.type==="delete"?(j.add(m.key),q.delete(m.key)):(g.recentlyChangedFacts.add(m.key),q.set(m.key,{value:m.value,flash:true}),j.delete(m.key));A(O),k("facts.batch",{count:n.length});}},onDerivationCompute:(n,m,v)=>{d("derivation.compute",{id:n,value:m,deps:v}),L("derivation.compute",{id:n,deps:v}),g.derivationDeps.set(n,v),g.recentlyComputedDerivations.add(n),k("derivation.compute",{id:n,deps:v});},onDerivationInvalidate:n=>{d("derivation.invalidate",{id:n}),k("derivation.invalidate",{id:n});},onReconcileStart:n=>{d("reconcile.start",{}),w.lastReconcileStartMs=performance.now(),k("reconcile.start",{}),L("reconcile.start",{});},onReconcileEnd:n=>{if(d("reconcile.end",n),L("reconcile.end",{unmet:n.unmet.length,inflight:n.inflight.length,completed:n.completed.length}),w.lastReconcileStartMs>0){let m=performance.now()-w.lastReconcileStartMs;w.reconcileCount++,w.reconcileTotalMs+=m,w.lastReconcileStartMs=0;}if(f.isRecording&&c.system&&f.snapshots.length<Be)try{f.snapshots.push({timestamp:Date.now(),facts:c.system.facts.$store.toObject()});}catch{}y&&c.system&&(S=n,Qe(g),A(Y|V|$|_|H|h),k("reconcile.end",{unmet:n.unmet.length,inflight:n.inflight.length}));},onConstraintEvaluate:(n,m,v)=>{let D=c.system?.meta?.constraint(n)?.label,B=D?{id:n,active:m,label:D}:{id:n,active:m},U=v?{...B,whenExplain:v}:B;d("constraint.evaluate",U),L("constraint.evaluate",U),m?(g.activeConstraints.add(n),g.recentlyActiveConstraints.add(n)):g.activeConstraints.delete(n),y&&(u.set(n,{active:m,whenExplain:v,label:D}),M.delete(n),A(C)),k("constraint.evaluate",{id:n,active:m});},onConstraintError:(n,m)=>{d("constraint.error",{id:n,error:String(m)}),k("constraint.error",{id:n,error:String(m)});},onRequirementCreated:n=>{d("requirement.created",{id:n.id,type:n.requirement.type}),L("requirement.created",{id:n.id,type:n.requirement.type}),k("requirement.created",{id:n.id,type:n.requirement.type});},onRequirementMet:(n,m)=>{d("requirement.met",{id:n.id,byResolver:m}),L("requirement.met",{id:n.id,byResolver:m}),k("requirement.met",{id:n.id,byResolver:m});},onRequirementCanceled:n=>{d("requirement.canceled",{id:n.id}),L("requirement.canceled",{id:n.id}),k("requirement.canceled",{id:n.id});},onResolverStart:(n,m)=>{let v=c.system?.meta?.resolver(n)?.label,D={resolver:n,requirementId:m.id},B=v?{...D,label:v}:D;d("resolver.start",B),L("resolver.start",B),E.inflight.set(n,performance.now()),y&&c.system&&(A($|V|x),k("resolver.start",{resolver:n,requirementId:m.id}));},onResolverComplete:(n,m,v)=>{let D=c.system?.meta?.resolver(n)?.label;d("resolver.complete",{resolver:n,requirementId:m.id,duration:v,...D?{label:D}:{}}),L("resolver.complete",{resolver:n,requirementId:m.id,duration:v});let B=c.resolverStats.get(n)??{count:0,totalMs:0,errors:0};if(B.count++,B.totalMs+=v,c.resolverStats.set(n,B),c.resolverStats.size>xe){let Z=c.resolverStats.keys().next().value;Z!==void 0&&c.resolverStats.delete(Z);}w.resolverStats.set(n,{...B});let U=E.inflight.get(n);E.inflight.delete(n),U!==void 0&&E.entries.push({resolver:n,startMs:U,endMs:performance.now(),error:false}),y&&c.system&&(A($|V|_|x),k("resolver.complete",{resolver:n,duration:v}));},onResolverError:(n,m,v)=>{d("resolver.error",{resolver:n,requirementId:m.id,error:String(v)}),L("resolver.error",{resolver:n,requirementId:m.id,error:String(v)});let D=c.resolverStats.get(n)??{count:0,totalMs:0,errors:0};if(D.errors++,c.resolverStats.set(n,D),c.resolverStats.size>xe){let U=c.resolverStats.keys().next().value;U!==void 0&&c.resolverStats.delete(U);}w.resolverStats.set(n,{...D});let B=E.inflight.get(n);E.inflight.delete(n),B!==void 0&&E.entries.push({resolver:n,startMs:B,endMs:performance.now(),error:true}),y&&c.system&&(A($|V|_|x),k("resolver.error",{resolver:n,error:String(v)}));},onResolverRetry:(n,m,v)=>{d("resolver.retry",{resolver:n,requirementId:m.id,attempt:v}),L("resolver.retry",{resolver:n,requirementId:m.id,attempt:v}),k("resolver.retry",{resolver:n,attempt:v});},onResolverCancel:(n,m)=>{d("resolver.cancel",{resolver:n,requirementId:m.id}),L("resolver.cancel",{resolver:n,requirementId:m.id}),E.inflight.delete(n),k("resolver.cancel",{resolver:n});},onResolverWriteRejected:n=>{let m=n.kind==="summary"?{kind:n.kind,resolver:n.resolver,requirementId:n.req.id,reason:n.reason,dropped:n.dropped}:{kind:n.kind,resolver:n.resolver,requirementId:n.req.id,reason:n.reason,fact:n.fact,expected:n.expected,actual:n.actual};d("resolver.write.rejected",m),L("resolver.write.rejected",m),k("resolver.write.rejected",n.kind==="summary"?{resolver:n.resolver,dropped:n.dropped}:{resolver:n.resolver,fact:n.fact});},onEffectRun:n=>{let m=c.system?.meta?.effect(n)?.label,v=m?{id:n,label:m}:{id:n};d("effect.run",v),L("effect.run",v),w.effectRunCount++,k("effect.run",{id:n});},onEffectError:(n,m)=>{d("effect.error",{id:n,error:String(m)}),w.effectErrorCount++,k("effect.error",{id:n,error:String(m)});},onSnapshot:n=>{d("timetravel.snapshot",{id:n.id,trigger:n.trigger}),y&&c.system&&A(h),k("timetravel.snapshot",{id:n.id,trigger:n.trigger});},onHistoryNavigate:(n,m)=>{if(d("timetravel.jump",{from:n,to:m}),L("timetravel.jump",{from:n,to:m}),y&&c.system){let v=c.system;try{let D=v.facts.$store.toObject();I.clear(),y.refs.factsBody.replaceChildren();for(let[B,U]of Object.entries(D))de(I,y.refs.factsBody,B,U,!1);y.refs.factsCount.textContent=String(Object.keys(D).length);}catch{}N.clear(),g.derivationDeps.clear(),y.refs.derivBody.replaceChildren(),R.clear(),y.refs.constraintsBody.replaceChildren(),y.refs.constraintsCount.textContent="0",S=null,A(Y|V|$|H|h),k("timetravel.jump",{from:n,to:m});}},onError:n=>{d("error",{source:n.source,sourceId:n.sourceId,message:n.message}),L("error",{source:n.source,message:n.message}),k("error",{source:n.source,message:n.message});},onErrorRecovery:(n,m)=>{d("error.recovery",{source:n.source,sourceId:n.sourceId,strategy:m}),k("error.recovery",{source:n.source,strategy:m});},onTraceComplete:n=>{d("trace.complete",{id:n.id,status:n.status,facts:n.factChanges.length,constraints:n.constraintsHit.length,requirements:n.requirementsAdded.length,resolvers:n.resolversStarted.length,effects:n.effectsRun.length}),k("trace.complete",{id:n.id});},onDefinitionRegister:(n,m)=>{d("definition.register",{type:n,id:m}),L("definition.register",{type:n,id:m}),k("definition.register",{type:n,id:m});},onDefinitionAssign:(n,m)=>{d("definition.assign",{type:n,id:m}),L("definition.assign",{type:n,id:m}),k("definition.assign",{type:n,id:m});},onDefinitionUnregister:(n,m)=>{d("definition.unregister",{type:n,id:m}),L("definition.unregister",{type:n,id:m}),k("definition.unregister",{type:n,id:m}),n==="constraint"&&y&&(M.add(m),u.delete(m),A(C));},onDefinitionCall:(n,m,v)=>{d("definition.call",{type:n,id:m,props:v}),L("definition.call",{type:n,id:m,props:v}),k("definition.call",{type:n,id:m,props:v});}}}var tt="directive-devtools-event",et=new Set(["__proto__","constructor","prototype"]),dt=Math.random().toString(36).slice(2,8);function mt(){if(typeof window<"u"){let e=`__DIRECTIVE_BRIDGE_ID_${dt}__`,s=window,o=s[e]??0;return s[e]=o+1,o+1}return 1}function pt(e){let s=false;for(let r of et)if(r in e){s=true;break}if(!s)return e;let o=Object.create(null);for(let[r,a]of Object.entries(e))et.has(r)||(o[r]=a);return o}function gt(e){if(!(typeof window>"u"))try{let s=pt(e),o={id:mt(),timestamp:Date.now(),snapshotId:null,...s};window.dispatchEvent(new CustomEvent(tt,{detail:o}));}catch{}}function ft(e$1){let{storage:s,key:o,include:r,exclude:a=[],debounce:p=100,onRestore:l,onSave:t,onError:i}=e$1,c=null,d=null,y=new Set,I=g=>a.includes(g)?false:r?r.includes(g):true,N=()=>{try{let g=s.getItem(o);if(!g)return null;let f=JSON.parse(g);return typeof f!="object"||f===null?null:e(f)?f:(i?.(new Error("Potential prototype pollution detected in stored data")),null)}catch(g){return i?.(g instanceof Error?g:new Error(String(g))),null}},R=()=>{if(d)try{let g={};for(let f of y)I(f)&&(g[f]=d.facts[f]);s.setItem(o,JSON.stringify(g)),t?.(g);}catch(g){i?.(g instanceof Error?g:new Error(String(g)));}},w=()=>{c&&clearTimeout(c),c=setTimeout(R,p);};return {name:"persistence",onInit:g=>{d=g;let f=N();f&&(d.facts.$store.batch(()=>{for(let[E,T]of Object.entries(f))I(E)&&(d.facts[E]=T,y.add(E));}),l?.(f));},onDestroy:()=>{c&&clearTimeout(c),R();},onFactSet:g=>{y.add(g),I(g)&&w();},onFactDelete:g=>{y.delete(g),I(g)&&w();},onFactsBatch:g=>{let f=false;for(let E of g)E.type==="set"?y.add(E.key):y.delete(E.key),I(E.key)&&(f=true);f&&w();}}}function bt(e={}){let{onSlowConstraint:s,onSlowResolver:o,slowConstraintThresholdMs:r=16,slowResolverThresholdMs:a=1e3}=e,p=new Map,l=new Map,t=new Map,i={runs:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0},c=0,d=0,y=0;function I(g){let f=p.get(g);return f||(f={evaluations:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0,lastEvaluatedAt:0},p.set(g,f)),f}function N(g){let f=l.get(g);return f||(f={starts:0,completions:0,errors:0,retries:0,cancellations:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0,lastCompletedAt:0},l.set(g,f)),f}function R(g){let f=t.get(g);return f||(f={runs:0,errors:0,lastRunAt:0},t.set(g,f)),f}let w={name:"performance",onStart(){c=Date.now();},onConstraintEvaluate(g,f){let E=performance.now(),T=I(g);if(T.evaluations++,T.lastEvaluatedAt=Date.now(),y>0){let P=E-y;T.totalDurationMs+=P;let F=T.evaluations;T.avgDurationMs=T.totalDurationMs/F,P>T.maxDurationMs&&(T.maxDurationMs=P),P>r&&s?.(g,P);}y=E;},onResolverStart(g,f){let E=N(g);E.starts++;},onResolverComplete(g,f,E){let T=N(g);T.completions++,T.totalDurationMs+=E,T.avgDurationMs=T.totalDurationMs/T.completions,E>T.maxDurationMs&&(T.maxDurationMs=E),T.lastCompletedAt=Date.now(),E>a&&o?.(g,E);},onResolverError(g,f,E){N(g).errors++;},onResolverRetry(g,f,E){N(g).retries++;},onResolverCancel(g,f){N(g).cancellations++;},onEffectRun(g){let f=R(g);f.runs++,f.lastRunAt=Date.now();},onEffectError(g,f){R(g).errors++;},onReconcileStart(){d=performance.now(),y=0;},onReconcileEnd(){let g=performance.now()-d;i.runs++,i.totalDurationMs+=g,i.avgDurationMs=i.totalDurationMs/i.runs,g>i.maxDurationMs&&(i.maxDurationMs=g);},onDestroy(){w.reset();},getSnapshot(){let g={};for(let[T,P]of p)g[T]={...P};let f={};for(let[T,P]of l)f[T]={...P};let E={};for(let[T,P]of t)E[T]={...P};return {constraints:g,resolvers:f,effects:E,reconcile:{...i},uptime:c?Date.now()-c:0}},reset(){p.clear(),l.clear(),t.clear(),i.runs=0,i.totalDurationMs=0,i.avgDurationMs=0,i.maxDurationMs=0,y=0;}};return w}function ve(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Te(e,s){if(e.length===0)return 0;let o=[...e].sort((a,p)=>a-p),r=Math.ceil(s/100*o.length)-1;return o[Math.max(0,r)]??0}function yt(e={}){let{serviceName:s="directive-agents",metrics:o={},tracing:r={},alerts:a=[],summaryMetrics:p={},events:l={}}=e,t={requests:p.requests??"agent.requests",errors:p.errors??"agent.errors",latency:p.latency??"agent.latency",tokens:p.tokens??"agent.tokens",cost:p.cost??"agent.cost"},{enabled:i=true,exportInterval:c,exporter:d,maxDataPoints:y=1e3}=o,{enabled:I=true,sampleRate:N=1,maxSpans:R=1e3,exporter:w}=r,g=Date.now(),f=new Map,E=new Map,T=[],P=[],F=new Map,O=new Map,Y;c&&(d||w)&&(Y=setInterval(async()=>{try{if(d&&i&&await d(Array.from(O.values())),w&&I){let h=T.splice(0,100);h.length>0&&await w(h);}}catch(h){console.error("[Directive Observability] Export error:",h);}},c));function $(h){if(!i)return;let x=`${h.name}:${JSON.stringify(Object.fromEntries(Object.entries(h.labels).sort()))}`,C=f.get(x);C||(C=[],f.set(x,C)),C.push(h),C.length>y&&C.shift(),V(h.name,C),l.onMetricRecorded?.(h),_(h.name);}function V(h,x){if(x.length===0)return;let C=x.map(S=>S.value),q=C.reduce((S,A)=>S+A,0),j=x[0],u=C[C.length-1],M={name:h,type:j.type,count:x.length,sum:q,min:Math.min(...C),max:Math.max(...C),avg:q/x.length,lastValue:u,lastUpdated:Date.now()};O.set(h,M);}function _(h){for(let x of a){if(x.metric!==h)continue;let C=O.get(h);if(!C)continue;let q=`${x.metric}:${x.threshold}`,j=F.get(q),u=x.cooldownMs??6e4;if(j&&Date.now()-j<u)continue;let M=x.operator??">",S=C.lastValue,A=x.threshold,W=false;switch(M){case ">":W=S>A;break;case "<":W=S<A;break;case ">=":W=S>=A;break;case "<=":W=S<=A;break;case "==":W=S===A;break}if(W){let k={alertId:ve(),metric:h,currentValue:S,threshold:A,operator:M,action:x.action,timestamp:Date.now(),message:`Alert: ${h} ${M} ${A} (current: ${S})`};switch(P.push(k),P.length>1e3&&P.splice(0,P.length-1e3),F.set(q,Date.now()),l.onAlert?.(k),x.action){case "log":console.log(`[Observability] ${k.message}`);break;case "warn":console.warn(`[Observability] ${k.message}`);break;case "alert":console.error(`[Observability ALERT] ${k.message}`);break;case "callback":x.callback?.(C,A);break}}}}function H(h){let x=[];for(let[C,q]of f)if(C.startsWith(`${h}:`))for(let j of q)x.push(j.value);return x.length===0?{}:{p50:Te(x,50),p90:Te(x,90),p99:Te(x,99)}}return {incrementCounter(h,x={},C=1){$({name:h,type:"counter",value:C,labels:x,timestamp:Date.now()});},setGauge(h,x,C={}){$({name:h,type:"gauge",value:x,labels:C,timestamp:Date.now()});},observeHistogram(h,x,C={}){$({name:h,type:"histogram",value:x,labels:C,timestamp:Date.now()});},startSpan(h,x){if(Math.random()>N)return {traceId:"sampled-out",spanId:"sampled-out",operationName:h,serviceName:s,startTime:Date.now(),status:"ok",tags:{},logs:[]};let C={traceId:x?E.get(x)?.traceId??ve():ve(),spanId:ve(),parentSpanId:x,operationName:h,serviceName:s,startTime:Date.now(),status:"ok",tags:{},logs:[]};return I&&(E.set(C.spanId,C),l.onSpanStart?.(C)),C},endSpan(h,x="ok"){if(h==="sampled-out")return;let C=E.get(h);if(C){for(C.endTime=Date.now(),C.duration=C.endTime-C.startTime,C.status=x,E.delete(h),T.push(C);T.length>R;)T.shift();$({name:`${C.operationName}.latency`,type:"histogram",value:C.duration,labels:{},timestamp:Date.now()}),x==="error"&&$({name:`${C.operationName}.errors`,type:"counter",value:1,labels:{},timestamp:Date.now()}),l.onSpanEnd?.(C);}},addSpanLog(h,x,C="info"){if(h==="sampled-out")return;let q=E.get(h);q&&q.logs.push({timestamp:Date.now(),message:x,level:C});},addSpanTag(h,x,C){if(h==="sampled-out")return;let q=E.get(h);q&&(q.tags[x]=C);},getDashboard(){let h=O.get(t.requests),x=O.get(t.errors),C=O.get(t.latency),q=O.get(t.tokens),j=O.get(t.cost),u=h?.sum??0,M=x?.sum??0,S=u>0?M/u:0,A=C?H(t.latency):{};return {service:{name:s,uptime:Date.now()-g,startTime:g},metrics:Object.fromEntries(O),traces:[...T].slice(-100),alerts:[...P].slice(-50),summary:{totalRequests:u,totalErrors:M,errorRate:S,avgLatency:C?.avg??0,p99Latency:A.p99??0,activeSpans:E.size,totalTokens:q?.sum??0,totalCost:j?.sum??0}}},getMetric(h){let x=O.get(h);if(!x)return;let C=H(h);return {...x,...C}},getTraces(h=100){return [...T].slice(-h)},getAlerts(){return [...P]},export(){return {metrics:Array.from(O.values()),traces:[...T],alerts:[...P]}},clear(){f.clear(),O.clear(),E.clear(),T.length=0,P.length=0,F.clear();},async destroy(){Y&&(clearInterval(Y),Y=void 0);try{d&&i&&O.size>0&&await d(Array.from(O.values())),w&&I&&T.length>0&&await w([...T]);}catch(h){console.error("[Directive Observability] Error flushing data during destroy:",h);}f.clear(),O.clear(),E.clear(),T.length=0,P.length=0,F.clear();},getHealthStatus(){let h=O.get(t.requests),x=O.get(t.errors),C=h?.sum??0,q=x?.sum??0,j=C>0?q/C:0,u=P.filter(M=>Date.now()-M.timestamp<3e5).length;return {healthy:j<.1&&u===0,uptime:Date.now()-g,errorRate:j,activeAlerts:u}}}}function vt(e){return {trackRun(s,o){let r={agent:s};e.incrementCounter("agent.requests",r),o.success||e.incrementCounter("agent.errors",r),e.observeHistogram("agent.latency",o.latencyMs,r),o.inputTokens!==void 0&&(e.incrementCounter("agent.tokens.input",r,o.inputTokens),e.incrementCounter("agent.tokens",r,o.inputTokens)),o.outputTokens!==void 0&&(e.incrementCounter("agent.tokens.output",r,o.outputTokens),e.incrementCounter("agent.tokens",r,o.outputTokens)),o.cost!==void 0&&e.incrementCounter("agent.cost",r,o.cost),o.toolCalls!==void 0&&e.incrementCounter("agent.tool_calls",r,o.toolCalls);},trackGuardrail(s,o){let r={guardrail:s};e.incrementCounter("guardrail.checks",r),o.passed||e.incrementCounter("guardrail.failures",r),o.blocked&&e.incrementCounter("guardrail.blocks",r),e.observeHistogram("guardrail.latency",o.latencyMs,r);},trackApproval(s,o){let r={tool:s};e.incrementCounter("approval.requests",r),o.approved?e.incrementCounter("approval.approved",r):e.incrementCounter("approval.rejected",r),o.timedOut&&e.incrementCounter("approval.timeouts",r),e.observeHistogram("approval.wait_time",o.waitTimeMs,r);},trackHandoff(s,o,r){e.incrementCounter("handoff.count",{from:s,to:o}),e.observeHistogram("handoff.latency",r);}}}function ht(e){let s=[{key:"service.name",value:{stringValue:e.serviceName??"directive-agents"}}];if(e.serviceVersion&&s.push({key:"service.version",value:{stringValue:e.serviceVersion}}),e.resourceAttributes)for(let[o,r]of Object.entries(e.resourceAttributes))s.push({key:o,value:{stringValue:r}});return {attributes:s}}function ne(e){return `${BigInt(e)*BigInt(1e6)}`}function St(e){switch(e){case "counter":return "sum";case "gauge":return "gauge";case "histogram":return "histogram";default:return "gauge"}}function xt(e,s,o){let r=e.map(a=>{let p=a.lastUpdated-6e4,l=[{asInt:a.type==="counter"?a.sum:void 0,asDouble:a.type!=="counter"?a.lastValue:void 0,timeUnixNano:ne(a.lastUpdated),startTimeUnixNano:ne(p),attributes:[]}],t=St(a.type),i={name:a.name,unit:""};return t==="sum"?i.sum={dataPoints:l,aggregationTemporality:2,isMonotonic:true}:t==="histogram"?i.histogram={dataPoints:[{count:a.count,sum:a.sum,min:a.min,max:a.max,timeUnixNano:ne(a.lastUpdated),startTimeUnixNano:ne(p),attributes:[]}],aggregationTemporality:2}:i.gauge={dataPoints:l},i});return {resourceMetrics:[{resource:s,scopeMetrics:[{scope:{name:"directive",version:o},metrics:r}]}]}}function Ct(e,s,o){let r=e.map(a=>{let p=a.logs.map(i=>({timeUnixNano:ne(i.timestamp),name:i.level,attributes:[{key:"message",value:{stringValue:i.message}},{key:"level",value:{stringValue:i.level}}]})),l=Object.entries(a.tags).map(([i,c])=>({key:i,value:typeof c=="string"?{stringValue:c}:typeof c=="number"?{intValue:`${c}`}:{boolValue:c}})),t=a.status==="ok"?1:a.status==="error"?2:0;return {traceId:a.traceId.replace(/-/g,"").padEnd(32,"0").slice(0,32),spanId:a.spanId.replace(/-/g,"").padEnd(16,"0").slice(0,16),parentSpanId:a.parentSpanId?a.parentSpanId.replace(/-/g,"").padEnd(16,"0").slice(0,16):void 0,name:a.operationName,kind:1,startTimeUnixNano:ne(a.startTime),endTimeUnixNano:a.endTime?ne(a.endTime):ne(a.startTime),attributes:l,events:p,status:{code:t}}});return {resourceSpans:[{resource:s,scopeSpans:[{scope:{name:"directive",version:o},spans:r}]}]}}function Et(e){let{endpoint:s,headers:o={},scopeVersion:r="0.1.0",timeoutMs:a=1e4,fetch:p=globalThis.fetch,onError:l}=e;try{let c=new URL(s);if(c.protocol!=="http:"&&c.protocol!=="https:")throw new Error("[Directive] Only http: and https: protocols are supported")}catch(c){throw new Error(`[Directive OTLP] Invalid endpoint URL "${s}": ${c instanceof Error?c.message:String(c)}`)}if(/\/v1\/(metrics|traces)/.test(s)&&console.warn(`[Directive OTLP] Endpoint "${s}" already contains a /v1/metrics or /v1/traces path. The exporter will append /v1/metrics or /v1/traces automatically. Use the base URL (e.g., "http://localhost:4318") instead.`),a<=0||!Number.isFinite(a))throw new Error(`[Directive OTLP] timeoutMs must be > 0, got ${a}`);let t=ht(e);async function i(c,d,y){let I=`${s.replace(/\/$/,"")}${c}`,N=new AbortController,R=setTimeout(()=>N.abort(),a);try{let w=await p(I,{method:"POST",headers:{"Content-Type":"application/json",...o},body:JSON.stringify(d),signal:N.signal});if(!w.ok)throw new Error(`[Directive] OTLP export failed: ${w.status} ${w.statusText}`)}catch(w){let g=w instanceof Error?w:new Error(String(w));l?l(g,y):console.error(`[Directive OTLP] Export ${y} error:`,g.message);}finally{clearTimeout(R);}}return {async exportMetrics(c){if(c.length===0)return;let d=xt(c,t,r);await i("/v1/metrics",d,"metrics");},async exportTraces(c){if(c.length===0)return;let d=Ct(c,t,r);await i("/v1/traces",d,"traces");}}}var me=class extends Error{code="CIRCUIT_OPEN";retryAfterMs;state;constructor(s,o,r="OPEN",a){let p=a?`[Directive CircuitBreaker] Circuit "${s}" is ${r}. ${a}`:`[Directive CircuitBreaker] Circuit "${s}" is ${r}. Request rejected. Try again in ${Math.ceil(o/1e3)}s.`;super(p),this.name="CircuitBreakerOpenError",this.retryAfterMs=o,this.state=r;}};function wt(e={}){let{failureThreshold:s=5,recoveryTimeMs:o=3e4,halfOpenMaxRequests:r=3,failureWindowMs:a=6e4,observability:p,metricPrefix:l="circuit_breaker",name:t="default",isFailure:i=()=>true,onStateChange:c}=e;if(s<1||!Number.isFinite(s))throw new Error(`[Directive CircuitBreaker] failureThreshold must be >= 1, got ${s}`);if(o<=0||!Number.isFinite(o))throw new Error(`[Directive CircuitBreaker] recoveryTimeMs must be > 0, got ${o}`);if(r<1||!Number.isFinite(r))throw new Error(`[Directive CircuitBreaker] halfOpenMaxRequests must be >= 1, got ${r}`);if(a<=0||!Number.isFinite(a))throw new Error(`[Directive CircuitBreaker] failureWindowMs must be > 0, got ${a}`);let d="CLOSED",y=[],I=0,N=0,R=Date.now(),w=0,g=0,f=0,E=0,T=0,P=null,F=null;function O(_){if(d===_)return;let H=d;d=_,R=Date.now(),_==="OPEN"&&(w=Date.now()),_==="HALF_OPEN"&&(I=0,N=0),c?.(H,_),p&&p.incrementCounter(`${l}.state_change`,{name:t,from:H,to:_});}function Y(){let _=Date.now()-a;return y=y.filter(H=>H>_),y.length}function $(){E++,F=Date.now(),p&&p.incrementCounter(`${l}.success`,{name:t}),d==="HALF_OPEN"&&(N++,N>=r&&(O("CLOSED"),y=[]));}function V(_){if(!i(_)){$();return}f++,P=Date.now(),y.push(Date.now());let H=s*2;if(y.length>H&&(y=y.slice(-H)),p&&p.incrementCounter(`${l}.failure`,{name:t}),d==="HALF_OPEN"){O("OPEN");return}d==="CLOSED"&&Y()>=s&&O("OPEN");}return {async execute(_){if(g++,p&&p.incrementCounter(`${l}.requests`,{name:t}),d==="OPEN")if(Date.now()-w>=o)O("HALF_OPEN");else throw T++,p&&p.incrementCounter(`${l}.rejected`,{name:t}),new me(t,o-(Date.now()-w));if(d==="HALF_OPEN"){if(I>=r)throw T++,new me(t,o,"HALF_OPEN",`Max trial requests (${r}) reached.`);I++;}let H=Date.now();try{let h=await _();return $(),p&&p.observeHistogram(`${l}.latency`,Date.now()-H,{name:t}),h}catch(h){let x=h instanceof Error?h:new Error(String(h));throw V(x),p&&p.observeHistogram(`${l}.latency`,Date.now()-H,{name:t}),h}},getState(){return d==="OPEN"&&Date.now()-w>=o&&O("HALF_OPEN"),d},getStats(){return {state:this.getState(),totalRequests:g,totalFailures:f,totalSuccesses:E,totalRejected:T,recentFailures:Y(),lastFailureTime:P,lastSuccessTime:F,lastStateChange:R}},forceState(_){O(_);},reset(){let _=d;d="CLOSED",y=[],I=0,N=0,R=Date.now(),w=0,g=0,f=0,E=0,T=0,P=null,F=null,_!=="CLOSED"&&c?.(_,"CLOSED");},isAllowed(){return d==="CLOSED"?true:d==="OPEN"?Date.now()-w>=o:I<r}}}
|
|
2
|
+
export{me as CircuitBreakerOpenError,tt as DEVTOOLS_EVENT_NAME,vt as createAgentMetrics,wt as createCircuitBreaker,Et as createOTLPExporter,yt as createObservability,ut as devtoolsPlugin,gt as emitDevToolsEvent,rt as loggingPlugin,bt as performancePlugin,ft as persistencePlugin};//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|