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