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