@sigmashake/ssg-linux-arm64 0.29.107 → 0.29.109
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/bin/ssg +0 -0
- package/bin/ssg.sha256 +1 -1
- package/package.json +1 -1
- package/public/assets/app.css +1 -1
- package/public/assets/app.js +4 -4
package/public/assets/app.js
CHANGED
|
@@ -11,7 +11,7 @@ Error generating stack: `+e.message+`
|
|
|
11
11
|
`)})]}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>{s(null),t(!1)},className:`text-[11.5px] text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:`↺ Close`})]})]})}function hn(e,t){if(!e)return;let n=typeof e;if(n===`string`||n===`number`||n===`bigint`){t.push(String(e));return}if(Array.isArray(e)){for(let n of e)hn(n,t);return}if(n===`object`)for(let[n,r]of Object.entries(e))r&&t.push(n)}function gn(...e){let t=[];for(let n of e)hn(n,t);return t.join(` `)}function _n(e,t){return n=>{let r=[e],i=t?.variants;if(i){let e=i,a=t?.defaultVariants??{},o=n??{};for(let[t,n]of Object.entries(e)){let e=o[t]??a[t];typeof e==`string`&&r.push(n[e])}}return r.push(n?.class,n?.className),gn(...r)}}var vn={block:`display`,"inline-block":`display`,inline:`display`,flex:`display`,"inline-flex":`display`,table:`display`,"inline-table":`display`,grid:`display`,"inline-grid":`display`,contents:`display`,hidden:`display`,"flow-root":`display`,"list-item":`display`,"sr-only":`display`,"not-sr-only":`display`,static:`position`,fixed:`position`,absolute:`position`,relative:`position`,sticky:`position`,"flex-row":`flex-direction`,"flex-row-reverse":`flex-direction`,"flex-col":`flex-direction`,"flex-col-reverse":`flex-direction`,"flex-wrap":`flex-wrap`,"flex-wrap-reverse":`flex-wrap`,"flex-nowrap":`flex-wrap`,"flex-1":`flex`,"flex-auto":`flex`,"flex-initial":`flex`,"flex-none":`flex`,grow:`flex-grow`,"grow-0":`flex-grow`,shrink:`flex-shrink`,"shrink-0":`flex-shrink`,"box-border":`box-sizing`,"box-content":`box-sizing`,visible:`visibility`,invisible:`visibility`,collapse:`visibility`,isolate:`isolation`,"isolation-auto":`isolation`,"text-left":`text-align`,"text-center":`text-align`,"text-right":`text-align`,"text-justify":`text-align`,"text-start":`text-align`,"text-end":`text-align`,uppercase:`text-transform`,lowercase:`text-transform`,capitalize:`text-transform`,"normal-case":`text-transform`,italic:`font-style`,"not-italic":`font-style`,underline:`text-decoration`,overline:`text-decoration`,"line-through":`text-decoration`,"no-underline":`text-decoration`,truncate:`text-overflow`,"text-ellipsis":`text-overflow`,"text-clip":`text-overflow`,antialiased:`font-smoothing`,"subpixel-antialiased":`font-smoothing`,"font-sans":`font-family`,"font-serif":`font-family`,"font-mono":`font-family`,"whitespace-normal":`whitespace`,"whitespace-nowrap":`whitespace`,"whitespace-pre":`whitespace`,"whitespace-pre-line":`whitespace`,"whitespace-pre-wrap":`whitespace`,"whitespace-break-spaces":`whitespace`,"pointer-events-none":`pointer-events`,"pointer-events-auto":`pointer-events`,border:`border-w`,"border-solid":`border-style`,"border-dashed":`border-style`,"border-dotted":`border-style`,"border-double":`border-style`,"border-hidden":`border-style`,"border-none":`border-style`,"border-collapse":`border-collapse`,"border-separate":`border-collapse`,"object-contain":`object-fit`,"object-cover":`object-fit`,"object-fill":`object-fit`,"object-none":`object-fit`,"object-scale-down":`object-fit`,rounded:`rounded`,shadow:`shadow`,transition:`transition`},yn=new Set([`xs`,`sm`,`base`,`lg`,`xl`,`2xl`,`3xl`,`4xl`,`5xl`,`6xl`,`7xl`,`8xl`,`9xl`]),bn=new Set([`t`,`r`,`b`,`l`,`tl`,`tr`,`br`,`bl`,`s`,`e`,`ss`,`se`,`ee`,`es`]),xn=new Set([`x`,`y`,`t`,`r`,`b`,`l`,`s`,`e`]);function Sn(e){let t=e;if(t.startsWith(`!`)&&(t=t.slice(1)),t.endsWith(`!`)&&(t=t.slice(0,-1)),t.startsWith(`-`)&&(t=t.slice(1)),t===``)return null;let n=vn[t];if(n)return n;let r=t.indexOf(`-`);if(r===-1)return null;let i=t.slice(0,r),a=t.slice(r+1),o=a.split(`-`)[0];switch(i){case`p`:case`px`:case`py`:case`pt`:case`pr`:case`pb`:case`pl`:case`ps`:case`pe`:return`pad-${i}`;case`m`:case`mx`:case`my`:case`mt`:case`mr`:case`mb`:case`ml`:case`ms`:case`me`:return`mar-${i}`;case`w`:return`width`;case`h`:return`height`;case`size`:return`size`;case`min`:return o===`w`?`min-width`:o===`h`?`min-height`:null;case`max`:return o===`w`?`max-width`:o===`h`?`max-height`:null;case`gap`:return o===`x`?`gap-x`:o===`y`?`gap-y`:`gap`;case`z`:return`z-index`;case`opacity`:return`opacity`;case`order`:return`order`;case`basis`:return`flex-basis`;case`aspect`:return`aspect`;case`cursor`:return`cursor`;case`leading`:return`line-height`;case`tracking`:return`letter-spacing`;case`rounded`:return bn.has(o)?`rounded-${o}`:`rounded`;case`shadow`:return`shadow`;case`items`:return`align-items`;case`justify`:return o===`items`?`justify-items`:o===`self`?`justify-self`:`justify-content`;case`self`:return`align-self`;case`content`:return`align-content`;case`transition`:return`transition`;case`duration`:return`duration`;case`delay`:return`delay`;case`ease`:return`ease`;case`top`:return`top`;case`right`:return`right`;case`bottom`:return`bottom`;case`left`:return`left`;case`inset`:return o===`x`?`inset-x`:o===`y`?`inset-y`:`inset`;case`overflow`:return o===`x`?`overflow-x`:o===`y`?`overflow-y`:`overflow`;case`font`:return`font-weight`;case`text`:return Cn(a);case`bg`:return`bg-color`;case`border`:return wn(a);case`col`:return o===`span`?`col-span`:`col-start-end`;case`row`:return o===`span`?`row-span`:`row-start-end`;case`grid`:return`grid-${o}`;default:return null}}function Cn(e){return yn.has(e)||e.startsWith(`[`)&&/^\[(length:|[\d.]+(px|rem|em|vh|vw|ch|ex|%))/.test(e)?`font-size`:`text-color`}function wn(e){let t=e.split(`-`)[0];return xn.has(t)?`border-w-${t}`:/^\d+$/.test(t)?`border-w`:t===`spacing`?`border-spacing`:`border-color`}function Tn(e){let t=0,n=-1;for(let r=0;r<e.length;r++){let i=e[r];i===`[`||i===`(`?t++:i===`]`||i===`)`?t--:i===`:`&&t===0&&(n=r)}return n===-1?{variants:``,base:e}:{variants:e.slice(0,n),base:e.slice(n+1)}}function En(e){let t=e.split(/\s+/).filter(Boolean),n=new Set,r=[];for(let e=t.length-1;e>=0;e--){let i=t[e],{variants:a,base:o}=Tn(i),s=Sn(o),c=s===null?`raw:${i}`:`${a}|${s}`;n.has(c)||(n.add(c),r.push(i))}return r.reverse(),r.join(` `)}function W(...e){return En(gn(e))}function Dn(e){let t=Math.max(0,Math.floor((Date.now()-e*1e3)/1e3));if(t<60)return`${t}s ago`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}function On(e){return new Date(e*1e3).toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function kn(e,t){try{let e=JSON.parse(t);if(!e||typeof e!=`object`)return t;for(let t of[`command`,`CommandLine`,`Input`,`query`,`Task`,`Prompt`])if(typeof e[t]==`string`&&e[t].length>0)return e[t];for(let t of[`file_path`,`path`,`TargetFile`,`AbsolutePath`,`SearchPath`,`DirectoryPath`,`Url`,`ImageName`])if(typeof e[t]==`string`&&e[t].length>0)return e[t];for(let t of Object.values(e))if(typeof t==`string`&&t.length>0)return t;return``}catch{return t}}var An=_n(`inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px] font-mono font-medium leading-none tracking-wide uppercase border whitespace-nowrap`,{variants:{variant:{green:`bg-emerald-500/8 text-emerald-300 border-emerald-500/25`,red:`bg-red-500/8 text-red-300 border-red-500/25`,amber:`bg-amber-500/10 text-amber-300 border-amber-500/30`,blue:`bg-sky-500/8 text-sky-300 border-sky-500/25`,gray:`bg-[var(--color-surface-2)] text-[var(--color-fg-3)] border-[var(--color-line-1)]`,purple:`bg-violet-500/8 text-violet-300 border-violet-500/25`,outline:`bg-transparent text-[var(--color-fg-3)] border-[var(--color-line-1)]`}},defaultVariants:{variant:`outline`}});function G({className:e,variant:t,...n}){return(0,D.jsx)(`span`,{className:W(An({variant:t,className:e})),...n})}var jn=e=>e,Mn=e=>({in:t=>t**e,out:t=>1-(1-t)**e,inOut:t=>t<.5?(2*t)**e/2:1-(-2*t+2)**e/2}),Nn=Mn(2),Pn=Mn(3),Fn=Mn(4),In=Mn(5),Ln={in:e=>1-Math.cos(e*Math.PI/2),out:e=>Math.sin(e*Math.PI/2),inOut:e=>-(Math.cos(Math.PI*e)-1)/2},Rn={in:e=>e===0?0:2**(10*e-10),out:e=>e===1?1:1-2**(-10*e),inOut:e=>e===0?0:e===1?1:e<.5?2**(20*e-10)/2:(2-2**(-20*e+10))/2},zn={in:e=>1-Math.sqrt(1-e**2),out:e=>Math.sqrt(1-(e-1)**2),inOut:e=>e<.5?(1-Math.sqrt(1-(2*e)**2))/2:(Math.sqrt(1-(-2*e+2)**2)+1)/2};function Bn(e=1.70158){let t=e;return e=>e*e*((t+1)*e-t)}function Vn(e=1.70158){let t=e;return e=>{let n=e-1;return n*n*((t+1)*n+t)+1}}function Hn(e=1.70158){let t=e*1.525;return e=>e<.5?(2*e)**2*((t+1)*2*e-t)/2:((2*e-2)**2*((t+1)*(e*2-2)+t)+2)/2}function Un(e=1,t=.3){let n=Math.max(e,1),r=Math.max(t,.08),i=r/(Math.PI*2)*Math.asin(1/n);return e=>e===0?0:e===1?1:n*2**(-10*e)*Math.sin((e-i)*(Math.PI*2)/r)+1}function Wn(e=1,t=.3){let n=Math.max(e,1),r=Math.max(t,.08),i=r/(Math.PI*2)*Math.asin(1/n);return e=>e===0?0:e===1?1:-(n*2**(10*(e-1))*Math.sin((e-1-i)*(Math.PI*2)/r))}function Gn(e=1,t=.45){let n=Math.max(e,1),r=Math.max(t,.08),i=r/(Math.PI*2)*Math.asin(1/n);return e=>{if(e===0)return 0;if(e===1)return 1;let t=e*2;return t<1?-.5*(n*2**(10*(t-1))*Math.sin((t-1-i)*(Math.PI*2)/r)):n*2**(-10*(t-1))*Math.sin((t-1-i)*(Math.PI*2)/r)*.5+1}}var Kn=7.5625,qn=2.75,Jn=e=>{if(e<1/qn)return Kn*e*e;if(e<2/qn){let t=e-1.5/qn;return Kn*t*t+.75}if(e<2.5/qn){let t=e-2.25/qn;return Kn*t*t+.9375}let t=e-2.625/qn;return Kn*t*t+.984375},Yn=e=>1-Jn(1-e),Xn=e=>e<.5?(1-Jn(1-2*e))/2:(1+Jn(2*e-1))/2;function Zn(e){let t=Math.max(1,Math.floor(e));return e=>e>=1?1:e<=0?0:Math.floor(e*t)/t}function Qn(e,t,n,r){let i=3*e,a=3*(n-e)-i,o=1-i-a,s=3*t,c=3*(r-t)-s,l=1-s-c,u=e=>((o*e+a)*e+i)*e,d=e=>((l*e+c)*e+s)*e,f=e=>(3*o*e+2*a)*e+i,p=e=>{let t=e;for(let n=0;n<8;n++){let n=u(t)-e;if(Math.abs(n)<1e-5)return t;let r=f(t);if(Math.abs(r)<1e-6)break;t-=n/r}let n=0,r=1;for(t=e;n<r;){let i=u(t);if(Math.abs(i-e)<1e-5)return t;e>i?n=t:r=t,t=(n+r)/2}return t};return e=>e<=0?0:e>=1?1:d(p(e))}function $n(e={}){let t=Math.max(1,e.stiffness??100),n=Math.max(0,e.damping??10),r=Math.max(.01,e.mass??1),i=e.velocity??0,a=Math.sqrt(t/r),o=n/(2*Math.sqrt(t*r)),s;if(o<1){let e=a*Math.sqrt(1-o*o),t=(o*a+-i)/e;s=n=>1-Math.exp(-o*a*n)*(1*Math.cos(e*n)+t*Math.sin(e*n))}else if(o===1){let e=a+-i;s=t=>1-Math.exp(-a*t)*(1+e*t)}else{let e=Math.sqrt(o*o-1),t=-a*(o-e),n=-a*(o+e),r=(n- -i)/(n-t),c=1-r;s=e=>1-(r*Math.exp(t*e)+c*Math.exp(n*e))}let c=400;for(let e=16;e<=4e3;e+=16){let t=s(e/1e3);if(Math.abs(1-t)<.005){let t=s((e-16)/1e3);if(Math.abs(1-t)<.005){c=e;break}}c=e}let l=c/1e3;return{duration:c,fn:e=>s(Math.max(0,Math.min(1,e))*l)}}var er={linear:jn,inQuad:Nn.in,outQuad:Nn.out,inOutQuad:Nn.inOut,inCubic:Pn.in,outCubic:Pn.out,inOutCubic:Pn.inOut,inQuart:Fn.in,outQuart:Fn.out,inOutQuart:Fn.inOut,inQuint:In.in,outQuint:In.out,inOutQuint:In.inOut,inSine:Ln.in,outSine:Ln.out,inOutSine:Ln.inOut,inExpo:Rn.in,outExpo:Rn.out,inOutExpo:Rn.inOut,inCirc:zn.in,outCirc:zn.out,inOutCirc:zn.inOut,inBack:Bn(),outBack:Vn(),inOutBack:Hn(),inElastic:Wn(),outElastic:Un(),inOutElastic:Gn(),inBounce:Yn,outBounce:Jn,inOutBounce:Xn};function tr(e){if(typeof e==`function`)return e;if(e===void 0)return er.outCubic;let t=er[e];if(t)return t;let n=e.match(/^(\w+)\(([^)]*)\)$/);if(n){let e=n[1],t=(n[2]??``).split(`,`).map(e=>parseFloat(e.trim())).filter(e=>!Number.isNaN(e));switch(e){case`outElastic`:return Un(t[0],t[1]);case`inElastic`:return Wn(t[0],t[1]);case`inOutElastic`:return Gn(t[0],t[1]);case`outBack`:return Vn(t[0]);case`inBack`:return Bn(t[0]);case`inOutBack`:return Hn(t[0]);case`steps`:return Zn(t[0]??4);case`cubicBezier`:return t.length>=4?Qn(t[0],t[1],t[2],t[3]):er.outCubic;default:return er.outCubic}}return er.outCubic}function nr(e,t){if(t<=1||e===void 0||e===`first`)return 0;if(e===`last`)return t-1;if(e===`center`)return(t-1)/2;let n=Math.floor(e);return n<0?0:n>t-1?t-1:n}function rr(e,t={}){let n=t.start??0,r=t.direction===`reverse`;return(i,a)=>{if(a<=0)return n;let o=nr(t.from,a),s=Math.abs(i-o),c=Math.max(o,a-1-o),l=c===0?0:s/c,u=r?1-l:l,d;if(Array.isArray(e)){let[t,n]=e;d=t+u*(n-t)}else d=(r?c-s:s)*e;return n+d}}var ir=new Set([`duration`,`delay`,`ease`,`loop`,`alternate`,`onBegin`,`onUpdate`,`onComplete`]);function ar(e){if(typeof e==`number`||typeof e==`string`)return e;if(Array.isArray(e)&&e.length===2){let[t,n]=e;if((typeof t==`number`||typeof t==`string`)&&(typeof n==`number`||typeof n==`string`))return[t,n]}return null}function or(e){return e?typeof e==`string`?typeof document>`u`?[]:Array.from(document.querySelectorAll(e)):e instanceof Element?[e]:`length`in e?Array.from(e):[]:[]}function sr(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var cr=/^(-?\d*\.?\d+)([a-z%]*)$/i;function lr(e){if(typeof e==`number`)return{value:e,unit:``};let t=e.trim().match(cr);return t?{value:parseFloat(t[1]),unit:t[2]??``}:{value:0,unit:``}}function ur(e){return e.unit===``?`${e.value}`:`${e.value}${e.unit}`}var dr=new Set([`translate`,`translateX`,`translateY`,`translateZ`,`scale`,`scaleX`,`scaleY`,`scaleZ`,`rotate`,`rotateX`,`rotateY`,`rotateZ`,`skew`,`skewX`,`skewY`]),fr=new WeakMap;function pr(e){let t=fr.get(e);return t||(t={values:{}},fr.set(e,t)),t}function mr(e){let t=[];for(let[n,r]of Object.entries(e.values)){let e=r.unit||(n.startsWith(`rotate`)||n.startsWith(`skew`)?`deg`:n.startsWith(`translate`)?`px`:``);t.push(`${n}(${r.value}${e})`)}return t.join(` `)}function hr(e,t,n){if(dr.has(t)){let r=pr(e);r.values[t]=n,e.style.transform=mr(r);return}if(t===`opacity`){e.style.opacity=`${n.value}`;return}e.style.setProperty(t,ur(n))}function gr(e,t){return dr.has(t)?pr(e).values[t]||{value:+!!t.startsWith(`scale`),unit:``}:lr(e.style.getPropertyValue(t)||(typeof window<`u`?window.getComputedStyle(e).getPropertyValue(t):``)||(t===`opacity`?`1`:`0`))}function _r(e,t,n){return e+(t-e)*n}function vr(e,t,n){return e===void 0?0:typeof e==`number`?e:e(t,n)}function yr(e){if(e&&typeof e==`object`&&`spring`in e){let t=$n(e.spring);return{ease:t.fn,duration:t.duration}}return{ease:tr(e),duration:null}}var br=0,xr=new Set;function Sr(e){for(let t of xr){if(t.done||e<t.start)continue;let{target:n,options:r}=t,i=e-t.start,a=Math.max(1,n.duration),o=r.loop??!1,s=r.alternate===!0,c=o===!0?1/0:typeof o==`number`?Math.max(1,o):1,l=Math.floor(i/a),u=(i-l*a)/a,d=s&&l%2==1?1-u:u;if(l>=c){for(let e of n.props)hr(n.el,e.name,Cr(e.from,e.to,s&&c%2==0?0:1));r.onUpdate?.(1,n.el,n.index),r.onComplete?.(n.el,n.index),t.done=!0;continue}for(let e of n.props){let t=e.ease(Math.max(0,Math.min(1,d)));n.el!==null&&hr(n.el,e.name,Cr(e.from,e.to,t))}n.el!==null&&r.onUpdate?.(d,n.el,n.index)}for(let e of[...xr])e.done&&xr.delete(e);if(xr.size===0){br=0;return}br=requestAnimationFrame(Sr)}function Cr(e,t,n){let r=e.unit||t.unit;return{value:_r(e.value,t.value,n),unit:r}}function wr(){br===0&&(typeof requestAnimationFrame>`u`||(br=requestAnimationFrame(Sr)))}function Tr(e,t){let n=or(e),r=n.length,i=Object.keys(t).filter(e=>!ir.has(e)),a=sr(),{ease:o,duration:s}=yr(t.ease),c=t.duration??s??400,l=[],u=[],d=typeof performance<`u`?performance.now():Date.now(),f=(e,n)=>{let a=[];for(let n of i){let r=t[n];if(r===void 0)continue;let i=ar(r);if(i===null)continue;let s,c;Array.isArray(i)?(s=lr(i[0]),c=lr(i[1])):(s=gr(e,n),c=lr(i)),a.push({name:n,from:s,to:c,ease:o})}return{el:e,index:n,props:a,duration:c,delay:vr(t.delay,n,r)}};if(n.length===0)return{cancel:()=>{},finished:Promise.resolve(),get done(){return!0}};let p=!1;for(let e=0;e<n.length;e++){let r=n[e],i=f(r,e),o=d+i.delay;if(t.onBegin?.(r,e),a){for(let e of i.props)hr(r,e.name,e.to);t.onUpdate?.(1,r,e),t.onComplete?.(r,e),u.push(Promise.resolve());continue}for(let e of i.props)hr(r,e.name,e.from);let s={target:i,start:o,options:t,done:!1};l.push(s),xr.add(s),u.push(new Promise(e=>{let n=t.onComplete,r=(t,r)=>{try{n?.(t,r)}finally{e()}};s.options={...t,onComplete:r}}))}return wr(),{cancel(){if(!p){p=!0;for(let e of l)e.done=!0,xr.delete(e)}},finished:Promise.all(u).then(()=>void 0),get done(){return p||l.every(e=>e.done)}}}var Er=_n(`hig-button relative overflow-hidden focus-visible:outline-none disabled:pointer-events-none disabled:opacity-45`,{variants:{variant:{primary:`hig-button-primary`,secondary:``,ghost:`hig-button-plain`,danger:`hig-button-destructive`},size:{sm:`hig-button-small`,md:``,icon:`!w-7 !h-7 !min-w-0 !p-0`}},defaultVariants:{variant:`primary`,size:`md`}});function Dr(e,t){if(sr())return;let n=e.getBoundingClientRect(),r=Math.hypot(n.width,n.height),i=document.createElement(`span`);i.style.position=`absolute`,i.style.left=`${t.clientX-n.left-r/2}px`,i.style.top=`${t.clientY-n.top-r/2}px`,i.style.width=`${r}px`,i.style.height=`${r}px`,i.style.borderRadius=`50%`,i.style.pointerEvents=`none`,i.style.background=`currentColor`,i.style.opacity=`0.22`,i.style.transform=`scale(0)`,i.style.mixBlendMode=`screen`,e.appendChild(i),Tr(i,{scale:[0,1],opacity:[.22,0],duration:540,ease:`outExpo`,onComplete:()=>{i.remove()}})}var K=_.forwardRef(({className:e,variant:t,size:n,onMouseDown:r,onClick:i,...a},o)=>(0,D.jsx)(`button`,{ref:o,className:W(Er({variant:t,size:n,className:e})),onMouseDown:e=>{Dr(e.currentTarget,e),r?.(e)},onClick:i,...a}));K.displayName=`Button`;var Or=_n(`hig-card flex flex-col min-h-0 overflow-hidden`,{variants:{variant:{default:``,interactive:`hover:border-[var(--color-line-2)] hover:shadow-[var(--hig-shadow-2)] transition-all cursor-pointer`,flush:`bg-transparent border-[var(--color-line-0)] shadow-none`}},defaultVariants:{variant:`default`}});function q({className:e,variant:t,...n}){return(0,D.jsx)(`div`,{className:W(Or({variant:t,className:e})),...n})}function J({className:e,...t}){return(0,D.jsx)(`div`,{className:W(`flex items-center justify-between gap-2 px-4 pt-3 pb-2 shrink-0`,e),...t})}function Y({className:e,...t}){return(0,D.jsx)(`div`,{className:W(`px-4 py-3 flex-1 min-h-0 overflow-auto`,e),...t})}function kr({className:e,children:t,...n}){return(0,D.jsx)(`pre`,{className:W(`bg-[var(--color-surface-0)] border border-[var(--color-line-1)] rounded-sm px-3 py-2 text-[11px] leading-relaxed font-mono text-[var(--color-fg-1)] overflow-x-auto whitespace-pre-wrap break-all`,e),...n,children:t})}var Ar=new Map;async function jr(e){let t=Ar.get(e);if(t)return t.status===`ok`?t.data:t.status===`error`?null:t.promise;let n=(async()=>{try{let t=await fetch(`/api/json/rule-explain?ruleId=${encodeURIComponent(e)}`,{headers:{Accept:`application/json`}});if(!t.ok)return Ar.set(e,{status:`error`,error:`HTTP ${t.status}`}),null;let n=await t.json();return Ar.set(e,{status:`ok`,data:n}),n}catch(t){return Ar.set(e,{status:`error`,error:String(t)}),null}})();return Ar.set(e,{status:`loading`,promise:n}),n}var Mr=220,Nr=90;function Pr({ruleId:e,children:t,className:n}){let[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(null),[s,c]=(0,_.useState)(null),l=(0,_.useRef)(null),u=(0,_.useRef)(null),d=(0,_.useRef)(null),f=()=>{u.current&&clearTimeout(u.current),d.current&&clearTimeout(d.current),u.current=null,d.current=null},p=(0,_.useCallback)(()=>{let e=l.current;if(!e)return;let t=e.getBoundingClientRect(),n=t.left;n+320>window.innerWidth-12&&(n=Math.max(12,window.innerWidth-320-12));let r=t.bottom+8;r+200>window.innerHeight-12&&(r=Math.max(12,t.top-200-8)),c({top:r,left:n})},[]),m=(0,_.useCallback)(()=>{f(),u.current=setTimeout(()=>{p(),i(!0),jr(e).then(e=>{e&&o(e)});let t=Ar.get(e);t&&t.status===`ok`&&o(t.data)},Mr)},[e,p,f]),h=(0,_.useCallback)(()=>{f(),d.current=setTimeout(()=>{i(!1)},Nr)},[f]);return(0,_.useEffect)(()=>{if(!r)return;let e=()=>p(),t=()=>p(),n=e=>{e.key===`Escape`&&i(!1)};return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,t),window.addEventListener(`keydown`,n),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,t),window.removeEventListener(`keydown`,n)}},[r,p]),(0,_.useEffect)(()=>()=>f(),[f]),(0,D.jsxs)(`span`,{ref:l,className:`ss-rule-trigger${n?` ${n}`:``}`,onMouseEnter:m,onMouseLeave:h,onFocus:m,onBlur:h,"aria-describedby":r?`rule-popover-${e}`:void 0,children:[t,r&&s&&(0,D.jsx)(`span`,{id:`rule-popover-${e}`,role:`tooltip`,className:`ss-rule-popover`,style:{top:s.top,left:s.left},onMouseEnter:()=>f(),onMouseLeave:h,children:a?(0,D.jsx)(Fr,{data:a}):(0,D.jsx)(`span`,{className:`ss-rule-popover__loading`,children:`loading rule…`})})]})}function Fr({data:e}){return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`span`,{className:`ss-rule-popover__head`,children:[(0,D.jsx)(`code`,{className:`ss-rule-popover__id`,children:e.ruleId}),(0,D.jsx)(`span`,{className:`ss-rule-popover__pill ss-rule-popover__pill--${e.decision}`,children:e.decision}),(0,D.jsx)(`span`,{className:`ss-rule-popover__state ss-rule-popover__state--${e.enabled?`on`:`off`}`,children:e.enabled?`ON`:`OFF`})]}),(0,D.jsx)(`strong`,{className:`ss-rule-popover__headline`,children:e.headline}),(0,D.jsx)(`span`,{className:`ss-rule-popover__summary`,children:e.summary}),e.conditions.length>1&&(0,D.jsxs)(`span`,{className:`ss-rule-popover__section`,children:[(0,D.jsx)(`span`,{className:`ss-rule-popover__label`,children:`Matches when`}),(0,D.jsx)(`ul`,{className:`ss-rule-popover__list`,children:e.conditions.map((e,t)=>(0,D.jsx)(`li`,{children:e},t))})]}),e.hints.length>0&&(0,D.jsx)(`span`,{className:`ss-rule-popover__hints`,children:e.hints.map((e,t)=>(0,D.jsx)(`span`,{className:`ss-rule-popover__hint`,children:e},t))}),(0,D.jsx)(`span`,{className:`ss-rule-popover__foot`,children:(0,D.jsx)(`a`,{href:`/rules?highlight=${encodeURIComponent(e.ruleId)}`,className:`ss-rule-popover__link`,children:`Open in Rules →`})})]})}var Ir={dashboard:`dashboard`,native:`native`,tty:`tty`,cli:`cli`},Lr={allow:`green`,block:`red`,force:`amber`,ask:`blue`,log:`gray`},Rr=[`all`,`allow`,`block`,`ask`,`force`,`log`],zr={allow:`text-emerald-300`,block:`text-red-300`,ask:`text-sky-300`,force:`text-amber-300`,log:`text-[var(--color-fg-3)]`},Br=[`allow`,`ask`,`block`,`disable`],Vr={allow:{label:`Always allow`,blurb:`Auto-approve matching tool calls — no prompt.`,toast:`Now always allowing`,tone:`#3fb950`},ask:{label:`Ask every time`,blurb:`Pause and wait for a manual approval each time.`,toast:`Now asking before`,tone:`#58a6ff`},block:{label:`Always block`,blurb:`Auto-deny matching tool calls — no prompt.`,toast:`Now always blocking`,tone:`#ff6f6f`},disable:{label:`Disable rule`,blurb:`Turn the rule off — it stops evaluating entirely.`,toast:`Disabled`,tone:`#8b949e`}};function Hr(e){return new Date(e*1e3).toLocaleString()}function Ur(e,t){if(!t)return``;let n=t-e;return n<60?`${n}s`:`${Math.round(n/60)}m`}async function Wr(e,t){await fetch(`/api/decide/${e}?decision=${t}`,{method:`POST`,headers:U()})}async function Gr(e,t){try{return await(await fetch(`/api/rules/set-enabled`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,...U()},body:JSON.stringify({ruleId:e,enabled:t})})).json()}catch(e){return{error:String(e)}}}async function Kr(e,t,n){try{let r=await fetch(`/api/rules/update-decision`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,...U()},body:JSON.stringify({ruleId:e,file:t,decision:n})}),i=await r.json().catch(()=>({}));return r.ok?{ok:i.ok!==!1,error:i.error}:{ok:!1,error:i.error??`HTTP ${r.status}`}}catch(e){return{ok:!1,error:String(e)}}}function qr(e,t){return e===`disable`?{decision:t.decision,enabled:!1}:{decision:e,enabled:!0}}function Jr(e){return e.enabled?e.decision===`allow`?`allow`:e.decision===`ask`?`ask`:e.decision===`block`?`block`:null:`disable`}function Yr(e,t){if(e===`disable`)return`This rule will stop evaluating tool calls.`;let n=[];return t.decision!==e&&n.push(`decision ${t.decision} → ${e}`),t.enabled||n.push(`rule switched back on`),n.length?n.join(` · `):`No change.`}function Xr(e){try{let t=JSON.parse(e).input;return t&&typeof t==`object`?kn(``,JSON.stringify(t)):kn(``,e)}catch{return e.slice(0,80)}}function Zr(e){try{let t=JSON.parse(e);return t.input===void 0?JSON.stringify(JSON.parse(e),null,2):JSON.stringify(t.input,null,2)}catch{return e}}function Qr({label:e,value:t,tone:n}){return(0,D.jsxs)(`div`,{className:`flex items-baseline gap-1.5`,children:[(0,D.jsx)(`span`,{className:`font-mono text-sm tabular-nums ${n??`text-[var(--color-fg-0)]`}`,children:t}),(0,D.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-wider text-[var(--color-fg-3)]`,children:e})]})}function $r(){return(0,D.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,D.jsx)(`line`,{x1:`4`,y1:`21`,x2:`4`,y2:`14`}),(0,D.jsx)(`line`,{x1:`4`,y1:`10`,x2:`4`,y2:`3`}),(0,D.jsx)(`line`,{x1:`12`,y1:`21`,x2:`12`,y2:`12`}),(0,D.jsx)(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`3`}),(0,D.jsx)(`line`,{x1:`20`,y1:`21`,x2:`20`,y2:`16`}),(0,D.jsx)(`line`,{x1:`20`,y1:`12`,x2:`20`,y2:`3`}),(0,D.jsx)(`line`,{x1:`1`,y1:`14`,x2:`7`,y2:`14`}),(0,D.jsx)(`line`,{x1:`9`,y1:`8`,x2:`15`,y2:`8`}),(0,D.jsx)(`line`,{x1:`17`,y1:`16`,x2:`23`,y2:`16`})]})}function ei(e,t){let n=Math.floor(Date.now()/1e3),r=n-86400,i=new Map;for(let t of e){if(t.decision!==`ask`||t.created_at<r||!t.rule_id)continue;let e=i.get(t.rule_id);e?(e.count+=1,t.created_at>e.lastSeen&&(e.lastSeen=t.created_at)):i.set(t.rule_id,{ruleId:t.rule_id,ruleMessage:t.rule_message||t.rule_id,count:1,lastSeen:t.created_at})}for(let e of t){if(!e.ruleId)continue;let t=i.get(e.ruleId);t?(t.count+=1,t.lastSeen=n):i.set(e.ruleId,{ruleId:e.ruleId,ruleMessage:e.ruleMessage||e.ruleId,count:1,lastSeen:n})}return Array.from(i.values()).filter(e=>e.count>=3).sort((e,t)=>t.count-e.count||t.lastSeen-e.lastSeen).slice(0,5)}function ti(e){let t=Math.max(0,Math.floor(Date.now()/1e3)-e);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function ni({toast:e,ruleMessage:t,ruleId:n,onDismiss:r,onUndo:i}){let[a,o]=(0,_.useState)(!1),s=(0,_.useRef)(null);return(0,_.useEffect)(()=>(s.current=setTimeout(r,6e3),()=>{s.current&&clearTimeout(s.current)}),[r]),(0,D.jsxs)(`div`,{className:`fixed bottom-5 left-1/2 -translate-x-1/2 z-50 flex items-center gap-3 px-4 py-2.5 rounded-full border border-[var(--color-line-2)] bg-[var(--color-surface-1)] backdrop-blur-md shadow-lg`,children:[(0,D.jsxs)(`span`,{className:`text-xs text-[var(--color-fg-1)]`,children:[e,` `,(0,D.jsx)(`span`,{className:`font-mono text-[var(--color-fg-0)]`,children:t})]}),(0,D.jsx)(`button`,{type:`button`,disabled:a,onClick:async()=>{o(!0),await i(),r()},className:`text-[11px] font-mono uppercase tracking-wider px-2.5 py-1 rounded-full border border-[var(--color-brand)]/40 text-[var(--color-brand)] hover:bg-[var(--color-brand)]/10 cursor-pointer disabled:opacity-50`,"aria-label":`Undo change to ${n}`,children:a?`undoing…`:`undo`}),(0,D.jsx)(`button`,{type:`button`,onClick:r,className:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,"aria-label":`Dismiss`,children:(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,children:[(0,D.jsx)(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`}),(0,D.jsx)(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`})]})})]})}function ri({target:e,current:t,rulesLoaded:n,onClose:r,onConfirm:i}){let[a,o]=(0,_.useState)(e?.suggest??null),[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(null);if(!e)return null;let d=t?Jr(t):null,f=a!==null&&a===d,p=a!==null&&t!==null&&!f&&!s,m=null;return e.pendingId&&a&&!f&&(m=a===`allow`?`The tool call waiting on this rule will be approved.`:a===`ask`?`The waiting tool call stays pending for you to decide.`:`The tool call waiting on this rule will be denied.`),(0,D.jsxs)(Qt,{open:!!e,onClose:r,size:`sm`,title:`Adjust this rule`,subtitle:`Change what this rule does when it matches — or switch it off. Every change here is reversible.`,footer:(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`button`,{type:`button`,className:`ss-btn ss-btn--secondary`,disabled:s,onClick:r,children:`Cancel`}),(0,D.jsx)(`button`,{type:`button`,className:`ss-btn ss-btn--primary`,style:{"--tone":a&&!f?Vr[a].tone:`var(--color-brand)`},disabled:!p,onClick:async()=>{if(!a||!t)return;c(!0),u(null);let n=await i(e,t,a);if(c(!1),!n.ok){u(n.message??`Could not apply the change.`);return}r()},children:s?`Applying…`:a&&!f?Vr[a].label:`Confirm`})]}),children:[(0,D.jsxs)(`div`,{className:`ss-list`,children:[(0,D.jsx)(`div`,{className:`ss-list-row`,style:{cursor:`default`},children:(0,D.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,D.jsx)(`div`,{className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-1`,children:`rule`}),(0,D.jsx)(`div`,{className:`text-sm text-[var(--color-fg-0)]`,children:e.ruleMessage}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5 flex-wrap`,children:[(0,D.jsx)(Pr,{ruleId:e.ruleId,children:(0,D.jsx)(`code`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] break-all`,children:e.ruleId})}),t&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(G,{variant:Lr[t.decision]??`gray`,children:t.decision}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:t.enabled?`enabled`:`disabled`})]})]})]})}),(0,D.jsx)(`div`,{className:`ss-list-row`,style:{cursor:`default`},children:(0,D.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,D.jsx)(`div`,{className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-1`,children:`recent activity`}),(0,D.jsxs)(`div`,{className:`text-sm text-[var(--color-fg-1)]`,children:[`Triggered`,` `,(0,D.jsx)(`strong`,{className:`text-[var(--color-fg-0)] tabular-nums`,children:e.fireCount}),` `,e.fireCount===1?`time`:`times`,` in the last 24 hours.`]})]})})]}),n?t?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`div`,{className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mt-4 mb-2`,children:`what should it do?`}),(0,D.jsx)(`div`,{role:`radiogroup`,"aria-label":`Choose what this rule does`,className:`space-y-1.5`,children:Br.map(e=>{let t=Vr[e],n=e===d,r=e===a;return(0,D.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":r,disabled:n||s,onClick:()=>o(e),className:`w-full flex items-start gap-3 px-3 py-2.5 rounded-md border text-left transition-colors ${r?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/8`:`border-[var(--color-line-1)] bg-[var(--color-surface-1)]`} ${n?`opacity-55 cursor-not-allowed`:`cursor-pointer hover:border-[var(--color-line-2)]`}`,children:[(0,D.jsx)(`span`,{className:`mt-0.5 shrink-0 flex items-center justify-center w-3.5 h-3.5 rounded-full border ${r?`border-[var(--color-brand)]`:`border-[var(--color-fg-4)]`}`,children:r&&(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-[var(--color-brand)]`})}),(0,D.jsxs)(`span`,{className:`flex-1 min-w-0`,children:[(0,D.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`text-sm font-medium`,style:{color:t.tone},children:t.label}),n&&(0,D.jsx)(G,{variant:`gray`,children:`current`})]}),(0,D.jsx)(`span`,{className:`block text-xs text-[var(--color-fg-3)] mt-0.5`,children:t.blurb})]})]},e)})}),a&&!f&&(0,D.jsx)(`p`,{className:`mt-3 text-xs font-mono text-[var(--color-fg-2)]`,children:Yr(a,t)}),f&&(0,D.jsx)(`p`,{className:`mt-3 text-xs text-[var(--color-fg-3)]`,children:`The rule is already set this way — pick a different option.`}),m&&(0,D.jsx)(`p`,{className:`mt-1.5 text-xs text-[var(--color-fg-3)]`,children:m})]}):(0,D.jsx)(`p`,{className:`mt-3 text-xs text-amber-300`,role:`alert`,children:`This rule is no longer present in your ruleset, so it can't be adjusted. It may have been deleted.`}):(0,D.jsx)(`p`,{className:`mt-3 text-xs text-[var(--color-fg-3)]`,children:`Loading this rule's current state…`}),(0,D.jsxs)(`p`,{className:`text-xs text-[var(--color-fg-3)] mt-3 leading-relaxed`,children:[`Reversible — undo straight after, or open`,` `,(0,D.jsx)(`a`,{href:`/rules`,className:`text-[var(--color-brand)] hover:underline`,children:`Rules`}),` `,`anytime.`]}),l&&(0,D.jsx)(`p`,{className:`mt-3 text-xs text-red-300`,role:`alert`,children:l})]})}function ii(){let e=zt([`pending-changed`,`rules-changed`]),{data:t,refetch:n}=H(`/api/json/pending`,[e[`pending-changed`]]),{data:r}=H(`/api/json/approvals`,[e[`pending-changed`]]),{data:i,refetch:a}=H(`/api/json/rules`,[e[`rules-changed`]]),[o,s]=(0,_.useState)(`all`),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(new Set),[f,p]=(0,_.useState)(null),[m,h]=(0,_.useState)(null),g=(0,_.useMemo)(()=>{let e=new Map;for(let t of i?.rulesets??[])for(let n of t.rules??[])e.has(n.id)||e.set(n.id,{decision:n.decision,enabled:n.enabled,file:t.file});return e},[i]),v=i!=null,y=(0,_.useMemo)(()=>ei(r??[],t??[]),[r,t]),b=(0,_.useMemo)(()=>{let e=new Map;for(let t of y)e.set(t.ruleId,t.count);return e},[y]),x=Math.floor(Date.now()/1e3),S=(r??[]).filter(e=>e.created_at>=x-86400).length,C=(r??[]).reduce((e,t)=>(e[t.decision]=(e[t.decision]??0)+1,e),{}),w=(r??[]).filter(e=>{if(o!==`all`&&e.decision!==o)return!1;if(c){let t=c.toLowerCase(),n=Xr(e.input).toLowerCase();if(!e.tool.toLowerCase().includes(t)&&!e.rule_id.toLowerCase().includes(t)&&!(e.rule_message??``).toLowerCase().includes(t)&&!n.includes(t))return!1}return!0});function T(e){d(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function E(e,t,r){let i=qr(r,t),o={decision:t.decision,enabled:t.enabled};if(i.decision!==t.decision){let n=await Kr(e.ruleId,t.file,i.decision);if(!n.ok)return{ok:!1,message:n.error??`Could not change the rule decision.`}}if(i.enabled!==t.enabled){let t=await Gr(e.ruleId,i.enabled);if(t.error||t.ok===!1)return{ok:!1,message:t.error??`Could not change the rule state.`}}if(e.pendingId)try{r===`allow`?await Wr(e.pendingId,`allow`):r!==`ask`&&await Wr(e.pendingId,`block`)}catch{}return h({ruleId:e.ruleId,ruleMessage:e.ruleMessage,file:t.file,action:r,prior:o,end:i}),n(),a(),{ok:!0}}async function O(e){e.end.decision!==e.prior.decision&&await Kr(e.ruleId,e.file,e.prior.decision),e.end.enabled!==e.prior.enabled&&await Gr(e.ruleId,e.prior.enabled),n(),a()}return(0,D.jsxs)(`div`,{className:`space-y-6`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`overline text-[11px]`,children:`approvals`}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--color-fg-3)] mt-1 font-mono`,children:`approve or deny pending tool calls · review past decisions · adjust or disable noisy rules`})]}),(0,D.jsxs)(`div`,{"data-tutorial":`appr-stats`,className:`flex flex-wrap items-center gap-5 px-3 py-2.5 rounded-sm border border-[var(--color-line-0)] bg-[var(--color-surface-1)]/60`,children:[(0,D.jsx)(Qr,{label:`pending`,value:t?.length??0,tone:`text-amber-300`}),(0,D.jsx)(`span`,{className:`text-[var(--color-line-2)]`,children:`|`}),[`allow`,`block`,`ask`,`force`,`log`].map(e=>(0,D.jsx)(Qr,{label:e,value:C[e]??0,tone:zr[e]},e)),(0,D.jsx)(`span`,{className:`text-[var(--color-line-2)]`,children:`|`}),(0,D.jsx)(Qr,{label:`last 24h`,value:S})]}),y.length>0&&(0,D.jsxs)(`section`,{className:`ss-noisy-card`,"aria-label":`Noisy rules`,children:[(0,D.jsxs)(`div`,{className:`ss-noisy-card-head`,children:[(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,D.jsx)(`path`,{d:`M12 9v4`}),(0,D.jsx)(`path`,{d:`M12 17h.01`}),(0,D.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`})]}),`asking too often · last 24h`]}),y.map(e=>(0,D.jsxs)(`div`,{className:`ss-noisy-row`,children:[(0,D.jsx)(`span`,{className:`ss-noisy-count`,"aria-label":`${e.count} fires`,children:e.count}),(0,D.jsxs)(`div`,{className:`ss-noisy-text`,children:[(0,D.jsx)(`span`,{className:`ss-noisy-title`,children:e.ruleMessage}),(0,D.jsxs)(`span`,{className:`ss-noisy-sub`,children:[(0,D.jsx)(Pr,{ruleId:e.ruleId,children:(0,D.jsx)(`code`,{className:`font-mono`,children:e.ruleId})}),(0,D.jsx)(`span`,{style:{margin:`0 6px`},children:`·`}),`last fired `,ti(e.lastSeen)]})]}),(0,D.jsxs)(`button`,{type:`button`,className:`ss-pill`,onClick:()=>p({ruleId:e.ruleId,ruleMessage:e.ruleMessage,fireCount:e.count,suggest:`disable`}),"aria-label":`Adjust rule ${e.ruleId}`,children:[(0,D.jsx)($r,{}),`Adjust`]})]},e.ruleId))]}),t&&t.length>0&&(0,D.jsxs)(`section`,{"data-tutorial":`appr-pending`,children:[(0,D.jsx)(`div`,{className:`flex items-center justify-between mb-3`,children:(0,D.jsxs)(`h2`,{className:`overline text-[11px]`,children:[`pending · `,t.length]})}),(0,D.jsx)(`div`,{className:`space-y-2`,children:t.map(e=>{let t=b.get(e.ruleId)??0;return(0,D.jsxs)(q,{className:`border-l-2 border-l-amber-400/60`,children:[(0,D.jsxs)(J,{children:[(0,D.jsx)(`span`,{className:`text-sm text-[var(--color-fg-0)]`,children:e.ruleMessage}),(0,D.jsxs)(`div`,{className:`flex gap-2 flex-wrap items-center`,children:[(0,D.jsx)(K,{size:`sm`,variant:`primary`,onClick:async()=>{await Wr(e.id,`allow`),n()},children:`approve`}),(0,D.jsx)(K,{size:`sm`,variant:`danger`,onClick:async()=>{await Wr(e.id,`block`),n()},children:`deny`}),(0,D.jsxs)(`button`,{type:`button`,className:`ss-pill`,onClick:()=>p({ruleId:e.ruleId,ruleMessage:e.ruleMessage,fireCount:t||1,pendingId:e.id}),"aria-label":`Adjust rule ${e.ruleId}`,children:[(0,D.jsx)($r,{}),`Adjust rule`]})]})]}),(0,D.jsxs)(Y,{className:`space-y-2 text-xs`,children:[(0,D.jsxs)(`div`,{className:`flex gap-3 flex-wrap items-center`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`tool`}),(0,D.jsx)(`code`,{className:`text-[var(--color-brand)] font-mono`,children:e.toolCall.tool}),(0,D.jsx)(`span`,{className:`overline ml-2`,children:`rule`}),(0,D.jsx)(Pr,{ruleId:e.ruleId,children:(0,D.jsx)(`span`,{className:`font-mono text-[var(--color-fg-2)]`,children:e.ruleId})}),t>=3&&(0,D.jsxs)(`span`,{className:`font-mono text-[10px] uppercase tracking-wider px-1.5 py-0.5 rounded-full`,style:{background:`color-mix(in oklab, #ffa657 14%, transparent)`,color:`#ffb27d`,border:`1px solid color-mix(in oklab, #ffa657 28%, transparent)`},title:`Fired ${t} times in the last 24h`,children:[`asks often · `,t,`×`]})]}),e.prompt&&(0,D.jsxs)(`div`,{className:`flex gap-2 items-start`,children:[(0,D.jsx)(`span`,{className:`overline pt-0.5 shrink-0`,children:`why`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:e.prompt})]}),(0,D.jsx)(kr,{children:JSON.stringify(e.toolCall.input,null,2)})]})]},e.id)})})]}),(0,D.jsxs)(`section`,{"data-tutorial":`appr-history`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between mb-3 gap-3 flex-wrap`,children:[(0,D.jsx)(`h2`,{className:`overline text-[11px]`,children:`history`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,D.jsx)(`div`,{className:`flex gap-0.5 rounded-sm border border-[var(--color-line-1)] p-0.5 bg-[var(--color-surface-1)]`,children:Rr.map(e=>(0,D.jsx)(`button`,{onClick:()=>s(e),className:`px-2 py-0.5 rounded-sm text-[11px] font-mono uppercase tracking-wider transition-colors cursor-pointer ${o===e?`bg-[var(--color-brand)]/10 text-[var(--color-brand)] border border-[var(--color-brand)]/30`:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] border border-transparent`}`,children:e},e))}),(0,D.jsx)(`input`,{type:`text`,placeholder:`search tool, rule, command…`,value:c,onChange:e=>l(e.target.value),className:`text-xs font-mono bg-[var(--color-surface-1)] border border-[var(--color-line-1)] rounded-sm px-2.5 py-1 text-[var(--color-fg-1)] placeholder-[var(--color-fg-4)] focus:outline-none focus:border-[var(--color-brand)]/50 w-48`})]})]}),!r||r.length===0?(0,D.jsx)(`div`,{className:`rounded-sm border border-dashed border-[var(--color-line-1)] px-4 py-6 text-center text-[11px] font-mono text-[var(--color-fg-3)]`,children:`no approval history yet`}):w.length===0?(0,D.jsx)(`div`,{className:`rounded-sm border border-dashed border-[var(--color-line-1)] px-4 py-6 text-center text-[11px] font-mono text-[var(--color-fg-3)]`,children:`no results match your filter`}):(0,D.jsx)(q,{children:(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:w.map(e=>{let t=u.has(e.id),n=Xr(e.input),r=Ur(e.created_at,e.resolved_at);return(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`button`,{onClick:()=>T(e.id),className:`w-full text-left px-3 py-2 hover:bg-[var(--color-surface-2)]/60 transition-colors cursor-pointer flex items-start gap-3`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] text-[10px] w-2.5 shrink-0 mt-1`,children:t?`▼`:`▶`}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0 flex flex-col gap-1`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] whitespace-nowrap tabular-nums`,children:Hr(e.resolved_at??e.created_at)}),(0,D.jsx)(G,{variant:Lr[e.decision]??`gray`,children:e.decision}),e.source&&(0,D.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-wider px-1.5 py-0.5 rounded-sm border border-[var(--color-line-1)] text-[var(--color-fg-3)]`,title:`Approval source: ${e.source}`,children:Ir[e.source]??e.source}),(0,D.jsx)(`code`,{className:`text-xs text-[var(--color-brand)] font-mono`,children:e.tool}),r&&(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] ml-auto`,children:[`Δ`,r]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,D.jsx)(`span`,{className:`text-xs text-[var(--color-fg-2)] truncate flex-1 min-w-0`,children:e.rule_message||e.rule_id||`—`}),n&&(0,D.jsx)(`span`,{className:`text-[11px] text-[var(--color-fg-3)] font-mono truncate flex-1 min-w-0 hidden md:block`,children:n})]})]})]}),t&&(0,D.jsxs)(`div`,{className:`px-3 pb-3 pt-1 space-y-2 bg-[var(--color-surface-0)]`,children:[(0,D.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1 text-xs font-mono items-center`,children:[(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] uppercase tracking-wider text-[10px]`,children:`rule`}),` `,e.rule_id?(0,D.jsx)(Pr,{ruleId:e.rule_id,children:(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:e.rule_id})}):(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:`—`})]}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] uppercase tracking-wider text-[10px]`,children:`created`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Hr(e.created_at)})]}),e.resolved_at&&(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] uppercase tracking-wider text-[10px]`,children:`resolved`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Hr(e.resolved_at)})]}),e.rule_id&&(0,D.jsxs)(`button`,{type:`button`,className:`ss-pill ml-auto`,onClick:()=>p({ruleId:e.rule_id,ruleMessage:e.rule_message||e.rule_id,fireCount:b.get(e.rule_id)??1}),"aria-label":`Adjust rule ${e.rule_id}`,children:[(0,D.jsx)($r,{}),`Adjust rule`]})]}),e.prompt&&(0,D.jsxs)(`div`,{className:`text-xs flex gap-2 items-start`,children:[(0,D.jsx)(`span`,{className:`overline pt-0.5 shrink-0`,children:`why`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:e.prompt})]}),(0,D.jsx)(kr,{children:Zr(e.input)})]})]},e.id)})})})]}),(0,D.jsx)(ri,{target:f,current:f?g.get(f.ruleId)??null:null,rulesLoaded:v,onClose:()=>p(null),onConfirm:E},f?.ruleId??`closed`),m&&(0,D.jsx)(ni,{toast:Vr[m.action].toast,ruleMessage:m.ruleMessage,ruleId:m.ruleId,onDismiss:()=>h(null),onUndo:()=>O(m)})]})}function ai(e){return e==null?`—`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function oi(e){if(e<60)return`${e}s`;let t=Math.floor(e/60);if(t<60)return`${t}m`;let n=Math.floor(t/60);return n<24?`${n}h`:`${Math.floor(n/24)}d ${n%24}h`}function si(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)(!1),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(``),[f,p]=(0,_.useState)(!1),[m,h]=(0,_.useState)(null),g=(0,_.useCallback)(async()=>{try{let e=await fetch(`/api/json/audit-config`);if(!e.ok)return;let n=await e.json();t(n),a(String(n.config.maxRows)),s(String(n.config.absoluteMaxRows)),l(String(n.config.minRetentionHours)),d(n.config.maxBytes==null?``:String(Math.round(n.config.maxBytes/(1024*1024))))}catch{}},[]);(0,_.useEffect)(()=>{g()},[g]);let v=(0,_.useMemo)(()=>!e?.usage.oldestTimestampSec||!e?.usage.newestTimestampSec?null:e.usage.newestTimestampSec-e.usage.oldestTimestampSec,[e]),y=async()=>{if(!e)return;p(!0),h(null);let t={},n=Number(i);Number.isFinite(n)&&n!==e.config.maxRows&&(t.maxRows=n);let r=Number(o);Number.isFinite(r)&&r!==e.config.absoluteMaxRows&&(t.absoluteMaxRows=r);let a=Number(c);if(Number.isFinite(a)&&a!==e.config.minRetentionHours&&(t.minRetentionHours=a),u.trim()===``)e.config.maxBytes!=null&&(t.maxBytes=null);else{let n=Number(u);if(Number.isFinite(n)){let r=Math.round(n*1024*1024);r!==e.config.maxBytes&&(t.maxBytes=r)}}if(Object.keys(t).length===0){h({kind:`ok`,text:`No changes.`}),p(!1);return}try{let e=await fetch(`/api/json/audit-config`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!e.ok){let t=await e.json();throw Error(t.error??`HTTP ${e.status}`)}await g(),h({kind:`ok`,text:`Saved. New budget applies within ~60 seconds.`})}catch(e){h({kind:`err`,text:e instanceof Error?e.message:String(e)})}finally{p(!1)}},b=async()=>{if(e){p(!0),h(null);try{let t=await fetch(`/api/json/audit-config`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e.defaults)});if(!t.ok){let e=await t.json();throw Error(e.error??`HTTP ${t.status}`)}await g(),h({kind:`ok`,text:`Reset to defaults.`})}catch(e){h({kind:`err`,text:e instanceof Error?e.message:String(e)})}finally{p(!1)}}};if(!e)return(0,D.jsx)(D.Fragment,{});let x=`w-32 bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-[11px] font-mono rounded-sm px-2 py-1.5 focus:outline-none focus:border-[var(--color-brand)]/50`,S=`text-[10.5px] uppercase tracking-wider text-[var(--color-fg-4)]`,C=`text-[10.5px] font-mono text-[var(--color-fg-4)] tabular-nums`;return(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)]`,children:[(0,D.jsxs)(`button`,{onClick:()=>r(e=>!e),className:`w-full flex items-center justify-between px-3 py-2 hover:bg-white/[0.02] cursor-pointer`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11.5px]`,children:[(0,D.jsx)(`span`,{className:`font-medium text-[var(--color-fg-1)]`,children:`Storage budget`}),(0,D.jsxs)(`span`,{className:C,children:[e.usage.rows.toLocaleString(),` rows`,e.usage.bytes!=null&&` · ${ai(e.usage.bytes)}`,v!=null&&` · spans ${oi(v)}`]})]}),(0,D.jsx)(`span`,{className:C,children:n?`▾`:`▸`})]}),n&&(0,D.jsxs)(`div`,{className:`border-t border-[var(--color-line-1)] px-3 py-3 space-y-3`,children:[(0,D.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-x-6 gap-y-3`,children:[(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:S,children:`Soft row cap`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`input`,{type:`number`,value:i,min:e.limits.maxRows.min,max:e.limits.maxRows.max,onChange:e=>a(e.target.value),className:x}),(0,D.jsx)(`span`,{className:C,children:`rows`})]}),(0,D.jsx)(`p`,{className:`text-[10.5px] text-[var(--color-fg-4)] leading-relaxed`,children:`Above this, old rows are rotated — but never within the retention window.`})]}),(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:S,children:`Hard ceiling`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`input`,{type:`number`,value:o,min:e.limits.absoluteMaxRows.min,max:e.limits.absoluteMaxRows.max,onChange:e=>s(e.target.value),className:x}),(0,D.jsx)(`span`,{className:C,children:`rows`})]}),(0,D.jsx)(`p`,{className:`text-[10.5px] text-[var(--color-fg-4)] leading-relaxed`,children:`Pruned regardless of age once exceeded. Protects against runaway disk growth.`})]}),(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:S,children:`Retention floor`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`input`,{type:`number`,value:c,step:`0.5`,min:e.limits.minRetentionHours.min,max:e.limits.minRetentionHours.max,onChange:e=>l(e.target.value),className:x}),(0,D.jsx)(`span`,{className:C,children:`hours`})]}),(0,D.jsx)(`p`,{className:`text-[10.5px] text-[var(--color-fg-4)] leading-relaxed`,children:`Rows newer than this are never deleted by the soft cap. Set 0 to disable the floor.`})]}),(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:S,children:`Size cap (optional)`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`input`,{type:`number`,value:u,placeholder:`off`,min:1,onChange:e=>d(e.target.value),className:x}),(0,D.jsx)(`span`,{className:C,children:`MB`})]}),(0,D.jsx)(`p`,{className:`text-[10.5px] text-[var(--color-fg-4)] leading-relaxed`,children:`Bytes-based eviction. Leave blank to disable. Honors the retention floor like the soft cap.`})]})]}),m&&(0,D.jsx)(`p`,{className:`text-[11px] font-mono ${m.kind===`err`?`text-rose-300`:`text-emerald-300`}`,children:m.text}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,D.jsx)(`button`,{onClick:y,disabled:f,className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-1)] hover:text-[var(--color-fg-0)] bg-[var(--color-surface-2)] hover:bg-[var(--color-surface-3)] border border-[var(--color-line-1)] rounded-sm px-3 py-1.5 disabled:opacity-50 cursor-pointer`,children:f?`saving…`:`save`}),(0,D.jsx)(`button`,{onClick:b,disabled:f,className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] border border-[var(--color-line-1)] rounded-sm px-3 py-1.5 disabled:opacity-50 cursor-pointer`,children:`reset to defaults`})]})]})]})}var ci={"http-json":`HTTP webhook (generic JSON)`,"splunk-hec":`Splunk HEC`,datadog:`Datadog logs`,"file-jsonl":`Local JSONL file`};function li(e){if(!e)return`never`;let t=Date.now()/1e3-e;return t<60?`${Math.floor(t)}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function ui(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)(!1),[i,a]=(0,_.useState)(null),[o,s]=(0,_.useState)(null),[c,l]=(0,_.useState)(!1),[u,d]=(0,_.useState)(``),[f,p]=(0,_.useState)(!1),[m,h]=(0,_.useState)(null),[g,v]=(0,_.useState)(null),y=async()=>{t(await(await fetch(`/api/json/audit-sinks`)).json())};(0,_.useEffect)(()=>{y()},[y]);let b=(0,_.useMemo)(()=>e?new Map(e.status.map(e=>[e.sink_id,e])):new Map,[e]),x=t=>{if(!e)return;let n=`${t}-${Date.now().toString(36).slice(-4)}`,r={id:n,name:ci[t],type:t,enabled:!1,endpoint:t===`file-jsonl`?void 0:``,path:t===`file-jsonl`?`~/.sigmashake/audit-export.jsonl`:void 0,auth:{type:`none`},batch:{maxEvents:100,maxBytes:1e6,intervalMs:3e4},retry:{maxAttempts:5,baseMs:1e3,maxMs:6e4},filter:{},payload:{template:e.starterTemplates[t]}};a(n),s(r),l(!1),d(JSON.stringify(r,null,2)),h(null),v(null)},S=e=>{a(e.id),s(JSON.parse(JSON.stringify(e))),l(!1),d(JSON.stringify(e,null,2)),h(null),v(null)},C=()=>{a(null),s(null),l(!1),d(``),h(null),v(null)},w=()=>{if(c)try{return JSON.parse(u)}catch{return null}return o},T=async()=>{let e=w();if(!e){h({kind:`err`,text:`JSON is invalid`});return}p(!0),h(null);try{let t=await fetch(`/api/json/audit-sinks`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();throw Error(e.error??`HTTP ${t.status}`)}await y(),h({kind:`ok`,text:`Saved.`}),C()}catch(e){h({kind:`err`,text:e instanceof Error?e.message:String(e)})}finally{p(!1)}},E=async e=>{if(confirm(`Delete sink "${e}"? Forwarded events stay; new events won't be sent here.`)){p(!0);try{let t=await fetch(`/api/json/audit-sinks?id=${encodeURIComponent(e)}`,{method:`DELETE`});if(!t.ok){let e=await t.json();throw Error(e.error??`HTTP ${t.status}`)}await y(),h({kind:`ok`,text:`Deleted.`})}catch(e){h({kind:`err`,text:e instanceof Error?e.message:String(e)})}finally{p(!1)}}},O=async()=>{let e=w();if(!e){h({kind:`err`,text:`JSON is invalid`});return}p(!0),v(null);try{let t=await(await fetch(`/api/json/audit-sinks/test`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)})).json();v({...t.result,rendered:t.rendered})}catch(e){v({ok:!1,status:0,error:e instanceof Error?e.message:String(e)})}finally{p(!1)}},k=async e=>{p(!0);try{let t=await fetch(`/api/json/audit-sinks`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({...e,enabled:!e.enabled})});if(!t.ok)throw Error(`HTTP ${t.status}`);await y()}catch(e){h({kind:`err`,text:e instanceof Error?e.message:String(e)})}finally{p(!1)}};if(!e)return(0,D.jsx)(D.Fragment,{});let ee=`text-[10.5px] font-mono text-[var(--color-fg-4)] tabular-nums`,A=`bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-[11px] font-mono rounded-sm px-2 py-1.5 focus:outline-none focus:border-[var(--color-brand)]/50`,j=`text-[10.5px] uppercase tracking-wider text-[var(--color-fg-4)]`,M=`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] border border-[var(--color-line-1)] rounded-sm px-3 py-1.5 disabled:opacity-50 cursor-pointer`;return(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)]`,children:[(0,D.jsxs)(`button`,{onClick:()=>r(e=>!e),className:`w-full flex items-center justify-between px-3 py-2 hover:bg-white/[0.02] cursor-pointer`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11.5px]`,children:[(0,D.jsx)(`span`,{className:`font-medium text-[var(--color-fg-1)]`,children:`Centralized logging`}),(0,D.jsx)(`span`,{className:ee,children:e.sinks.length===0?`no destinations`:`${e.sinks.filter(e=>e.enabled).length} of ${e.sinks.length} active`})]}),(0,D.jsx)(`span`,{className:ee,children:n?`▾`:`▸`})]}),n&&(0,D.jsxs)(`div`,{className:`border-t border-[var(--color-line-1)] px-3 py-3 space-y-3`,children:[(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-3)] leading-relaxed`,children:`Forward every audit event to your SIEM or log lake. Each destination has its own filter + payload template — edit the JSON directly to map fields to whatever shape your destination expects.`}),e.sinks.length>0&&(0,D.jsx)(`div`,{className:`space-y-1.5`,children:e.sinks.map(e=>{let t=b.get(e.id);return(0,D.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-2 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-0)]`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 ${e.enabled?t?.last_status===`ok`?`bg-emerald-400`:t?.last_status===`dead-lettered`?`bg-rose-400`:`bg-amber-400`:`bg-[var(--color-fg-4)]`}`}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11.5px] font-mono`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] truncate`,children:e.name}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:ci[e.type]})]}),(0,D.jsxs)(`div`,{className:`${ee} truncate`,children:[e.endpoint??e.path??``,t&&(0,D.jsxs)(D.Fragment,{children:[` · `,`sent: `,t.last_status??`—`,` · last:`,` `,li(t.last_sent_at),t.dropped_count>0&&(0,D.jsxs)(`span`,{className:`text-rose-300`,children:[` · `,`dropped: `,t.dropped_count]})]})]}),t?.last_error&&(0,D.jsx)(`div`,{className:`text-[10.5px] font-mono text-rose-300 truncate`,children:t.last_error})]}),(0,D.jsx)(`button`,{onClick:()=>k(e),disabled:f,className:M,children:e.enabled?`disable`:`enable`}),(0,D.jsx)(`button`,{onClick:()=>S(e),disabled:f,className:M,children:`edit`}),(0,D.jsx)(`button`,{onClick:()=>E(e.id),disabled:f,className:`${M} hover:!text-rose-300`,children:`delete`})]},e.id)})}),i===null&&(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,D.jsx)(`span`,{className:ee,children:`add destination:`}),(e.sinkTypes??[]).map(e=>(0,D.jsxs)(`button`,{onClick:()=>x(e),className:M,children:[`+ `,ci[e]]},e))]}),i!==null&&o&&(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-brand)]/30 bg-[var(--color-surface-0)] p-3 space-y-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsxs)(`div`,{className:`text-[11.5px] font-medium text-[var(--color-fg-1)]`,children:[i,` · `,ci[o.type]]}),(0,D.jsx)(`button`,{onClick:()=>l(e=>!e),className:M,children:c?`form view`:`raw JSON`})]}),!c&&(0,D.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-x-6 gap-y-3`,children:[(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:j,children:`Display name`}),(0,D.jsx)(`input`,{type:`text`,value:o.name,onChange:e=>s({...o,name:e.target.value}),className:`${A} w-full`})]}),o.type!==`file-jsonl`&&(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:j,children:`Endpoint URL`}),(0,D.jsx)(`input`,{type:`text`,value:o.endpoint??``,placeholder:`https://…`,onChange:e=>s({...o,endpoint:e.target.value}),className:`${A} w-full`})]}),o.type===`file-jsonl`&&(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:j,children:`File path`}),(0,D.jsx)(`input`,{type:`text`,value:o.path??``,onChange:e=>s({...o,path:e.target.value}),className:`${A} w-full`})]}),o.type!==`file-jsonl`&&(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:j,children:`Auth`}),(0,D.jsxs)(`select`,{value:o.auth.type,onChange:e=>{let t=e.target.value,n=t===`bearer`?{type:`bearer`,token:``}:t===`basic`?{type:`basic`,username:``,password:``}:t===`header`?{type:`header`,name:``,value:``}:{type:`none`};s({...o,auth:n})},className:`${A} w-full cursor-pointer`,children:[(0,D.jsx)(`option`,{value:`none`,children:`none`}),(0,D.jsx)(`option`,{value:`bearer`,children:`bearer token`}),(0,D.jsx)(`option`,{value:`basic`,children:`basic auth`}),(0,D.jsx)(`option`,{value:`header`,children:`custom header`})]})]}),o.auth.type===`bearer`&&(0,D.jsxs)(`div`,{className:`space-y-1 md:col-span-2`,children:[(0,D.jsx)(`label`,{className:j,children:`Token`}),(0,D.jsx)(`input`,{type:`password`,value:o.auth.token,onChange:e=>s({...o,auth:{type:`bearer`,token:e.target.value}}),className:`${A} w-full`})]}),o.auth.type===`basic`&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:j,children:`Username`}),(0,D.jsx)(`input`,{type:`text`,value:o.auth.username,onChange:e=>o.auth.type===`basic`&&s({...o,auth:{...o.auth,username:e.target.value}}),className:`${A} w-full`})]}),(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:j,children:`Password`}),(0,D.jsx)(`input`,{type:`password`,value:o.auth.password,onChange:e=>o.auth.type===`basic`&&s({...o,auth:{...o.auth,password:e.target.value}}),className:`${A} w-full`})]})]}),o.auth.type===`header`&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:j,children:`Header name`}),(0,D.jsx)(`input`,{type:`text`,value:o.auth.name,onChange:e=>o.auth.type===`header`&&s({...o,auth:{...o.auth,name:e.target.value}}),className:`${A} w-full`})]}),(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`label`,{className:j,children:`Header value`}),(0,D.jsx)(`input`,{type:`password`,value:o.auth.value,onChange:e=>o.auth.type===`header`&&s({...o,auth:{...o.auth,value:e.target.value}}),className:`${A} w-full`})]})]}),(0,D.jsxs)(`div`,{className:`space-y-1 md:col-span-2`,children:[(0,D.jsxs)(`label`,{className:j,children:[`Payload template (JSON; `,`{{field}}`,` placeholders)`]}),(0,D.jsx)(`textarea`,{value:JSON.stringify(o.payload.template??{},null,2),rows:10,onChange:e=>{try{let t=JSON.parse(e.target.value);s({...o,payload:{...o.payload,template:t}}),h(null)}catch{h({kind:`err`,text:`Template is not valid JSON`})}},className:`${A} w-full leading-snug`})]})]}),c&&(0,D.jsx)(`textarea`,{value:u,rows:20,onChange:e=>d(e.target.value),className:`${A} w-full leading-snug`}),g&&(0,D.jsxs)(`div`,{className:`rounded-sm border px-3 py-2 text-[11px] font-mono ${g.ok?`border-emerald-400/40 text-emerald-200 bg-emerald-400/5`:`border-rose-400/40 text-rose-200 bg-rose-400/5`}`,children:[(0,D.jsxs)(`div`,{children:[g.ok?`✓ delivered`:`✗ failed`,` (HTTP`,` `,g.status,`)`,g.error&&(0,D.jsx)(`span`,{className:`ml-2 text-rose-200`,children:g.error})]}),g.rendered!=null&&(0,D.jsxs)(`details`,{className:`mt-1`,children:[(0,D.jsx)(`summary`,{className:`cursor-pointer text-[10px] text-[var(--color-fg-4)]`,children:`payload sent`}),(0,D.jsx)(`pre`,{className:`mt-1 text-[10px] whitespace-pre-wrap break-all bg-black/30 rounded-sm px-2 py-1 max-h-48 overflow-y-auto`,children:JSON.stringify(g.rendered,null,2)})]})]}),m&&(0,D.jsx)(`p`,{className:`text-[11px] font-mono ${m.kind===`err`?`text-rose-300`:`text-emerald-300`}`,children:m.text}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`button`,{onClick:T,disabled:f,className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-1)] hover:text-[var(--color-fg-0)] bg-[var(--color-surface-2)] hover:bg-[var(--color-surface-3)] border border-[var(--color-line-1)] rounded-sm px-3 py-1.5 disabled:opacity-50 cursor-pointer`,children:f?`saving…`:`save`}),(0,D.jsx)(`button`,{onClick:O,disabled:f,className:M,children:`send test event`}),(0,D.jsx)(`button`,{onClick:C,disabled:f,className:M,children:`cancel`})]})]})]})]})}var di={__daemon:`SigmaShake itself`,bash:`Run a terminal command`,shell:`Run a terminal command`,run_command:`Run a terminal command`,exec:`Run a terminal command`,run_shell_command:`Run a terminal command`,read:`Read a file`,read_file:`Read a file`,view_file:`Read a file`,cat:`Read a file`,view:`Read a file`,write:`Save changes to a file`,write_to_file:`Save changes to a file`,create_file:`Create a new file`,edit:`Edit an existing file`,multiedit:`Edit several spots in a file`,patch:`Edit an existing file`,apply_patch:`Edit an existing file`,replace:`Edit an existing file`,grep:`Search the codebase`,ripgrep:`Search the codebase`,search:`Search the codebase`,search_codebase:`Search the codebase`,glob:`Find files by name`,find:`Find files by name`,list_files:`List files in a folder`,ls:`List files in a folder`,webfetch:`Read a webpage`,fetch:`Read a webpage`,websearch:`Search the web`,search_web:`Search the web`,browser_action:`Use a web browser`,agent:`Ask a helper AI to investigate`,spawn:`Ask a helper AI to investigate`,task:`Update its to-do list`,todowrite:`Update its to-do list`,todo_write:`Update its to-do list`,notebookedit:`Edit a Jupyter notebook`,notebook_edit:`Edit a Jupyter notebook`};function fi(e){return e?di[e.toLowerCase()]||`Use the ${e.replace(/^_+/,``)} tool`:`Take an action`}function pi(e){return e?{"claude-code":`Claude Code`,claudecode:`Claude Code`,cursor:`Cursor`,copilot:`GitHub Copilot`,codex:`OpenAI Codex`,gemini:`Gemini`,antigravity:`Antigravity`,pi:`Pi`,generic:`AI agent`,daemon:`SigmaShake`}[e.toLowerCase()]??e:`AI agent`}function mi(e){return e?e.startsWith(`__`):!1}function hi(e){for(let t of[`file_path`,`path`,`TargetFile`,`AbsolutePath`,`filename`,`file`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}function gi(e){for(let t of[`command`,`CommandLine`,`cmd`,`Input`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}function _i(e){for(let t of[`query`,`pattern`,`Query`,`q`,`search`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}function vi(e){for(let t of[`url`,`URL`,`Url`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}function yi(e){let t=e.replace(/[\\/]+$/,``),n=t.lastIndexOf(`/`),r=t.lastIndexOf(`\\`),i=Math.max(n,r);return i>=0?t.slice(i+1):t}function bi(e){let t=e.trim(),n=(t.split(/[|;&]/)[0]?.trim()??t).split(/\s+/),r=n[0]?.toLowerCase()??``,i=n[1]?.toLowerCase()??``,a=(e,t)=>({headline:e,detail:t});if(r===`rm`)return a(`Delete files`,`Deleting files from disk: \`${t}\``);if(r===`mkdir`)return a(`Create a folder`,`Creating a new folder: \`${t}\``);if(r===`mv`)return a(`Move or rename a file`,`Moving or renaming: \`${t}\``);if(r===`cp`)return a(`Copy a file`,`Copying files: \`${t}\``);if(r===`cat`||r===`head`||r===`tail`||r===`less`)return a(`Show file contents`,`Printing file contents: \`${t}\``);if(r===`ls`||r===`tree`||r===`find`)return a(`List files`,`Listing files: \`${t}\``);if(r===`cd`||r===`pwd`)return a(`Check the working folder`,`Checking or changing the current folder: \`${t}\``);if(r===`echo`||r===`printf`)return a(`Print a message`,`Printing a message: \`${t}\``);if(r===`curl`||r===`wget`)return a(`Download from the internet`,`Downloading something from the internet: \`${t}\``);if(r===`kill`||r===`pkill`)return a(`Stop a running program`,`Stopping a running program: \`${t}\``);if(r===`git`)return new Set([`status`,`log`,`diff`,`show`,`branch`,`remote`,`blame`,`config`]).has(i)?a(`Check git history`,`Reading git information (\`git ${i}\`) — no changes are made.`):i===`add`||i===`restore`||i===`reset`?a(`Stage or unstage changes`,`Preparing changes for commit (\`git ${i}\`).`):i===`commit`?a(`Save a checkpoint`,`Saving a snapshot of your changes to git history.`):i===`push`?a(`Send code to the remote`,`Uploading your commits to the remote git repository (e.g. GitHub).`):i===`pull`||i===`fetch`?a(`Get latest from the remote`,`Downloading the newest commits from the remote repository.`):i===`checkout`||i===`switch`?a(`Switch git branch`,`Switching which version of the code is loaded (\`git ${i}\`).`):i===`merge`||i===`rebase`?a(`Combine git branches`,`Combining changes from another branch (\`git ${i}\`).`):a(`Use git`,`Running a git command: \`${t}\``);if(r===`npm`||r===`bun`||r===`pnpm`||r===`yarn`){if(i===`install`||i===`i`||i===`add`)return a(`Install packages`,`Downloading project dependencies from the internet (\`${r} ${i}\`).`);if(i===`run`)return a(`Run a project script`,`Running a project script: \`${t}\``);if(i===`test`)return a(`Run automated tests`,`Running the project's automated tests.`);if(i===`build`)return a(`Build the project`,`Compiling the project for release.`)}return r===`pip`||r===`pip3`||r===`uv`?a(`Install Python packages`,`Installing Python packages: \`${t}\``):r===`pytest`||r===`jest`||r===`vitest`||r===`mocha`||r===`bun`&&i===`test`?a(`Run automated tests`,`Running automated tests: \`${t}\``):r===`docker`||r===`podman`?a(`Use Docker`,`Running a container command: \`${t}\``):r===`ssh`||r===`scp`||r===`rsync`?a(`Talk to another machine`,`Connecting to another computer over the network: \`${t}\``):a(`Run a terminal command`,`Running in the terminal: \`${t}\``)}function xi(e,t){let n=e??``,r=n.toLowerCase(),i=fi(n),a=null;try{let e=JSON.parse(t);e&&typeof e==`object`&&!Array.isArray(e)&&(a=e)}catch{}if(r===`__daemon`){let e=a?.event,t=a?.detail;return typeof e==`string`&&e.length>0?{headline:`SigmaShake itself`,detail:`SigmaShake ${e===`start`?`started`:e===`stop`?`stopped`:e}${typeof t==`string`&&t.length>0?` — ${t}`:``}.`}:{headline:`SigmaShake itself`,detail:`A SigmaShake lifecycle event.`}}if(!a)return{headline:i,detail:`${i}.`};if(r===`bash`||r===`shell`||r===`run_command`||r===`exec`||r===`run_shell_command`){let e=gi(a);return e?bi(e):{headline:i,detail:`Running a terminal command.`}}if(r===`read`||r===`read_file`||r===`view_file`||r===`cat`||r===`view`){let e=hi(a);return e?{headline:i,detail:`Reading the file \`${yi(e)}\` so it can understand the current code. No changes are made.`}:{headline:i,detail:`Reading a file. No changes are made.`}}if(r===`write`||r===`write_to_file`||r===`create_file`){let e=hi(a);return e?{headline:`Save changes to a file`,detail:`Creating or overwriting the file \`${yi(e)}\`. This will replace anything that was there before.`}:{headline:i,detail:`Creating or overwriting a file.`}}if(r===`edit`||r===`multiedit`||r===`patch`||r===`apply_patch`||r===`replace`){let e=hi(a);return e?{headline:i,detail:`Editing the file \`${yi(e)}\` — changing specific parts of it without rewriting the whole thing.`}:{headline:i,detail:`Editing a file in place.`}}if(r===`grep`||r===`ripgrep`||r===`search`||r===`search_codebase`){let e=_i(a);return e?{headline:i,detail:`Searching the project for the text "${e}".`}:{headline:i,detail:`Searching the project for matching text.`}}if(r===`glob`||r===`find`||r===`list_files`||r===`ls`){let e=_i(a)??hi(a);return e?{headline:i,detail:`Looking for files matching "${e}".`}:{headline:i,detail:`Looking for files in the project.`}}if(r===`webfetch`||r===`fetch`||r===`browser_action`){let e=vi(a);return e?{headline:i,detail:`Reading a webpage from the internet: ${e}`}:{headline:i,detail:`Reading a webpage from the internet.`}}if(r===`websearch`||r===`search_web`){let e=_i(a);return e?{headline:i,detail:`Searching the web for "${e}".`}:{headline:i,detail:`Searching the web.`}}return r===`agent`||r===`spawn`?{headline:i,detail:`Asking a separate helper AI to investigate something on its own, then report back. Helps keep this conversation focused.`}:r===`task`||r===`todowrite`||r===`todo_write`?{headline:i,detail:`Updating its internal to-do list so it can keep track of progress on a multi-step task.`}:{headline:i,detail:`${i}.`}}function Si({val:e}){return e==null?(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] italic font-mono text-xs`,children:`null`}):typeof e==`boolean`?(0,D.jsx)(`span`,{className:`inline-block font-mono text-[10px] font-medium uppercase tracking-wider px-1.5 py-0.5 rounded-sm border ${e?`bg-emerald-500/8 text-emerald-300 border-emerald-500/25`:`bg-red-500/8 text-red-300 border-red-500/25`}`,children:e.toString()}):typeof e==`number`?(0,D.jsx)(`span`,{className:`font-mono tabular-nums text-violet-300 text-xs`,children:e}):typeof e==`string`?e.length===0?(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] italic text-xs font-mono`,children:`empty string`}):e.length>200?(0,D.jsx)(`pre`,{className:`text-[11px] font-mono text-[var(--color-fg-1)] whitespace-pre-wrap break-all bg-[var(--color-surface-0)] border border-[var(--color-line-1)] rounded-sm p-2 max-h-40 overflow-y-auto`,children:e}):(0,D.jsx)(`span`,{className:`font-mono text-xs text-[var(--color-fg-1)] break-all`,children:e}):(0,D.jsx)(`pre`,{className:`text-[11px] font-mono text-[var(--color-fg-1)] whitespace-pre-wrap break-all bg-[var(--color-surface-0)] border border-[var(--color-line-1)] rounded-sm p-2 max-h-40 overflow-y-auto`,children:JSON.stringify(e,null,2)})}function Ci({inputJson:e}){let t=[];try{let n=JSON.parse(e);n&&typeof n==`object`&&!Array.isArray(n)&&(t=Object.entries(n))}catch{return(0,D.jsx)(`pre`,{className:`text-[11px] font-mono text-[var(--color-fg-1)] whitespace-pre-wrap break-all bg-[var(--color-surface-0)] border border-[var(--color-line-1)] rounded-sm p-2`,children:e})}return t.length===0?(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] text-xs italic font-mono`,children:`no input fields`}):(0,D.jsx)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] overflow-hidden text-xs`,children:t.map(([e,t],n)=>(0,D.jsxs)(`div`,{className:`flex gap-0 ${n>0?`border-t border-[var(--color-line-0)]`:``}`,children:[(0,D.jsx)(`div`,{className:`w-40 shrink-0 px-3 py-2 bg-[var(--color-surface-0)] text-[var(--color-fg-3)] font-mono text-[11px] border-r border-[var(--color-line-0)] select-none`,children:e}),(0,D.jsx)(`div`,{className:`flex-1 min-w-0 px-3 py-2 leading-relaxed`,children:(0,D.jsx)(Si,{val:t})})]},e))})}var wi={allow:`green`,block:`red`,force:`amber`,ask:`blue`,log:`gray`},Ti={allow:`Allowed`,block:`Blocked`,force:`Forced`,ask:`Held`,log:`Logged`},Ei={allow:`border-l-emerald-500/60`,block:`border-l-red-500/60`,force:`border-l-amber-400/60`,ask:`border-l-sky-500/60`,log:`border-l-[var(--color-line-2)]`};function Di(e){return e==null?null:e<1e6?`${(e/1e3).toFixed(0)}µs`:`${(e/1e6).toFixed(1)}ms`}function Oi({label:e,value:t,mono:n,children:r}){return(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`overline mb-1`,children:e}),r??(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] text-xs ${n?`font-mono`:``} break-all`,children:t??`—`})]})}function ki({text:e}){let[t,n]=(0,_.useState)(!1);return(0,D.jsx)(`button`,{onClick:async t=>{t.stopPropagation();try{await navigator.clipboard.writeText(e),n(!0),setTimeout(()=>n(!1),1500)}catch{}},className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] border border-[var(--color-line-1)] hover:border-[var(--color-line-2)] rounded-sm px-2 py-1 transition-colors cursor-pointer`,children:t?`✓ copied`:`copy json`})}function Ai({row:e,defaultExpanded:t=!1}){let[n,r]=(0,_.useState)(t),i=(0,_.useRef)(null),a=(0,_.useRef)(!0),o=kn(e.tool,e.input),s=o&&o.length>0?o:e.input&&e.input!==`{}`&&e.input!==``?e.input:`—`,c=wi[e.decision]??`gray`,l=Ei[e.decision]??`border-l-[var(--color-line-2)]`,u=On(e.timestamp),d=Di(e.duration_ns),f=xi(e.tool,e.input);(0,_.useEffect)(()=>{let e=i.current;if(e){if(a.current){a.current=!1,n||(e.style.maxHeight=`0`,e.style.opacity=`0`);return}if(sr()){e.style.maxHeight=n?`none`:`0`,e.style.opacity=n?`1`:`0`;return}if(n){let t=e.scrollHeight;Tr(e,{"max-height":[`0px`,`${t}px`],opacity:[0,1],translateY:[-6,0],duration:260,ease:`outCubic`,onComplete:()=>{e.style.maxHeight=`none`}})}else{let t=e.scrollHeight;Tr(e,{"max-height":[`${t}px`,`0px`],opacity:[1,0],duration:180,ease:`outCubic`})}}},[n]);let p=(()=>{try{return JSON.stringify(JSON.parse(e.input),null,2)}catch{return e.input}})();return(0,D.jsxs)(`div`,{className:`border border-[var(--color-line-1)] border-l-2 ${l} rounded-sm bg-[var(--color-surface-1)] overflow-hidden transition-colors hover:border-[var(--color-line-2)] hover:border-l-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 cursor-pointer select-none group`,onClick:()=>r(e=>!e),role:`button`,"aria-expanded":n,children:[(0,D.jsx)(`svg`,{className:`shrink-0 w-3 text-[var(--color-fg-4)] group-hover:text-[var(--color-fg-2)] transition-all ${n?`rotate-90`:``}`,width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`polyline`,{points:`9 18 15 12 9 6`})}),(0,D.jsx)(`time`,{className:`shrink-0 font-mono text-[11px] text-[var(--color-fg-3)] w-14 tabular-nums`,title:u,dateTime:new Date(e.timestamp*1e3).toISOString(),children:Dn(e.timestamp)}),(0,D.jsx)(G,{variant:c,className:`shrink-0 w-20 justify-center`,children:Ti[e.decision]??e.decision}),(0,D.jsxs)(`span`,{className:`flex-1 min-w-0 flex items-baseline gap-2`,title:`${f.headline} · ${e.tool}`,children:[(0,D.jsx)(`span`,{className:`text-[12px] text-[var(--color-fg-0)] font-medium truncate`,children:f.headline}),!mi(e.tool)&&s!==`—`&&(0,D.jsx)(`span`,{className:`text-[11px] text-[var(--color-fg-3)] font-mono truncate hidden sm:inline`,title:s,children:s})]}),d&&(0,D.jsx)(`span`,{className:`shrink-0 hidden md:inline w-12 text-right font-mono text-[10px] text-[var(--color-fg-4)] tabular-nums`,title:`Eval latency: ${d}`,children:d}),(0,D.jsx)(`span`,{className:`shrink-0 w-24 text-right text-[10px] text-[var(--color-fg-3)] truncate`,title:e.client?`Adapter: ${e.client}`:`Unidentified caller`,children:pi(e.client)})]}),(0,D.jsx)(`div`,{ref:i,className:`border-t border-[var(--color-line-0)] overflow-hidden`,style:{maxHeight:n?`none`:`0`,opacity:+!!n},"aria-hidden":!n,children:n&&(0,D.jsxs)(`div`,{className:`px-3 py-3 space-y-4`,children:[(0,D.jsxs)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-x-6 gap-y-3`,children:[(0,D.jsx)(Oi,{label:`When`,value:u}),(0,D.jsx)(Oi,{label:`Decision`,children:(0,D.jsx)(G,{variant:c,children:Ti[e.decision]??e.decision})}),(0,D.jsx)(Oi,{label:`Action`,children:(0,D.jsxs)(`span`,{className:`text-xs text-[var(--color-fg-1)]`,children:[f.headline,(0,D.jsxs)(`span`,{className:`ml-2 text-[10px] font-mono text-[var(--color-fg-4)]`,children:[`(`,e.tool,`)`]})]})}),e.client&&(0,D.jsx)(Oi,{label:`AI agent`,value:pi(e.client)}),e.rule_id&&(0,D.jsx)(Oi,{label:`Rule ID`,children:(0,D.jsx)(`a`,{href:`/rules?highlight=${encodeURIComponent(e.rule_id)}`,className:`text-xs text-[var(--color-brand)] hover:underline font-mono`,onClick:e=>e.stopPropagation(),children:e.rule_id})}),e.source_file&&(0,D.jsx)(Oi,{label:`Source File`,value:e.source_file,mono:!0}),d&&(0,D.jsx)(Oi,{label:`Latency`,value:d,mono:!0}),e.rules_evaluated!=null&&(0,D.jsx)(Oi,{label:`Rules Evaluated`,value:`${e.rules_evaluated}`,mono:!0})]}),(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-0)] px-3 py-2.5`,children:[(0,D.jsx)(`div`,{className:`overline mb-1`,children:`In plain English`}),(0,D.jsx)(`div`,{className:`text-xs font-medium text-[var(--color-fg-1)] mb-1`,children:f.headline}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--color-fg-2)] leading-relaxed`,children:f.detail})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`overline mb-2`,children:`Tool Input`}),(0,D.jsx)(Ci,{inputJson:e.input})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e.rule_id?(0,D.jsx)(`a`,{href:`/rules?highlight=${encodeURIComponent(e.rule_id)}`,className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-brand)]/70 hover:text-[var(--color-brand)] transition-colors`,onClick:e=>e.stopPropagation(),children:`→ view rule`}):(0,D.jsx)(`span`,{}),(0,D.jsx)(ki,{text:p})]})]})})]})}var ji=[``,`allow`,`block`,`force`,`ask`,`log`],Mi=[``,`claude-code`,`gemini`,`antigravity`,`cursor`,`copilot`,`codex`,`pi`,`generic`],Ni=[50,100,250,500],Pi=100;function Fi(){let[e,t]=(0,_.useState)(``),[n,r]=(0,_.useState)(``),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(Pi),[u,d]=(0,_.useState)(0),[f,p]=(0,_.useState)(null),[m,h]=(0,_.useState)(!1),[g,v]=(0,_.useState)(null);zt([`activity-updated`]),(0,_.useEffect)(()=>{let t=!1,r=new URLSearchParams;return e&&r.set(`decision`,e),n&&r.set(`tool`,n),i&&r.set(`client`,i),r.set(`limit`,String(c)),r.set(`offset`,String(u)),r.set(`envelope`,`1`),h(!0),v(null),fetch(`/api/state/activity?${r.toString()}`).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(e=>{t||(p(e),h(!1))}).catch(e=>{t||(v(e instanceof Error?e.message:String(e)),h(!1))}),()=>{t=!0}},[e,n,i,c,u]);let y=e=>t=>{e(t.target.value),d(0)},b=(0,_.useMemo)(()=>{if(!f)return[];let e=o.trim().toLowerCase();return e?f.rows.filter(t=>t.tool.toLowerCase().includes(e)||t.decision.toLowerCase().includes(e)||(t.rule_id??``).toLowerCase().includes(e)||(t.client??``).toLowerCase().includes(e)||(t.source_file??``).toLowerCase().includes(e)||t.input.toLowerCase().includes(e)):f.rows},[f,o]),x=f?.total??0,S=Math.floor(u/c)+1,C=Math.max(1,Math.ceil(x/c)),w=x===0?0:u+1,T=Math.min(u+(f?.rows.length??0),x),E=`bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-[11px] font-mono rounded-sm px-2 py-1.5 focus:outline-none focus:border-[var(--color-brand)]/50 cursor-pointer`,O=`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-2)] hover:text-[var(--color-fg-0)] border border-[var(--color-line-1)] hover:border-[var(--color-line-2)] rounded-sm px-3 py-1.5 transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed`;return(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-[20px] font-semibold tracking-tight text-[var(--color-fg-0)] leading-tight`,children:`What your AI tried to do`}),(0,D.jsxs)(`p`,{className:`text-[12.5px] text-[var(--color-fg-3)] mt-1 leading-relaxed`,children:[`Every move your AI agent made — and what SigmaShake decided.`,f&&(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)] tabular-nums ml-1.5`,children:[`· `,x.toLocaleString(),` action`,x===1?``:`s`,` on record`]})]})]}),(0,D.jsxs)(`div`,{"data-tutorial":`audit-filters`,className:`flex flex-wrap items-center gap-2`,children:[(0,D.jsx)(`select`,{id:`audit-filter-decision`,value:e,onChange:y(t),className:E,children:ji.map(e=>(0,D.jsx)(`option`,{value:e,children:e===``?`All decisions`:e===`allow`?`Allowed`:e===`block`?`Blocked`:e===`force`?`Forced`:e===`ask`?`Held`:`Logged`},e))}),(0,D.jsx)(`select`,{id:`audit-filter-client`,value:i,onChange:y(a),className:E,children:Mi.map(e=>(0,D.jsx)(`option`,{value:e,children:e===``?`All AI agents`:e===`claude-code`?`Claude Code`:e===`copilot`?`GitHub Copilot`:e===`codex`?`OpenAI Codex`:e.charAt(0).toUpperCase()+e.slice(1)},e))}),(0,D.jsx)(`input`,{id:`audit-filter-tool`,type:`text`,placeholder:`Filter by tool…`,value:n,onChange:y(r),className:`bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-[11px] rounded-sm px-2.5 py-1.5 w-36 focus:outline-none focus:border-[var(--color-brand)]/50 placeholder:text-[var(--color-fg-4)]`}),(0,D.jsx)(`select`,{id:`audit-page-size`,value:c,onChange:e=>{l(Number(e.target.value)),d(0)},className:E,title:`Rows per page`,children:Ni.map(e=>(0,D.jsxs)(`option`,{value:e,children:[e,` / page`]},e))})]})]}),(0,D.jsx)(`div`,{"data-tutorial":`audit-config`,children:(0,D.jsx)(si,{})}),(0,D.jsx)(`div`,{"data-tutorial":`audit-sinks`,children:(0,D.jsx)(ui,{})}),(0,D.jsxs)(`div`,{className:`relative`,children:[(0,D.jsxs)(`svg`,{className:`absolute left-3 top-1/2 -translate-y-1/2 text-[var(--color-fg-4)] pointer-events-none`,width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`11`,cy:`11`,r:`8`}),(0,D.jsx)(`line`,{x1:`21`,y1:`21`,x2:`16.65`,y2:`16.65`})]}),(0,D.jsx)(`input`,{id:`audit-search`,type:`text`,placeholder:`Search within this page…`,value:o,onChange:e=>s(e.target.value),className:`w-full bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-sm rounded-sm pl-9 pr-10 py-2.5 focus:outline-none focus:border-[var(--color-brand)]/50 placeholder:text-[var(--color-fg-4)] transition-colors`}),o&&(0,D.jsx)(`button`,{onClick:()=>s(``),className:`absolute right-3 top-1/2 -translate-y-1/2 text-[var(--color-fg-4)] hover:text-[var(--color-fg-1)] transition-colors cursor-pointer`,title:`Clear search`,children:(0,D.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),(0,D.jsx)(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})]})})]}),f&&f.rows.length>0&&(0,D.jsxs)(`div`,{className:`flex items-center gap-2 px-3 text-[10px] uppercase tracking-widest text-[var(--color-fg-4)] select-none`,children:[(0,D.jsx)(`span`,{className:`w-3`}),(0,D.jsx)(`span`,{className:`w-14`,children:`When`}),(0,D.jsx)(`span`,{className:`w-20`,children:`Decision`}),(0,D.jsx)(`span`,{className:`flex-1 min-w-0`,children:`Action`}),(0,D.jsx)(`span`,{className:`hidden md:inline w-12 text-right`,children:`Time`}),(0,D.jsx)(`span`,{className:`w-24 text-right`,children:`AI agent`})]}),g&&(0,D.jsxs)(`p`,{className:`text-sm text-red-300 font-mono`,children:[`failed to load audit log: `,g]}),m&&!f&&(0,D.jsx)(`div`,{className:`space-y-1.5`,children:Array.from({length:10}).map((e,t)=>(0,D.jsx)(`div`,{className:`h-9 bg-[var(--color-surface-1)] rounded-sm border border-[var(--color-line-0)] border-l-2 border-l-[var(--color-line-2)] shimmer`},t))}),!m&&!g&&b.length===0&&(0,D.jsxs)(`div`,{className:`rounded-sm border border-dashed border-[var(--color-line-1)] py-16 flex flex-col items-center justify-center text-center`,children:[(0,D.jsx)(`p`,{className:`text-[12.5px] text-[var(--color-fg-2)]`,children:o?`No actions on this page match your search.`:x===0?`Nothing yet — connect an AI agent and its actions will show up here.`:`No rows on this page match the filter.`}),o&&(0,D.jsx)(`button`,{onClick:()=>s(``),className:`mt-3 text-[11.5px] text-[var(--color-brand)] hover:underline cursor-pointer`,children:`Clear search`})]}),b.length>0&&(0,D.jsx)(`div`,{className:`space-y-1.5`,children:b.map(e=>(0,D.jsx)(Ai,{row:e},e.id))}),f&&x>c&&(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3 pt-2`,children:[(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] tabular-nums`,children:[`showing `,w.toLocaleString(),`–`,T.toLocaleString(),` `,`of `,x.toLocaleString()]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`button`,{onClick:()=>d(0),disabled:u===0,className:O,children:`⟪ first`}),(0,D.jsx)(`button`,{onClick:()=>d(Math.max(0,u-c)),disabled:u===0,className:O,children:`‹ prev`}),(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] tabular-nums`,children:[`page `,S,` / `,C]}),(0,D.jsx)(`button`,{onClick:()=>d(f.nextOffset==null?u:f.nextOffset),disabled:f.nextOffset==null,className:O,children:`next ›`}),(0,D.jsx)(`button`,{onClick:()=>d((C-1)*c),disabled:f.nextOffset==null,className:O,children:`last ⟫`})]})]})]})}var Ii=Object.freeze([`eval-burst`,`eval-burst-complete`,`counters-updated`]);function Li(){(0,_.useEffect)(()=>Ft(Ii),[])}function Ri(){return Li(),(0,_.useSyncExternalStore)(Et,Dt).latestBurst}function zi(){return Li(),(0,_.useSyncExternalStore)(Et,Dt).burstRing}function Bi(){return Li(),(0,_.useSyncExternalStore)(Et,Dt).burstSeq}function Vi(e){return`${e.client}:${e.agent_id??`solo`}`}var Hi=Object.freeze({allow:`#22c55e`,block:`#ef4444`,ask:`#f59e0b`,log:`#60a5fa`,force:`#a855f7`,shadow:`#6b7280`}),Ui=5*6e4,Wi=1200,Gi=30*6e4,Ki=1.4;function qi(e){let t=(e.input_tokens??0)+(e.output_tokens??0);if(t<=0)return 6;let n=6+Math.log2(1+t/50)*Ki;return n<4?4:n>16?16:n}function Ji(e){let t=(e.input_tokens??0)+(e.output_tokens??0);if(t<=0)return 0;let n=Math.log2(1+t/50)*Ki/10;return n<=0?0:n>=1?1:n}function Yi(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(Math.round(e))}function Xi(e,t){if(t<=0)return e;let n=e.startsWith(`#`)?e.slice(1):e;if(n.length!==6)return e;let r=parseInt(n.slice(0,2),16),i=parseInt(n.slice(2,4),16),a=parseInt(n.slice(4,6),16);if(Number.isNaN(r)||Number.isNaN(i)||Number.isNaN(a))return e;let o=Math.max(r,i,a);if(o===0)return e;let s=t>1?1:t,c=(255-o)*s,l=Math.round(r+r/o*c),u=Math.round(i+i/o*c),d=Math.round(a+a/o*c),f=e=>(e<0?0:e>255?255:e).toString(16).padStart(2,`0`);return`#${f(l)}${f(u)}${f(d)}`}var Zi=new Set([`compact`,`end`,`stop`,`subagent-stop`,`close`]),Qi=Object.freeze([`session-lifecycle`]);function $i(e){(0,_.useEffect)(()=>Ft(Qi),[]);let t=(0,_.useSyncExternalStore)(Et,Dt),[n,r]=(0,_.useState)(new Map),i=(0,_.useRef)(0);(0,_.useEffect)(()=>{let e=t.lifecycleRing;if(e.length<=i.current)return;let n=e.slice(i.current);i.current=e.length,ea(n,r)},[t.lifecycleRing]);let a=(0,_.useRef)(void 0);return(0,_.useEffect)(()=>{!e||e===a.current||(a.current=e,ea(e,r))},[e]),{closedAt:n,isBurstActive(e,t){let r=n.get(e);return r===void 0||t>r}}}function ea(e,t){let n=e.filter(e=>Zi.has(e.event));n.length!==0&&t(e=>{let t=!1,r=new Map(e);for(let e of n){let n=r.get(e.session_key);(n===void 0||e.ts_ms>n)&&(r.set(e.session_key,e.ts_ms),t=!0)}return t?r:e})}var ta=1440*60*1e3,na=1800*1e3,ra=3e3;function ia(e,t){if(e.length===0)return t.slice();if(t.length===0)return e.slice();let n=new Set,r=[],i=0,a=0;for(;i<e.length&&a<t.length;){let o=e[i].ts_ms<=t[a].ts_ms?e[i++]:t[a++],s=aa(o);n.has(s)||(n.add(s),r.push(o))}for(;i<e.length;i++){let t=e[i],a=aa(t);n.has(a)||(n.add(a),r.push(t))}for(;a<t.length;a++){let e=t[a],i=aa(e);n.has(i)||(n.add(i),r.push(e))}return r}function aa(e){return e.audit_id??`${e.ts_ms}:${e.tool}:${e.client}`}function oa(e,t){if(e.length===0)return t.slice();if(t.length===0)return e.slice();let n=new Set,r=[];for(let i of[...e,...t]){let e=`${i.session_key}:${i.ts_ms}:${i.event}`;n.has(e)||(n.add(e),r.push(i))}return r}function sa(e,t,n,r=200,i=Gi,a=12){let o=new Map,s=new Map;for(let r of e){if(r.ts_ms>n)break;if(mi(r.tool))continue;let e=Vi(r);if(!t(e,r.ts_ms))continue;let i=o.get(e);i?i.push(r):o.set(e,[r]);let a=s.get(e);(a===void 0||r.ts_ms>a)&&s.set(e,r.ts_ms)}let c=n-i,l=[];for(let[e,t]of s)t<c&&l.push(e);for(let e of l)o.delete(e),s.delete(e);if(o.size>a){let e=new Set(Array.from(s.entries()).sort((e,t)=>t[1]-e[1]).slice(0,a).map(([e])=>e));for(let t of[...o.keys()])e.has(t)||o.delete(t)}let u=[];for(let e of o.values()){let t=e.length>r?e.slice(-r):e;u.push(...t)}return u.sort((e,t)=>e.ts_ms-t.ts_ms),u}function ca(e={}){let t=e.windowMs??12e4,n=zi(),[r,i]=(0,_.useState)(()=>({mode:`live`,playhead_ms:Date.now(),window_ms:t})),[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)([]),[l,u]=(0,_.useState)(!1),d=(0,_.useRef)(null),f=(0,_.useRef)(null),p=(0,_.useRef)(!1);(0,_.useEffect)(()=>{p.current=n.length>0||a.length>0},[n,a]),(0,_.useEffect)(()=>{if(r.mode!==`live`)return;let e=()=>{if(!p.current)return;let e=Date.now();i(t=>t.mode===`live`?t.playhead_ms===e?t:{...t,playhead_ms:e}:t)};e();let t=setInterval(e,500);return()=>clearInterval(t)},[r.mode]);let m=(0,_.useMemo)(()=>ia(a,n),[a,n]),h=(0,_.useMemo)(()=>m.filter(e=>!mi(e.tool)),[m]),{isBurstActive:g}=$i(s),v=(0,_.useMemo)(()=>sa(m,g,r.playhead_ms),[m,g,r.playhead_ms]),y=m.length>0?m[0].ts_ms:r.playhead_ms,b=m.length>0?m[m.length-1].ts_ms:r.playhead_ms,x=(0,_.useCallback)(async e=>{if(f.current)return;let t=y,n=Math.min(t,(d.current??Date.now())-e);if(n>=t)return;let r=new AbortController;f.current=r,u(!0);try{let e=await fetch(`/api/json/graph/backfill?since_ms=${n}&until_ms=${t}&limit=500`,{signal:r.signal,credentials:`same-origin`});if(!e.ok)throw Error(`backfill ${e.status}`);let i=await e.json();Array.isArray(i.bursts)&&i.bursts.length>0&&o(e=>{let t=ia(e,i.bursts);return t.length>ra?t.slice(-ra):t}),Array.isArray(i.lifecycle)&&i.lifecycle.length>0&&c(e=>oa(e,i.lifecycle)),d.current=n}catch(e){e.name!==`AbortError`&&console.warn(`[graph] backfill failed`,e)}finally{f.current=null,u(!1)}},[y]);(0,_.useEffect)(()=>{r.playhead_ms-y<r.window_ms*.5&&x(Ui)},[r.playhead_ms,r.window_ms,y,x]);let S=(0,_.useRef)(!1);(0,_.useEffect)(()=>{S.current||(S.current=!0,x(na))},[x]),(0,_.useEffect)(()=>()=>{f.current?.abort(),f.current=null},[]);let C=(0,_.useCallback)(e=>{i(t=>e===`live`?{...t,mode:`live`}:{...t,mode:e})},[]),w=(0,_.useCallback)(e=>{i(t=>({...t,mode:t.mode===`live`?`scrubbing`:t.mode,playhead_ms:e}))},[]),T=(0,_.useCallback)(e=>{i(t=>({...t,window_ms:Math.max(1e3,e)}))},[]),E=(0,_.useCallback)(()=>{i(e=>({...e,mode:`live`,playhead_ms:Date.now()}))},[]),D=(0,_.useCallback)(()=>{i(e=>({...e,mode:`live`,playhead_ms:Date.now(),window_ms:ta})),x(ta)},[x]);return{snapshot:(0,_.useMemo)(()=>({bursts:v,playback:r,oldest_known_ms:y,newest_known_ms:b,loading_backfill:l}),[v,r,y,b,l]),allBursts:h,setMode:C,setPlayhead:w,setWindow:T,jumpToLive:E,requestBackfill:x,jumpTo24h:D}}function la(e){let t=e|0;return()=>{t=t+1831565813|0;let e=t;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}}var ua={"claude-code":`C`,"claude-code-ide":`C`,cursor:`>`,copilot:`H`,codex:`X`,pi:`P`,gemini:`G`,antigravity:`A`};function da(e){return ua[e.toLowerCase()]??`.`}function fa(e){let t=0;for(let n=0;n<e.length;n++)t=Math.imul(t,31)+e.charCodeAt(n)|0;return(t>>>0)%360}function pa(e,t,n){for(let[r,i]of t){let{x:t,y:a,n:o}=i,s=50+Math.min(o,12)*7,c=fa(r),l=n.get(r),u;l&&Math.abs(l.x-t)<2&&Math.abs(l.y-a)<2&&l.r===s?u=l.grad:(u=e.createRadialGradient(t,a,0,t,a,s),u.addColorStop(0,`hsla(${c},80%,55%,0.10)`),u.addColorStop(1,`hsla(${c},80%,55%,0)`),n.set(r,{grad:u,x:t,y:a,r:s})),e.fillStyle=u,e.beginPath(),e.arc(t,a,s,0,Math.PI*2),e.fill()}for(let e of n.keys())t.has(e)||n.delete(e)}function ma(e,t,n,r,i,a,o){let s=8+a*r,c=Math.max(0,1-r)*o;c<=0||(e.save(),e.globalAlpha=c,e.fillStyle=i,e.beginPath(),e.arc(t,n,s,0,Math.PI*2),e.fill(),e.restore())}var ha=`9px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,ga=`bold 10px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,_a=new Map,va=256;function ya(e,t){let n=_a.get(t);if(n!==void 0)return n;let r=e.measureText(t).width;if(_a.size>=va){let e=_a.keys().next().value;e!==void 0&&_a.delete(e)}return _a.set(t,r),r}function ba(e,t,n,r,i,a,o){let s=(r.split(`:`)[0]??r).slice(0,18),c=da(s),l=fa(r),u=Hi[o]??`#6b7280`;e.save(),e.textAlign=`center`;let d=`[${c}] ${s}`,f=`${i.length>14?i.slice(0,14):i} · ${a}`;e.font=ga;let p=ya(e,d);e.font=ha;let m=ya(e,f),h=Math.max(p,m)+10;e.globalAlpha=.82,e.fillStyle=`hsla(${l},25%,5%,0.92)`,e.fillRect(t-h/2,n-2,h,28),e.globalAlpha=.92,e.fillStyle=`hsla(${l},78%,70%,1)`,e.font=ga,e.fillText(d,t,n+10),e.globalAlpha=.72,e.fillStyle=u,e.font=ha,e.fillText(f,t,n+21),e.restore()}var xa=`bold 13px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,Sa=`bold 10px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`;function Ca(e){if((!Number.isFinite(e)||e<0)&&(e=0),e<6e4)return`${(e/1e3).toFixed(3)}s`;if(e<36e5)return`${Math.floor(e/6e4)}:${(e%6e4/1e3).toFixed(3).padStart(6,`0`)}`;let t=Math.floor(e/36e5),n=Math.floor(e%36e5/6e4),r=(e%6e4/1e3).toFixed(1).padStart(4,`0`);return`${t}:${String(n).padStart(2,`0`)}:${r}`}function wa(e,t,n,r,i){e.save(),e.textAlign=`center`,e.font=Sa,e.globalAlpha=.7,e.fillStyle=`hsla(${i},78%,72%,0.55)`,e.fillText(`uptime`,t,n),e.font=xa,e.globalAlpha=.96,e.fillStyle=`hsla(${i},78%,82%,1)`,e.fillText(Ca(r),t,n+13),e.restore()}function Ta(e,t,n,r){e.save(),e.textAlign=`right`,e.font=Sa,e.fillStyle=`rgba(148, 163, 184, 0.55)`,e.globalAlpha=.85,e.fillText(`LIVE`,t,n),e.font=`bold 16px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,e.fillStyle=`#e0e7ff`,e.globalAlpha=.92,e.fillText(Ca(r),t,n+16),e.restore()}function Ea(e,t,n,r,i,a,o){let s=r-t,c=i-n;if(Math.sqrt(s*s+c*c)<24)return;let l=Math.atan2(c,s),u=3.5,d=r-Math.cos(l)*9,f=i-Math.sin(l)*9;e.save(),e.globalAlpha=o*.85,e.fillStyle=a,e.translate(d,f),e.rotate(l),e.beginPath(),e.moveTo(0,0),e.lineTo(-6,-u),e.lineTo(-6,u),e.closePath(),e.fill(),e.restore()}var Da={Read:`▣`,Write:`✎`,Edit:`✎`,MultiEdit:`✎`,NotebookEdit:`✎`,NotebookRead:`▣`,Glob:`✦`,Grep:`✦`,LS:`⊞`,Find:`✦`,ToolSearch:`⊕`,Bash:`$`,Skill:`◈`,WebFetch:`⌬`,WebSearch:`⌬`,Agent:`◇`,Task:`⌘`,TaskCreate:`⌘`,TaskUpdate:`⌘`,TaskList:`⌘`,TaskGet:`⌘`,TaskOutput:`⌘`,TaskStop:`⌘`,TodoWrite:`✓`,TodoRead:`✓`,AskUserQuestion:`?`,EnterPlanMode:`◐`,ExitPlanMode:`◑`,EnterWorktree:`⎇`,ExitWorktree:`⎇`,PushNotification:`⏰`,ScheduleWakeup:`⏰`,CronCreate:`⏰`,CronList:`⏰`,CronDelete:`⏰`,RemoteTrigger:`↗`,Monitor:`◉`};function Oa(e){if(!e)return`·`;let t=e.lastIndexOf(`__`);return Da[t>=0?e.slice(t+2):e]??Da[e]??`·`}var ka=2*Math.PI/6e4,Aa=2.3999632297286535,ja=16,Ma=22,Na=.4,Pa=14,Fa=8,Ia=24;function La(e,t,n){let r=new Map;for(let t of e){if(t.exitingAt!=null)continue;let e=r.get(t.session);e?e.push(t):r.set(t.session,[t])}if(r.size===0)return;for(let e of r.values())e.sort((e,t)=>e.ts_ms-t.ts_ms);let i=Math.min(t,n)-Ia,a=Array.from(r.keys()).sort(),o=a.length,s=0;for(let e of r.values())e.length>s&&(s=e.length);let c=Math.max(1,Math.min(Ma,(i-ja)/Math.max(1,s-1))),l=ja,u=ja+c,d=(l*l+u*u-Pa*Pa)/(2*l*u),f=Math.max(Na,Math.acos(Math.min(1,Math.max(-1,d))));if(o<=Fa)for(let e=0;e<o;e++){let t=a[e];if(t===void 0)continue;let n=r.get(t);if(!n)continue;let i=e*2*Math.PI/o;for(let e=0;e<n.length;e++){let t=n[e];t&&(t.slotPhi=i+e*f,t.slotR=ja+e*c)}}else{let e=[];for(let t of r.values())for(let n of t)e.push(n);e.sort((e,t)=>e.ts_ms-t.ts_ms);let t=Math.max(1,Math.min(Ma,(i-ja)/Math.max(1,e.length-1)));for(let n=0;n<e.length;n++){let r=e[n];r&&(r.slotPhi=n*Aa,r.slotR=ja+n*t)}}}function Ra(e,t,n,r){for(let i of e)i.slotR==null||i.slotPhi==null||(i.x=t+i.slotR*Math.cos(i.slotPhi+r),i.y=n+i.slotR*Math.sin(i.slotPhi+r))}function za(e){let t=new Map;for(let n of e){let e=t.get(n.session);e?(e.x+=n.x,e.y+=n.y,e.n+=1):t.set(n.session,{x:n.x,y:n.y,n:1})}for(let e of t.values())e.x/=e.n,e.y/=e.n;return t}function Ba(e,t){let n=[],r=new Map;for(let t of e){let e=r.get(t.session);e?e.push(t):r.set(t.session,[t])}for(let e of r.values()){e.sort((e,t)=>e.ts_ms-t.ts_ms);for(let r=1;r<e.length;r++){let i=e[r-1],a=e[r];!i||!a||a.ts_ms-i.ts_ms<=t&&n.push({source:i.id,target:a.id,kind:`session`})}}return n}var Va=new Set,Ha=0,Ua=0;function Wa(){for(let e of Va)e();Va.size>0&&(Ha=requestAnimationFrame(Wa))}function Ga(e){let t=Ua++;return Va.add(e),Va.size===1&&(Ha=requestAnimationFrame(Wa)),[()=>{Va.delete(e),Va.size===0&&(cancelAnimationFrame(Ha),Ha=0)},t]}var Ka=820,qa=e=>Math.min(1,e),Ja=620,Ya=e=>1-(1-e)**3,Xa=$n({stiffness:120,damping:22,mass:1}),Za=1800;function Qa(e){return e<=2?Math.min(window.devicePixelRatio,2):e<=4?Math.min(window.devicePixelRatio,1.5):Math.min(window.devicePixelRatio,1)}function $a(e){return e<=2?1:e<=4?2:3}function eo(e){return e<=2?24:e<=4?12:6}function to(e){return e<=4}var no=!1,X=!1;function ro(){if(X||typeof window>`u`)return;X=!0;let e=navigator;typeof e.getBattery==`function`&&e.getBattery().then(e=>{let t=()=>{no=!e.charging&&e.level<.2};t(),e.addEventListener(`chargingchange`,t),e.addEventListener(`levelchange`,t)}).catch(()=>{})}function io(){return typeof window>`u`?!1:window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches||navigator.connection?.saveData?!0:no}var ao=typeof window<`u`&&new URLSearchParams(window.location.search).get(`fullrate`)===`1`,oo=typeof window<`u`&&new URLSearchParams(window.location.search).get(`rotate`)!==`0`,so=typeof window<`u`&&new URLSearchParams(window.location.search).get(`probe`)===`1`;function co(e,t,n,r){let i=new Map;for(let t of e)i.set(t.id,t);let a=new Set,o=[];for(let e=0;e<t.length;e++){let s=t[e],c=s.audit_id??`${s.ts_ms}:${s.tool}:${e}`;a.add(c);let l=i.get(c);if(l)l.burst=s,l.exitingAt=void 0,o.push(l);else{let t=la(s.ts_ms^e),i=n*.6+(t()-.5)*60,a=r/2+(t()-.5)*40,l=Vi(s);o.push({id:c,burst:s,ts_ms:s.ts_ms,session:l,x:i,y:a,vx:0,vy:0,age:0,tx:i,ty:a})}}let s=performance.now();for(let t of e)a.has(t.id)||(t.exitingAt??=s,s-t.exitingAt<1200&&o.push(t));return o}function lo(e){let{bursts:t,paused:n,selectedId:r,onSelect:i,compact:a=!1,activePanelCount:o=1,labelDensity:s=`normal`,onFrameTime:c}=e,l=(0,_.useRef)(c);l.current=c;let u=(0,_.useRef)(s);u.current=s;let d=(0,_.useRef)(null),f=(0,_.useRef)([]),p=(0,_.useRef)([]),m=(0,_.useRef)(null),h=(0,_.useRef)(null),g=(0,_.useRef)(0),v=(0,_.useRef)(0),y=(0,_.useRef)(0),b=(0,_.useRef)(new Map),x=(0,_.useRef)(new Set),S=(0,_.useRef)(new Set),C=(0,_.useRef)(new Set),[w,T]=(0,_.useState)({w:0,h:0}),E=(0,_.useRef)(0),O=(0,_.useRef)(0),k=(0,_.useRef)(null),ee=(0,_.useRef)(Date.now()),A=(0,_.useRef)(new Map),j=(0,_.useRef)({frame:0,cache:null});(0,_.useLayoutEffect)(()=>{let e=d.current?.parentElement;if(!e)return;let t=e.getBoundingClientRect();t.width>0&&t.height>0&&T({w:Math.max(40,t.width),h:Math.max(40,t.height)});let n=new ResizeObserver(e=>{for(let t of e){let{width:e,height:n}=t.contentRect;e<=0||n<=0||T({w:Math.max(40,e),h:Math.max(40,n)})}});return n.observe(e),()=>n.disconnect()},[]),(0,_.useEffect)(()=>{if(w.w<=0||w.h<=0)return;j.current.frame=0;let e=new Map;for(let t of f.current)e.set(t.id,t);f.current=co(f.current,t,w.w,w.h),La(f.current,w.w/2,w.h/2);let n=oo&&!sr()?performance.now()*ka:0;for(let t of f.current){if(t.slotR==null||t.slotPhi==null)continue;let r=w.w/2+t.slotR*Math.cos(t.slotPhi+n),i=w.h/2+t.slotR*Math.sin(t.slotPhi+n),a=!e.has(t.id),o=Math.hypot(t.x-r,t.y-i);(a||o>40)&&(t.x=r,t.y=i,t.vx=0,t.vy=0)}if(p.current=Ba(f.current,1/0),!sr())for(let t=0;t<f.current.length;t++){let n=f.current[t];!n||e.has(n.id)||He(n.burst.decision)}let r=f.current.reduce((e,t)=>t.ts_ms>e?t.ts_ms:e,0);v.current=Math.max(performance.now()+Ka,performance.now()+Wi,r+1500),g.current=performance.now()},[t,w.w,w.h]),(0,_.useEffect)(()=>{let e=d.current;if(!e)return;let t=e.getContext(`2d`);if(!t)return;ro();let i=performance.now(),s=0,c=0,h=0,_=.1,[T,D]=Ga(()=>{let d=performance.now();if(!ao&&io()){if(s^=1,s===1)return}else s!==0&&(s=0);if(!ao){let e=$a(o);if(e>1&&(O.current=(O.current+1)%e,O.current!==0))return}let T=performance.now(),E=T<v.current,D=T-g.current<200,M=T-y.current>500,te=sr(),ne=oo&&!te;if(!ne&&!E&&!D&&!M)return;y.current=T;let N=d,P=Math.min(50,N-i);i=N;let F=f.current,re=p.current,I=ne?performance.now()*ka:0;Ra(F,w.w/2,w.h/2,I);for(let e of F)e.age<1&&(e.age=Math.min(1,e.age+P/Ka));let L=typeof window<`u`?Qa(o):1,R=w.w,z=w.h;(e.width!==R*L||e.height!==z*L)&&(e.width=R*L,e.height=z*L,e.style.width=`${R}px`,e.style.height=`${z}px`,t.scale(L,L)),t.fillStyle=`#0a0a0f`,t.fillRect(0,0,R,z);let ie=`${R}x${z}`,ae=k.current?.key===ie?k.current.grad:null;if(ae||(ae=t.createRadialGradient(R/2,z/2,0,R/2,z/2,Math.max(R,z)/1.2),ae.addColorStop(0,`rgba(56, 189, 248, 0.06)`),ae.addColorStop(1,`rgba(0, 0, 0, 0)`),k.current={key:ie,grad:ae}),t.fillStyle=ae,t.fillRect(0,0,R,z),!a){let e=j.current;(e.frame++%6==0||e.cache===null)&&(e.cache=za(F));let n=e.cache;if(pa(t,n,A.current),!te){let e=new Map,r=new Map;for(let t of F)t.exitingAt??(r.set(t.session,(r.get(t.session)??0)+1),e.set(t.session,t));let i=new Map;for(let e of F){if(e.exitingAt!=null)continue;let t=i.get(e.session);(t===void 0||e.ts_ms<t)&&i.set(e.session,e.ts_ms)}let a=Date.now();for(let[o,s]of n){let n=e.get(o),c=r.get(o)??0;if(!n||c===0)continue;let l=50+Math.min(s.n,12)*7;ba(t,s.x,s.y-l-34,o,n.burst.tool,c,n.burst.decision);let u=i.get(o);if(u!==void 0){let e=Math.max(0,a-u);wa(t,s.x,s.y+l+12,e,fa(o))}}}}let oe=e=>e.exitingAt==null?1:Math.max(0,1-(N-e.exitingAt)/Wi),se=eo(o),ce=to(o)&&!te,le=x.current;if(le.clear(),n)for(let e of F)le.add(e.id);else{let e=0;for(let t=F.length-1;t>=0&&e<se;t--){let n=F[t];!n||n.exitingAt!=null||(le.add(n.id),e++)}}let ue=b.current;ue.clear();for(let e of F)ue.set(e.id,e);t.lineWidth=2,t.lineCap=`round`,t.lineJoin=`round`;for(let e=0;e<re.length;e++){let n=re[e],r=ue.get(n.source),i=ue.get(n.target);if(!r||!i||le.has(r.id)||le.has(i.id))continue;let a=Math.max(oe(r),oe(i));a<=0||(t.globalAlpha=a,t.strokeStyle=`${Hi[i.burst.decision]??`#6b7280`}aa`,t.beginPath(),t.moveTo(r.x,r.y),t.lineTo(i.x,i.y),t.stroke())}t.globalAlpha=1;let de=u.current===`large`,fe=de?`10px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`:`8px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`;for(let e=0;e<re.length;e++){let n=re[e],r=ue.get(n.source),i=ue.get(n.target);if(!r||!i||!le.has(r.id)&&!le.has(i.id))continue;let a=Hi[i.burst.decision]??`#6b7280`,o=Math.max(oe(r),oe(i));if(o<=0)continue;let s=qa(i.age),c=r.x+(i.x-r.x)*s,l=r.y+(i.y-r.y)*s;if(t.globalAlpha=o,t.strokeStyle=`${a}aa`,t.beginPath(),t.moveTo(r.x,r.y),t.lineTo(c,l),t.stroke(),t.globalAlpha=1,ce){let n=Math.min(s,(N/Za+e*.618033)%1),u=r.x+(i.x-r.x)*n,d=r.y+(i.y-r.y)*n;t.save(),t.globalAlpha=o*Math.sin(n*Math.PI)*.9,t.fillStyle=a,t.beginPath(),t.arc(u,d,2.5,0,Math.PI*2),t.fill(),t.restore(),Ea(t,r.x,r.y,c,l,a,o)}let u=i.ts_ms-r.ts_ms,d=u<1e3?`${u}ms`:u<6e4?`${(u/1e3).toFixed(1)}s`:`${Math.floor(u/6e4)}m${Math.floor(u%6e4/1e3)}s`,f=(r.x+c)/2,p=(r.y+l)/2;t.save(),t.globalAlpha=o*.65*s,t.font=fe,t.fillStyle=`#94a3b8`,t.textAlign=`center`,t.textBaseline=`middle`,t.fillText(`${e+1} · ${d}`,f,p-(de?8:7)),t.restore()}t.globalAlpha=1;let pe=S.current;pe.clear();let me=C.current;me.clear();let he=u.current===`large`?10:5;{let e=0;for(let t=F.length-1;t>=0;t--){let r=F[t];!r||r.exitingAt!=null||(!n&&e<3&&pe.add(r.id),e<he&&me.add(r.id),e++)}}let ge=r,B=m.current;for(let e of F){let r=oe(e);if(r<=0)continue;t.globalAlpha=r;let i=Math.min(1,e.age),o=qa(i);e.displayedRadius=a?4:qi(e.burst);let s=e.displayedRadius,c=a?s*o:(s+2*Math.min(1,e.age))*o,l=Hi[e.burst.decision]??`#6b7280`,d=Xi(l,Ji(e.burst));if((e.id===ge||e.id===B)&&(t.beginPath(),t.arc(e.x,e.y,c+6,0,Math.PI*2),t.fillStyle=`${d}33`,t.fill()),ce&&(e.burst.decision===`allow`?ma(t,e.x,e.y,i,`#22c55e`,14,.3):e.burst.decision===`ask`&&ma(t,e.x,e.y,i,`#f59e0b`,14,.45)),ce&&(e.burst.decision===`block`||e.burst.decision===`force`)){let n=i*Ka;if(n<Ja){let r=n/Ja,i=c+16*Ya(r),a=Math.max(0,1-r)*.75;t.beginPath(),t.arc(e.x,e.y,i,0,Math.PI*2),t.strokeStyle=d+Math.floor(a*255).toString(16).padStart(2,`0`),t.lineWidth=1.5,t.stroke()}}if(!te&&pe.has(e.id)&&(t.beginPath(),t.arc(e.x,e.y,c+2,0,Math.PI*2),t.fillStyle=`${d}33`,t.fill()),t.beginPath(),t.arc(e.x,e.y,Math.max(.1,c),0,Math.PI*2),t.fillStyle=d,t.fill(),t.strokeStyle=l,t.lineWidth=1.5,t.beginPath(),t.arc(e.x,e.y,Math.max(.1,c),0,Math.PI*2),t.stroke(),me.has(e.id)&&(n||le.has(e.id))){let n=u.current===`large`;t.font=n?`11px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`:`9px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,t.textAlign=`center`,t.fillStyle=`${d}cc`,t.fillText(da(e.burst.client),e.x,e.y-c-(n?4:3));let i=n?16:12,a=e.burst.tool.length>i?e.burst.tool.slice(0,i):e.burst.tool,o=Oa(e.burst.tool),s=o===`·`?a:`${o} ${a}`;t.fillStyle=`${d}88`,t.fillText(s,e.x,e.y+c+(n?13:11));let l=e.burst.input_tokens??0,f=e.burst.output_tokens??0;(l>0||f>0)&&(t.globalAlpha=r*(le.has(e.id)?.8:.35),t.font=n?`10px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`:`8px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,t.fillStyle=`#94a3b8`,t.textAlign=`center`,t.fillText(`↓${Yi(l)} ↑${Yi(f)}`,e.x,e.y+c+(n?25:21)),t.globalAlpha=r),t.textAlign=`left`}(e.id===ge||e.id===B)&&(t.font=`11px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,t.fillStyle=`#e0e7ff`,t.fillText(e.burst.tool,e.x+c+6,e.y+3))}if(t.globalAlpha=1,ce&&F.length>0){let e=null;for(let t=F.length-1;t>=0;t--)if(F[t].exitingAt==null){e=F[t];break}let n=e?Date.now()-e.ts_ms:1/0,r=5e3;if(e&&n<=r){let i=Math.max(0,1-n/r),a=1100,o=N%a/a,s=14+Xa.fn(o)*8,c=Math.max(0,1-o)*.85*i,l=Math.floor(c*255).toString(16).padStart(2,`0`);t.beginPath(),t.arc(e.x,e.y,s,0,Math.PI*2),t.strokeStyle=`#38bdf8${l}`,t.lineWidth=2,t.stroke();let u=N%800/800*Math.PI*2,d=100/360*Math.PI*2,f=.85*i,p=Math.floor(f*255).toString(16).padStart(2,`0`);t.save(),t.beginPath(),t.arc(e.x,e.y,22,u,u+d),t.strokeStyle=`#38bdf8${p}`,t.lineWidth=2.5,t.lineCap=`round`,t.stroke(),t.restore()}}if(!a&&R>220&&Ta(t,R-12,12,Date.now()-ee.current),so){let t,n=0;for(let e of F)e.exitingAt??(n++,t||=e);e.dataset.probeCount=String(n),e.dataset.probeX0=(t?.x??0).toFixed(2),e.dataset.probeY0=(t?.y??0).toFixed(2)}c=c===0?P:c*(1-_)+P*_;let _e=l.current;_e&&N-h>250&&(h=N,_e(c))});return E.current=D,O.current=D,T},[n,r,w.w,w.h,a,o]);function M(e,t){let n=d.current;if(!n)return null;let r=n.getBoundingClientRect(),i=e-r.left,a=t-r.top,o=null,s=200;for(let e of f.current){let t=e.x-i,n=e.y-a,r=t*t+n*n;r<s&&(s=r,o=e.id)}return o}return(0,D.jsxs)(`div`,{className:`relative w-full h-full rounded-sm border border-[var(--color-line-1)] overflow-hidden bg-black`,children:[(0,D.jsx)(`canvas`,{ref:d,className:`block w-full h-full cursor-crosshair`,onMouseMove:e=>{let t=M(e.clientX,e.clientY);m.current=t;let n=h.current;if(!n)return;if(!t){n.style.display=`none`;return}let r=f.current.find(e=>e.id===t);if(!r){n.style.display=`none`;return}let i=r.burst,a=Hi[i.decision]??`#6b7280`,o;if(i.complete_duration_ms!=null&&i.complete_duration_ms>0){let e=i.complete_duration_ms;o=e>=1e3?`${(e/1e3).toFixed(1)}s`:`${e.toFixed(0)}ms`}else{let e=i.duration_ns/1e6;o=e<1?`${(e*1e3).toFixed(0)}µs`:`${e.toFixed(1)}ms`}let s=[];i.input_tokens!=null&&s.push(`↓${Yi(i.input_tokens)}`),i.output_tokens!=null&&s.push(`↑${Yi(i.output_tokens)}`);let c=i.input_preview?` · "${i.input_preview.length>45?`${i.input_preview.slice(0,45)}…`:i.input_preview}"`:``,l=s.length>0?` · ${s.join(` `)}`:``;n.textContent=`${i.decision} ${i.tool} · ${o}${l}${c}`,n.style.borderColor=a,n.style.color=a;let u=Math.min(e.clientX+14,window.innerWidth-420),d=Math.max(8,e.clientY-36);n.style.left=`${u}px`,n.style.top=`${d}px`,n.style.display=`block`},onMouseLeave:()=>{m.current=null,h.current&&(h.current.style.display=`none`)},onClick:e=>{i(M(e.clientX,e.clientY),{x:e.clientX,y:e.clientY})}}),t.length===0&&(0,D.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center pointer-events-none px-4 text-center`,children:[(0,D.jsx)(`p`,{className:`overline mb-2 text-[var(--color-fg-3)]`,children:`graph · idle`}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] max-w-[260px]`,children:[`Each dot = one tool call an AI agent made.`,(0,D.jsx)(`br`,{}),`Color = the ssg rule decision · line = same agent's sequence.`]})]}),(0,D.jsx)(`div`,{ref:h,style:{display:`none`,position:`fixed`,zIndex:45,fontSize:`11px`,fontFamily:`ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,padding:`4px 10px`,background:`rgba(10, 10, 15, 0.92)`,border:`1px solid`,borderRadius:`4px`,pointerEvents:`none`,whiteSpace:`nowrap`,maxWidth:`500px`,overflow:`hidden`,textOverflow:`ellipsis`}})]})}var uo=3e4,fo=6e4,po=5e3;function mo(e,t){let n=t?e.filter(e=>Vi(e)===t):e,r=Date.now(),i=n.length>0?n[n.length-1]:null;if(!i||r-i.ts_ms>po||!i)return{idle:!0,client:``,tool:``,ruleId:null,decision:``,evalsPerSec:`0.0`,allowPct:0,agents:0,topRules:[]};let a=n.filter(e=>r-e.ts_ms<=uo),o=a.filter(e=>e.decision===`allow`).length,s=a.length>0?Math.round(o/a.length*100):0,c=(a.length/(uo/1e3)).toFixed(1),l=new Set(a.map(e=>`${e.client}:${e.agent_id??`solo`}`)).size,u=n.filter(e=>r-e.ts_ms<=fo&&e.rule_id),d=new Map;for(let e of u){let t=e.rule_id;t&&d.set(t,(d.get(t)??0)+1)}let f=[...d.entries()].sort((e,t)=>t[1]-e[1]).slice(0,4).map(([e])=>e);return{idle:!1,client:i.client,tool:i.tool,ruleId:i.rule_id,decision:i.decision,evalsPerSec:c,allowPct:s,agents:l,topRules:f}}var ho={allow:`ALLOW`,block:`BLOCK`,ask:`ASK`,log:`LOG`,force:`FORCE`,shadow:`SHADOW`},go={allow:`#22c55e`,block:`#ef4444`,ask:`#f59e0b`,log:`#60a5fa`,force:`#a855f7`,shadow:`#6b7280`};function _o({className:e,sessionKey:t}){let n=zi(),r=Bi(),i=(0,_.useRef)(-1),a=(0,_.useRef)(null),o=(0,_.useMemo)(()=>{if(i.current===r&&a.current)return a.current;i.current=r;let e=mo(n,t);return a.current=e,e},[n,r,t]),s=o.decision?go[o.decision]??`#6b7280`:`#6b7280`,c=o.decision?ho[o.decision]??o.decision:``,l=o.client?da(o.client):``;return o.idle?(0,D.jsxs)(`div`,{className:W(`pointer-events-none select-none`,`flex items-center justify-center gap-2`,`px-4 py-2 rounded-sm`,`bg-[#0a0a0f]/95`,`border border-[var(--color-line-1,#242424)]`,`font-mono text-[11px] text-[var(--color-fg-4,#5a6071)]`,e),children:[(0,D.jsx)(`span`,{className:`status-dot bg-[var(--color-fg-4)] pulse-soft`}),(0,D.jsx)(`span`,{className:`uppercase tracking-wider`,children:`waiting for activity`})]}):(0,D.jsxs)(`div`,{className:W(`pointer-events-none select-none`,`flex flex-col gap-1 px-4 py-2.5 rounded-sm`,`bg-[#0a0a0f]/96`,`border border-[var(--color-line-1,#242424)]`,`font-mono`,!t&&`min-w-[280px] max-w-[460px]`,e),children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[10px] uppercase tracking-widest text-[var(--color-fg-4,#5a6071)]`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft`}),(0,D.jsx)(`span`,{children:`now evaluating`}),(0,D.jsxs)(`span`,{className:`ml-auto tabular-nums`,children:[o.evalsPerSec,`/s · `,o.allowPct,`% allow · `,o.agents,` `,o.agents===1?`agent`:`agents`]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[14px] text-[var(--color-fg-0,#f5f5f5)] tracking-tight`,children:[(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-3)] text-[11px] tabular-nums`,children:[`[`,l,`]`]}),(0,D.jsx)(`span`,{className:`text-sky-300`,children:o.client}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-white font-semibold`,children:o.tool}),o.ruleId&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`->`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] text-[12px]`,children:o.ruleId})]}),(0,D.jsx)(`span`,{className:`ml-auto text-[13px] font-bold tabular-nums`,style:{color:s},children:c})]}),o.topRules.length>0&&(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[10px] text-[var(--color-fg-4)]`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider text-[9px]`,children:`rules`}),o.topRules.map(e=>(0,D.jsx)(`span`,{className:`px-1 py-0.5 rounded-sm bg-[var(--color-surface-2,#121212)] text-[var(--color-fg-3)]`,children:e},e))]})]})}var vo=(0,_.memo)(function({sessionKey:e,bursts:t,activePanelCount:n,selectedId:r,onSelect:i}){let a=t.length>0?t[t.length-1]?.ts_ms??0:0,o=e.indexOf(`:`),s=o>=0?e.slice(0,o):e,c=o>=0?e.slice(o+1):``,l=c!==``&&c!==`solo`,u=t[t.length-1],d=u?Hi[u.decision]??`#6b7280`:`#6b7280`,f=(0,_.useMemo)(()=>t.length>24?t.slice(t.length-24):t,[t]);return(0,D.jsxs)(`div`,{className:`flex flex-col min-h-0 min-w-0 rounded-sm border border-[var(--color-line-1)] bg-black/30 overflow-hidden`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5 px-2 py-1 border-b border-[var(--color-line-1)] text-[10px] font-mono shrink-0`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0`,style:{background:d},title:u?`latest decision: ${u.decision}`:``}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] uppercase tracking-wider truncate`,children:s}),l&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate`,children:c})]}),(0,D.jsxs)(`span`,{className:`ml-auto text-[var(--color-fg-4)] tabular-nums shrink-0`,children:[t.length,`n`]})]}),(0,D.jsx)(`div`,{className:`flex-1 min-h-0 relative`,children:(0,D.jsx)(lo,{bursts:f,paused:!1,selectedId:r,onSelect:i,burstSeq:a,compact:!0,activePanelCount:n})})]})});function yo(e){return e<=1?1:e<=4?2:3}function bo(){let e=zi(),t=Bi(),[n,r]=(0,_.useState)(null),{isBurstActive:i}=$i(),a=(0,_.useMemo)(()=>sa(e,i,Date.now()),[e,i]),o=(0,_.useRef)(new Map),s=(0,_.useMemo)(()=>{let e=new Map;for(let t of a){let n=Vi(t),r=e.get(n);r?r.push(t):e.set(n,[t])}let t=o.current;for(let[n,r]of e){let i=t.get(n);i&&i.length===r.length&&i[i.length-1]===r[r.length-1]&&e.set(n,i)}return o.current=e,Array.from(e.entries()).sort((e,t)=>{let n=e[1][e[1].length-1]?.ts_ms??0;return(t[1][t[1].length-1]?.ts_ms??0)-n})},[a]),c=(0,_.useMemo)(()=>{let e=new Map;for(let t of a){let n=`${t.client}:${t.agent_id??`solo`}`,r=e.get(n);r?r.count+=1:e.set(n,{client:t.client,count:1})}return e},[a]),l=(0,_.useMemo)(()=>{let e={allow:0,block:0,ask:0,other:0};for(let t of a)t.decision===`allow`?e.allow++:t.decision===`block`||t.decision===`force`?e.block++:t.decision===`ask`?e.ask++:e.other++;return e},[a]),u=(0,_.useMemo)(()=>{let e=new Set,t=0;for(let n of a)n.rule_id&&(e.add(n.rule_id),t+=1);return{distinct:e.size,matched:t,topRule:e.values().next().value}},[a]),d=yo(s.length);return(0,D.jsxs)(`div`,{className:`flex flex-col h-full min-h-0 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)]`,children:[(0,D.jsxs)(`header`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-[var(--color-line-1)]`,children:[(0,D.jsx)(`span`,{className:`overline text-[var(--color-fg-3)]`,children:`graph · live`}),(0,D.jsxs)(`span`,{className:`flex items-center gap-1 text-[10px] font-mono text-[var(--color-fg-4)]`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft`}),a.length]}),(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[10px] font-mono`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full`,style:{background:Hi.allow}}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums`,children:l.allow}),(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full ml-1`,style:{background:Hi.block}}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums`,children:l.block}),(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full ml-1`,style:{background:Hi.ask}}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums`,children:l.ask})]}),(0,D.jsx)(`span`,{className:`flex-1`}),(0,D.jsxs)(`span`,{className:`chip text-violet-300 border-violet-500/30`,title:`${u.matched} tool calls matched ${u.distinct} ssg ${u.distinct===1?`rule`:`rules`} in active sessions`,children:[u.distinct,` `,u.distinct===1?`rule`:`rules`]}),(0,D.jsxs)(`span`,{className:`chip text-[var(--color-fg-3)] border-[var(--color-line-1)]`,title:c.size===0?`no active agents`:Array.from(c.entries()).map(([e,t])=>`${e}: ${t.count}`).join(`
|
|
12
12
|
`),children:[c.size,` `,c.size===1?`agent`:`agents`]}),(0,D.jsx)(`a`,{href:`/graph`,className:`text-[10px] font-mono uppercase tracking-wider text-sky-300 hover:text-sky-200`,title:`Open full /graph page`,children:`expand ↗`})]}),(0,D.jsxs)(`div`,{className:`flex-1 min-h-0 relative`,children:[s.length===0?(0,D.jsx)(lo,{bursts:a,paused:!1,selectedId:n,onSelect:r,burstSeq:t}):(0,D.jsx)(`div`,{className:`absolute inset-0 grid gap-1 p-1`,style:{gridTemplateColumns:`repeat(${d}, minmax(0, 1fr))`,gridAutoRows:`1fr`},children:s.map(([e,t])=>(0,D.jsx)(vo,{sessionKey:e,bursts:t,activePanelCount:s.length,selectedId:n,onSelect:r},e))}),(0,D.jsx)(_o,{className:`absolute bottom-2 left-2 z-10 max-w-[calc(100%-1rem)]`})]})]})}function xo(e,t){return e.x<t.x+t.w&&e.x+e.w>t.x&&e.y<t.y+t.h&&e.y+e.h>t.y}function So(e){return{id:e.id,x:e.x,y:e.y,w:e.w,h:e.h}}function Co(e,t){let n=[So(e)],r=t.map(So);r.sort((e,t)=>e.y===t.y?e.x-t.x:e.y-t.y);for(let e of r){for(;;){let t=!1;for(let r of n)if(xo(e,r)){let n=r.y+r.h;n>e.y&&(e.y=n,t=!0)}if(!t)break}n.push(e)}return n}function wo(e){if(e.length===0)return[];let t=[...e].map(So).sort((e,t)=>e.y===t.y?e.x-t.x:e.y-t.y),n=[];for(let e of t){let t=!0;for(;t;){t=!1;for(let r of n)xo(e,r)&&(e.y=r.y+r.h,t=!0)}n.push(e)}return n}function To(e,t,n){let r=e.findIndex(e=>e.id===t);if(r===-1)return{panels:e.map(So)};let i=Co({id:e[r].id,x:n.x,y:n.y,w:n.w,h:n.h},e.filter((e,t)=>t!==r)),a=new Map(i.map(e=>[e.id,e]));return{panels:wo(e.map(e=>a.get(e.id)).filter(Boolean))}}function Eo({size:e=24,children:t,...n}){return(0,D.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:e,height:e,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,...n,children:t})}var Do=e=>(0,D.jsx)(Eo,{...e,children:(0,D.jsx)(`path`,{d:`M20 6 9 17l-5-5`})}),Oo=e=>(0,D.jsxs)(Eo,{...e,children:[(0,D.jsx)(`path`,{d:`M18 6 6 18`}),(0,D.jsx)(`path`,{d:`m6 6 12 12`})]}),ko=e=>(0,D.jsxs)(Eo,{...e,children:[(0,D.jsx)(`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`}),(0,D.jsx)(`path`,{d:`M7 10l5 5 5-5`}),(0,D.jsx)(`path`,{d:`M12 15V3`})]}),Ao=e=>(0,D.jsxs)(Eo,{...e,children:[(0,D.jsx)(`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`}),(0,D.jsx)(`path`,{d:`M17 8l-5-5-5 5`}),(0,D.jsx)(`path`,{d:`M12 3v12`})]}),jo=e=>(0,D.jsxs)(Eo,{...e,children:[(0,D.jsx)(`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`}),(0,D.jsx)(`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`}),(0,D.jsx)(`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`})]}),Mo=e=>(0,D.jsxs)(Eo,{...e,children:[(0,D.jsx)(`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`}),(0,D.jsx)(`path`,{d:`m15 5 4 4`})]}),No=e=>(0,D.jsxs)(Eo,{...e,children:[(0,D.jsx)(`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}),(0,D.jsx)(`path`,{d:`M3 3v5h5`})]}),Po=e=>(0,D.jsxs)(Eo,{...e,children:[(0,D.jsx)(`path`,{d:`M3 6h18`}),(0,D.jsx)(`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`}),(0,D.jsx)(`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`}),(0,D.jsx)(`path`,{d:`M10 11v6`}),(0,D.jsx)(`path`,{d:`M14 11v6`})]}),Fo=e=>(0,D.jsxs)(Eo,{...e,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`9`,r:`1`}),(0,D.jsx)(`circle`,{cx:`19`,cy:`9`,r:`1`}),(0,D.jsx)(`circle`,{cx:`5`,cy:`9`,r:`1`}),(0,D.jsx)(`circle`,{cx:`12`,cy:`15`,r:`1`}),(0,D.jsx)(`circle`,{cx:`19`,cy:`15`,r:`1`}),(0,D.jsx)(`circle`,{cx:`5`,cy:`15`,r:`1`})]}),Io=[`hero-metrics`,`graph`,`latency-trace`,`throughput`,`decision-mix`,`telemetry-feed`,`system-pulse`,`pending-approvals`,`recent-blocks`],Lo={"hero-metrics":`Hero metrics`,graph:`Graph intelligence`,"latency-trace":`Latency trace`,throughput:`Throughput`,"decision-mix":`Decision mix`,"telemetry-feed":`Telemetry feed`,"system-pulse":`System pulse`,"pending-approvals":`Pending approvals`,"recent-blocks":`Recent blocks`},Ro={"hero-metrics":{minW:6,minH:2,defaultW:12,defaultH:2},graph:{minW:4,minH:3,defaultW:8,defaultH:5},"latency-trace":{minW:4,minH:3,defaultW:8,defaultH:4},throughput:{minW:2,minH:2,defaultW:4,defaultH:2},"decision-mix":{minW:2,minH:2,defaultW:4,defaultH:2},"telemetry-feed":{minW:6,minH:3,defaultW:12,defaultH:4},"system-pulse":{minW:4,minH:3,defaultW:12,defaultH:3},"pending-approvals":{minW:3,minH:2,defaultW:6,defaultH:3},"recent-blocks":{minW:3,minH:2,defaultW:6,defaultH:3}};function zo({panel:e,isEditing:t,children:n,drag:r}){let i=(0,_.useRef)(null),a={gridColumn:`${e.x+1} / span ${e.w}`,gridRow:`${e.y+1} / span ${e.h}`};return(0,D.jsxs)(`div`,{ref:i,className:`grid-panel ${t?`grid-panel--edit`:``}`,style:a,role:t?`region`:void 0,"aria-label":t?Lo[e.id]:void 0,tabIndex:t?0:void 0,onKeyDown:t?t=>r.onPanelKeyDown(t,e.id):void 0,"data-panel-id":e.id,children:[t&&(0,D.jsx)(`button`,{type:`button`,className:`grid-panel__drag-handle`,title:`Drag ${Lo[e.id]} (or Arrow keys)`,"aria-label":`Drag ${Lo[e.id]}`,onPointerDown:t=>{let n=i.current;n&&r.onDragPointerDown(t,e.id,n)},children:(0,D.jsx)(Fo,{size:12,strokeWidth:2})}),(0,D.jsx)(`div`,{className:`grid-panel__content`,"data-reveal":t?void 0:``,children:n}),t&&(0,D.jsx)(`button`,{type:`button`,className:`grid-panel__resize-handle`,title:`Resize ${Lo[e.id]} (or Shift+Arrow keys)`,"aria-label":`Resize ${Lo[e.id]}`,onPointerDown:t=>{let n=i.current;n&&r.onResizePointerDown(t,e.id,n)},children:(0,D.jsxs)(`svg`,{width:`10`,height:`10`,viewBox:`0 0 10 10`,"aria-hidden":!0,children:[(0,D.jsx)(`path`,{d:`M10 0 L10 10 L0 10 Z`,fill:`currentColor`,fillOpacity:`0.4`}),(0,D.jsx)(`path`,{d:`M3 10 L10 3 M6 10 L10 6 M9 10 L10 9`,stroke:`currentColor`,strokeWidth:`0.8`,fill:`none`})]})})]})}var Bo=(0,_.memo)(zo);function Vo(e){let t=getComputedStyle(e),n=e.getBoundingClientRect(),r=parseFloat(t.rowGap||t.gap||`0`)||0,i=r*11;return{cellWidthPx:(n.width-i)/12+r,cellHeightPx:72+r}}function Ho(e){let t=(0,_.useRef)(null),n=(0,_.useRef)(e);n.current=e;let r=(0,_.useCallback)(()=>{let e=t.current;if(e){e.element.style.transform=``,e.element.style.width=``,e.element.style.height=``,e.element.style.zIndex=``,e.element.classList.remove(`grid-panel--dragging`),e.element.classList.remove(`grid-panel--resizing`);try{e.element.releasePointerCapture(e.pointerId)}catch{}t.current=null}},[]);(0,_.useEffect)(()=>{function e(e){let n=t.current;if(!n||e.pointerId!==n.pointerId)return;let r=e.clientX-n.startPointerX,i=e.clientY-n.startPointerY;if(n.mode===`drag`)n.element.style.transform=`translate3d(${r}px, ${i}px, 0)`;else{let e=Ro[n.startPanel.id],t=e.minW*n.cellWidthPx-n.cellWidthPx+40,a=e.minH*n.cellHeightPx-n.cellHeightPx+40,o=Math.max(t,n.startRectW+r),s=Math.max(a,n.startRectH+i);n.element.style.width=`${o}px`,n.element.style.height=`${s}px`}}function i(e,t,n){let r=Ro[e.startPanel.id];if(e.mode===`drag`){let r=Math.round(t/e.cellWidthPx),i=Math.round(n/e.cellHeightPx),a=e.startPanel.x+r,o=e.startPanel.y+i;return a<0&&(a=0),a+e.startPanel.w>12&&(a=12-e.startPanel.w),o<0&&(o=0),{id:e.id,x:a,y:o,w:e.startPanel.w,h:e.startPanel.h}}let i=Math.round(t/e.cellWidthPx),a=Math.round(n/e.cellHeightPx),o=e.startPanel.w+i,s=e.startPanel.h+a;return o<r.minW&&(o=r.minW),s<r.minH&&(s=r.minH),e.startPanel.x+o>12&&(o=12-e.startPanel.x),{id:e.id,x:e.startPanel.x,y:e.startPanel.y,w:o,h:s}}function a(e){let a=t.current;if(!a||e.pointerId!==a.pointerId)return;let o=i(a,e.clientX-a.startPointerX,e.clientY-a.startPointerY);r(),o.x===a.startPanel.x&&o.y===a.startPanel.y&&o.w===a.startPanel.w&&o.h===a.startPanel.h||n.current.onCommit(o)}function o(e){let n=t.current;!n||e.pointerId!==n.pointerId||r()}function s(e){e.key===`Escape`&&t.current&&r()}function c(){document.visibilityState===`hidden`&&t.current&&r()}return document.addEventListener(`pointermove`,e),document.addEventListener(`pointerup`,a),document.addEventListener(`pointercancel`,o),document.addEventListener(`keydown`,s),document.addEventListener(`visibilitychange`,c),()=>{document.removeEventListener(`pointermove`,e),document.removeEventListener(`pointerup`,a),document.removeEventListener(`pointercancel`,o),document.removeEventListener(`keydown`,s),document.removeEventListener(`visibilitychange`,c),t.current&&r()}},[r]);let i=(0,_.useCallback)((e,r,i,a)=>{if(!n.current.enabled||t.current)return;let o=n.current.getPanel(r),s=n.current.gridRef.current;if(!o||!s)return;e.preventDefault(),e.stopPropagation();let{cellWidthPx:c,cellHeightPx:l}=Vo(s),u=i.getBoundingClientRect();t.current={id:r,mode:a,startPointerX:e.clientX,startPointerY:e.clientY,startPanel:o,element:i,cellWidthPx:c,cellHeightPx:l,pointerId:e.pointerId,startRectW:u.width,startRectH:u.height},i.classList.add(a===`drag`?`grid-panel--dragging`:`grid-panel--resizing`),i.style.zIndex=`10`;try{i.setPointerCapture(e.pointerId)}catch{}},[]);return{onDragPointerDown:(0,_.useCallback)((e,t,n)=>i(e,t,n,`drag`),[i]),onResizePointerDown:(0,_.useCallback)((e,t,n)=>i(e,t,n,`resize`),[i]),onPanelKeyDown:(0,_.useCallback)((e,t)=>{if(!n.current.enabled)return;let r=n.current.getPanel(t);if(!r)return;let i=e.shiftKey,a=0,o=0;switch(e.key){case`ArrowLeft`:a=-1;break;case`ArrowRight`:a=1;break;case`ArrowUp`:o=-1;break;case`ArrowDown`:o=1;break;default:return}e.preventDefault(),e.stopPropagation();let s=Ro[t];if(i){let e=r.w+a,i=r.h+o;if(e<s.minW&&(e=s.minW),i<s.minH&&(i=s.minH),r.x+e>12&&(e=12-r.x),e===r.w&&i===r.h)return;n.current.onCommit({id:t,x:r.x,y:r.y,w:e,h:i})}else{let e=r.x+a,i=r.y+o;if(e<0&&(e=0),e+r.w>12&&(e=12-r.w),i<0&&(i=0),e===r.x&&i===r.y)return;n.current.onCommit({id:t,x:e,y:i,w:r.w,h:r.h})}},[]),isGesturing:(0,_.useCallback)(()=>t.current!==null,[])}}function Uo({panels:e,isEditing:t,renderers:n,onPanelsChange:r}){let i=(0,_.useRef)(null),a=(0,_.useRef)(e);a.current=e;let o=(0,_.useMemo)(()=>{let t=new Map;for(let n of e)t.set(n.id,n);return t},[e]),s=Ho({gridRef:i,getPanel:(0,_.useCallback)(e=>o.get(e),[o]),onCommit:(0,_.useCallback)(e=>{let t=a.current,{panels:n}=To(t,e.id,{x:e.x,y:e.y,w:e.w,h:e.h});r(n)},[r]),enabled:t});return(0,D.jsx)(`div`,{ref:i,className:`grid-layout ${t?`grid-layout--editing`:``}`,"aria-live":t?`polite`:void 0,children:e.map(e=>(0,D.jsx)(Bo,{panel:e,isEditing:t,drag:s,children:n[e.id]()},e.id))})}function Wo({manager:e,isEditing:t,onToggleEditing:n}){let{config:r,activeLayout:i,canAddUserLayout:a,saveError:o,selectLayout:s,saveAs:c,renameActive:l,deleteLayout:u,resetActive:d,exportConfig:f,importConfig:p}=e,[m,h]=(0,_.useState)(null),[g,v]=(0,_.useState)(!1),[y,b]=(0,_.useState)(``),[x,S]=(0,_.useState)(!1),[C,w]=(0,_.useState)(i.name),[T,E]=(0,_.useState)(!1),[O,k]=(0,_.useState)(!1),ee=(0,_.useRef)(null);(0,_.useEffect)(()=>{w(i.name)},[i.name]),(0,_.useEffect)(()=>{o&&h(o)},[o]),(0,_.useEffect)(()=>{if(!m)return;let e=setTimeout(()=>h(null),4e3);return()=>clearTimeout(e)},[m]);function A(){y.trim()&&(c(y.trim()),b(``),v(!1),h(`Saved "${y.trim()}"`))}function j(){C.trim()&&(l(C.trim()),S(!1),h(`Renamed`))}function M(){let e=i.name;u(i.id),k(!1),h(`Deleted "${e}"`)}function te(){d(),E(!1),h(`Reset to default`)}function ne(){let e=f(),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=new Date().toISOString().slice(0,10),i=document.createElement(`a`);i.href=n,i.download=`ssg-layout-${r}.json`,i.click(),URL.revokeObjectURL(n),h(`Layout exported`)}function N(e){let t=e.target.files?.[0];e.target.value=``,t&&t.text().then(e=>{h(p(e).message)}).catch(()=>h(`Import failed: could not read file`))}return(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] px-3 py-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,D.jsx)(`span`,{className:`overline shrink-0`,children:`layout`}),(0,D.jsxs)(`select`,{value:r.activeLayoutId,onChange:e=>s(e.target.value),className:`bg-[var(--color-surface-2)] border border-[var(--color-line-1)] rounded-sm px-2 py-1 text-[11px] font-mono text-[var(--color-fg-1)] hover:border-[var(--color-line-2)] focus:outline-none focus:ring-1 focus:ring-[var(--color-brand)] cursor-pointer`,"aria-label":`Select layout`,children:[(0,D.jsx)(`optgroup`,{label:`Built-in`,children:r.layouts.filter(e=>e.builtIn).map(e=>(0,D.jsx)(`option`,{value:e.id,children:e.name},e.id))}),r.layouts.some(e=>!e.builtIn)&&(0,D.jsx)(`optgroup`,{label:`Your layouts`,children:r.layouts.filter(e=>!e.builtIn).map(e=>(0,D.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),i.builtIn&&(0,D.jsx)(`span`,{className:`chip text-[var(--color-fg-3)]`,title:`Built-in preset`,children:`built-in`})]}),(0,D.jsx)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:t?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(K,{variant:`secondary`,size:`sm`,onClick:()=>v(!0),disabled:!a,title:a?`Save the current arrangement as a new preset`:`Layout limit reached — delete one first`,children:[(0,D.jsx)(jo,{size:11,strokeWidth:2.25}),`Save as`]}),!i.builtIn&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(K,{variant:`ghost`,size:`sm`,onClick:()=>{w(i.name),S(!0)},children:[(0,D.jsx)(Mo,{size:11,strokeWidth:2.25}),`Rename`]}),(0,D.jsxs)(K,{variant:`ghost`,size:`sm`,onClick:()=>k(!0),children:[(0,D.jsx)(Po,{size:11,strokeWidth:2.25}),`Delete`]})]}),(0,D.jsxs)(K,{variant:`ghost`,size:`sm`,onClick:()=>E(!0),title:`Replace the current layout with the Default preset`,children:[(0,D.jsx)(No,{size:11,strokeWidth:2.25}),`Reset`]}),(0,D.jsxs)(K,{variant:`ghost`,size:`sm`,onClick:ne,title:`Download current layouts as JSON`,children:[(0,D.jsx)(ko,{size:11,strokeWidth:2.25}),`Export`]}),(0,D.jsxs)(K,{variant:`ghost`,size:`sm`,onClick:()=>ee.current?.click(),title:`Load layouts from a JSON file`,children:[(0,D.jsx)(Ao,{size:11,strokeWidth:2.25}),`Import`]}),(0,D.jsx)(`input`,{ref:ee,type:`file`,accept:`application/json,.json`,onChange:N,className:`hidden`,"aria-hidden":!0}),(0,D.jsxs)(K,{variant:`primary`,size:`sm`,onClick:()=>n(!1),children:[(0,D.jsx)(Do,{size:11,strokeWidth:2.5}),`Done`]})]}):(0,D.jsxs)(K,{variant:`secondary`,size:`sm`,onClick:()=>n(!0),children:[(0,D.jsx)(Mo,{size:11,strokeWidth:2.25}),`Edit layout`]})}),g&&(0,D.jsx)(Go,{title:`Save layout as`,value:y,placeholder:`My dashboard`,onChange:b,onConfirm:A,onCancel:()=>{v(!1),b(``)},confirmLabel:`Save`}),x&&(0,D.jsx)(Go,{title:`Rename layout`,value:C,placeholder:i.name,onChange:w,onConfirm:j,onCancel:()=>S(!1),confirmLabel:`Rename`}),T&&(0,D.jsx)(Ko,{title:`Reset this layout?`,body:`The current arrangement will be replaced with the Default preset. Saved layouts are not affected.`,confirmLabel:`Reset`,onConfirm:te,onCancel:()=>E(!1),destructive:!1}),O&&(0,D.jsx)(Ko,{title:`Delete "${i.name}"?`,body:`This layout will be removed. You can always recreate it via Save as.`,confirmLabel:`Delete`,onConfirm:M,onCancel:()=>k(!1),destructive:!0}),m&&(0,D.jsx)(`div`,{role:`status`,className:`fixed bottom-5 left-1/2 -translate-x-1/2 z-50 rounded-sm border border-[var(--color-line-2)] bg-[var(--color-surface-3)] px-3 py-2 text-[11px] font-mono text-[var(--color-fg-1)] shadow-lg`,children:m})]})}function Go({title:e,value:t,placeholder:n,onChange:r,onConfirm:i,onCancel:a,confirmLabel:o}){return(0,D.jsx)(`div`,{role:`dialog`,"aria-modal":!0,"aria-label":e,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm`,onClick:a,children:(0,D.jsxs)(`div`,{onClick:e=>e.stopPropagation(),className:`w-80 rounded-sm border border-[var(--color-line-2)] bg-[var(--color-surface-2)] p-4`,children:[(0,D.jsx)(`div`,{className:`overline mb-2`,children:e}),(0,D.jsx)(`input`,{value:t,onChange:e=>r(e.target.value),placeholder:n,onKeyDown:e=>{e.key===`Enter`&&i(),e.key===`Escape`&&a()},className:`w-full bg-[var(--color-surface-1)] border border-[var(--color-line-1)] rounded-sm px-2 py-1.5 text-[13px] font-mono text-[var(--color-fg-1)] focus:outline-none focus:border-[var(--color-brand)]`}),(0,D.jsxs)(`div`,{className:`mt-3 flex justify-end gap-2`,children:[(0,D.jsxs)(K,{variant:`ghost`,size:`sm`,onClick:a,children:[(0,D.jsx)(Oo,{size:11,strokeWidth:2.25}),`Cancel`]}),(0,D.jsx)(K,{variant:`primary`,size:`sm`,onClick:i,children:o})]})]})})}function Ko({title:e,body:t,confirmLabel:n,destructive:r,onConfirm:i,onCancel:a}){return(0,D.jsx)(`div`,{role:`dialog`,"aria-modal":!0,"aria-label":e,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm`,onClick:a,children:(0,D.jsxs)(`div`,{onClick:e=>e.stopPropagation(),className:`w-96 rounded-sm border border-[var(--color-line-2)] bg-[var(--color-surface-2)] p-4`,children:[(0,D.jsx)(`div`,{className:`overline mb-2`,children:e}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-2)] leading-relaxed`,children:t}),(0,D.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2`,children:[(0,D.jsx)(K,{variant:`ghost`,size:`sm`,onClick:a,children:`Cancel`}),(0,D.jsx)(K,{variant:r?`danger`:`primary`,size:`sm`,onClick:i,children:n})]})]})})}var qo={default:`builtin-default`,focusLatency:`builtin-focus-latency`,focusApprovals:`builtin-focus-approvals`,compact:`builtin-compact`},Jo={id:qo.default,name:`Default`,builtIn:!0,panels:[{id:`hero-metrics`,x:0,y:0,w:12,h:2},{id:`graph`,x:0,y:2,w:8,h:5},{id:`latency-trace`,x:8,y:2,w:4,h:3},{id:`throughput`,x:8,y:5,w:2,h:2},{id:`decision-mix`,x:10,y:5,w:2,h:2},{id:`telemetry-feed`,x:0,y:7,w:12,h:3},{id:`system-pulse`,x:0,y:10,w:12,h:3},{id:`pending-approvals`,x:0,y:13,w:6,h:3},{id:`recent-blocks`,x:6,y:13,w:6,h:3}]},Yo={id:qo.focusLatency,name:`Focus · Latency`,builtIn:!0,panels:[{id:`hero-metrics`,x:0,y:0,w:12,h:2},{id:`latency-trace`,x:0,y:2,w:8,h:5},{id:`graph`,x:8,y:2,w:4,h:5},{id:`throughput`,x:0,y:7,w:6,h:2},{id:`decision-mix`,x:6,y:7,w:6,h:2},{id:`system-pulse`,x:0,y:9,w:12,h:3},{id:`telemetry-feed`,x:0,y:12,w:12,h:3},{id:`pending-approvals`,x:0,y:15,w:6,h:2},{id:`recent-blocks`,x:6,y:15,w:6,h:2}]},Xo={id:qo.focusApprovals,name:`Focus · Approvals`,builtIn:!0,panels:[{id:`pending-approvals`,x:0,y:0,w:8,h:4},{id:`graph`,x:8,y:0,w:4,h:4},{id:`recent-blocks`,x:0,y:4,w:12,h:3},{id:`hero-metrics`,x:0,y:7,w:12,h:2},{id:`latency-trace`,x:0,y:9,w:6,h:3},{id:`telemetry-feed`,x:6,y:9,w:6,h:3},{id:`system-pulse`,x:0,y:12,w:12,h:3},{id:`throughput`,x:0,y:15,w:6,h:2},{id:`decision-mix`,x:6,y:15,w:6,h:2}]},Zo={id:qo.compact,name:`Compact`,builtIn:!0,panels:[{id:`hero-metrics`,x:0,y:0,w:12,h:2},{id:`graph`,x:0,y:2,w:8,h:3},{id:`latency-trace`,x:8,y:2,w:4,h:3},{id:`system-pulse`,x:0,y:5,w:12,h:3},{id:`throughput`,x:0,y:8,w:4,h:2},{id:`decision-mix`,x:4,y:8,w:4,h:2},{id:`telemetry-feed`,x:0,y:10,w:12,h:3},{id:`pending-approvals`,x:0,y:13,w:6,h:2},{id:`recent-blocks`,x:6,y:13,w:6,h:2}]},Qo=Object.freeze([Jo,Yo,Xo,Zo]);function $o(){return Qo.map(e=>({...e,panels:e.panels.map(e=>({...e}))}))}function es(){return{version:1,activeLayoutId:qo.default,layouts:$o()}}function ts(e){return Object.values(qo).includes(e)}var ns=new Set(Io),rs=new Set(Qo.map(e=>e.id));function is(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function as(e,t,n,r){if(typeof e!=`number`||!Number.isFinite(e))return r;let i=Math.floor(e);return i<t?t:i>n?n:i}function os(e,t){let n=(typeof e==`string`?e:``).replace(/[\u0000-\u001F\u007F]/g,``).trim();return n.length===0?t:n.slice(0,40)}function ss(e){let t=e.find(e=>e.id===`system-pulse`);if(!t||t.h>=3)return e;let n=3-t.h,r=t.y+t.h;return e.map(e=>e.id===`system-pulse`?{...e,h:3}:e.y>=r?{...e,y:e.y+n}:e)}function cs(e){for(let t=0;t<e.length;t++){let n=e[t];for(let r=t+1;r<e.length;r++){let t=e[r];if(n.x<t.x+t.w&&n.x+n.w>t.x&&n.y<t.y+t.h&&n.y+n.h>t.y)return!0}}return!1}function ls(e){if(!is(e))return null;let{id:t}=e;if(typeof t!=`string`||!ns.has(t))return null;let n=t,r=Ro[n],i=as(e.x,0,11,0),a=as(e.w,r.minW,12,r.defaultW);return{id:n,x:i+a>12?12-a:i,y:as(e.y,0,999,0),w:a,h:as(e.h,r.minH,99,r.defaultH)}}function us(e,t){if(!is(e))return{layout:null,droppedPanels:0};let n=typeof e.id==`string`&&e.id.length>0?e.id:null;if(!n)return{layout:null,droppedPanels:0};let r=os(e.name,t),i=rs.has(n),a=e.panels;if(!Array.isArray(a))return{layout:null,droppedPanels:0};let o=new Set,s=[],c=0;for(let e of a){let t=ls(e);if(!t){c+=1;continue}if(o.has(t.id)){c+=1;continue}o.add(t.id),s.push(t)}return s.length===0?{layout:null,droppedPanels:c}:{layout:{id:n,name:r,builtIn:i,panels:ss(s)},droppedPanels:c}}function ds(e){if(!is(e)||e.version!==1)return{config:es(),droppedPanels:0,prunedLayouts:0,fellBackToDefault:!0};let t=e.layouts;if(!Array.isArray(t)||t.length===0)return{config:es(),droppedPanels:0,prunedLayouts:0,fellBackToDefault:!0};let n=[],r=0,i=0,a=0;for(let e of t){let{layout:t,droppedPanels:o}=us(e,`Layout ${n.length+1}`);if(r+=o,t){if(!t.builtIn){if(i>=12){a+=1;continue}i+=1}n.push(t)}}if(n.length===0)return{config:es(),droppedPanels:r,prunedLayouts:a,fellBackToDefault:!0};let o=new Set(n.map(e=>e.id));for(let e of Qo)o.has(e.id)||n.push({...e,panels:e.panels.map(e=>({...e}))});let s=new Map(Qo.map(e=>[e.id,e])),c=0,l=0;for(let e=0;e<n.length;e++){let t=n[e],r=s.get(t.id);if(!r)continue;if(cs(t.panels)){n[e]={...r,panels:r.panels.map(e=>({...e}))},l+=1;continue}let i=new Set(t.panels.map(e=>e.id)),a=r.panels.filter(e=>!i.has(e.id));if(a.length===0)continue;let o=t.panels.reduce((e,t)=>Math.max(e,t.y+t.h),0);for(let e of a)t.panels.push({id:e.id,x:0,y:o,w:e.w,h:e.h}),o+=e.h,c+=1}let u=e.activeLayoutId;return{config:{version:1,activeLayoutId:typeof u==`string`&&n.some(e=>e.id===u)?u:Qo[0].id,layouts:n},droppedPanels:r,prunedLayouts:a,fellBackToDefault:!1,backfilledPanels:c,refreshedBuiltins:l}}var fs=`ssg:dashboard-layout:v1`,ps=300;function ms(){if(typeof localStorage>`u`)return null;try{let e=`__ssg_probe__`;return localStorage.setItem(e,`1`),localStorage.removeItem(e),localStorage}catch{return null}}var hs;function gs(){return hs===void 0&&(hs=ms()),hs}function _s(){let e=gs();if(!e)return{config:es(),droppedPanels:0,prunedLayouts:0,fellBackToDefault:!1};let t=null;try{t=e.getItem(fs)}catch{t=null}if(t===null)return{config:es(),droppedPanels:0,prunedLayouts:0,fellBackToDefault:!1};let n=null;try{n=JSON.parse(t)}catch{return{config:es(),droppedPanels:0,prunedLayouts:0,fellBackToDefault:!0}}return ds(n)}var vs=null,ys=null,bs=null;function xs(e){return bs=e,()=>{bs===e&&(bs=null)}}function Ss(e){bs?bs(e):typeof console<`u`&&console.warn(`[ssg-layout]`,e)}function Cs(){if(ys=null,!vs)return;let e=gs();if(!e){vs=null;return}let t=vs;vs=null;try{e.setItem(fs,JSON.stringify(t))}catch(e){e instanceof Error&&e.name===`QuotaExceededError`?Ss(`Layout storage full — save skipped`):Ss(`Layout save failed: ${e instanceof Error?e.message:String(e)}`)}}function ws(e){vs=e,ys===null&&(ys=setTimeout(Cs,ps))}function Ts(e){vs=e,ys!==null&&(clearTimeout(ys),ys=null),Cs()}function Es(e){let t=0;for(let n of e.layouts)n.builtIn||(t+=1);return t}function Ds(e){return e.map(e=>({...e}))}function Os(){return`user-${Math.random().toString(16).slice(2,11)}`}function ks(){let[e,t]=(0,_.useState)(()=>_s().config),[n,r]=(0,_.useState)(null);(0,_.useEffect)(()=>xs(e=>r(e)),[]),(0,_.useEffect)(()=>{ws(e)},[e]);let i=e.layouts.find(t=>t.id===e.activeLayoutId)??e.layouts[0]??$o()[0],a=Es(e)<12,o=(0,_.useCallback)(e=>{t(t=>t.layouts.some(t=>t.id===e)?{...t,activeLayoutId:e}:t)},[]),s=(0,_.useCallback)(e=>{t(t=>{let n=t.activeLayoutId;return{...t,layouts:t.layouts.map(t=>t.id===n?{...t,panels:Ds(e)}:t)}})},[]),c=(0,_.useCallback)(e=>{let n=e.trim();n&&t(e=>{if(Es(e)>=12)return e;let t=e.layouts.find(t=>t.id===e.activeLayoutId)??e.layouts[0];if(!t)return e;let r={id:Os(),name:n,builtIn:!1,panels:Ds(t.panels)};return{...e,activeLayoutId:r.id,layouts:[...e.layouts,r]}})},[]),l=(0,_.useCallback)(e=>{let n=e.trim();n&&t(e=>({...e,layouts:e.layouts.map(t=>t.id===e.activeLayoutId&&!t.builtIn?{...t,name:n}:t)}))},[]),u=(0,_.useCallback)(e=>{t(t=>{let n=t.layouts.find(t=>t.id===e);if(!n||n.builtIn)return t;let r=t.layouts.filter(t=>t.id!==e),i=t.activeLayoutId===e?r[0]?.id??Qo[0]?.id:t.activeLayoutId;return{...t,activeLayoutId:i,layouts:r}})},[]),d=(0,_.useCallback)(()=>{t(e=>{let t=e.layouts.find(t=>t.id===e.activeLayoutId);if(!t)return e;let n=ts(t.id)?Qo.find(e=>e.id===t.id):Qo[0];return n?{...e,layouts:e.layouts.map(e=>e.id===t.id?{...e,panels:Ds(n.panels)}:e)}:e})},[]),f=(0,_.useCallback)(()=>JSON.stringify(e,null,2),[e]),p=(0,_.useCallback)(e=>{let n;try{n=JSON.parse(e)}catch{return{ok:!1,message:`Import failed: not valid JSON`}}let r=ds(n);if(r.fellBackToDefault)return{ok:!1,message:`Import rejected: schema invalid, no changes applied`};t(r.config),Ts(r.config);let i=[`Layout imported`];return r.droppedPanels>0&&i.push(`${r.droppedPanels} unrecognized panel(s) dropped`),r.prunedLayouts>0&&i.push(`${r.prunedLayouts} excess layout(s) pruned`),{ok:!0,message:i.join(` · `)}},[]);return(0,_.useEffect)(()=>{e.layouts.length===0&&t(es())},[e.layouts.length]),{config:e,activeLayout:i,canAddUserLayout:a,saveError:n,selectLayout:o,updateActivePanels:s,saveAs:c,renameActive:l,deleteLayout:u,resetActive:d,exportConfig:f,importConfig:p}}var As=[`rules-changed`,`activity-updated`,`pending-changed`,`runtime-tick`,`limits-breach`],js={critical:{border:`border-l-red-500/70`,iconBg:`bg-red-500/15`,iconFg:`text-red-400`,chipBg:`bg-red-500/10`,chipFg:`text-red-300`,label:`Critical`},warning:{border:`border-l-amber-400/70`,iconBg:`bg-amber-500/15`,iconFg:`text-amber-300`,chipBg:`bg-amber-500/10`,chipFg:`text-amber-200`,label:`Heads up`},info:{border:`border-l-sky-500/70`,iconBg:`bg-sky-500/15`,iconFg:`text-sky-300`,chipBg:`bg-sky-500/10`,chipFg:`text-sky-200`,label:`Tip`}};function Ms({severity:e}){return e===`critical`?(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10`}),(0,D.jsx)(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`12`}),(0,D.jsx)(`line`,{x1:`12`,y1:`16`,x2:`12.01`,y2:`16`})]}):e===`warning`?(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`}),(0,D.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,D.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}):(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10`}),(0,D.jsx)(`line`,{x1:`12`,y1:`16`,x2:`12`,y2:`12`}),(0,D.jsx)(`line`,{x1:`12`,y1:`8`,x2:`12.01`,y2:`8`})]})}function Ns({notification:e,onAction:t}){let[n,r]=(0,_.useState)(`idle`),[i,a]=(0,_.useState)(null),o=js[e.severity];return(0,D.jsxs)(`div`,{className:`hig-card border-l-2 ${o.border} flex items-start gap-3 px-3 py-2.5`,children:[(0,D.jsx)(`span`,{className:`shrink-0 mt-0.5 inline-flex items-center justify-center w-6 h-6 rounded-full ${o.iconBg} ${o.iconFg}`,"aria-hidden":!0,children:(0,D.jsx)(Ms,{severity:e.severity})}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,D.jsx)(`span`,{className:`text-[9px] font-mono font-medium uppercase tracking-wider px-1.5 py-0.5 rounded ${o.chipBg} ${o.chipFg}`,children:o.label}),(0,D.jsx)(`h3`,{className:`text-[13px] font-medium text-[var(--color-fg-0)] leading-tight`,children:e.title})]}),(0,D.jsx)(`p`,{className:`mt-1 text-[12px] text-[var(--color-fg-2)] leading-relaxed`,children:e.detail}),n===`error`&&i&&(0,D.jsxs)(`p`,{className:`mt-1.5 text-[11px] font-mono text-red-300`,children:[`Failed: `,i]}),n===`done`&&(0,D.jsx)(`p`,{className:`mt-1.5 text-[11px] font-mono text-emerald-300`,children:`✓ Done — refreshing…`})]}),(0,D.jsx)(`div`,{className:`shrink-0 self-center`,children:e.action?(0,D.jsx)(`button`,{type:`button`,onClick:async()=>{if(e.action&&!(e.action.confirm&&!confirm(e.action.confirm))){r(`loading`),a(null);try{await t(e),r(`done`)}catch(e){r(`error`),a(e instanceof Error?e.message:String(e))}}},disabled:n===`loading`||n===`done`,className:`inline-flex items-center gap-1 h-8 px-3 rounded-sm text-[11px] font-medium uppercase tracking-wider bg-[var(--color-surface-2)] text-[var(--color-fg-1)] border border-[var(--color-line-1)] hover:bg-[var(--color-surface-3)] hover:border-[var(--color-line-2)] transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap`,children:n===`loading`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`animate-spin`,children:`⟳`}),` working…`]}):n===`done`?(0,D.jsx)(D.Fragment,{children:`✓ done`}):e.action.label}):e.link?(0,D.jsxs)(`a`,{href:e.link.href,className:`inline-flex items-center gap-1 h-8 px-3 rounded-sm text-[11px] font-medium uppercase tracking-wider bg-[var(--color-surface-2)] text-[var(--color-fg-1)] border border-[var(--color-line-1)] hover:bg-[var(--color-surface-3)] hover:border-[var(--color-line-2)] transition-colors whitespace-nowrap`,children:[e.link.label,` →`]}):null})]})}function Ps({showEmptyState:e=!1,hideHeader:t=!1}={}){let n=zt(As),{data:r,refetch:i}=H(`/api/json/maintenance`,[n[`rules-changed`],n[`activity-updated`],n[`pending-changed`],n[`runtime-tick`],n[`limits-breach`]]),a=async e=>{if(!e.action)return;let t=await fetch(e.action.url,{method:e.action.method,headers:{Accept:`application/json`,"Content-Type":`application/json`,...U()}});if(!t.ok){let e=await t.text().catch(()=>``);throw Error(e||`HTTP ${t.status}`)}setTimeout(()=>i(),600)},o=r?.notifications??[];return o.length===0&&!e?null:(0,D.jsxs)(`section`,{"data-reveal":!0,children:[!t&&(0,D.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,D.jsx)(`h2`,{className:`overline text-[11px]`,children:o.length===0?`maintenance · all clear`:`maintenance · ${o.length} item${o.length===1?``:`s`}`}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>i(),className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] transition-colors cursor-pointer`,title:`Re-check now`,children:`refresh`})]}),o.length===0?(0,D.jsxs)(`div`,{className:`hig-card border-l-2 border-l-emerald-500/60 px-4 py-5 flex items-center gap-3`,children:[(0,D.jsx)(`span`,{className:`inline-flex items-center justify-center w-8 h-8 rounded-full bg-emerald-500/15 text-emerald-300 shrink-0`,children:(0,D.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M20 6L9 17l-5-5`})})}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h3`,{className:`text-[13px] font-medium text-[var(--color-fg-0)] leading-tight`,children:`Everything looks good`}),(0,D.jsx)(`p`,{className:`mt-1 text-[12px] text-[var(--color-fg-2)] leading-relaxed`,children:`No drift, no capacity warnings, no stalled daemons. We'll let you know if anything changes.`})]})]}):(0,D.jsx)(`div`,{className:`space-y-2`,children:o.map(e=>(0,D.jsx)(Ns,{notification:e,onAction:a},e.id))})]})}var Fs=e=>Math.max(0,Math.round(e)).toLocaleString(void 0,{useGrouping:!0});function Is(e,t){if(e===`spring`){let e=$n();return{ease:e.fn,durationMs:e.duration}}return e===`quart`?{ease:Fn.out,durationMs:t}:{ease:Pn.out,durationMs:t}}var Ls=250;function Rs({value:e,duration:t=320,format:n=Fs,className:r,curve:i=`cubic`}){let[a,o]=(0,_.useState)(e),s=(0,_.useRef)(e),c=(0,_.useRef)(e),l=(0,_.useRef)(0),u=(0,_.useRef)(null),d=(0,_.useRef)(sr()),f=(0,_.useRef)(null),p=(0,_.useRef)(0);return p.current===0&&(p.current=performance.now()),(0,_.useEffect)(()=>{if(c.current===e)return;if(performance.now()-p.current<Ls){c.current=e,s.current=e,o(e);return}let n=f.current;if(n&&!d.current){for(let e of n.getAnimations())e.id===`lc-value-pulse`&&e.cancel();let e=n.animate([{textShadow:`0 0 0 rgba(245, 158, 11, 0)`},{textShadow:`0 0 10px rgba(245, 158, 11, 0.55)`,offset:.2},{textShadow:`0 0 0 rgba(245, 158, 11, 0)`}],{duration:520,easing:`ease-out`});e.id=`lc-value-pulse`}if(d.current){c.current=e,s.current=e,o(e);return}s.current=a,c.current=e,l.current=performance.now(),u.current!==null&&cancelAnimationFrame(u.current);let{ease:r,durationMs:m}=Is(i,t),h=e=>{let t=Math.min(1,(e-l.current)/m),n=r(t);o(s.current+(c.current-s.current)*n),t<1?u.current=requestAnimationFrame(h):u.current=null};return u.current=requestAnimationFrame(h),()=>{u.current!==null&&(cancelAnimationFrame(u.current),u.current=null)}},[e,t,i,a]),(0,D.jsx)(`span`,{ref:f,className:W(`tabular-nums`,r),children:n(a)})}function zs({counters:e,className:t,showLegend:n=!0}){let r=[{key:`allow`,label:`Allow`,value:e.allow,color:`var(--color-decision-allow)`,textClass:`text-emerald-300`},{key:`ask`,label:`Ask`,value:e.ask,color:`var(--color-decision-ask)`,textClass:`text-amber-300`},{key:`block`,label:`Block`,value:e.block,color:`var(--color-decision-block)`,textClass:`text-red-300`},{key:`force`,label:`Force`,value:e.force,color:`var(--color-decision-force)`,textClass:`text-sky-300`},{key:`log`,label:`Log`,value:e.log,color:`var(--color-decision-log)`,textClass:`text-violet-300`},{key:`shadow`,label:`Shadow`,value:e.shadow,color:`var(--color-decision-shadow)`,textClass:`text-[var(--color-fg-3)]`}],i=r.reduce((e,t)=>e+t.value,0),a=(0,_.useRef)(null),o=(0,_.useRef)({});return(0,_.useEffect)(()=>{let e=a.current;if(!e)return;let t=e.querySelectorAll(`[data-seg]`);if(t.length===0)return;let n=sr();t.forEach(e=>{let t=e.dataset.seg,a=r.find(e=>e.key===t);if(!a)return;let s=i===0?0:a.value/i*100,c=o.current[t]??0;n||Math.abs(c-s)<.01?e.style.width=`${s}%`:Tr(e,{width:[`${c}%`,`${s}%`],duration:480,ease:`outExpo`}),o.current[t]=s})},[i,r.find]),(0,D.jsxs)(`div`,{className:W(`flex flex-col gap-2`,t),children:[(0,D.jsx)(`div`,{ref:a,className:`flex h-3 w-full overflow-hidden rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-2)]`,children:i===0?(0,D.jsx)(`div`,{className:`w-full bg-[var(--color-surface-3)]`}):r.map(e=>(0,D.jsx)(`div`,{"data-seg":e.key,style:{width:`${i===0?0:e.value/i*100}%`,background:e.color}},e.key))}),n?(0,D.jsx)(`div`,{className:`grid grid-cols-2 gap-x-3 gap-y-1 text-[11px] font-mono`,children:r.map(e=>(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2 min-w-0`,children:[(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,D.jsx)(`span`,{className:`h-2 w-2 shrink-0 rounded-sm`,style:{background:e.color}}),(0,D.jsx)(`span`,{className:W(`uppercase tracking-wide truncate`,e.textClass),children:e.label})]}),(0,D.jsx)(Rs,{value:e.value,className:`shrink-0 tabular-nums text-[var(--color-fg-1)]`})]},e.key))}):null]})}function Bs({data:e,width:t=80,height:n=24,color:r=`#38bdf8`,threshold:i,maxValue:a}){if(e.length<2)return(0,D.jsx)(`svg`,{width:t,height:n,className:`shrink-0`,children:(0,D.jsx)(`line`,{x1:0,y1:n/2,x2:t,y2:n/2,stroke:`var(--color-line-2)`,strokeWidth:1})});let o=a??Math.max(...e,1),s=t-2,c=n-2,l=e.map((t,n)=>{let r=1+n/(e.length-1)*s,i=1+c-t/o*c;return`${r.toFixed(1)},${i.toFixed(1)}`}),u=i===void 0?null:1+c-Math.min(i,o)/o*c;return(0,D.jsxs)(`svg`,{width:t,height:n,className:`shrink-0`,children:[(0,D.jsx)(`polyline`,{points:l.join(` `),fill:`none`,stroke:r,strokeWidth:1.5,strokeLinejoin:`round`,strokeLinecap:`round`}),u!==null&&(0,D.jsx)(`line`,{x1:1,y1:u,x2:t-1,y2:u,stroke:`var(--color-brand)`,strokeWidth:1,strokeDasharray:`3,2`,opacity:.7})]})}function Vs(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function Hs({value:e,samples:t,maxValue:n,width:r=320,height:i=64,windowMs:a=6e4,color:o=`var(--color-brand)`,fillColor:s=`rgba(245, 158, 11, 0.12)`,className:c}){let l=(0,_.useRef)(null),u=(0,_.useRef)(null),d=(0,_.useRef)([]),f=(0,_.useRef)(t??null),p=(0,_.useRef)(e??0),m=(0,_.useRef)(Vs());return(0,_.useEffect)(()=>{f.current=t??null},[t]),(0,_.useEffect)(()=>{t===void 0&&e!==void 0&&e!==p.current&&(p.current=e,d.current.push({ts:Date.now(),v:e}),d.current.length>600&&d.current.splice(0,d.current.length-600))},[e,t]),(0,_.useEffect)(()=>{let e=()=>{let e=Date.now(),t=e-a,o;if(f.current){let e=f.current;o=[];for(let n of e)n.ts>=t&&o.push(n)}else{let n=d.current;for(;n.length>1&&n[1]?.ts<t;)n.shift();(n.length===0||n[n.length-1]?.ts<e-200)&&n.push({ts:e,v:p.current}),o=n.filter(e=>e.ts>=t)}if(o.length<2)l.current&&l.current.setAttribute(`points`,``),u.current&&u.current.setAttribute(`points`,``);else{let e=n??Math.max(1,...o.map(e=>e.v)),s=[];for(let n of o){let o=(n.ts-t)/a*r,c=i-n.v/e*(i-2)-1;s.push(`${o.toFixed(1)},${c.toFixed(1)}`)}let c=s.join(` `);if(l.current&&l.current.setAttribute(`points`,c),u.current){let e=s[0]?.split(`,`),t=s[s.length-1]?.split(`,`),n=`${e[0]},${i} ${c} ${t[0]},${i}`;u.current.setAttribute(`points`,n)}}};if(m.current){let t=window.setInterval(e,500);return()=>clearInterval(t)}let[t]=Ga(e);return t},[r,i,a,n]),(0,D.jsxs)(`svg`,{width:`100%`,height:i,viewBox:`0 0 ${r} ${i}`,className:W(`block`,c),preserveAspectRatio:`none`,children:[(0,D.jsx)(`polygon`,{ref:u,fill:s,stroke:`none`}),(0,D.jsx)(`polyline`,{ref:l,fill:`none`,stroke:o,strokeWidth:1.5,strokeLinejoin:`round`,strokeLinecap:`round`})]})}var Us=_n(`hero-metric relative flex flex-col gap-2 rounded-sm border bg-[var(--color-surface-1)] border-[var(--color-line-1)] px-4 py-3 overflow-hidden`,{variants:{tone:{neutral:`hero-metric--neutral`,amber:`hero-metric--amber`,green:`hero-metric--green`,red:`hero-metric--red`,blue:`hero-metric--blue`,purple:`hero-metric--purple`,gray:`hero-metric--gray`}},defaultVariants:{tone:`neutral`}}),Ws={neutral:`var(--color-fg-1)`,amber:`var(--color-decision-ask)`,green:`var(--color-decision-allow)`,red:`var(--color-decision-block)`,blue:`var(--color-decision-force)`,purple:`var(--color-decision-log)`,gray:`var(--color-fg-3)`},Gs={neutral:`color-mix(in srgb, var(--color-fg-1) 10%, transparent)`,amber:`color-mix(in srgb, var(--color-decision-ask) 14%, transparent)`,green:`color-mix(in srgb, var(--color-decision-allow) 14%, transparent)`,red:`color-mix(in srgb, var(--color-decision-block) 14%, transparent)`,blue:`color-mix(in srgb, var(--color-decision-force) 14%, transparent)`,purple:`color-mix(in srgb, var(--color-decision-log) 14%, transparent)`,gray:`color-mix(in srgb, var(--color-fg-3) 10%, transparent)`},Ks={neutral:`text-[var(--color-fg-0)]`,amber:`text-amber-300`,green:`text-emerald-300`,red:`text-red-300`,blue:`text-sky-300`,purple:`text-violet-300`,gray:`text-[var(--color-fg-2)]`},qs=1e3,Js=.35;function Ys(e,t,n){let r=Date.now(),i=r-n,a=Math.max(2,Math.floor(n/qs)),o=Array(a).fill(0);for(let n of e){if(t&&!t(n)||n.ts_ms<i||n.ts_ms>r)continue;let e=a-1-Math.floor((r-n.ts_ms)/qs);e>=0&&e<a&&o[e]++}let s=Array(a),c=o[0];for(let e=0;e<a;e++)c=Js*o[e]+(1-Js)*c,s[e]={ts:i+(e+1)*qs,v:c};return s}function Xs({label:e,value:t,series:n,burstRing:r,filter:i,sparkWindowMs:a=6e4,sub:o,tone:s,format:c,className:l,...u}){let d=s??`neutral`,f=Ws[d]??Ws.neutral,p=Gs[d]??Gs.neutral,m=Ks[d]??Ks.neutral,h=(0,_.useRef)(null),g=(0,_.useRef)(t);(0,_.useEffect)(()=>{if(g.current===t)return;g.current=t;let e=h.current;e&&Tr(e,{"--tick":[0,1],duration:160,ease:`outCubic`,onComplete:()=>{Tr(e,{"--tick":[1,0],duration:520,ease:`outCubic`,onComplete:e=>{e.style.removeProperty(`--tick`)}})}})},[t]);let v=(0,_.useMemo)(()=>r?Ys(r,i,a):null,[r,i,a]),y=v!==null,b=!y&&n&&n.length>=2;return(0,D.jsxs)(`div`,{ref:h,className:W(Us({tone:s,className:l})),...u,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsx)(`span`,{className:`overline`,children:e}),o?(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] tabular-nums`,children:o}):null]}),(0,D.jsxs)(`div`,{className:`flex items-end justify-between gap-3`,children:[(0,D.jsx)(Rs,{value:t,format:c,className:W(`text-[2.4rem] leading-none font-semibold tracking-tight`,m)}),y?(0,D.jsx)(Hs,{samples:v,width:108,height:36,windowMs:a,color:f,fillColor:p,className:`shrink-0`}):b?(0,D.jsx)(Bs,{data:n,width:96,height:28,color:f}):null]})]})}var Z={containerPaddingY:24,containerPaddingX:24,topToTrendGap:12,scatterHeaderH:18,scatterLegendH:16,scatterInnerGap:8,trendRowH:28,trendRowGap:6,trendTopPad:9,scatterAbsoluteMin:60,scatterAcceptableMin:70,gaugeFootprintFactor:1.36,gaugeAbsoluteMin:84,gaugeAbsoluteMax:240};function Zs(e,t,n=200){let r=Math.max(0,Math.floor(e)),i=Math.max(0,Math.floor(t)),a=Math.max(0,r-Z.containerPaddingX),o=Math.max(0,i-Z.containerPaddingY),s=o-(Z.trendRowH*3+Z.trendRowGap*2+Z.trendTopPad+Z.topToTrendGap),c=s-Z.scatterHeaderH-Z.scatterLegendH-Z.scatterInnerGap>=Z.scatterAcceptableMin,l=c?s:o,u=l-Z.scatterHeaderH-Z.scatterLegendH-Z.scatterInnerGap,d=u>=Z.scatterAbsoluteMin,f=u>=Z.scatterAbsoluteMin&&l>=140,p=Math.floor(l/Z.gaugeFootprintFactor),m=Math.floor(a*.45/Z.gaugeFootprintFactor),h=Math.max(Z.gaugeAbsoluteMin,Math.min(Z.gaugeAbsoluteMax,n,p,m)),g=Math.ceil(h*Z.gaugeFootprintFactor+8),_=l-(d?Z.scatterHeaderH:0)-(f?Z.scatterLegendH:0)-Z.scatterInnerGap;return{gaugeSize:h,gaugeColumnMaxWidth:g,scatterMinHeight:Math.max(Z.scatterAbsoluteMin,Math.min(160,_)),showTrendRows:c,showScatterHeader:d,showLegend:f,variant:o>=480?`wide`:o>=300?`normal`:`compact`}}var Qs=135,$s=405,ec=$s-Qs,tc=`#34d399`,nc=`#f59e0b`,rc=`#ef4444`;function ic(e,t,n,r){let i=(r-90)*(Math.PI/180);return{x:e+n*Math.cos(i),y:t+n*Math.sin(i)}}function ac(e,t,n,r,i){let a=ic(e,t,n,r),o=ic(e,t,n,i),s=+(i-r>180);return`M ${a.x.toFixed(2)} ${a.y.toFixed(2)} A ${n} ${n} 0 ${s} 1 ${o.x.toFixed(2)} ${o.y.toFixed(2)}`}function oc(e,t){return Qs+Math.max(0,Math.min(1,e/Math.max(t,1e-9)))*ec}function sc(e,t,n){return e+(t-e)*n}function cc(e){let t=parseInt(e.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function lc(e,t,n){let[r,i,a]=cc(e),[o,s,c]=cc(t);return`rgb(${Math.round(sc(r,o,n))},${Math.round(sc(i,s,n))},${Math.round(sc(a,c,n))})`}function uc(e,t,n){let r=.04;return e<t-r?tc:e<t+r?lc(tc,nc,(e-(t-r))/(r*2)):e<n-r?nc:e<n+r?lc(nc,rc,(e-(n-r))/(r*2)):rc}function dc(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}var fc=0;function pc(){return fc=fc+1|0,fc.toString(36)}function mc({value:e,max:t,warnAt:n=.7,critAt:r=.9,marker50:i,marker99:a,label:o,display:s,displayFormat:c,scaleLabels:l,mode:u=`needle`,size:d=180,className:f,revLights:p=!0,revLightCount:m=20}){let h=Math.ceil(u===`needle`&&l!==void 0?d*.2:d*.08),g=-h,v=-h,y=d+h*2,b=d+h*2,x=d/2,S=d/2,C=d*.42,w=Math.max(0,Math.min(1,e/Math.max(t,1e-9))),T=(0,_.useMemo)(()=>ac(x,S,C,Qs,$s),[x,S,C]),E=(0,_.useMemo)(()=>ac(x,S,C-8,Qs,$s),[x,S,C]),O=Qs+n*ec,k=Qs+r*ec,ee=(0,_.useMemo)(()=>ac(x,S,C,Qs,O),[x,S,C,O]),A=(0,_.useMemo)(()=>ac(x,S,C,O,k),[x,S,C,O,k]),j=(0,_.useMemo)(()=>ac(x,S,C,k,$s),[x,S,C,k]),M=(0,_.useMemo)(()=>ac(x,S,C-14,300,420),[x,S,C]),te=Qs+w*ec,ne=(0,_.useMemo)(()=>ac(x,S,C,Qs,Math.max(Qs+.01,te)),[x,S,C,te]),N=uc(w,n,r),P=(0,_.useMemo)(()=>pc(),[]),F=`lgf-${P}`,re=`lgb-${P}`,I=`lgd-${P}`,L=`lgh-${P}`,R=`lgg-${P}`,z=`lgl-${P}`,ie=(0,_.useMemo)(()=>{if(u!==`needle`)return[];let e=[];for(let t=0;t<=10;t++)e.push(Qs+t/10*ec);return e},[u]),ae=(0,_.useMemo)(()=>{if(u!==`needle`)return[];let e=[];for(let t=0;t<=40;t++)t%4!=0&&e.push(Qs+t/40*ec);return e},[u]),oe=(0,_.useRef)(null),se=(0,_.useRef)(null),ce=(0,_.useRef)(null),le=(0,_.useRef)(null),ue=(0,_.useRef)(null),de=(0,_.useRef)(null),fe=(0,_.useRef)(null),pe=(0,_.useRef)(null),me=(0,_.useRef)([]),he=(0,_.useRef)(e),ge=(0,_.useRef)(t),B=(0,_.useRef)(n),_e=(0,_.useRef)(r);(0,_.useEffect)(()=>{he.current=e,ge.current=t,B.current=n,_e.current=r},[e,t,n,r]);let ve=(0,_.useMemo)(()=>{if(!p||u!==`needle`)return[];let e=Math.max(4,m),t=C-11,n=[];for(let r=0;r<e;r++){let i=Qs+(r+.5)/e*ec;n.push(ic(x,S,t,i))}return n},[p,m,u,x,S,C]);me.current.length!==ve.length&&(me.current.length=ve.length);let ye=x+C-6,be=x+d*.04,xe=Math.max(2,d*.016),V=`${ye},${S} ${be},${S-xe} ${be},${S+xe}`,Se=x-d*.04,Ce=x-C*.24,we=Math.max(1.4,d*.012),Te=`${Ce},${S} ${Se},${S-we} ${Se},${S+we}`,Ee=d*.48,De=d*.17,Oe=x-Ee/2,ke=S+d*.16,Ae=ke+De*.68;return(0,_.useEffect)(()=>{let e=dc(),t=performance.now(),n=he.current,r=0,i=he.current,a=0,o=he.current,s=``,l=``,d=``,f=-1,m=``,h=``,[g]=Ga(()=>{let g=performance.now(),_=(g-t)/1e3;t=g;let v=Math.min(.04,Math.max(.001,_)),y=he.current,b=ge.current,w=B.current,T=_e.current,E=Math.max(b,1e-9),D=y;if(e)n=y,i=y,o=y,r=0,a=0;else{let e=v/2;for(let t=0;t<2;t++){let t=-210*(n-D)-22*r;r+=t*e,n+=r*e;let o=-55*(i-n)-13*a;a+=o*e,i+=a*e}let t=1-Math.exp(-v*8);o+=(y-o)*t,Math.abs(n-y)<E*1e-5&&Math.abs(r)<1e-4&&(n=y,r=0),Math.abs(o-y)<E*1e-5&&(o=y)}let O=Math.max(0,Math.min(1,n/Math.max(b,1e-9))),k=Qs+O*ec,ee=Qs+Math.max(0,Math.min(1,i/Math.max(b,1e-9)))*ec,A=uc(O,w,T),j=`rotate(${(k-90).toFixed(3)} ${x} ${S})`;oe.current&&j!==s&&(oe.current.setAttribute(`transform`,j),s=j),A!==d&&(se.current&&se.current.setAttribute(`fill`,A),ce.current&&ce.current.setAttribute(`fill`,A),le.current&&le.current.setAttribute(`stroke`,A),de.current&&de.current.setAttribute(`fill`,A),d=A);let M=`rotate(${(ee-90).toFixed(3)} ${x} ${S})`;if(ue.current&&M!==l&&(ue.current.setAttribute(`transform`,M),l=M),fe.current&&c){let e=c(o);e!==h&&(fe.current.textContent=e,h=e)}if(pe.current&&u===`ring`){let e=ac(x,S,C,Qs,Math.max(Qs+.01,k));e!==m&&(pe.current.setAttribute(`d`,e),m=e)}if(p&&u===`needle`){let e=Math.round(O*1e3)/1e3;if(e!==f){f=e;let t=me.current,n=t.length;if(n>0){let e=1/n;for(let r=0;r<n;r++){let i=t[r];if(!i)continue;let a=(r+.5)/n,o=O-a,s=Math.max(0,Math.min(1,.5+o/e));i.setAttribute(`fill`,uc(a,w,T)),i.setAttribute(`opacity`,s.toFixed(3))}}}}});return g},[x,S,C,u,p,c]),(0,D.jsxs)(`div`,{className:W(`flex flex-col items-center justify-center gap-1 min-h-0 min-w-0`,f),children:[(0,D.jsxs)(`svg`,{width:y,height:b,viewBox:`${g} ${v} ${y} ${b}`,preserveAspectRatio:`xMidYMid meet`,className:`block max-w-full max-h-full min-h-0`,children:[(0,D.jsxs)(`defs`,{children:[(0,D.jsxs)(`filter`,{id:F,x:`-40%`,y:`-40%`,width:`180%`,height:`180%`,children:[(0,D.jsx)(`feGaussianBlur`,{stdDeviation:`1.2`,result:`blur`}),(0,D.jsxs)(`feMerge`,{children:[(0,D.jsx)(`feMergeNode`,{in:`blur`}),(0,D.jsx)(`feMergeNode`,{in:`SourceGraphic`})]})]}),(0,D.jsxs)(`radialGradient`,{id:re,cx:`50%`,cy:`32%`,r:`80%`,children:[(0,D.jsx)(`stop`,{offset:`0%`,stopColor:`#4e535d`}),(0,D.jsx)(`stop`,{offset:`55%`,stopColor:`#2a2e36`}),(0,D.jsx)(`stop`,{offset:`100%`,stopColor:`#0b0d11`})]}),(0,D.jsxs)(`radialGradient`,{id:I,cx:`50%`,cy:`45%`,r:`75%`,children:[(0,D.jsx)(`stop`,{offset:`0%`,stopColor:`#1b1f27`}),(0,D.jsx)(`stop`,{offset:`80%`,stopColor:`#0a0c10`}),(0,D.jsx)(`stop`,{offset:`100%`,stopColor:`#05060a`})]}),(0,D.jsxs)(`radialGradient`,{id:L,cx:`40%`,cy:`30%`,r:`70%`,children:[(0,D.jsx)(`stop`,{offset:`0%`,stopColor:`#f4f5f8`}),(0,D.jsx)(`stop`,{offset:`45%`,stopColor:`#aab1bd`}),(0,D.jsx)(`stop`,{offset:`100%`,stopColor:`#1c1f26`})]}),(0,D.jsxs)(`linearGradient`,{id:R,x1:`50%`,y1:`0%`,x2:`50%`,y2:`100%`,children:[(0,D.jsx)(`stop`,{offset:`0%`,stopColor:`#ffffff`,stopOpacity:`0.22`}),(0,D.jsx)(`stop`,{offset:`100%`,stopColor:`#ffffff`,stopOpacity:`0`})]}),(0,D.jsxs)(`linearGradient`,{id:z,x1:`50%`,y1:`0%`,x2:`50%`,y2:`100%`,children:[(0,D.jsx)(`stop`,{offset:`0%`,stopColor:`#0a0c11`}),(0,D.jsx)(`stop`,{offset:`100%`,stopColor:`#15181f`})]})]}),u===`needle`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`circle`,{cx:x,cy:S,r:C+12,fill:`url(#${re})`,stroke:`#000`,strokeOpacity:.55,strokeWidth:1}),(0,D.jsx)(`circle`,{cx:x,cy:S,r:C+5,fill:`none`,stroke:`#0a0c11`,strokeWidth:1}),(0,D.jsx)(`circle`,{cx:x,cy:S,r:C-2,fill:`url(#${I})`})]}):null,(0,D.jsx)(`path`,{d:T,fill:`none`,stroke:`var(--color-line-1)`,strokeWidth:u===`ring`?12:3,strokeLinecap:`round`,opacity:u===`ring`?1:.35}),u===`needle`?(0,D.jsx)(`path`,{d:E,fill:`none`,stroke:`var(--color-line-0)`,strokeWidth:1,strokeLinecap:`round`,opacity:.55}):null,u===`needle`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`path`,{d:ee,fill:`none`,stroke:tc,strokeWidth:5,strokeLinecap:`round`,opacity:.78}),(0,D.jsx)(`path`,{d:A,fill:`none`,stroke:nc,strokeWidth:5,strokeLinecap:`round`,opacity:.82}),(0,D.jsx)(`path`,{d:j,fill:`none`,stroke:rc,strokeWidth:5,strokeLinecap:`round`,opacity:.9}),ae.map((e,t)=>{let n=ic(x,S,C-4,e),r=ic(x,S,C+2,e);return(0,D.jsx)(`line`,{x1:n.x,y1:n.y,x2:r.x,y2:r.y,stroke:`var(--color-fg-4)`,strokeWidth:.9,strokeLinecap:`round`,opacity:.7},`mi-${t}`)}),ie.map((e,t)=>{let n=ic(x,S,C-8,e),r=ic(x,S,C+4,e);return(0,D.jsx)(`line`,{x1:n.x,y1:n.y,x2:r.x,y2:r.y,stroke:`var(--color-fg-2)`,strokeWidth:1.8,strokeLinecap:`round`},`ma-${t}`)}),p?ve.map((e,t)=>(0,D.jsx)(`circle`,{ref:e=>{me.current[t]=e},cx:e.x,cy:e.y,r:Math.max(1.6,d*.013),fill:tc,opacity:0,filter:`url(#${F})`},t)):null,i===void 0?null:(0,D.jsx)(hc,{cx:x,cy:S,r:C,angle:oc(i,t),emphasis:!0}),a===void 0?null:(0,D.jsx)(hc,{cx:x,cy:S,r:C,angle:oc(a,t),emphasis:!0}),l?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(gc,{cx:x,cy:S,r:C,angle:O,text:l(n),size:d}),(0,D.jsx)(gc,{cx:x,cy:S,r:C,angle:k,text:l(r),size:d}),(0,D.jsx)(gc,{cx:x,cy:S,r:C,angle:$s,text:l(1),size:d})]}):null,(0,D.jsx)(`path`,{d:M,fill:`none`,stroke:`url(#${R})`,strokeWidth:d*.14,strokeLinecap:`butt`}),c||s!==void 0?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`rect`,{x:Oe,y:ke,width:Ee,height:De,rx:d*.022,ry:d*.022,fill:`url(#${z})`,stroke:`#242a33`,strokeWidth:1}),(0,D.jsx)(`rect`,{x:Oe+1,y:ke+1,width:Ee-2,height:1,fill:`#ffffff`,opacity:.08})]}):null,(0,D.jsx)(`g`,{ref:ue,opacity:.28,children:(0,D.jsx)(`polygon`,{ref:de,points:V,fill:N})}),(0,D.jsxs)(`g`,{ref:oe,children:[(0,D.jsx)(`polygon`,{ref:se,points:V,fill:N,stroke:`#05070a`,strokeWidth:.6}),(0,D.jsx)(`polygon`,{ref:ce,points:Te,fill:N,opacity:.7})]}),(0,D.jsx)(`circle`,{cx:x,cy:S,r:d*.06,fill:`url(#${L})`,stroke:`#06080c`,strokeWidth:1}),(0,D.jsx)(`circle`,{ref:le,cx:x,cy:S,r:d*.036,fill:`#0a0c11`,stroke:N,strokeWidth:1.4}),(0,D.jsx)(`circle`,{cx:x,cy:S,r:d*.012,fill:`#f5f7fb`,opacity:.9})]}):(0,D.jsx)(`path`,{ref:pe,d:ne,fill:`none`,stroke:N,strokeWidth:12,strokeLinecap:`round`}),u===`needle`&&(c||s!==void 0)?c?(0,D.jsx)(`text`,{ref:fe,x,y:Ae,textAnchor:`middle`,dominantBaseline:`middle`,className:`font-mono tabular-nums`,fontSize:d*.1,fontWeight:600,fill:`#e8ecf3`,children:c(e)}):(0,D.jsx)(`text`,{x,y:Ae,textAnchor:`middle`,dominantBaseline:`middle`,className:`font-mono tabular-nums`,fontSize:d*.1,fontWeight:600,fill:`#e8ecf3`,children:s}):c?(0,D.jsx)(`text`,{ref:fe,x,y:S+4,textAnchor:`middle`,className:`font-mono tabular-nums`,fontSize:d*.13,fill:`var(--color-fg-0)`,children:c(e)}):s===void 0?null:(0,D.jsx)(`text`,{x,y:S+4,textAnchor:`middle`,className:`font-mono tabular-nums`,fontSize:d*.13,fill:`var(--color-fg-0)`,children:s})]}),o?(0,D.jsx)(`span`,{className:`overline shrink-0 tracking-[0.12em] uppercase`,children:o}):null]})}function hc({cx:e,cy:t,r:n,angle:r,emphasis:i=!1}){let a=ic(e,t,n-(i?10:6),r),o=ic(e,t,n+(i?8:6),r);return(0,D.jsx)(`line`,{x1:a.x,y1:a.y,x2:o.x,y2:o.y,stroke:i?`var(--color-fg-1)`:`var(--color-fg-2)`,strokeWidth:i?2:1.5,strokeLinecap:`round`})}function gc({cx:e,cy:t,r:n,angle:r,text:i,size:a}){let o=ic(e,t,n+Math.max(16,a*.1),r),s=r>=135&&r<215?`end`:r>=325?`start`:`middle`;return(0,D.jsx)(`text`,{x:o.x,y:o.y,textAnchor:s,dominantBaseline:`middle`,className:`font-mono tabular-nums`,fontSize:a*.062,fontWeight:600,fill:`var(--color-fg-2)`,stroke:`var(--color-bg-0)`,strokeWidth:3,paintOrder:`stroke`,children:i})}var _c={allow:`#34d399`,block:`#ef4444`,ask:`#f59e0b`,log:`#a78bfa`,force:`#38bdf8`,shadow:`#6e7076`};function vc(e){return!Number.isFinite(e)||e<=0?`—`:e<1e3?`${e} ns`:e<1e6?`${(e/1e3).toFixed(1)} µs`:`${(e/1e6).toFixed(2)} ms`}function yc({latency:e,bursts:t,gaugeMaxMs:n=10,windowMs:r=3e4,trendWindowSec:i=60,gaugeSize:a=200,compact:o=!1,className:s}){let c=e?e.p50_ns/1e6:0,l=e?e.p95_ns/1e6:0,u=e?e.p99_ns/1e6:0,d=(0,_.useRef)(null),[f,p]=(0,_.useState)((0,_.useMemo)(()=>Zs(a*2,a*2,a),[a]));(0,_.useEffect)(()=>{let e=d.current;if(!e||typeof ResizeObserver>`u`)return;let t=0,n=0,r=0,i=e=>{let t=Math.round(e.width/4)*4,i=Math.round(e.height/4)*4;t===n&&i===r||(n=t,r=i,p(Zs(t,i,a)))};i(e.getBoundingClientRect());let o=new ResizeObserver(e=>{let n=e[0];n&&(t&&cancelAnimationFrame(t),t=requestAnimationFrame(()=>{i(n.contentRect)}))});return o.observe(e),()=>{t&&cancelAnimationFrame(t),o.disconnect()}},[a]);let m=(0,_.useRef)(null),h=(0,_.useRef)([]),g=(0,_.useRef)(0);(0,_.useEffect)(()=>{if(t.length===0)return;let e=h.current,n=g.current,i=n;for(let r of t)r.ts_ms<=n||(e.push({ts:r.ts_ms,durationNs:r.duration_ns,color:_c[r.decision]??`#6e7076`}),r.ts_ms>i&&(i=r.ts_ms));g.current=i;let a=Date.now()-r*2;for(;e.length&&e[0]?.ts<a;)e.shift()},[t,r]),(0,_.useEffect)(()=>{let e=m.current;if(!e)return;let t=e.getContext(`2d`);if(!t)return;let i=0,a=0,o=0,s=8e3,c=.25,l=1e3,u=n*1e6,d=Math.log10(l),f=Math.log10(u),[p]=Ga(()=>{let n=window.devicePixelRatio||1,p=e.clientWidth,m=e.clientHeight;if(p===0||m===0)return;(p!==a||m!==o||n!==i)&&(e.width=Math.floor(p*n),e.height=Math.floor(m*n),t.setTransform(n,0,0,n,0,0),a=p,o=m,i=n),t.clearRect(0,0,p,m),t.strokeStyle=`rgba(110, 112, 118, 0.18)`,t.lineWidth=1,t.setLineDash([2,4]);let g=[{ns:1e5,label:`100µs`},{ns:1e6,label:`1ms`},{ns:1e7,label:`10ms`}];t.font=`9px ui-monospace, SFMono-Regular, Menlo, monospace`,t.textBaseline=`middle`,t.fillStyle=`rgba(110, 112, 118, 0.7)`;for(let e of g){if(e.ns<l||e.ns>u)continue;let n=m-(Math.log10(e.ns)-d)/(f-d)*m;t.beginPath(),t.moveTo(0,n),t.lineTo(p-28,n),t.stroke(),t.fillText(e.label,p-26,n)}t.setLineDash([]);let _=Date.now(),v=_-r,y=h.current;for(;y.length&&y[0]?.ts<v;)y.shift();t.globalCompositeOperation=`source-over`;for(let e of y){let n=(e.ts-v)/r*p,i=Math.max(l,Math.min(u,e.durationNs)),a=m-(Math.log10(i)-d)/(f-d)*m,o=_-e.ts,h;if(o<=s)h=1-o/s*(1-c);else{let e=r-s;h=e>0?Math.max(0,c*(1-(o-s)/e)):0}h<=0||(t.globalAlpha=h,t.fillStyle=e.color,t.beginPath(),t.arc(n,a,2.5,0,Math.PI*2),t.fill())}t.globalAlpha=1,t.fillStyle=`rgba(110, 112, 118, 0.55)`,t.font=`9px ui-monospace, SFMono-Regular, Menlo, monospace`,t.textBaseline=`bottom`,t.textAlign=`left`,t.fillText(`← ${Math.round(r/1e3)} s ago`,4,m-2),t.textAlign=`right`,t.fillText(`now →`,p-4,m-2),t.textAlign=`left`});return p},[r,n]);let v=(0,_.useRef)({p50:[],p95:[],p99:[]});(0,_.useEffect)(()=>{if(!e)return;let t=v.current,n=Date.now(),r=n-i*1e3,a=(e,t)=>{let i=t/1e6;for(e.length===0&&e.push({ts:r,v:i}),e.push({ts:n,v:i});e.length>1&&e[0]?.ts<r;)e.shift()};a(t.p50,e.p50_ns),a(t.p95,e.p95_ns),a(t.p99,e.p99_ns)},[e,i]);let y=(0,_.useMemo)(()=>{let e=v.current;return{p50:[...e.p50],p95:[...e.p95],p99:[...e.p99]}},[]);return(0,D.jsxs)(`div`,{ref:d,"data-lt-variant":f.variant,className:W(`flex h-full min-h-0 flex-col gap-3 overflow-hidden rounded-sm border bg-[var(--color-surface-1)] border-[var(--color-line-1)] p-3`,s),children:[(0,D.jsxs)(`div`,{className:W(`grid gap-3 min-h-0 flex-1`,`grid-cols-[auto_1fr]`),children:[(0,D.jsx)(`div`,{className:`flex items-stretch justify-center overflow-hidden min-h-0 min-w-0`,style:{maxWidth:f.gaugeColumnMaxWidth},children:(0,D.jsx)(mc,{value:l,max:n,warnAt:Math.min(.85,.5/n),critAt:Math.min(.92,2/n),marker50:c,marker99:u,displayFormat:e=>vc(e*1e6),scaleLabels:f.gaugeSize>=130?e=>vc(e*n*1e6):void 0,size:f.gaugeSize,label:`p95 latency`})}),(0,D.jsxs)(`div`,{className:`flex flex-col gap-1 min-w-0 min-h-0 flex-1`,children:[f.showScatterHeader?(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3 shrink-0 min-w-0`,children:[(0,D.jsx)(`span`,{className:`overline truncate min-w-0`,children:`live trace · 30 s scatter`}),(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] shrink min-w-0 truncate text-right`,children:[h.current.length,` live · log-Y`]})]}):null,f.showLegend?(0,D.jsx)(`div`,{className:`shrink-0`,children:(0,D.jsx)(bc,{})}):null,(0,D.jsx)(`canvas`,{ref:m,"data-testid":`latency-scatter-canvas`,className:`block w-full flex-1 min-h-0 rounded-sm bg-[var(--color-surface-0)] border border-[var(--color-line-0)]`,style:{minHeight:f.scatterMinHeight}})]})]}),f.showTrendRows?(0,D.jsxs)(`div`,{"data-testid":`latency-trend-rows`,className:`grid grid-cols-1 gap-1.5 pt-2 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(xc,{label:`p50 · median`,value:vc(e?.p50_ns??0),color:`#34d399`,fill:`rgba(52, 211, 153, 0.14)`,samples:y.p50,windowMs:i*1e3}),(0,D.jsx)(xc,{label:`p95 · 95th`,value:vc(e?.p95_ns??0),color:`#38bdf8`,fill:`rgba(56, 189, 248, 0.14)`,samples:y.p95,windowMs:i*1e3}),(0,D.jsx)(xc,{label:`p99 · 99th`,value:vc(e?.p99_ns??0),color:`#6366f1`,fill:`rgba(99, 102, 241, 0.14)`,samples:y.p99,windowMs:i*1e3})]}):null]})}function bc(){return(0,D.jsx)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-[10px] font-mono text-[var(--color-fg-4)]`,children:[{key:`allow`,color:_c.allow},{key:`ask`,color:_c.ask},{key:`block`,color:_c.block},{key:`force`,color:_c.force},{key:`log`,color:_c.log},{key:`shadow`,color:_c.shadow}].map(e=>(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,D.jsx)(`span`,{className:`inline-block h-1.5 w-1.5 rounded-full`,style:{background:e.color}}),(0,D.jsx)(`span`,{className:`uppercase tracking-wide`,children:e.key})]},e.key))})}function xc({label:e,value:t,color:n,fill:r,samples:i,windowMs:a}){return(0,D.jsxs)(`div`,{className:`grid grid-cols-[72px_minmax(0,1fr)_92px] items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`overline text-right truncate min-w-0`,children:e}),(0,D.jsx)(Hs,{samples:i,width:1200,height:28,windowMs:a,color:n,fillColor:r,className:`w-full h-7`}),(0,D.jsx)(`span`,{className:`text-[11px] font-mono tabular-nums text-right truncate min-w-0`,style:{color:n},title:t,children:t})]})}function Sc(e){return e<60?`${Math.floor(e)}s`:e<3600?`${Math.floor(e/60)}m ${Math.floor(e%60)}s`:e<86400?`${Math.floor(e/3600)}h ${Math.floor(e%3600/60)}m`:`${Math.floor(e/86400)}d ${Math.floor(e%86400/3600)}h`}function Cc(e,t){if(t===void 0||t<=0)return`var(--color-brand)`;let n=e/t;return n>=.9?`var(--color-decision-block)`:n>=.7?`var(--color-decision-ask)`:`var(--color-decision-allow)`}function wc(e){return e===`var(--color-decision-block)`?`color-mix(in srgb, var(--color-decision-block) 14%, transparent)`:e===`var(--color-decision-ask)`?`color-mix(in srgb, var(--color-decision-ask) 14%, transparent)`:e===`var(--color-decision-allow)`?`color-mix(in srgb, var(--color-decision-allow) 14%, transparent)`:e===`var(--color-decision-log)`?`color-mix(in srgb, var(--color-decision-log) 14%, transparent)`:`color-mix(in srgb, var(--color-brand) 12%, transparent)`}function Tc(e,t){if(e.length===0)return[];let n=Date.now(),r=t/Math.max(1,e.length),i=Array(e.length);for(let t=0;t<e.length;t++)i[t]={ts:n-(e.length-1-t)*r,v:e[t]};return i}function Ec({cpuPct:e,cpuSeries:t,cpuLimit:n,memMb:r,memSeries:i,memLimit:a,heapUsedMb:o,heapTotalMb:s,heapSeries:c,uptimeSec:l,className:u}){let d=6e4,f=Cc(e,n),p=Cc(r,a),m=`var(--color-decision-log)`,h=(0,_.useMemo)(()=>Tc(t,d),[t]),g=(0,_.useMemo)(()=>Tc(i,d),[i]),v=(0,_.useMemo)(()=>Tc(c,d),[c]),y=(0,_.useRef)([]);(0,_.useEffect)(()=>{let e=y.current.filter(e=>!!e);if(e.length===0)return;e.forEach(e=>{e.style.opacity=`0`,e.style.transform=`translateY(28px) scale(0.94)`});let t=Tr(e,{translateY:[28,0],scale:[.94,1],opacity:[0,1],duration:720,delay:rr(140),ease:`outBack(1.25)`,onComplete:e=>{e.style.transform=``}});return()=>t.cancel()},[]);let b=n!==void 0&&n>0&&e>=n*.9,x=a!==void 0&&a>0&&r>=a*.9;return(0,D.jsx)(`div`,{className:W(`rounded-sm border bg-[var(--color-surface-1)] border-[var(--color-line-1)] p-3`,u),children:(0,D.jsxs)(`div`,{className:`grid grid-cols-2 lg:grid-cols-4 gap-3`,children:[(0,D.jsx)(Dc,{registerRef:e=>y.current[0]=e,label:`CPU`,color:f,fill:wc(f),pulse:b,valueNode:(0,D.jsxs)(`span`,{children:[(0,D.jsx)(Rs,{value:e,format:e=>e.toFixed(1),className:`text-[var(--color-fg-0)]`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] ml-1.5 text-base`,children:`%`})]}),subText:n?`limit ${n}%`:void 0,samples:h,maxValue:100,windowMs:d}),(0,D.jsx)(Dc,{registerRef:e=>y.current[1]=e,label:`Memory`,color:p,fill:wc(p),pulse:x,valueNode:(0,D.jsxs)(`span`,{children:[(0,D.jsx)(Rs,{value:r,format:e=>e.toFixed(0),className:`text-[var(--color-fg-0)]`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] ml-1.5 text-base`,children:`MB`})]}),subText:a?`limit ${a} MB`:void 0,samples:g,maxValue:a?a*1.1:void 0,windowMs:d}),(0,D.jsx)(Dc,{registerRef:e=>y.current[2]=e,label:`Heap`,color:m,fill:wc(m),valueNode:(0,D.jsxs)(`span`,{children:[(0,D.jsx)(Rs,{value:o,format:e=>e.toFixed(0),className:`text-[var(--color-fg-0)]`}),(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-3)] ml-1.5 text-base`,children:[`/ `,s.toFixed(0),` MB`]})]}),subText:s>0?`${(o/s*100).toFixed(0)}% used`:void 0,samples:v,maxValue:s>0?s:void 0,windowMs:d}),(0,D.jsx)(Dc,{registerRef:e=>y.current[3]=e,label:`Uptime`,color:`var(--color-fg-2)`,fill:`rgba(214, 215, 217, 0.04)`,valueNode:(0,D.jsx)(`span`,{className:`text-[var(--color-fg-0)] tabular-nums`,children:Sc(l)}),subText:`since daemon start`})]})})}function Dc({label:e,valueNode:t,subText:n,color:r,fill:i,samples:a,maxValue:o,windowMs:s,pulse:c,registerRef:l}){let u=(0,_.useRef)(null);return(0,_.useEffect)(()=>{if(!c||!u.current)return;let e=!1,t=null,n=()=>{e||!u.current||(t=Tr(u.current,{"--breach":[0,1],duration:420,ease:`outCubic`,onComplete:()=>{e||!u.current||(t=Tr(u.current,{"--breach":[1,0],duration:560,ease:`outCubic`,onComplete:()=>{e||n()}}))}}))};return n(),()=>{e=!0,t?.cancel();let n=u.current;n&&n.style.removeProperty(`--breach`)}},[c]),(0,D.jsxs)(`div`,{ref:e=>{u.current=e,l(e)},className:`flex flex-col gap-2 rounded-sm border bg-[var(--color-surface-0)] border-[var(--color-line-1)] px-4 py-3 min-h-[140px] system-pulse__tile`,"data-breach":c?`true`:void 0,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,D.jsx)(`span`,{className:`overline`,children:e}),n?(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] tabular-nums`,children:n}):null]}),(0,D.jsx)(`span`,{className:`text-[1.9rem] leading-none font-semibold tracking-tight font-mono`,style:{color:r},children:t}),a&&a.length>=2?(0,D.jsx)(`div`,{className:`mt-auto`,children:(0,D.jsx)(Hs,{samples:a,width:320,height:64,windowMs:s??6e4,color:r,fillColor:i,maxValue:o,className:`w-full`})}):(0,D.jsx)(`div`,{className:`mt-auto h-[64px] flex items-end`,children:(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:`— no series —`})})]})}var Oc=_n(`relative font-mono text-[11px] overflow-hidden border bg-[var(--color-surface-1)] border-[var(--color-line-1)] rounded-sm`,{variants:{density:{compact:``,roomy:`text-[12px]`}},defaultVariants:{density:`compact`}}),kc={allow:`#34d399`,block:`#ef4444`,ask:`#f59e0b`,log:`#a78bfa`,force:`#38bdf8`,shadow:`#6e7076`},Ac={allow:`text-emerald-300`,block:`text-red-300`,ask:`text-amber-300`,log:`text-violet-300`,force:`text-sky-300`,shadow:`text-[var(--color-fg-3)]`};function jc(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}.${String(t.getMilliseconds()).padStart(3,`0`)}`}function Mc(e){return e<1e3?`${e} ns`:e<1e6?`${(e/1e3).toFixed(1)} µs`:e<1e9?`${(e/1e6).toFixed(2)} ms`:`${(e/1e9).toFixed(2)} s`}function Nc(e){return e.variant===`raw`?(0,D.jsx)(Fc,{...e}):(0,D.jsx)(Pc,{...e})}function Pc({bursts:e,windowSize:t=60,filterDecision:n,filterClient:r,className:i,density:a,height:o=260}){let[s,c]=(0,_.useState)(!1),l=(0,_.useRef)(null),u=(0,_.useMemo)(()=>{let i=e;n&&(i=i.filter(e=>e.decision===n)),r&&(i=i.filter(e=>e.client===r));let a=i.slice(-t),o=Array(a.length);for(let e=0;e<a.length;e++)o[e]=a[a.length-1-e];return o},[e,n,r,t]);s?l.current===null&&(l.current=u):l.current=null;let d=s&&l.current?l.current:u,f=(0,_.useRef)(null),p=(0,_.useRef)(0);return(0,_.useLayoutEffect)(()=>{if(s)return;let e=d[0];if(!e||e.ts_ms===p.current)return;p.current=e.ts_ms;let t=f.current;t&&(sr()||Tr(t,{translateX:[-10,0],opacity:[0,1],duration:220,ease:`outExpo`}))},[d,s]),(0,D.jsxs)(`div`,{className:W(Oc({density:a,className:i})),onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),children:[(0,D.jsx)(`div`,{className:`overflow-auto`,style:{height:o},children:d.length===0?(0,D.jsx)(`div`,{className:`px-3 py-4 text-[var(--color-fg-4)]`,children:`— waiting for events —`}):d.map((e,t)=>{let n=e.input_preview&&e.input_preview.length>0?e.input_preview:e.rule_id?`rule: ${e.rule_id}`:`—`;return(0,D.jsxs)(`div`,{ref:t===0?f:void 0,className:`telemetry-row grid items-center gap-2 px-3 py-1 border-b border-[var(--color-line-0)] last:border-b-0 hover:bg-[var(--color-surface-2)]`,style:{gridTemplateColumns:`90px 56px minmax(80px, 130px) minmax(0, 1fr) 70px 80px`,borderLeft:`3px solid ${kc[e.decision]??`#666`}`},children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums`,children:jc(e.ts_ms)}),(0,D.jsx)(`span`,{className:W(`uppercase tracking-wide font-medium`,Ac[e.decision]??`text-[var(--color-fg-2)]`),children:e.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] truncate`,title:e.tool?`${e.tool} — ${fi(e.tool)}`:`unknown tool`,children:e.tool||`—`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] truncate`,title:n,children:n}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] tabular-nums text-right`,children:Mc(e.duration_ns)}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate text-right`,title:e.client,children:e.client})]},e.audit_id??`${e.ts_ms}:${e.tool}`)})}),s?(0,D.jsx)(Ic,{}):null]})}function Fc({lines:e,windowSize:t=300,className:n,density:r,height:i=260}){let[a,o]=(0,_.useState)(!1),s=(0,_.useRef)(null),c=(0,_.useMemo)(()=>{let n=e.slice(-t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=n[n.length-1-e];return r},[e,t]);a?s.current===null&&(s.current=c):s.current=null;let l=a&&s.current?s.current:c;return(0,D.jsxs)(`div`,{className:W(Oc({density:r,className:n})),onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),children:[(0,D.jsx)(`div`,{className:`overflow-auto px-3 py-2 leading-relaxed text-[var(--color-fg-2)] whitespace-pre`,style:{height:i},children:l.length===0?(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`— empty —`}):l.map((e,t)=>(0,D.jsx)(`div`,{className:`hover:bg-[var(--color-surface-2)]`,children:e},`${t}:${e.slice(0,40)}`))}),a?(0,D.jsx)(Ic,{}):null]})}function Ic(){return(0,D.jsx)(`span`,{className:`absolute top-1 right-2 text-[10px] uppercase tracking-wider font-mono text-[var(--color-brand)] bg-[var(--color-surface-0)] px-1.5 py-0.5 border border-[var(--color-brand)]/40 rounded-sm`,children:`paused`})}function Lc(e={}){let t=(0,_.useRef)(null),n=(0,_.useRef)(!1),r=(0,_.useCallback)(()=>{if(n.current)return;let r=t.current;if(!r)return;let i=r.querySelectorAll(`[data-reveal]`);if(i.length===0)return;if(n.current=!0,sr()){i.forEach(e=>{e.style.opacity=`1`,e.style.transform=``});return}let a=e.staggerMs??40,o=e.maxStaggerMs??320,s=Math.min(a,Math.max(10,o/i.length)),c=e.translateY??14,l=e.durationMs??520,u=e.from??`center`;i.forEach(e=>{e.style.opacity=`0`,e.style.transform=`translateY(${c}px)`,e.style.willChange=`transform, opacity`}),Tr(Array.from(i),{opacity:[0,1],translateY:[c,0],duration:l,ease:`outBack(1.2)`,delay:rr(s,{from:u}),onComplete:e=>{e.style.willChange=``}})},[e.staggerMs,e.maxStaggerMs,e.durationMs,e.translateY,e.from]);return(0,_.useEffect)(()=>{let n=t.current;if(!n)return;if(typeof IntersectionObserver>`u`){r();return}let i=!1,a=new IntersectionObserver(e=>{for(let t of e)if(t.isIntersecting&&!i){r(),a.disconnect();return}},{threshold:.08});a.observe(n);let o=n.querySelectorAll(`[data-reveal]`);if(!sr()){let t=e.translateY??14;o.forEach(e=>{e.style.opacity=`0`,e.style.transform=`translateY(${t}px)`})}let s=n.getBoundingClientRect();return s.top<(window.innerHeight||document.documentElement.clientHeight)&&s.bottom>0&&(r(),a.disconnect()),()=>{i=!0,a.disconnect()}},[r,e.translateY]),t}var Rc=`ssg.sfx.enabled`;function zc(){if(typeof window>`u`)return!1;try{return window.localStorage.getItem(Rc)===`true`}catch{return!1}}function Bc(e){if(!(typeof window>`u`))try{window.localStorage.setItem(Rc,String(e))}catch{}}function Vc(e,t,n,r,i,a,o=`sine`){try{let s=e.createOscillator(),c=e.createGain(),l=i/1e3;s.type=o,s.frequency.setValueAtTime(n,e.currentTime),s.frequency.exponentialRampToValueAtTime(Math.max(1,r),e.currentTime+l),c.gain.setValueAtTime(a,e.currentTime),c.gain.exponentialRampToValueAtTime(.001,e.currentTime+l),s.connect(c),c.connect(t),s.start(e.currentTime),s.stop(e.currentTime+l+.02)}catch{}}function Hc(){let[e,t]=(0,_.useState)(zc),n=(0,_.useRef)(null),r=(0,_.useRef)(null);return(0,_.useEffect)(()=>{let t=()=>{let t=n.current;t&&(document.hidden?t.suspend().catch(()=>{}):e&&t.resume().catch(()=>{}))};return document.addEventListener(`visibilitychange`,t),()=>document.removeEventListener(`visibilitychange`,t)},[e]),{enabled:e,toggle:(0,_.useCallback)(()=>{t(e=>{let t=!e;if(Bc(t),t){if(!n.current)try{let e=new AudioContext,t=e.createGain();t.gain.value=.8,t.connect(e.destination),n.current=e,r.current=t}catch{}n.current?.resume().catch(()=>{})}else n.current?.suspend().catch(()=>{});return t})},[]),play:(0,_.useCallback)(t=>{if(!e)return;let i=n.current,a=r.current;if(!(!i||!a||i.state===`suspended`))switch(t){case`block`:Vc(i,a,110,55,150,.08);break;case`force`:Vc(i,a,80,40,200,.1),Vc(i,a,160,80,200,.05,`square`);break;case`milestone`:{Vc(i,a,660,880,100,.06);let e=i,t=a;setTimeout(()=>{e.state!==`suspended`&&Vc(e,t,880,1320,100,.05)},115);break}case`record`:Vc(i,a,880,1320,350,.07);break}},[e])}}function Uc(e){return!Number.isFinite(e)||e<=0?`—`:e<1e3?`${e} ns`:e<1e6?`${(e/1e3).toFixed(1)} µs`:`${(e/1e6).toFixed(2)} ms`}async function Wc(e,t){await fetch(`/api/decide/${e}?decision=${t}`,{method:`POST`,headers:U()})}var Gc=e=>!0,Kc=e=>e.decision===`allow`,qc=e=>e.decision===`block`,Jc=e=>e.decision===`ask`,Yc=e=>e.decision===`force`,Xc=e=>e.decision===`log`;function Zc(){let e=new Date;return e.setHours(0,0,0,0),e.getTime()}function Qc(){let e=zt([`counters-updated`,`activity-updated`,`pending-changed`,`runtime-tick`]),t=Ri();Bi();let n=zi(),r=Hc();(0,_.useEffect)(()=>{t&&(t.decision===`block`?r.play(`block`):t.decision===`force`&&r.play(`force`))},[r.play,t]);let[i,a]=(0,_.useState)(()=>Zc());(0,_.useEffect)(()=>{let e=()=>{if(document.visibilityState!==`visible`)return;let e=Zc();a(t=>e===t?t:e)};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]);let{data:o}=H(`/api/state/counters?since_ms=${i}`,[e[`counters-updated`],i]),{data:s}=H(`/api/state/runtime`,[e[`runtime-tick`]]),{data:c}=H(`/api/json/limits`,[e[`runtime-tick`]]),{data:l,refetch:u}=H(`/api/json/pending`,[e[`pending-changed`]]),{data:d}=H(`/api/json/blocked`,[e[`activity-updated`]]),f=ks(),[p,m]=(0,_.useState)(!1),h=(0,_.useMemo)(()=>{let e=o?.allow??0,n=o?.block??0,r=o?.ask??0,i=o?.log??0,a=o?.force??0,s=e+n+r+i+a,c=t?.counters.total??0;return t&&c>=s&&t?{allow:t.counters.allow,block:t.counters.block,ask:t.counters.ask,log:t.counters.log,force:t.counters.force,shadow:t.counters.shadow,total:t.counters.total}:{allow:e,block:n,ask:r,log:i,force:a,shadow:0,total:s}},[t,o]),g=(0,_.useMemo)(()=>{if(n.length===0)return 0;let e=Date.now()-1e4;return n.filter(t=>t.ts_ms>=e).length/10},[n]),v=s?.history?.cpu_pct??[],y=s?.history?.memory_rss_mb??[],b=[],x=s?.latency,S=(0,_.useMemo)(()=>({"hero-metrics":()=>(0,D.jsx)(`div`,{className:`grid-bleed rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 h-full`,children:(0,D.jsxs)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3 h-full`,children:[(0,D.jsx)(Xs,{label:`Total`,value:h.total,tone:`amber`,sub:t?Uc(t.duration_ns):void 0,burstRing:n,filter:Gc}),(0,D.jsx)(Xs,{label:`Allow`,value:h.allow,tone:`green`,burstRing:n,filter:Kc}),(0,D.jsx)(Xs,{label:`Block`,value:h.block,tone:`red`,burstRing:n,filter:qc}),(0,D.jsx)(Xs,{label:`Ask`,value:h.ask,tone:`amber`,burstRing:n,filter:Jc}),(0,D.jsx)(Xs,{label:`Force`,value:h.force,tone:`blue`,burstRing:n,filter:Yc}),(0,D.jsx)(Xs,{label:`Log`,value:h.log,tone:`purple`,burstRing:n,filter:Xc})]})}),graph:()=>(0,D.jsx)(bo,{}),"latency-trace":()=>(0,D.jsx)(yc,{latency:x,bursts:n,gaugeMaxMs:10,windowMs:3e4,trendWindowSec:60,gaugeSize:200}),throughput:()=>(0,D.jsxs)(q,{className:`h-full`,children:[(0,D.jsxs)(J,{children:[(0,D.jsx)(`span`,{className:`overline`,children:`throughput · evals/s`}),(0,D.jsxs)(G,{variant:`blue`,children:[g.toFixed(1),`/s`]})]}),(0,D.jsxs)(Y,{children:[(0,D.jsx)(Hs,{value:g,width:360,height:96,windowMs:6e4,className:`w-full`}),(0,D.jsx)(`p`,{className:`overline mt-2 text-center`,children:`60-second rolling window`})]})]}),"decision-mix":()=>(0,D.jsxs)(q,{className:`h-full`,children:[(0,D.jsxs)(J,{children:[(0,D.jsx)(`span`,{className:`overline`,children:`decision mix`}),(0,D.jsx)(G,{variant:`gray`,children:h.total.toLocaleString()})]}),(0,D.jsx)(Y,{children:(0,D.jsx)(zs,{counters:{allow:h.allow,block:h.block,ask:h.ask,log:h.log,force:h.force,shadow:h.shadow}})})]}),"telemetry-feed":()=>(0,D.jsxs)(q,{variant:`flush`,className:`h-full flex flex-col`,children:[(0,D.jsxs)(J,{children:[(0,D.jsx)(`span`,{className:`overline`,children:`telemetry · live · newest first`}),(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-3)]`,children:[`hover to pause · scroll for history · `,n.length,` events buffered`]})]}),(0,D.jsx)(Y,{className:`p-0 flex-1 min-h-0`,children:(0,D.jsx)(Nc,{variant:`decision`,bursts:n,windowSize:80,height:360,className:`border-0 rounded-none`})})]}),"system-pulse":()=>(0,D.jsx)(Ec,{cpuPct:s?.cpu_pct??0,cpuSeries:v,cpuLimit:c?.config.cpuLimitPct,memMb:s?.memory_rss_mb??0,memSeries:y,memLimit:c?.config.memoryLimitMb,heapUsedMb:s?.heap_used_mb??0,heapTotalMb:s?.heap_total_mb??0,heapSeries:b,uptimeSec:(s?.uptime_ms??0)/1e3}),"pending-approvals":()=>(0,D.jsxs)(q,{className:`h-full`,children:[(0,D.jsxs)(J,{children:[(0,D.jsx)(`span`,{className:`overline`,children:`pending approvals`}),(0,D.jsx)(G,{variant:l&&l.length>0?`amber`:`gray`,children:l?.length??0})]}),(0,D.jsx)(Y,{children:l&&l.length>0?(0,D.jsx)(`ul`,{className:`space-y-2`,children:l.slice(0,5).map(e=>(0,D.jsxs)(`li`,{className:`flex items-center justify-between gap-2 border-b border-[var(--color-line-0)] last:border-b-0 py-1.5 text-[12px] font-mono`,children:[(0,D.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,D.jsxs)(`div`,{className:`text-[var(--color-fg-1)] truncate`,children:[e.toolCall.tool,` · `,e.ruleId]}),(0,D.jsx)(`div`,{className:`text-[var(--color-fg-3)] text-[11px] truncate`,children:kn(e.toolCall.tool,JSON.stringify(e.toolCall.input??{}))})]}),(0,D.jsxs)(`div`,{className:`flex gap-1 shrink-0`,children:[(0,D.jsx)(K,{size:`sm`,variant:`primary`,onClick:()=>Wc(e.id,`allow`).then(u),children:`allow`}),(0,D.jsx)(K,{size:`sm`,variant:`ghost`,onClick:()=>Wc(e.id,`block`).then(u),children:`block`})]})]},e.id))}):(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] py-3 text-center`,children:`— no pending approvals —`})})]}),"recent-blocks":()=>(0,D.jsxs)(q,{className:`h-full`,children:[(0,D.jsxs)(J,{children:[(0,D.jsx)(`span`,{className:`overline`,children:`recent blocks & forces`}),(0,D.jsx)(G,{variant:d&&d.length>0?`red`:`gray`,children:d?.length??0})]}),(0,D.jsx)(Y,{children:d&&d.length>0?(0,D.jsx)(`ul`,{className:`space-y-1.5`,children:d.slice(0,6).map((e,t)=>(0,D.jsxs)(`li`,{className:`flex items-center gap-2 text-[12px] font-mono border-b border-[var(--color-line-0)] last:border-b-0 py-1.5`,children:[(0,D.jsx)(G,{variant:e.decision===`force`?`amber`:`red`,children:e.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] truncate flex-1`,children:kn(e.tool,e.input)}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate text-[11px] max-w-[120px]`,children:e.rule_id??`—`})]},`${e.timestamp}-${t}`))}):(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] py-3 text-center`,children:`— no recent blocks —`})})]})}),[h,t,n,x,g,s,v,y,b,c,l,d,u]),C=Lc({from:`first`,translateY:22,durationMs:640,staggerMs:80,maxStaggerMs:520});return(0,D.jsxs)(`div`,{ref:p?void 0:C,className:`space-y-5`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsx)(`div`,{className:`flex-1`,"data-tutorial":`cb-layout`,children:(0,D.jsx)(Wo,{manager:f,isEditing:p,onToggleEditing:m})}),(0,D.jsx)(`button`,{type:`button`,onClick:r.toggle,className:`chip cursor-pointer hover:border-sky-500/50 hover:text-sky-300 transition-colors shrink-0`,title:r.enabled?`Mute stream sounds`:`Enable stream sounds`,children:r.enabled?`SFX ON`:`SFX OFF`})]}),(0,D.jsx)(Ps,{}),(0,D.jsx)(`div`,{"data-tutorial":`cb-grid`,children:(0,D.jsx)(Uo,{panels:f.activeLayout.panels,isEditing:p,renderers:S,onPanelsChange:f.updateActivePanels})})]})}var $c={centre:`#FF9500`,"cf-worker":`#5AC8FA`,bun:`#FFCC00`,elixir:`#AF52DE`,native:`#FF3B30`,unknown:`#8E8E93`},el={centre:`monorepo`,"cf-worker":`CF Worker`,bun:`Bun / TS`,elixir:`Elixir`,native:`Native`,unknown:`Other`};function tl(e){let t=(0,_.useRef)(null),n=(0,_.useRef)(null),r=(0,_.useRef)([]),i=(0,_.useRef)(null),a=(0,_.useRef)(null),o=(0,_.useRef)(0),s=(0,_.useRef)(null),c=(0,_.useRef)({w:0,h:0}),l=(0,_.useRef)(!1),u=(0,_.useRef)(null),[d,f]=(0,_.useState)(null),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)({centre:0,"cf-worker":0,bun:0,elixir:0,native:0,unknown:0});return(0,_.useEffect)(()=>{let e=!1;return m(!1),f(null),fetch(`/api/json/monorepo/graph`).then(async e=>{let t=e.headers.get(`content-type`)??``;if(!e.ok)throw Error(`HTTP ${e.status}`);if(!t.includes(`application/json`))throw Error(`expected JSON, got ${t||`unknown`}`);return e.json()}).then(t=>{if(e)return;let i=n.current?.clientWidth??800,a=n.current?.clientHeight??420,s=i/2,c=a/2,l=Math.min(i,a)*.36,u=t.projects,d=[{id:t.centre.id,label:t.centre.label,type:`centre`,description:`Monorepo root — every sigmashake-* project lives here`,isCentre:!0,x:s,y:c,vx:0,vy:0,radius:0,phase:0},...u.map((e,t)=>{let n=t/Math.max(1,u.length)*Math.PI*2;return{id:e.id,label:e.label.replace(/^sigmashake-/,``),type:e.type,description:e.description||`${el[e.type]} project`,isCentre:!1,x:s+Math.cos(n)*l,y:c+Math.sin(n)*l,vx:0,vy:0,radius:l,phase:n}})];r.current=d,o.current=0,g(d.reduce((e,t)=>(e[t.type]=(e[t.type]??0)+1,e),{centre:0,"cf-worker":0,bun:0,elixir:0,native:0,unknown:0})),m(!0)}).catch(t=>{e||f(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[]),(0,_.useEffect)(()=>{if(typeof window>`u`||!window.matchMedia)return;let e=window.matchMedia(`(prefers-reduced-motion: reduce)`),t=()=>{l.current=e.matches};return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,_.useEffect)(()=>{let e=t.current,s=n.current;if(!e||!s)return;let u=e.getContext(`2d`,{alpha:!0});if(!u)return;let d=new ResizeObserver(t=>{for(let n of t){let t=n.contentRect,i=window.devicePixelRatio||1;c.current.w=t.width,c.current.h=t.height,e.width=Math.max(1,Math.floor(t.width*i)),e.height=Math.max(1,Math.floor(t.height*i)),e.style.width=`${t.width}px`,e.style.height=`${t.height}px`,u.setTransform(i,0,0,i,0,0);let a=r.current;if(a.length>0){let e=t.width/2,n=t.height/2,r=Math.min(t.width,t.height)*.36;for(let t of a){if(t.isCentre){t.x=e,t.y=n;continue}t.radius=r}}}});d.observe(s);let f=0,p=performance.now(),m=[],h=(e,t)=>{let n=new Map;e.forEach((e,t)=>n.set(e.id,t));let r=[];for(let e of t){let t=n.get(e.from),i=n.get(e.to);t===void 0||i===void 0||r.push([t,i])}return r},g=e=>{let t=Math.min(.05,(e-p)/1e3);p=e;let n=r.current,{w:s,h:d}=c.current,h=s/2,_=d/2,v=i.current,y=l.current||v?0:.06;o.current+=y*t;let b=5.5,x=.86;for(let e=0;e<n.length;e++){let r=n[e];if(r.isCentre||r.id===v)continue;let i=0,a=0;for(let t=0;t<n.length;t++){if(e===t)continue;let o=n[t];if(o.isCentre)continue;let s=r.x-o.x,c=r.y-o.y,l=s*s+c*c+.01,u=Math.sqrt(l),d=1700/l;i+=s/u*d,a+=c/u*d}let s=r.phase+o.current,c=h+Math.cos(s)*r.radius,l=_+Math.sin(s)*r.radius;i+=(c-r.x)*b,a+=(l-r.y)*b;let u=r.x-h,d=r.y-_,f=Math.sqrt(u*u+d*d)||1,p=r.radius-f;i+=u/f*p*.6,a+=d/f*p*.6,r.vx=(r.vx+i*t)*x,r.vy=(r.vy+a*t)*x,r.x+=r.vx*t,r.y+=r.vy*t}u.clearRect(0,0,s,d);let S=u.createRadialGradient(h,_,0,h,_,Math.max(s,d)/1.4);S.addColorStop(0,`rgba(255, 149, 0, 0.06)`),S.addColorStop(1,`rgba(255, 149, 0, 0)`),u.fillStyle=S,u.fillRect(0,0,s,d),u.lineCap=`round`;for(let e=1;e<n.length;e++){let t=n[0],r=n[e];nl(u,t,r,.1)}for(let[e,t]of m){let r=n[e],i=n[t];!r||!i||nl(u,r,i,.24,`#5AC8FA`)}let C=a.current;for(let e of n){let t=$c[e.type],n=C===e.id,r=v===e.id,i=e.isCentre?22:11,a=n||r?i+4:i;if(n||r||e.isCentre){let n=e.isCentre?a+14:a+8,r=u.createRadialGradient(e.x,e.y,a,e.x,e.y,n);r.addColorStop(0,t),r.addColorStop(1,`rgba(0,0,0,0)`),u.globalAlpha=e.isCentre?.22:.32,u.fillStyle=r,u.beginPath(),u.arc(e.x,e.y,n,0,Math.PI*2),u.fill(),u.globalAlpha=1}if(u.fillStyle=t,u.beginPath(),u.arc(e.x,e.y,a,0,Math.PI*2),u.fill(),u.lineWidth=e.isCentre?2:1.25,u.strokeStyle=`rgba(0,0,0,0.18)`,u.stroke(),u.font=e.isCentre?`600 12px ui-sans-serif, system-ui`:`500 10.5px ui-sans-serif, system-ui`,u.fillStyle=`rgba(60,60,67,0.85)`,u.textBaseline=`middle`,u.textAlign=`center`,e.isCentre)u.fillText(e.label,e.x,e.y+a+14);else{let t=e.x-h,n=e.y-_,r=Math.sqrt(t*t+n*n)||1,i=e.x+t/r*(a+12),o=e.y+n/r*(a+12);u.textAlign=t>=0?`left`:`right`,u.textBaseline=n>=0?`top`:`bottom`,u.fillText(e.label,i,o)}}u.textAlign=`start`,u.textBaseline=`alphabetic`,f=requestAnimationFrame(g)};f=requestAnimationFrame(g);let _=-1,v=``,y=setInterval(()=>{let e=r.current,t=window.__SSG_MONOREPO_EDGES__??``;e.length===_&&t===v||(_=e.length,v=t,m=h(e,t?JSON.parse(t):[]))},250);return()=>{cancelAnimationFrame(f),clearInterval(y),d.disconnect()}},[]),(0,_.useEffect)(()=>{let e=t.current;if(!e)return;let n=t=>{let n=e.getBoundingClientRect();return{x:t.clientX-n.left,y:t.clientY-n.top}},o=(e,t)=>{let n=r.current;for(let r=n.length-1;r>=0;r--){let i=n[r],a=i.x-e,o=i.y-t,s=i.isCentre?26:14;if(a*a+o*o<=s*s)return i}return null},c=t=>{let{x:s,y:c}=n(t),l=i.current;if(l){let e=r.current.find(e=>e.id===l);if(e&&!e.isCentre){let t=e.x,n=e.y;e.x=s,e.y=c,e.vx=(s-t)*12,e.vy=(c-n)*12}return}let d=o(s,c);a.current=d?.id??null,e.style.cursor=d&&!d.isCentre?`grab`:`default`,d&&u.current?(u.current.style.display=`block`,u.current.style.left=`${s+14}px`,u.current.style.top=`${c+14}px`,u.current.innerHTML=`<strong>${rl(d.id)}</strong><span class="mg-tooltip__kind">${el[d.type]}</span>`+(d.description?`<p>${rl(d.description)}</p>`:``)):u.current&&(u.current.style.display=`none`)},l=t=>{let{x:r,y:a}=n(t),c=o(r,a);c&&!c.isCentre&&(i.current=c.id,e.setPointerCapture(t.pointerId),e.style.cursor=`grabbing`,s.current={x:r,y:a,downX:r,downY:a,downAt:performance.now()})},d=t=>{if(i.current)try{e.releasePointerCapture(t.pointerId)}catch{}i.current=null,e.style.cursor=`default`},f=()=>{a.current=null,u.current&&(u.current.style.display=`none`)};return e.addEventListener(`pointermove`,c),e.addEventListener(`pointerdown`,l),e.addEventListener(`pointerup`,d),e.addEventListener(`pointercancel`,d),e.addEventListener(`pointerleave`,f),()=>{e.removeEventListener(`pointermove`,c),e.removeEventListener(`pointerdown`,l),e.removeEventListener(`pointerup`,d),e.removeEventListener(`pointercancel`,d),e.removeEventListener(`pointerleave`,f)}},[]),(0,_.useEffect)(()=>{p&&fetch(`/api/json/monorepo/graph`).then(e=>e.json()).then(e=>{window.__SSG_MONOREPO_EDGES__=JSON.stringify(e.serviceEdges??[])}).catch(()=>{window.__SSG_MONOREPO_EDGES__=`[]`})},[p]),(0,D.jsxs)(`div`,{className:`mg`,ref:n,children:[(0,D.jsx)(`canvas`,{ref:t,className:`mg__canvas`,"aria-label":`Monorepo dependency graph`}),(0,D.jsxs)(`div`,{className:`mg__overlay`,children:[(0,D.jsxs)(`div`,{className:`mg__title`,children:[(0,D.jsx)(`strong`,{children:`monorepo map`}),(0,D.jsx)(`span`,{className:`mg__hint`,children:`drag to pluck a project • hover for details`})]}),d&&(0,D.jsx)(`div`,{className:`mg__error`,children:d}),(0,D.jsx)(`ul`,{className:`mg__legend`,children:[`cf-worker`,`bun`,`elixir`,`native`,`unknown`].map(e=>h[e]>0?(0,D.jsxs)(`li`,{children:[(0,D.jsx)(`span`,{className:`mg__swatch`,style:{background:$c[e]}}),(0,D.jsx)(`span`,{children:el[e]}),(0,D.jsx)(`span`,{className:`mg__count`,children:h[e]})]},e):null)})]}),(0,D.jsx)(`div`,{ref:u,className:`mg-tooltip`})]})}function nl(e,t,n,r,i=`#FF9500`){let a=n.x-t.x,o=n.y-t.y,s=(t.x+n.x)/2-o*.05,c=(t.y+n.y)/2+a*.05;e.globalAlpha=r,e.strokeStyle=i,e.lineWidth=1.25,e.beginPath(),e.moveTo(t.x,t.y),e.quadraticCurveTo(s,c,n.x,n.y),e.stroke(),e.globalAlpha=1}function rl(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function il(e,t){let n=Array(t).fill(0);if(e.length===0)return n;let r=Date.now()-t*1e3;for(let i=e.length-1;i>=0;i--){let a=e[i];if(!a)continue;if(a.ts_ms<r)break;let o=Math.floor((a.ts_ms-r)/1e3);o>=0&&o<t&&n[o]++}return n}function al({bins:e=60,height:t=38,className:n}){let r=zi(),i=(0,_.useRef)(null),a=(0,_.useRef)([]),o=(0,_.useRef)(null);return(0,_.useEffect)(()=>{let t=i.current;if(!t)return;let n=t.getContext(`2d`);if(!n)return;let s=Math.min(window.devicePixelRatio??1,2),c=sr(),l=()=>{let i=il(r,e);if(a.current.length!==e)a.current=i.slice();else if(c)a.current=i;else for(let t=0;t<e;t++){let e=a.current[t]??0,n=i[t]??0;a.current[t]=e+(n-e)*.18}let u=t.clientWidth,d=t.clientHeight;(t.width!==u*s||t.height!==d*s)&&(t.width=u*s,t.height=d*s,n.scale(s,s)),n.clearRect(0,0,u,d);let f=Math.max(1,...a.current),p=u/e;for(let t=0;t<e;t++){let e=a.current[t]??0,r=e/f*d,i=t*p,o=e/f;n.fillStyle=`rgba(${Math.round(56+o*199)},${Math.round(189-o*100)},${Math.round(248-o*200)},${.4+o*.55})`,n.fillRect(i+.5,d-r,Math.max(1,p-1),r)}n.strokeStyle=`rgba(148, 163, 184, 0.1)`,n.lineWidth=1,n.beginPath(),n.moveTo(0,d-.5),n.lineTo(u,d-.5),n.stroke(),o.current=requestAnimationFrame(l)};return o.current=requestAnimationFrame(l),()=>{o.current!==null&&cancelAnimationFrame(o.current),o.current=null}},[r,e]),(0,D.jsxs)(`div`,{className:W(`relative w-full`,n),style:{height:t},children:[(0,D.jsx)(`canvas`,{ref:i,className:`block w-full h-full`,style:{width:`100%`,height:`100%`}}),(0,D.jsxs)(`span`,{className:`absolute top-1 left-2 text-[9px] font-mono uppercase tracking-widest text-[var(--color-fg-4)] pointer-events-none`,children:[`bursts/sec · `,e,`s window`]})]})}var ol=8,sl=6,cl=Math.PI*.75,ll=Math.PI*2.25;function ul({size:e=110,className:t}){let n=zi(),r=(0,_.useRef)(null),i=(0,_.useRef)(0),a=(0,_.useRef)(null);return(0,_.useEffect)(()=>{let t=r.current;if(!t)return;let o=t.getContext(`2d`);if(!o)return;let s=Math.min(window.devicePixelRatio??1,2),c=sr(),l=()=>{let r=Date.now()-1500,u=0;for(let e=n.length-1;e>=0;e--){let t=n[e];if(t){if(t.ts_ms<r)break;u++}}let d=u/1.5,f=Math.min(1,d/ol);c?i.current=f:i.current+=(f-i.current)*.16;let p=e,m=e;(t.width!==p*s||t.height!==m*s)&&(t.width=p*s,t.height=m*s,t.style.width=`${p}px`,t.style.height=`${m}px`,o.scale(s,s)),o.clearRect(0,0,p,m);let h=p/2,g=m/2+4,_=p/2-8;o.lineWidth=6,o.lineCap=`round`,o.strokeStyle=`rgba(148, 163, 184, 0.18)`,o.beginPath(),o.arc(h,g,_,cl,ll),o.stroke();let v=cl+sl/ol*(ll-cl);o.strokeStyle=`rgba(239, 68, 68, 0.45)`,o.beginPath(),o.arc(h,g,_,v,ll),o.stroke();let y=cl+i.current*(ll-cl),b=i.current*ol>=sl;o.strokeStyle=b?`rgba(239, 68, 68, 0.95)`:`rgba(56, 189, 248, 0.92)`,o.lineWidth=6,o.beginPath(),o.arc(h,g,_,cl,y),o.stroke();let x=h+Math.cos(y)*(_-2),S=g+Math.sin(y)*(_-2);o.strokeStyle=b?`#fca5a5`:`#e0e7ff`,o.lineWidth=2,o.beginPath(),o.moveTo(h,g),o.lineTo(x,S),o.stroke(),o.fillStyle=b?`#fca5a5`:`#e0e7ff`,o.beginPath(),o.arc(h,g,3,0,Math.PI*2),o.fill(),o.fillStyle=b?`#fca5a5`:`#e0e7ff`,o.font=`bold 20px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,o.textAlign=`center`,o.fillText(d.toFixed(1),h,g+_*.55),o.fillStyle=`rgba(148, 163, 184, 0.85)`,o.font=`9px ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,o.fillText(`eps`,h,g+_*.55+12),a.current=requestAnimationFrame(l)};return a.current=requestAnimationFrame(l),()=>{a.current!==null&&cancelAnimationFrame(a.current),a.current=null}},[n,e]),(0,D.jsx)(`canvas`,{ref:r,className:W(`block`,t),style:{width:e,height:e}})}var dl={allow:`#22c55e`,block:`#ef4444`,force:`#a855f7`,ask:`#f59e0b`,log:`#60a5fa`,shadow:`#6b7280`},fl=[`allow`,`block`,`force`,`ask`,`log`];function pl({windowSec:e=30,height:t=14,className:n}){let r=zi(),[i,a]=(0,_.useState)({}),o=(0,_.useRef)(null);(0,_.useEffect)(()=>{let t=sr(),n=()=>{let i=Date.now()-e*1e3,s={},c=0;for(let e=r.length-1;e>=0;e--){let t=r[e];if(t){if(t.ts_ms<i)break;s[t.decision]=(s[t.decision]??0)+1,c++}}let l={};for(let e of fl)l[e]=c===0?0:(s[e]??0)/c;if(t){a(l);return}a(e=>{let t={};for(let n of fl){let r=e[n]??0;t[n]=r+((l[n]??0)-r)*.22}return t}),o.current=requestAnimationFrame(n)};return o.current=requestAnimationFrame(n),()=>{o.current!==null&&cancelAnimationFrame(o.current),o.current=null}},[r,e]);let s=fl.map(e=>({key:e,color:dl[e]??`#6b7280`,pct:Math.max(0,i[e]??0)})),c=s.reduce((e,t)=>e+t.pct,0)===0;return(0,D.jsxs)(`div`,{className:W(`w-full`,n),children:[(0,D.jsx)(`div`,{className:`flex w-full overflow-hidden rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)]`,style:{height:t},title:`decision mix · last ${e}s`,children:c?(0,D.jsx)(`div`,{className:`w-full h-full flex items-center justify-center text-[9px] font-mono uppercase tracking-widest text-[var(--color-fg-4)]`,children:`— idle —`}):s.map(e=>(0,D.jsx)(`div`,{style:{width:`${e.pct*100}%`,background:e.color,transition:`width 240ms ease-out`},title:`${e.key} · ${(e.pct*100).toFixed(1)}%`},e.key))}),(0,D.jsx)(`div`,{className:`mt-1 flex flex-wrap gap-x-3 gap-y-0.5 text-[9px] font-mono uppercase tracking-widest text-[var(--color-fg-4)]`,children:s.map(e=>(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,D.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-full`,style:{background:e.color}}),e.key,` · `,(e.pct*100).toFixed(0),`%`]},e.key))})]})}var ml={neutral:`text-[var(--color-fg-0)]`,green:`text-emerald-300`,red:`text-red-300`,amber:`text-amber-300`,blue:`text-sky-300`,purple:`text-violet-300`,gray:`text-[var(--color-fg-3)]`},hl={neutral:`bg-[var(--color-fg-3)]`,green:`bg-emerald-500`,red:`bg-red-500`,amber:`bg-[var(--color-brand)]`,blue:`bg-sky-500`,purple:`bg-violet-500`,gray:`bg-[var(--color-line-2)]`},gl=[{label:`User code`,color:`#451a03`},{label:`Runtime (bun:/node:)`,color:`#172554`},{label:`Native/other`,color:`#1f2937`},{label:`GC/idle`,color:`#450a0a`}],_l={neutral:`#d0d0d0`,green:`#34d399`,red:`#f87171`,amber:`#fbbf24`,blue:`#38bdf8`,purple:`#a78bfa`,gray:`#6e7076`};function vl({label:e,value:t,sub:n,tone:r=`neutral`,align:i=`left`,labelPlacement:a=`above`,labelClassName:o,valueClassName:s,subClassName:c,trend:l,trendColor:u}){let d=(0,D.jsx)(`div`,{className:W(a===`above`?`overline mb-1.5`:`mt-1 text-[11px] text-[var(--color-fg-3)]`,o),children:e}),f=(0,D.jsx)(`div`,{className:W(`font-mono font-medium tabular-nums`,i===`center`&&`text-center`,ml[r],s),children:t}),p=l&&l.length>1,m=u??_l[r];return(0,D.jsxs)(D.Fragment,{children:[a===`above`&&d,p?(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[f,(0,D.jsx)(Bs,{data:l,width:48,height:18,color:m})]}):f,a===`below`&&d,n&&(0,D.jsx)(`div`,{className:W(`mt-1 text-[10px] font-mono text-[var(--color-fg-3)]`,i===`center`&&`text-center`,c),children:n})]})}function yl({className:e,contentClassName:t,label:n,value:r,sub:i,tone:a,align:o,labelPlacement:s,labelClassName:c,valueClassName:l,subClassName:u,trend:d,trendColor:f,...p}){return(0,D.jsx)(q,{className:e,...p,children:(0,D.jsx)(Y,{className:W(`py-3`,o===`center`&&`text-center`,t),children:(0,D.jsx)(vl,{label:n,value:r,sub:i,tone:a,align:o,labelPlacement:s,labelClassName:c,valueClassName:l,subClassName:u,trend:d,trendColor:f})})})}function bl({className:e,...t}){return(0,D.jsx)(`div`,{className:W(`rounded-sm border border-[var(--color-line-0)] bg-[var(--color-surface-1)] p-3`,t.align===`center`&&`text-center`,e),children:(0,D.jsx)(vl,{...t})})}function xl({pct:e,tone:t=`green`,markerPct:n,className:r,barClassName:i,markerTitle:a}){let o=Math.max(0,Math.min(100,e)),s=n===void 0?null:Math.max(0,Math.min(100,n));return(0,D.jsxs)(`div`,{className:W(`relative w-full overflow-hidden rounded-sm bg-[var(--color-surface-3)]`,r),children:[(0,D.jsx)(`div`,{className:W(`h-full rounded-sm transition-all duration-500`,hl[t],i),style:{width:`${o}%`}}),s!==null&&(0,D.jsx)(`div`,{className:`absolute top-0 h-full w-0.5 bg-[var(--color-brand)]/70`,style:{left:`${s}%`},title:a})]})}function Sl({label:e,value:t,tone:n=`neutral`,breached:r=!1,breachLabel:i=`limit exceeded`,trendData:a,trendColor:o,threshold:s,maxValue:c,footer:l,className:u,valueClassName:d}){return(0,D.jsxs)(q,{className:u,children:[(0,D.jsxs)(J,{className:`py-2`,children:[(0,D.jsx)(`span`,{className:`overline`,children:e}),r&&(0,D.jsx)(`span`,{className:`text-[10px] font-mono uppercase tracking-wider text-red-300`,children:i})]}),(0,D.jsxs)(Y,{children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,D.jsx)(`div`,{className:W(`text-2xl font-mono font-medium tabular-nums`,ml[n],d),children:t}),(a?.length??0)>1&&o&&(0,D.jsx)(Bs,{data:a??[],width:80,height:28,color:o,threshold:s,maxValue:c})]}),l]})]})}function Cl({profile:e,children:t}){return(0,D.jsxs)(`div`,{className:`space-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-4 text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsxs)(`span`,{children:[`nodes:`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:e.nodes.length})]}),(0,D.jsxs)(`span`,{children:[`duration:`,` `,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-1)]`,children:[((e.endTime-e.startTime)/1e3).toFixed(0),`ms`]})]}),(0,D.jsxs)(`span`,{children:[`samples:`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:e.samples?.length??0})]})]}),(0,D.jsx)(`div`,{className:`flex gap-3 text-[10px] font-mono text-[var(--color-fg-3)]`,children:gl.map(e=>(0,D.jsxs)(`span`,{className:`flex items-center`,children:[(0,D.jsx)(`span`,{className:`mr-1 inline-block h-2.5 w-2.5 rounded-[1px]`,style:{background:e.color}}),e.label]},e.label))}),t]})}function wl({memory:e,formatValue:t}){return(0,D.jsx)(`div`,{className:`grid grid-cols-4 gap-3`,children:[{label:`RSS`,value:t(e.rss)},{label:`Heap Total`,value:t(e.heapTotal)},{label:`Heap Used`,value:t(e.heapUsed)},{label:`External`,value:t(e.external)}].map(e=>(0,D.jsx)(bl,{align:`center`,label:e.label,value:e.value,valueClassName:`text-lg font-medium text-[var(--color-fg-0)]`},e.label))})}var Tl=3;function El(e){return e===null?`—`:e<1e6?`${(e/1e3).toFixed(0)}µs`:`${(e/1e6).toFixed(1)}ms`}var Dl=[`counters-updated`,`activity-updated`,`pending-changed`,`runtime-tick`,`limits-breach`];function Ol({info:e}){let t=e.tier===`pro`||e.tier===`enterprise`,n=e.status===`needs_reauth`,r=e.pct_used??0,i=r>=90?`bg-red-500`:r>=70?`bg-amber-500`:`bg-emerald-500`;return(0,D.jsxs)(q,{className:n?`border-l-2 border-l-amber-500/70`:t?`border-l-2 border-l-emerald-500/70`:`border-l-2 border-l-sky-500/70`,children:[(0,D.jsxs)(J,{children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`text-xs font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:`license`}),(0,D.jsx)(G,{variant:t?`green`:n?`amber`:`blue`,children:e.tier_label}),e.fleet_enrolled&&(0,D.jsx)(G,{variant:`gray`,children:`fleet`})]}),e.email&&(0,D.jsx)(`span`,{className:`text-xs text-[var(--color-fg-3)]`,children:e.email})]}),(0,D.jsxs)(Y,{className:`space-y-3`,children:[n&&e.detail&&(0,D.jsxs)(`div`,{className:`rounded border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-xs text-amber-200`,children:[e.detail,` — run`,` `,(0,D.jsx)(`code`,{className:`font-mono`,children:`ssg auth login`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`flex justify-between text-xs text-[var(--color-fg-2)]`,children:[(0,D.jsx)(`span`,{children:`evals today`}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(Rs,{value:e.evals_today,curve:`spring`}),e.eval_daily_limit!==null&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:` / `}),e.eval_daily_limit.toLocaleString()]}),e.eval_daily_limit===null&&(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:` · unlimited`})]})]}),e.eval_daily_limit!==null&&(0,D.jsx)(`div`,{className:`mt-1 h-1.5 w-full overflow-hidden rounded-full bg-[var(--color-bg-2)]`,children:(0,D.jsx)(`div`,{className:`h-full transition-all duration-700 ease-out ${i}`,style:{width:`${r}%`}})})]}),!t&&(0,D.jsxs)(`a`,{href:e.upgrade_url,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-xs text-[var(--color-brand)] hover:underline`,children:[`Upgrade to Pro · $`,e.pricing.pro_monthly_usd,`/mo →`]}),t&&e.retention_days>0&&(0,D.jsxs)(`div`,{className:`text-[10px] text-[var(--color-fg-3)] font-mono uppercase tracking-wider`,children:[`cloud retention: `,e.retention_days,` days`]})]})]})}function kl(e){return new Date(e*1e3).toLocaleTimeString()}function Al(e,t=24){let n=(0,_.useRef)(null),[r,i]=(0,_.useState)([]);return(0,_.useEffect)(()=>{let r=n.current;if(n.current=e,r===null)return;let a=Math.max(0,e-r);i(e=>{let n=e.length>=t?e.slice(-(t-1)):e.slice();return n.push(a),n})},[e,t]),r}async function jl(e,t){await fetch(`/api/decide/${e}?decision=${t}`,{method:`POST`,headers:U()})}async function Ml(e,t){let n=await fetch(`/api/rules/toggle`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,...U()},body:JSON.stringify({ruleId:e,file:t})});if(!n.ok)throw Error(`Toggle failed: ${n.status}`)}async function Nl(e,t){let n=await fetch(`/api/rules/toggle`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,...U()},body:JSON.stringify({ruleId:e,file:t})});if(!n.ok)throw Error(`Toggle failed: ${n.status}`)}async function Pl(e,t){let n=await fetch(`/api/rules/update-decision`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({ruleId:e,file:t,decision:`ask`})});if(!n.ok)throw Error(`Update decision failed: ${n.status}`)}async function Q(e,t){let n=await fetch(`/api/rules/update-decision`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({ruleId:e,file:t,decision:`block`})});if(!n.ok)throw Error(`Update decision failed: ${n.status}`)}function Fl({ruleId:e}){return e?(0,D.jsx)(`a`,{href:`/rules?highlight=${encodeURIComponent(e)}`,className:`text-[var(--color-brand)] hover:underline text-xs font-mono break-all`,title:`Go to rule: ${e}`,children:e}):(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`—`})}function Il({title:e,right:t}){return(0,D.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,D.jsx)(`h2`,{className:`overline text-[11px]`,children:e}),t]})}function Ll({children:e}){return(0,D.jsx)(`div`,{className:`rounded-sm border border-dashed border-[var(--color-line-1)] bg-[var(--color-surface-1)]/50 px-4 py-6 text-center text-[11px] font-mono text-[var(--color-fg-3)]`,children:e})}function Rl({item:e,onDisable:t,onChangeToAsk:n,onUndo:r}){let[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(`idle`),[c,l]=(0,_.useState)(!1),u=kn(e.tool,e.input),d=e.rule_id&&e.source_file,f=e.decision===`force`?`force`:`block`,p=f===`force`?`amber`:`red`,m=async()=>{s(`loading`);try{await n(),s(`done-ask`)}catch{s(`error`)}},h=async()=>{s(`loading`);try{await t(),s(`done-disable`)}catch{s(`error`)}},g=async()=>{l(!0);try{await r(o===`done-disable`?`disable`:`ask`),s(`idle`)}catch{}finally{l(!1)}},v=o===`done-ask`||o===`done-disable`;return(0,D.jsx)(q,{className:`border-l-2 ${v?`border-l-[var(--color-line-1)]`:f===`force`?`border-l-amber-400/60`:`border-l-red-500/60`} ${v?`opacity-60`:``}`,children:(0,D.jsxs)(`div`,{className:`px-3 py-3`,children:[v&&(0,D.jsxs)(`div`,{className:`flex items-center justify-between rounded-sm px-2.5 py-1.5 mb-3 text-[11px] font-mono ${o===`done-ask`?`bg-sky-500/5 border border-sky-500/25 text-sky-300`:`bg-amber-500/5 border border-amber-500/25 text-amber-300`}`,children:[(0,D.jsx)(`span`,{className:`truncate`,children:o===`done-ask`?`✓ rule "${e.rule_id}" → ask · prompts next time`:`✓ rule "${e.rule_id}" disabled · no longer blocks`}),(0,D.jsx)(`button`,{onClick:g,disabled:c,className:`ml-3 shrink-0 px-2 py-0.5 rounded-sm border border-current/40 hover:bg-white/5 transition-colors cursor-pointer disabled:opacity-50 uppercase tracking-wider text-[10px]`,children:c?`…`:`↩ undo`})]}),o===`error`&&(0,D.jsxs)(`div`,{className:`flex items-center justify-between rounded-sm px-2.5 py-1.5 mb-3 text-[11px] font-mono bg-red-500/5 border border-red-500/25 text-red-300`,children:[(0,D.jsx)(`span`,{children:`failed to update rule — check server logs`}),(0,D.jsx)(`button`,{onClick:()=>s(`idle`),className:`ml-3 shrink-0 px-2 py-0.5 rounded-sm border border-current/40 hover:bg-white/5 transition-colors cursor-pointer uppercase tracking-wider text-[10px]`,children:`retry`})]}),(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mb-1.5 flex-wrap`,children:[(0,D.jsx)(G,{variant:v?o===`done-ask`?`blue`:`gray`:p,children:v?o===`done-ask`?`ask`:`disabled`:f}),(0,D.jsx)(`code`,{className:`text-[var(--color-brand)] text-xs font-mono`,children:e.tool}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] text-xs`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] text-[11px] font-mono tabular-nums`,children:kl(e.timestamp)}),e.repeat_count>1&&(0,D.jsxs)(G,{variant:`gray`,children:[`×`,e.repeat_count]})]}),(0,D.jsx)(`div`,{className:`text-xs font-mono truncate cursor-pointer hover:text-[var(--color-fg-0)] transition-colors ${v?`text-[var(--color-fg-4)] line-through`:`text-[var(--color-fg-1)]`}`,title:u,onClick:()=>a(e=>!e),children:u})]}),d&&!v&&o!==`error`&&(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0 pt-0.5`,children:[(0,D.jsxs)(`button`,{onClick:m,disabled:o===`loading`,className:`inline-flex items-center gap-1 h-7 px-2.5 rounded-sm text-[11px] font-medium uppercase tracking-wider bg-sky-500/8 text-sky-300 border border-sky-500/25 hover:bg-sky-500/15 hover:border-sky-500/40 transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed`,children:[o===`loading`?(0,D.jsx)(`span`,{className:`animate-spin`,children:`⟳`}):(0,D.jsxs)(`svg`,{width:`11`,height:`11`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10`}),(0,D.jsx)(`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`}),(0,D.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),`ask instead`]}),(0,D.jsxs)(`button`,{onClick:h,disabled:o===`loading`,className:`inline-flex items-center gap-1 h-7 px-2.5 rounded-sm text-[11px] font-medium uppercase tracking-wider bg-red-500/8 text-red-300 border border-red-500/25 hover:bg-red-500/15 hover:border-red-500/40 transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed`,children:[o===`loading`?(0,D.jsx)(`span`,{className:`animate-spin`,children:`⟳`}):(0,D.jsxs)(`svg`,{width:`11`,height:`11`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10`}),(0,D.jsx)(`line`,{x1:`15`,y1:`9`,x2:`9`,y2:`15`}),(0,D.jsx)(`line`,{x1:`9`,y1:`9`,x2:`15`,y2:`15`})]}),`disable rule`]})]})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-1 mt-2 text-[11px] font-mono`,children:[e.rule_id&&(0,D.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] uppercase tracking-wider text-[10px]`,children:`rule`}),(0,D.jsx)(Fl,{ruleId:e.rule_id})]}),e.source_file&&(0,D.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] uppercase tracking-wider text-[10px]`,children:`src`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)]`,children:e.source_file})]}),e.rules_evaluated!==null&&(0,D.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] uppercase tracking-wider text-[10px]`,children:`evals`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] tabular-nums`,children:e.rules_evaluated})]}),(0,D.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] uppercase tracking-wider text-[10px]`,children:`latency`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] tabular-nums`,children:El(e.duration_ns)})]}),(0,D.jsx)(`button`,{onClick:()=>a(e=>!e),className:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-0)] transition-colors ml-auto cursor-pointer uppercase tracking-wider text-[10px]`,children:i?`▾ hide`:`▸ details`})]}),i&&(0,D.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`div`,{className:`overline mb-2`,children:`full input`}),(0,D.jsx)(kr,{children:(()=>{try{return JSON.stringify(JSON.parse(e.input),null,2)}catch{return e.input}})()})]})]})})}function zl(){let e=zt(Dl),t=[e[`counters-updated`],e[`activity-updated`],e[`pending-changed`]],{data:n}=H(`/api/state/counters`,t),{data:r,refetch:i}=H(`/api/json/pending`,t),{data:a,refetch:o}=H(`/api/json/blocked`,t),{data:s}=H(`/api/state/activity`,t),{data:c}=H(`/api/state/runtime`,[e[`runtime-tick`]]),{data:l}=H(`/api/json/limits`,[e[`limits-breach`]]),{data:u}=H(`/api/json/license`,[e[`activity-updated`]]),[d,f]=(0,_.useState)(!1),p=a?.reduce((e,t)=>e+t.repeat_count,0)??0,m=n?.allow??0,h=(n?.block??0)+(n?.force??0),g=n?.force??0,v=n?.pending??0,y=n?.log??0,b=Al(m),x=Al(h),S=Al(g),C=Al(v),w=Al(y),T=[{label:`allow`,value:m,tone:`green`,trend:b},{label:`block`,value:h,tone:`red`,trend:x},{label:`force`,value:g,tone:`amber`,trend:S},{label:`pending`,value:v,tone:`blue`,trend:C},{label:`log`,value:y,tone:`gray`,trend:w}];return(0,D.jsxs)(`div`,{ref:Lc({from:`first`}),className:`space-y-8`,children:[(0,D.jsx)(Ps,{}),(0,D.jsx)(`div`,{"data-reveal":!0,children:(0,D.jsx)(tl,{})}),(0,D.jsx)(`div`,{"data-tutorial":`dash-stats`,className:`grid grid-cols-2 sm:grid-cols-5 gap-2`,children:T.map(e=>(0,D.jsx)(yl,{align:`left`,label:e.label,value:(0,D.jsx)(Rs,{value:e.value,curve:`spring`}),tone:e.tone,labelPlacement:`above`,contentClassName:`py-3`,valueClassName:`text-2xl font-medium`,trend:e.trend,"data-reveal":!0},e.label))}),(0,D.jsxs)(`div`,{"data-reveal":!0,"data-tutorial":`dash-meters`,className:`grid grid-cols-12 gap-2 items-stretch`,children:[(0,D.jsxs)(`div`,{className:`col-span-12 md:col-span-7 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] px-3 py-2 flex flex-col gap-2`,children:[(0,D.jsx)(al,{bins:60,height:42}),(0,D.jsx)(pl,{windowSec:60,height:12})]}),(0,D.jsx)(`div`,{className:`col-span-12 md:col-span-5 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] px-3 py-2 flex items-center justify-center`,children:(0,D.jsx)(ul,{size:130})})]}),u&&(0,D.jsx)(`div`,{"data-reveal":!0,children:(0,D.jsx)(Ol,{info:u})}),c&&(0,D.jsxs)(`div`,{"data-reveal":!0,className:`grid grid-cols-2 gap-2`,children:[(0,D.jsx)(Sl,{label:`cpu`,value:c.cpu_pct==null?`—`:(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(Rs,{value:c.cpu_pct,format:e=>Math.round(e).toString()}),`%`]}),tone:l?.breaches.cpu?`red`:(c.cpu_pct??0)>=60?`amber`:`green`,breached:l?.breaches.cpu??!1,trendData:c.history?.cpu_pct,trendColor:l?.breaches.cpu?`#f87171`:`#34d399`,threshold:l?.config.cpuLimitPct,maxValue:100,className:l?.breaches.cpu?`border-red-500/40`:``,footer:(0,D.jsx)(`a`,{href:`/monitor`,className:`mt-1 block text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-brand)]`,children:`view details →`})}),(0,D.jsx)(Sl,{label:`memory rss`,value:c.memory_rss_mb==null?`—`:(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(Rs,{value:c.memory_rss_mb,format:e=>Math.round(e).toString()}),(0,D.jsx)(`span`,{className:`ml-1 text-sm text-[var(--color-fg-3)]`,children:`MB`})]}),tone:l?.breaches.memory?`red`:`neutral`,breached:l?.breaches.memory??!1,trendData:c.history?.memory_rss_mb,trendColor:l?.breaches.memory?`#f87171`:`#38bdf8`,threshold:l?.config.memoryLimitMb,className:l?.breaches.memory?`border-red-500/40`:``,footer:(0,D.jsx)(`a`,{href:`/monitor`,className:`mt-1 block text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-brand)]`,children:`view details →`})})]}),(0,D.jsxs)(`section`,{"data-reveal":!0,"data-tutorial":`dash-approvals`,children:[(0,D.jsx)(Il,{title:`pending approvals`}),!r||r.length===0?(0,D.jsx)(Ll,{children:`no pending approvals`}):(0,D.jsx)(`div`,{className:`space-y-2`,children:r.map(e=>(0,D.jsxs)(q,{className:`border-l-2 border-l-sky-500/50`,children:[(0,D.jsxs)(J,{children:[(0,D.jsx)(`span`,{className:`text-sm text-[var(--color-fg-0)]`,children:e.ruleMessage}),(0,D.jsxs)(`div`,{className:`flex gap-2`,children:[(0,D.jsx)(K,{size:`sm`,variant:`primary`,onClick:async()=>{await jl(e.id,`allow`),i()},children:`approve`}),(0,D.jsx)(K,{size:`sm`,variant:`danger`,onClick:async()=>{await jl(e.id,`block`),i()},children:`deny`})]})]}),(0,D.jsxs)(Y,{className:`space-y-2 text-xs`,children:[(0,D.jsxs)(`div`,{className:`flex gap-2 items-center`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`tool`}),(0,D.jsx)(`code`,{className:`text-[var(--color-brand)] font-mono`,children:e.toolCall.tool})]}),e.prompt&&(0,D.jsxs)(`div`,{className:`flex gap-2 items-start`,children:[(0,D.jsx)(`span`,{className:`overline pt-0.5`,children:`prompt`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] truncate`,children:e.prompt})]}),(0,D.jsx)(kr,{children:JSON.stringify(e.toolCall.input,null,2)})]})]},e.id))})]}),a&&a.length>0&&(0,D.jsxs)(`section`,{"data-reveal":!0,children:[(0,D.jsx)(Il,{title:`blocked actions`,right:(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-[var(--color-fg-3)]`,children:[a.length,` active`,p>a.length?` · ${p} total hits`:``]})}),(0,D.jsx)(`div`,{className:`space-y-2`,children:(d?a:a.slice(0,Tl)).map(e=>(0,D.jsx)(Rl,{item:e,onDisable:async()=>{await Ml(e.rule_id,e.source_file),o()},onChangeToAsk:async()=>{await Pl(e.rule_id,e.source_file),o()},onUndo:async t=>{t===`disable`?await Nl(e.rule_id,e.source_file):await Q(e.rule_id,e.source_file),o()}},`${e.decision}:${e.rule_id??`none`}:${e.tool}:${e.timestamp}:${e.input}`))}),a.length>Tl&&(0,D.jsx)(`div`,{className:`mt-3 flex justify-center`,children:(0,D.jsx)(K,{size:`sm`,variant:`secondary`,onClick:()=>f(e=>!e),children:d?`↑ show less`:`↓ show ${a.length-Tl} more`})})]}),(0,D.jsxs)(`section`,{"data-reveal":!0,"data-tutorial":`dash-audit`,children:[(0,D.jsx)(Il,{title:`recent audit log`,right:s&&s.length>0?(0,D.jsx)(`a`,{href:`/audit`,className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-brand)] transition-colors`,children:`view all →`}):void 0}),!s||s.length===0?(0,D.jsx)(Ll,{children:`no audit entries yet`}):(0,D.jsx)(`div`,{className:`space-y-1.5`,children:s.slice(0,15).map(e=>(0,D.jsx)(Ai,{row:e},e.id))})]})]})}var Bl=[{id:`rca`,label:`rca`,hint:`pre-computed root cause`},{id:`timeline`,label:`timeline`,hint:`recent frames across traces`},{id:`watch`,label:`watch`,hint:`subscribe to any ssg:// URI`},{id:`state`,label:`state`,hint:`daemon runtime snapshot`},{id:`metrics`,label:`metrics`,hint:`latency + counters`}],Vl={rca:{title:`Root Cause Analysis`,body:`When an eval errors, an ssqa finding arrives, or a daemon-level error fires, SSG auto-composes a diagnosis with ranked hypotheses, evidence, and suggested next actions — the same pack Claude reads through MCP.`,useWhen:`Something just broke and you want the short version before grepping logs.`},timeline:{title:`Eval Timeline`,body:`Flame-chart of the last 1024 frames across every rule and tool call. Each row is one tool call (trace_id); each bar is one pipeline stage colored by kind; a red outline means that stage errored.`,useWhen:`You want to see which stages a rule went through and how long each took. Click a bar to inspect the frame.`},watch:{title:`Live URI Watch`,body:`Subscribe to any ssg:// resource and watch it update as the daemon emits events. Every CLI, MCP, and dashboard surface ultimately reads through these same URIs.`,useWhen:`You know exactly which internal resource (rules, audit rows, frames, RCA pack, native stats) you want to inspect.`},state:{title:`Daemon Snapshot`,body:`Live vitals for the SSG daemon process — uptime, rules loaded, native FFI availability, frame ring size, eval quotas, audit worker readiness.`,useWhen:`The daemon feels off (slow, dropping events, refusing calls) and you want to confirm it's healthy.`},metrics:{title:`Performance Counters`,body:`Latency distributions and event counters for the eval pipeline (per-stage timings, native call overhead, audit throughput).`,useWhen:`Evals feel slow and you want to find the hot stage before optimizing.`}};function Hl(){let[e,t]=(0,_.useState)(`rca`);return(0,D.jsxs)(`div`,{className:`flex flex-col gap-4 min-h-[70vh]`,children:[(0,D.jsxs)(`header`,{className:`space-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsx)(`h1`,{className:`text-sm font-mono uppercase tracking-wider text-[var(--color-fg-1)]`,children:`ai-native debugger`}),(0,D.jsx)(`span`,{className:`chip text-sky-300 border-sky-500/30`,children:`ssg:// unified resolver`}),(0,D.jsx)(Jl,{})]}),(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:`one surface · cli · mcp · dashboard`})]}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-3)] max-w-3xl leading-snug`,children:`See exactly what happened inside SSG during recent rule evaluations — which stage ran, which rule matched, how long each step took, and what went wrong. The same data Claude reads via MCP.`})]}),(0,D.jsx)(Wl,{}),(0,D.jsx)(Kl,{}),(0,D.jsx)(`nav`,{"data-tutorial":`debug-tabs`,className:`flex items-center gap-1 border-b border-[var(--color-line-1)]`,children:Bl.map(n=>(0,D.jsx)(`button`,{type:`button`,onClick:()=>t(n.id),title:n.hint,className:`px-3 py-1.5 text-[11px] font-mono uppercase tracking-wider border-b-2 transition-colors `+(e===n.id?`border-[var(--color-brand)] text-[var(--color-fg-1)]`:`border-transparent text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)]`),children:n.label},n.id))}),(0,D.jsx)(ql,{tab:e}),(0,D.jsxs)(`section`,{"data-tutorial":`debug-pane`,className:`flex-1 min-h-0`,children:[e===`rca`&&(0,D.jsx)(Yl,{}),e===`timeline`&&(0,D.jsx)(eu,{}),e===`watch`&&(0,D.jsx)(cu,{}),e===`state`&&(0,D.jsx)(lu,{uri:`ssg://daemon/state`}),e===`metrics`&&(0,D.jsx)(lu,{uri:`ssg://daemon/metrics`})]})]})}var Ul=`ssg.debug.intro.dismissed`;function Wl(){let[e,t]=(0,_.useState)(()=>{if(typeof window>`u`)return!1;try{return window.localStorage.getItem(Ul)===`1`}catch{return!1}});return e?(0,D.jsx)(`div`,{className:`flex justify-end`,children:(0,D.jsx)(`button`,{type:`button`,onClick:()=>{t(!1);try{window.localStorage.removeItem(Ul)}catch{}},className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)]`,children:`what is this?`})}):(0,D.jsx)(`aside`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-4 space-y-3`,children:(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,D.jsxs)(`div`,{className:`space-y-3 min-w-0 flex-1`,children:[(0,D.jsx)(`p`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)]`,children:`who this page is for`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-2)] leading-relaxed`,children:`SSG sits between your AI coding agent (Claude Code, Cursor, Copilot, …) and your filesystem/shell, deciding which tool calls to allow, block, or warn on. This page is the window into those decisions — useful any time SSG's behavior surprises you.`}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)] mb-1.5`,children:`what you'd use it for`}),(0,D.jsx)(`table`,{className:`text-[12px] text-[var(--color-fg-3)] w-full border-separate border-spacing-y-1`,children:(0,D.jsxs)(`tbody`,{children:[(0,D.jsx)(Gl,{question:`Why did SSG block my agent from running this command?`,tab:`rca`,how:`open RCA — or find the trace in Timeline and read the deciding rule`}),(0,D.jsx)(Gl,{question:`I just wrote a rule. Did it actually fire?`,tab:`timeline`,how:`trigger the tool call, find your trace, look for your rule_id in a match-stage bar`}),(0,D.jsx)(Gl,{question:`Are my rules even loaded? Did a syntax error skip one?`,tab:`state`,how:`check the rules_loaded count — or open Watch and resolve ssg://rules/list`}),(0,D.jsx)(Gl,{question:`My agent feels slow when SSG is on — is SSG the cause?`,tab:`metrics`,how:`look at per-stage latency; the hot stage tells you whether parse, match, native FFI, or audit is the culprit`}),(0,D.jsx)(Gl,{question:`Something errored and I want a one-line diagnosis before reading logs`,tab:`rca`,how:`the latest RCA pack ranks hypotheses by confidence and suggests next actions`})]})})]}),(0,D.jsxs)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] leading-relaxed`,children:[(0,D.jsx)(`span`,{className:`font-mono uppercase tracking-wider`,children:`heads up ·`}),` `,`The Timeline (every frame of every eval) is opt-in because it adds overhead. Restart the daemon with`,` `,(0,D.jsx)(`code`,{className:`text-amber-300 font-mono`,children:`SSG_DEBUG_ENABLED=1 ./ssg daemon`}),` `,`to turn it on. RCA, State, and Metrics work without it.`]})]}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>{t(!0);try{window.localStorage.setItem(Ul,`1`)}catch{}},className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)] shrink-0`,title:`Hide this panel`,children:`hide`})]})})}function Gl({question:e,tab:t,how:n}){return(0,D.jsxs)(`tr`,{children:[(0,D.jsx)(`td`,{className:`align-top pr-3 text-[12px] text-[var(--color-fg-2)] w-[55%]`,children:e}),(0,D.jsx)(`td`,{className:`align-top pr-3 w-[80px]`,children:(0,D.jsx)(`span`,{className:`chip text-[10px] uppercase tracking-wider text-sky-300 border-sky-500/30`,children:t})}),(0,D.jsx)(`td`,{className:`align-top text-[11px] text-[var(--color-fg-4)] leading-snug`,children:n})]})}function Kl(){let{data:e}=H(`/api/json/debug?uri=ssg%3A%2F%2Fdaemon%2Fstate`,[]);return e?.data?.debug_enabled===!1?(0,D.jsxs)(`aside`,{className:`rounded-sm border border-amber-500/40 bg-amber-500/5 p-3 text-[12px] text-amber-200 space-y-1`,children:[(0,D.jsx)(`p`,{className:`text-[11px] font-mono uppercase tracking-wider text-amber-300`,children:`timeline disabled · frame collection is off`}),(0,D.jsx)(`p`,{className:`text-[12px] leading-snug`,children:`The daemon is running but not capturing per-stage eval frames — so the Timeline tab will stay empty no matter how many tool calls fire. RCA, State, and Metrics still work.`}),(0,D.jsxs)(`p`,{className:`text-[12px] leading-snug`,children:[`To turn frame capture on, restart with`,` `,(0,D.jsx)(`code`,{className:`text-amber-100 font-mono bg-amber-900/30 px-1.5 py-0.5 rounded-sm`,children:`SSG_DEBUG_ENABLED=1 ./ssg daemon`}),`. It's opt-in because collecting every frame adds overhead on the hot path.`]})]}):null}function ql({tab:e}){let t=Vl[e];return(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] px-3 py-2 space-y-1`,children:[(0,D.jsx)(`p`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)]`,children:t.title}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-2)] leading-snug`,children:t.body}),(0,D.jsxs)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] leading-snug`,children:[(0,D.jsx)(`span`,{className:`font-mono uppercase tracking-wider`,children:`use when ·`}),` `,t.useWhen]})]})}function Jl(){let e=zt([`debug-frame`])[`debug-frame`]??0,{data:t}=H(`/api/json/debug?uri=ssg%3A%2F%2Fdaemon%2Fstate`,[e]),n=t?.data?.debug_enabled;return n===!1?(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-amber-300`,title:`Frame collection is OFF. Restart the daemon with SSG_DEBUG_ENABLED=1 to capture frames.`,children:[(0,D.jsx)(`span`,{className:`inline-block w-1.5 h-1.5 rounded-sm bg-amber-400`}),`debug off`]}):n===void 0?(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-4)]`,children:[(0,D.jsx)(`span`,{className:`inline-block w-1.5 h-1.5 rounded-sm bg-[var(--color-fg-4)]`}),`connecting…`]}):(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-emerald-300`,title:`Debug collection is on. ${e} debug-frame bursts received this session.`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft`}),`live · `,e]})}function Yl(){let e=zt([`debug-frame`,`activity-updated`]),{data:t,loading:n,error:r,refetch:i}=H(`/api/json/debug?uri=ssg%3A%2F%2Frca%2Fcurrent`,[e[`debug-frame`],e[`activity-updated`]]),a=t?.data?.pack??null;return(0,D.jsxs)(`div`,{className:`grid grid-cols-1 xl:grid-cols-[1fr_340px] gap-4`,children:[(0,D.jsxs)(`article`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-4 space-y-3`,children:[n&&!t&&(0,D.jsx)(`p`,{className:`text-sm text-[var(--color-fg-4)]`,children:`loading RCA pack…`}),r&&(0,D.jsxs)(`p`,{className:`text-sm text-rose-300`,children:[`rca fetch error: `,r]}),!n&&!a&&(0,D.jsxs)(`div`,{className:`text-sm text-[var(--color-fg-3)] space-y-2`,children:[(0,D.jsx)(`p`,{className:`font-mono`,children:`no current RCA pack`}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:`Packs are composed automatically when an eval errors, an ssqa finding arrives, or a daemon-level error fires. Nothing to diagnose yet — you're green.`})]}),a&&(0,D.jsx)(Zl,{pack:a})]}),(0,D.jsxs)(`aside`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 text-[11px] font-mono text-[var(--color-fg-4)] space-y-2`,children:[(0,D.jsx)(`p`,{className:`uppercase tracking-wider text-[var(--color-fg-2)]`,children:`how claude sees this`}),(0,D.jsxs)(`pre`,{className:`text-[10px] whitespace-pre-wrap leading-snug`,children:[`ssg debug rca --current --json`,`
|
|
13
13
|
`,`# or via MCP:`,`
|
|
14
|
-
`,`ssg_debug_rca(`,`{`,`auto_current:true`,`}`,`)`]}),(0,D.jsx)(`button`,{type:`button`,onClick:i,className:`w-full mt-2 px-2 py-1 border border-[var(--color-line-1)] rounded-sm hover:bg-[var(--color-surface-2)]`,children:`refresh`}),t?.snapshot_hash&&(0,D.jsxs)(`p`,{className:`text-[10px] opacity-60`,children:[`hash `,t.snapshot_hash.slice(0,12),`…`]})]})]})}function Xl(e){return e===`critical`?`text-rose-400 border-rose-500/40`:e===`high`?`text-amber-300 border-amber-500/40`:e===`medium`?`text-sky-300 border-sky-500/40`:`text-[var(--color-fg-3)] border-[var(--color-line-1)]`}function Zl({pack:e}){return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`header`,{className:`flex items-start justify-between gap-4`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`p`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)]`,children:[`rca pack · `,new Date(e.ts_ms).toLocaleTimeString()]}),(0,D.jsx)(`h2`,{className:`text-[15px] font-medium text-[var(--color-fg-1)] mt-1`,children:e.summary}),e.trace_id&&(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] mt-1`,children:[`trace_id · `,e.trace_id]})]}),(0,D.jsx)(`span`,{className:`chip uppercase text-[10px] tracking-wider `+Xl(e.severity),children:e.severity})]}),e.hypothesis&&e.hypothesis.length>0&&(0,D.jsxs)(`section`,{children:[(0,D.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`hypothesis`}),(0,D.jsx)(`ol`,{className:`space-y-2`,children:e.hypothesis.map((e,t)=>(0,D.jsxs)(`li`,{className:`p-2 rounded-sm bg-[var(--color-surface-2)] border border-[var(--color-line-1)]`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,D.jsx)(`p`,{className:`text-[13px] text-[var(--color-fg-1)]`,children:e.cause}),(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:[`conf `,(e.confidence*100).toFixed(0),`%`]})]}),e.evidence.length>0&&(0,D.jsx)(`ul`,{className:`mt-1 pl-3 text-[11px] text-[var(--color-fg-3)] list-disc list-inside space-y-0.5`,children:e.evidence.map((e,t)=>(0,D.jsx)(`li`,{children:e},t))})]},t))})]}),e.suggested_next_actions&&e.suggested_next_actions.length>0&&(0,D.jsxs)(`section`,{children:[(0,D.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`suggested next actions`}),(0,D.jsx)(`ul`,{className:`space-y-1 text-[13px] text-[var(--color-fg-2)]`,children:e.suggested_next_actions.map((e,t)=>(0,D.jsxs)(`li`,{className:`font-mono text-[12px]`,children:[`→ `,e]},t))})]}),e.state_snapshot&&e.state_snapshot.length>0&&(0,D.jsxs)(`section`,{children:[(0,D.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`expand`}),(0,D.jsx)(`ul`,{className:`space-y-1 text-[11px] font-mono`,children:e.state_snapshot.map(e=>(0,D.jsxs)(`li`,{className:`text-[var(--color-fg-3)]`,children:[(0,D.jsx)(`code`,{className:`text-sky-300`,children:e.uri}),(0,D.jsxs)(`span`,{className:`opacity-50 ml-2`,children:[e.hash.slice(0,10),`…`]})]},e.uri))})]})]})}var Ql=[`hook-ingress`,`parse`,`match`,`ffi-call`,`decide`,`audit`,`respond`],$l={"hook-ingress":`#6ea8ff`,parse:`#a78bfa`,match:`#60d394`,"ffi-call":`#f59e0b`,decide:`#f472b6`,audit:`#94a3b8`,respond:`#22d3ee`};function eu(){let{data:e,loading:t,error:n}=H(`/api/json/debug?uri=ssg%3A%2F%2Fframes%2Frecent%3Flimit%3D1024`,[zt([`debug-frame`])[`debug-frame`]]),r=e?.data?.frames??[],i=e?.data?.dropped??0,[a,o]=(0,_.useState)(null);return(0,D.jsxs)(`div`,{className:`grid grid-cols-1 xl:grid-cols-[1fr_320px] gap-4`,children:[(0,D.jsxs)(`article`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsxs)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:[`frames · `,r.length,i>0&&(0,D.jsxs)(`span`,{className:`ml-2 text-amber-300`,children:[`dropped · `,i]})]}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:`ssg://frames/recent`})]}),n&&(0,D.jsxs)(`p`,{className:`text-sm text-rose-300`,children:[`timeline fetch error: `,n]}),t&&r.length===0?(0,D.jsx)(`p`,{className:`text-sm text-[var(--color-fg-4)]`,children:`loading…`}):r.length===0?(0,D.jsx)(tu,{}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(ru,{frames:r,onSelect:o}),(0,D.jsx)(nu,{})]})]}),(0,D.jsxs)(`aside`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2 text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsx)(`p`,{className:`uppercase tracking-wider text-[var(--color-fg-2)]`,children:`frame inspector`}),a?(0,D.jsx)(iu,{frame:a}):(0,D.jsx)(`p`,{className:`opacity-60`,children:`click a bar to inspect`})]})]})}function tu(){return(0,D.jsxs)(`div`,{className:`text-[12px] text-[var(--color-fg-3)] space-y-2 py-4`,children:[(0,D.jsx)(`p`,{className:`text-[13px] text-[var(--color-fg-2)]`,children:`no frames captured yet`}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] leading-relaxed`,children:`Frame collection is opt-in so it adds zero cost when off. Restart the daemon with the env var below, then any tool call (Bash, Read, Edit, MCP) will stream frames into this view in real time:`}),(0,D.jsx)(`pre`,{className:`text-[11px] text-amber-300 font-mono bg-[var(--color-surface-2)] border border-[var(--color-line-1)] rounded-sm px-2 py-1.5`,children:`SSG_DEBUG_ENABLED=1 ./ssg daemon`}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:`Each bar = one stage of one eval. Click a bar to inspect the frame — rule that matched, duration, error type, input preview.`})]})}function nu(){return(0,D.jsx)(`div`,{className:`flex flex-wrap gap-3 text-[10px] font-mono text-[var(--color-fg-4)]`,children:Ql.map(e=>(0,D.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,D.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-sm`,style:{background:$l[e]}}),e]},e))})}function ru({frames:e,onSelect:t}){let n=(0,_.useRef)(null),r=(0,_.useRef)([]),[i,a]=(0,_.useState)(-1),{rows:o,tMin:s,tMax:c}=(0,_.useMemo)(()=>{let t=new Map;for(let n of e){let e=t.get(n.trace_id)??[];e.push(n),t.set(n.trace_id,e)}let n=Array.from(t.entries()).map(([e,t])=>({trace_id:e,frames:t.slice().sort((e,t)=>ou(e.ts_start_ns,t.ts_start_ns))}));n.sort((e,t)=>ou(e.frames[0].ts_start_ns,t.frames[0].ts_start_ns));let r=null,i=null;for(let t of e){let e=BigInt(t.ts_start_ns),n=BigInt(t.ts_end_ns);(r===null||e<r)&&(r=e),(i===null||n>i)&&(i=n)}return{rows:n,tMin:r??0n,tMax:i??1n}},[e]);(0,_.useEffect)(()=>{let e=n.current;if(!e)return;let t=window.devicePixelRatio||1,a=e.clientWidth,l=Math.max(120,o.length*22+24);e.width=a*t,e.height=l*t,e.style.height=`${l}px`;let u=e.getContext(`2d`);if(!u)return;u.setTransform(t,0,0,t,0,0),u.clearRect(0,0,a,l),u.strokeStyle=`rgba(255,255,255,0.04)`,u.lineWidth=1;for(let e=1;e<4;e++){let t=e*a/4;u.beginPath(),u.moveTo(t,0),u.lineTo(t,l),u.stroke()}let d=c>s?Number(c-s):1,f=a-110-8;u.font=`10px ui-monospace, monospace`,u.textBaseline=`middle`;let p=[];if(o.forEach((e,t)=>{let n=8+t*22;u.fillStyle=`rgba(255,255,255,0.55)`,u.fillText(e.trace_id.slice(0,10),6,n+18/2);for(let t of e.frames){let e=Number(BigInt(t.ts_start_ns)-s),r=Number(BigInt(t.ts_end_ns)-s),i=110+e/d*f,a=Math.max(2,(r-e)/d*f);u.fillStyle=$l[t.stage]??`#888`,u.globalAlpha=t.result===`error`?1:.82,u.fillRect(i,n,a,18),u.globalAlpha=1,t.result===`error`&&(u.strokeStyle=`#f43f5e`,u.lineWidth=1.5,u.strokeRect(i+.5,n+.5,a-1,17)),p.push({x:i,y:n,w:a,h:18,frame:t})}}),r.current=p,i>=0&&i<p.length){let e=p[i];u.strokeStyle=`#fff`,u.lineWidth=1.5,u.strokeRect(e.x+.5,e.y+.5,e.w-1,e.h-1)}},[o,s,c,i]);function l(e){let t=n.current;if(!t)return-1;let i=t.getBoundingClientRect(),a=e.clientX-i.left,o=e.clientY-i.top;for(let e=r.current.length-1;e>=0;e--){let t=r.current[e];if(a>=t.x&&a<=t.x+t.w&&o>=t.y&&o<=t.y+t.h)return e}return-1}return(0,D.jsx)(`canvas`,{ref:n,className:`w-full block cursor-crosshair`,onMouseMove:e=>a(l(e)),onMouseLeave:()=>a(-1),onClick:e=>{let n=l(e);t(n>=0?r.current[n].frame:null)}})}function iu({frame:e}){let t=Number(BigInt(e.ts_end_ns)-BigInt(e.ts_start_ns)),n=t>=1e6?`${(t/1e6).toFixed(2)}ms`:t>=1e3?`${(t/1e3).toFixed(1)}µs`:`${t}ns`;return(0,D.jsxs)(`dl`,{className:`space-y-1`,children:[(0,D.jsxs)(au,{k:`stage`,children:[(0,D.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-sm mr-1 align-middle`,style:{background:$l[e.stage]??`#888`}}),e.stage]}),(0,D.jsx)(au,{k:`tool`,children:e.tool}),(0,D.jsx)(au,{k:`result`,children:(0,D.jsx)(`span`,{className:e.result===`error`?`text-rose-300`:e.result===`skip`?`text-[var(--color-fg-4)]`:`text-emerald-300`,children:e.result})}),(0,D.jsx)(au,{k:`dur`,children:n}),e.rule_id&&(0,D.jsx)(au,{k:`rule`,children:e.rule_id}),e.error&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(au,{k:`err.type`,children:(0,D.jsx)(`span`,{className:`text-rose-300`,children:e.error.type})}),(0,D.jsx)(au,{k:`err.msg`,children:(0,D.jsx)(`span`,{className:`text-rose-200`,children:e.error.message})})]}),e.input_preview&&(0,D.jsx)(au,{k:`input`,children:(0,D.jsx)(`code`,{className:`text-[10px] break-all`,children:e.input_preview})}),(0,D.jsx)(au,{k:`trace`,children:(0,D.jsx)(`code`,{className:`text-[10px]`,children:e.trace_id})}),(0,D.jsx)(au,{k:`frame`,children:(0,D.jsx)(`code`,{className:`text-[10px]`,children:e.frame_id})})]})}function au({k:e,children:t}){return(0,D.jsxs)(`div`,{className:`flex gap-2 text-[11px] leading-tight`,children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)] w-16 shrink-0 uppercase tracking-wider`,children:e}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)] break-all min-w-0`,children:t})]})}function ou(e,t){let n=BigInt(e),r=BigInt(t);return n<r?-1:+(n>r)}var su=[`ssg://daemon/state`,`ssg://daemon/metrics`,`ssg://audit/recent?limit=10`,`ssg://frames/recent?limit=32`,`ssg://rules/list`,`ssg://rca/current`,`ssg://native/stats`];function cu(){let[e,t]=(0,_.useState)(`ssg://daemon/state`),[n,r]=(0,_.useState)(`ssg://daemon/state`);return(0,D.jsxs)(`div`,{className:`space-y-3`,children:[(0,D.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:su.map(e=>(0,D.jsx)(`button`,{type:`button`,onClick:()=>{t(e),r(e)},className:`chip text-[10px] `+(n===e?`border-[var(--color-brand)] text-[var(--color-fg-1)]`:`text-[var(--color-fg-3)]`),children:e},e))}),(0,D.jsxs)(`form`,{className:`flex items-center gap-2`,onSubmit:t=>{t.preventDefault(),r(e)},children:[(0,D.jsx)(`input`,{value:e,onChange:e=>t(e.target.value),placeholder:`ssg://source/path?k=v`,className:`flex-1 px-3 py-1.5 text-[12px] font-mono rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] text-[var(--color-fg-1)]`}),(0,D.jsx)(`button`,{type:`submit`,className:`px-3 py-1.5 text-[11px] font-mono uppercase tracking-wider border border-[var(--color-line-1)] rounded-sm hover:bg-[var(--color-surface-2)]`,children:`resolve`})]}),(0,D.jsx)(lu,{uri:n})]})}function lu({uri:e}){let t=zt([`debug-frame`,`activity-updated`,`counters-updated`]),{data:n,loading:r,error:i,refetch:a}=H(`/api/json/debug?uri=${encodeURIComponent(e)}`,[t[`debug-frame`],t[`activity-updated`],t[`counters-updated`],e]),o=n?JSON.stringify(n.data,null,2):``;return(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:e}),n?.snapshot_hash&&(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:[`hash `,n.snapshot_hash.slice(0,10),`…`]}),n?.stale&&(0,D.jsxs)(`span`,{className:`chip text-amber-300 border-amber-500/40 text-[10px]`,children:[`stale `,n.age_ms?`${Math.round(n.age_ms/1e3)}s`:``]})]}),(0,D.jsx)(`button`,{type:`button`,onClick:a,className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`,children:`refresh`})]}),r&&!n&&(0,D.jsx)(`p`,{className:`text-sm text-[var(--color-fg-4)]`,children:`resolving…`}),i&&(0,D.jsx)(`p`,{className:`text-sm text-rose-300`,children:i}),o&&(0,D.jsx)(`pre`,{className:`text-[11px] leading-snug font-mono text-[var(--color-fg-2)] overflow-auto max-h-[60vh] whitespace-pre-wrap break-all`,children:o})]})}var uu=200;function du(e){let t=Date.now()-e;return t<2e3?`now`:t<6e4?`${Math.floor(t/1e3)}s ago`:t<36e5?`${Math.floor(t/6e4)}m ago`:`${Math.floor(t/36e5)}h ago`}function fu(e){let t=e/1e6;return t<1e3?`${Math.round(t)}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:`${Math.floor(t/6e4)}m${Math.floor(t%6e4/1e3)}s`}function pu(e){let{bursts:t,selectedId:n,onSelect:r}=e,i=(0,_.useMemo)(()=>{let e=new Map;for(let n of t){if(mi(n.tool))continue;let t=Vi(n),r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}let n=Array.from(e.entries());return n.sort((e,t)=>{let n=e[1][e[1].length-1]?.ts_ms??0;return(t[1][t[1].length-1]?.ts_ms??0)-n}),n},[t]);return t.length===0?(0,D.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center text-center px-4`,children:[(0,D.jsx)(`p`,{className:`overline mb-2 text-[var(--color-fg-3)]`,children:`feed · idle`}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] max-w-[260px]`,children:[`Each entry is one tool call your AI agent made.`,(0,D.jsx)(`br`,{}),`Color = the ssg rule decision.`]})]}):(0,D.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-3 py-3 space-y-5`,children:i.map(([e,t])=>{let i=e.indexOf(`:`),a=i>=0?e.slice(0,i):e,o=t[t.length-1],s=o?Hi[o.decision]??`#6b7280`:`#6b7280`,c=t.slice(-uu).reverse();return(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mb-2 pb-1 border-b border-[var(--color-line-1)] text-[11px]`,children:[(0,D.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0`,style:{background:s}}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] font-medium`,children:pi(a)}),(0,D.jsxs)(`span`,{className:`ml-auto text-[10px] text-[var(--color-fg-4)]`,children:[t.length,` `,t.length===1?`action`:`actions`]})]}),(0,D.jsxs)(`div`,{className:`relative pl-4`,children:[(0,D.jsx)(`div`,{className:`absolute left-[7px] top-0 bottom-0 w-px`,style:{background:`${s}33`}}),(0,D.jsx)(`div`,{className:`space-y-1.5`,children:c.map(e=>{let t=e.audit_id??`${e.ts_ms}:${e.tool}`,i=t===n,a=Hi[e.decision]??`#6b7280`,o=e.input_tokens??0,s=e.output_tokens??0,c=o>0||s>0;return(0,D.jsxs)(`div`,{className:`relative`,children:[(0,D.jsx)(`span`,{className:`absolute -left-[9px] top-1/2 -translate-y-1/2 w-[6px] h-[6px] rounded-full border border-[var(--color-surface-1)]`,style:{background:a}}),(0,D.jsxs)(`button`,{type:`button`,onClick:()=>r(i?null:t),className:`w-full text-left flex items-center gap-2 px-2.5 py-1.5 rounded-sm border text-[11.5px] transition-colors ${i?`border-sky-500/50 bg-sky-500/5 text-[var(--color-fg-1)]`:`border-[var(--color-line-1)] bg-[var(--color-surface-1)] text-[var(--color-fg-2)] hover:bg-white/3 hover:border-[var(--color-line-2)]`}`,children:[(0,D.jsx)(`span`,{className:`flex-1 font-medium truncate text-[var(--color-fg-1)]`,title:e.tool,children:fi(e.tool)}),(0,D.jsxs)(`span`,{className:`shrink-0 flex items-center gap-2 text-[9px] text-[var(--color-fg-4)]`,children:[c&&(0,D.jsxs)(`span`,{className:`font-mono`,title:`Input: ${o} tokens · Output: ${s} tokens`,children:[`↓`,Yi(o),` ↑`,Yi(s)]}),e.duration_ns>0&&(0,D.jsx)(`span`,{children:fu(e.duration_ns)}),(0,D.jsx)(`span`,{className:`px-1.5 py-px rounded text-[9px] font-semibold tracking-wide`,style:{color:a,background:`${a}22`},children:e.decision===`allow`?`Allowed`:e.decision===`block`?`Blocked`:e.decision===`ask`?`Held`:e.decision===`force`?`Forced`:e.decision===`log`?`Logged`:e.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:du(e.ts_ms)})]})]})]},t)})})]})]},e)})})}function mu(e){let{sessionKey:t,entries:n,loading:r,error:i,playingIndex:a}=e,o=(0,_.useRef)(null),s=(0,_.useRef)(new Map);(0,_.useEffect)(()=>{if(a<0)return;let e=s.current.get(a);e&&e.scrollIntoView({behavior:`smooth`,block:`nearest`})},[a]);let c=e=>t=>{t?s.current.set(e,t):s.current.delete(e)};return(0,D.jsxs)(`div`,{className:`flex flex-col h-full min-h-0 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] overflow-hidden`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between px-3 py-1.5 border-b border-[var(--color-line-1)] bg-black/30 shrink-0`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono`,children:[(0,D.jsx)(`span`,{className:`overline text-[var(--color-fg-3)]`,children:`audit log`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] truncate`,title:t,children:t})]}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:r?`loading…`:i?`error`:`${n.length} event${n.length===1?``:`s`}`})]}),(0,D.jsxs)(`div`,{ref:o,className:`flex-1 min-h-0 overflow-y-auto divide-y divide-[var(--color-line-1)]/40`,children:[i&&(0,D.jsx)(`div`,{className:`px-3 py-4 text-[11px] font-mono text-rose-300`,children:i}),!i&&!r&&n.length===0&&(0,D.jsx)(`div`,{className:`px-3 py-4 text-[11px] font-mono text-[var(--color-fg-4)]`,children:`No audit entries for this session yet.`}),n.map((e,t)=>{let n=Hi[e.decision]??`#6b7280`,r=t===a,i=e.duration_ns==null?null:e.duration_ns/1e6;return(0,D.jsxs)(`div`,{ref:c(t),className:`relative px-3 py-2 transition-colors ${r?`bg-white/[0.04] ring-1 ring-inset ring-sky-400/40`:`hover:bg-white/[0.02]`}`,children:[(0,D.jsx)(`span`,{"aria-hidden":!0,className:`absolute left-0 top-0 bottom-0 w-1`,style:{background:n}}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[11px] font-mono`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider shrink-0`,style:{color:n},children:e.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] truncate`,children:e.tool})]}),(0,D.jsx)(`span`,{className:`shrink-0 text-[10px] text-[var(--color-fg-4)] tabular-nums`,children:hu(e.ts_ms)})]}),(e.rule_id||i!=null)&&(0,D.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[10px] font-mono text-[var(--color-fg-4)]`,children:[e.rule_id&&(0,D.jsxs)(`span`,{className:`truncate`,title:e.rule_id,children:[`rule · `,e.rule_id]}),i!=null&&(0,D.jsx)(`span`,{className:`tabular-nums shrink-0`,children:i<1?`${(i*1e3).toFixed(0)}µs`:`${i.toFixed(2)}ms`})]}),e.rule_message&&(0,D.jsx)(`div`,{className:`mt-1 text-[10px] font-mono text-[var(--color-fg-3)] break-words`,children:e.rule_message}),e.input_preview&&(0,D.jsx)(`pre`,{className:`mt-1 text-[10px] text-[var(--color-fg-3)] whitespace-pre-wrap break-all bg-black/30 rounded-sm px-2 py-1 max-h-24 overflow-y-auto`,children:e.input_preview})]},e.id)})]})]})}function hu(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}var gu=[100,500,1e3,5e3,1e4,1e5];function _u(e){return e>=1e5||e>=1e3?`${e/1e3|0}k`:String(e)}function vu(e){let t=Math.floor(e/100),n=Math.floor(t/600),r=Math.floor(t%600/10),i=t%10;return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}.${i}`}function yu(e){let t=Math.floor(e/100);return`${Math.floor(t/10)}.${t%10}s`}function bu({className:e,onMilestone:t,onRecord:n}){let r=(0,_.useRef)(null),i=(0,_.useRef)(null),[a,o]=(0,_.useState)(0),[s,c]=(0,_.useState)(0),[l,u]=(0,_.useState)(0),[d,f]=(0,_.useState)(0),[p,m]=(0,_.useState)(0),[h,g]=(0,_.useState)(``),[v,y]=(0,_.useState)(!1),[b,x]=(0,_.useState)(!1),S=Ri(),C=Bi(),w=zi(),T=(0,_.useRef)(null),E=(0,_.useRef)(0),O=(0,_.useRef)(0),k=(0,_.useRef)(0),ee=(0,_.useRef)(0),A=(0,_.useRef)(new Set),j=(0,_.useRef)(performance.now());return(0,_.useEffect)(()=>{let e=performance.now();if(sr()){let t=setInterval(()=>{let t=performance.now();r.current&&(r.current.textContent=vu(t-e)),i.current&&(i.current.textContent=yu(t-j.current))},1e3);return()=>clearInterval(t)}let[t]=Ga(()=>{let t=performance.now();r.current&&(r.current.textContent=vu(t-e)),i.current&&(i.current.textContent=yu(t-j.current))});return t},[]),(0,_.useEffect)(()=>{for(let e of w)e.rule_id&&A.current.add(e.rule_id);m(A.current.size)},[]),(0,_.useEffect)(()=>{let e=()=>{let e=Date.now(),t=w.filter(t=>e-t.ts_ms<=6e4),n=new Set(t.map(e=>`${e.client}:${e.agent_id??`solo`}`)).size;f(n)};e();let t=setInterval(e,1e3);return()=>clearInterval(t)},[w]),(0,_.useEffect)(()=>{if(T.current===null){T.current=C,E.current=C;return}if(C<=E.current)return;let e=C-E.current;E.current=C,u(n=>{let r=n+e,i=gu.find(e=>e>ee.current&&r>=e);return i&&(ee.current=i,g(_u(i)),x(!0),t?.(),setTimeout(()=>{g(``),x(!1)},700)),r}),S?.rule_id&&A.current.add(S.rule_id),m(A.current.size),S&&(S.decision===`block`?(O.current=0,o(0),j.current=performance.now()):(O.current+=e,O.current>k.current&&(k.current=O.current,c(k.current),y(!0),n?.(),setTimeout(()=>y(!1),450)),o(O.current)))},[C,S,t,n]),(0,D.jsxs)(`div`,{className:W(`pointer-events-none select-none`,`flex flex-col gap-2 p-3 rounded-md`,`bg-[var(--color-bg-2,#0c0d12)]/95`,`border border-[var(--color-border-1,#1c1f26)]`,`shadow-lg shadow-black/40`,`min-w-[180px] font-mono text-[11px]`,`text-[var(--color-fg-2,#9aa1ad)]`,b&&`milestone-ring`,e),"aria-label":`Live engagement counters`,children:[(0,D.jsx)(xu,{label:`uptime`,children:(0,D.jsx)(`span`,{ref:r,className:`tabular-nums text-[var(--color-fg-0,#e6e8ed)] text-[15px] tracking-tight`,children:`00:00.0`})}),(0,D.jsx)(xu,{label:`evals`,children:(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,D.jsx)(Rs,{value:l,className:`text-[var(--color-fg-0,#e6e8ed)] text-[15px]`}),h&&(0,D.jsxs)(`span`,{className:`text-[10px] text-emerald-400 uppercase tracking-wide`,children:[`+`,h]})]})}),(0,D.jsx)(xu,{label:`since block`,children:(0,D.jsx)(`span`,{ref:i,className:`tabular-nums text-emerald-300 text-[15px]`,children:`0.0s`})}),(0,D.jsx)(xu,{label:`streak / best`,children:(0,D.jsxs)(`span`,{className:W(`tabular-nums text-[15px]`,v?`record-beat`:`text-[var(--color-fg-0,#e6e8ed)]`),children:[(0,D.jsx)(Rs,{value:a,curve:`spring`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4,#5a6071)] mx-1`,children:`/`}),(0,D.jsx)(Rs,{value:s})]})}),(0,D.jsx)(xu,{label:`agents`,children:(0,D.jsx)(Rs,{value:d,className:`text-[var(--color-fg-0,#e6e8ed)] text-[15px]`})}),(0,D.jsx)(xu,{label:`rules`,children:(0,D.jsx)(Rs,{value:p,className:`text-[var(--color-fg-0,#e6e8ed)] text-[15px]`})})]})}function xu({label:e,children:t}){return(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider text-[10px] text-[var(--color-fg-4,#5a6071)]`,children:e}),t]})}function Su(e){let t=new Map;for(let n of e){let e=`${n.client}:${n.agent_id??`solo`}`,r=t.get(e);r?(r.count+=1,n.ts_ms>r.newest_ts_ms&&(r.newest_ts_ms=n.ts_ms)):t.set(e,{client:n.client,agent_id:n.agent_id??`solo`,count:1,newest_ts_ms:n.ts_ms})}return Array.from(t.values()).sort((e,t)=>t.newest_ts_ms===e.newest_ts_ms?t.count-e.count:t.newest_ts_ms-e.newest_ts_ms)}function Cu(e){let{bursts:t,allBursts:n}=e,r=n??t,{toolCounts:i,decisionCounts:a,ruleCounts:o,unmatchedCount:s}=(0,_.useMemo)(()=>{let e=new Map,n=new Map,r=new Map,i=0;for(let a of t)if(e.set(a.tool,(e.get(a.tool)??0)+1),n.set(a.decision,(n.get(a.decision)??0)+1),a.rule_id){let e=r.get(a.rule_id);e?(e.count+=1,e.decisions.add(a.decision)):r.set(a.rule_id,{count:1,decisions:new Set([a.decision])})}else i+=1;return{toolCounts:Array.from(e.entries()).sort((e,t)=>t[1]-e[1]),decisionCounts:Array.from(n.entries()),ruleCounts:Array.from(r.entries()).map(([e,t])=>({id:e,count:t.count,decisions:t.decisions})).sort((e,t)=>t.count-e.count),unmatchedCount:i}},[t]),c=(0,_.useMemo)(()=>Su(r),[r]),l=i[0]?.[1]??0,u=c[0]?.count??0,d=o[0]?.count??0,f=e=>{for(let t of[`block`,`ask`,`force`,`log`,`allow`,`shadow`])if(e.has(t))return Hi[t];return`#6b7280`};return(0,D.jsxs)(`div`,{className:`flex flex-col gap-3 text-[11px] font-mono`,children:[(0,D.jsx)(`div`,{className:`rounded-sm border border-[var(--color-line-0)] bg-[var(--color-surface-0)] p-2 text-[10px] text-[var(--color-fg-3)] leading-relaxed`,children:`Each dot is one tool call by an AI agent. Color encodes the ssg rule decision; lines link calls from the same agent in time order.`}),(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:[`rules · `,o.length,` matched`,s>0&&(0,D.jsxs)(`span`,{className:`ml-2 text-[var(--color-fg-4)] normal-case tracking-normal`,children:[s,` unmatched`]})]}),o.length===0?(0,D.jsx)(`p`,{className:`text-[var(--color-fg-4)]`,children:`no rules matched in window`}):(0,D.jsx)(`ul`,{className:`space-y-0.5`,children:o.slice(0,6).map(e=>{let t=d>0?e.count/d*100:0,n=f(e.decisions);return(0,D.jsxs)(`li`,{className:`grid grid-cols-[1fr_auto] items-center gap-2`,title:`${e.id} — decisions: ${Array.from(e.decisions).join(`, `)}`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0`,style:{background:n},"aria-hidden":!0}),(0,D.jsx)(`a`,{href:`/rules#${encodeURIComponent(e.id)}`,className:`truncate text-[var(--color-fg-2)] hover:text-[var(--color-fg-1)]`,children:e.id}),(0,D.jsx)(`div`,{className:`flex-1 h-1 bg-[var(--color-surface-1)] rounded-sm overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full`,style:{background:n,width:`${t}%`,opacity:.6}})})]}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-4)]`,children:e.count})]},e.id)})})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:`decisions`}),(0,D.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:[`allow`,`block`,`ask`,`log`,`force`,`shadow`].map(e=>{let t=a.find(([t])=>t===e)?.[1]??0;return(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,D.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0`,style:{background:Hi[e]},"aria-hidden":!0}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] uppercase tracking-wider`,children:e}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] tabular-nums`,children:t})]},e)})})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:[`agents · `,c.length,` active`,n&&n!==t&&(0,D.jsx)(`span`,{className:`ml-2 text-[var(--color-fg-4)] normal-case tracking-normal`,children:`roster: today`})]}),c.length===0?(0,D.jsx)(`p`,{className:`text-[var(--color-fg-4)]`,children:`no agents in window`}):(0,D.jsx)(`ul`,{className:`space-y-0.5`,children:c.slice(0,8).map(e=>{let t=u>0?e.count/u*100:0,n=`${e.client}:${e.agent_id}`,r=Date.now()-e.newest_ts_ms,i=r<5e3;return(0,D.jsxs)(`li`,{className:`grid grid-cols-[1fr_auto] items-center gap-2`,title:`${n} — last eval ${Math.max(0,Math.round(r/1e3))}s ago`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[i?(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft shrink-0`,"aria-hidden":!0}):(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 bg-[var(--color-fg-4)]/40`,"aria-hidden":!0}),(0,D.jsxs)(`span`,{className:`truncate text-[var(--color-fg-2)]`,children:[e.client,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`:`,e.agent_id]})]}),(0,D.jsx)(`div`,{className:`flex-1 h-1 bg-[var(--color-surface-1)] rounded-sm overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full bg-violet-400/60`,style:{width:`${t}%`}})})]}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-4)]`,children:e.count})]},n)})})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:[`tools · `,t.length,` in window`]}),i.length===0?(0,D.jsx)(`p`,{className:`text-[var(--color-fg-4)]`,children:`no tool activity`}):(0,D.jsx)(`ul`,{className:`space-y-0.5`,children:i.slice(0,8).map(([e,t])=>{let n=l>0?t/l*100:0;return(0,D.jsxs)(`li`,{className:`grid grid-cols-[1fr_auto] items-center gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(`span`,{className:`truncate text-[var(--color-fg-2)]`,children:e}),(0,D.jsx)(`div`,{className:`flex-1 h-1 bg-[var(--color-surface-1)] rounded-sm overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full bg-sky-400/60`,style:{width:`${n}%`}})})]}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-4)]`,children:t})]},e)})})]})]})}var wu=320,Tu=8,Eu=12;function Du(e){let{burst:t,anchor:n,onClose:r}=e,i=(0,_.useRef)(null),[a,o]=(0,_.useState)({left:-9999,top:-9999});if((0,_.useEffect)(()=>{if(!t)return;let e=e=>{e.key===`Escape`&&r()},n=e=>{i.current&&!i.current.contains(e.target)&&r()};return document.addEventListener(`keydown`,e),document.addEventListener(`mousedown`,n),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`mousedown`,n)}},[t,r]),(0,_.useLayoutEffect)(()=>{if(!t||!n||!i.current)return;let e=i.current.getBoundingClientRect(),r=window.innerWidth,a=window.innerHeight,s=e.height>0?e.height:280,c=n.x+Eu+wu>r?n.x-Eu-wu:n.x+Eu,l=n.y+Eu+s>a?n.y-Eu-s:n.y+Eu;c=Math.min(Math.max(Tu,c),r-wu-Tu),l=Math.min(Math.max(Tu,l),a-s-Tu),o({left:c,top:l})},[t,n]),(0,_.useEffect)(()=>{o({left:-9999,top:-9999})},[]),!t||!n)return null;let s=Hi[t.decision]??`#6b7280`,c=t.duration_ns/1e6,l=Date.now()-t.ts_ms;return(0,D.jsxs)(`div`,{ref:i,className:`fixed z-50 flex flex-col gap-3 text-[12px] font-mono rounded-md border border-[var(--color-line-1)] bg-[var(--color-surface-1)] shadow-2xl p-4`,style:{left:a.left,top:a.top,width:wu,maxHeight:`80vh`,overflowY:`auto`},children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsx)(`span`,{className:`overline text-[var(--color-fg-3)]`,children:`node · inspect`}),(0,D.jsx)(`button`,{onClick:r,className:`text-[var(--color-fg-4)] hover:text-[var(--color-fg-1)] cursor-pointer`,title:`Close inspector`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`w-2 h-2 rounded-full`,style:{background:s},"aria-hidden":!0}),(0,D.jsx)(`span`,{className:`uppercase tracking-wider`,style:{color:s},children:t.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:t.tool})]}),(0,D.jsxs)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-[11px]`,children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`rule`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)] break-all`,children:t.rule_id??`—`}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`client`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:t.client}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`agent`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:t.agent_id?(0,D.jsx)(`span`,{className:`chip text-violet-300 border-violet-500/30`,children:t.agent_id}):(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`—`})}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`eval duration`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:c<1?`${(c*1e3).toFixed(0)}µs`:`${c.toFixed(2)}ms`}),t.complete_duration_ms!=null&&t.complete_duration_ms>0&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`tool duration`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:t.complete_duration_ms>=1e3?`${(t.complete_duration_ms/1e3).toFixed(2)}s`:`${t.complete_duration_ms.toFixed(0)}ms`})]}),t.message&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`reason`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)] break-words`,children:t.message})]}),(t.input_tokens!=null||t.output_tokens!=null)&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`tokens`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:Au(t.input_tokens,t.output_tokens)})]}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`age`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:Ou(l)}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`timestamp`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:new Date(t.ts_ms).toLocaleString()})]}),t.input_preview&&(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:`input`}),(0,D.jsx)(`pre`,{className:`bg-[var(--color-surface-0)] border border-[var(--color-line-0)] rounded-sm p-2 text-[10px] text-[var(--color-fg-2)] whitespace-pre-wrap break-all max-h-48 overflow-y-auto`,children:t.input_preview})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[t.audit_id&&(0,D.jsx)(`a`,{href:`/audit?id=${encodeURIComponent(t.audit_id)}`,className:`chip text-[var(--color-fg-3)] border-[var(--color-line-1)] hover:text-[var(--color-fg-1)]`,title:`Open full audit record`,children:`audit ↗`}),t.rule_id&&(0,D.jsx)(`a`,{href:`/rules#${encodeURIComponent(t.rule_id)}`,className:`chip text-[var(--color-fg-3)] border-[var(--color-line-1)] hover:text-[var(--color-fg-1)]`,title:`Jump to rule`,children:`rule ↗`})]})]})}function Ou(e){if(e<1500)return`just now`;let t=Math.floor(e/1e3);if(t<60)return`${t}s ago`;let n=Math.floor(t/60);return n<60?`${n}m${t%60}s ago`:`${Math.floor(n/60)}h${n%60}m ago`}function ku(e){return e<1e3?String(e):e<1e4?`${(e/1e3).toFixed(1)}K`:e<1e6?`${Math.round(e/1e3)}K`:`${(e/1e6).toFixed(1)}M`}function Au(e,t){let n=[];return e!=null&&n.push(`${ku(e)} in`),t!=null&&n.push(`${ku(t)} out`),n.length>0?n.join(` · `):`—`}var ju=900,Mu=180,Nu=320,Pu=800,Fu=4;function Iu({sessionKey:e}={}){let t=Ri(),n=Bi(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(`idle`),s=(0,_.useRef)([]),c=(0,_.useRef)(-1),l=(0,_.useRef)(0),u=(0,_.useRef)(null);if((0,_.useEffect)(()=>{if(!t||n===c.current||(c.current=n,t.decision!==`block`&&t.decision!==`force`)||e&&Vi(t)!==e)return;let u=Date.now(),d=s.current,f=d[0];if(f&&u-l.current<Pu){f.extra+=1,f.burst=t,f.seq=n,l.current=u;return}if(d.length>=Fu&&d.shift(),d.push({seq:n,burst:t,extra:0}),l.current=u,a===`idle`&&!r){let e=d.shift()??null;e&&(i(e),o(`in`))}},[n,t,e,a,r]),(0,_.useEffect)(()=>{if(a===`idle`)return;let e=null;return a===`in`?e=setTimeout(()=>o(`visible`),Mu):a===`visible`?e=setTimeout(()=>o(`out`),ju):a===`out`&&(e=setTimeout(()=>{let e=s.current.shift()??null;e?(i(e),o(`in`)):(i(null),o(`idle`))},Nu)),u.current=e,()=>{e&&clearTimeout(e)}},[a]),!r)return null;let{burst:d,extra:f}=r,p=Hi[d.decision]??`#ef4444`,m=sr(),h=+(a===`in`||a===`visible`),g=m||a===`in`||a===`visible`?0:-8,v=d.rule_id??`rule`,y=d.decision===`block`?`BLOCKED`:`FORCED`,b=f>0?`${d.tool} · +${f} more in this burst`:`${d.tool} · ${d.client}${d.agent_id?`:${d.agent_id}`:``}`;return(0,D.jsx)(`div`,{className:e?`pointer-events-none absolute top-2 left-1/2 z-30 select-none`:`pointer-events-none fixed top-20 left-1/2 z-40 select-none`,style:{transform:`translateX(-50%) translateY(${g}px) scale(1)`,opacity:h,transition:m?`opacity ${Mu}ms ease-out`:`opacity ${Mu}ms ease-out, transform ${Mu}ms cubic-bezier(0.34, 1.56, 0.64, 1)`},"aria-live":`polite`,"aria-atomic":`true`,children:(0,D.jsxs)(`div`,{className:`flex items-center gap-3 px-5 py-3 rounded-md border bg-black/95 shadow-2xl`,style:{borderColor:p},children:[(0,D.jsx)(`div`,{className:`w-2.5 h-2.5 rounded-full shrink-0`,style:{background:p,boxShadow:m?`none`:`0 0 16px ${p}`}}),(0,D.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`text-[11px] font-mono uppercase tracking-[0.18em]`,style:{color:p},children:[y,` BY SSG`]}),(0,D.jsx)(`div`,{className:`text-[14px] font-mono text-[var(--color-fg-1)] truncate max-w-[420px]`,children:v}),(0,D.jsx)(`div`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] truncate max-w-[420px]`,children:b})]})]})})}var Lu=(0,_.memo)(function(e){let{sessionKey:t,bursts:n,paused:r,selectedId:i,onSelect:a,burstSeq:o,isStale:s,isFadingOut:c,minHeight:l,pinned:u,minimized:d,isFullscreen:f,viewMode:p=`full`,thumbnail:m=!1,onPromote:h,activePanelCount:g=1,onTogglePin:v,onToggleMinimize:y,onToggleFullscreen:b,onClose:x,onFrameTime:S}=e,C=p===`broadcast`,w=!m&&(p===`stream`||p===`broadcast`||f)?`large`:`normal`,T=t.indexOf(`:`),E=T>=0?t.slice(0,T):t,O=T>=0?t.slice(T+1):``,k=(0,_.useRef)(null),[ee,A]=(0,_.useState)(!0),[j,M]=(0,_.useState)(null),te=()=>{let e=k.current;if(!e)return;let t=e.querySelector(`canvas`);t instanceof HTMLCanvasElement&&M(t.toDataURL(`image/png`))},ne=()=>{if(!j)return;let e=document.createElement(`a`),n=t.replace(/[^a-z0-9._-]+/gi,`-`);e.href=j,e.download=`ssg-graph-${n}-${Date.now()}.png`,document.body.appendChild(e),e.click(),e.remove()},N=()=>{!j||!navigator.clipboard?.write||fetch(j).then(e=>e.blob()).then(e=>{let t=new ClipboardItem({"image/png":e});return navigator.clipboard.write([t])}).catch(()=>{})},P=typeof navigator<`u`&&typeof navigator.clipboard?.write==`function`&&typeof ClipboardItem<`u`;(0,_.useEffect)(()=>{if(f){A(!0);return}let e=k.current;if(!e)return;let t=new IntersectionObserver(e=>{for(let t of e)A(t.isIntersecting)},{threshold:.01});return t.observe(e),()=>t.disconnect()},[f]);let F=n.length>0?n[n.length-1]:null,re=F?Hi[F.decision]??`#6b7280`:`#6b7280`,I=F?.decision??null,L=F?.tool??null,R=r||!ee||d,z=(0,_.useMemo)(()=>n.length>24?n.slice(n.length-24):n,[n]);return(0,D.jsxs)(`div`,{ref:k,className:`relative flex flex-col shrink-0 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] overflow-hidden${f?` flex-1 min-h-0`:``}`,style:{minHeight:d||f?void 0:l,opacity:+!c,transform:c?`scale(0.985)`:`scale(1)`,transformOrigin:`center center`,transition:`opacity 1100ms cubic-bezier(0.22, 1, 0.36, 1), transform 1100ms cubic-bezier(0.22, 1, 0.36, 1)`},children:[!C&&(0,D.jsxs)(`header`,{className:`group flex items-center justify-between px-3 py-1.5 border-b border-[var(--color-line-1)] bg-black/30 shrink-0 gap-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono min-w-0`,children:[u&&(0,D.jsx)(`span`,{className:`text-amber-300`,title:`Pinned`,children:`▲`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] uppercase tracking-wider`,children:E}),O&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate`,children:O})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono text-[var(--color-fg-4)]`,children:[L&&(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 max-w-[180px]`,title:I?`latest: ${L} → ${I}`:`latest: ${L}`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0`,style:{background:re}}),(0,D.jsx)(`span`,{className:`truncate text-[var(--color-fg-2)]`,children:L})]}),(0,D.jsxs)(`span`,{className:`hidden md:inline text-[var(--color-fg-4)]`,children:[n.length,`n`]}),s?(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-amber-300`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-amber-400`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:`idle`})]}):(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:`live`})]}),!m&&(0,D.jsxs)(`div`,{className:`flex items-center gap-1 ml-1`,children:[(0,D.jsx)(`button`,{type:`button`,onClick:v,className:`px-1.5 py-0.5 rounded border text-[10px] uppercase tracking-wider transition-colors ${u?`border-amber-500/60 text-amber-300`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:text-amber-300 hover:border-amber-500/40`}`,title:u?`Unpin`:`Pin to top`,children:`pin`}),(0,D.jsx)(`button`,{type:`button`,onClick:y,className:`px-1.5 py-0.5 rounded border border-[var(--color-line-1)] text-[10px] text-[var(--color-fg-3)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,title:d?`Expand`:`Minimize`,children:d?`+`:`–`}),(0,D.jsx)(`button`,{type:`button`,onClick:te,className:`px-1.5 py-0.5 rounded border border-[var(--color-line-1)] text-[10px] text-[var(--color-fg-3)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,title:`Preview PNG snapshot of this panel`,children:`▣`}),(0,D.jsx)(`button`,{type:`button`,onClick:b,className:`px-1.5 py-0.5 rounded border border-[var(--color-line-1)] text-[10px] text-[var(--color-fg-3)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,title:f?`Exit fullscreen`:`Fullscreen`,children:f?`×`:`⛶`}),x&&(0,D.jsx)(`button`,{type:`button`,onClick:x,"aria-label":`Close session ${t}`,className:`px-1.5 py-0.5 rounded border border-[var(--color-line-1)] text-[10px] text-[var(--color-fg-3)] hover:text-rose-300 hover:border-rose-500/40 transition-colors`,title:`End this session on the graph`,children:`╳`})]})]})]}),!d&&!m&&!C&&(0,D.jsx)(_o,{sessionKey:t,className:`rounded-none border-x-0 border-t-0 border-b border-[var(--color-line-1)] shrink-0`}),j&&(0,D.jsxs)(`div`,{className:`absolute inset-0 z-40 flex flex-col items-center justify-center gap-3 bg-black/80 backdrop-blur-sm p-4`,children:[(0,D.jsx)(`img`,{src:j,alt:`Panel snapshot`,className:`max-w-full max-h-[60%] rounded-sm border border-[var(--color-line-1)] object-contain`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[P&&(0,D.jsx)(`button`,{type:`button`,onClick:N,className:`px-3 py-1.5 rounded border border-[var(--color-line-1)] text-[11px] font-mono text-[var(--color-fg-2)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,children:`copy`}),(0,D.jsx)(`button`,{type:`button`,onClick:ne,className:`px-3 py-1.5 rounded border border-[var(--color-line-1)] text-[11px] font-mono text-[var(--color-fg-2)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,children:`download`}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>M(null),className:`px-3 py-1.5 rounded border border-[var(--color-line-1)] text-[11px] font-mono text-[var(--color-fg-3)] hover:text-rose-300 hover:border-rose-500/40 transition-colors`,children:`close`})]})]}),!d&&(0,D.jsxs)(`div`,{className:`flex-1 min-h-0 relative`,children:[(0,D.jsx)(Iu,{sessionKey:t}),(0,D.jsx)(lo,{bursts:z,paused:R,selectedId:i,onSelect:a,burstSeq:o,compact:!0,activePanelCount:g,labelDensity:w,onFrameTime:S}),m&&(0,D.jsx)(`button`,{type:`button`,onClick:h,"aria-label":`Promote ${E} to spotlight`,title:`Spotlight ${E}${O?` · ${O}`:``}`,className:`absolute inset-0 cursor-pointer bg-transparent hover:bg-sky-400/5 transition-colors`})]})]})}),Ru=200,zu=.9,Bu=40,Vu=32,Hu=480,Uu=`transform 220ms cubic-bezier(0.22, 1, 0.36, 1), opacity 220ms ease-out, fill 320ms ease-out`;function Wu(e){let{playback:t,bursts:n,rangeStart:r,rangeEnd:i,loading:a,onPlayhead:o,onLive:s,onPause:c,onResume:l,on24h:u}=e,d=(0,_.useRef)(null),f=(0,_.useRef)(!1),[p,m]=(0,_.useState)(null),h=Math.max(1,i-r),g=(t.playhead_ms-r)/h*100,v=Math.max(0,Math.min(100,g)),y=(0,_.useMemo)(()=>{let e=[];for(let t=0;t<Ru;t++)e.push({allow:0,block:0,ask:0,other:0});for(let t of n){let n=t.ts_ms;if(n<r||n>i)continue;let a=e[Math.floor((n-r)/h*(Ru-1))];t.decision===`allow`?a.allow++:t.decision===`block`||t.decision===`force`?a.block++:t.decision===`ask`?a.ask++:a.other++}return e},[n,r,i,h]),b=(0,_.useCallback)(e=>{let t=d.current;if(!t)return;let n=t.getBoundingClientRect(),i=Math.max(0,Math.min(1,(e-n.left)/n.width));if(i>=.98){s();return}o(r+i*h)},[r,h,o,s]),x=(0,_.useCallback)(e=>{let t=d.current;if(!t)return;let n=t.getBoundingClientRect(),i=Math.max(0,Math.min(1,(e-n.left)/n.width));m({rel:i,ts:r+i*h})},[r,h]);(0,_.useEffect)(()=>{let e=e=>{f.current&&b(e.clientX)},t=()=>{f.current=!1};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t)}},[b]);let S=t.mode===`live`,C=S?`left ${Hu}ms linear`:`none`;return(0,D.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono uppercase tracking-wider`,children:[(0,D.jsx)(`button`,{onClick:()=>S?c():l(),className:`px-2.5 py-1 rounded-sm border transition-colors cursor-pointer ${S?`border-emerald-500/40 text-emerald-300 hover:bg-emerald-500/10`:`border-amber-500/40 text-amber-300 hover:bg-amber-500/10`}`,title:S?`Pause the live stream`:`Resume updates at this playhead`,children:S?`⏸ pause`:`▶ resume`}),(0,D.jsx)(`button`,{onClick:s,disabled:S,className:`px-2.5 py-1 rounded-sm border transition-colors cursor-pointer ${S?`border-[var(--color-line-1)] text-[var(--color-fg-4)] opacity-50`:`border-sky-500/40 text-sky-300 hover:bg-sky-500/10`}`,title:`Jump to live (now)`,children:`⏭ live`}),(0,D.jsx)(`button`,{onClick:u,className:`px-2.5 py-1 rounded-sm border border-violet-500/40 text-violet-300 hover:bg-violet-500/10 transition-colors cursor-pointer`,title:`Expand to last 24h — window covers now−24h through now. Backfills audit_log so the scrubber shows all recent evals.`,children:`◉ 24h`}),(0,D.jsx)(`div`,{className:`flex-1`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`mode`}),(0,D.jsx)(`span`,{className:S?`text-emerald-300`:t.mode===`paused`?`text-amber-300`:`text-violet-300`,children:t.mode}),a&&(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] animate-pulse`,children:`· backfilling`}),(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`· t=`,Gu(t.playhead_ms)]})]}),(0,D.jsxs)(`div`,{ref:d,className:`relative h-10 w-full rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] cursor-pointer overflow-hidden select-none`,onPointerDown:e=>{f.current=!0,e.target.setPointerCapture?.(e.pointerId),b(e.clientX)},onPointerMove:e=>x(e.clientX),onPointerLeave:()=>m(null),children:[a&&(0,D.jsx)(`div`,{className:`absolute inset-0 pointer-events-none opacity-40 shimmer`,"aria-hidden":!0}),(0,D.jsxs)(`svg`,{viewBox:`0 0 ${Ru} ${Bu}`,preserveAspectRatio:`none`,className:`absolute inset-0 w-full h-full pointer-events-none`,"aria-hidden":!0,children:[[.25,.5,.75].map(e=>(0,D.jsx)(`line`,{x1:e*Ru,x2:e*Ru,y1:0,y2:Bu,stroke:`var(--color-line-1)`,strokeWidth:.3,strokeDasharray:`1,2`,opacity:.55},e)),y.map((e,t)=>{let n=e.allow+e.block+e.ask+e.other,r=Math.min(Vu,n*3),i=n===0?0:r/Vu,a=e.block>0?Hi.block:e.ask>0?Hi.ask:e.other>0&&e.allow===0?Hi.log:Hi.allow;return(0,D.jsx)(`rect`,{x:t+.05,y:Bu-Vu,width:zu,height:Vu,rx:.3,fill:a,style:{opacity:n===0?0:.78,transform:`scaleY(${i})`,transformOrigin:`50% 100%`,transformBox:`fill-box`,transition:Uu}},t)})]}),p&&(0,D.jsx)(`div`,{className:`absolute top-0 bottom-0 w-px bg-white/15 pointer-events-none`,style:{left:`${p.rel*100}%`},"aria-hidden":!0}),(0,D.jsx)(`div`,{className:`absolute top-0 bottom-0 pointer-events-none`,style:{left:`${v}%`,width:`1px`,background:`linear-gradient(to bottom, rgba(125,211,252,0.85), rgba(56,189,248,1) 30%, rgba(56,189,248,0.85))`,boxShadow:`0 0 6px rgba(56,189,248,0.55)`,transition:C,willChange:`left`},children:(0,D.jsx)(`div`,{className:`absolute -top-0.5 -translate-x-1/2 w-2 h-2 rotate-45 bg-sky-300`,style:{boxShadow:`0 0 6px rgba(56,189,248,0.7)`}})}),S&&(0,D.jsx)(`div`,{className:`absolute top-0 right-0 bottom-0 pointer-events-none`,style:{width:`8px`,background:`linear-gradient(to left, rgba(74,222,128,0.55), rgba(74,222,128,0))`},"aria-hidden":!0,children:(0,D.jsx)(`div`,{className:`absolute top-0 right-0 bottom-0 w-[2px] bg-emerald-400 pulse-soft`})})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between text-[10px] font-mono text-[var(--color-fg-4)]`,children:[(0,D.jsx)(`span`,{children:Ku(r)}),(0,D.jsx)(`span`,{className:`uppercase tracking-wider transition-colors ${p?`text-sky-300`:``}`,children:p?`↳ ${Ku(p.ts)}`:`${qu(t.window_ms)} window`}),(0,D.jsx)(`span`,{children:Ku(i)})]})]})}function Gu(e){let t=Date.now()-e;if(Math.abs(t)<1500)return`live`;let n=Math.round(t/1e3);if(n<60)return`−${n}s`;let r=Math.floor(n/60);return r<60?`−${r}m${n%60}s`:`−${Math.floor(r/60)}h${r%60}m`}function Ku(e){return new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function qu(e){return e<6e4?`${Math.round(e/1e3)}s`:e<36e5?`${Math.round(e/6e4)}m`:`${Math.round(e/36e5)}h`}var Ju=80,Yu=600,Xu=Object.freeze({stop:()=>{},count:0}),Zu=new Set([`allow`,`block`,`ask`,`log`,`force`,`shadow`]);function Qu(e){if(!Ie()||e.length===0)return Xu;let t=[],n=!1,r=0;for(let i=0;i<e.length;i++){let a=e[i];if(i>0){let t=e[i-1],n=Math.max(0,a.ts_ms-t.ts_ms),o=Ju+Math.log2(1+n)*14;r+=Math.max(Ju,Math.min(Yu,o))}let o=Zu.has(a.decision)?a.decision:null;if(!o)continue;let s=setTimeout(()=>{n||He(o)},r);t.push(s)}return{count:t.length,stop(){if(!n){n=!0;for(let e of t)clearTimeout(e);t.length=0}}}}var $u=1200,ed=3e4,td=3e3,nd=6,rd=3,id=`graph.panelState.v1`,ad=14400*1e3;function od(e,t){let n=new Map;for(let t of e){let e=Vi(t),r=n.get(e);r?r.push(t):n.set(e,[t])}for(let[e,r]of n){let i=t.get(e);i&&i.length===r.length&&i[i.length-1]===r[r.length-1]&&n.set(e,i)}return n}function sd(){if(typeof window>`u`)return new Map;try{let e=window.localStorage.getItem(id);if(!e)return new Map;let t=JSON.parse(e);return new Map(Object.entries(t))}catch{return new Map}}function cd(e){if(!(typeof window>`u`))try{let t={};for(let[n,r]of e)t[n]=r;window.localStorage.setItem(id,JSON.stringify(t))}catch{}}function ld(){let e=ca(),t=Bi(),n=Ri(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(null),s=(0,_.useCallback)((e,t)=>{i(e),o(t??null)},[]),c=Hc();(0,_.useEffect)(()=>{n&&(n.decision===`block`?c.play(`block`):n.decision===`force`&&c.play(`force`))},[c.play,n]);let l=(0,_.useCallback)(()=>c.play(`milestone`),[c]),u=(0,_.useCallback)(()=>c.play(`record`),[c]),[d,f]=(0,_.useState)(()=>{if(typeof window>`u`)return`full`;try{let e=window.localStorage.getItem(`graph.viewMode.v1`);if(e===`full`||e===`feed`||e===`stream`||e===`broadcast`)return e}catch{}return`full`});(0,_.useEffect)(()=>{if(!(typeof window>`u`))try{window.localStorage.setItem(`graph.viewMode.v1`,d)}catch{}},[d]),(0,_.useEffect)(()=>{let e=e=>e===`full`?`feed`:e===`feed`?`stream`:e===`stream`?`broadcast`:`full`,t=t=>{if(t.key===`Escape`&&d!==`full`){f(`full`);return}if(t.key===`b`||t.key===`B`){let n=t.target?.tagName;if(n===`INPUT`||n===`TEXTAREA`)return;f(e)}};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[d]);let p=d===`broadcast`,m=d===`stream`,h=d===`feed`,g=m||p,v=p,y=m,[b,x]=(0,_.useState)(()=>{if(typeof window>`u`)return!1;try{return window.localStorage.getItem(`ssg.sfx.enabled`)===null}catch{return!1}}),S=(0,_.useCallback)(()=>{c.toggle(),x(!1)},[c]),[C,w]=(0,_.useState)(()=>typeof window<`u`&&window.matchMedia(`(max-width: 767px)`).matches);(0,_.useEffect)(()=>{let e=window.matchMedia(`(max-width: 767px)`),t=e=>w(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let[T,E]=(0,_.useState)(!1),O=(0,_.useRef)(null),k=(0,_.useCallback)(async e=>{try{await fetch(`/api/json/graph/close-sessions`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`same-origin`,body:JSON.stringify(e.length>0?{session_keys:e}:{})})}catch{}E(!1),O.current&&clearTimeout(O.current)},[]),ee=(0,_.useCallback)(e=>{if(!T){E(!0),O.current&&clearTimeout(O.current),O.current=setTimeout(()=>E(!1),3e3);return}k(e)},[T,k]);(0,_.useEffect)(()=>()=>{O.current&&clearTimeout(O.current)},[]);let A=(0,_.useRef)(new Map),j=(0,_.useRef)(0),[M,te]=(0,_.useState)({fps:0,active:0,hitches:0}),ne=(0,_.useCallback)((e,t)=>{A.current.set(e,t),t>33&&(j.current+=1)},[]);(0,_.useEffect)(()=>{let e=setInterval(()=>{let e=A.current,t=j.current;if(j.current=0,e.size===0){te(e=>e.active===0?e:{fps:0,active:0,hitches:0});return}let n=0;for(let t of e.values())n+=t;let r=n/e.size,i=r>0?Math.max(1,Math.round(1e3/r)):0;te(n=>n.fps===i&&n.active===e.size&&n.hitches===t?n:{fps:i,active:e.size,hitches:t})},1e3);return()=>clearInterval(e)},[]);let{bursts:N,playback:P,oldest_known_ms:F,newest_known_ms:re,loading_backfill:I}=e.snapshot,L=(0,_.useRef)(new Map),R=(0,_.useMemo)(()=>{let e=od(N,L.current);return L.current=e,e},[N]),[z,ie]=(0,_.useState)(()=>sd()),[ae,oe]=(0,_.useState)(null);(0,_.useEffect)(()=>{cd(z)},[z]),(0,_.useEffect)(()=>{let e=Date.now(),t=!1,n=new Map(z);for(let r of R.keys())n.has(r)||(n.set(r,{pinned:!1,pinnedAt:0,minimized:!1,firstSeenAt:e}),t=!0);for(let[r,i]of n)R.has(r)||i.pinned||e-i.firstSeenAt<ad||(n.delete(r),t=!0);t&&ie(n)},[R,z]);let se=(0,_.useRef)(new Map),ce=(0,_.useRef)(new Set),le=(0,_.useRef)(new Map),[,ue]=(0,_.useState)(0);(0,_.useEffect)(()=>{let e=performance.now(),t=se.current,n=ce.current,r=le.current,i=new Set;for(let[e,n]of R)i.add(e),r.set(e,n.slice()),t.delete(e);for(let a of n)if(!i.has(a)&&!t.has(a)){let n=r.get(a)??[],i=n[n.length-1]?.ts_ms??0;t.set(a,{bursts:n,diedAt:e,newestTs:i})}for(let[n,i]of t)e-i.diedAt>=$u&&(t.delete(n),r.delete(n));if(ce.current=i,t.size>0){let n=1/0;for(let e of t.values())n=Math.min(n,e.diedAt+$u);let r=Math.max(16,n-e+16),i=setTimeout(()=>ue(e=>e+1),r);return()=>clearTimeout(i)}},[R]);let de=(0,_.useCallback)(e=>{ie(t=>{let n=new Map(t),r=n.get(e)??{pinned:!1,pinnedAt:0,minimized:!1,firstSeenAt:Date.now()};return n.set(e,{...r,pinned:!r.pinned,pinnedAt:r.pinned?0:Date.now()}),n})},[]),fe=(0,_.useCallback)(e=>{ie(t=>{let n=new Map(t),r=n.get(e)??{pinned:!1,pinnedAt:0,minimized:!1,firstSeenAt:Date.now()};return n.set(e,{...r,minimized:!r.minimized}),n})},[]),pe=(0,_.useCallback)(e=>{oe(t=>t===e?null:e)},[]);(0,_.useEffect)(()=>{if(!ae)return;let e=e=>{e.key===`Escape`&&oe(null)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ae]);let me=(0,_.useRef)(null),[he,ge]=(0,_.useState)(null);(0,_.useEffect)(()=>{if(!ae){me.current?.stop(),me.current=null,ge(null);return}let e=!1;ge({sessionKey:ae,entries:[],loading:!0,error:null});let t=`/api/json/graph/session-audit?session_key=${encodeURIComponent(ae)}`;return fetch(t,{credentials:`same-origin`}).then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(t=>{if(e)return;let n=Array.isArray(t.rows)?t.rows:[];ge({sessionKey:ae,entries:n,loading:!1,error:null});let r=n.map(e=>({ts_ms:e.ts_ms,decision:e.decision,tool:e.tool}));me.current?.stop(),me.current=Qu(r)}).catch(t=>{e||ge({sessionKey:ae,entries:[],loading:!1,error:t instanceof Error?t.message:`failed to load audit log`})}),()=>{e=!0,me.current?.stop(),me.current=null}},[ae]);let B=(0,_.useMemo)(()=>{let e={pinned:!1,pinnedAt:0,minimized:!1,firstSeenAt:Date.now()},t=[];for(let[n,r]of R){let i=r[r.length-1]?.ts_ms??0;t.push({key:n,bursts:r,newestTs:i,fadingOutAt:null,state:z.get(n)??e})}for(let[n,r]of se.current)R.has(n)||t.push({key:n,bursts:r.bursts,newestTs:r.newestTs,fadingOutAt:r.diedAt,state:z.get(n)??e});return t.sort((e,t)=>e.state.pinned===t.state.pinned?e.state.pinned&&t.state.pinned?e.state.pinnedAt-t.state.pinnedAt:e.state.firstSeenAt-t.state.firstSeenAt:e.state.pinned?-1:1),t},[R,z]),_e=(0,_.useMemo)(()=>{if(!r)return null;for(let e of N)if((e.audit_id??`${e.ts_ms}:${e.tool}`)===r||r.startsWith(`${e.ts_ms}:${e.tool}`))return e;return null},[N,r]),[ve,ye]=(0,_.useState)(null),be=(0,_.useRef)(null),xe=(0,_.useMemo)(()=>{if(B.length===0)return be.current=null,null;if(ve!=null&&B.some(e=>e.key===ve))return be.current=ve,ve;let e=B.filter(e=>e.state.pinned);if(e.length>0)return e.sort((e,t)=>t.state.pinnedAt-e.state.pinnedAt),be.current=e[0].key,e[0].key;let t=B[0];for(let e of B)e.newestTs>t.newestTs&&(t=e);let n=be.current;if(n!=null&&n!==t.key){let e=B.find(e=>e.key===n);if(e&&Date.now()-e.newestTs<td)return n}return be.current=t.key,t.key},[B,ve]);(0,_.useEffect)(()=>{ve!=null&&(B.some(e=>e.key===ve)||ye(null))},[ve,B]),(0,_.useEffect)(()=>{ye(null)},[]);let V=(0,_.useMemo)(()=>{if(B.length===0)return{hero:null,grid:[],rail:[],overflow:[]};if(d===`full`||d===`feed`)return{hero:null,grid:B.slice(0,nd),rail:B.slice(nd),overflow:[]};let e=B.find(e=>e.key===xe)??B[B.length-1],t=B.filter(t=>t.key!==e.key);return d===`broadcast`?{hero:e,grid:[],rail:[],overflow:t}:{hero:e,grid:[],rail:t.slice(0,rd),overflow:t.slice(rd)}},[B,d,xe]),Se=(0,_.useCallback)(e=>{ye(e)},[]),Ce=(0,_.useCallback)(()=>{ye(null)},[]),we=(0,_.useMemo)(()=>{let e=new Map,t=new Map,n=new Map,r=new Map,i=new Map,a=new Map;for(let o of B){let s=o.key;e.set(s,()=>de(s)),t.set(s,()=>fe(s)),n.set(s,()=>pe(s)),r.set(s,()=>void k([s])),i.set(s,e=>ne(s,e)),a.set(s,()=>Se(s))}return{onTogglePin:e,onToggleMinimize:t,onToggleFullscreen:n,onClose:r,onFrameTime:i,onPromote:a}},[de,fe,pe,k,ne,Se,B]);(0,_.useEffect)(()=>{let e=new Set(B.map(e=>e.key)),t=A.current;for(let n of Array.from(t.keys()))e.has(n)||t.delete(n)},[B]);let Te=(0,_.useMemo)(()=>{let e=n?.counters,t=e?.total??0,r=(e?.block??0)+(e?.force??0),i=0;if(N.length>0){let e=0,t=N.slice(-100);for(let n of t)e+=n.duration_ns;i=e/t.length/1e6}return{evals:t,blocks:r,avgMs:i,agents:B.length}},[n,N,B.length]),Ee=Math.min(F,P.playhead_ms-P.window_ms),De=Math.max(re,P.playhead_ms),Oe=V.grid.length,ke=C||Oe<=1?1:Oe<=4?2:3,Ae=Math.max(1,Math.ceil(Math.max(1,Oe)/ke)),je=Oe<=1||C?360:180,Me=ae?B.find(e=>e.key===ae):null,Ne=e=>e>=1e4?`${Math.round(e/1e3)}k`:e.toLocaleString();return(0,D.jsxs)(`div`,{className:`grid gap-3 md:h-[calc(100dvh-4.5rem)] md:min-h-[560px] ${g?`grid-rows-[auto_minmax(0,1fr)]`:`grid-rows-[auto_minmax(0,1fr)_auto]`} ${p?`bg-black`:``}`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between flex-wrap gap-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,D.jsx)(`h1`,{className:`text-sm font-mono uppercase tracking-wider text-[var(--color-fg-1)]`,children:`graph intelligence`}),!p&&(0,D.jsx)(`span`,{className:`chip text-sky-300 border-sky-500/30`,children:`real-time tool-use`}),P.mode===`live`?(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft`}),`streaming`]}):(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-amber-300`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-amber-400`}),P.mode]}),(0,D.jsxs)(`span`,{className:`flex items-center gap-x-3 gap-y-1 flex-wrap text-[11px] font-mono text-[var(--color-fg-3)] pl-3 border-l border-[var(--color-line-1)]`,children:[(0,D.jsxs)(`span`,{title:`Total evaluations since daemon start`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`↑`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Ne(Te.evals)}),` `,(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:`evals`})]}),(0,D.jsxs)(`span`,{title:`Block + force decisions — dangerous tool calls intercepted by SSG rules`,children:[(0,D.jsx)(`span`,{className:`text-rose-400`,children:`⛔`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Ne(Te.blocks)}),` `,(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:`blocks`})]}),(0,D.jsxs)(`span`,{className:`hidden md:inline`,title:`Mean eval latency over the last 100 bursts`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`⏱`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Te.avgMs<1?`${(Te.avgMs*1e3).toFixed(0)}µs`:`${Te.avgMs.toFixed(1)}ms`})]}),(0,D.jsxs)(`span`,{title:`Concurrent agent sessions in this window`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`⌥`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Te.agents}),` `,(0,D.jsxs)(`span`,{className:`hidden sm:inline`,children:[`agent`,Te.agents===1?``:`s`]})]})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[!p&&(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:[N.length,`n · window `,Math.round(P.window_ms/1e3),`s`]}),(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] tabular-nums`,title:`Average RAF interval across ${M.active} canvas${M.active===1?``:`es`}${M.hitches>0?` · ${M.hitches} hitch${M.hitches===1?``:`es`} (>33ms frames)`:``}`,children:[M.active===0?`—`:`${M.fps}fps${M.hitches>0?` (${M.hitches}h)`:``}`,` · `,M.active,`/`,B.length]}),(0,D.jsx)(`div`,{role:`group`,"aria-label":`Graph view mode`,"data-tutorial":`graph-views`,className:`inline-flex items-stretch rounded border border-[var(--color-line-1)] overflow-hidden text-[10px] font-mono uppercase tracking-wider`,title:`View mode — B cycles, Esc returns to full`,children:[`full`,`feed`,`stream`,`broadcast`].map(e=>{let t=d===e;return(0,D.jsx)(`button`,{type:`button`,onClick:()=>f(e),"aria-pressed":t,title:e===`full`?`Full dashboard — sidebar, timeline, all controls`:e===`feed`?`Feed mode — vertical timeline of tool calls for non-technical users`:e===`stream`?`Stream mode — spotlight layout for Twitch/YouTube viewers`:`Broadcast mode — pure canvas for OBS scenes (Esc to exit)`,className:`px-2 py-0.5 transition-colors cursor-pointer ${t?e===`broadcast`?`bg-amber-500/15 text-amber-300`:e===`stream`?`bg-sky-500/15 text-sky-300`:e===`feed`?`bg-emerald-500/15 text-emerald-300`:`bg-[var(--color-fg-4)]/10 text-[var(--color-fg-1)]`:`text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)] hover:bg-white/5`}`,children:e===`broadcast`?`cast`:e},e)})}),(0,D.jsx)(`button`,{type:`button`,onClick:S,className:`chip cursor-pointer transition-colors ${b&&!c.enabled?`border-amber-500/60 text-amber-300 animate-pulse`:`hover:border-sky-500/50 hover:text-sky-300`}`,title:c.enabled?`Mute stream sounds`:`Enable stream sounds`,children:c.enabled?`SFX ON`:b?`🔊 enable cues`:`SFX OFF`}),!p&&B.length>0&&(0,D.jsx)(`div`,{"aria-live":`polite`,children:(0,D.jsx)(`button`,{type:`button`,"aria-label":`Clear all visible graph sessions`,"data-tutorial":`graph-clear`,onClick:()=>ee(B.filter(e=>!e.fadingOutAt).map(e=>e.key)),className:`chip cursor-pointer transition-colors ${T?`border-rose-500/60 text-rose-300`:`hover:border-rose-500/40 hover:text-rose-300`}`,title:`Close all active sessions on the graph — equivalent to /clear but reflects on the graph`,children:T?`confirm clear ${B.filter(e=>!e.fadingOutAt).length}`:`clear`})})]})]}),(0,D.jsxs)(`div`,{"data-tutorial":`graph-panels`,className:`grid grid-cols-1 ${v?``:y?`lg:grid-cols-[1fr_240px]`:`lg:grid-cols-[1fr_300px]`} gap-3 min-h-0 md:overflow-hidden`,children:[(0,D.jsx)(`div`,{className:`flex flex-col gap-3 min-h-0 min-w-0`,children:h?(0,D.jsx)(`div`,{className:`flex-1 flex flex-col min-h-0 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] overflow-hidden`,children:(0,D.jsx)(pu,{bursts:N,selectedId:r,onSelect:s})}):B.length===0?(0,D.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] text-center px-4`,style:{minHeight:240},children:[(0,D.jsx)(`p`,{className:`overline mb-2 text-[var(--color-fg-3)]`,children:`graph · idle`}),(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] max-w-[280px]`,children:`No active sessions in the current window. Each session will render as its own tree as bursts arrive.`})]}):(0,D.jsxs)(D.Fragment,{children:[V.hero&&(ae==null||ae===V.hero.key)&&(0,D.jsxs)(`div`,{className:`flex-1 min-h-0 flex flex-col gap-2`,children:[ve!=null&&(0,D.jsx)(`button`,{type:`button`,onClick:Ce,className:`self-end chip text-amber-300 border-amber-500/40 hover:border-amber-400 cursor-pointer text-[10px]`,title:`Release manual spotlight — return to auto-follow`,children:`spotlight: locked · release ↺`}),(0,D.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,D.jsx)(Lu,{sessionKey:V.hero.key,bursts:V.hero.bursts,paused:P.mode!==`live`||V.hero.fadingOutAt!=null,selectedId:r,onSelect:s,burstSeq:t,isStale:V.hero.fadingOutAt!=null||P.playhead_ms-V.hero.newestTs>ed,isFadingOut:V.hero.fadingOutAt!=null,minHeight:0,pinned:V.hero.state.pinned,minimized:V.hero.state.minimized,isFullscreen:!1,viewMode:d,activePanelCount:1,onTogglePin:we.onTogglePin.get(V.hero.key),onToggleMinimize:we.onToggleMinimize.get(V.hero.key),onToggleFullscreen:we.onToggleFullscreen.get(V.hero.key),onClose:we.onClose.get(V.hero.key),onFrameTime:we.onFrameTime.get(V.hero.key)},V.hero.key)})]}),V.grid.length>0&&(0,D.jsx)(`div`,{className:`flex-1 grid gap-3 min-h-0 min-w-0`,style:{gridTemplateColumns:`repeat(${ke}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${Ae}, minmax(180px, 1fr))`},children:V.grid.map(e=>{let n=e.fadingOutAt!=null||P.playhead_ms-e.newestTs>ed;return ae!=null&&ae!==e.key?null:(0,D.jsx)(Lu,{sessionKey:e.key,bursts:e.bursts,paused:P.mode!==`live`||e.fadingOutAt!=null,selectedId:r,onSelect:s,burstSeq:t,isStale:n,isFadingOut:e.fadingOutAt!=null,minHeight:je,pinned:e.state.pinned,minimized:e.state.minimized,isFullscreen:!1,viewMode:d,activePanelCount:V.grid.length,onTogglePin:we.onTogglePin.get(e.key),onToggleMinimize:we.onToggleMinimize.get(e.key),onToggleFullscreen:we.onToggleFullscreen.get(e.key),onClose:we.onClose.get(e.key),onFrameTime:we.onFrameTime.get(e.key)},e.key)})}),V.rail.length>0&&(0,D.jsxs)(`div`,{className:`shrink-0 flex flex-col gap-1`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between text-[10px] font-mono text-[var(--color-fg-4)] uppercase tracking-wider`,children:[(0,D.jsxs)(`span`,{children:[d===`full`?`overflow rail`:`spotlight rail`,` · `,V.rail.length,` session`,V.rail.length===1?``:`s`]}),V.overflow.length>0&&(0,D.jsxs)(`span`,{title:V.overflow.map(e=>e.key).join(`
|
|
14
|
+
`,`ssg_debug_rca(`,`{`,`auto_current:true`,`}`,`)`]}),(0,D.jsx)(`button`,{type:`button`,onClick:i,className:`w-full mt-2 px-2 py-1 border border-[var(--color-line-1)] rounded-sm hover:bg-[var(--color-surface-2)]`,children:`refresh`}),t?.snapshot_hash&&(0,D.jsxs)(`p`,{className:`text-[10px] opacity-60`,children:[`hash `,t.snapshot_hash.slice(0,12),`…`]})]})]})}function Xl(e){return e===`critical`?`text-rose-400 border-rose-500/40`:e===`high`?`text-amber-300 border-amber-500/40`:e===`medium`?`text-sky-300 border-sky-500/40`:`text-[var(--color-fg-3)] border-[var(--color-line-1)]`}function Zl({pack:e}){return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`header`,{className:`flex items-start justify-between gap-4`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`p`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)]`,children:[`rca pack · `,new Date(e.ts_ms).toLocaleTimeString()]}),(0,D.jsx)(`h2`,{className:`text-[15px] font-medium text-[var(--color-fg-1)] mt-1`,children:e.summary}),e.trace_id&&(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] mt-1`,children:[`trace_id · `,e.trace_id]})]}),(0,D.jsx)(`span`,{className:`chip uppercase text-[10px] tracking-wider `+Xl(e.severity),children:e.severity})]}),e.hypothesis&&e.hypothesis.length>0&&(0,D.jsxs)(`section`,{children:[(0,D.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`hypothesis`}),(0,D.jsx)(`ol`,{className:`space-y-2`,children:e.hypothesis.map((e,t)=>(0,D.jsxs)(`li`,{className:`p-2 rounded-sm bg-[var(--color-surface-2)] border border-[var(--color-line-1)]`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,D.jsx)(`p`,{className:`text-[13px] text-[var(--color-fg-1)]`,children:e.cause}),(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:[`conf `,(e.confidence*100).toFixed(0),`%`]})]}),e.evidence.length>0&&(0,D.jsx)(`ul`,{className:`mt-1 pl-3 text-[11px] text-[var(--color-fg-3)] list-disc list-inside space-y-0.5`,children:e.evidence.map((e,t)=>(0,D.jsx)(`li`,{children:e},t))})]},t))})]}),e.suggested_next_actions&&e.suggested_next_actions.length>0&&(0,D.jsxs)(`section`,{children:[(0,D.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`suggested next actions`}),(0,D.jsx)(`ul`,{className:`space-y-1 text-[13px] text-[var(--color-fg-2)]`,children:e.suggested_next_actions.map((e,t)=>(0,D.jsxs)(`li`,{className:`font-mono text-[12px]`,children:[`→ `,e]},t))})]}),e.state_snapshot&&e.state_snapshot.length>0&&(0,D.jsxs)(`section`,{children:[(0,D.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`expand`}),(0,D.jsx)(`ul`,{className:`space-y-1 text-[11px] font-mono`,children:e.state_snapshot.map(e=>(0,D.jsxs)(`li`,{className:`text-[var(--color-fg-3)]`,children:[(0,D.jsx)(`code`,{className:`text-sky-300`,children:e.uri}),(0,D.jsxs)(`span`,{className:`opacity-50 ml-2`,children:[e.hash.slice(0,10),`…`]})]},e.uri))})]})]})}var Ql=[`hook-ingress`,`parse`,`match`,`ffi-call`,`decide`,`audit`,`respond`],$l={"hook-ingress":`#6ea8ff`,parse:`#a78bfa`,match:`#60d394`,"ffi-call":`#f59e0b`,decide:`#f472b6`,audit:`#94a3b8`,respond:`#22d3ee`};function eu(){let{data:e,loading:t,error:n}=H(`/api/json/debug?uri=ssg%3A%2F%2Fframes%2Frecent%3Flimit%3D1024`,[zt([`debug-frame`])[`debug-frame`]]),r=e?.data?.frames??[],i=e?.data?.dropped??0,[a,o]=(0,_.useState)(null);return(0,D.jsxs)(`div`,{className:`grid grid-cols-1 xl:grid-cols-[1fr_320px] gap-4`,children:[(0,D.jsxs)(`article`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsxs)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:[`frames · `,r.length,i>0&&(0,D.jsxs)(`span`,{className:`ml-2 text-amber-300`,children:[`dropped · `,i]})]}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:`ssg://frames/recent`})]}),n&&(0,D.jsxs)(`p`,{className:`text-sm text-rose-300`,children:[`timeline fetch error: `,n]}),t&&r.length===0?(0,D.jsx)(`p`,{className:`text-sm text-[var(--color-fg-4)]`,children:`loading…`}):r.length===0?(0,D.jsx)(tu,{}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(ru,{frames:r,onSelect:o}),(0,D.jsx)(nu,{})]})]}),(0,D.jsxs)(`aside`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2 text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsx)(`p`,{className:`uppercase tracking-wider text-[var(--color-fg-2)]`,children:`frame inspector`}),a?(0,D.jsx)(iu,{frame:a}):(0,D.jsx)(`p`,{className:`opacity-60`,children:`click a bar to inspect`})]})]})}function tu(){return(0,D.jsxs)(`div`,{className:`text-[12px] text-[var(--color-fg-3)] space-y-2 py-4`,children:[(0,D.jsx)(`p`,{className:`text-[13px] text-[var(--color-fg-2)]`,children:`no frames captured yet`}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] leading-relaxed`,children:`Frame collection is opt-in so it adds zero cost when off. Restart the daemon with the env var below, then any tool call (Bash, Read, Edit, MCP) will stream frames into this view in real time:`}),(0,D.jsx)(`pre`,{className:`text-[11px] text-amber-300 font-mono bg-[var(--color-surface-2)] border border-[var(--color-line-1)] rounded-sm px-2 py-1.5`,children:`SSG_DEBUG_ENABLED=1 ./ssg daemon`}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:`Each bar = one stage of one eval. Click a bar to inspect the frame — rule that matched, duration, error type, input preview.`})]})}function nu(){return(0,D.jsx)(`div`,{className:`flex flex-wrap gap-3 text-[10px] font-mono text-[var(--color-fg-4)]`,children:Ql.map(e=>(0,D.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,D.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-sm`,style:{background:$l[e]}}),e]},e))})}function ru({frames:e,onSelect:t}){let n=(0,_.useRef)(null),r=(0,_.useRef)([]),[i,a]=(0,_.useState)(-1),{rows:o,tMin:s,tMax:c}=(0,_.useMemo)(()=>{let t=new Map;for(let n of e){let e=t.get(n.trace_id)??[];e.push(n),t.set(n.trace_id,e)}let n=Array.from(t.entries()).map(([e,t])=>({trace_id:e,frames:t.slice().sort((e,t)=>ou(e.ts_start_ns,t.ts_start_ns))}));n.sort((e,t)=>ou(e.frames[0].ts_start_ns,t.frames[0].ts_start_ns));let r=null,i=null;for(let t of e){let e=BigInt(t.ts_start_ns),n=BigInt(t.ts_end_ns);(r===null||e<r)&&(r=e),(i===null||n>i)&&(i=n)}return{rows:n,tMin:r??0n,tMax:i??1n}},[e]);(0,_.useEffect)(()=>{let e=n.current;if(!e)return;let t=window.devicePixelRatio||1,a=e.clientWidth,l=Math.max(120,o.length*22+24);e.width=a*t,e.height=l*t,e.style.height=`${l}px`;let u=e.getContext(`2d`);if(!u)return;u.setTransform(t,0,0,t,0,0),u.clearRect(0,0,a,l),u.strokeStyle=`rgba(255,255,255,0.04)`,u.lineWidth=1;for(let e=1;e<4;e++){let t=e*a/4;u.beginPath(),u.moveTo(t,0),u.lineTo(t,l),u.stroke()}let d=c>s?Number(c-s):1,f=a-110-8;u.font=`10px ui-monospace, monospace`,u.textBaseline=`middle`;let p=[];if(o.forEach((e,t)=>{let n=8+t*22;u.fillStyle=`rgba(255,255,255,0.55)`,u.fillText(e.trace_id.slice(0,10),6,n+18/2);for(let t of e.frames){let e=Number(BigInt(t.ts_start_ns)-s),r=Number(BigInt(t.ts_end_ns)-s),i=110+e/d*f,a=Math.max(2,(r-e)/d*f);u.fillStyle=$l[t.stage]??`#888`,u.globalAlpha=t.result===`error`?1:.82,u.fillRect(i,n,a,18),u.globalAlpha=1,t.result===`error`&&(u.strokeStyle=`#f43f5e`,u.lineWidth=1.5,u.strokeRect(i+.5,n+.5,a-1,17)),p.push({x:i,y:n,w:a,h:18,frame:t})}}),r.current=p,i>=0&&i<p.length){let e=p[i];u.strokeStyle=`#fff`,u.lineWidth=1.5,u.strokeRect(e.x+.5,e.y+.5,e.w-1,e.h-1)}},[o,s,c,i]);function l(e){let t=n.current;if(!t)return-1;let i=t.getBoundingClientRect(),a=e.clientX-i.left,o=e.clientY-i.top;for(let e=r.current.length-1;e>=0;e--){let t=r.current[e];if(a>=t.x&&a<=t.x+t.w&&o>=t.y&&o<=t.y+t.h)return e}return-1}return(0,D.jsx)(`canvas`,{ref:n,className:`w-full block cursor-crosshair`,onMouseMove:e=>a(l(e)),onMouseLeave:()=>a(-1),onClick:e=>{let n=l(e);t(n>=0?r.current[n].frame:null)}})}function iu({frame:e}){let t=Number(BigInt(e.ts_end_ns)-BigInt(e.ts_start_ns)),n=t>=1e6?`${(t/1e6).toFixed(2)}ms`:t>=1e3?`${(t/1e3).toFixed(1)}µs`:`${t}ns`;return(0,D.jsxs)(`dl`,{className:`space-y-1`,children:[(0,D.jsxs)(au,{k:`stage`,children:[(0,D.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-sm mr-1 align-middle`,style:{background:$l[e.stage]??`#888`}}),e.stage]}),(0,D.jsx)(au,{k:`tool`,children:e.tool}),(0,D.jsx)(au,{k:`result`,children:(0,D.jsx)(`span`,{className:e.result===`error`?`text-rose-300`:e.result===`skip`?`text-[var(--color-fg-4)]`:`text-emerald-300`,children:e.result})}),(0,D.jsx)(au,{k:`dur`,children:n}),e.rule_id&&(0,D.jsx)(au,{k:`rule`,children:e.rule_id}),e.error&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(au,{k:`err.type`,children:(0,D.jsx)(`span`,{className:`text-rose-300`,children:e.error.type})}),(0,D.jsx)(au,{k:`err.msg`,children:(0,D.jsx)(`span`,{className:`text-rose-200`,children:e.error.message})})]}),e.input_preview&&(0,D.jsx)(au,{k:`input`,children:(0,D.jsx)(`code`,{className:`text-[10px] break-all`,children:e.input_preview})}),(0,D.jsx)(au,{k:`trace`,children:(0,D.jsx)(`code`,{className:`text-[10px]`,children:e.trace_id})}),(0,D.jsx)(au,{k:`frame`,children:(0,D.jsx)(`code`,{className:`text-[10px]`,children:e.frame_id})})]})}function au({k:e,children:t}){return(0,D.jsxs)(`div`,{className:`flex gap-2 text-[11px] leading-tight`,children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)] w-16 shrink-0 uppercase tracking-wider`,children:e}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)] break-all min-w-0`,children:t})]})}function ou(e,t){let n=BigInt(e),r=BigInt(t);return n<r?-1:+(n>r)}var su=[`ssg://daemon/state`,`ssg://daemon/metrics`,`ssg://audit/recent?limit=10`,`ssg://frames/recent?limit=32`,`ssg://rules/list`,`ssg://rca/current`,`ssg://native/stats`];function cu(){let[e,t]=(0,_.useState)(`ssg://daemon/state`),[n,r]=(0,_.useState)(`ssg://daemon/state`);return(0,D.jsxs)(`div`,{className:`space-y-3`,children:[(0,D.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:su.map(e=>(0,D.jsx)(`button`,{type:`button`,onClick:()=>{t(e),r(e)},className:`chip text-[10px] `+(n===e?`border-[var(--color-brand)] text-[var(--color-fg-1)]`:`text-[var(--color-fg-3)]`),children:e},e))}),(0,D.jsxs)(`form`,{className:`flex items-center gap-2`,onSubmit:t=>{t.preventDefault(),r(e)},children:[(0,D.jsx)(`input`,{value:e,onChange:e=>t(e.target.value),placeholder:`ssg://source/path?k=v`,className:`flex-1 px-3 py-1.5 text-[12px] font-mono rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] text-[var(--color-fg-1)]`}),(0,D.jsx)(`button`,{type:`submit`,className:`px-3 py-1.5 text-[11px] font-mono uppercase tracking-wider border border-[var(--color-line-1)] rounded-sm hover:bg-[var(--color-surface-2)]`,children:`resolve`})]}),(0,D.jsx)(lu,{uri:n})]})}function lu({uri:e}){let t=zt([`debug-frame`,`activity-updated`,`counters-updated`]),{data:n,loading:r,error:i,refetch:a}=H(`/api/json/debug?uri=${encodeURIComponent(e)}`,[t[`debug-frame`],t[`activity-updated`],t[`counters-updated`],e]),o=n?JSON.stringify(n.data,null,2):``;return(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:e}),n?.snapshot_hash&&(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:[`hash `,n.snapshot_hash.slice(0,10),`…`]}),n?.stale&&(0,D.jsxs)(`span`,{className:`chip text-amber-300 border-amber-500/40 text-[10px]`,children:[`stale `,n.age_ms?`${Math.round(n.age_ms/1e3)}s`:``]})]}),(0,D.jsx)(`button`,{type:`button`,onClick:a,className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`,children:`refresh`})]}),r&&!n&&(0,D.jsx)(`p`,{className:`text-sm text-[var(--color-fg-4)]`,children:`resolving…`}),i&&(0,D.jsx)(`p`,{className:`text-sm text-rose-300`,children:i}),o&&(0,D.jsx)(`pre`,{className:`text-[11px] leading-snug font-mono text-[var(--color-fg-2)] overflow-auto max-h-[60vh] whitespace-pre-wrap break-all`,children:o})]})}var uu=200;function du(e){let t=Date.now()-e;return t<2e3?`now`:t<6e4?`${Math.floor(t/1e3)}s ago`:t<36e5?`${Math.floor(t/6e4)}m ago`:`${Math.floor(t/36e5)}h ago`}function fu(e){let t=e/1e6;return t<1e3?`${Math.round(t)}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:`${Math.floor(t/6e4)}m${Math.floor(t%6e4/1e3)}s`}function pu(e){let{bursts:t,selectedId:n,onSelect:r}=e,i=(0,_.useMemo)(()=>{let e=new Map;for(let n of t){if(mi(n.tool))continue;let t=Vi(n),r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}let n=Array.from(e.entries());return n.sort((e,t)=>{let n=e[1][e[1].length-1]?.ts_ms??0;return(t[1][t[1].length-1]?.ts_ms??0)-n}),n},[t]);return t.length===0?(0,D.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center text-center px-4`,children:[(0,D.jsx)(`p`,{className:`overline mb-2 text-[var(--color-fg-3)]`,children:`feed · idle`}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] max-w-[260px]`,children:[`Each entry is one tool call your AI agent made.`,(0,D.jsx)(`br`,{}),`Color = the ssg rule decision.`]})]}):(0,D.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-3 py-3 space-y-5`,children:i.map(([e,t])=>{let i=e.indexOf(`:`),a=i>=0?e.slice(0,i):e,o=t[t.length-1],s=o?Hi[o.decision]??`#6b7280`:`#6b7280`,c=t.slice(-uu).reverse();return(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mb-2 pb-1 border-b border-[var(--color-line-1)] text-[11px]`,children:[(0,D.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0`,style:{background:s}}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] font-medium`,children:pi(a)}),(0,D.jsxs)(`span`,{className:`ml-auto text-[10px] text-[var(--color-fg-4)]`,children:[t.length,` `,t.length===1?`action`:`actions`]})]}),(0,D.jsxs)(`div`,{className:`relative pl-4`,children:[(0,D.jsx)(`div`,{className:`absolute left-[7px] top-0 bottom-0 w-px`,style:{background:`${s}33`}}),(0,D.jsx)(`div`,{className:`space-y-1.5`,children:c.map(e=>{let t=e.audit_id??`${e.ts_ms}:${e.tool}`,i=t===n,a=Hi[e.decision]??`#6b7280`,o=e.input_tokens??0,s=e.output_tokens??0,c=o>0||s>0;return(0,D.jsxs)(`div`,{className:`relative`,children:[(0,D.jsx)(`span`,{className:`absolute -left-[9px] top-1/2 -translate-y-1/2 w-[6px] h-[6px] rounded-full border border-[var(--color-surface-1)]`,style:{background:a}}),(0,D.jsxs)(`button`,{type:`button`,onClick:()=>r(i?null:t),className:`w-full text-left flex items-center gap-2 px-2.5 py-1.5 rounded-sm border text-[11.5px] transition-colors ${i?`border-sky-500/50 bg-sky-500/5 text-[var(--color-fg-1)]`:`border-[var(--color-line-1)] bg-[var(--color-surface-1)] text-[var(--color-fg-2)] hover:bg-white/3 hover:border-[var(--color-line-2)]`}`,children:[(0,D.jsx)(`span`,{className:`flex-1 font-medium truncate text-[var(--color-fg-1)]`,title:e.tool,children:fi(e.tool)}),(0,D.jsxs)(`span`,{className:`shrink-0 flex items-center gap-2 text-[9px] text-[var(--color-fg-4)]`,children:[c&&(0,D.jsxs)(`span`,{className:`font-mono`,title:`Input: ${o} tokens · Output: ${s} tokens`,children:[`↓`,Yi(o),` ↑`,Yi(s)]}),e.duration_ns>0&&(0,D.jsx)(`span`,{children:fu(e.duration_ns)}),(0,D.jsx)(`span`,{className:`px-1.5 py-px rounded text-[9px] font-semibold tracking-wide`,style:{color:a,background:`${a}22`},children:e.decision===`allow`?`Allowed`:e.decision===`block`?`Blocked`:e.decision===`ask`?`Held`:e.decision===`force`?`Forced`:e.decision===`log`?`Logged`:e.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:du(e.ts_ms)})]})]})]},t)})})]})]},e)})})}function mu(e){let{sessionKey:t,entries:n,loading:r,error:i,playingIndex:a}=e,o=(0,_.useRef)(null),s=(0,_.useRef)(new Map),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(null),f=(0,_.useMemo)(()=>{let e=new Set;for(let t of n)e.add(t.decision);return[...e].sort()},[n]);(0,_.useEffect)(()=>{u&&!f.includes(u)&&d(null)},[u,f]);let p=(0,_.useMemo)(()=>{let e=c.trim().toLowerCase();return!e&&!u?n:n.filter(t=>u&&t.decision!==u?!1:e?t.tool.toLowerCase().includes(e)||t.decision.toLowerCase().includes(e)||(t.rule_id??``).toLowerCase().includes(e)||(t.rule_message??``).toLowerCase().includes(e)||t.input_preview.toLowerCase().includes(e):!0)},[n,c,u]),m=c.trim().length>0||u!==null,h=a>=0?n[a]?.id??null:null;(0,_.useEffect)(()=>{if(!h)return;let e=s.current.get(h);e&&e.scrollIntoView({behavior:`smooth`,block:`nearest`})},[h]);let g=e=>t=>{t?s.current.set(e,t):s.current.delete(e)},v=r?`loading…`:i?`error`:m?`${p.length} / ${n.length}`:`${n.length} event${n.length===1?``:`s`}`;return(0,D.jsxs)(`div`,{className:`flex flex-col h-full min-h-0 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] overflow-hidden`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between px-3 py-1.5 border-b border-[var(--color-line-1)] bg-black/30 shrink-0`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono`,children:[(0,D.jsx)(`span`,{className:`overline text-[var(--color-fg-3)]`,children:`audit log`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] truncate`,title:t,children:t})]}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] tabular-nums`,children:v})]}),!i&&n.length>0&&(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 px-3 py-1.5 border-b border-[var(--color-line-1)] bg-black/20 shrink-0`,children:[(0,D.jsxs)(`div`,{className:`relative flex-1 min-w-[140px]`,children:[(0,D.jsx)(`input`,{type:`text`,value:c,onChange:e=>l(e.target.value),placeholder:`Search tool, rule, input…`,"aria-label":`Search audit log`,className:`w-full bg-black/40 border border-[var(--color-line-1)] rounded-sm pl-2 pr-6 py-1 text-[11px] font-mono text-[var(--color-fg-1)] placeholder:text-[var(--color-fg-4)] focus:outline-none focus:border-[var(--color-hig-blue)]/60`}),c&&(0,D.jsx)(`button`,{type:`button`,onClick:()=>l(``),"aria-label":`Clear search`,className:`absolute right-1 top-1/2 -translate-y-1/2 text-[var(--color-fg-4)] hover:text-[var(--color-fg-1)] text-[13px] leading-none px-1`,children:`×`})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1`,children:[(0,D.jsx)(`button`,{type:`button`,onClick:()=>d(null),className:`px-1.5 py-0.5 rounded-sm text-[10px] font-mono uppercase tracking-wider border transition-colors ${u===null?`border-[var(--color-hig-blue)]/60 bg-[var(--color-hig-blue)]/15 text-[var(--color-fg-1)]`:`border-[var(--color-line-1)] text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)]`}`,children:`all`}),f.map(e=>{let t=Hi[e]??`#6b7280`,n=u===e;return(0,D.jsxs)(`button`,{type:`button`,onClick:()=>d(n?null:e),className:`flex items-center gap-1 px-1.5 py-0.5 rounded-sm text-[10px] font-mono uppercase tracking-wider border transition-colors ${n?`bg-white/[0.06] text-[var(--color-fg-1)]`:`border-[var(--color-line-1)] text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)]`}`,style:n?{borderColor:t}:void 0,children:[(0,D.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 rounded-full shrink-0`,style:{background:t}}),e]},e)})]})]}),(0,D.jsxs)(`div`,{ref:o,className:`flex-1 min-h-0 overflow-y-auto divide-y divide-[var(--color-line-1)]/40`,children:[i&&(0,D.jsx)(`div`,{className:`px-3 py-4 text-[11px] font-mono text-rose-300`,children:i}),!i&&!r&&n.length===0&&(0,D.jsx)(`div`,{className:`px-3 py-4 text-[11px] font-mono text-[var(--color-fg-4)]`,children:`No audit entries for this session yet.`}),!i&&n.length>0&&p.length===0&&(0,D.jsx)(`div`,{className:`px-3 py-4 text-[11px] font-mono text-[var(--color-fg-4)]`,children:`No events match the current filter.`}),p.map(e=>{let t=Hi[e.decision]??`#6b7280`,n=e.id===h,r=e.duration_ns==null?null:e.duration_ns/1e6;return(0,D.jsxs)(`div`,{ref:g(e.id),className:`relative px-3 py-2 transition-colors ${n?`bg-white/[0.04] ring-1 ring-inset ring-sky-400/40`:`hover:bg-white/[0.02]`}`,children:[(0,D.jsx)(`span`,{"aria-hidden":!0,className:`absolute left-0 top-0 bottom-0 w-1`,style:{background:t}}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[11px] font-mono`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider shrink-0`,style:{color:t},children:e.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] truncate`,children:e.tool})]}),(0,D.jsx)(`span`,{className:`shrink-0 text-[10px] text-[var(--color-fg-4)] tabular-nums`,children:hu(e.ts_ms)})]}),(e.rule_id||r!=null)&&(0,D.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[10px] font-mono text-[var(--color-fg-4)]`,children:[e.rule_id&&(0,D.jsxs)(`span`,{className:`truncate`,title:e.rule_id,children:[`rule · `,e.rule_id]}),r!=null&&(0,D.jsx)(`span`,{className:`tabular-nums shrink-0`,children:r<1?`${(r*1e3).toFixed(0)}µs`:`${r.toFixed(2)}ms`})]}),e.rule_message&&(0,D.jsx)(`div`,{className:`mt-1 text-[10px] font-mono text-[var(--color-fg-3)] break-words`,children:e.rule_message}),e.input_preview&&(0,D.jsx)(`pre`,{className:`mt-1 text-[10px] text-[var(--color-fg-3)] whitespace-pre-wrap break-all bg-black/30 rounded-sm px-2 py-1 max-h-24 overflow-y-auto`,children:e.input_preview})]},e.id)})]})]})}function hu(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}var gu=[100,500,1e3,5e3,1e4,1e5];function _u(e){return e>=1e5||e>=1e3?`${e/1e3|0}k`:String(e)}function vu(e){let t=Math.floor(e/100),n=Math.floor(t/600),r=Math.floor(t%600/10),i=t%10;return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}.${i}`}function yu(e){let t=Math.floor(e/100);return`${Math.floor(t/10)}.${t%10}s`}function bu({className:e,onMilestone:t,onRecord:n}){let r=(0,_.useRef)(null),i=(0,_.useRef)(null),[a,o]=(0,_.useState)(0),[s,c]=(0,_.useState)(0),[l,u]=(0,_.useState)(0),[d,f]=(0,_.useState)(0),[p,m]=(0,_.useState)(0),[h,g]=(0,_.useState)(``),[v,y]=(0,_.useState)(!1),[b,x]=(0,_.useState)(!1),S=Ri(),C=Bi(),w=zi(),T=(0,_.useRef)(null),E=(0,_.useRef)(0),O=(0,_.useRef)(0),k=(0,_.useRef)(0),ee=(0,_.useRef)(0),A=(0,_.useRef)(new Set),j=(0,_.useRef)(performance.now());return(0,_.useEffect)(()=>{let e=performance.now();if(sr()){let t=setInterval(()=>{let t=performance.now();r.current&&(r.current.textContent=vu(t-e)),i.current&&(i.current.textContent=yu(t-j.current))},1e3);return()=>clearInterval(t)}let[t]=Ga(()=>{let t=performance.now();r.current&&(r.current.textContent=vu(t-e)),i.current&&(i.current.textContent=yu(t-j.current))});return t},[]),(0,_.useEffect)(()=>{for(let e of w)e.rule_id&&A.current.add(e.rule_id);m(A.current.size)},[]),(0,_.useEffect)(()=>{let e=()=>{let e=Date.now(),t=w.filter(t=>e-t.ts_ms<=6e4),n=new Set(t.map(e=>`${e.client}:${e.agent_id??`solo`}`)).size;f(n)};e();let t=setInterval(e,1e3);return()=>clearInterval(t)},[w]),(0,_.useEffect)(()=>{if(T.current===null){T.current=C,E.current=C;return}if(C<=E.current)return;let e=C-E.current;E.current=C,u(n=>{let r=n+e,i=gu.find(e=>e>ee.current&&r>=e);return i&&(ee.current=i,g(_u(i)),x(!0),t?.(),setTimeout(()=>{g(``),x(!1)},700)),r}),S?.rule_id&&A.current.add(S.rule_id),m(A.current.size),S&&(S.decision===`block`?(O.current=0,o(0),j.current=performance.now()):(O.current+=e,O.current>k.current&&(k.current=O.current,c(k.current),y(!0),n?.(),setTimeout(()=>y(!1),450)),o(O.current)))},[C,S,t,n]),(0,D.jsxs)(`div`,{className:W(`pointer-events-none select-none`,`flex flex-col gap-2 p-3 rounded-md`,`bg-[var(--color-bg-2,#0c0d12)]/95`,`border border-[var(--color-border-1,#1c1f26)]`,`shadow-lg shadow-black/40`,`min-w-[180px] font-mono text-[11px]`,`text-[var(--color-fg-2,#9aa1ad)]`,b&&`milestone-ring`,e),"aria-label":`Live engagement counters`,children:[(0,D.jsx)(xu,{label:`uptime`,children:(0,D.jsx)(`span`,{ref:r,className:`tabular-nums text-[var(--color-fg-0,#e6e8ed)] text-[15px] tracking-tight`,children:`00:00.0`})}),(0,D.jsx)(xu,{label:`evals`,children:(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,D.jsx)(Rs,{value:l,className:`text-[var(--color-fg-0,#e6e8ed)] text-[15px]`}),h&&(0,D.jsxs)(`span`,{className:`text-[10px] text-emerald-400 uppercase tracking-wide`,children:[`+`,h]})]})}),(0,D.jsx)(xu,{label:`since block`,children:(0,D.jsx)(`span`,{ref:i,className:`tabular-nums text-emerald-300 text-[15px]`,children:`0.0s`})}),(0,D.jsx)(xu,{label:`streak / best`,children:(0,D.jsxs)(`span`,{className:W(`tabular-nums text-[15px]`,v?`record-beat`:`text-[var(--color-fg-0,#e6e8ed)]`),children:[(0,D.jsx)(Rs,{value:a,curve:`spring`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4,#5a6071)] mx-1`,children:`/`}),(0,D.jsx)(Rs,{value:s})]})}),(0,D.jsx)(xu,{label:`agents`,children:(0,D.jsx)(Rs,{value:d,className:`text-[var(--color-fg-0,#e6e8ed)] text-[15px]`})}),(0,D.jsx)(xu,{label:`rules`,children:(0,D.jsx)(Rs,{value:p,className:`text-[var(--color-fg-0,#e6e8ed)] text-[15px]`})})]})}function xu({label:e,children:t}){return(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider text-[10px] text-[var(--color-fg-4,#5a6071)]`,children:e}),t]})}function Su(e){let t=new Map;for(let n of e){let e=`${n.client}:${n.agent_id??`solo`}`,r=t.get(e);r?(r.count+=1,n.ts_ms>r.newest_ts_ms&&(r.newest_ts_ms=n.ts_ms)):t.set(e,{client:n.client,agent_id:n.agent_id??`solo`,count:1,newest_ts_ms:n.ts_ms})}return Array.from(t.values()).sort((e,t)=>t.newest_ts_ms===e.newest_ts_ms?t.count-e.count:t.newest_ts_ms-e.newest_ts_ms)}function Cu(e){let{bursts:t,allBursts:n}=e,r=n??t,{toolCounts:i,decisionCounts:a,ruleCounts:o,unmatchedCount:s}=(0,_.useMemo)(()=>{let e=new Map,n=new Map,r=new Map,i=0;for(let a of t)if(e.set(a.tool,(e.get(a.tool)??0)+1),n.set(a.decision,(n.get(a.decision)??0)+1),a.rule_id){let e=r.get(a.rule_id);e?(e.count+=1,e.decisions.add(a.decision)):r.set(a.rule_id,{count:1,decisions:new Set([a.decision])})}else i+=1;return{toolCounts:Array.from(e.entries()).sort((e,t)=>t[1]-e[1]),decisionCounts:Array.from(n.entries()),ruleCounts:Array.from(r.entries()).map(([e,t])=>({id:e,count:t.count,decisions:t.decisions})).sort((e,t)=>t.count-e.count),unmatchedCount:i}},[t]),c=(0,_.useMemo)(()=>Su(r),[r]),l=i[0]?.[1]??0,u=c[0]?.count??0,d=o[0]?.count??0,f=e=>{for(let t of[`block`,`ask`,`force`,`log`,`allow`,`shadow`])if(e.has(t))return Hi[t];return`#6b7280`};return(0,D.jsxs)(`div`,{className:`flex flex-col gap-3 text-[11px] font-mono`,children:[(0,D.jsx)(`div`,{className:`rounded-sm border border-[var(--color-line-0)] bg-[var(--color-surface-0)] p-2 text-[10px] text-[var(--color-fg-3)] leading-relaxed`,children:`Each dot is one tool call by an AI agent. Color encodes the ssg rule decision; lines link calls from the same agent in time order.`}),(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:[`rules · `,o.length,` matched`,s>0&&(0,D.jsxs)(`span`,{className:`ml-2 text-[var(--color-fg-4)] normal-case tracking-normal`,children:[s,` unmatched`]})]}),o.length===0?(0,D.jsx)(`p`,{className:`text-[var(--color-fg-4)]`,children:`no rules matched in window`}):(0,D.jsx)(`ul`,{className:`space-y-0.5`,children:o.slice(0,6).map(e=>{let t=d>0?e.count/d*100:0,n=f(e.decisions);return(0,D.jsxs)(`li`,{className:`grid grid-cols-[1fr_auto] items-center gap-2`,title:`${e.id} — decisions: ${Array.from(e.decisions).join(`, `)}`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0`,style:{background:n},"aria-hidden":!0}),(0,D.jsx)(`a`,{href:`/rules#${encodeURIComponent(e.id)}`,className:`truncate text-[var(--color-fg-2)] hover:text-[var(--color-fg-1)]`,children:e.id}),(0,D.jsx)(`div`,{className:`flex-1 h-1 bg-[var(--color-surface-1)] rounded-sm overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full`,style:{background:n,width:`${t}%`,opacity:.6}})})]}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-4)]`,children:e.count})]},e.id)})})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:`decisions`}),(0,D.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1`,children:[`allow`,`block`,`ask`,`log`,`force`,`shadow`].map(e=>{let t=a.find(([t])=>t===e)?.[1]??0;return(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,D.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0`,style:{background:Hi[e]},"aria-hidden":!0}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] uppercase tracking-wider`,children:e}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] tabular-nums`,children:t})]},e)})})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:[`agents · `,c.length,` active`,n&&n!==t&&(0,D.jsx)(`span`,{className:`ml-2 text-[var(--color-fg-4)] normal-case tracking-normal`,children:`roster: today`})]}),c.length===0?(0,D.jsx)(`p`,{className:`text-[var(--color-fg-4)]`,children:`no agents in window`}):(0,D.jsx)(`ul`,{className:`space-y-0.5`,children:c.slice(0,8).map(e=>{let t=u>0?e.count/u*100:0,n=`${e.client}:${e.agent_id}`,r=Date.now()-e.newest_ts_ms,i=r<5e3;return(0,D.jsxs)(`li`,{className:`grid grid-cols-[1fr_auto] items-center gap-2`,title:`${n} — last eval ${Math.max(0,Math.round(r/1e3))}s ago`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[i?(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft shrink-0`,"aria-hidden":!0}):(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 bg-[var(--color-fg-4)]/40`,"aria-hidden":!0}),(0,D.jsxs)(`span`,{className:`truncate text-[var(--color-fg-2)]`,children:[e.client,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`:`,e.agent_id]})]}),(0,D.jsx)(`div`,{className:`flex-1 h-1 bg-[var(--color-surface-1)] rounded-sm overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full bg-violet-400/60`,style:{width:`${t}%`}})})]}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-4)]`,children:e.count})]},n)})})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:[`tools · `,t.length,` in window`]}),i.length===0?(0,D.jsx)(`p`,{className:`text-[var(--color-fg-4)]`,children:`no tool activity`}):(0,D.jsx)(`ul`,{className:`space-y-0.5`,children:i.slice(0,8).map(([e,t])=>{let n=l>0?t/l*100:0;return(0,D.jsxs)(`li`,{className:`grid grid-cols-[1fr_auto] items-center gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(`span`,{className:`truncate text-[var(--color-fg-2)]`,children:e}),(0,D.jsx)(`div`,{className:`flex-1 h-1 bg-[var(--color-surface-1)] rounded-sm overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full bg-sky-400/60`,style:{width:`${n}%`}})})]}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-4)]`,children:t})]},e)})})]})]})}var wu=320,Tu=8,Eu=12;function Du(e){let{burst:t,anchor:n,onClose:r}=e,i=(0,_.useRef)(null),[a,o]=(0,_.useState)({left:-9999,top:-9999});if((0,_.useEffect)(()=>{if(!t)return;let e=e=>{e.key===`Escape`&&r()},n=e=>{i.current&&!i.current.contains(e.target)&&r()};return document.addEventListener(`keydown`,e),document.addEventListener(`mousedown`,n),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`mousedown`,n)}},[t,r]),(0,_.useLayoutEffect)(()=>{if(!t||!n||!i.current)return;let e=i.current.getBoundingClientRect(),r=window.innerWidth,a=window.innerHeight,s=e.height>0?e.height:280,c=n.x+Eu+wu>r?n.x-Eu-wu:n.x+Eu,l=n.y+Eu+s>a?n.y-Eu-s:n.y+Eu;c=Math.min(Math.max(Tu,c),r-wu-Tu),l=Math.min(Math.max(Tu,l),a-s-Tu),o({left:c,top:l})},[t,n]),(0,_.useEffect)(()=>{o({left:-9999,top:-9999})},[]),!t||!n)return null;let s=Hi[t.decision]??`#6b7280`,c=t.duration_ns/1e6,l=Date.now()-t.ts_ms;return(0,D.jsxs)(`div`,{ref:i,className:`fixed z-50 flex flex-col gap-3 text-[12px] font-mono rounded-md border border-[var(--color-line-1)] bg-[var(--color-surface-1)] shadow-2xl p-4`,style:{left:a.left,top:a.top,width:wu,maxHeight:`80vh`,overflowY:`auto`},children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsx)(`span`,{className:`overline text-[var(--color-fg-3)]`,children:`node · inspect`}),(0,D.jsx)(`button`,{onClick:r,className:`text-[var(--color-fg-4)] hover:text-[var(--color-fg-1)] cursor-pointer`,title:`Close inspector`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`w-2 h-2 rounded-full`,style:{background:s},"aria-hidden":!0}),(0,D.jsx)(`span`,{className:`uppercase tracking-wider`,style:{color:s},children:t.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:t.tool})]}),(0,D.jsxs)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-[11px]`,children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`rule`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)] break-all`,children:t.rule_id??`—`}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`client`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:t.client}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`agent`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:t.agent_id?(0,D.jsx)(`span`,{className:`chip text-violet-300 border-violet-500/30`,children:t.agent_id}):(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`—`})}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`eval duration`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:c<1?`${(c*1e3).toFixed(0)}µs`:`${c.toFixed(2)}ms`}),t.complete_duration_ms!=null&&t.complete_duration_ms>0&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`tool duration`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:t.complete_duration_ms>=1e3?`${(t.complete_duration_ms/1e3).toFixed(2)}s`:`${t.complete_duration_ms.toFixed(0)}ms`})]}),t.message&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`reason`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)] break-words`,children:t.message})]}),(t.input_tokens!=null||t.output_tokens!=null)&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`tokens`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:Au(t.input_tokens,t.output_tokens)})]}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`age`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:Ou(l)}),(0,D.jsx)(`dt`,{className:`text-[var(--color-fg-4)]`,children:`timestamp`}),(0,D.jsx)(`dd`,{className:`text-[var(--color-fg-2)]`,children:new Date(t.ts_ms).toLocaleString()})]}),t.input_preview&&(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`overline text-[var(--color-fg-3)] mb-1`,children:`input`}),(0,D.jsx)(`pre`,{className:`bg-[var(--color-surface-0)] border border-[var(--color-line-0)] rounded-sm p-2 text-[10px] text-[var(--color-fg-2)] whitespace-pre-wrap break-all max-h-48 overflow-y-auto`,children:t.input_preview})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[t.audit_id&&(0,D.jsx)(`a`,{href:`/audit?id=${encodeURIComponent(t.audit_id)}`,className:`chip text-[var(--color-fg-3)] border-[var(--color-line-1)] hover:text-[var(--color-fg-1)]`,title:`Open full audit record`,children:`audit ↗`}),t.rule_id&&(0,D.jsx)(`a`,{href:`/rules#${encodeURIComponent(t.rule_id)}`,className:`chip text-[var(--color-fg-3)] border-[var(--color-line-1)] hover:text-[var(--color-fg-1)]`,title:`Jump to rule`,children:`rule ↗`})]})]})}function Ou(e){if(e<1500)return`just now`;let t=Math.floor(e/1e3);if(t<60)return`${t}s ago`;let n=Math.floor(t/60);return n<60?`${n}m${t%60}s ago`:`${Math.floor(n/60)}h${n%60}m ago`}function ku(e){return e<1e3?String(e):e<1e4?`${(e/1e3).toFixed(1)}K`:e<1e6?`${Math.round(e/1e3)}K`:`${(e/1e6).toFixed(1)}M`}function Au(e,t){let n=[];return e!=null&&n.push(`${ku(e)} in`),t!=null&&n.push(`${ku(t)} out`),n.length>0?n.join(` · `):`—`}var ju=900,Mu=180,Nu=320,Pu=800,Fu=4;function Iu({sessionKey:e}={}){let t=Ri(),n=Bi(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(`idle`),s=(0,_.useRef)([]),c=(0,_.useRef)(-1),l=(0,_.useRef)(0),u=(0,_.useRef)(null);if((0,_.useEffect)(()=>{if(!t||n===c.current||(c.current=n,t.decision!==`block`&&t.decision!==`force`)||e&&Vi(t)!==e)return;let u=Date.now(),d=s.current,f=d[0];if(f&&u-l.current<Pu){f.extra+=1,f.burst=t,f.seq=n,l.current=u;return}if(d.length>=Fu&&d.shift(),d.push({seq:n,burst:t,extra:0}),l.current=u,a===`idle`&&!r){let e=d.shift()??null;e&&(i(e),o(`in`))}},[n,t,e,a,r]),(0,_.useEffect)(()=>{if(a===`idle`)return;let e=null;return a===`in`?e=setTimeout(()=>o(`visible`),Mu):a===`visible`?e=setTimeout(()=>o(`out`),ju):a===`out`&&(e=setTimeout(()=>{let e=s.current.shift()??null;e?(i(e),o(`in`)):(i(null),o(`idle`))},Nu)),u.current=e,()=>{e&&clearTimeout(e)}},[a]),!r)return null;let{burst:d,extra:f}=r,p=Hi[d.decision]??`#ef4444`,m=sr(),h=+(a===`in`||a===`visible`),g=m||a===`in`||a===`visible`?0:-8,v=d.rule_id??`rule`,y=d.decision===`block`?`BLOCKED`:`FORCED`,b=f>0?`${d.tool} · +${f} more in this burst`:`${d.tool} · ${d.client}${d.agent_id?`:${d.agent_id}`:``}`;return(0,D.jsx)(`div`,{className:e?`pointer-events-none absolute top-2 left-1/2 z-30 select-none`:`pointer-events-none fixed top-20 left-1/2 z-40 select-none`,style:{transform:`translateX(-50%) translateY(${g}px) scale(1)`,opacity:h,transition:m?`opacity ${Mu}ms ease-out`:`opacity ${Mu}ms ease-out, transform ${Mu}ms cubic-bezier(0.34, 1.56, 0.64, 1)`},"aria-live":`polite`,"aria-atomic":`true`,children:(0,D.jsxs)(`div`,{className:`flex items-center gap-3 px-5 py-3 rounded-md border bg-black/95 shadow-2xl`,style:{borderColor:p},children:[(0,D.jsx)(`div`,{className:`w-2.5 h-2.5 rounded-full shrink-0`,style:{background:p,boxShadow:m?`none`:`0 0 16px ${p}`}}),(0,D.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`text-[11px] font-mono uppercase tracking-[0.18em]`,style:{color:p},children:[y,` BY SSG`]}),(0,D.jsx)(`div`,{className:`text-[14px] font-mono text-[var(--color-fg-1)] truncate max-w-[420px]`,children:v}),(0,D.jsx)(`div`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] truncate max-w-[420px]`,children:b})]})]})})}var Lu=(0,_.memo)(function(e){let{sessionKey:t,bursts:n,paused:r,selectedId:i,onSelect:a,burstSeq:o,isStale:s,isFadingOut:c,minHeight:l,pinned:u,minimized:d,isFullscreen:f,viewMode:p=`full`,thumbnail:m=!1,onPromote:h,activePanelCount:g=1,onTogglePin:v,onToggleMinimize:y,onToggleFullscreen:b,onClose:x,onFrameTime:S}=e,C=p===`broadcast`,w=!m&&(p===`stream`||p===`broadcast`||f)?`large`:`normal`,T=t.indexOf(`:`),E=T>=0?t.slice(0,T):t,O=T>=0?t.slice(T+1):``,k=(0,_.useRef)(null),[ee,A]=(0,_.useState)(!0),[j,M]=(0,_.useState)(null),te=()=>{let e=k.current;if(!e)return;let t=e.querySelector(`canvas`);t instanceof HTMLCanvasElement&&M(t.toDataURL(`image/png`))},ne=()=>{if(!j)return;let e=document.createElement(`a`),n=t.replace(/[^a-z0-9._-]+/gi,`-`);e.href=j,e.download=`ssg-graph-${n}-${Date.now()}.png`,document.body.appendChild(e),e.click(),e.remove()},N=()=>{!j||!navigator.clipboard?.write||fetch(j).then(e=>e.blob()).then(e=>{let t=new ClipboardItem({"image/png":e});return navigator.clipboard.write([t])}).catch(()=>{})},P=typeof navigator<`u`&&typeof navigator.clipboard?.write==`function`&&typeof ClipboardItem<`u`;(0,_.useEffect)(()=>{if(f){A(!0);return}let e=k.current;if(!e)return;let t=new IntersectionObserver(e=>{for(let t of e)A(t.isIntersecting)},{threshold:.01});return t.observe(e),()=>t.disconnect()},[f]);let F=n.length>0?n[n.length-1]:null,re=F?Hi[F.decision]??`#6b7280`:`#6b7280`,I=F?.decision??null,L=F?.tool??null,R=r||!ee||d,z=(0,_.useMemo)(()=>n.length>24?n.slice(n.length-24):n,[n]);return(0,D.jsxs)(`div`,{ref:k,className:`relative flex flex-col shrink-0 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] overflow-hidden${f?` flex-1 min-h-0`:``}`,style:{minHeight:d||f?void 0:l,opacity:+!c,transform:c?`scale(0.985)`:`scale(1)`,transformOrigin:`center center`,transition:`opacity 1100ms cubic-bezier(0.22, 1, 0.36, 1), transform 1100ms cubic-bezier(0.22, 1, 0.36, 1)`},children:[!C&&(0,D.jsxs)(`header`,{className:`group flex items-center justify-between px-3 py-1.5 border-b border-[var(--color-line-1)] bg-black/30 shrink-0 gap-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono min-w-0`,children:[u&&(0,D.jsx)(`span`,{className:`text-amber-300`,title:`Pinned`,children:`▲`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] uppercase tracking-wider`,children:E}),O&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate`,children:O})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono text-[var(--color-fg-4)]`,children:[L&&(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 max-w-[180px]`,title:I?`latest: ${L} → ${I}`:`latest: ${L}`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0`,style:{background:re}}),(0,D.jsx)(`span`,{className:`truncate text-[var(--color-fg-2)]`,children:L})]}),(0,D.jsxs)(`span`,{className:`hidden md:inline text-[var(--color-fg-4)]`,children:[n.length,`n`]}),s?(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-amber-300`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-amber-400`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:`idle`})]}):(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:`live`})]}),!m&&(0,D.jsxs)(`div`,{className:`flex items-center gap-1 ml-1`,children:[(0,D.jsx)(`button`,{type:`button`,onClick:v,className:`px-1.5 py-0.5 rounded border text-[10px] uppercase tracking-wider transition-colors ${u?`border-amber-500/60 text-amber-300`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:text-amber-300 hover:border-amber-500/40`}`,title:u?`Unpin`:`Pin to top`,children:`pin`}),(0,D.jsx)(`button`,{type:`button`,onClick:y,className:`px-1.5 py-0.5 rounded border border-[var(--color-line-1)] text-[10px] text-[var(--color-fg-3)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,title:d?`Expand`:`Minimize`,children:d?`+`:`–`}),(0,D.jsx)(`button`,{type:`button`,onClick:te,className:`px-1.5 py-0.5 rounded border border-[var(--color-line-1)] text-[10px] text-[var(--color-fg-3)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,title:`Preview PNG snapshot of this panel`,children:`▣`}),(0,D.jsx)(`button`,{type:`button`,onClick:b,className:`px-1.5 py-0.5 rounded border border-[var(--color-line-1)] text-[10px] text-[var(--color-fg-3)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,title:f?`Exit fullscreen`:`Fullscreen`,children:f?`×`:`⛶`}),x&&(0,D.jsx)(`button`,{type:`button`,onClick:x,"aria-label":`Close session ${t}`,className:`px-1.5 py-0.5 rounded border border-[var(--color-line-1)] text-[10px] text-[var(--color-fg-3)] hover:text-rose-300 hover:border-rose-500/40 transition-colors`,title:`End this session on the graph`,children:`╳`})]})]})]}),!d&&!m&&!C&&(0,D.jsx)(_o,{sessionKey:t,className:`rounded-none border-x-0 border-t-0 border-b border-[var(--color-line-1)] shrink-0`}),j&&(0,D.jsxs)(`div`,{className:`absolute inset-0 z-40 flex flex-col items-center justify-center gap-3 bg-black/80 backdrop-blur-sm p-4`,children:[(0,D.jsx)(`img`,{src:j,alt:`Panel snapshot`,className:`max-w-full max-h-[60%] rounded-sm border border-[var(--color-line-1)] object-contain`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[P&&(0,D.jsx)(`button`,{type:`button`,onClick:N,className:`px-3 py-1.5 rounded border border-[var(--color-line-1)] text-[11px] font-mono text-[var(--color-fg-2)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,children:`copy`}),(0,D.jsx)(`button`,{type:`button`,onClick:ne,className:`px-3 py-1.5 rounded border border-[var(--color-line-1)] text-[11px] font-mono text-[var(--color-fg-2)] hover:text-sky-300 hover:border-sky-500/40 transition-colors`,children:`download`}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>M(null),className:`px-3 py-1.5 rounded border border-[var(--color-line-1)] text-[11px] font-mono text-[var(--color-fg-3)] hover:text-rose-300 hover:border-rose-500/40 transition-colors`,children:`close`})]})]}),!d&&(0,D.jsxs)(`div`,{className:`flex-1 min-h-0 relative`,children:[(0,D.jsx)(Iu,{sessionKey:t}),(0,D.jsx)(lo,{bursts:z,paused:R,selectedId:i,onSelect:a,burstSeq:o,compact:!0,activePanelCount:g,labelDensity:w,onFrameTime:S}),m&&(0,D.jsx)(`button`,{type:`button`,onClick:h,"aria-label":`Promote ${E} to spotlight`,title:`Spotlight ${E}${O?` · ${O}`:``}`,className:`absolute inset-0 cursor-pointer bg-transparent hover:bg-sky-400/5 transition-colors`})]})]})}),Ru=200,zu=.9,Bu=40,Vu=32,Hu=480,Uu=`transform 220ms cubic-bezier(0.22, 1, 0.36, 1), opacity 220ms ease-out, fill 320ms ease-out`;function Wu(e){let{playback:t,bursts:n,rangeStart:r,rangeEnd:i,loading:a,onPlayhead:o,onLive:s,onPause:c,onResume:l,on24h:u}=e,d=(0,_.useRef)(null),f=(0,_.useRef)(!1),[p,m]=(0,_.useState)(null),h=Math.max(1,i-r),g=(t.playhead_ms-r)/h*100,v=Math.max(0,Math.min(100,g)),y=(0,_.useMemo)(()=>{let e=[];for(let t=0;t<Ru;t++)e.push({allow:0,block:0,ask:0,other:0});for(let t of n){let n=t.ts_ms;if(n<r||n>i)continue;let a=e[Math.floor((n-r)/h*(Ru-1))];t.decision===`allow`?a.allow++:t.decision===`block`||t.decision===`force`?a.block++:t.decision===`ask`?a.ask++:a.other++}return e},[n,r,i,h]),b=(0,_.useCallback)(e=>{let t=d.current;if(!t)return;let n=t.getBoundingClientRect(),i=Math.max(0,Math.min(1,(e-n.left)/n.width));if(i>=.98){s();return}o(r+i*h)},[r,h,o,s]),x=(0,_.useCallback)(e=>{let t=d.current;if(!t)return;let n=t.getBoundingClientRect(),i=Math.max(0,Math.min(1,(e-n.left)/n.width));m({rel:i,ts:r+i*h})},[r,h]);(0,_.useEffect)(()=>{let e=e=>{f.current&&b(e.clientX)},t=()=>{f.current=!1};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t)}},[b]);let S=t.mode===`live`,C=S?`left ${Hu}ms linear`:`none`;return(0,D.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono uppercase tracking-wider`,children:[(0,D.jsx)(`button`,{onClick:()=>S?c():l(),className:`px-2.5 py-1 rounded-sm border transition-colors cursor-pointer ${S?`border-emerald-500/40 text-emerald-300 hover:bg-emerald-500/10`:`border-amber-500/40 text-amber-300 hover:bg-amber-500/10`}`,title:S?`Pause the live stream`:`Resume updates at this playhead`,children:S?`⏸ pause`:`▶ resume`}),(0,D.jsx)(`button`,{onClick:s,disabled:S,className:`px-2.5 py-1 rounded-sm border transition-colors cursor-pointer ${S?`border-[var(--color-line-1)] text-[var(--color-fg-4)] opacity-50`:`border-sky-500/40 text-sky-300 hover:bg-sky-500/10`}`,title:`Jump to live (now)`,children:`⏭ live`}),(0,D.jsx)(`button`,{onClick:u,className:`px-2.5 py-1 rounded-sm border border-violet-500/40 text-violet-300 hover:bg-violet-500/10 transition-colors cursor-pointer`,title:`Expand to last 24h — window covers now−24h through now. Backfills audit_log so the scrubber shows all recent evals.`,children:`◉ 24h`}),(0,D.jsx)(`div`,{className:`flex-1`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`mode`}),(0,D.jsx)(`span`,{className:S?`text-emerald-300`:t.mode===`paused`?`text-amber-300`:`text-violet-300`,children:t.mode}),a&&(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] animate-pulse`,children:`· backfilling`}),(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`· t=`,Gu(t.playhead_ms)]})]}),(0,D.jsxs)(`div`,{ref:d,className:`relative h-10 w-full rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] cursor-pointer overflow-hidden select-none`,onPointerDown:e=>{f.current=!0,e.target.setPointerCapture?.(e.pointerId),b(e.clientX)},onPointerMove:e=>x(e.clientX),onPointerLeave:()=>m(null),children:[a&&(0,D.jsx)(`div`,{className:`absolute inset-0 pointer-events-none opacity-40 shimmer`,"aria-hidden":!0}),(0,D.jsxs)(`svg`,{viewBox:`0 0 ${Ru} ${Bu}`,preserveAspectRatio:`none`,className:`absolute inset-0 w-full h-full pointer-events-none`,"aria-hidden":!0,children:[[.25,.5,.75].map(e=>(0,D.jsx)(`line`,{x1:e*Ru,x2:e*Ru,y1:0,y2:Bu,stroke:`var(--color-line-1)`,strokeWidth:.3,strokeDasharray:`1,2`,opacity:.55},e)),y.map((e,t)=>{let n=e.allow+e.block+e.ask+e.other,r=Math.min(Vu,n*3),i=n===0?0:r/Vu,a=e.block>0?Hi.block:e.ask>0?Hi.ask:e.other>0&&e.allow===0?Hi.log:Hi.allow;return(0,D.jsx)(`rect`,{x:t+.05,y:Bu-Vu,width:zu,height:Vu,rx:.3,fill:a,style:{opacity:n===0?0:.78,transform:`scaleY(${i})`,transformOrigin:`50% 100%`,transformBox:`fill-box`,transition:Uu}},t)})]}),p&&(0,D.jsx)(`div`,{className:`absolute top-0 bottom-0 w-px bg-white/15 pointer-events-none`,style:{left:`${p.rel*100}%`},"aria-hidden":!0}),(0,D.jsx)(`div`,{className:`absolute top-0 bottom-0 pointer-events-none`,style:{left:`${v}%`,width:`1px`,background:`linear-gradient(to bottom, rgba(125,211,252,0.85), rgba(56,189,248,1) 30%, rgba(56,189,248,0.85))`,boxShadow:`0 0 6px rgba(56,189,248,0.55)`,transition:C,willChange:`left`},children:(0,D.jsx)(`div`,{className:`absolute -top-0.5 -translate-x-1/2 w-2 h-2 rotate-45 bg-sky-300`,style:{boxShadow:`0 0 6px rgba(56,189,248,0.7)`}})}),S&&(0,D.jsx)(`div`,{className:`absolute top-0 right-0 bottom-0 pointer-events-none`,style:{width:`8px`,background:`linear-gradient(to left, rgba(74,222,128,0.55), rgba(74,222,128,0))`},"aria-hidden":!0,children:(0,D.jsx)(`div`,{className:`absolute top-0 right-0 bottom-0 w-[2px] bg-emerald-400 pulse-soft`})})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between text-[10px] font-mono text-[var(--color-fg-4)]`,children:[(0,D.jsx)(`span`,{children:Ku(r)}),(0,D.jsx)(`span`,{className:`uppercase tracking-wider transition-colors ${p?`text-sky-300`:``}`,children:p?`↳ ${Ku(p.ts)}`:`${qu(t.window_ms)} window`}),(0,D.jsx)(`span`,{children:Ku(i)})]})]})}function Gu(e){let t=Date.now()-e;if(Math.abs(t)<1500)return`live`;let n=Math.round(t/1e3);if(n<60)return`−${n}s`;let r=Math.floor(n/60);return r<60?`−${r}m${n%60}s`:`−${Math.floor(r/60)}h${r%60}m`}function Ku(e){return new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function qu(e){return e<6e4?`${Math.round(e/1e3)}s`:e<36e5?`${Math.round(e/6e4)}m`:`${Math.round(e/36e5)}h`}var Ju=80,Yu=600,Xu=Object.freeze({stop:()=>{},count:0}),Zu=new Set([`allow`,`block`,`ask`,`log`,`force`,`shadow`]);function Qu(e){if(!Ie()||e.length===0)return Xu;let t=[],n=!1,r=0;for(let i=0;i<e.length;i++){let a=e[i];if(i>0){let t=e[i-1],n=Math.max(0,a.ts_ms-t.ts_ms),o=Ju+Math.log2(1+n)*14;r+=Math.max(Ju,Math.min(Yu,o))}let o=Zu.has(a.decision)?a.decision:null;if(!o)continue;let s=setTimeout(()=>{n||He(o)},r);t.push(s)}return{count:t.length,stop(){if(!n){n=!0;for(let e of t)clearTimeout(e);t.length=0}}}}var $u=1200,ed=3e4,td=3e3,nd=6,rd=3,id=`graph.panelState.v1`,ad=14400*1e3;function od(e,t){let n=new Map;for(let t of e){let e=Vi(t),r=n.get(e);r?r.push(t):n.set(e,[t])}for(let[e,r]of n){let i=t.get(e);i&&i.length===r.length&&i[i.length-1]===r[r.length-1]&&n.set(e,i)}return n}function sd(){if(typeof window>`u`)return new Map;try{let e=window.localStorage.getItem(id);if(!e)return new Map;let t=JSON.parse(e);return new Map(Object.entries(t))}catch{return new Map}}function cd(e){if(!(typeof window>`u`))try{let t={};for(let[n,r]of e)t[n]=r;window.localStorage.setItem(id,JSON.stringify(t))}catch{}}function ld(){let e=ca(),t=Bi(),n=Ri(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(null),s=(0,_.useCallback)((e,t)=>{i(e),o(t??null)},[]),c=Hc();(0,_.useEffect)(()=>{n&&(n.decision===`block`?c.play(`block`):n.decision===`force`&&c.play(`force`))},[c.play,n]);let l=(0,_.useCallback)(()=>c.play(`milestone`),[c]),u=(0,_.useCallback)(()=>c.play(`record`),[c]),[d,f]=(0,_.useState)(()=>{if(typeof window>`u`)return`full`;try{let e=window.localStorage.getItem(`graph.viewMode.v1`);if(e===`full`||e===`feed`||e===`stream`||e===`broadcast`)return e}catch{}return`full`});(0,_.useEffect)(()=>{if(!(typeof window>`u`))try{window.localStorage.setItem(`graph.viewMode.v1`,d)}catch{}},[d]),(0,_.useEffect)(()=>{let e=e=>e===`full`?`feed`:e===`feed`?`stream`:e===`stream`?`broadcast`:`full`,t=t=>{if(t.key===`Escape`&&d!==`full`){f(`full`);return}if(t.key===`b`||t.key===`B`){let n=t.target?.tagName;if(n===`INPUT`||n===`TEXTAREA`)return;f(e)}};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[d]);let p=d===`broadcast`,m=d===`stream`,h=d===`feed`,g=m||p,v=p,y=m,[b,x]=(0,_.useState)(()=>{if(typeof window>`u`)return!1;try{return window.localStorage.getItem(`ssg.sfx.enabled`)===null}catch{return!1}}),S=(0,_.useCallback)(()=>{c.toggle(),x(!1)},[c]),[C,w]=(0,_.useState)(()=>typeof window<`u`&&window.matchMedia(`(max-width: 767px)`).matches);(0,_.useEffect)(()=>{let e=window.matchMedia(`(max-width: 767px)`),t=e=>w(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let[T,E]=(0,_.useState)(!1),O=(0,_.useRef)(null),k=(0,_.useCallback)(async e=>{try{await fetch(`/api/json/graph/close-sessions`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`same-origin`,body:JSON.stringify(e.length>0?{session_keys:e}:{})})}catch{}E(!1),O.current&&clearTimeout(O.current)},[]),ee=(0,_.useCallback)(e=>{if(!T){E(!0),O.current&&clearTimeout(O.current),O.current=setTimeout(()=>E(!1),3e3);return}k(e)},[T,k]);(0,_.useEffect)(()=>()=>{O.current&&clearTimeout(O.current)},[]);let A=(0,_.useRef)(new Map),j=(0,_.useRef)(0),[M,te]=(0,_.useState)({fps:0,active:0,hitches:0}),ne=(0,_.useCallback)((e,t)=>{A.current.set(e,t),t>33&&(j.current+=1)},[]);(0,_.useEffect)(()=>{let e=setInterval(()=>{let e=A.current,t=j.current;if(j.current=0,e.size===0){te(e=>e.active===0?e:{fps:0,active:0,hitches:0});return}let n=0;for(let t of e.values())n+=t;let r=n/e.size,i=r>0?Math.max(1,Math.round(1e3/r)):0;te(n=>n.fps===i&&n.active===e.size&&n.hitches===t?n:{fps:i,active:e.size,hitches:t})},1e3);return()=>clearInterval(e)},[]);let{bursts:N,playback:P,oldest_known_ms:F,newest_known_ms:re,loading_backfill:I}=e.snapshot,L=(0,_.useRef)(new Map),R=(0,_.useMemo)(()=>{let e=od(N,L.current);return L.current=e,e},[N]),[z,ie]=(0,_.useState)(()=>sd()),[ae,oe]=(0,_.useState)(null);(0,_.useEffect)(()=>{cd(z)},[z]),(0,_.useEffect)(()=>{let e=Date.now(),t=!1,n=new Map(z);for(let r of R.keys())n.has(r)||(n.set(r,{pinned:!1,pinnedAt:0,minimized:!1,firstSeenAt:e}),t=!0);for(let[r,i]of n)R.has(r)||i.pinned||e-i.firstSeenAt<ad||(n.delete(r),t=!0);t&&ie(n)},[R,z]);let se=(0,_.useRef)(new Map),ce=(0,_.useRef)(new Set),le=(0,_.useRef)(new Map),[,ue]=(0,_.useState)(0);(0,_.useEffect)(()=>{let e=performance.now(),t=se.current,n=ce.current,r=le.current,i=new Set;for(let[e,n]of R)i.add(e),r.set(e,n.slice()),t.delete(e);for(let a of n)if(!i.has(a)&&!t.has(a)){let n=r.get(a)??[],i=n[n.length-1]?.ts_ms??0;t.set(a,{bursts:n,diedAt:e,newestTs:i})}for(let[n,i]of t)e-i.diedAt>=$u&&(t.delete(n),r.delete(n));if(ce.current=i,t.size>0){let n=1/0;for(let e of t.values())n=Math.min(n,e.diedAt+$u);let r=Math.max(16,n-e+16),i=setTimeout(()=>ue(e=>e+1),r);return()=>clearTimeout(i)}},[R]);let de=(0,_.useCallback)(e=>{ie(t=>{let n=new Map(t),r=n.get(e)??{pinned:!1,pinnedAt:0,minimized:!1,firstSeenAt:Date.now()};return n.set(e,{...r,pinned:!r.pinned,pinnedAt:r.pinned?0:Date.now()}),n})},[]),fe=(0,_.useCallback)(e=>{ie(t=>{let n=new Map(t),r=n.get(e)??{pinned:!1,pinnedAt:0,minimized:!1,firstSeenAt:Date.now()};return n.set(e,{...r,minimized:!r.minimized}),n})},[]),pe=(0,_.useCallback)(e=>{oe(t=>t===e?null:e)},[]);(0,_.useEffect)(()=>{if(!ae)return;let e=e=>{e.key===`Escape`&&oe(null)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ae]);let me=(0,_.useRef)(null),[he,ge]=(0,_.useState)(null);(0,_.useEffect)(()=>{if(!ae){me.current?.stop(),me.current=null,ge(null);return}let e=!1;ge({sessionKey:ae,entries:[],loading:!0,error:null});let t=`/api/json/graph/session-audit?session_key=${encodeURIComponent(ae)}`;return fetch(t,{credentials:`same-origin`}).then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(t=>{if(e)return;let n=Array.isArray(t.rows)?t.rows:[];ge({sessionKey:ae,entries:n,loading:!1,error:null});let r=n.map(e=>({ts_ms:e.ts_ms,decision:e.decision,tool:e.tool}));me.current?.stop(),me.current=Qu(r)}).catch(t=>{e||ge({sessionKey:ae,entries:[],loading:!1,error:t instanceof Error?t.message:`failed to load audit log`})}),()=>{e=!0,me.current?.stop(),me.current=null}},[ae]);let B=(0,_.useMemo)(()=>{let e={pinned:!1,pinnedAt:0,minimized:!1,firstSeenAt:Date.now()},t=[];for(let[n,r]of R){let i=r[r.length-1]?.ts_ms??0;t.push({key:n,bursts:r,newestTs:i,fadingOutAt:null,state:z.get(n)??e})}for(let[n,r]of se.current)R.has(n)||t.push({key:n,bursts:r.bursts,newestTs:r.newestTs,fadingOutAt:r.diedAt,state:z.get(n)??e});return t.sort((e,t)=>e.state.pinned===t.state.pinned?e.state.pinned&&t.state.pinned?e.state.pinnedAt-t.state.pinnedAt:e.state.firstSeenAt-t.state.firstSeenAt:e.state.pinned?-1:1),t},[R,z]),_e=(0,_.useMemo)(()=>{if(!r)return null;for(let e of N)if((e.audit_id??`${e.ts_ms}:${e.tool}`)===r||r.startsWith(`${e.ts_ms}:${e.tool}`))return e;return null},[N,r]),[ve,ye]=(0,_.useState)(null),be=(0,_.useRef)(null),xe=(0,_.useMemo)(()=>{if(B.length===0)return be.current=null,null;if(ve!=null&&B.some(e=>e.key===ve))return be.current=ve,ve;let e=B.filter(e=>e.state.pinned);if(e.length>0)return e.sort((e,t)=>t.state.pinnedAt-e.state.pinnedAt),be.current=e[0].key,e[0].key;let t=B[0];for(let e of B)e.newestTs>t.newestTs&&(t=e);let n=be.current;if(n!=null&&n!==t.key){let e=B.find(e=>e.key===n);if(e&&Date.now()-e.newestTs<td)return n}return be.current=t.key,t.key},[B,ve]);(0,_.useEffect)(()=>{ve!=null&&(B.some(e=>e.key===ve)||ye(null))},[ve,B]),(0,_.useEffect)(()=>{ye(null)},[]);let V=(0,_.useMemo)(()=>{if(B.length===0)return{hero:null,grid:[],rail:[],overflow:[]};if(d===`full`||d===`feed`)return{hero:null,grid:B.slice(0,nd),rail:B.slice(nd),overflow:[]};let e=B.find(e=>e.key===xe)??B[B.length-1],t=B.filter(t=>t.key!==e.key);return d===`broadcast`?{hero:e,grid:[],rail:[],overflow:t}:{hero:e,grid:[],rail:t.slice(0,rd),overflow:t.slice(rd)}},[B,d,xe]),Se=(0,_.useCallback)(e=>{ye(e)},[]),Ce=(0,_.useCallback)(()=>{ye(null)},[]),we=(0,_.useMemo)(()=>{let e=new Map,t=new Map,n=new Map,r=new Map,i=new Map,a=new Map;for(let o of B){let s=o.key;e.set(s,()=>de(s)),t.set(s,()=>fe(s)),n.set(s,()=>pe(s)),r.set(s,()=>void k([s])),i.set(s,e=>ne(s,e)),a.set(s,()=>Se(s))}return{onTogglePin:e,onToggleMinimize:t,onToggleFullscreen:n,onClose:r,onFrameTime:i,onPromote:a}},[de,fe,pe,k,ne,Se,B]);(0,_.useEffect)(()=>{let e=new Set(B.map(e=>e.key)),t=A.current;for(let n of Array.from(t.keys()))e.has(n)||t.delete(n)},[B]);let Te=(0,_.useMemo)(()=>{let e=n?.counters,t=e?.total??0,r=(e?.block??0)+(e?.force??0),i=0;if(N.length>0){let e=0,t=N.slice(-100);for(let n of t)e+=n.duration_ns;i=e/t.length/1e6}return{evals:t,blocks:r,avgMs:i,agents:B.length}},[n,N,B.length]),Ee=Math.min(F,P.playhead_ms-P.window_ms),De=Math.max(re,P.playhead_ms),Oe=V.grid.length,ke=C||Oe<=1?1:Oe<=4?2:3,Ae=Math.max(1,Math.ceil(Math.max(1,Oe)/ke)),je=Oe<=1||C?360:180,Me=ae?B.find(e=>e.key===ae):null,Ne=e=>e>=1e4?`${Math.round(e/1e3)}k`:e.toLocaleString();return(0,D.jsxs)(`div`,{className:`grid gap-3 md:h-[calc(100dvh-4.5rem)] md:min-h-[560px] ${g?`grid-rows-[auto_minmax(0,1fr)]`:`grid-rows-[auto_minmax(0,1fr)_auto]`} ${p?`bg-black`:``}`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between flex-wrap gap-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,D.jsx)(`h1`,{className:`text-sm font-mono uppercase tracking-wider text-[var(--color-fg-1)]`,children:`graph intelligence`}),!p&&(0,D.jsx)(`span`,{className:`chip text-sky-300 border-sky-500/30`,children:`real-time tool-use`}),P.mode===`live`?(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft`}),`streaming`]}):(0,D.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-amber-300`,children:[(0,D.jsx)(`span`,{className:`status-dot bg-amber-400`}),P.mode]}),(0,D.jsxs)(`span`,{className:`flex items-center gap-x-3 gap-y-1 flex-wrap text-[11px] font-mono text-[var(--color-fg-3)] pl-3 border-l border-[var(--color-line-1)]`,children:[(0,D.jsxs)(`span`,{title:`Total evaluations since daemon start`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`↑`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Ne(Te.evals)}),` `,(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:`evals`})]}),(0,D.jsxs)(`span`,{title:`Block + force decisions — dangerous tool calls intercepted by SSG rules`,children:[(0,D.jsx)(`span`,{className:`text-rose-400`,children:`⛔`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Ne(Te.blocks)}),` `,(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:`blocks`})]}),(0,D.jsxs)(`span`,{className:`hidden md:inline`,title:`Mean eval latency over the last 100 bursts`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`⏱`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Te.avgMs<1?`${(Te.avgMs*1e3).toFixed(0)}µs`:`${Te.avgMs.toFixed(1)}ms`})]}),(0,D.jsxs)(`span`,{title:`Concurrent agent sessions in this window`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`⌥`}),` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:Te.agents}),` `,(0,D.jsxs)(`span`,{className:`hidden sm:inline`,children:[`agent`,Te.agents===1?``:`s`]})]})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[!p&&(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:[N.length,`n · window `,Math.round(P.window_ms/1e3),`s`]}),(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] tabular-nums`,title:`Average RAF interval across ${M.active} canvas${M.active===1?``:`es`}${M.hitches>0?` · ${M.hitches} hitch${M.hitches===1?``:`es`} (>33ms frames)`:``}`,children:[M.active===0?`—`:`${M.fps}fps${M.hitches>0?` (${M.hitches}h)`:``}`,` · `,M.active,`/`,B.length]}),(0,D.jsx)(`div`,{role:`group`,"aria-label":`Graph view mode`,"data-tutorial":`graph-views`,className:`inline-flex items-stretch rounded border border-[var(--color-line-1)] overflow-hidden text-[10px] font-mono uppercase tracking-wider`,title:`View mode — B cycles, Esc returns to full`,children:[`full`,`feed`,`stream`,`broadcast`].map(e=>{let t=d===e;return(0,D.jsx)(`button`,{type:`button`,onClick:()=>f(e),"aria-pressed":t,title:e===`full`?`Full dashboard — sidebar, timeline, all controls`:e===`feed`?`Feed mode — vertical timeline of tool calls for non-technical users`:e===`stream`?`Stream mode — spotlight layout for Twitch/YouTube viewers`:`Broadcast mode — pure canvas for OBS scenes (Esc to exit)`,className:`px-2 py-0.5 transition-colors cursor-pointer ${t?e===`broadcast`?`bg-amber-500/15 text-amber-300`:e===`stream`?`bg-sky-500/15 text-sky-300`:e===`feed`?`bg-emerald-500/15 text-emerald-300`:`bg-[var(--color-fg-4)]/10 text-[var(--color-fg-1)]`:`text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)] hover:bg-white/5`}`,children:e===`broadcast`?`cast`:e},e)})}),(0,D.jsx)(`button`,{type:`button`,onClick:S,className:`chip cursor-pointer transition-colors ${b&&!c.enabled?`border-amber-500/60 text-amber-300 animate-pulse`:`hover:border-sky-500/50 hover:text-sky-300`}`,title:c.enabled?`Mute stream sounds`:`Enable stream sounds`,children:c.enabled?`SFX ON`:b?`🔊 enable cues`:`SFX OFF`}),!p&&B.length>0&&(0,D.jsx)(`div`,{"aria-live":`polite`,children:(0,D.jsx)(`button`,{type:`button`,"aria-label":`Clear all visible graph sessions`,"data-tutorial":`graph-clear`,onClick:()=>ee(B.filter(e=>!e.fadingOutAt).map(e=>e.key)),className:`chip cursor-pointer transition-colors ${T?`border-rose-500/60 text-rose-300`:`hover:border-rose-500/40 hover:text-rose-300`}`,title:`Close all active sessions on the graph — equivalent to /clear but reflects on the graph`,children:T?`confirm clear ${B.filter(e=>!e.fadingOutAt).length}`:`clear`})})]})]}),(0,D.jsxs)(`div`,{"data-tutorial":`graph-panels`,className:`grid grid-cols-1 ${v?``:y?`lg:grid-cols-[1fr_240px]`:`lg:grid-cols-[1fr_300px]`} gap-3 min-h-0 md:overflow-hidden`,children:[(0,D.jsx)(`div`,{className:`flex flex-col gap-3 min-h-0 min-w-0`,children:h?(0,D.jsx)(`div`,{className:`flex-1 flex flex-col min-h-0 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] overflow-hidden`,children:(0,D.jsx)(pu,{bursts:N,selectedId:r,onSelect:s})}):B.length===0?(0,D.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] text-center px-4`,style:{minHeight:240},children:[(0,D.jsx)(`p`,{className:`overline mb-2 text-[var(--color-fg-3)]`,children:`graph · idle`}),(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] max-w-[280px]`,children:`No active sessions in the current window. Each session will render as its own tree as bursts arrive.`})]}):(0,D.jsxs)(D.Fragment,{children:[V.hero&&(ae==null||ae===V.hero.key)&&(0,D.jsxs)(`div`,{className:`flex-1 min-h-0 flex flex-col gap-2`,children:[ve!=null&&(0,D.jsx)(`button`,{type:`button`,onClick:Ce,className:`self-end chip text-amber-300 border-amber-500/40 hover:border-amber-400 cursor-pointer text-[10px]`,title:`Release manual spotlight — return to auto-follow`,children:`spotlight: locked · release ↺`}),(0,D.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,D.jsx)(Lu,{sessionKey:V.hero.key,bursts:V.hero.bursts,paused:P.mode!==`live`||V.hero.fadingOutAt!=null,selectedId:r,onSelect:s,burstSeq:t,isStale:V.hero.fadingOutAt!=null||P.playhead_ms-V.hero.newestTs>ed,isFadingOut:V.hero.fadingOutAt!=null,minHeight:0,pinned:V.hero.state.pinned,minimized:V.hero.state.minimized,isFullscreen:!1,viewMode:d,activePanelCount:1,onTogglePin:we.onTogglePin.get(V.hero.key),onToggleMinimize:we.onToggleMinimize.get(V.hero.key),onToggleFullscreen:we.onToggleFullscreen.get(V.hero.key),onClose:we.onClose.get(V.hero.key),onFrameTime:we.onFrameTime.get(V.hero.key)},V.hero.key)})]}),V.grid.length>0&&(0,D.jsx)(`div`,{className:`flex-1 grid gap-3 min-h-0 min-w-0`,style:{gridTemplateColumns:`repeat(${ke}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${Ae}, minmax(180px, 1fr))`},children:V.grid.map(e=>{let n=e.fadingOutAt!=null||P.playhead_ms-e.newestTs>ed;return ae!=null&&ae!==e.key?null:(0,D.jsx)(Lu,{sessionKey:e.key,bursts:e.bursts,paused:P.mode!==`live`||e.fadingOutAt!=null,selectedId:r,onSelect:s,burstSeq:t,isStale:n,isFadingOut:e.fadingOutAt!=null,minHeight:je,pinned:e.state.pinned,minimized:e.state.minimized,isFullscreen:!1,viewMode:d,activePanelCount:V.grid.length,onTogglePin:we.onTogglePin.get(e.key),onToggleMinimize:we.onToggleMinimize.get(e.key),onToggleFullscreen:we.onToggleFullscreen.get(e.key),onClose:we.onClose.get(e.key),onFrameTime:we.onFrameTime.get(e.key)},e.key)})}),V.rail.length>0&&(0,D.jsxs)(`div`,{className:`shrink-0 flex flex-col gap-1`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between text-[10px] font-mono text-[var(--color-fg-4)] uppercase tracking-wider`,children:[(0,D.jsxs)(`span`,{children:[d===`full`?`overflow rail`:`spotlight rail`,` · `,V.rail.length,` session`,V.rail.length===1?``:`s`]}),V.overflow.length>0&&(0,D.jsxs)(`span`,{title:V.overflow.map(e=>e.key).join(`
|
|
15
15
|
`),children:[`+`,V.overflow.length,` more`]})]}),(0,D.jsx)(`div`,{className:`grid gap-2`,style:{gridTemplateColumns:`repeat(${Math.min(V.rail.length,4)}, minmax(0, 1fr))`,gridAutoRows:`110px`},children:V.rail.map(e=>{let n=e.fadingOutAt!=null||P.playhead_ms-e.newestTs>ed;return ae!=null&&ae!==e.key?null:(0,D.jsx)(Lu,{sessionKey:e.key,bursts:e.bursts,paused:P.mode!==`live`||e.fadingOutAt!=null,selectedId:r,onSelect:s,burstSeq:t,isStale:n,isFadingOut:e.fadingOutAt!=null,minHeight:110,pinned:e.state.pinned,minimized:e.state.minimized,isFullscreen:!1,viewMode:d,thumbnail:!0,onPromote:we.onPromote.get(e.key),activePanelCount:V.rail.length+1,onTogglePin:we.onTogglePin.get(e.key),onToggleMinimize:we.onToggleMinimize.get(e.key),onToggleFullscreen:we.onToggleFullscreen.get(e.key),onClose:we.onClose.get(e.key),onFrameTime:we.onFrameTime.get(e.key)},e.key)})})]}),d===`broadcast`&&V.overflow.length>0&&(0,D.jsxs)(`div`,{className:`shrink-0 self-end pointer-events-none chip text-[var(--color-fg-3)] border-[var(--color-line-1)]`,children:[`+`,V.overflow.length,` more session`,V.overflow.length===1?``:`s`,` off-screen`]})]})}),!v&&(0,D.jsxs)(`aside`,{"data-tutorial":`graph-inspector`,className:`flex flex-col gap-2 min-w-0 min-h-0 overflow-y-auto`,children:[(0,D.jsx)(bu,{onMilestone:l,onRecord:u}),!y&&(0,D.jsx)(`section`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3`,children:(0,D.jsx)(Cu,{bursts:N,allBursts:e.allBursts})}),(0,D.jsx)(Du,{burst:_e,anchor:a,onClose:()=>{i(null),o(null)}})]})]}),!g&&(0,D.jsx)(`section`,{"data-tutorial":`graph-timeline`,className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3`,children:(0,D.jsx)(Wu,{playback:P,bursts:N,rangeStart:Ee,rangeEnd:De,loading:I,onPlayhead:t=>e.setPlayhead(t),onLive:()=>e.jumpToLive(),onPause:()=>e.setMode(`paused`),onResume:()=>e.setMode(`scrubbing`),on24h:()=>e.jumpTo24h()})}),p&&(0,D.jsxs)(`div`,{className:`pointer-events-none fixed bottom-3 right-4 flex flex-col items-end gap-1 z-30`,children:[(0,D.jsx)(`span`,{className:`text-[11px] font-mono uppercase tracking-[0.18em] text-[var(--color-fg-3)]`,children:`sigmashake gov`}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:`broadcast mode · press B or Esc to exit`})]}),Me&&(0,D.jsxs)(`div`,{className:`fixed inset-0 z-50 bg-black/90 backdrop-blur-sm flex p-6 gap-4`,children:[(0,D.jsx)(`div`,{className:`flex-1 flex flex-col min-w-0 min-h-0`,children:(0,D.jsx)(Lu,{sessionKey:Me.key,bursts:Me.bursts,paused:P.mode!==`live`||Me.fadingOutAt!=null,selectedId:r,onSelect:s,burstSeq:t,isStale:Me.fadingOutAt!=null||P.playhead_ms-Me.newestTs>ed,isFadingOut:!1,minHeight:0,pinned:Me.state.pinned,minimized:!1,isFullscreen:!0,viewMode:d,onTogglePin:()=>de(Me.key),onToggleMinimize:()=>fe(Me.key),onToggleFullscreen:()=>pe(Me.key)},`fs-${Me.key}`)}),(0,D.jsx)(`aside`,{className:`hidden md:flex shrink-0 w-[380px] lg:w-[420px] flex-col min-h-0`,children:(0,D.jsx)(mu,{sessionKey:Me.key,entries:he?.sessionKey===Me.key?he.entries:[],loading:he?.sessionKey===Me.key?he.loading:!0,error:he?.sessionKey===Me.key?he.error:null,playingIndex:-1})})]})]})}function ud(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)(`idle`),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)([]),[c,l]=(0,_.useState)(!1);async function u(){l(!0),a(``);try{let e=await fetch(`/api/hub/device-start`,{method:`POST`,headers:{Accept:`application/json`,...U()}}),n=await e.json();if(!e.ok){let t=n;t.error===`not_configured`?(r(`not_configured`),s(t.setup_steps??[]),a(t.message??`GitHub OAuth not configured.`)):(a(n.error??`HTTP ${e.status}`),r(`error`));return}t(n),r(`polling`)}catch(e){a(e instanceof Error?e.message:`Failed to start`),r(`error`)}finally{l(!1)}}return(0,_.useEffect)(()=>{if(n!==`polling`||!e)return;let t=setInterval(async()=>{try{let n=await(await fetch(`/api/hub/device-poll?flow=${e.flow_id}`,{headers:{Accept:`application/json`}})).json();n.status===`complete`?(clearInterval(t),r(`done`),a(`connected as @${n.session?.login??`GitHub`} — you can now publish rulesets`)):(n.status===`expired`||n.status===`error`)&&(clearInterval(t),r(`error`),a(n.error??`Authentication failed`))}catch{}},3e3);return()=>clearInterval(t)},[n,e]),(0,D.jsxs)(`div`,{className:`max-w-lg mx-auto space-y-5`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`a`,{href:`/hub`,className:`inline-flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-brand)] transition-colors`,children:[(0,D.jsx)(`svg`,{width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,children:(0,D.jsx)(`polyline`,{points:`15 18 9 12 15 6`})}),`back to hub`]}),(0,D.jsx)(`h1`,{className:`text-xl font-medium tracking-tight mt-2 text-[var(--color-fg-0)]`,children:`Connect GitHub`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-3)] mt-1 font-mono`,children:`authenticate with github to publish rulesets to the hub`})]}),n===`not_configured`&&(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{className:`space-y-4`,children:[(0,D.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,D.jsx)(`span`,{className:`text-amber-300 shrink-0 mt-0.5`,children:(0,D.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10`}),(0,D.jsx)(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`12`}),(0,D.jsx)(`line`,{x1:`12`,y1:`16`,x2:`12.01`,y2:`16`})]})}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`text-sm font-medium text-[var(--color-fg-0)]`,children:`GitHub OAuth not configured`}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--color-fg-2)] mt-1 leading-relaxed`,children:i})]})]}),(0,D.jsxs)(`div`,{className:`border-t border-[var(--color-line-0)] pt-4`,children:[(0,D.jsx)(`div`,{className:`overline mb-3`,children:`setup steps`}),(0,D.jsx)(`ol`,{className:`space-y-2`,children:o.map((e,t)=>(0,D.jsxs)(`li`,{className:`flex items-start gap-2.5 text-xs text-[var(--color-fg-1)]`,children:[(0,D.jsx)(`span`,{className:`shrink-0 w-5 h-5 rounded-sm bg-[var(--color-surface-2)] border border-[var(--color-line-1)] text-[var(--color-fg-3)] text-[10px] font-mono flex items-center justify-center tabular-nums`,children:t+1}),(0,D.jsx)(`span`,{className:`mt-0.5 leading-relaxed`,children:e.replace(/^\d+\.\s+/,``)})]},t))})]}),(0,D.jsxs)(`div`,{className:`bg-[var(--color-surface-0)] border border-[var(--color-line-1)] rounded-sm p-3`,children:[(0,D.jsx)(`div`,{className:`overline mb-1.5`,children:`quick start`}),(0,D.jsx)(`code`,{className:`text-[11px] text-[var(--color-brand)]/90 font-mono`,children:`export SSG_GITHUB_CLIENT_ID=<your-client-id>`}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] mt-1`,children:[`then restart:`,` `,(0,D.jsx)(`code`,{className:`text-[var(--color-fg-1)]`,children:`ssg serve`})]})]}),(0,D.jsx)(`a`,{href:`https://github.com/settings/applications/new`,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-brand)] hover:underline`,children:`create github oauth app →`})]})}),n===`idle`&&(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{children:[(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-2)] mb-4 leading-relaxed`,children:`This uses GitHub's device authorization flow — no redirect URIs needed. You'll be shown a code to enter at github.com.`}),(0,D.jsx)(K,{onClick:u,disabled:c,variant:`primary`,children:c?`starting…`:`connect with github`})]})}),e&&n===`polling`&&(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{className:`space-y-4`,children:[(0,D.jsxs)(`div`,{className:`text-center`,children:[(0,D.jsx)(`div`,{className:`overline mb-2`,children:`open this url in your browser`}),(0,D.jsx)(`a`,{href:e.verification_uri,target:`_blank`,rel:`noreferrer`,className:`text-sm text-[var(--color-brand)] hover:underline font-mono`,children:e.verification_uri})]}),(0,D.jsxs)(`div`,{className:`border border-[var(--color-line-1)] bg-[var(--color-surface-0)] rounded-sm py-5 text-center`,children:[(0,D.jsx)(`div`,{className:`overline mb-3`,children:`enter this code`}),(0,D.jsx)(`div`,{className:`text-4xl font-mono font-bold tracking-[0.3em] text-[var(--color-fg-0)]`,children:e.user_code})]}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] text-center flex items-center justify-center gap-2`,children:[(0,D.jsx)(`svg`,{className:`animate-spin`,width:`11`,height:`11`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,children:(0,D.jsx)(`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`})}),`waiting for github authorization…`]})]})}),n===`done`&&(0,D.jsxs)(`div`,{className:`rounded-sm border border-emerald-500/25 bg-emerald-500/5 p-4 text-sm text-emerald-200 space-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`svg`,{width:`15`,height:`15`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,children:(0,D.jsx)(`polyline`,{points:`20 6 9 17 4 12`})}),(0,D.jsx)(`span`,{className:`font-mono text-xs`,children:i})]}),(0,D.jsx)(`a`,{href:`/hub/publish`,className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-brand)] hover:underline block mt-1`,children:`publish a ruleset →`})]}),n===`error`&&i&&(0,D.jsxs)(`div`,{className:`rounded-sm border border-red-500/25 bg-red-500/5 p-4`,children:[(0,D.jsx)(`p`,{className:`text-sm text-red-200 font-mono`,children:i}),(0,D.jsx)(`button`,{onClick:()=>{r(`idle`),a(``)},className:`text-[11px] font-mono text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] mt-3 cursor-pointer uppercase tracking-wider`,children:`← try again`})]})]})}var dd={deny:`red`,block:`red`,ask:`amber`,allow:`green`,log:`gray`,force:`blue`};function fd({id:e}){let{data:t,error:n}=H(`/api/json/hub/${e}`),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(!1);if(n)return(0,D.jsxs)(`div`,{className:`text-sm text-red-300 font-mono`,children:[(0,D.jsx)(`p`,{children:n}),(0,D.jsx)(`a`,{href:`/hub`,className:`text-[var(--color-brand)] hover:underline mt-3 block text-[11px] uppercase tracking-wider`,children:`← back to hub`})]});if(!t)return(0,D.jsx)(`p`,{className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:`loading ruleset…`});async function s(){o(!0);try{(await fetch(`/api/hub/install`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({id:e})})).ok&&i(!0)}finally{o(!1)}}return(0,D.jsxs)(`div`,{className:`space-y-5`,children:[(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,D.jsxs)(`div`,{className:`min-w-0`,children:[(0,D.jsx)(`a`,{href:`/hub`,className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-brand)]`,children:`← hub`}),(0,D.jsx)(`h1`,{className:`text-xl font-medium tracking-tight mt-1.5 text-[var(--color-fg-0)]`,children:t.title}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] mt-1 tabular-nums`,children:[`@`,t.author,` · v`,t.version,` · `,t.rule_count,` rule`,t.rule_count===1?``:`s`]})]}),(0,D.jsx)(K,{variant:r?`secondary`:`primary`,onClick:s,disabled:a||r,children:r?`✓ installed`:a?`installing…`:`install`})]}),t.technologies.length>0&&(0,D.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:t.technologies.map(e=>(0,D.jsx)(G,{variant:`blue`,children:e},e))}),t.github_repo&&(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`source`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:t.github_repo})]}),(0,D.jsxs)(q,{children:[(0,D.jsx)(J,{children:(0,D.jsxs)(`span`,{className:`overline`,children:[`rules · `,t.rules.length]})}),(0,D.jsx)(Y,{className:`space-y-4`,children:t.rules.map((e,t)=>(0,D.jsxs)(`div`,{className:t>0?`border-t border-[var(--color-line-0)] pt-4`:void 0,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mb-2 flex-wrap`,children:[(0,D.jsx)(G,{variant:dd[e.decision]??`gray`,children:e.decision}),(0,D.jsx)(`code`,{className:`text-xs text-[var(--color-brand)] font-mono`,children:e.name}),e.capability&&(0,D.jsx)(G,{variant:`gray`,children:e.capability})]}),(0,D.jsx)(`p`,{className:`text-sm text-[var(--color-fg-1)] mb-2`,children:e.message}),(0,D.jsx)(kr,{children:e.raw_text})]},e.id))})]})]})}var pd=[{id:`safe-writes`,title:`Protect your files from accidents`,plainDescription:`Asks before AI overwrites or erases anything important — so you stay in control of what changes.`,example:`If AI tries to overwrite a config file, you get to approve it first.`,hubRulesetId:`safe-writes`,scenario:`any`,emoji:`🛡️`,details:{protects:[`Asks first before editing project manifests & lockfiles — package.json, Cargo.toml, go.mod, and friends`,`Asks first before editing shell startup files — .bashrc, .zshrc, .profile`,`Asks first before editing git config or git hooks`,`Asks first before editing CI / build pipeline files`,`Asks first before editing AI-agent instruction files — CLAUDE.md, .cursorrules, AGENTS.md`],tryThis:`Ask your AI to add a dependency to package.json. Instead of saving silently, it pauses for your approval first.`}},{id:`no-destructive-fs`,title:`Stop AI from erasing files`,plainDescription:`Blocks the kind of filesystem operations that can permanently delete your work.`,example:`If AI tries to wipe a folder, SSG blocks it automatically.`,hubRulesetId:`no-destructive-fs`,scenario:`coding`,emoji:`🗑️`,details:{protects:[`Blocks recursive force-deletes that can wipe an entire directory tree in a single command`,`Blocks bulk deletes through find with delete or exec-remove predicates`,`Blocks disk-wipe, format & partition tools — dd, mkfs, shred, fdisk`,`Blocks Windows recursive deletes — Remove-Item with Recurse, rmdir /s, del /s`,`Blocks git clean with its force flags, which erases untracked and ignored files alike`],tryThis:`Ask your AI to recursively delete a throwaway folder. The attempt is blocked outright — it never reaches your shell.`}},{id:`secrets-guard`,title:`Keep secrets and credentials safe`,plainDescription:`Watches for AI trying to read or write your passwords, API keys, and private keys.`,example:`Reading your .env file, SSH keys, or .netrc triggers an approval request.`,hubRulesetId:`secrets-guard`,scenario:`any`,emoji:`🔑`,details:{protects:[`Blocks reading .env files`,`Blocks reading private keys, SSH keys, .netrc & .pgpass`,`Blocks reading cloud credential stores — AWS, GCP, Azure, kube, docker`,`Blocks dumping secret files through cat / head / tail / type`,`Blocks writing hardcoded API keys — AWS, Anthropic, OpenAI — into source`,`Blocks writing PEM private keys into source files`],tryThis:`Ask your AI to read your .env file. The read is blocked, so the contents never land in the chat transcript.`}},{id:`email-guardrails`,title:`Ask before AI sends emails`,plainDescription:`Makes sure AI never sends a message on your behalf without your explicit OK.`,example:`Any outbound email action is queued for your approval before it goes.`,hubRulesetId:`email-guardrails`,scenario:`knowledge-work`,emoji:`📧`,details:{protects:[`Asks first before local mail commands — mail, sendmail, mutt, msmtp`,`Asks first before curl is used to talk SMTP directly`,`Asks first before calls to transactional-email APIs — SendGrid, Mailgun, Postmark, Resend, SES, and more`],tryThis:`Ask your AI to send a quick test email. It pauses and asks you to confirm the recipient and body before anything goes out.`}},{id:`no-paid-apis`,title:`Block surprise charges from paid APIs`,plainDescription:`Blocks AI from calling APIs that can rack up unexpected bills — cloud storage, AI providers, payment services.`,example:`A call to OpenAI, AWS S3, or Stripe triggers a block until you allow it.`,hubRulesetId:`no-paid-apis`,scenario:`any`,emoji:`💳`,details:{protects:[`Asks first before calls to paid LLM APIs — OpenAI, Anthropic, Groq, Bedrock, and more`,`Asks first before payment APIs — Stripe, PayPal, Square, Adyen`,`Asks first before SMS / voice APIs — Twilio, Vonage, MessageBird`,`Asks first before cloud-storage writes — aws s3 cp/sync, gsutil, az storage`],tryThis:`Ask your AI to call the OpenAI API. It checks with you before sending — so a runaway loop cannot quietly rack up spend.`}},{id:`read-only-mode`,title:`Read-only mode (maximum safety)`,plainDescription:`AI can look but not touch — all write operations are blocked. Great when you just want to explore safely.`,example:`AI can read your codebase and answer questions but cannot change any files.`,hubRulesetId:`read-only`,scenario:`any`,emoji:`🔒`,details:{protects:[`Blocks every file write and edit`,`Blocks state-changing shell commands — file deletes & moves, package installs, sudo, docker, kubectl, terraform`,`Blocks shell redirection that writes to disk`,`Blocks git commands that change state — commit, push, reset, checkout`,`Blocks network requests that are not GET — no POST, PUT, PATCH, DELETE`],tryThis:`Ask your AI to edit any file. Every write is refused until you remove this pack — but reading code and answering questions still works.`}}];function md(e){return e?pd.filter(t=>t.scenario===`any`||t.scenario===e):pd}function hd({pack:e,installed:t,state:n,expanded:r,onInstall:i,onUninstall:a,onToggleDetails:o}){let s=n!==`idle`;return(0,D.jsxs)(`div`,{className:`ss-list-row ss-list-row--pack`,style:{cursor:`default`,background:t?`linear-gradient(180deg, color-mix(in oklab, var(--color-hig-green) 8%, transparent) 0%, transparent 60%), var(--color-surface-1)`:`var(--color-surface-1)`,borderColor:t?`color-mix(in oklab, var(--color-hig-green) 28%, var(--color-line-1))`:`var(--color-line-1)`},children:[(0,D.jsxs)(`div`,{className:`ss-pack-main`,children:[(0,D.jsx)(`span`,{className:`ss-pack-emoji`,"aria-hidden":`true`,children:e.emoji}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,D.jsx)(`h3`,{className:`ss-pack-title`,children:e.title}),t&&(0,D.jsxs)(`span`,{className:`agent-badge agent-badge--detected`,title:`This pack is currently active.`,children:[(0,D.jsx)(`span`,{className:`agent-badge-dot`}),`Installed`]})]}),(0,D.jsx)(`p`,{className:`ss-pack-desc`,children:e.plainDescription}),(0,D.jsxs)(`p`,{className:`ss-pack-example`,children:[(0,D.jsx)(`span`,{className:`ss-pack-example__label`,children:`Example`}),e.example]}),(0,D.jsx)(`button`,{type:`button`,className:`ss-pack-detail-toggle`,"aria-expanded":r,onClick:()=>o(e.id),children:r?`Hide details`:t?`What this is doing →`:`What's inside →`})]}),(0,D.jsx)(`div`,{className:`ss-pack-action`,children:t?(0,D.jsx)(`button`,{type:`button`,disabled:s,onClick:()=>a(e.id),className:`ss-btn ss-btn--secondary`,style:{height:30,padding:`0 12px`,fontSize:11},title:`Remove this pack from your machine.`,children:n===`uninstalling`?`Removing…`:`Remove`}):(0,D.jsx)(`button`,{type:`button`,disabled:s,onClick:()=>i(e.id),className:`ss-btn ss-btn--primary`,style:{height:30,padding:`0 14px`,fontSize:11},title:`Install this guardrail pack.`,children:n===`installing`?`Installing…`:`Install`})})]}),r&&(0,D.jsxs)(`div`,{className:`ss-pack-detail`,children:[(0,D.jsxs)(`div`,{className:`ss-pack-detail__section`,children:[(0,D.jsx)(`span`,{className:`ss-pack-detail__label`,children:t?`Installed`:`What gets installed`}),(0,D.jsxs)(`p`,{className:`ss-pack-detail__text`,children:[(0,D.jsxs)(`code`,{children:[e.hubRulesetId,`.rules`]}),` — one plain-text rules file`,t?` now living in `:`, written to `,`your `,(0,D.jsx)(`code`,{children:`.sigmashake/rules/`}),` folder.`,` `,t?`It's active right away — no restart needed.`:`Installing adds just this one file; removing the pack deletes it.`]})]}),(0,D.jsxs)(`div`,{className:`ss-pack-detail__section`,children:[(0,D.jsx)(`span`,{className:`ss-pack-detail__label`,children:`What it does`}),(0,D.jsx)(`ul`,{className:`ss-pack-detail__list`,children:e.details.protects.map(e=>(0,D.jsx)(`li`,{children:e},e))})]}),(0,D.jsxs)(`div`,{className:`ss-pack-detail__section`,children:[(0,D.jsx)(`span`,{className:`ss-pack-detail__label`,children:`See it working`}),(0,D.jsx)(`p`,{className:`ss-pack-detail__text`,children:e.details.tryThis}),(0,D.jsxs)(`p`,{className:`ss-pack-detail__hint`,children:[`Every block and approval prompt is logged on the`,` `,(0,D.jsx)(`a`,{href:`/audit`,children:`Activity`}),` page. To fire a rule on purpose without leaving the dashboard, open `,(0,D.jsx)(`a`,{href:`/try`,children:`Try It`}),`.`]})]})]})]})}function gd(){let e=new URLSearchParams(window.location.search).get(`starter`),t=md(e),[n,r]=(0,_.useState)(new Set),[i,a]=(0,_.useState)({}),[o,s]=(0,_.useState)(new Set),[c,l]=(0,_.useState)(null);function u(e){s(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}(0,_.useEffect)(()=>{let e=!1;return fetch(`/api/json/hub/installed`).then(e=>e.json()).then(t=>{e||r(new Set(t.installed))}).catch(()=>{}),()=>{e=!0}},[]);function d(e,t){l({msg:e,type:t}),setTimeout(()=>l(null),5e3)}async function f(){try{let e=await(await fetch(`/api/json/hub/installed`)).json();r(new Set(e.installed))}catch{}}async function p(e){let t=pd.find(t=>t.id===e);if(t){a(t=>({...t,[e]:`installing`}));try{let n=await fetch(`/api/hub/install`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,...U()},body:JSON.stringify({id:t.hubRulesetId})}),i=await n.text(),a=n.headers.get(`Content-Type`)??``,o=null;if(a.includes(`application/json`))try{o=JSON.parse(i)}catch{}o?.ok?(r(e=>new Set([...e,t.hubRulesetId])),s(t=>new Set([...t,e])),d(o.already_installed?`${t.title} — already installed`:`${t.title} — installed`,`ok`)):d(o?o.error??`Could not install ${t.title}`:i.replace(/<[^>]+>/g,``).trim()||`Could not install ${t.title} (HTTP ${n.status})`,`error`)}catch(e){d(`Could not reach the dashboard server (${e instanceof Error?e.message:String(e)})`,`error`)}finally{a(t=>({...t,[e]:`idle`})),f()}}}async function m(e){let t=pd.find(t=>t.id===e);if(t&&window.confirm(`Remove “${t.title}”?\n\nThe rules in this pack stop applying. You can install it again any time.`)){a(t=>({...t,[e]:`uninstalling`}));try{let e=await fetch(`/api/hub/uninstall`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`,...U()},body:JSON.stringify({id:t.hubRulesetId})}),n=await e.text(),i=e.headers.get(`Content-Type`)??``,a=null;if(i.includes(`application/json`))try{a=JSON.parse(n)}catch{}a?.ok||e.ok&&!a?(r(e=>{let n=new Set(e);return n.delete(t.hubRulesetId),n}),d(`${t.title} — removed`,`ok`)):d(a?a.error??`Could not remove ${t.title}`:n.replace(/<[^>]+>/g,``).trim()||`Could not remove ${t.title} (HTTP ${e.status})`,`error`)}catch(e){d(`Could not reach the dashboard server (${e instanceof Error?e.message:String(e)})`,`error`)}finally{a(t=>({...t,[e]:`idle`})),f()}}}let h={coding:`for coding with AI`,"knowledge-work":`for email and docs`},g=t.filter(e=>n.has(e.hubRulesetId)).length;return(0,D.jsxs)(`div`,{className:`max-w-3xl mx-auto space-y-6`,children:[(0,D.jsxs)(`section`,{"data-tutorial":`guard-hero`,className:`rounded-2xl p-5`,style:{border:`1px solid var(--color-line-1)`,background:`var(--color-surface-1)`},children:[(0,D.jsx)(`p`,{className:`ss-list-section-title`,style:{padding:0,marginBottom:8},children:`Guardrails`}),(0,D.jsxs)(`h1`,{className:`text-[18px] font-semibold text-[var(--color-fg-0)] tracking-tight`,children:[`One-tap protection`,e&&h[e]?` ${h[e]}`:``]}),(0,D.jsxs)(`p`,{className:`text-[12.5px] text-[var(--color-fg-2)] mt-1.5 leading-relaxed`,children:[`Each pack is a small set of rules that guard against a specific AI risk. Toggle them on and off — installing or removing only touches rule files in`,` `,(0,D.jsx)(`code`,{className:`text-[var(--color-brand)]`,children:`.sigmashake/`}),`.`]}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mt-3`,children:[g,` of `,t.length,` active`]})]}),c&&(0,D.jsx)(`div`,{className:`rounded-xl px-4 py-2.5 text-[12px]`,style:{border:`1px solid ${c.type===`ok`?`color-mix(in oklab, var(--color-hig-green) 36%, transparent)`:`color-mix(in oklab, var(--color-hig-red) 36%, transparent)`}`,background:c.type===`ok`?`color-mix(in oklab, var(--color-hig-green) 12%, var(--color-surface-1))`:`color-mix(in oklab, var(--color-hig-red) 12%, var(--color-surface-1))`,color:c.type===`ok`?`var(--color-hig-green)`:`var(--color-hig-red)`,backdropFilter:`saturate(180%) blur(10px)`},children:c.msg}),(0,D.jsx)(`div`,{"data-tutorial":`guard-packs`,className:`ss-list`,children:t.map(e=>(0,D.jsx)(hd,{pack:e,installed:n.has(e.hubRulesetId),state:i[e.id]??`idle`,expanded:o.has(e.id),onInstall:p,onUninstall:m,onToggleDetails:u},e.id))}),(0,D.jsx)(`div`,{"data-tutorial":`guard-advanced`,className:`rounded-xl p-4`,style:{border:`1px dashed var(--color-line-1)`,background:`color-mix(in oklab, var(--color-surface-1) 50%, transparent)`},children:(0,D.jsxs)(`p`,{className:`text-[12px] text-[var(--color-fg-2)] leading-relaxed`,children:[`Want more control? The`,` `,(0,D.jsx)(`a`,{href:`/hub`,className:`text-[var(--color-brand)] hover:underline`,children:`advanced library`}),` `,`has the full set of community rulesets and lets you preview every rule before installing.`]})})]})}function _d(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function vd(e){let t=e;if(t.endsWith(`/.sigmashake/rules`)&&(t=t.slice(0,-18)),t.endsWith(`\\.sigmashake\\rules`)&&(t=t.slice(0,-18)),t.startsWith(`/home/`)){let e=t.slice(6),n=e.indexOf(`/`);return n>=0?`~/${e.slice(n+1)}`:`~`}if(t.startsWith(`C:\\Users\\`)){let e=t.slice(9),n=e.indexOf(`\\`);return n>=0?`~\\${e.slice(n+1)}`:`~`}if(t.length>40){let e=t.split(/[/\\]/);if(e.length>2)return`…/${e[e.length-1]}`}return t}var $=[{value:`downloads`,label:`most downloaded`},{value:`newest`,label:`newest`},{value:`rules`,label:`most rules`}],yd=[``,`critical`,`high`,`medium`,`low`],bd=[``,`deny`,`ask`,`allow`,`log`];function xd(){return(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-0)] bg-[var(--color-surface-1)] p-4 space-y-3 shimmer`,children:[(0,D.jsx)(`div`,{className:`h-4 bg-[var(--color-surface-3)] rounded-sm w-2/3`}),(0,D.jsx)(`div`,{className:`h-3 bg-[var(--color-surface-2)] rounded-sm w-1/3`}),(0,D.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,D.jsx)(`div`,{className:`h-5 bg-[var(--color-surface-3)] rounded-sm w-14`}),(0,D.jsx)(`div`,{className:`h-5 bg-[var(--color-surface-3)] rounded-sm w-10`})]}),(0,D.jsx)(`div`,{className:`h-7 bg-[var(--color-surface-3)] rounded-sm`})]})}function Sd({tech:e}){return(0,D.jsx)(`span`,{className:`inline-flex items-center px-1.5 py-0.5 rounded-sm text-[10px] font-mono uppercase tracking-wider border ${{typescript:`bg-sky-500/8 text-sky-300 border-sky-500/25`,ts:`bg-sky-500/8 text-sky-300 border-sky-500/25`,javascript:`bg-amber-500/8 text-amber-300 border-amber-500/25`,js:`bg-amber-500/8 text-amber-300 border-amber-500/25`,python:`bg-emerald-500/8 text-emerald-300 border-emerald-500/25`,rust:`bg-orange-500/8 text-orange-300 border-orange-500/25`,go:`bg-cyan-500/8 text-cyan-300 border-cyan-500/25`,bash:`bg-violet-500/8 text-violet-300 border-violet-500/25`}[e.toLowerCase()]??`bg-[var(--color-surface-2)] text-[var(--color-fg-3)] border-[var(--color-line-1)]`}`,children:e})}function Cd({install:e,onRemove:t,removing:n}){let r=vd(e.path),i=e.in_sync?`bg-emerald-400`:`bg-amber-400 animate-pulse`;return(0,D.jsxs)(`div`,{className:`group/chip inline-flex items-center gap-1.5 max-w-full pl-1.5 pr-0.5 py-0.5 rounded-sm bg-[var(--color-surface-2)] border border-[var(--color-line-1)] text-[10px] font-mono text-[var(--color-fg-2)]`,title:e.in_sync?`In sync — files present in ${e.path}`:`Drift — ${e.drift_reason??`files missing or empty`} (${e.path})`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 ${i}`,"aria-hidden":!0}),(0,D.jsx)(`span`,{className:`truncate`,title:e.path,children:r}),(0,D.jsx)(`button`,{type:`button`,onClick:r=>{r.preventDefault(),r.stopPropagation(),n||t(e.path)},disabled:n,title:`Remove from this location`,"aria-label":`Uninstall from ${e.path}`,className:`shrink-0 inline-flex items-center justify-center w-4 h-4 rounded-sm text-[var(--color-fg-4)] hover:text-red-300 hover:bg-red-500/10 transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed`,children:n?(0,D.jsx)(`svg`,{className:`animate-spin`,width:`9`,height:`9`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,children:(0,D.jsx)(`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`})}):(0,D.jsxs)(`svg`,{width:`9`,height:`9`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`3`,children:[(0,D.jsx)(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),(0,D.jsx)(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})]})})]})}function wd({isInstalling:e,hasInstalls:t,onInstallDefault:n,onPickPath:r}){let[i,a]=(0,_.useState)(!1),o=(0,_.useRef)(null);return(0,_.useEffect)(()=>{if(!i)return;function e(e){o.current&&(o.current.contains(e.target)||a(!1))}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[i]),(0,D.jsxs)(`div`,{ref:o,className:`relative flex w-full`,children:[(0,D.jsx)(`button`,{onClick:e=>{e.preventDefault(),e.stopPropagation(),n()},disabled:e,className:`flex-1 h-7 rounded-l-sm text-[11px] font-mono uppercase tracking-wider transition-colors cursor-pointer
|
|
16
16
|
bg-[var(--color-brand)]/8 text-[var(--color-brand)] border border-[var(--color-brand)]/30 border-r-0
|
|
17
17
|
hover:bg-[var(--color-brand)]/15 hover:border-[var(--color-brand)]/50
|
|
@@ -47,12 +47,12 @@ curl -X POST :7901/api/rules/disable-all
|
|
|
47
47
|
curl -X POST :7901/api/rules/enable-all
|
|
48
48
|
curl -X POST :7901/api/rules/uninstall-all \\
|
|
49
49
|
-H 'content-type: application/json' \\
|
|
50
|
-
-d '{"confirm":"UNINSTALL_ALL_RULES"}'`})]})]})})}function qp({entry:e,ruleId:t,onJump:n,onChanged:r}){return!e||!t?(0,D.jsx)(`span`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)] shrink-0`,children:`no rule`}):(0,D.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,D.jsx)(`button`,{type:`button`,onClick:async()=>{await Op(t,e.file,`log`),r()},title:`Soften this rule to log-only — keeps the rule running but stops blocking/asking`,className:`px-1.5 py-0.5 rounded-sm border border-[var(--color-line-1)] text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-0)] hover:border-[var(--color-brand)]/60 cursor-pointer transition-colors`,children:`→ log`}),(0,D.jsx)(`button`,{type:`button`,onClick:async()=>{e.rule.enabled&&(await Dp(t,e.file),r())},disabled:!e.rule.enabled,title:e.rule.enabled?`Disable this rule entirely`:`Rule is already disabled`,className:`px-1.5 py-0.5 rounded-sm border border-[var(--color-line-1)] text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-red-300 hover:border-red-400/60 cursor-pointer transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:e.rule.enabled?`disable`:`disabled`}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>n(t),title:`Scroll to this rule below — clears search and filter`,className:`px-1.5 py-0.5 rounded-sm border border-[var(--color-brand)]/40 bg-[var(--color-brand)]/10 text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-0)] hover:bg-[var(--color-brand)]/20 cursor-pointer transition-colors`,children:`view`})]})}function Jp({stats:e,ruleIndex:t,onJump:n,onChanged:r}){let i=(0,_.useMemo)(()=>{let n=[];for(let[r,i]of Object.entries(e)){let e=i.lastBlockAskSeen??0;e<=0||n.push({ruleId:r,lastBlockAskSeen:e,entry:t.get(r)})}return n.sort((e,t)=>t.lastBlockAskSeen-e.lastBlockAskSeen),n.slice(0,5)},[e,t]);return i.length===0?null:(0,D.jsx)(q,{children:(0,D.jsxs)(`details`,{open:!0,children:[(0,D.jsxs)(`summary`,{className:`px-3 py-2 cursor-pointer list-none select-none flex items-center gap-3 hover:bg-[var(--color-surface-2)]/70`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`recent block/ask activity`}),(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-[var(--color-fg-3)]`,children:[i.length,` rule`,i.length===1?``:`s`,` — newest first`]})]}),(0,D.jsx)(Y,{className:`py-2`,children:(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:i.map(e=>{let t=e.entry?.rule.decision??`—`,i=e.entry?.rule.message??``;return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono py-1.5`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider w-12 shrink-0 ${Sp[t]??`text-[var(--color-fg-2)]`}`,children:t}),(0,D.jsx)(`code`,{className:`text-[var(--color-fg-0)] shrink-0 truncate w-48`,children:e.ruleId}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate flex-1 min-w-0 hidden md:inline`,children:i}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums shrink-0 w-16 text-right`,children:Np(e.lastBlockAskSeen)}),(0,D.jsx)(qp,{entry:e.entry,ruleId:e.ruleId,onJump:n,onChanged:r})]},e.ruleId)})})})]})})}function Yp({triggers:e,ruleIndex:t,onJump:n,onChanged:r}){let i=Math.floor(Date.now()/1e3),a=i-24*3600,o=i-4*3600,s=(e??[]).filter(e=>e.ruleId&&yp.has(e.decision)),c=s[0]??null,l=new Map;for(let e of s){if(e.timestamp<a||!e.ruleId)continue;let t=l.get(e.ruleId);t?(t.hits++,e.timestamp>t.lastSeen&&(t.lastSeen=e.timestamp,t.sample=e)):l.set(e.ruleId,{ruleId:e.ruleId,decision:e.decision,hits:1,lastSeen:e.timestamp,sample:e})}let u=[...l.values()].filter(e=>e.hits>=3).sort((e,t)=>t.hits-e.hits).slice(0,5),d=c&&c.timestamp>=o;return d||u.length>0?(0,D.jsx)(q,{children:(0,D.jsxs)(`details`,{open:!0,children:[(0,D.jsxs)(`summary`,{className:`px-3 py-2 cursor-pointer list-none select-none flex items-center gap-3 hover:bg-[var(--color-surface-2)]/70 flex-wrap`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`recent decisions`}),d&&c&&(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-[var(--color-fg-3)]`,children:[`last:`,` `,(0,D.jsx)(`span`,{className:Sp[c.decision]??`text-[var(--color-fg-2)]`,children:c.decision}),` `,`· `,Np(c.timestamp)]}),u.length>0&&(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-amber-300/80 ml-auto`,children:[u.length,` rule`,u.length===1?``:`s`,` fired ≥3× in 24h`]})]}),(0,D.jsxs)(Y,{className:`py-2 space-y-3`,children:[d&&c&&(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`div`,{className:`overline`,children:`last decision`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider w-12 shrink-0 ${Sp[c.decision]??`text-[var(--color-fg-2)]`}`,children:c.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] w-20 shrink-0 truncate`,children:c.tool}),(0,D.jsx)(`code`,{className:`text-[var(--color-fg-1)] flex-1 min-w-0 truncate`,children:c.input||`—`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums shrink-0 w-16 text-right`,children:Np(c.timestamp)}),(0,D.jsx)(qp,{entry:c.ruleId?t.get(c.ruleId):void 0,ruleId:c.ruleId,onJump:n,onChanged:r})]}),c.ruleId&&(0,D.jsxs)(`div`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] pl-14`,children:[`rule`,` `,(0,D.jsx)(`code`,{className:`text-[var(--color-fg-2)]`,children:c.ruleId})]})]}),u.length>0&&(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`div`,{className:`overline`,children:`top fired in 24h (≥3 hits) — soften or disable to reduce noise`}),(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:u.map(e=>{let i=t.get(e.ruleId);return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono py-1.5`,children:[(0,D.jsxs)(`span`,{className:`text-amber-300 tabular-nums shrink-0 w-10`,children:[e.hits,`×`]}),(0,D.jsx)(`span`,{className:`uppercase tracking-wider w-12 shrink-0 ${Sp[e.decision]??`text-[var(--color-fg-2)]`}`,children:e.decision}),(0,D.jsx)(`code`,{className:`text-[var(--color-fg-0)] truncate flex-1 min-w-0`,children:e.ruleId}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate shrink-0 w-32 text-right hidden md:inline`,children:e.sample.tool}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums shrink-0 w-16 text-right`,children:Np(e.lastSeen)}),(0,D.jsx)(qp,{entry:i,ruleId:e.ruleId,onJump:n,onChanged:r})]},e.ruleId)})})]})]})]})}):(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{className:`py-2 flex items-center gap-3 text-[11px] font-mono flex-wrap`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`recent decisions`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`no blocks or asks in the last 4h — search below to find any rule by id, message, or what it last blocked`})]})})}function Xp({chip:e,onChange:t,counts:n}){return(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,D.jsx)(`span`,{className:`overline text-[10px] mr-1`,children:`quick filters`}),[{key:`hot`,label:`🔥 hot now`,hint:`Rules that fired in the last hour`,color:`text-amber-300 border-amber-500/40 bg-amber-500/5 hover:bg-amber-500/10`},{key:`blocked`,label:`⛔ blocking`,hint:`Rules set to block and currently enabled`,color:`text-red-300 border-red-500/40 bg-red-500/5 hover:bg-red-500/10`},{key:`noisy`,label:`📢 noisy`,hint:`Fired ≥3 times in 24h — candidates to soften`,color:`text-amber-300 border-amber-500/40 bg-amber-500/5 hover:bg-amber-500/10`},{key:`slow`,label:`🐢 slow >50ms`,hint:`Rules with avg eval time over 50ms`,color:`text-rose-300 border-rose-500/40 bg-rose-500/5 hover:bg-rose-500/10`},{key:`never`,label:`💤 never fired`,hint:`Enabled rules that have never matched — possible dead code`,color:`text-[var(--color-fg-3)] border-[var(--color-line-1)] hover:bg-[var(--color-surface-2)]`},{key:`disabled`,label:`⏸ disabled`,hint:`Rules toggled off — not currently enforced`,color:`text-[var(--color-fg-3)] border-[var(--color-line-1)] hover:bg-[var(--color-surface-2)]`}].map(r=>{let i=e===r.key,a=n[r.key];return(0,D.jsxs)(`button`,{type:`button`,onClick:()=>t(i?`none`:r.key),title:r.hint,className:`px-2 py-1 rounded-sm border text-[11px] font-mono uppercase tracking-wider cursor-pointer transition-colors ${i?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/15 text-[var(--color-fg-0)]`:r.color}`,children:[r.label,(0,D.jsx)(`span`,{className:`ml-1.5 tabular-nums normal-case ${i?`text-[var(--color-fg-2)]`:`text-[var(--color-fg-4)]`}`,children:a})]},r.key)}),e!==`none`&&(0,D.jsx)(`button`,{type:`button`,onClick:()=>t(`none`),className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer ml-1`,children:`✕ clear`})]})}function Zp({value:e,onChange:t,matchCount:n,sortKey:r,onSortChange:i}){return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,D.jsxs)(`div`,{className:`relative flex-1 min-w-[260px]`,children:[(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-[var(--color-fg-4)] pointer-events-none`,children:[(0,D.jsx)(`circle`,{cx:`11`,cy:`11`,r:`8`}),(0,D.jsx)(`path`,{d:`m21 21-4.3-4.3`})]}),(0,D.jsx)(`input`,{type:`text`,placeholder:`search rule id, message, or paste a blocked command…`,title:`Searches rule id, message, AND recent audit-log inputs/tools — paste a blocked command to find its rule`,value:e,onChange:e=>t(e.target.value),className:`bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-xs rounded-sm pl-8 pr-24 py-2 w-full focus:outline-none focus:border-[var(--color-brand)]/60 placeholder:text-[var(--color-fg-4)] font-mono`}),e&&(0,D.jsxs)(`div`,{className:`absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-2`,children:[n!==null&&(0,D.jsxs)(`span`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] tabular-nums`,children:[n,` match`,n===1?``:`es`]}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>t(``),className:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,title:`Clear search`,"aria-label":`Clear search`,children:`✕`})]})]}),(0,D.jsxs)(`label`,{className:`flex items-center gap-1.5 text-[10px] font-mono uppercase tracking-wider`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`sort`}),(0,D.jsxs)(`select`,{value:r,onChange:e=>i(e.target.value),className:`bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] rounded-sm px-1.5 py-1 cursor-pointer focus:outline-none focus:border-[var(--color-brand)]/50`,children:[(0,D.jsx)(`option`,{value:`default`,children:`default · by file`}),(0,D.jsx)(`option`,{value:`hits`,children:`most hits`}),(0,D.jsx)(`option`,{value:`slowest`,children:`slowest`}),(0,D.jsx)(`option`,{value:`recent`,children:`recently fired`}),(0,D.jsx)(`option`,{value:`alpha`,children:`alphabetical`})]})]})]})}function Qp({decisionFilter:e,onChange:t,totalRules:n,ruleCount:r,hits:i,window:a}){let o=Object.values(i).reduce((e,t)=>e+t,0);return(0,D.jsx)(q,{children:(0,D.jsx)(Y,{className:`px-3 py-2`,children:(0,D.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,D.jsxs)(`div`,{className:`flex flex-col`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`filter by decision`}),(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] uppercase tracking-wider`,children:[`rules · applied in `,a]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-1 flex-wrap`,children:[(0,D.jsxs)(`button`,{type:`button`,onClick:()=>t(`all`),title:`Show all ${n} rules — ${o.toLocaleString()} applied in ${a}`,className:`px-2 py-1 rounded-sm border text-[11px] font-mono uppercase tracking-wider cursor-pointer transition-colors ${e===`all`?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-2)] hover:border-[var(--color-brand)]/30 hover:text-[var(--color-fg-0)]`}`,children:[`all`,(0,D.jsx)(`span`,{className:`ml-1.5 text-[var(--color-fg-4)] tabular-nums normal-case`,children:n}),o>0&&(0,D.jsxs)(`span`,{className:`ml-1 text-[var(--color-fg-3)] tabular-nums normal-case`,children:[`· `,o.toLocaleString()]})]}),xp.map(n=>{let o=r[n]??0,s=i[n]??0,c=e===n,l=o===0,u=Sp[n]??`text-[var(--color-fg-2)]`;return(0,D.jsxs)(`button`,{type:`button`,onClick:()=>t(n),disabled:l,title:`${o} rule${o===1?``:`s`} set to ${n} · ${s.toLocaleString()} applied in ${a}`,className:`px-2 py-1 rounded-sm border text-[11px] font-mono uppercase tracking-wider cursor-pointer transition-colors disabled:opacity-30 disabled:cursor-not-allowed ${c?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 ${u}`:`border-[var(--color-line-1)] ${u} hover:border-[var(--color-brand)]/30`}`,children:[n,(0,D.jsx)(`span`,{className:`ml-1.5 text-[var(--color-fg-4)] tabular-nums normal-case`,children:o}),s>0&&(0,D.jsxs)(`span`,{className:`ml-1 text-[var(--color-fg-3)] tabular-nums normal-case`,children:[`· `,s.toLocaleString()]})]},n)})]})]})})})}var $p={covered:{label:`covered`,color:`var(--color-decision-allow)`},inactive:{label:`all off`,color:`var(--color-decision-ask)`},gap:{label:`no rules`,color:`var(--color-decision-block)`}};function em({cov:e,active:t,onClick:n}){let r=$p[e.status];return(0,D.jsxs)(`button`,{type:`button`,onClick:n,title:e.meta.description,className:`text-left rounded-sm border px-2 py-1.5 transition-colors cursor-pointer ${t?`border-[var(--color-brand)] bg-[var(--color-brand)]/10`:`border-[var(--color-line-1)] hover:bg-[var(--color-surface-2)]/70`}`,style:{borderLeft:`2px solid ${e.meta.color}`},children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,D.jsx)(`span`,{"aria-hidden":!0,children:e.meta.icon}),(0,D.jsx)(`span`,{className:`text-[11px] text-[var(--color-fg-0)] font-medium truncate flex-1`,children:e.meta.title})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between mt-1 gap-1`,children:[(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] tabular-nums`,children:[e.total,` rule`,e.total===1?``:`s`,e.enabledShell>0&&(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[` · `,e.enabledShell,` shell`]})]}),(0,D.jsx)(`span`,{className:`text-[9px] uppercase tracking-wider font-mono`,style:{color:r.color},children:r.label})]}),e.meta.attack&&(0,D.jsxs)(`div`,{className:`text-[9px] font-mono text-[var(--color-fg-4)] mt-0.5 truncate`,children:[e.meta.attack.id,` `,e.meta.attack.name]})]})}function tm({coverage:e,activeCategory:t,onPick:n}){let r=e.total>0?Math.round(e.covered/e.total*100):0,i=e.categories.filter(e=>e.meta.security||e.total>0),a=e.categories.reduce((e,t)=>e+t.enabledShell,0);return(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{className:`px-3 py-2.5 space-y-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3 flex-wrap`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h2`,{className:`overline text-[11px]`,children:`tool-use coverage`}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-3)] mt-0.5`,children:`rules categorized like Sigma detections · mapped to MITRE ATT&CK tactics`})]}),(0,D.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,D.jsxs)(`span`,{className:`font-mono text-sm text-[var(--color-fg-0)] tabular-nums`,children:[e.covered,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`/`,e.total]})]}),(0,D.jsx)(`span`,{className:`text-[11px] uppercase tracking-wider text-[var(--color-fg-3)]`,children:`aspects governed`})]})]}),(0,D.jsx)(`div`,{className:`h-1.5 rounded-full bg-[var(--color-surface-3)] overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full rounded-full transition-all`,style:{width:`${r}%`,background:r>=80?`var(--color-decision-allow)`:r>=50?`var(--color-decision-ask)`:`var(--color-decision-block)`}})}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)]`,children:[a,` active rule`,a===1?``:`s`,` govern shell / command execution`,e.uncategorized>0&&(0,D.jsxs)(D.Fragment,{children:[` · `,(0,D.jsxs)(`span`,{className:`text-amber-300`,children:[e.uncategorized,` uncategorized`]})]})]}),(0,D.jsx)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-1.5`,children:i.map(e=>(0,D.jsx)(em,{cov:e,active:t===e.id,onClick:()=>n(e.id)},e.id))})]})})}function nm({category:e,inferred:t,onPick:n}){let r=mp(e);return(0,D.jsxs)(`button`,{type:`button`,onClick:()=>n(e),title:`${r.title}${t?` (inferred — add an explicit CATEGORY directive)`:``} — ${r.description}`,className:`text-[9px] font-mono uppercase tracking-wider px-1 py-px rounded-sm border cursor-pointer shrink-0 inline-flex items-center gap-0.5`,style:{color:r.color,borderColor:`${r.color}55`},children:[(0,D.jsx)(`span`,{"aria-hidden":!0,children:r.icon}),(0,D.jsx)(`span`,{children:r.title}),t&&(0,D.jsx)(`span`,{className:`opacity-50`,children:`~`})]})}function rm(){let{mode:e,setMode:t}=V(),n=e===`pro`,r=zt(bp)[`rules-changed`],[i,a]=(0,_.useState)(!0),[o,s]=(0,_.useState)(0);(0,_.useEffect)(()=>{if(!i)return;let e=setInterval(()=>{s(e=>e+1)},Tp);return()=>clearInterval(e)},[i]);let{data:c,refetch:l}=H(Ep(`/api/json/rules`,r+o),[r,o]),[u,d]=(0,_.useState)(`7d`),{data:f,refetch:p}=H(Ep(`/api/json/rules-stats?window=${u}`,o),[r,u,o]),{data:m,refetch:h}=H(Ep(`/api/json/rules-performance`,o),[r,o]),{data:g,refetch:v}=H(Ep(`/api/json/rule-triggers/recent?limit=500`,o),[r,o]),[y,b]=(0,_.useState)(``),[x,S]=(0,_.useState)(`all`),[C,w]=(0,_.useState)(`all`),[T,E]=(0,_.useState)(`none`),[O,k]=(0,_.useState)(`default`),[ee,A]=(0,_.useState)(`file`),[j,M]=(0,_.useState)(``),[te,ne]=(0,_.useState)(new Set),[N,P]=(0,_.useState)(new Set),[F,re]=(0,_.useState)(()=>new URLSearchParams(window.location.search).get(`highlight`)??``),I=(0,_.useRef)(null);(0,_.useEffect)(()=>{I.current&&I.current.scrollIntoView({behavior:`smooth`,block:`center`})},[]);let L=f?.stats??{},R=(0,_.useMemo)(()=>{let e=new Map;if(!c)return e;for(let t of c.rulesets)for(let n of t.rules)e.set(n.id,{rule:n,file:t.file});return e},[c]),z=(0,_.useMemo)(()=>{let e=[];if(c)for(let t of c.rulesets)for(let n of t.rules)e.push({id:n.id,target:n.target??`any`,decision:n.decision,category:n.category,enabled:n.enabled});return vp(e)},[c]);function ie(){l(),p(),h(),v(),s(e=>e+1)}function ae(e){b(``),S(`all`),w(`all`),E(`none`),M(``),re(e);let t=new URL(window.location.href);t.searchParams.set(`highlight`,e),window.history.replaceState(null,``,t.toString())}let oe=(0,_.useMemo)(()=>{let e=new Set;if(!g)return e;let t=Math.floor(Date.now()/1e3)-3600;for(let n of g.rows)n.ruleId&&n.timestamp>=t&&e.add(n.ruleId);return e},[g]),se=(0,_.useMemo)(()=>{let e=new Set;if(!g)return e;let t=Math.floor(Date.now()/1e3)-24*3600,n=new Map;for(let e of g.rows)!e.ruleId||e.timestamp<t||yp.has(e.decision)&&n.set(e.ruleId,(n.get(e.ruleId)??0)+1);for(let[t,r]of n)r>=3&&e.add(t);return e},[g]);if(!c)return(0,D.jsx)(`p`,{className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:`loading rules…`});if(c.rulesets.length===0)return(0,D.jsxs)(`div`,{className:`rounded-sm border border-dashed border-[var(--color-line-1)] bg-[var(--color-surface-1)]/50 p-10 text-center`,children:[(0,D.jsx)(`p`,{className:`text-sm text-[var(--color-fg-2)] mb-2`,children:`No .rules files found.`}),(0,D.jsx)(`a`,{href:`/hub`,className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-brand)] hover:underline`,children:`→ browse hub to install rulesets`})]});let ce=y.toLowerCase(),le=(()=>{let e=new Set;if(!ce||!g)return e;for(let t of g.rows){if(!t.ruleId)continue;let n=(t.input??``).toLowerCase(),r=(t.tool??``).toLowerCase();(n.includes(ce)||r.includes(ce))&&e.add(t.ruleId)}return e})();function ue(e){if(x===`enabled`&&!e.enabled||x===`disabled`&&e.enabled)return!1;let t=L[e.id],n=t?.hits??0;return!(x===`hit`&&n===0||x===`never`&&n>0||C!==`all`&&e.decision!==C||j&&(e.category??`uncategorized`)!==j||T===`hot`&&!oe.has(e.id)||T===`noisy`&&!se.has(e.id)||T===`blocked`&&!(e.decision===`block`&&e.enabled)||T===`slow`&&!(t&&t.avgDurationMs>50)||T===`never`&&!(e.enabled&&(!t||t.hits===0))||T===`disabled`&&e.enabled)}let de=(()=>{let e={},t={};for(let n of c.rulesets)for(let r of n.rules){e[r.decision]=(e[r.decision]??0)+1;let n=L[r.id]?.hits??0;n>0&&(t[r.decision]=(t[r.decision]??0)+n)}return{ruleCount:e,hits:t}})(),fe={hot:0,blocked:0,noisy:se.size,slow:0,never:0,disabled:0};for(let e of c.rulesets)for(let t of e.rules){oe.has(t.id)&&fe.hot++,t.decision===`block`&&t.enabled&&fe.blocked++;let e=L[t.id];e&&e.avgDurationMs>50&&fe.slow++,t.enabled&&(!e||e.hits===0)&&fe.never++,t.enabled||fe.disabled++}let pe=!!ce||x!==`all`||C!==`all`||T!==`none`||j!==``;function me(e){return O===`default`?e:[...e].sort((e,t)=>O===`hits`?(L[t.id]?.hits??0)-(L[e.id]?.hits??0):O===`slowest`?(L[t.id]?.avgDurationMs??0)-(L[e.id]?.avgDurationMs??0):O===`recent`?(L[t.id]?.lastSeen??0)-(L[e.id]?.lastSeen??0):O===`alpha`?e.id.localeCompare(t.id):0)}let he=[];for(let e of c.rulesets)for(let t of e.rules)he.push({...t,file:e.file});let ge=he.filter(e=>ce&&!e.id.toLowerCase().includes(ce)&&!e.message.toLowerCase().includes(ce)&&!le.has(e.id)?!1:ue(e)),B;if(ee===`category`){let e=new Map;for(let t of ge){let n=t.category??`uncategorized`,r=e.get(n);r?r.push(t):e.set(n,[t])}B=dp.filter(t=>e.has(t.id)).map(t=>({key:t.id,kind:`category`,label:t.title,icon:t.icon,accent:t.color,sublabel:t.attack?`${t.attack.id} · ${t.attack.name}`:`D3FEND · ${t.d3fend}`,rules:me(e.get(t.id)??[])}))}else{let e=new Map;for(let t of ge){let n=e.get(t.file);n?n.push(t):e.set(t.file,[t])}B=c.rulesets.map(t=>({key:t.file,kind:`file`,label:t.file,content:t.content,rules:me(e.get(t.file)??[])})).filter(e=>e.rules.length>0||!pe)}let _e=he.length,ve=he.filter(e=>e.enabled).length,ye=new Set;for(let e of B)for(let t of e.rules)ye.add(t.id);let be=pe?ye.size:null,xe=[];for(let e of te){let t=R.get(e);t&&xe.push({ruleId:e,file:t.file})}function Se(e){ne(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function Ce(e){ne(t=>{let n=new Set(t);if(e.length>0&&e.every(e=>n.has(e.id)))for(let t of e)n.delete(t.id);else for(let t of e)n.add(t.id);return n})}function we(e){if(j===e){M(``);return}M(e),A(`category`),re(``)}function Te(){ne(e=>{let t=new Set(e);for(let e of ye)t.add(e);return t})}function Ee(e){P(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function De(e,t){xe.length!==0&&(e===`enable`?await kp(xe,!0):e===`disable`?await kp(xe,!1):e===`delete`?(await jp(xe),ne(new Set)):e===`decision`&&t&&await Ap(xe,t),ie())}return(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsx)(`div`,{"data-tutorial":`rules-firewall`,children:(0,D.jsx)(Hp,{totalRules:_e,activeRules:ve,onChanged:ie})}),(0,D.jsx)(Rp,{}),(0,D.jsx)(`div`,{className:`flex items-center gap-4 flex-wrap`,children:(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`overline text-[11px]`,children:`rules`}),(0,D.jsxs)(`div`,{className:`flex items-baseline gap-3 mt-1`,children:[(0,D.jsxs)(`span`,{className:`font-mono text-sm text-[var(--color-fg-0)] tabular-nums`,children:[ve,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`/`,_e]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] ml-1.5 text-[11px] uppercase tracking-wider`,children:`active`})]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsxs)(`span`,{className:`font-mono text-[11px] text-[var(--color-fg-3)] uppercase tracking-wider`,children:[c.files.length,` file`,c.files.length===1?``:`s`]})]})]})}),(0,D.jsx)(`div`,{"data-tutorial":`rules-coverage`,children:(0,D.jsx)(tm,{coverage:z,activeCategory:j,onPick:we})}),(0,D.jsx)(`div`,{"data-tutorial":`rules-stats`,children:(0,D.jsx)(zp,{perf:m,triggers:g,decisionAggregates:de,livePoll:i,onTogglePoll:()=>a(e=>!e),statsWindow:u,onWindowChange:d,mode:e,onModeChange:t})}),(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{className:`px-3 py-2.5 space-y-2.5`,children:[(0,D.jsx)(Zp,{value:y,onChange:b,matchCount:be,sortKey:O,onSortChange:k}),(0,D.jsx)(Xp,{chip:T,onChange:E,counts:fe}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap pt-1 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`span`,{className:`overline text-[10px]`,children:`state`}),(0,D.jsx)(`div`,{className:`flex items-center gap-1 text-[10px] font-mono uppercase tracking-wider`,children:[`all`,`enabled`,`disabled`,`hit`,`never`].map(e=>(0,D.jsx)(`button`,{onClick:()=>S(e),className:`px-1.5 py-0.5 rounded-sm border cursor-pointer transition-colors ${x===e?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`}`,children:e},e))}),(0,D.jsx)(`span`,{className:`overline text-[10px] ml-1`,children:`group`}),(0,D.jsx)(`div`,{className:`flex items-center gap-1 text-[10px] font-mono uppercase tracking-wider`,children:[`file`,`category`].map(e=>(0,D.jsxs)(`button`,{onClick:()=>A(e),className:`px-1.5 py-0.5 rounded-sm border cursor-pointer transition-colors ${ee===e?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`}`,children:[`by `,e]},e))})]}),j&&(0,D.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap pt-1 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`span`,{className:`overline text-[10px]`,children:`category`}),(0,D.jsxs)(`span`,{className:`text-[11px] font-mono px-1.5 py-0.5 rounded-sm border`,style:{color:mp(j).color,borderColor:`${mp(j).color}66`},children:[mp(j).icon,` `,mp(j).title]}),(0,D.jsx)(`button`,{onClick:()=>M(``),className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:`clear ✕`})]})]})}),(0,D.jsx)(Qp,{decisionFilter:C,onChange:w,totalRules:_e,ruleCount:de.ruleCount,hits:de.hits,window:u}),n&&(0,D.jsx)(`div`,{"data-tutorial":`rules-top`,children:(0,D.jsx)(Vp,{stats:L,ruleIndex:R,triggers:g?.rows,statsWindow:u,onJump:ae})}),(0,D.jsx)(`div`,{"data-tutorial":`rules-activity`,children:(0,D.jsx)(Jp,{stats:L,ruleIndex:R,onJump:ae,onChanged:ie})}),(0,D.jsx)(`div`,{"data-tutorial":`rules-recent`,children:(0,D.jsx)(Yp,{triggers:g?.rows,ruleIndex:R,onJump:ae,onChanged:ie})}),n&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(Bp,{perf:m}),(0,D.jsx)(Kp,{})]}),(0,D.jsx)(Wp,{selected:xe,onClear:()=>ne(new Set),onApply:De}),ye.size>0&&(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] font-mono`,children:[(0,D.jsxs)(`button`,{onClick:Te,className:`uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:[`select `,ye.size,` visible`]}),te.size>0&&(0,D.jsx)(`button`,{onClick:()=>ne(new Set),className:`uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:`clear selection`})]}),B.length===0&&(0,D.jsx)(`div`,{className:`rounded-sm border border-dashed border-[var(--color-line-1)] px-4 py-6 text-center text-[11px] font-mono text-[var(--color-fg-3)]`,children:`no rules match the current filter`}),(0,D.jsx)(`div`,{className:`space-y-3`,children:B.map(e=>{let t=e.rules.some(e=>e.id===F),r=e.rules.filter(e=>e.enabled).length,i=e.rules.length>0&&e.rules.every(e=>te.has(e.id)),a=!i&&e.rules.some(e=>te.has(e.id)),o=Pp(g?.rows,20,3600*1e3,t=>t.ruleId?e.rules.some(e=>e.id===t.ruleId):!1),s=o.some(e=>e>0);return(0,D.jsx)(q,{children:(0,D.jsxs)(`details`,{open:t||pe||O!==`default`,children:[(0,D.jsxs)(`summary`,{className:`flex items-center gap-2 px-3 py-2 cursor-pointer list-none select-none hover:bg-[var(--color-surface-2)]/70 border-b border-[var(--color-line-0)]`,children:[(0,D.jsx)(`input`,{type:`checkbox`,checked:i,ref:e=>{e&&(e.indeterminate=a)},onChange:()=>Ce(e.rules),onClick:e=>e.stopPropagation(),className:`accent-[var(--color-brand)] cursor-pointer`,"aria-label":`Select all rules in ${e.label}`}),e.kind===`category`?(0,D.jsx)(`span`,{"aria-hidden":!0,className:`shrink-0 text-xs`,children:e.icon}):(0,D.jsxs)(`svg`,{className:`text-[var(--color-fg-3)] shrink-0`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,children:[(0,D.jsx)(`path`,{d:`M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z`}),(0,D.jsx)(`polyline`,{points:`14 2 14 8 20 8`})]}),(0,D.jsx)(`code`,{className:`text-xs text-[var(--color-fg-0)] font-mono`,style:e.accent?{color:e.accent}:void 0,children:e.label}),e.sublabel&&(0,D.jsx)(`span`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)] shrink-0`,children:e.sublabel}),s&&(0,D.jsx)(Bs,{data:o,width:60,height:16,color:`var(--color-brand)`}),(0,D.jsxs)(`span`,{className:`ml-auto font-mono text-[11px] text-[var(--color-fg-3)] tabular-nums`,children:[r,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`/`,e.rules.length]})]})]}),(0,D.jsxs)(Y,{className:`py-0`,children:[e.rules.length===0?(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] py-3`,children:[`no rules in this `,e.kind]}):(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:e.rules.map(e=>{let t=e.id===F,r=te.has(e.id),i=L[e.id],a=N.has(e.id),o=i&&i.hits>0?Pp(g?.rows,20,3600*1e3,t=>t.ruleId===e.id):null;return(0,D.jsx)(`div`,{ref:t?I:null,className:`py-2.5 ${t?`bg-amber-400/8 border-l-2 border-l-amber-400/60 -mx-3 px-3 -my-px`:r?`bg-sky-400/5`:``}`,children:(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,D.jsxs)(`div`,{className:`flex items-start gap-2 min-w-0 flex-1`,children:[(0,D.jsx)(`input`,{type:`checkbox`,checked:r,onChange:()=>Se(e.id),className:`mt-1 accent-[var(--color-brand)] cursor-pointer`,"aria-label":`Select rule ${e.id}`}),(0,D.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mb-1 flex-wrap`,children:[(0,D.jsx)(`select`,{value:e.decision,onChange:async t=>{await Op(e.id,e.file,t.target.value),ie()},className:`bg-[var(--color-surface-0)] border border-[var(--color-line-1)] rounded-sm px-1.5 py-0.5 text-[11px] font-mono uppercase tracking-wider cursor-pointer focus:outline-none focus:border-[var(--color-brand)]/50 ${Sp[e.decision]??`text-[var(--color-fg-2)]`}`,children:xp.map(e=>(0,D.jsx)(`option`,{value:e,children:e},e))}),(0,D.jsx)(Pr,{ruleId:e.id,children:(0,D.jsx)(`code`,{className:`text-xs font-mono text-[var(--color-fg-0)] break-all`,children:e.id})}),ee===`file`&&e.category&&(0,D.jsx)(nm,{category:e.category,inferred:e.categoryInferred,onPick:we}),n&&e.tags&&e.tags.length>0&&e.tags.slice(0,5).map(e=>(0,D.jsx)(`span`,{className:`text-[9px] font-mono px-1 py-px rounded-sm bg-[var(--color-surface-3)] text-[var(--color-fg-3)] shrink-0`,children:e},e)),o&&(0,D.jsx)(Bs,{data:o,width:50,height:14,color:Cp[e.decision]??`#a8a29e`}),i&&i.hits>0&&(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] tabular-nums`,children:[`·`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:i.hits}),` `,`hit`,i.hits===1?``:`s`,i.avgDurationMs>0&&(0,D.jsxs)(D.Fragment,{children:[` · `,(0,D.jsxs)(`span`,{className:i.avgDurationMs>50?`text-amber-300`:`text-[var(--color-fg-1)]`,children:[i.avgDurationMs.toFixed(1),`ms`]}),` `,`avg`]}),` · `,Np(i.lastSeen)]}),(!i||i.hits===0)&&(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] uppercase tracking-wider`,children:`· never fired`}),n&&(0,D.jsx)(`button`,{onClick:()=>Ee(e.id),className:`ml-auto text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:a?`hide audit`:`audit`})]}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--color-fg-2)] truncate`,children:e.message}),n&&a&&(0,D.jsx)(Gp,{ruleId:e.id})]})]}),(0,D.jsx)(Lp,{rule:e,file:e.file,onToggle:async()=>{await Dp(e.id,e.file),ie()}})]})},e.id)})}),n&&e.content&&(0,D.jsxs)(`details`,{className:`mt-3 pb-3`,children:[(0,D.jsx)(`summary`,{className:`overline cursor-pointer hover:text-[var(--color-fg-1)] select-none`,children:`raw source`}),(0,D.jsx)(`pre`,{className:`mt-2 p-3 bg-[var(--color-surface-0)] border border-[var(--color-line-0)] rounded-sm text-[11px] text-[var(--color-fg-2)] overflow-x-auto whitespace-pre-wrap break-words font-mono`,children:e.content})]})]})]})},e.key)})})]})}var im={allow:`#4ade80`,block:`#f87171`,ask:`#fbbf24`,force:`#a78bfa`,log:`#7dd3fc`,shadow:`#94a3b8`},am=[`<1ms`,`1-10ms`,`10-100ms`,`100ms-1s`,`>1s`];function om(e){return e?new Date(e*1e3).toLocaleString():`—`}function sm(e){if(e<1)return`<1s`;if(e<60)return`${e}s`;if(e<3600)return`${Math.floor(e/60)}m ${e%60}s`;let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n>0?`${t}h ${n}m`:`${t}h`}function cm({title:e,hint:t,children:n}){return(0,D.jsxs)(`section`,{className:`flex flex-col rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] overflow-hidden`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between px-3 py-1.5 border-b border-[var(--color-line-1)] bg-black/30 shrink-0`,children:[(0,D.jsx)(`span`,{className:`overline text-[var(--color-fg-3)]`,children:e}),t&&(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:t})]}),(0,D.jsx)(`div`,{className:`p-3 flex flex-col gap-2 flex-1 min-h-0`,children:n})]})}function lm({allowed:e,blocked:t,asked:n,forced:r}){let i=Math.max(0,e),a=Math.max(0,t),o=Math.max(0,n),s=Math.max(0,r),c=i+a+o+s;if(c===0)return(0,D.jsx)(`div`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:`No evals recorded.`});let l=[{label:`allow`,value:i,color:im.allow},{label:`block`,value:a,color:im.block},{label:`ask`,value:o,color:im.ask},{label:`force`,value:s,color:im.force}].filter(e=>e.value>0),u=2*Math.PI*32,d=0;return(0,D.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,D.jsxs)(`svg`,{width:`92`,height:`92`,viewBox:`-46 -46 92 92`,className:`shrink-0`,children:[(0,D.jsx)(`circle`,{r:32,fill:`none`,stroke:`#222`,strokeWidth:`12`}),l.map(e=>{let t=e.value/c*u,n=(0,D.jsx)(`circle`,{r:32,fill:`none`,stroke:e.color,strokeWidth:`12`,strokeDasharray:`${t} ${u-t}`,strokeDashoffset:-d,transform:`rotate(-90)`},e.label);return d+=t,n}),(0,D.jsx)(`text`,{textAnchor:`middle`,dy:`0.35em`,fontSize:`14`,fontFamily:`ui-monospace, monospace`,fill:`var(--color-fg-1)`,children:c})]}),(0,D.jsx)(`ul`,{className:`flex-1 flex flex-col gap-1 text-[11px] font-mono`,children:l.map(e=>{let t=Math.round(e.value/c*1e3)/10;return(0,D.jsxs)(`li`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`size-2 rounded-sm shrink-0`,style:{background:e.color}}),(0,D.jsx)(`span`,{className:`uppercase tracking-wide text-[var(--color-fg-2)] w-12`,children:e.label}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-1)] font-semibold`,children:e.value}),(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[t,`%`]})]},e.label)})})]})}function um({rows:e,maxRows:t=10,emptyMessage:n}){if(e.length===0)return(0,D.jsx)(`div`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:n});let r=e.slice(0,t).map(e=>({...e,value:Math.max(0,e.value)})),i=Math.max(...r.map(e=>e.value),1);return(0,D.jsx)(`ul`,{className:`flex flex-col gap-1.5 text-[11px] font-mono`,children:r.map(e=>{let t=Math.max(2,e.value/i*100);return(0,D.jsxs)(`li`,{className:`flex flex-col gap-0.5`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,D.jsx)(`span`,{className:`truncate text-[var(--color-fg-2)]`,title:e.label,children:e.label}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-1)] font-semibold shrink-0`,children:e.value})]}),(0,D.jsx)(`div`,{className:`h-1 rounded-sm bg-white/5 overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full bg-[var(--color-hig-blue)]/70`,style:{width:`${t}%`}})}),e.sublabel&&(0,D.jsx)(`span`,{className:`text-[10px] text-[var(--color-fg-4)] truncate`,title:e.sublabel,children:e.sublabel})]},e.label)})})}function dm({latency:e}){let t={};for(let n of e)t[n.bucket]=Math.max(0,n.hits);let n=Math.max(...Object.values(t),1);return Object.values(t).reduce((e,t)=>e+t,0)===0?(0,D.jsx)(`div`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:`No latency data.`}):(0,D.jsx)(`div`,{className:`flex items-end gap-2 h-[80px]`,children:am.map(e=>{let r=t[e]??0;return(0,D.jsxs)(`div`,{className:`flex-1 flex flex-col items-center gap-1`,children:[(0,D.jsx)(`div`,{className:`w-full bg-[var(--color-hig-blue)]/60 rounded-sm`,style:{height:`${n>0?Math.round(r/n*70):0}px`,minHeight:r>0?`4px`:`0px`},title:`${r} evals in ${e}`}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] whitespace-nowrap`,children:e}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] tabular-nums`,children:r})]},e)})})}function fm({sessionKey:e}){let[t,n]=(0,_.useState)(0),{data:r,loading:i,error:a}=H(`/api/json/sessions/detail?session_key=${encodeURIComponent(e)}&audit_limit=500`,[t]),o=zt([`activity-updated`])[`activity-updated`]??0;(0,_.useEffect)(()=>{o>0&&r?.summary.is_active&&n(e=>e+1)},[o,r?.summary.is_active]);let s=(0,_.useMemo)(()=>{if(!r)return[];let e=r.tools.top.map(e=>({label:e.tool,value:Math.max(0,e.hits)}));return r.tools.other>0&&e.push({label:`(${r.tools.other} other)`,value:Math.max(0,r.tools.other)}),e},[r]),c=(0,_.useMemo)(()=>r?r.rules.map(e=>({label:e.rule_id,sublabel:e.rule_message,value:Math.max(0,e.hits)})):[],[r]);if(a)return(0,D.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,D.jsxs)(`header`,{children:[(0,D.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Session inspector`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-3)] mt-1 font-mono`,children:e})]}),(0,D.jsxs)(`div`,{className:`rounded-sm border border-rose-500/30 bg-rose-500/5 p-4 text-[12px] font-mono text-rose-300`,children:[a.includes(`404`)?`No audit entries found for this session. It may have been pruned, or the URL is malformed.`:`Failed to load session: ${a}`,(0,D.jsx)(`div`,{className:`mt-2`,children:(0,D.jsx)(`a`,{href:`/sessions`,className:`text-[var(--color-hig-blue)] hover:underline`,children:`← Back to sessions`})})]})]});if(i&&!r)return(0,D.jsxs)(`div`,{className:`p-4 text-[12px] font-mono text-[var(--color-fg-3)]`,children:[`Loading session `,e,`…`]});if(!r)return null;let{summary:l,audit:u,latency:d}=r,f={...l,evals:Math.max(0,l.evals),allowed:Math.max(0,l.allowed),blocked:Math.max(0,l.blocked),asked:Math.max(0,l.asked),forced:Math.max(0,l.forced),duration_s:Math.max(0,l.duration_s)},p=f.evals>0?Math.round(f.blocked/f.evals*1e3)/10:0;return(0,D.jsxs)(`div`,{className:`flex flex-col gap-4 p-4 h-full min-h-0`,children:[(0,D.jsxs)(`header`,{className:`flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsx)(`a`,{href:`/sessions`,"data-tutorial":`sd-back`,className:`hover:underline`,children:`← Sessions`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`/`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] font-semibold`,children:f.agent_id})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-end justify-between gap-3`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`h1`,{className:`text-lg font-semibold`,children:[f.client,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] font-mono text-[14px] ml-2`,children:f.agent_id})]}),(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] mt-1 break-all`,children:f.session_id??`(no session_id — solo bucket)`})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 text-[11px] font-mono`,children:[(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-sm border ${f.is_active?`bg-emerald-500/10 border-emerald-500/30 text-emerald-300`:`bg-white/5 border-white/10 text-[var(--color-fg-3)]`}`,children:[(0,D.jsx)(`span`,{className:`size-1.5 rounded-full ${f.is_active?`bg-emerald-400 animate-pulse`:`bg-[var(--color-fg-4)]`}`}),f.is_active?`Live`:`Closed`]}),(0,D.jsx)(pm,{label:`Evals`,value:f.evals.toLocaleString()}),(0,D.jsx)(pm,{label:`Blocked`,value:f.blocked>0?`${f.blocked} (${p}%)`:`0`,color:f.blocked>0?`text-rose-300`:void 0}),(0,D.jsx)(pm,{label:`Asked`,value:f.asked.toLocaleString(),color:`text-amber-300`}),(0,D.jsx)(pm,{label:`Started`,value:om(f.started_at)}),(0,D.jsx)(pm,{label:`Duration`,value:sm(f.duration_s)})]})]})]}),(0,D.jsxs)(`div`,{className:`grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-4 gap-3`,children:[(0,D.jsx)(cm,{title:`Decisions`,hint:`${f.evals} evals`,children:(0,D.jsx)(lm,{allowed:f.allowed,blocked:f.blocked,asked:f.asked,forced:f.forced})}),(0,D.jsx)(cm,{title:`Top tools`,hint:`${r.tools.top.length+ +(r.tools.other>0)} buckets`,children:(0,D.jsx)(um,{rows:s,emptyMessage:`No tool activity.`})}),(0,D.jsx)(cm,{title:`Top rules`,hint:`${c.length} hit`,children:(0,D.jsx)(um,{rows:c,emptyMessage:`No rules matched this session.`})}),(0,D.jsx)(cm,{title:`Latency`,hint:`duration buckets`,children:(0,D.jsx)(dm,{latency:d})})]}),(0,D.jsx)(`div`,{"data-tutorial":`sd-audit`,className:`flex-1 min-h-[400px]`,children:(0,D.jsx)(mu,{sessionKey:e,entries:u,loading:i,error:null,playingIndex:-1})})]})}function pm({label:e,value:t,color:n}){return(0,D.jsxs)(`div`,{className:`flex flex-col`,children:[(0,D.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-[var(--color-fg-4)]`,children:e}),(0,D.jsx)(`span`,{className:`tabular-nums ${n??`text-[var(--color-fg-1)]`}`,children:t})]})}var mm=100,hm={"claude-code":`bg-orange-500/15 text-orange-300 border-orange-500/30`,cursor:`bg-sky-500/15 text-sky-300 border-sky-500/30`,copilot:`bg-emerald-500/15 text-emerald-300 border-emerald-500/30`,gemini:`bg-blue-500/15 text-blue-300 border-blue-500/30`,antigravity:`bg-purple-500/15 text-purple-300 border-purple-500/30`,codex:`bg-pink-500/15 text-pink-300 border-pink-500/30`,pi:`bg-amber-500/15 text-amber-300 border-amber-500/30`,generic:`bg-slate-500/15 text-slate-300 border-slate-500/30`};function gm(e){if(!e)return`—`;let t=new Date(e*1e3),n=new Date,r=t.toLocaleTimeString(`en-US`,{hour:`2-digit`,minute:`2-digit`,hour12:!1});if(t.toDateString()===n.toDateString())return`Today ${r}`;let i=new Date(n);return i.setDate(i.getDate()-1),t.toDateString()===i.toDateString()?`Yesterday ${r}`:`${t.toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})} ${r}`}function _m(e){if(e<1)return`—`;if(e<60)return`${e}s`;if(e<3600)return`${Math.floor(e/60)}m`;let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n>0?`${t}h ${n}m`:`${t}h`}function vm({client:e}){return(0,D.jsx)(`span`,{className:`inline-flex items-center rounded-sm border px-1.5 py-0.5 text-[10px] font-mono uppercase tracking-wide ${hm[e]??`bg-white/5 text-[var(--color-fg-3)] border-white/10`}`,children:e})}function ym(){let[e,t]=(0,_.useState)(0),[n,r]=(0,_.useState)(``),[i,a]=(0,_.useState)(0),{data:o,loading:s,error:c,refetch:l}=H(`/api/json/sessions/list?limit=${mm}&offset=${e}`,[i]),u=zt([`activity-updated`])[`activity-updated`]??0;(0,_.useEffect)(()=>{u>0&&a(e=>e+1)},[u]);let d=o?.sessions??[],f=o?.total??0,p=(0,_.useMemo)(()=>{if(!n.trim())return d;let e=n.toLowerCase();return d.filter(t=>t.session_key.toLowerCase().includes(e)||t.client.toLowerCase().includes(e)||(t.top_tool??``).toLowerCase().includes(e)||(t.top_rule??``).toLowerCase().includes(e))},[d,n]),m=d.filter(e=>e.is_active).length,h=d.reduce((e,t)=>e+Math.max(0,t.evals),0),g=d.reduce((e,t)=>e+Math.max(0,t.blocked),0),v=h>0?Math.round(g/h*1e3)/10:0;return(0,D.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,D.jsxs)(`header`,{className:`flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Sessions`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-3)] mt-1`,children:`Every AI agent session recorded by the daemon. Click a row to open its inspector — graph, charts, and full audit log.`})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] font-semibold`,children:f.toLocaleString()}),` `,`total`]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-emerald-300 font-semibold`,children:m}),` `,`active`]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] font-semibold`,children:h.toLocaleString()}),` `,`evals on page`]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsxs)(`span`,{children:[(0,D.jsxs)(`span`,{className:v>0?`text-rose-300 font-semibold`:`text-emerald-300`,children:[v,`%`]}),` `,`blocked`]})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`input`,{"data-tutorial":`sessions-filter`,type:`search`,value:n,onChange:e=>r(e.target.value),placeholder:`Filter by client, session, tool, or rule…`,className:`flex-1 bg-[var(--color-surface-1)] border border-[var(--color-line-1)] rounded-sm px-3 py-1.5 text-[12px] font-mono focus:outline-none focus:ring-1 focus:ring-[var(--color-hig-blue)]`}),(0,D.jsx)(`button`,{"data-tutorial":`sessions-refresh`,type:`button`,onClick:()=>l(),className:`px-3 py-1.5 text-[11px] font-mono uppercase tracking-wide border border-[var(--color-line-1)] rounded-sm hover:bg-white/5`,children:`Refresh`})]})]}),(0,D.jsx)(`div`,{className:`border border-[var(--color-line-1)] rounded-sm overflow-hidden`,children:(0,D.jsx)(`div`,{className:`overflow-x-auto`,children:(0,D.jsxs)(`table`,{"data-tutorial":`sessions-table`,className:`w-full text-[12px] font-mono`,children:[(0,D.jsx)(`thead`,{className:`bg-black/30 text-[var(--color-fg-3)] uppercase tracking-wide text-[10px]`,children:(0,D.jsxs)(`tr`,{children:[(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Status`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Client`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Session`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Started`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Duration`}),(0,D.jsx)(`th`,{className:`text-right px-3 py-2`,children:`Evals`}),(0,D.jsx)(`th`,{className:`text-right px-3 py-2 text-emerald-300/80`,children:`Allowed`}),(0,D.jsx)(`th`,{className:`text-right px-3 py-2 text-rose-300/80`,children:`Blocked`}),(0,D.jsx)(`th`,{className:`text-right px-3 py-2 text-amber-300/80`,children:`Asked`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Top Tool`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Top Rule`})]})}),(0,D.jsxs)(`tbody`,{className:`divide-y divide-[var(--color-line-1)]/40`,children:[s&&p.length===0&&(0,D.jsx)(`tr`,{children:(0,D.jsx)(`td`,{colSpan:11,className:`px-3 py-6 text-center text-[var(--color-fg-4)]`,children:`Loading sessions…`})}),c&&(0,D.jsx)(`tr`,{children:(0,D.jsxs)(`td`,{colSpan:11,className:`px-3 py-6 text-center text-rose-300`,children:[`Failed to load sessions: `,c]})}),!s&&!c&&p.length===0&&(0,D.jsx)(`tr`,{children:(0,D.jsx)(`td`,{colSpan:11,className:`px-3 py-6 text-center text-[var(--color-fg-4)]`,children:d.length===0?`No sessions recorded yet.`:`No sessions match "${n}".`})}),p.map(e=>{let t={...e,evals:Math.max(0,e.evals),allowed:Math.max(0,e.allowed),blocked:Math.max(0,e.blocked),asked:Math.max(0,e.asked),forced:Math.max(0,e.forced),duration_s:Math.max(0,e.duration_s)},n=t.evals>0?Math.round(t.blocked/t.evals*1e3)/10:0;return(0,D.jsxs)(`tr`,{className:`hover:bg-white/[0.03] cursor-pointer`,children:[(0,D.jsx)(`td`,{className:`px-3 py-2`,children:(0,D.jsx)(`a`,{href:`/sessions/${encodeURIComponent(t.session_key)}`,className:`flex items-center gap-1.5 no-underline`,children:t.is_active?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`size-1.5 rounded-full bg-emerald-400 animate-pulse`}),(0,D.jsx)(`span`,{className:`text-emerald-300 text-[10px] uppercase tracking-wide`,children:`Live`})]}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`size-1.5 rounded-full bg-[var(--color-fg-4)]`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] text-[10px] uppercase tracking-wide`,children:`Closed`})]})})}),(0,D.jsx)(`td`,{className:`px-3 py-2`,children:(0,D.jsx)(vm,{client:t.client})}),(0,D.jsx)(`td`,{className:`px-3 py-2`,children:(0,D.jsx)(`a`,{href:`/sessions/${encodeURIComponent(t.session_key)}`,className:`text-[var(--color-fg-1)] hover:text-[var(--color-hig-blue)] hover:underline`,children:t.agent_id})}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-3)]`,children:gm(t.started_at)}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-3)]`,children:_m(t.duration_s)}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-right font-semibold`,children:t.evals.toLocaleString()}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-right text-emerald-300`,children:t.allowed.toLocaleString()}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-right`,children:t.blocked>0?(0,D.jsxs)(`span`,{className:`text-rose-300`,children:[t.blocked.toLocaleString(),n>0&&(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)] ml-1 text-[10px]`,children:[`(`,n,`%)`]})]}):(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`0`})}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-right text-amber-300`,children:t.asked>0?t.asked.toLocaleString():(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`0`})}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-2)] max-w-[180px] truncate`,children:t.top_tool??(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`—`})}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-2)] max-w-[200px] truncate`,children:t.top_rule??(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`—`})})]},t.session_key)})]})]})})}),f>mm&&(0,D.jsxs)(`footer`,{className:`flex items-center justify-between text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsxs)(`span`,{children:[e+1,`–`,Math.min(e+mm,f),` of`,` `,f.toLocaleString()]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`button`,{type:`button`,disabled:e===0,onClick:()=>t(Math.max(0,e-mm)),className:`px-3 py-1 border border-[var(--color-line-1)] rounded-sm disabled:opacity-30 hover:bg-white/5`,children:`← Prev`}),(0,D.jsx)(`button`,{type:`button`,disabled:e+mm>=f,onClick:()=>t(e+mm),className:`px-3 py-1 border border-[var(--color-line-1)] rounded-sm disabled:opacity-30 hover:bg-white/5`,children:`Next →`})]})]})]})}function bm({status:e,className:t=``}){return(0,D.jsx)(`span`,{className:`status-dot ${e===`ok`?`bg-[var(--color-decision-allow)]`:e===`warn`?`bg-[var(--color-decision-ask)]`:e===`fail`?`bg-[var(--color-decision-block)]`:`bg-[var(--color-fg-3)]`} ${t}`})}function xm({status:e}){let t=e===`ok`?`text-[var(--color-decision-allow)]`:e===`warn`?`text-[var(--color-decision-ask)]`:e===`fail`?`text-[var(--color-decision-block)]`:`text-[var(--color-fg-3)]`,n=e===`ok`?`OK`:e===`warn`?`Warn`:e===`fail`?`Fail`:`Skipped`;return(0,D.jsx)(`span`,{className:`text-[10.5px] font-medium uppercase tracking-wide ${t}`,children:n})}function Sm(e){return e===void 0?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function Cm(e){if(!e)return``;let t=Math.floor((Date.now()-e)/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function wm(e,t){return t&&e.startsWith(`${t}/`)?`~/${e.slice(t.length+1)}`:e===t?`~`:e}function Tm({file:e,home:t,wired:n}){return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 py-1 border-b border-[var(--color-line-0)] last:border-0 text-[11.5px]`,children:[(0,D.jsx)(bm,{status:e.exists?n===void 0||n?`ok`:`warn`:`skip`}),(0,D.jsx)(`code`,{className:`flex-1 truncate text-[var(--color-fg-1)]`,title:e.path,children:wm(e.path,t)}),e.exists?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)]`,children:Sm(e.size)}),(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)] min-w-[60px] text-right`,children:Cm(e.modified_at)}),n===!1&&(0,D.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-[var(--color-decision-ask)]`,title:`File exists but does not appear to contain SSG wiring`,children:`no ssg`}),n===!0&&(0,D.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-[var(--color-decision-allow)]`,title:`File contains SSG hook / MCP entries`,children:`wired`})]}):(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)]`,children:`missing`})]})}function Em({title:e,status:t,children:n,hint:r}){return(0,D.jsxs)(`section`,{className:`hig-card hig-card-padded`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between mb-3`,children:[(0,D.jsxs)(`h2`,{className:`text-[13px] font-semibold text-[var(--color-fg-0)] flex items-center gap-2`,children:[t!==void 0&&(0,D.jsx)(bm,{status:t}),e]}),r&&(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)]`,children:r})]}),(0,D.jsx)(`div`,{children:n})]})}function Dm({k:e,v:t,mono:n=!1}){return(0,D.jsxs)(`div`,{className:`flex items-baseline gap-3 py-1 text-[11.5px] border-b border-[var(--color-line-0)] last:border-0`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] min-w-[110px]`,children:e}),(0,D.jsx)(`span`,{className:`flex-1 text-[var(--color-fg-1)] ${n?`font-mono text-[11px]`:``}`,children:t})]})}var Om={"claude-code":`Claude Code`,cursor:`Cursor`,codex:`Codex CLI`,pi:`Pi Agent`,gemini:`Gemini CLI`,antigravity:`Antigravity`,copilot:`GitHub Copilot`};function km({adapter:e,home:t}){let n=Om[e.id]??e.id,r=e.artifacts.filter(e=>e.exists&&e.ssg_wired).length,i=e.artifacts.filter(e=>e.exists).length;return(0,D.jsxs)(`div`,{className:`rounded-md border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(bm,{status:e.status}),(0,D.jsx)(`span`,{className:`text-[12.5px] font-semibold text-[var(--color-fg-0)]`,children:n}),e.active&&(0,D.jsx)(`span`,{className:`text-[9.5px] font-semibold uppercase tracking-wider px-1.5 py-0.5 rounded-sm text-[var(--color-hig-blue)] bg-[color-mix(in_oklab,var(--color-hig-blue)_14%,transparent)]`,title:`This is the adapter ssg is currently using at runtime`,children:`Active`})]}),(0,D.jsxs)(`span`,{className:`text-[10px] text-[var(--color-fg-3)]`,children:[r,`/`,e.artifacts.length,` wired`]})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap gap-2 mb-2 text-[10.5px]`,children:[(0,D.jsx)(`span`,{className:e.detected?`text-[var(--color-decision-allow)]`:`text-[var(--color-fg-3)]`,children:e.detected?`● detected`:`○ not detected`}),(0,D.jsx)(`span`,{className:e.healthy?`text-[var(--color-decision-allow)]`:`text-[var(--color-fg-3)]`,children:e.healthy?`● binary healthy`:`○ binary missing`}),i===0&&(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`○ no config files on disk`})]}),e.artifacts.length>0&&(0,D.jsx)(`div`,{className:`border-t border-[var(--color-line-0)] pt-1`,children:e.artifacts.map(e=>(0,D.jsx)(Tm,{file:e,home:t,wired:e.exists?e.ssg_wired:void 0},e.path))}),e.status===`warn`&&i===0&&(0,D.jsxs)(`div`,{className:`mt-2 text-[10.5px] text-[var(--color-fg-3)]`,children:[`Wire it up with:`,` `,(0,D.jsxs)(`code`,{className:`font-mono text-[var(--color-fg-1)]`,children:[`ssg init --client=`,e.id]})]})]})}function Am(){let{data:e,loading:t,error:n,refetch:r}=H(`/api/json/setup-status`);if(t&&!e)return(0,D.jsx)(`div`,{className:`py-12 text-center text-[var(--color-fg-3)] text-[12px]`,children:`Reading setup status…`});if(n||!e)return(0,D.jsxs)(`div`,{className:`hig-card hig-card-padded text-[12px]`,children:[(0,D.jsxs)(`p`,{className:`text-[var(--color-decision-block)] mb-2`,children:[`Could not load /api/json/setup-status: `,n??`no response`]}),(0,D.jsx)(`button`,{onClick:r,className:`hig-button hig-button-small`,children:`Retry`})]});let{summary:i,license:a,daemon:o,dashboard:s,native:c,db:l,mcp:u,rules:d,init_files:f,adapters:p,hub:m,checks:h,home:g,cwd:_}=e;return(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsxs)(`div`,{className:`flex items-end justify-between`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-[20px] font-semibold tracking-tight text-[var(--color-fg-0)] leading-tight`,children:`Setup Status`}),(0,D.jsxs)(`p`,{className:`text-[12.5px] text-[var(--color-fg-3)] mt-1 leading-relaxed`,children:[`What `,(0,D.jsx)(`code`,{className:`font-mono`,children:`ssg init`}),` wrote and whether every piece is wired up — license, hooks, MCP, native engine, daemon, rules, and hub packages.`]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsxs)(`span`,{className:`text-[11px] text-[var(--color-fg-3)]`,children:[`ssg v`,e.version]}),(0,D.jsx)(`button`,{onClick:r,className:`hig-button hig-button-small`,children:`Refresh`})]})]}),(0,D.jsxs)(`section`,{"data-tutorial":`setup-summary`,className:`hig-card hig-card-padded flex items-center gap-6`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(bm,{status:i.overall,className:`!w-3 !h-3`}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`text-[11px] uppercase tracking-wide text-[var(--color-fg-3)]`,children:`Overall`}),(0,D.jsx)(`div`,{className:`text-[14px] font-semibold text-[var(--color-fg-0)]`,children:i.overall===`ok`?`Healthy`:i.overall===`warn`?`Needs attention`:i.overall===`fail`?`Broken`:`Skipped`})]})]}),(0,D.jsxs)(`div`,{className:`flex gap-4 text-[12px]`,children:[(0,D.jsxs)(`span`,{className:`text-[var(--color-decision-allow)]`,children:[`● `,i.ok,` ok`]}),(0,D.jsxs)(`span`,{className:`text-[var(--color-decision-ask)]`,children:[`● `,i.warn,` warn`]}),i.fail>0&&(0,D.jsxs)(`span`,{className:`text-[var(--color-decision-block)]`,children:[`● `,i.fail,` fail`]}),(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-3)]`,children:[`○ `,i.skip,` skipped`]})]}),(0,D.jsxs)(`div`,{className:`ml-auto text-right`,children:[(0,D.jsx)(`div`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-3)]`,children:`Working dir`}),(0,D.jsx)(`code`,{className:`text-[11px] text-[var(--color-fg-1)]`,title:_,children:wm(_,g)})]})]}),(0,D.jsx)(Em,{title:`Checks`,hint:`${h.length} probes`,children:(0,D.jsx)(`div`,{children:h.map(e=>(0,D.jsxs)(`div`,{className:`flex items-start gap-3 py-1.5 border-b border-[var(--color-line-0)] last:border-0`,children:[(0,D.jsx)(bm,{status:e.status,className:`mt-1`}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,D.jsx)(`span`,{className:`text-[12px] font-medium text-[var(--color-fg-0)]`,children:e.name}),(0,D.jsx)(xm,{status:e.status})]}),(0,D.jsx)(`div`,{className:`text-[11px] text-[var(--color-fg-2)] mt-0.5 break-words`,children:e.detail}),e.fix&&(0,D.jsxs)(`div`,{className:`text-[11px] text-[var(--color-hig-blue)] font-mono mt-0.5`,children:[`→ `,e.fix]})]})]},e.name))})}),(0,D.jsxs)(Em,{title:`License & authentication`,status:a.status===`healthy`||a.status===`healthy_free`?`ok`:`warn`,children:[(0,D.jsx)(Dm,{k:`Tier`,v:a.tier_label}),(0,D.jsx)(Dm,{k:`Status`,v:a.status}),(0,D.jsx)(Dm,{k:`Account`,v:a.email??`—`}),(0,D.jsx)(Dm,{k:`Auth method`,v:a.auth_method??`—`}),(0,D.jsx)(Dm,{k:`Evals today`,v:a.eval_daily_limit===null?`${a.evals_today.toLocaleString()} (unlimited)`:`${a.evals_today.toLocaleString()} / ${a.eval_daily_limit.toLocaleString()}`}),(0,D.jsxs)(`div`,{className:`mt-2 pt-2 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`div`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-3)] mb-1`,children:`Credential files`}),(0,D.jsx)(Tm,{file:a.license_file,home:g}),(0,D.jsx)(Tm,{file:a.hosts_file,home:g})]})]}),(0,D.jsxs)(Em,{title:`Runtime processes`,status:o.alive&&s.alive?`ok`:`warn`,children:[(0,D.jsx)(Dm,{k:`Daemon (evald)`,v:o.alive?`running — PID ${o.pid}`:o.pid?`stale — PID ${o.pid} in pidfile but process gone`:`not running`}),(0,D.jsx)(Dm,{k:`Daemon socket`,v:o.socket_exists?`present`:`missing`,mono:!0}),(0,D.jsx)(Dm,{k:`Dashboard (serve)`,v:s.alive?`running — PID ${s.pid}`:`not running`}),(0,D.jsx)(Dm,{k:`Native engine`,v:c.available?`loaded — sub-ms eval available`:`unavailable — TypeScript fallback`})]}),(0,D.jsxs)(Em,{title:`Database & MCP`,status:l.status,children:[(0,D.jsx)(Dm,{k:`Rules in DB`,v:l.rules.toLocaleString()}),(0,D.jsx)(Dm,{k:`Audit log rows`,v:l.audit_rows.toLocaleString()}),(0,D.jsx)(Dm,{k:`DB path`,v:wm(l.path,g),mono:!0}),(0,D.jsxs)(`div`,{className:`mt-2 pt-2 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`div`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-3)] mb-1`,children:`MCP server`}),(0,D.jsx)(Dm,{k:`Status`,v:u.status===`active`?`active — ${u.recent_5min.toLocaleString()} calls in last 5 min`:u.status===`configured`?`configured — ${u.total.toLocaleString()} historical calls, none recent`:`no MCP traffic recorded yet`}),(0,D.jsx)(Dm,{k:`All-time calls`,v:u.total.toLocaleString()})]})]}),(0,D.jsxs)(Em,{title:`Rules directories`,status:d.local_count>0?`ok`:`warn`,children:[(0,D.jsx)(Dm,{k:`Local`,v:`${d.local_count} .rules file${d.local_count===1?``:`s`}`}),(0,D.jsx)(Dm,{k:`Local path`,v:wm(d.local_dir,g),mono:!0}),(0,D.jsx)(Dm,{k:`Global`,v:`${d.global_count} .rules file${d.global_count===1?``:`s`}`}),(0,D.jsx)(Dm,{k:`Global path`,v:wm(d.global_dir,g),mono:!0})]}),(0,D.jsx)(Em,{title:`Project init files`,hint:`${f.filter(e=>e.exists).length}/${f.length} present`,children:(0,D.jsx)(`div`,{children:f.map(e=>(0,D.jsx)(Tm,{file:e,home:g},e.path))})}),(0,D.jsx)(Em,{title:`Adapters, hooks & MCP files`,hint:e.active_adapter?`Active: ${Om[e.active_adapter]??e.active_adapter}`:`No active adapter`,children:(0,D.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-1 lg:grid-cols-2`,children:p.map(e=>(0,D.jsx)(km,{adapter:e,home:g},e.id))})}),(0,D.jsxs)(Em,{title:`Hub-installed rulesets`,status:m.installs.length===0?`skip`:m.drift===0?`ok`:`warn`,hint:m.installs.length===0?`none installed`:`${m.in_sync} in sync${m.drift>0?`, ${m.drift} drift`:``}`,children:[(0,D.jsx)(Tm,{file:m.pins_file,home:g}),m.installs.length===0?(0,D.jsxs)(`p`,{className:`text-[11.5px] text-[var(--color-fg-3)] mt-2`,children:[`Install rulesets from the Hub tab. Each install is recorded per project path in `,(0,D.jsx)(`code`,{className:`font-mono`,children:`hub-pins.json`}),`.`]}):(0,D.jsx)(`div`,{className:`mt-2 space-y-2`,children:m.installs.map((e,t)=>(0,D.jsxs)(`div`,{className:`rounded-md border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-2 text-[11.5px]`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,D.jsx)(bm,{status:e.in_sync?`ok`:`warn`}),(0,D.jsx)(`span`,{className:`font-semibold text-[var(--color-fg-0)]`,children:e.id}),(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)]`,children:e.version}),(0,D.jsx)(`span`,{className:`ml-auto text-[10.5px] text-[var(--color-fg-3)]`,children:Cm(e.installed_at)})]}),(0,D.jsx)(`code`,{className:`block truncate text-[11px] text-[var(--color-fg-2)]`,title:e.path,children:wm(e.path,g)}),e.files.length>0&&(0,D.jsx)(`div`,{className:`mt-1 flex flex-wrap gap-1`,children:e.files.map(e=>(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-2)] bg-[var(--color-surface-2)] border border-[var(--color-line-0)] rounded-sm px-1.5 py-0.5`,children:e},e))}),!e.in_sync&&e.drift_reason&&(0,D.jsxs)(`div`,{className:`mt-1 text-[10.5px] text-[var(--color-decision-ask)]`,children:[`Drift: `,e.drift_reason]})]},`${e.id}-${e.path}-${t}`))})]})]})}var jm=[{id:`files`,label:`Files & folders`,blurb:`Deleting or changing things on your hard drive`},{id:`secrets`,label:`Secrets & keys`,blurb:`Reading or overwriting credentials and private files`},{id:`network`,label:`Network calls`,blurb:`Reaching out to websites and external APIs`},{id:`install`,label:`Installing software`,blurb:`Pulling new code or packages from the internet`},{id:`communication`,label:`Sending messages`,blurb:`Outgoing emails, posts, or chat messages`}],Mm=[{id:`erase-folder`,label:`AI tries to erase a folder`,plainEffect:`Permanently deletes every file inside the "output" folder. Recovery is hard.`,category:`files`,emoji:`🗑️`,toolCall:{tool:`Bash`,input:{command:`find ./output -type f -delete`}},displayByOs:{windows:`Remove-Item .\\output -Recurse -Force`,macos:`find ./output -type f -delete`,linux:`find ./output -type f -delete`}},{id:`write-env`,label:`AI tries to write your .env file`,plainEffect:`Overwrites the file that holds your API keys, passwords, and other secrets.`,category:`secrets`,emoji:`⚠️`,toolCall:{tool:`Write`,input:{file_path:`.env`,content:`API_KEY=test`}}},{id:`read-ssh-key`,label:`AI tries to read your private key`,plainEffect:`Opens the SSH key that proves you are you on remote servers. Copying it is identity theft.`,category:`secrets`,emoji:`🔑`,toolCall:{tool:`Read`,input:{file_path:`~/.ssh/id_rsa`}},displayByOs:{windows:`Read C:\\Users\\You\\.ssh\\id_rsa`,macos:`Read ~/.ssh/id_rsa`,linux:`Read ~/.ssh/id_rsa`}},{id:`install-package`,label:`AI tries to install a package`,plainEffect:`Downloads code from a public registry and adds it to your project. The code runs with your permissions.`,category:`install`,emoji:`📦`,toolCall:{tool:`Bash`,input:{command:`npm install some-package --save`}}},{id:`fetch-web`,label:`AI tries to fetch a URL`,plainEffect:`Makes a web request to an outside service. Could leak data or pull in instructions.`,category:`network`,emoji:`🌐`,toolCall:{tool:`WebFetch`,input:{url:`https://api.example.com/data`,prompt:``}}},{id:`send-email`,label:`AI tries to send an email`,plainEffect:`Sends an email from your machine without your review. Anyone could end up CC’d.`,category:`communication`,emoji:`📧`,toolCall:{tool:`Bash`,input:{command:`sendmail -t < message.txt`}},displayByOs:{windows:`Send-MailMessage -To you@example.com -Subject "..." -Body (Get-Content message.txt)`,macos:`sendmail -t < message.txt`,linux:`sendmail -t < message.txt`}}],Nm=`ssg.tryit.intro-dismissed.v1`,Pm=`ssg.tryit.os.v1`,Fm={allow:{label:`Allowed`,color:`text-emerald-300`,bg:`border-emerald-500/30 bg-emerald-500/5`,icon:`✓`,headline:`SSG would let this happen.`,next:`In real life, the AI would go ahead. If you would rather it didn’t, add a rule on the Rules page.`},block:{label:`Blocked`,color:`text-red-300`,bg:`border-red-500/30 bg-red-500/5`,icon:`✕`,headline:`SSG would stop this from running.`,next:`The AI never gets to perform the action. No files change, no commands run, no requests go out.`},ask:{label:`Ask first`,color:`text-amber-300`,bg:`border-amber-500/30 bg-amber-500/5`,icon:`?`,headline:`SSG would pause and ask you first.`,next:`You’d get a prompt on the Approvals page. Nothing happens until you click Allow or Deny.`},log:{label:`Logged`,color:`text-sky-300`,bg:`border-sky-500/30 bg-sky-500/5`,icon:`≡`,headline:`SSG would allow it but write it down.`,next:`The AI proceeds, and the action gets recorded in your Activity log for later review.`},force:{label:`Force-allow`,color:`text-violet-300`,bg:`border-violet-500/30 bg-violet-500/5`,icon:`→`,headline:`A high-priority rule explicitly allows this.`,next:`A “force” rule overrides anything that would have blocked or paused this action.`}};function Im(){if(typeof window>`u`)return`linux`;try{let e=window.localStorage.getItem(Pm);if(e===`windows`||e===`macos`||e===`linux`)return e}catch{}let e=navigator.userAgent.toLowerCase();return e.includes(`win`)?`windows`:e.includes(`mac`)?`macos`:`linux`}function Lm(e){return e===`windows`?`Windows`:e===`macos`?`Mac`:`Linux`}function Rm(e){return e===`windows`?`⊞`:e===`macos`?`🍎`:`🐧`}function zm(e,t){let n=e.displayByOs?.[t];if(n)return n;let r=e.toolCall;return r.input.command?r.input.command:r.input.file_path?r.input.file_path:r.input.url?r.input.url:JSON.stringify(r.input)}function Bm({n:e,label:t}){return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(`span`,{className:`flex items-center justify-center w-5 h-5 rounded-full bg-[var(--color-brand)]/15 text-[var(--color-brand)] text-[10px] font-semibold shrink-0`,children:e}),(0,D.jsx)(`span`,{className:`text-[11.5px] text-[var(--color-fg-2)] truncate`,children:t})]})}function Vm({os:e,setOs:t}){return(0,D.jsx)(`div`,{className:`inline-flex items-center gap-1 rounded-full border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-0.5`,children:[`windows`,`macos`,`linux`].map(n=>(0,D.jsxs)(`button`,{onClick:()=>t(n),className:`px-2.5 py-1 rounded-full text-[10.5px] font-medium cursor-pointer transition-colors ${n===e?`bg-[var(--color-brand)]/15 text-[var(--color-brand)]`:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`}`,title:`Show commands as they would look on ${Lm(n)}`,children:[Rm(n),` `,Lm(n)]},n))})}function Hm({os:e,setOs:t,onDismiss:n}){return(0,D.jsxs)(`div`,{className:`rounded-2xl border border-[var(--color-brand)]/25 bg-[var(--color-brand)]/[0.04] p-4 sm:p-5 space-y-3.5`,children:[(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h2`,{className:`text-[15px] font-semibold text-[var(--color-fg-0)] leading-tight`,children:`What SSG does — and why this page is here`}),(0,D.jsxs)(`p`,{className:`text-[12.5px] text-[var(--color-fg-2)] mt-1 leading-relaxed max-w-[60ch]`,children:[`AI coding agents can run any command on your computer: delete files, read your secrets, send emails, install packages. SSG is the policy engine that decides which of those they’re actually allowed to do.`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-0)] font-medium`,children:`This sandbox shows SSG’s decisions in real time`}),`, without anything actually running. Pick a scenario, click Run, see what your guardrails would do.`]})]}),(0,D.jsx)(`button`,{onClick:n,className:`shrink-0 text-[var(--color-fg-4)] hover:text-[var(--color-fg-1)] cursor-pointer text-[14px] leading-none p-1 -m-1`,"aria-label":`Dismiss intro`,title:`Hide this primer`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1.5 text-[11.5px]`,children:[(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-400`}),`Nothing executes`]}),(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-400`}),`No files modified`]}),(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-400`}),`No network traffic`]})]}),(0,D.jsxs)(`div`,{className:`rounded-xl border border-[var(--color-line-1)]/60 bg-[var(--color-surface-1)]/40 p-3`,children:[(0,D.jsx)(`p`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-3)] font-semibold mb-2`,children:`How it works`}),(0,D.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-3`,children:[(0,D.jsx)(Bm,{n:1,label:`Pick a scenario below`}),(0,D.jsx)(Bm,{n:2,label:`Click Run`}),(0,D.jsx)(Bm,{n:3,label:`See the decision SSG would make`})]})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1`,children:[(0,D.jsx)(`span`,{className:`text-[11.5px] text-[var(--color-fg-3)]`,children:`Showing commands as they look on`}),(0,D.jsx)(Vm,{os:e,setOs:t}),(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-4)]`,children:`(cosmetic — SSG’s decision is the same on every OS)`})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap pt-1`,children:[(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] italic max-w-[44ch] leading-snug`,children:`Every AI agent will need a policy layer. This is what one looks like.`}),(0,D.jsx)(`button`,{onClick:n,className:`text-[11.5px] font-medium text-[var(--color-fg-2)] hover:text-[var(--color-fg-0)] cursor-pointer underline-offset-2 hover:underline`,children:`Got it, hide this primer`})]})]})}function Um({scenario:e,selected:t,os:n,onClick:r}){return(0,D.jsxs)(`button`,{onClick:r,className:`flex flex-col gap-1.5 rounded-xl border px-3.5 py-3 text-left cursor-pointer transition-all ${t?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/8 shadow-[0_0_0_3px_color-mix(in_oklab,var(--color-brand)_15%,transparent)]`:`border-[var(--color-line-1)] bg-[var(--color-surface-1)] hover:border-[var(--color-line-2)] hover:bg-[var(--color-surface-2)]/40`}`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`text-[18px] leading-none shrink-0`,children:e.emoji}),(0,D.jsx)(`span`,{className:`text-[13px] font-medium text-[var(--color-fg-0)] leading-snug flex-1 min-w-0`,children:e.label})]}),(0,D.jsx)(`p`,{className:`text-[11.5px] text-[var(--color-fg-3)] leading-snug`,children:e.plainEffect}),(0,D.jsx)(`p`,{className:`font-mono text-[10.5px] text-[var(--color-fg-4)] truncate`,children:zm(e,n)})]})}function Wm(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(null),[c,l]=(0,_.useState)(!1),[u,d]=(0,_.useState)(`Bash`),[f,p]=(0,_.useState)(`{"command": ""}`),[m,h]=(0,_.useState)(()=>{if(typeof window>`u`)return!1;try{return window.localStorage.getItem(Nm)===`1`}catch{return!1}}),[g,v]=(0,_.useState)(()=>Im()),[y,b]=(0,_.useState)(!1);function x(e){v(e);try{window.localStorage.setItem(Pm,e)}catch{}}function S(){h(!0);try{window.localStorage.setItem(Nm,`1`)}catch{}}function C(){h(!1);try{window.localStorage.removeItem(Nm)}catch{}}let w=Mm.find(t=>t.id===e),T=(0,_.useMemo)(()=>{let e=new Map;for(let t of Mm){let n=e.get(t.category)??[];n.push(t),e.set(t.category,n)}return jm.filter(t=>e.has(t.id)).map(t=>({...t,scenarios:e.get(t.id)}))},[]);(0,_.useEffect)(()=>{(n||o)&&window.scrollTo({top:(document.getElementById(`tryit-result`)?.offsetTop??0)-80,behavior:`smooth`})},[n,o]),(0,_.useEffect)(()=>{if(typeof window>`u`)return;let e=new URLSearchParams(window.location.search).get(`scenario`);e&&Mm.some(t=>t.id===e)&&t(e)},[]),(0,_.useEffect)(()=>{if(typeof window>`u`)return;let t=new URL(window.location.href);e?t.searchParams.set(`scenario`,e):t.searchParams.delete(`scenario`),window.history.replaceState({},``,t.toString())},[e]);function E(){if(!e)return;let t=new URL(window.location.href);t.searchParams.set(`scenario`,e),navigator.clipboard.writeText(t.toString()).then(()=>{b(!0),setTimeout(()=>b(!1),2e3)}).catch(()=>{})}async function O(e){a(!0),s(null),r(null);try{let t=await(await fetch(`/api/json/eval-dry-run`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify(e)})).json();t.error?s(t.error):r(t)}catch{s(`Could not reach the governance engine. Is SSG running?`)}finally{a(!1)}}function k(){w&&O(w.toolCall)}function ee(){let e;try{e=JSON.parse(f)}catch{s(`Invalid JSON in input field.`);return}if(typeof e!=`object`||!e){s(`Input must be a JSON object.`);return}O({tool:u,input:e})}let A=n?Fm[n.decision]??Fm.allow:null;return(0,D.jsxs)(`div`,{className:`max-w-3xl mx-auto py-4 space-y-4`,children:[(0,D.jsxs)(`header`,{className:`flex items-baseline justify-between gap-4 flex-wrap`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-[22px] font-semibold text-[var(--color-fg-0)] tracking-tight leading-tight`,children:`Try it`}),(0,D.jsxs)(`p`,{className:`text-[13px] text-[var(--color-fg-2)] mt-0.5`,children:[`Your AI can run any command. SSG decides what it’s actually allowed to do.`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`Pick a scenario to see — nothing actually runs.`})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3 shrink-0`,children:[m&&(0,D.jsx)(`button`,{onClick:C,className:`text-[11.5px] font-medium text-[var(--color-fg-3)] hover:text-[var(--color-fg-0)] cursor-pointer`,title:`Show the introduction again`,children:`What is Try It? →`}),(0,D.jsx)(`a`,{href:`/guardrails`,className:`text-[11.5px] font-medium text-[var(--color-brand)] hover:underline`,children:`Install more guardrails →`})]})]}),!m&&(0,D.jsx)(Hm,{os:g,setOs:x,onDismiss:S}),m&&(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 px-1`,children:[(0,D.jsx)(`span`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:`Commands shown as on`}),(0,D.jsx)(Vm,{os:g,setOs:x})]}),(0,D.jsx)(`div`,{"data-tutorial":`try-scenarios`,className:`space-y-4`,children:T.map(n=>(0,D.jsxs)(`section`,{className:`space-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline gap-2 px-1`,children:[(0,D.jsx)(`h3`,{className:`text-[11px] uppercase tracking-wide text-[var(--color-fg-3)] font-semibold`,children:n.label}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:n.blurb})]}),(0,D.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:n.scenarios.map(n=>(0,D.jsx)(Um,{scenario:n,selected:e===n.id,os:g,onClick:()=>{t(n.id),r(null),s(null)}},n.id))})]},n.id))}),w&&(0,D.jsxs)(`div`,{"data-tutorial":`try-detail`,className:`rounded-xl border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-4 space-y-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,D.jsx)(`span`,{className:`text-[22px] leading-none shrink-0`,children:w.emoji}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsx)(`p`,{className:`text-[13.5px] font-medium text-[var(--color-fg-0)]`,children:w.label}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-2)] mt-0.5 leading-relaxed`,children:w.plainEffect})]})]}),(0,D.jsxs)(`div`,{className:`rounded-lg border border-[var(--color-line-0)] bg-[var(--color-surface-0)] px-3 py-2`,children:[(0,D.jsxs)(`p`,{className:`text-[10px] uppercase tracking-wide text-[var(--color-fg-4)] font-semibold mb-1`,children:[`What the AI would run · `,Lm(g)]}),(0,D.jsx)(`code`,{className:`font-mono text-[12px] text-[var(--color-fg-1)] break-all`,children:zm(w,g)})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,D.jsxs)(`p`,{className:`text-[11.5px] text-[var(--color-fg-3)]`,children:[`Click Run to see what SSG would decide.`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`The command does not actually execute.`})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,D.jsx)(`button`,{onClick:E,className:`inline-flex items-center gap-1 px-3 h-8 rounded-full text-[11.5px] font-medium cursor-pointer transition-colors
|
|
50
|
+
-d '{"confirm":"UNINSTALL_ALL_RULES"}'`})]})]})})}function qp({entry:e,ruleId:t,onJump:n,onChanged:r}){return!e||!t?(0,D.jsx)(`span`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)] shrink-0`,children:`no rule`}):(0,D.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,D.jsx)(`button`,{type:`button`,onClick:async()=>{await Op(t,e.file,`log`),r()},title:`Soften this rule to log-only — keeps the rule running but stops blocking/asking`,className:`px-1.5 py-0.5 rounded-sm border border-[var(--color-line-1)] text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-0)] hover:border-[var(--color-brand)]/60 cursor-pointer transition-colors`,children:`→ log`}),(0,D.jsx)(`button`,{type:`button`,onClick:async()=>{e.rule.enabled&&(await Dp(t,e.file),r())},disabled:!e.rule.enabled,title:e.rule.enabled?`Disable this rule entirely`:`Rule is already disabled`,className:`px-1.5 py-0.5 rounded-sm border border-[var(--color-line-1)] text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-red-300 hover:border-red-400/60 cursor-pointer transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:e.rule.enabled?`disable`:`disabled`}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>n(t),title:`Scroll to this rule below — clears search and filter`,className:`px-1.5 py-0.5 rounded-sm border border-[var(--color-brand)]/40 bg-[var(--color-brand)]/10 text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-0)] hover:bg-[var(--color-brand)]/20 cursor-pointer transition-colors`,children:`view`})]})}function Jp({stats:e,ruleIndex:t,onJump:n,onChanged:r}){let i=(0,_.useMemo)(()=>{let n=[];for(let[r,i]of Object.entries(e)){let e=i.lastBlockAskSeen??0;e<=0||n.push({ruleId:r,lastBlockAskSeen:e,entry:t.get(r)})}return n.sort((e,t)=>t.lastBlockAskSeen-e.lastBlockAskSeen),n.slice(0,5)},[e,t]);return i.length===0?null:(0,D.jsx)(q,{children:(0,D.jsxs)(`details`,{open:!0,children:[(0,D.jsxs)(`summary`,{className:`px-3 py-2 cursor-pointer list-none select-none flex items-center gap-3 hover:bg-[var(--color-surface-2)]/70`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`recent block/ask activity`}),(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-[var(--color-fg-3)]`,children:[i.length,` rule`,i.length===1?``:`s`,` — newest first`]})]}),(0,D.jsx)(Y,{className:`py-2`,children:(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:i.map(e=>{let t=e.entry?.rule.decision??`—`,i=e.entry?.rule.message??``;return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono py-1.5`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider w-12 shrink-0 ${Sp[t]??`text-[var(--color-fg-2)]`}`,children:t}),(0,D.jsx)(`code`,{className:`text-[var(--color-fg-0)] shrink-0 truncate w-48`,children:e.ruleId}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate flex-1 min-w-0 hidden md:inline`,children:i}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums shrink-0 w-16 text-right`,children:Np(e.lastBlockAskSeen)}),(0,D.jsx)(qp,{entry:e.entry,ruleId:e.ruleId,onJump:n,onChanged:r})]},e.ruleId)})})})]})})}function Yp({triggers:e,ruleIndex:t,onJump:n,onChanged:r}){let i=Math.floor(Date.now()/1e3),a=i-24*3600,o=i-4*3600,s=(e??[]).filter(e=>e.ruleId&&yp.has(e.decision)),c=s[0]??null,l=new Map;for(let e of s){if(e.timestamp<a||!e.ruleId)continue;let t=l.get(e.ruleId);t?(t.hits++,e.timestamp>t.lastSeen&&(t.lastSeen=e.timestamp,t.sample=e)):l.set(e.ruleId,{ruleId:e.ruleId,decision:e.decision,hits:1,lastSeen:e.timestamp,sample:e})}let u=[...l.values()].filter(e=>e.hits>=3).sort((e,t)=>t.hits-e.hits).slice(0,5),d=c&&c.timestamp>=o;return d||u.length>0?(0,D.jsx)(q,{children:(0,D.jsxs)(`details`,{open:!0,children:[(0,D.jsxs)(`summary`,{className:`px-3 py-2 cursor-pointer list-none select-none flex items-center gap-3 hover:bg-[var(--color-surface-2)]/70 flex-wrap`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`recent decisions`}),d&&c&&(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-[var(--color-fg-3)]`,children:[`last:`,` `,(0,D.jsx)(`span`,{className:Sp[c.decision]??`text-[var(--color-fg-2)]`,children:c.decision}),` `,`· `,Np(c.timestamp)]}),u.length>0&&(0,D.jsxs)(`span`,{className:`text-[11px] font-mono text-amber-300/80 ml-auto`,children:[u.length,` rule`,u.length===1?``:`s`,` fired ≥3× in 24h`]})]}),(0,D.jsxs)(Y,{className:`py-2 space-y-3`,children:[d&&c&&(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`div`,{className:`overline`,children:`last decision`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono`,children:[(0,D.jsx)(`span`,{className:`uppercase tracking-wider w-12 shrink-0 ${Sp[c.decision]??`text-[var(--color-fg-2)]`}`,children:c.decision}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-2)] w-20 shrink-0 truncate`,children:c.tool}),(0,D.jsx)(`code`,{className:`text-[var(--color-fg-1)] flex-1 min-w-0 truncate`,children:c.input||`—`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums shrink-0 w-16 text-right`,children:Np(c.timestamp)}),(0,D.jsx)(qp,{entry:c.ruleId?t.get(c.ruleId):void 0,ruleId:c.ruleId,onJump:n,onChanged:r})]}),c.ruleId&&(0,D.jsxs)(`div`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] pl-14`,children:[`rule`,` `,(0,D.jsx)(`code`,{className:`text-[var(--color-fg-2)]`,children:c.ruleId})]})]}),u.length>0&&(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`div`,{className:`overline`,children:`top fired in 24h (≥3 hits) — soften or disable to reduce noise`}),(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:u.map(e=>{let i=t.get(e.ruleId);return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-mono py-1.5`,children:[(0,D.jsxs)(`span`,{className:`text-amber-300 tabular-nums shrink-0 w-10`,children:[e.hits,`×`]}),(0,D.jsx)(`span`,{className:`uppercase tracking-wider w-12 shrink-0 ${Sp[e.decision]??`text-[var(--color-fg-2)]`}`,children:e.decision}),(0,D.jsx)(`code`,{className:`text-[var(--color-fg-0)] truncate flex-1 min-w-0`,children:e.ruleId}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] truncate shrink-0 w-32 text-right hidden md:inline`,children:e.sample.tool}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] tabular-nums shrink-0 w-16 text-right`,children:Np(e.lastSeen)}),(0,D.jsx)(qp,{entry:i,ruleId:e.ruleId,onJump:n,onChanged:r})]},e.ruleId)})})]})]})]})}):(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{className:`py-2 flex items-center gap-3 text-[11px] font-mono flex-wrap`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`recent decisions`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`no blocks or asks in the last 4h — search below to find any rule by id, message, or what it last blocked`})]})})}function Xp({chip:e,onChange:t,counts:n}){return(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,D.jsx)(`span`,{className:`overline text-[10px] mr-1`,children:`quick filters`}),[{key:`hot`,label:`🔥 hot now`,hint:`Rules that fired in the last hour`,color:`text-amber-300 border-amber-500/40 bg-amber-500/5 hover:bg-amber-500/10`},{key:`blocked`,label:`⛔ blocking`,hint:`Rules set to block and currently enabled`,color:`text-red-300 border-red-500/40 bg-red-500/5 hover:bg-red-500/10`},{key:`noisy`,label:`📢 noisy`,hint:`Fired ≥3 times in 24h — candidates to soften`,color:`text-amber-300 border-amber-500/40 bg-amber-500/5 hover:bg-amber-500/10`},{key:`slow`,label:`🐢 slow >50ms`,hint:`Rules with avg eval time over 50ms`,color:`text-rose-300 border-rose-500/40 bg-rose-500/5 hover:bg-rose-500/10`},{key:`never`,label:`💤 never fired`,hint:`Enabled rules that have never matched — possible dead code`,color:`text-[var(--color-fg-3)] border-[var(--color-line-1)] hover:bg-[var(--color-surface-2)]`},{key:`disabled`,label:`⏸ disabled`,hint:`Rules toggled off — not currently enforced`,color:`text-[var(--color-fg-3)] border-[var(--color-line-1)] hover:bg-[var(--color-surface-2)]`}].map(r=>{let i=e===r.key,a=n[r.key];return(0,D.jsxs)(`button`,{type:`button`,onClick:()=>t(i?`none`:r.key),title:r.hint,className:`px-2 py-1 rounded-sm border text-[11px] font-mono uppercase tracking-wider cursor-pointer transition-colors ${i?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/15 text-[var(--color-fg-0)]`:r.color}`,children:[r.label,(0,D.jsx)(`span`,{className:`ml-1.5 tabular-nums normal-case ${i?`text-[var(--color-fg-2)]`:`text-[var(--color-fg-4)]`}`,children:a})]},r.key)}),e!==`none`&&(0,D.jsx)(`button`,{type:`button`,onClick:()=>t(`none`),className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer ml-1`,children:`✕ clear`})]})}function Zp({value:e,onChange:t,matchCount:n,sortKey:r,onSortChange:i}){return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,D.jsxs)(`div`,{className:`relative flex-1 min-w-[260px]`,children:[(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-[var(--color-fg-4)] pointer-events-none`,children:[(0,D.jsx)(`circle`,{cx:`11`,cy:`11`,r:`8`}),(0,D.jsx)(`path`,{d:`m21 21-4.3-4.3`})]}),(0,D.jsx)(`input`,{type:`text`,placeholder:`search rule id, message, or paste a blocked command…`,title:`Searches rule id, message, AND recent audit-log inputs/tools — paste a blocked command to find its rule`,value:e,onChange:e=>t(e.target.value),className:`bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-xs rounded-sm pl-8 pr-24 py-2 w-full focus:outline-none focus:border-[var(--color-brand)]/60 placeholder:text-[var(--color-fg-4)] font-mono`}),e&&(0,D.jsxs)(`div`,{className:`absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-2`,children:[n!==null&&(0,D.jsxs)(`span`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] tabular-nums`,children:[n,` match`,n===1?``:`es`]}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>t(``),className:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,title:`Clear search`,"aria-label":`Clear search`,children:`✕`})]})]}),(0,D.jsxs)(`label`,{className:`flex items-center gap-1.5 text-[10px] font-mono uppercase tracking-wider`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`sort`}),(0,D.jsxs)(`select`,{value:r,onChange:e=>i(e.target.value),className:`bg-[var(--color-surface-1)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] rounded-sm px-1.5 py-1 cursor-pointer focus:outline-none focus:border-[var(--color-brand)]/50`,children:[(0,D.jsx)(`option`,{value:`default`,children:`default · by file`}),(0,D.jsx)(`option`,{value:`hits`,children:`most hits`}),(0,D.jsx)(`option`,{value:`slowest`,children:`slowest`}),(0,D.jsx)(`option`,{value:`recent`,children:`recently fired`}),(0,D.jsx)(`option`,{value:`alpha`,children:`alphabetical`})]})]})]})}function Qp({decisionFilter:e,onChange:t,totalRules:n,ruleCount:r,hits:i,window:a}){let o=Object.values(i).reduce((e,t)=>e+t,0);return(0,D.jsx)(q,{children:(0,D.jsx)(Y,{className:`px-3 py-2`,children:(0,D.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,D.jsxs)(`div`,{className:`flex flex-col`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`filter by decision`}),(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] uppercase tracking-wider`,children:[`rules · applied in `,a]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-1 flex-wrap`,children:[(0,D.jsxs)(`button`,{type:`button`,onClick:()=>t(`all`),title:`Show all ${n} rules — ${o.toLocaleString()} applied in ${a}`,className:`px-2 py-1 rounded-sm border text-[11px] font-mono uppercase tracking-wider cursor-pointer transition-colors ${e===`all`?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-2)] hover:border-[var(--color-brand)]/30 hover:text-[var(--color-fg-0)]`}`,children:[`all`,(0,D.jsx)(`span`,{className:`ml-1.5 text-[var(--color-fg-4)] tabular-nums normal-case`,children:n}),o>0&&(0,D.jsxs)(`span`,{className:`ml-1 text-[var(--color-fg-3)] tabular-nums normal-case`,children:[`· `,o.toLocaleString()]})]}),xp.map(n=>{let o=r[n]??0,s=i[n]??0,c=e===n,l=o===0,u=Sp[n]??`text-[var(--color-fg-2)]`;return(0,D.jsxs)(`button`,{type:`button`,onClick:()=>t(n),disabled:l,title:`${o} rule${o===1?``:`s`} set to ${n} · ${s.toLocaleString()} applied in ${a}`,className:`px-2 py-1 rounded-sm border text-[11px] font-mono uppercase tracking-wider cursor-pointer transition-colors disabled:opacity-30 disabled:cursor-not-allowed ${c?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 ${u}`:`border-[var(--color-line-1)] ${u} hover:border-[var(--color-brand)]/30`}`,children:[n,(0,D.jsx)(`span`,{className:`ml-1.5 text-[var(--color-fg-4)] tabular-nums normal-case`,children:o}),s>0&&(0,D.jsxs)(`span`,{className:`ml-1 text-[var(--color-fg-3)] tabular-nums normal-case`,children:[`· `,s.toLocaleString()]})]},n)})]})]})})})}var $p={covered:{label:`covered`,color:`var(--color-decision-allow)`},inactive:{label:`all off`,color:`var(--color-decision-ask)`},gap:{label:`no rules`,color:`var(--color-decision-block)`}};function em({cov:e,active:t,onClick:n}){let r=$p[e.status];return(0,D.jsxs)(`button`,{type:`button`,onClick:n,title:e.meta.description,className:`text-left rounded-sm border px-2 py-1.5 transition-colors cursor-pointer ${t?`border-[var(--color-brand)] bg-[var(--color-brand)]/10`:`border-[var(--color-line-1)] hover:bg-[var(--color-surface-2)]/70`}`,style:{borderLeft:`2px solid ${e.meta.color}`},children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,D.jsx)(`span`,{"aria-hidden":!0,children:e.meta.icon}),(0,D.jsx)(`span`,{className:`text-[11px] text-[var(--color-fg-0)] font-medium truncate flex-1`,children:e.meta.title})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between mt-1 gap-1`,children:[(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] tabular-nums`,children:[e.total,` rule`,e.total===1?``:`s`,e.enabledShell>0&&(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[` · `,e.enabledShell,` shell`]})]}),(0,D.jsx)(`span`,{className:`text-[9px] uppercase tracking-wider font-mono`,style:{color:r.color},children:r.label})]}),e.meta.attack&&(0,D.jsxs)(`div`,{className:`text-[9px] font-mono text-[var(--color-fg-4)] mt-0.5 truncate`,children:[e.meta.attack.id,` `,e.meta.attack.name]})]})}function tm({coverage:e,activeCategory:t,onPick:n}){let r=e.total>0?Math.round(e.covered/e.total*100):0,i=e.categories.filter(e=>e.meta.security||e.total>0),a=e.categories.reduce((e,t)=>e+t.enabledShell,0);return(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{className:`px-3 py-2.5 space-y-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3 flex-wrap`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h2`,{className:`overline text-[11px]`,children:`tool-use coverage`}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-3)] mt-0.5`,children:`rules categorized like Sigma detections · mapped to MITRE ATT&CK tactics`})]}),(0,D.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,D.jsxs)(`span`,{className:`font-mono text-sm text-[var(--color-fg-0)] tabular-nums`,children:[e.covered,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`/`,e.total]})]}),(0,D.jsx)(`span`,{className:`text-[11px] uppercase tracking-wider text-[var(--color-fg-3)]`,children:`aspects governed`})]})]}),(0,D.jsx)(`div`,{className:`h-1.5 rounded-full bg-[var(--color-surface-3)] overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full rounded-full transition-all`,style:{width:`${r}%`,background:r>=80?`var(--color-decision-allow)`:r>=50?`var(--color-decision-ask)`:`var(--color-decision-block)`}})}),(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)]`,children:[a,` active rule`,a===1?``:`s`,` govern shell / command execution`,e.uncategorized>0&&(0,D.jsxs)(D.Fragment,{children:[` · `,(0,D.jsxs)(`span`,{className:`text-amber-300`,children:[e.uncategorized,` uncategorized`]})]})]}),(0,D.jsx)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-1.5`,children:i.map(e=>(0,D.jsx)(em,{cov:e,active:t===e.id,onClick:()=>n(e.id)},e.id))})]})})}function nm({category:e,inferred:t,onPick:n}){let r=mp(e);return(0,D.jsxs)(`button`,{type:`button`,onClick:()=>n(e),title:`${r.title}${t?` (inferred — add an explicit CATEGORY directive)`:``} — ${r.description}`,className:`text-[9px] font-mono uppercase tracking-wider px-1 py-px rounded-sm border cursor-pointer shrink-0 inline-flex items-center gap-0.5`,style:{color:r.color,borderColor:`${r.color}55`},children:[(0,D.jsx)(`span`,{"aria-hidden":!0,children:r.icon}),(0,D.jsx)(`span`,{children:r.title}),t&&(0,D.jsx)(`span`,{className:`opacity-50`,children:`~`})]})}function rm(){let{mode:e,setMode:t}=V(),n=e===`pro`,r=zt(bp)[`rules-changed`],[i,a]=(0,_.useState)(!0),[o,s]=(0,_.useState)(0);(0,_.useEffect)(()=>{if(!i)return;let e=setInterval(()=>{s(e=>e+1)},Tp);return()=>clearInterval(e)},[i]);let{data:c,refetch:l}=H(Ep(`/api/json/rules`,r+o),[r,o]),[u,d]=(0,_.useState)(`7d`),{data:f,refetch:p}=H(Ep(`/api/json/rules-stats?window=${u}`,o),[r,u,o]),{data:m,refetch:h}=H(Ep(`/api/json/rules-performance`,o),[r,o]),{data:g,refetch:v}=H(Ep(`/api/json/rule-triggers/recent?limit=500`,o),[r,o]),[y,b]=(0,_.useState)(``),[x,S]=(0,_.useState)(`all`),[C,w]=(0,_.useState)(`all`),[T,E]=(0,_.useState)(`none`),[O,k]=(0,_.useState)(`default`),[ee,A]=(0,_.useState)(`file`),[j,M]=(0,_.useState)(``),[te,ne]=(0,_.useState)(new Set),[N,P]=(0,_.useState)(new Set),[F,re]=(0,_.useState)(()=>new URLSearchParams(window.location.search).get(`highlight`)??``),I=(0,_.useRef)(null);(0,_.useEffect)(()=>{I.current&&I.current.scrollIntoView({behavior:`smooth`,block:`center`})},[]);let L=f?.stats??{},R=(0,_.useMemo)(()=>{let e=new Map;if(!c)return e;for(let t of c.rulesets)for(let n of t.rules)e.set(n.id,{rule:n,file:t.file});return e},[c]),z=(0,_.useMemo)(()=>{let e=[];if(c)for(let t of c.rulesets)for(let n of t.rules)e.push({id:n.id,target:n.target??`any`,decision:n.decision,category:n.category,enabled:n.enabled});return vp(e)},[c]);function ie(){l(),p(),h(),v(),s(e=>e+1)}function ae(e){b(``),S(`all`),w(`all`),E(`none`),M(``),re(e);let t=new URL(window.location.href);t.searchParams.set(`highlight`,e),window.history.replaceState(null,``,t.toString())}let oe=(0,_.useMemo)(()=>{let e=new Set;if(!g)return e;let t=Math.floor(Date.now()/1e3)-3600;for(let n of g.rows)n.ruleId&&n.timestamp>=t&&e.add(n.ruleId);return e},[g]),se=(0,_.useMemo)(()=>{let e=new Set;if(!g)return e;let t=Math.floor(Date.now()/1e3)-24*3600,n=new Map;for(let e of g.rows)!e.ruleId||e.timestamp<t||yp.has(e.decision)&&n.set(e.ruleId,(n.get(e.ruleId)??0)+1);for(let[t,r]of n)r>=3&&e.add(t);return e},[g]);if(!c)return(0,D.jsx)(`p`,{className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:`loading rules…`});if(c.rulesets.length===0)return(0,D.jsxs)(`div`,{className:`rounded-sm border border-dashed border-[var(--color-line-1)] bg-[var(--color-surface-1)]/50 p-10 text-center`,children:[(0,D.jsx)(`p`,{className:`text-sm text-[var(--color-fg-2)] mb-2`,children:`No .rules files found.`}),(0,D.jsx)(`a`,{href:`/hub`,className:`text-[11px] font-mono uppercase tracking-wider text-[var(--color-brand)] hover:underline`,children:`→ browse hub to install rulesets`})]});let ce=y.toLowerCase(),le=(()=>{let e=new Set;if(!ce||!g)return e;for(let t of g.rows){if(!t.ruleId)continue;let n=(t.input??``).toLowerCase(),r=(t.tool??``).toLowerCase();(n.includes(ce)||r.includes(ce))&&e.add(t.ruleId)}return e})();function ue(e){if(x===`enabled`&&!e.enabled||x===`disabled`&&e.enabled)return!1;let t=L[e.id],n=t?.hits??0;return!(x===`hit`&&n===0||x===`never`&&n>0||C!==`all`&&e.decision!==C||j&&(e.category??`uncategorized`)!==j||T===`hot`&&!oe.has(e.id)||T===`noisy`&&!se.has(e.id)||T===`blocked`&&!(e.decision===`block`&&e.enabled)||T===`slow`&&!(t&&t.avgDurationMs>50)||T===`never`&&!(e.enabled&&(!t||t.hits===0))||T===`disabled`&&e.enabled)}let de=(()=>{let e={},t={};for(let n of c.rulesets)for(let r of n.rules){e[r.decision]=(e[r.decision]??0)+1;let n=L[r.id]?.hits??0;n>0&&(t[r.decision]=(t[r.decision]??0)+n)}return{ruleCount:e,hits:t}})(),fe={hot:0,blocked:0,noisy:se.size,slow:0,never:0,disabled:0};for(let e of c.rulesets)for(let t of e.rules){oe.has(t.id)&&fe.hot++,t.decision===`block`&&t.enabled&&fe.blocked++;let e=L[t.id];e&&e.avgDurationMs>50&&fe.slow++,t.enabled&&(!e||e.hits===0)&&fe.never++,t.enabled||fe.disabled++}let pe=!!ce||x!==`all`||C!==`all`||T!==`none`||j!==``;function me(e){return O===`default`?e:[...e].sort((e,t)=>O===`hits`?(L[t.id]?.hits??0)-(L[e.id]?.hits??0):O===`slowest`?(L[t.id]?.avgDurationMs??0)-(L[e.id]?.avgDurationMs??0):O===`recent`?(L[t.id]?.lastSeen??0)-(L[e.id]?.lastSeen??0):O===`alpha`?e.id.localeCompare(t.id):0)}let he=[];for(let e of c.rulesets)for(let t of e.rules)he.push({...t,file:e.file});let ge=he.filter(e=>ce&&!e.id.toLowerCase().includes(ce)&&!e.message.toLowerCase().includes(ce)&&!le.has(e.id)?!1:ue(e)),B;if(ee===`category`){let e=new Map;for(let t of ge){let n=t.category??`uncategorized`,r=e.get(n);r?r.push(t):e.set(n,[t])}B=dp.filter(t=>e.has(t.id)).map(t=>({key:t.id,kind:`category`,label:t.title,icon:t.icon,accent:t.color,sublabel:t.attack?`${t.attack.id} · ${t.attack.name}`:`D3FEND · ${t.d3fend}`,rules:me(e.get(t.id)??[])}))}else{let e=new Map;for(let t of ge){let n=e.get(t.file);n?n.push(t):e.set(t.file,[t])}B=c.rulesets.map(t=>({key:t.file,kind:`file`,label:t.file,content:t.content,rules:me(e.get(t.file)??[])})).filter(e=>e.rules.length>0||!pe)}let _e=he.length,ve=he.filter(e=>e.enabled).length,ye=new Set;for(let e of B)for(let t of e.rules)ye.add(t.id);let be=pe?ye.size:null,xe=[];for(let e of te){let t=R.get(e);t&&xe.push({ruleId:e,file:t.file})}function Se(e){ne(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function Ce(e){ne(t=>{let n=new Set(t);if(e.length>0&&e.every(e=>n.has(e.id)))for(let t of e)n.delete(t.id);else for(let t of e)n.add(t.id);return n})}function we(e){if(j===e){M(``);return}M(e),A(`category`),re(``)}function Te(){ne(e=>{let t=new Set(e);for(let e of ye)t.add(e);return t})}function Ee(e){P(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function De(e,t){xe.length!==0&&(e===`enable`?await kp(xe,!0):e===`disable`?await kp(xe,!1):e===`delete`?(await jp(xe),ne(new Set)):e===`decision`&&t&&await Ap(xe,t),ie())}return(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsx)(`div`,{"data-tutorial":`rules-firewall`,children:(0,D.jsx)(Hp,{totalRules:_e,activeRules:ve,onChanged:ie})}),(0,D.jsx)(Rp,{}),(0,D.jsx)(`div`,{className:`flex items-center gap-4 flex-wrap`,children:(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`overline text-[11px]`,children:`rules`}),(0,D.jsxs)(`div`,{className:`flex items-baseline gap-3 mt-1`,children:[(0,D.jsxs)(`span`,{className:`font-mono text-sm text-[var(--color-fg-0)] tabular-nums`,children:[ve,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`/`,_e]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] ml-1.5 text-[11px] uppercase tracking-wider`,children:`active`})]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsxs)(`span`,{className:`font-mono text-[11px] text-[var(--color-fg-3)] uppercase tracking-wider`,children:[c.files.length,` file`,c.files.length===1?``:`s`]})]})]})}),(0,D.jsx)(`div`,{"data-tutorial":`rules-coverage`,children:(0,D.jsx)(tm,{coverage:z,activeCategory:j,onPick:we})}),(0,D.jsx)(`div`,{"data-tutorial":`rules-stats`,children:(0,D.jsx)(zp,{perf:m,triggers:g,decisionAggregates:de,livePoll:i,onTogglePoll:()=>a(e=>!e),statsWindow:u,onWindowChange:d,mode:e,onModeChange:t})}),(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{className:`px-3 py-2.5 space-y-2.5`,children:[(0,D.jsx)(Zp,{value:y,onChange:b,matchCount:be,sortKey:O,onSortChange:k}),(0,D.jsx)(Xp,{chip:T,onChange:E,counts:fe}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap pt-1 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`span`,{className:`overline text-[10px]`,children:`state`}),(0,D.jsx)(`div`,{className:`flex items-center gap-1 text-[10px] font-mono uppercase tracking-wider`,children:[`all`,`enabled`,`disabled`,`hit`,`never`].map(e=>(0,D.jsx)(`button`,{onClick:()=>S(e),className:`px-1.5 py-0.5 rounded-sm border cursor-pointer transition-colors ${x===e?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`}`,children:e},e))}),(0,D.jsx)(`span`,{className:`overline text-[10px] ml-1`,children:`group`}),(0,D.jsx)(`div`,{className:`flex items-center gap-1 text-[10px] font-mono uppercase tracking-wider`,children:[`file`,`category`].map(e=>(0,D.jsxs)(`button`,{onClick:()=>A(e),className:`px-1.5 py-0.5 rounded-sm border cursor-pointer transition-colors ${ee===e?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`}`,children:[`by `,e]},e))})]}),j&&(0,D.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap pt-1 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`span`,{className:`overline text-[10px]`,children:`category`}),(0,D.jsxs)(`span`,{className:`text-[11px] font-mono px-1.5 py-0.5 rounded-sm border`,style:{color:mp(j).color,borderColor:`${mp(j).color}66`},children:[mp(j).icon,` `,mp(j).title]}),(0,D.jsx)(`button`,{onClick:()=>M(``),className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:`clear ✕`})]})]})}),(0,D.jsx)(Qp,{decisionFilter:C,onChange:w,totalRules:_e,ruleCount:de.ruleCount,hits:de.hits,window:u}),n&&(0,D.jsx)(`div`,{"data-tutorial":`rules-top`,children:(0,D.jsx)(Vp,{stats:L,ruleIndex:R,triggers:g?.rows,statsWindow:u,onJump:ae})}),(0,D.jsx)(`div`,{"data-tutorial":`rules-activity`,children:(0,D.jsx)(Jp,{stats:L,ruleIndex:R,onJump:ae,onChanged:ie})}),(0,D.jsx)(`div`,{"data-tutorial":`rules-recent`,children:(0,D.jsx)(Yp,{triggers:g?.rows,ruleIndex:R,onJump:ae,onChanged:ie})}),n&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(Bp,{perf:m}),(0,D.jsx)(Kp,{})]}),(0,D.jsx)(Wp,{selected:xe,onClear:()=>ne(new Set),onApply:De}),ye.size>0&&(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] font-mono`,children:[(0,D.jsxs)(`button`,{onClick:Te,className:`uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:[`select `,ye.size,` visible`]}),te.size>0&&(0,D.jsx)(`button`,{onClick:()=>ne(new Set),className:`uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:`clear selection`})]}),B.length===0&&(0,D.jsx)(`div`,{className:`rounded-sm border border-dashed border-[var(--color-line-1)] px-4 py-6 text-center text-[11px] font-mono text-[var(--color-fg-3)]`,children:`no rules match the current filter`}),(0,D.jsx)(`div`,{className:`space-y-3`,children:B.map(e=>{let t=e.rules.some(e=>e.id===F),r=e.rules.filter(e=>e.enabled).length,i=e.rules.length>0&&e.rules.every(e=>te.has(e.id)),a=!i&&e.rules.some(e=>te.has(e.id)),o=Pp(g?.rows,20,3600*1e3,t=>t.ruleId?e.rules.some(e=>e.id===t.ruleId):!1),s=o.some(e=>e>0);return(0,D.jsx)(q,{children:(0,D.jsxs)(`details`,{open:t||pe||O!==`default`,children:[(0,D.jsxs)(`summary`,{className:`flex items-center gap-2 px-3 py-2 cursor-pointer list-none select-none hover:bg-[var(--color-surface-2)]/70 border-b border-[var(--color-line-0)]`,children:[(0,D.jsx)(`input`,{type:`checkbox`,checked:i,ref:e=>{e&&(e.indeterminate=a)},onChange:()=>Ce(e.rules),onClick:e=>e.stopPropagation(),className:`accent-[var(--color-brand)] cursor-pointer`,"aria-label":`Select all rules in ${e.label}`}),e.kind===`category`?(0,D.jsx)(`span`,{"aria-hidden":!0,className:`shrink-0 text-xs`,children:e.icon}):(0,D.jsxs)(`svg`,{className:`text-[var(--color-fg-3)] shrink-0`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,children:[(0,D.jsx)(`path`,{d:`M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z`}),(0,D.jsx)(`polyline`,{points:`14 2 14 8 20 8`})]}),(0,D.jsx)(`code`,{className:`text-xs text-[var(--color-fg-0)] font-mono`,style:e.accent?{color:e.accent}:void 0,children:e.label}),e.sublabel&&(0,D.jsx)(`span`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)] shrink-0`,children:e.sublabel}),s&&(0,D.jsx)(Bs,{data:o,width:60,height:16,color:`var(--color-brand)`}),(0,D.jsxs)(`span`,{className:`ml-auto font-mono text-[11px] text-[var(--color-fg-3)] tabular-nums`,children:[r,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`/`,e.rules.length]})]})]}),(0,D.jsxs)(Y,{className:`py-0`,children:[e.rules.length===0?(0,D.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] py-3`,children:[`no rules in this `,e.kind]}):(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:e.rules.map(e=>{let t=e.id===F,r=te.has(e.id),i=L[e.id],a=N.has(e.id),o=i&&i.hits>0?Pp(g?.rows,20,3600*1e3,t=>t.ruleId===e.id):null;return(0,D.jsx)(`div`,{ref:t?I:null,className:`py-2.5 ${t?`bg-amber-400/8 border-l-2 border-l-amber-400/60 -mx-3 px-3 -my-px`:r?`bg-sky-400/5`:``}`,children:(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,D.jsxs)(`div`,{className:`flex items-start gap-2 min-w-0 flex-1`,children:[(0,D.jsx)(`input`,{type:`checkbox`,checked:r,onChange:()=>Se(e.id),className:`mt-1 accent-[var(--color-brand)] cursor-pointer`,"aria-label":`Select rule ${e.id}`}),(0,D.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mb-1 flex-wrap`,children:[(0,D.jsx)(`select`,{value:e.decision,onChange:async t=>{await Op(e.id,e.file,t.target.value),ie()},className:`bg-[var(--color-surface-0)] border border-[var(--color-line-1)] rounded-sm px-1.5 py-0.5 text-[11px] font-mono uppercase tracking-wider cursor-pointer focus:outline-none focus:border-[var(--color-brand)]/50 ${Sp[e.decision]??`text-[var(--color-fg-2)]`}`,children:xp.map(e=>(0,D.jsx)(`option`,{value:e,children:e},e))}),(0,D.jsx)(Pr,{ruleId:e.id,children:(0,D.jsx)(`code`,{className:`text-xs font-mono text-[var(--color-fg-0)] break-all`,children:e.id})}),ee===`file`&&e.category&&(0,D.jsx)(nm,{category:e.category,inferred:e.categoryInferred,onPick:we}),n&&e.tags&&e.tags.length>0&&e.tags.slice(0,5).map(e=>(0,D.jsx)(`span`,{className:`text-[9px] font-mono px-1 py-px rounded-sm bg-[var(--color-surface-3)] text-[var(--color-fg-3)] shrink-0`,children:e},e)),o&&(0,D.jsx)(Bs,{data:o,width:50,height:14,color:Cp[e.decision]??`#a8a29e`}),i&&i.hits>0&&(0,D.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] tabular-nums`,children:[`·`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:i.hits}),` `,`hit`,i.hits===1?``:`s`,i.avgDurationMs>0&&(0,D.jsxs)(D.Fragment,{children:[` · `,(0,D.jsxs)(`span`,{className:i.avgDurationMs>50?`text-amber-300`:`text-[var(--color-fg-1)]`,children:[i.avgDurationMs.toFixed(1),`ms`]}),` `,`avg`]}),` · `,Np(i.lastSeen)]}),(!i||i.hits===0)&&(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] uppercase tracking-wider`,children:`· never fired`}),n&&(0,D.jsx)(`button`,{onClick:()=>Ee(e.id),className:`ml-auto text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:a?`hide audit`:`audit`})]}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--color-fg-2)] truncate`,children:e.message}),n&&a&&(0,D.jsx)(Gp,{ruleId:e.id})]})]}),(0,D.jsx)(Lp,{rule:e,file:e.file,onToggle:async()=>{await Dp(e.id,e.file),ie()}})]})},e.id)})}),n&&e.content&&(0,D.jsxs)(`details`,{className:`mt-3 pb-3`,children:[(0,D.jsx)(`summary`,{className:`overline cursor-pointer hover:text-[var(--color-fg-1)] select-none`,children:`raw source`}),(0,D.jsx)(`pre`,{className:`mt-2 p-3 bg-[var(--color-surface-0)] border border-[var(--color-line-0)] rounded-sm text-[11px] text-[var(--color-fg-2)] overflow-x-auto whitespace-pre-wrap break-words font-mono`,children:e.content})]})]})]})},e.key)})})]})}var im={allow:`#4ade80`,block:`#f87171`,ask:`#fbbf24`,force:`#a78bfa`,log:`#7dd3fc`,shadow:`#94a3b8`},am=[`<1ms`,`1-10ms`,`10-100ms`,`100ms-1s`,`>1s`],om=64;function sm(e){return e?new Date(e*1e3).toLocaleString():`—`}function cm(e){if(e<1)return`<1s`;if(e<60)return`${e}s`;if(e<3600)return`${Math.floor(e/60)}m ${e%60}s`;let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n>0?`${t}h ${n}m`:`${t}h`}function lm({title:e,hint:t,children:n}){return(0,D.jsxs)(`section`,{className:`flex flex-col rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] overflow-hidden`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between px-3 py-1.5 border-b border-[var(--color-line-1)] bg-black/30 shrink-0`,children:[(0,D.jsx)(`span`,{className:`overline text-[var(--color-fg-3)]`,children:e}),t&&(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:t})]}),(0,D.jsx)(`div`,{className:`p-3 flex flex-col gap-2 flex-1 min-h-0`,children:n})]})}function um({allowed:e,blocked:t,asked:n,forced:r}){let i=Math.max(0,e),a=Math.max(0,t),o=Math.max(0,n),s=Math.max(0,r),c=i+a+o+s;if(c===0)return(0,D.jsx)(`div`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:`No evals recorded.`});let l=[{label:`allow`,value:i,color:im.allow},{label:`block`,value:a,color:im.block},{label:`ask`,value:o,color:im.ask},{label:`force`,value:s,color:im.force}].filter(e=>e.value>0),u=2*Math.PI*32,d=0;return(0,D.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,D.jsxs)(`svg`,{width:`92`,height:`92`,viewBox:`-46 -46 92 92`,className:`shrink-0`,children:[(0,D.jsx)(`circle`,{r:32,fill:`none`,stroke:`#222`,strokeWidth:`12`}),l.map(e=>{let t=e.value/c*u,n=(0,D.jsx)(`circle`,{r:32,fill:`none`,stroke:e.color,strokeWidth:`12`,strokeDasharray:`${t} ${u-t}`,strokeDashoffset:-d,transform:`rotate(-90)`},e.label);return d+=t,n}),(0,D.jsx)(`text`,{textAnchor:`middle`,dy:`0.35em`,fontSize:`14`,fontFamily:`ui-monospace, monospace`,fill:`var(--color-fg-1)`,children:c})]}),(0,D.jsx)(`ul`,{className:`flex-1 flex flex-col gap-1 text-[11px] font-mono`,children:l.map(e=>{let t=Math.round(e.value/c*1e3)/10;return(0,D.jsxs)(`li`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`size-2 rounded-sm shrink-0`,style:{background:e.color}}),(0,D.jsx)(`span`,{className:`uppercase tracking-wide text-[var(--color-fg-2)] w-12`,children:e.label}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-1)] font-semibold`,children:e.value}),(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[t,`%`]})]},e.label)})})]})}function dm({rows:e,maxRows:t=10,emptyMessage:n}){if(e.length===0)return(0,D.jsx)(`div`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:n});let r=e.slice(0,t).map(e=>({...e,value:Math.max(0,e.value)})),i=Math.max(...r.map(e=>e.value),1);return(0,D.jsx)(`ul`,{className:`flex flex-col gap-1.5 text-[11px] font-mono`,children:r.map(e=>{let t=Math.max(2,e.value/i*100);return(0,D.jsxs)(`li`,{className:`flex flex-col gap-0.5`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,D.jsx)(`span`,{className:`truncate text-[var(--color-fg-2)]`,title:e.label,children:e.label}),(0,D.jsx)(`span`,{className:`tabular-nums text-[var(--color-fg-1)] font-semibold shrink-0`,children:e.value})]}),(0,D.jsx)(`div`,{className:`h-1 rounded-sm bg-white/5 overflow-hidden`,children:(0,D.jsx)(`div`,{className:`h-full bg-[var(--color-hig-blue)]/70`,style:{width:`${t}%`}})}),e.sublabel&&(0,D.jsx)(`span`,{className:`text-[10px] text-[var(--color-fg-4)] truncate`,title:e.sublabel,children:e.sublabel})]},e.label)})})}function fm({latency:e}){let t={};for(let n of e)t[n.bucket]=Math.max(0,n.hits);let n=Math.max(...Object.values(t),1);return Object.values(t).reduce((e,t)=>e+t,0)===0?(0,D.jsx)(`div`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:`No latency data.`}):(0,D.jsx)(`div`,{className:`flex items-end gap-2`,children:am.map(e=>{let r=t[e]??0,i=Math.round(r/n*om);return(0,D.jsxs)(`div`,{className:`flex flex-1 min-w-0 flex-col items-center gap-1`,children:[(0,D.jsx)(`div`,{className:`flex w-full items-end`,style:{height:`${om}px`},children:(0,D.jsx)(`div`,{className:`w-full rounded-sm bg-[var(--color-hig-blue)]/60`,style:{height:`${i}px`,minHeight:r>0?`4px`:`0px`},title:`${r} evals in ${e}`})}),(0,D.jsx)(`span`,{className:`w-full truncate text-center text-[10px] font-mono leading-tight text-[var(--color-fg-3)]`,title:e,children:e}),(0,D.jsx)(`span`,{className:`text-[10px] font-mono leading-tight text-[var(--color-fg-4)] tabular-nums`,children:r})]},e)})})}function pm({sessionKey:e}){let[t,n]=(0,_.useState)(0),{data:r,loading:i,error:a}=H(`/api/json/sessions/detail?session_key=${encodeURIComponent(e)}&audit_limit=500`,[t]),o=zt([`activity-updated`])[`activity-updated`]??0;(0,_.useEffect)(()=>{o>0&&r?.summary.is_active&&n(e=>e+1)},[o,r?.summary.is_active]);let s=(0,_.useMemo)(()=>{if(!r)return[];let e=r.tools.top.map(e=>({label:e.tool,value:Math.max(0,e.hits)}));return r.tools.other>0&&e.push({label:`(${r.tools.other} other)`,value:Math.max(0,r.tools.other)}),e},[r]),c=(0,_.useMemo)(()=>{if(!r)return[];if(r.rules.length>0)return r.rules.map(e=>({label:e.rule_id,sublabel:e.rule_message,value:Math.max(0,e.hits)}));let e=new Map;for(let t of r.audit){if(!t.rule_id)continue;let n=e.get(t.rule_id);n?n.hits+=1:e.set(t.rule_id,{message:t.rule_message,hits:1})}return[...e.entries()].map(([e,t])=>({label:e,sublabel:t.message,value:t.hits})).sort((e,t)=>t.value-e.value)},[r]);if(a)return(0,D.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,D.jsxs)(`header`,{children:[(0,D.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Session inspector`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-3)] mt-1 font-mono`,children:e})]}),(0,D.jsxs)(`div`,{className:`rounded-sm border border-rose-500/30 bg-rose-500/5 p-4 text-[12px] font-mono text-rose-300`,children:[a.includes(`404`)?`No audit entries found for this session. It may have been pruned, or the URL is malformed.`:`Failed to load session: ${a}`,(0,D.jsx)(`div`,{className:`mt-2`,children:(0,D.jsx)(`a`,{href:`/sessions`,className:`text-[var(--color-hig-blue)] hover:underline`,children:`← Back to sessions`})})]})]});if(i&&!r)return(0,D.jsxs)(`div`,{className:`p-4 text-[12px] font-mono text-[var(--color-fg-3)]`,children:[`Loading session `,e,`…`]});if(!r)return null;let{summary:l,audit:u,latency:d}=r,f={...l,evals:Math.max(0,l.evals),allowed:Math.max(0,l.allowed),blocked:Math.max(0,l.blocked),asked:Math.max(0,l.asked),forced:Math.max(0,l.forced),duration_s:Math.max(0,l.duration_s)},p=f.evals>0?Math.round(f.blocked/f.evals*1e3)/10:0;return(0,D.jsxs)(`div`,{className:`flex flex-col gap-4 p-4 h-full min-h-0`,children:[(0,D.jsxs)(`header`,{className:`flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsx)(`a`,{href:`/sessions`,"data-tutorial":`sd-back`,className:`hover:underline`,children:`← Sessions`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`/`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] font-semibold`,children:f.agent_id})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-end justify-between gap-3`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`h1`,{className:`text-lg font-semibold`,children:[f.client,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] font-mono text-[14px] ml-2`,children:f.agent_id})]}),(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] mt-1 break-all`,children:f.session_id??`(no session_id — solo bucket)`})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 text-[11px] font-mono`,children:[(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-sm border ${f.is_active?`bg-emerald-500/10 border-emerald-500/30 text-emerald-300`:`bg-white/5 border-white/10 text-[var(--color-fg-3)]`}`,children:[(0,D.jsx)(`span`,{className:`size-1.5 rounded-full ${f.is_active?`bg-emerald-400 animate-pulse`:`bg-[var(--color-fg-4)]`}`}),f.is_active?`Live`:`Closed`]}),(0,D.jsx)(mm,{label:`Evals`,value:f.evals.toLocaleString()}),(0,D.jsx)(mm,{label:`Blocked`,value:f.blocked>0?`${f.blocked} (${p}%)`:`0`,color:f.blocked>0?`text-rose-300`:void 0}),(0,D.jsx)(mm,{label:`Asked`,value:f.asked.toLocaleString(),color:`text-amber-300`}),(0,D.jsx)(mm,{label:`Started`,value:sm(f.started_at)}),(0,D.jsx)(mm,{label:`Duration`,value:cm(f.duration_s)})]})]})]}),(0,D.jsxs)(`div`,{className:`grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-4 gap-3`,children:[(0,D.jsx)(lm,{title:`Decisions`,hint:`${f.evals} evals`,children:(0,D.jsx)(um,{allowed:f.allowed,blocked:f.blocked,asked:f.asked,forced:f.forced})}),(0,D.jsx)(lm,{title:`Top tools`,hint:`${r.tools.top.length+ +(r.tools.other>0)} buckets`,children:(0,D.jsx)(dm,{rows:s,emptyMessage:`No tool activity.`})}),(0,D.jsx)(lm,{title:`Top rules`,hint:`${c.length} rule${c.length===1?``:`s`}`,children:(0,D.jsx)(dm,{rows:c,emptyMessage:f.evals>0?`No rule matched any of the ${f.evals} tool call${f.evals===1?``:`s`} in this session — all allowed by the default policy.`:`No rule activity recorded for this session.`})}),(0,D.jsx)(lm,{title:`Latency`,hint:`duration buckets`,children:(0,D.jsx)(fm,{latency:d})})]}),(0,D.jsx)(`div`,{"data-tutorial":`sd-audit`,className:`flex-1 min-h-[400px]`,children:(0,D.jsx)(mu,{sessionKey:e,entries:u,loading:i,error:null,playingIndex:-1})})]})}function mm({label:e,value:t,color:n}){return(0,D.jsxs)(`div`,{className:`flex flex-col`,children:[(0,D.jsx)(`span`,{className:`text-[10px] uppercase tracking-wide text-[var(--color-fg-4)]`,children:e}),(0,D.jsx)(`span`,{className:`tabular-nums ${n??`text-[var(--color-fg-1)]`}`,children:t})]})}var hm=100,gm={"claude-code":`bg-orange-500/15 text-orange-300 border-orange-500/30`,cursor:`bg-sky-500/15 text-sky-300 border-sky-500/30`,copilot:`bg-emerald-500/15 text-emerald-300 border-emerald-500/30`,gemini:`bg-blue-500/15 text-blue-300 border-blue-500/30`,antigravity:`bg-purple-500/15 text-purple-300 border-purple-500/30`,codex:`bg-pink-500/15 text-pink-300 border-pink-500/30`,pi:`bg-amber-500/15 text-amber-300 border-amber-500/30`,generic:`bg-slate-500/15 text-slate-300 border-slate-500/30`};function _m(e){if(!e)return`—`;let t=new Date(e*1e3),n=new Date,r=t.toLocaleTimeString(`en-US`,{hour:`2-digit`,minute:`2-digit`,hour12:!1});if(t.toDateString()===n.toDateString())return`Today ${r}`;let i=new Date(n);return i.setDate(i.getDate()-1),t.toDateString()===i.toDateString()?`Yesterday ${r}`:`${t.toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})} ${r}`}function vm(e){if(e<1)return`—`;if(e<60)return`${e}s`;if(e<3600)return`${Math.floor(e/60)}m`;let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n>0?`${t}h ${n}m`:`${t}h`}function ym({client:e}){return(0,D.jsx)(`span`,{className:`inline-flex items-center rounded-sm border px-1.5 py-0.5 text-[10px] font-mono uppercase tracking-wide ${gm[e]??`bg-white/5 text-[var(--color-fg-3)] border-white/10`}`,children:e})}function bm(){let[e,t]=(0,_.useState)(0),[n,r]=(0,_.useState)(``),[i,a]=(0,_.useState)(0),{data:o,loading:s,error:c,refetch:l}=H(`/api/json/sessions/list?limit=${hm}&offset=${e}`,[i]),u=zt([`activity-updated`])[`activity-updated`]??0;(0,_.useEffect)(()=>{u>0&&a(e=>e+1)},[u]);let d=o?.sessions??[],f=o?.total??0,p=(0,_.useMemo)(()=>{if(!n.trim())return d;let e=n.toLowerCase();return d.filter(t=>t.session_key.toLowerCase().includes(e)||t.client.toLowerCase().includes(e)||(t.top_tool??``).toLowerCase().includes(e)||(t.top_rule??``).toLowerCase().includes(e))},[d,n]),m=d.filter(e=>e.is_active).length,h=d.reduce((e,t)=>e+Math.max(0,t.evals),0),g=d.reduce((e,t)=>e+Math.max(0,t.blocked),0),v=h>0?Math.round(g/h*1e3)/10:0;return(0,D.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,D.jsxs)(`header`,{className:`flex flex-col gap-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Sessions`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-3)] mt-1`,children:`Every AI agent session recorded by the daemon. Click a row to open its inspector — graph, charts, and full audit log.`})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] font-semibold`,children:f.toLocaleString()}),` `,`total`]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-emerald-300 font-semibold`,children:m}),` `,`active`]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)] font-semibold`,children:h.toLocaleString()}),` `,`evals on page`]}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsxs)(`span`,{children:[(0,D.jsxs)(`span`,{className:v>0?`text-rose-300 font-semibold`:`text-emerald-300`,children:[v,`%`]}),` `,`blocked`]})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`input`,{"data-tutorial":`sessions-filter`,type:`search`,value:n,onChange:e=>r(e.target.value),placeholder:`Filter by client, session, tool, or rule…`,className:`flex-1 bg-[var(--color-surface-1)] border border-[var(--color-line-1)] rounded-sm px-3 py-1.5 text-[12px] font-mono focus:outline-none focus:ring-1 focus:ring-[var(--color-hig-blue)]`}),(0,D.jsx)(`button`,{"data-tutorial":`sessions-refresh`,type:`button`,onClick:()=>l(),className:`px-3 py-1.5 text-[11px] font-mono uppercase tracking-wide border border-[var(--color-line-1)] rounded-sm hover:bg-white/5`,children:`Refresh`})]})]}),(0,D.jsx)(`div`,{className:`border border-[var(--color-line-1)] rounded-sm overflow-hidden`,children:(0,D.jsx)(`div`,{className:`overflow-x-auto`,children:(0,D.jsxs)(`table`,{"data-tutorial":`sessions-table`,className:`w-full text-[12px] font-mono`,children:[(0,D.jsx)(`thead`,{className:`bg-black/30 text-[var(--color-fg-3)] uppercase tracking-wide text-[10px]`,children:(0,D.jsxs)(`tr`,{children:[(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Status`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Client`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Session`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Started`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Duration`}),(0,D.jsx)(`th`,{className:`text-right px-3 py-2`,children:`Evals`}),(0,D.jsx)(`th`,{className:`text-right px-3 py-2 text-emerald-300/80`,children:`Allowed`}),(0,D.jsx)(`th`,{className:`text-right px-3 py-2 text-rose-300/80`,children:`Blocked`}),(0,D.jsx)(`th`,{className:`text-right px-3 py-2 text-amber-300/80`,children:`Asked`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Top Tool`}),(0,D.jsx)(`th`,{className:`text-left px-3 py-2`,children:`Top Rule`})]})}),(0,D.jsxs)(`tbody`,{className:`divide-y divide-[var(--color-line-1)]/40`,children:[s&&p.length===0&&(0,D.jsx)(`tr`,{children:(0,D.jsx)(`td`,{colSpan:11,className:`px-3 py-6 text-center text-[var(--color-fg-4)]`,children:`Loading sessions…`})}),c&&(0,D.jsx)(`tr`,{children:(0,D.jsxs)(`td`,{colSpan:11,className:`px-3 py-6 text-center text-rose-300`,children:[`Failed to load sessions: `,c]})}),!s&&!c&&p.length===0&&(0,D.jsx)(`tr`,{children:(0,D.jsx)(`td`,{colSpan:11,className:`px-3 py-6 text-center text-[var(--color-fg-4)]`,children:d.length===0?`No sessions recorded yet.`:`No sessions match "${n}".`})}),p.map(e=>{let t={...e,evals:Math.max(0,e.evals),allowed:Math.max(0,e.allowed),blocked:Math.max(0,e.blocked),asked:Math.max(0,e.asked),forced:Math.max(0,e.forced),duration_s:Math.max(0,e.duration_s)},n=t.evals>0?Math.round(t.blocked/t.evals*1e3)/10:0;return(0,D.jsxs)(`tr`,{className:`hover:bg-white/[0.03] cursor-pointer`,children:[(0,D.jsx)(`td`,{className:`px-3 py-2`,children:(0,D.jsx)(`a`,{href:`/sessions/${encodeURIComponent(t.session_key)}`,className:`flex items-center gap-1.5 no-underline`,children:t.is_active?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`size-1.5 rounded-full bg-emerald-400 animate-pulse`}),(0,D.jsx)(`span`,{className:`text-emerald-300 text-[10px] uppercase tracking-wide`,children:`Live`})]}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`size-1.5 rounded-full bg-[var(--color-fg-4)]`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)] text-[10px] uppercase tracking-wide`,children:`Closed`})]})})}),(0,D.jsx)(`td`,{className:`px-3 py-2`,children:(0,D.jsx)(ym,{client:t.client})}),(0,D.jsx)(`td`,{className:`px-3 py-2`,children:(0,D.jsx)(`a`,{href:`/sessions/${encodeURIComponent(t.session_key)}`,className:`text-[var(--color-fg-1)] hover:text-[var(--color-hig-blue)] hover:underline`,children:t.agent_id})}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-3)]`,children:_m(t.started_at)}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-3)]`,children:vm(t.duration_s)}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-right font-semibold`,children:t.evals.toLocaleString()}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-right text-emerald-300`,children:t.allowed.toLocaleString()}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-right`,children:t.blocked>0?(0,D.jsxs)(`span`,{className:`text-rose-300`,children:[t.blocked.toLocaleString(),n>0&&(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)] ml-1 text-[10px]`,children:[`(`,n,`%)`]})]}):(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`0`})}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-right text-amber-300`,children:t.asked>0?t.asked.toLocaleString():(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`0`})}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-2)] max-w-[180px] truncate`,children:t.top_tool??(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`—`})}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-2)] max-w-[200px] truncate`,children:t.top_rule??(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`—`})})]},t.session_key)})]})]})})}),f>hm&&(0,D.jsxs)(`footer`,{className:`flex items-center justify-between text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,D.jsxs)(`span`,{children:[e+1,`–`,Math.min(e+hm,f),` of`,` `,f.toLocaleString()]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`button`,{type:`button`,disabled:e===0,onClick:()=>t(Math.max(0,e-hm)),className:`px-3 py-1 border border-[var(--color-line-1)] rounded-sm disabled:opacity-30 hover:bg-white/5`,children:`← Prev`}),(0,D.jsx)(`button`,{type:`button`,disabled:e+hm>=f,onClick:()=>t(e+hm),className:`px-3 py-1 border border-[var(--color-line-1)] rounded-sm disabled:opacity-30 hover:bg-white/5`,children:`Next →`})]})]})]})}function xm({status:e,className:t=``}){return(0,D.jsx)(`span`,{className:`status-dot ${e===`ok`?`bg-[var(--color-decision-allow)]`:e===`warn`?`bg-[var(--color-decision-ask)]`:e===`fail`?`bg-[var(--color-decision-block)]`:`bg-[var(--color-fg-3)]`} ${t}`})}function Sm({status:e}){let t=e===`ok`?`text-[var(--color-decision-allow)]`:e===`warn`?`text-[var(--color-decision-ask)]`:e===`fail`?`text-[var(--color-decision-block)]`:`text-[var(--color-fg-3)]`,n=e===`ok`?`OK`:e===`warn`?`Warn`:e===`fail`?`Fail`:`Skipped`;return(0,D.jsx)(`span`,{className:`text-[10.5px] font-medium uppercase tracking-wide ${t}`,children:n})}function Cm(e){return e===void 0?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function wm(e){if(!e)return``;let t=Math.floor((Date.now()-e)/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function Tm(e,t){return t&&e.startsWith(`${t}/`)?`~/${e.slice(t.length+1)}`:e===t?`~`:e}function Em({file:e,home:t,wired:n}){return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 py-1 border-b border-[var(--color-line-0)] last:border-0 text-[11.5px]`,children:[(0,D.jsx)(xm,{status:e.exists?n===void 0||n?`ok`:`warn`:`skip`}),(0,D.jsx)(`code`,{className:`flex-1 truncate text-[var(--color-fg-1)]`,title:e.path,children:Tm(e.path,t)}),e.exists?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)]`,children:Cm(e.size)}),(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)] min-w-[60px] text-right`,children:wm(e.modified_at)}),n===!1&&(0,D.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-[var(--color-decision-ask)]`,title:`File exists but does not appear to contain SSG wiring`,children:`no ssg`}),n===!0&&(0,D.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-[var(--color-decision-allow)]`,title:`File contains SSG hook / MCP entries`,children:`wired`})]}):(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)]`,children:`missing`})]})}function Dm({title:e,status:t,children:n,hint:r}){return(0,D.jsxs)(`section`,{className:`hig-card hig-card-padded`,children:[(0,D.jsxs)(`header`,{className:`flex items-center justify-between mb-3`,children:[(0,D.jsxs)(`h2`,{className:`text-[13px] font-semibold text-[var(--color-fg-0)] flex items-center gap-2`,children:[t!==void 0&&(0,D.jsx)(xm,{status:t}),e]}),r&&(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)]`,children:r})]}),(0,D.jsx)(`div`,{children:n})]})}function Om({k:e,v:t,mono:n=!1}){return(0,D.jsxs)(`div`,{className:`flex items-baseline gap-3 py-1 text-[11.5px] border-b border-[var(--color-line-0)] last:border-0`,children:[(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)] min-w-[110px]`,children:e}),(0,D.jsx)(`span`,{className:`flex-1 text-[var(--color-fg-1)] ${n?`font-mono text-[11px]`:``}`,children:t})]})}var km={"claude-code":`Claude Code`,cursor:`Cursor`,codex:`Codex CLI`,pi:`Pi Agent`,gemini:`Gemini CLI`,antigravity:`Antigravity`,copilot:`GitHub Copilot`};function Am({adapter:e,home:t}){let n=km[e.id]??e.id,r=e.artifacts.filter(e=>e.exists&&e.ssg_wired).length,i=e.artifacts.filter(e=>e.exists).length;return(0,D.jsxs)(`div`,{className:`rounded-md border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(xm,{status:e.status}),(0,D.jsx)(`span`,{className:`text-[12.5px] font-semibold text-[var(--color-fg-0)]`,children:n}),e.active&&(0,D.jsx)(`span`,{className:`text-[9.5px] font-semibold uppercase tracking-wider px-1.5 py-0.5 rounded-sm text-[var(--color-hig-blue)] bg-[color-mix(in_oklab,var(--color-hig-blue)_14%,transparent)]`,title:`This is the adapter ssg is currently using at runtime`,children:`Active`})]}),(0,D.jsxs)(`span`,{className:`text-[10px] text-[var(--color-fg-3)]`,children:[r,`/`,e.artifacts.length,` wired`]})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap gap-2 mb-2 text-[10.5px]`,children:[(0,D.jsx)(`span`,{className:e.detected?`text-[var(--color-decision-allow)]`:`text-[var(--color-fg-3)]`,children:e.detected?`● detected`:`○ not detected`}),(0,D.jsx)(`span`,{className:e.healthy?`text-[var(--color-decision-allow)]`:`text-[var(--color-fg-3)]`,children:e.healthy?`● binary healthy`:`○ binary missing`}),i===0&&(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`○ no config files on disk`})]}),e.artifacts.length>0&&(0,D.jsx)(`div`,{className:`border-t border-[var(--color-line-0)] pt-1`,children:e.artifacts.map(e=>(0,D.jsx)(Em,{file:e,home:t,wired:e.exists?e.ssg_wired:void 0},e.path))}),e.status===`warn`&&i===0&&(0,D.jsxs)(`div`,{className:`mt-2 text-[10.5px] text-[var(--color-fg-3)]`,children:[`Wire it up with:`,` `,(0,D.jsxs)(`code`,{className:`font-mono text-[var(--color-fg-1)]`,children:[`ssg init --client=`,e.id]})]})]})}function jm(){let{data:e,loading:t,error:n,refetch:r}=H(`/api/json/setup-status`);if(t&&!e)return(0,D.jsx)(`div`,{className:`py-12 text-center text-[var(--color-fg-3)] text-[12px]`,children:`Reading setup status…`});if(n||!e)return(0,D.jsxs)(`div`,{className:`hig-card hig-card-padded text-[12px]`,children:[(0,D.jsxs)(`p`,{className:`text-[var(--color-decision-block)] mb-2`,children:[`Could not load /api/json/setup-status: `,n??`no response`]}),(0,D.jsx)(`button`,{onClick:r,className:`hig-button hig-button-small`,children:`Retry`})]});let{summary:i,license:a,daemon:o,dashboard:s,native:c,db:l,mcp:u,rules:d,init_files:f,adapters:p,hub:m,checks:h,home:g,cwd:_}=e;return(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsxs)(`div`,{className:`flex items-end justify-between`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-[20px] font-semibold tracking-tight text-[var(--color-fg-0)] leading-tight`,children:`Setup Status`}),(0,D.jsxs)(`p`,{className:`text-[12.5px] text-[var(--color-fg-3)] mt-1 leading-relaxed`,children:[`What `,(0,D.jsx)(`code`,{className:`font-mono`,children:`ssg init`}),` wrote and whether every piece is wired up — license, hooks, MCP, native engine, daemon, rules, and hub packages.`]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsxs)(`span`,{className:`text-[11px] text-[var(--color-fg-3)]`,children:[`ssg v`,e.version]}),(0,D.jsx)(`button`,{onClick:r,className:`hig-button hig-button-small`,children:`Refresh`})]})]}),(0,D.jsxs)(`section`,{"data-tutorial":`setup-summary`,className:`hig-card hig-card-padded flex items-center gap-6`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(xm,{status:i.overall,className:`!w-3 !h-3`}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`text-[11px] uppercase tracking-wide text-[var(--color-fg-3)]`,children:`Overall`}),(0,D.jsx)(`div`,{className:`text-[14px] font-semibold text-[var(--color-fg-0)]`,children:i.overall===`ok`?`Healthy`:i.overall===`warn`?`Needs attention`:i.overall===`fail`?`Broken`:`Skipped`})]})]}),(0,D.jsxs)(`div`,{className:`flex gap-4 text-[12px]`,children:[(0,D.jsxs)(`span`,{className:`text-[var(--color-decision-allow)]`,children:[`● `,i.ok,` ok`]}),(0,D.jsxs)(`span`,{className:`text-[var(--color-decision-ask)]`,children:[`● `,i.warn,` warn`]}),i.fail>0&&(0,D.jsxs)(`span`,{className:`text-[var(--color-decision-block)]`,children:[`● `,i.fail,` fail`]}),(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-3)]`,children:[`○ `,i.skip,` skipped`]})]}),(0,D.jsxs)(`div`,{className:`ml-auto text-right`,children:[(0,D.jsx)(`div`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-3)]`,children:`Working dir`}),(0,D.jsx)(`code`,{className:`text-[11px] text-[var(--color-fg-1)]`,title:_,children:Tm(_,g)})]})]}),(0,D.jsx)(Dm,{title:`Checks`,hint:`${h.length} probes`,children:(0,D.jsx)(`div`,{children:h.map(e=>(0,D.jsxs)(`div`,{className:`flex items-start gap-3 py-1.5 border-b border-[var(--color-line-0)] last:border-0`,children:[(0,D.jsx)(xm,{status:e.status,className:`mt-1`}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,D.jsx)(`span`,{className:`text-[12px] font-medium text-[var(--color-fg-0)]`,children:e.name}),(0,D.jsx)(Sm,{status:e.status})]}),(0,D.jsx)(`div`,{className:`text-[11px] text-[var(--color-fg-2)] mt-0.5 break-words`,children:e.detail}),e.fix&&(0,D.jsxs)(`div`,{className:`text-[11px] text-[var(--color-hig-blue)] font-mono mt-0.5`,children:[`→ `,e.fix]})]})]},e.name))})}),(0,D.jsxs)(Dm,{title:`License & authentication`,status:a.status===`healthy`||a.status===`healthy_free`?`ok`:`warn`,children:[(0,D.jsx)(Om,{k:`Tier`,v:a.tier_label}),(0,D.jsx)(Om,{k:`Status`,v:a.status}),(0,D.jsx)(Om,{k:`Account`,v:a.email??`—`}),(0,D.jsx)(Om,{k:`Auth method`,v:a.auth_method??`—`}),(0,D.jsx)(Om,{k:`Evals today`,v:a.eval_daily_limit===null?`${a.evals_today.toLocaleString()} (unlimited)`:`${a.evals_today.toLocaleString()} / ${a.eval_daily_limit.toLocaleString()}`}),(0,D.jsxs)(`div`,{className:`mt-2 pt-2 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`div`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-3)] mb-1`,children:`Credential files`}),(0,D.jsx)(Em,{file:a.license_file,home:g}),(0,D.jsx)(Em,{file:a.hosts_file,home:g})]})]}),(0,D.jsxs)(Dm,{title:`Runtime processes`,status:o.alive&&s.alive?`ok`:`warn`,children:[(0,D.jsx)(Om,{k:`Daemon (evald)`,v:o.alive?`running — PID ${o.pid}`:o.pid?`stale — PID ${o.pid} in pidfile but process gone`:`not running`}),(0,D.jsx)(Om,{k:`Daemon socket`,v:o.socket_exists?`present`:`missing`,mono:!0}),(0,D.jsx)(Om,{k:`Dashboard (serve)`,v:s.alive?`running — PID ${s.pid}`:`not running`}),(0,D.jsx)(Om,{k:`Native engine`,v:c.available?`loaded — sub-ms eval available`:`unavailable — TypeScript fallback`})]}),(0,D.jsxs)(Dm,{title:`Database & MCP`,status:l.status,children:[(0,D.jsx)(Om,{k:`Rules in DB`,v:l.rules.toLocaleString()}),(0,D.jsx)(Om,{k:`Audit log rows`,v:l.audit_rows.toLocaleString()}),(0,D.jsx)(Om,{k:`DB path`,v:Tm(l.path,g),mono:!0}),(0,D.jsxs)(`div`,{className:`mt-2 pt-2 border-t border-[var(--color-line-0)]`,children:[(0,D.jsx)(`div`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-3)] mb-1`,children:`MCP server`}),(0,D.jsx)(Om,{k:`Status`,v:u.status===`active`?`active — ${u.recent_5min.toLocaleString()} calls in last 5 min`:u.status===`configured`?`configured — ${u.total.toLocaleString()} historical calls, none recent`:`no MCP traffic recorded yet`}),(0,D.jsx)(Om,{k:`All-time calls`,v:u.total.toLocaleString()})]})]}),(0,D.jsxs)(Dm,{title:`Rules directories`,status:d.local_count>0?`ok`:`warn`,children:[(0,D.jsx)(Om,{k:`Local`,v:`${d.local_count} .rules file${d.local_count===1?``:`s`}`}),(0,D.jsx)(Om,{k:`Local path`,v:Tm(d.local_dir,g),mono:!0}),(0,D.jsx)(Om,{k:`Global`,v:`${d.global_count} .rules file${d.global_count===1?``:`s`}`}),(0,D.jsx)(Om,{k:`Global path`,v:Tm(d.global_dir,g),mono:!0})]}),(0,D.jsx)(Dm,{title:`Project init files`,hint:`${f.filter(e=>e.exists).length}/${f.length} present`,children:(0,D.jsx)(`div`,{children:f.map(e=>(0,D.jsx)(Em,{file:e,home:g},e.path))})}),(0,D.jsx)(Dm,{title:`Adapters, hooks & MCP files`,hint:e.active_adapter?`Active: ${km[e.active_adapter]??e.active_adapter}`:`No active adapter`,children:(0,D.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-1 lg:grid-cols-2`,children:p.map(e=>(0,D.jsx)(Am,{adapter:e,home:g},e.id))})}),(0,D.jsxs)(Dm,{title:`Hub-installed rulesets`,status:m.installs.length===0?`skip`:m.drift===0?`ok`:`warn`,hint:m.installs.length===0?`none installed`:`${m.in_sync} in sync${m.drift>0?`, ${m.drift} drift`:``}`,children:[(0,D.jsx)(Em,{file:m.pins_file,home:g}),m.installs.length===0?(0,D.jsxs)(`p`,{className:`text-[11.5px] text-[var(--color-fg-3)] mt-2`,children:[`Install rulesets from the Hub tab. Each install is recorded per project path in `,(0,D.jsx)(`code`,{className:`font-mono`,children:`hub-pins.json`}),`.`]}):(0,D.jsx)(`div`,{className:`mt-2 space-y-2`,children:m.installs.map((e,t)=>(0,D.jsxs)(`div`,{className:`rounded-md border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-2 text-[11.5px]`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,D.jsx)(xm,{status:e.in_sync?`ok`:`warn`}),(0,D.jsx)(`span`,{className:`font-semibold text-[var(--color-fg-0)]`,children:e.id}),(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)]`,children:e.version}),(0,D.jsx)(`span`,{className:`ml-auto text-[10.5px] text-[var(--color-fg-3)]`,children:wm(e.installed_at)})]}),(0,D.jsx)(`code`,{className:`block truncate text-[11px] text-[var(--color-fg-2)]`,title:e.path,children:Tm(e.path,g)}),e.files.length>0&&(0,D.jsx)(`div`,{className:`mt-1 flex flex-wrap gap-1`,children:e.files.map(e=>(0,D.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-2)] bg-[var(--color-surface-2)] border border-[var(--color-line-0)] rounded-sm px-1.5 py-0.5`,children:e},e))}),!e.in_sync&&e.drift_reason&&(0,D.jsxs)(`div`,{className:`mt-1 text-[10.5px] text-[var(--color-decision-ask)]`,children:[`Drift: `,e.drift_reason]})]},`${e.id}-${e.path}-${t}`))})]})]})}var Mm=[{id:`files`,label:`Files & folders`,blurb:`Deleting or changing things on your hard drive`},{id:`secrets`,label:`Secrets & keys`,blurb:`Reading or overwriting credentials and private files`},{id:`network`,label:`Network calls`,blurb:`Reaching out to websites and external APIs`},{id:`install`,label:`Installing software`,blurb:`Pulling new code or packages from the internet`},{id:`communication`,label:`Sending messages`,blurb:`Outgoing emails, posts, or chat messages`}],Nm=[{id:`erase-folder`,label:`AI tries to erase a folder`,plainEffect:`Permanently deletes every file inside the "output" folder. Recovery is hard.`,category:`files`,emoji:`🗑️`,toolCall:{tool:`Bash`,input:{command:`find ./output -type f -delete`}},displayByOs:{windows:`Remove-Item .\\output -Recurse -Force`,macos:`find ./output -type f -delete`,linux:`find ./output -type f -delete`}},{id:`write-env`,label:`AI tries to write your .env file`,plainEffect:`Overwrites the file that holds your API keys, passwords, and other secrets.`,category:`secrets`,emoji:`⚠️`,toolCall:{tool:`Write`,input:{file_path:`.env`,content:`API_KEY=test`}}},{id:`read-ssh-key`,label:`AI tries to read your private key`,plainEffect:`Opens the SSH key that proves you are you on remote servers. Copying it is identity theft.`,category:`secrets`,emoji:`🔑`,toolCall:{tool:`Read`,input:{file_path:`~/.ssh/id_rsa`}},displayByOs:{windows:`Read C:\\Users\\You\\.ssh\\id_rsa`,macos:`Read ~/.ssh/id_rsa`,linux:`Read ~/.ssh/id_rsa`}},{id:`install-package`,label:`AI tries to install a package`,plainEffect:`Downloads code from a public registry and adds it to your project. The code runs with your permissions.`,category:`install`,emoji:`📦`,toolCall:{tool:`Bash`,input:{command:`npm install some-package --save`}}},{id:`fetch-web`,label:`AI tries to fetch a URL`,plainEffect:`Makes a web request to an outside service. Could leak data or pull in instructions.`,category:`network`,emoji:`🌐`,toolCall:{tool:`WebFetch`,input:{url:`https://api.example.com/data`,prompt:``}}},{id:`send-email`,label:`AI tries to send an email`,plainEffect:`Sends an email from your machine without your review. Anyone could end up CC’d.`,category:`communication`,emoji:`📧`,toolCall:{tool:`Bash`,input:{command:`sendmail -t < message.txt`}},displayByOs:{windows:`Send-MailMessage -To you@example.com -Subject "..." -Body (Get-Content message.txt)`,macos:`sendmail -t < message.txt`,linux:`sendmail -t < message.txt`}}],Pm=`ssg.tryit.intro-dismissed.v1`,Fm=`ssg.tryit.os.v1`,Im={allow:{label:`Allowed`,color:`text-emerald-300`,bg:`border-emerald-500/30 bg-emerald-500/5`,icon:`✓`,headline:`SSG would let this happen.`,next:`In real life, the AI would go ahead. If you would rather it didn’t, add a rule on the Rules page.`},block:{label:`Blocked`,color:`text-red-300`,bg:`border-red-500/30 bg-red-500/5`,icon:`✕`,headline:`SSG would stop this from running.`,next:`The AI never gets to perform the action. No files change, no commands run, no requests go out.`},ask:{label:`Ask first`,color:`text-amber-300`,bg:`border-amber-500/30 bg-amber-500/5`,icon:`?`,headline:`SSG would pause and ask you first.`,next:`You’d get a prompt on the Approvals page. Nothing happens until you click Allow or Deny.`},log:{label:`Logged`,color:`text-sky-300`,bg:`border-sky-500/30 bg-sky-500/5`,icon:`≡`,headline:`SSG would allow it but write it down.`,next:`The AI proceeds, and the action gets recorded in your Activity log for later review.`},force:{label:`Force-allow`,color:`text-violet-300`,bg:`border-violet-500/30 bg-violet-500/5`,icon:`→`,headline:`A high-priority rule explicitly allows this.`,next:`A “force” rule overrides anything that would have blocked or paused this action.`}};function Lm(){if(typeof window>`u`)return`linux`;try{let e=window.localStorage.getItem(Fm);if(e===`windows`||e===`macos`||e===`linux`)return e}catch{}let e=navigator.userAgent.toLowerCase();return e.includes(`win`)?`windows`:e.includes(`mac`)?`macos`:`linux`}function Rm(e){return e===`windows`?`Windows`:e===`macos`?`Mac`:`Linux`}function zm(e){return e===`windows`?`⊞`:e===`macos`?`🍎`:`🐧`}function Bm(e,t){let n=e.displayByOs?.[t];if(n)return n;let r=e.toolCall;return r.input.command?r.input.command:r.input.file_path?r.input.file_path:r.input.url?r.input.url:JSON.stringify(r.input)}function Vm({n:e,label:t}){return(0,D.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,D.jsx)(`span`,{className:`flex items-center justify-center w-5 h-5 rounded-full bg-[var(--color-brand)]/15 text-[var(--color-brand)] text-[10px] font-semibold shrink-0`,children:e}),(0,D.jsx)(`span`,{className:`text-[11.5px] text-[var(--color-fg-2)] truncate`,children:t})]})}function Hm({os:e,setOs:t}){return(0,D.jsx)(`div`,{className:`inline-flex items-center gap-1 rounded-full border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-0.5`,children:[`windows`,`macos`,`linux`].map(n=>(0,D.jsxs)(`button`,{onClick:()=>t(n),className:`px-2.5 py-1 rounded-full text-[10.5px] font-medium cursor-pointer transition-colors ${n===e?`bg-[var(--color-brand)]/15 text-[var(--color-brand)]`:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`}`,title:`Show commands as they would look on ${Rm(n)}`,children:[zm(n),` `,Rm(n)]},n))})}function Um({os:e,setOs:t,onDismiss:n}){return(0,D.jsxs)(`div`,{className:`rounded-2xl border border-[var(--color-brand)]/25 bg-[var(--color-brand)]/[0.04] p-4 sm:p-5 space-y-3.5`,children:[(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h2`,{className:`text-[15px] font-semibold text-[var(--color-fg-0)] leading-tight`,children:`What SSG does — and why this page is here`}),(0,D.jsxs)(`p`,{className:`text-[12.5px] text-[var(--color-fg-2)] mt-1 leading-relaxed max-w-[60ch]`,children:[`AI coding agents can run any command on your computer: delete files, read your secrets, send emails, install packages. SSG is the policy engine that decides which of those they’re actually allowed to do.`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-0)] font-medium`,children:`This sandbox shows SSG’s decisions in real time`}),`, without anything actually running. Pick a scenario, click Run, see what your guardrails would do.`]})]}),(0,D.jsx)(`button`,{onClick:n,className:`shrink-0 text-[var(--color-fg-4)] hover:text-[var(--color-fg-1)] cursor-pointer text-[14px] leading-none p-1 -m-1`,"aria-label":`Dismiss intro`,title:`Hide this primer`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1.5 text-[11.5px]`,children:[(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-400`}),`Nothing executes`]}),(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-400`}),`No files modified`]}),(0,D.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-emerald-300`,children:[(0,D.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-400`}),`No network traffic`]})]}),(0,D.jsxs)(`div`,{className:`rounded-xl border border-[var(--color-line-1)]/60 bg-[var(--color-surface-1)]/40 p-3`,children:[(0,D.jsx)(`p`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-3)] font-semibold mb-2`,children:`How it works`}),(0,D.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-3`,children:[(0,D.jsx)(Vm,{n:1,label:`Pick a scenario below`}),(0,D.jsx)(Vm,{n:2,label:`Click Run`}),(0,D.jsx)(Vm,{n:3,label:`See the decision SSG would make`})]})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1`,children:[(0,D.jsx)(`span`,{className:`text-[11.5px] text-[var(--color-fg-3)]`,children:`Showing commands as they look on`}),(0,D.jsx)(Hm,{os:e,setOs:t}),(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-4)]`,children:`(cosmetic — SSG’s decision is the same on every OS)`})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap pt-1`,children:[(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] italic max-w-[44ch] leading-snug`,children:`Every AI agent will need a policy layer. This is what one looks like.`}),(0,D.jsx)(`button`,{onClick:n,className:`text-[11.5px] font-medium text-[var(--color-fg-2)] hover:text-[var(--color-fg-0)] cursor-pointer underline-offset-2 hover:underline`,children:`Got it, hide this primer`})]})]})}function Wm({scenario:e,selected:t,os:n,onClick:r}){return(0,D.jsxs)(`button`,{onClick:r,className:`flex flex-col gap-1.5 rounded-xl border px-3.5 py-3 text-left cursor-pointer transition-all ${t?`border-[var(--color-brand)]/60 bg-[var(--color-brand)]/8 shadow-[0_0_0_3px_color-mix(in_oklab,var(--color-brand)_15%,transparent)]`:`border-[var(--color-line-1)] bg-[var(--color-surface-1)] hover:border-[var(--color-line-2)] hover:bg-[var(--color-surface-2)]/40`}`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:`text-[18px] leading-none shrink-0`,children:e.emoji}),(0,D.jsx)(`span`,{className:`text-[13px] font-medium text-[var(--color-fg-0)] leading-snug flex-1 min-w-0`,children:e.label})]}),(0,D.jsx)(`p`,{className:`text-[11.5px] text-[var(--color-fg-3)] leading-snug`,children:e.plainEffect}),(0,D.jsx)(`p`,{className:`font-mono text-[10.5px] text-[var(--color-fg-4)] truncate`,children:Bm(e,n)})]})}function Gm(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(null),[c,l]=(0,_.useState)(!1),[u,d]=(0,_.useState)(`Bash`),[f,p]=(0,_.useState)(`{"command": ""}`),[m,h]=(0,_.useState)(()=>{if(typeof window>`u`)return!1;try{return window.localStorage.getItem(Pm)===`1`}catch{return!1}}),[g,v]=(0,_.useState)(()=>Lm()),[y,b]=(0,_.useState)(!1);function x(e){v(e);try{window.localStorage.setItem(Fm,e)}catch{}}function S(){h(!0);try{window.localStorage.setItem(Pm,`1`)}catch{}}function C(){h(!1);try{window.localStorage.removeItem(Pm)}catch{}}let w=Nm.find(t=>t.id===e),T=(0,_.useMemo)(()=>{let e=new Map;for(let t of Nm){let n=e.get(t.category)??[];n.push(t),e.set(t.category,n)}return Mm.filter(t=>e.has(t.id)).map(t=>({...t,scenarios:e.get(t.id)}))},[]);(0,_.useEffect)(()=>{(n||o)&&window.scrollTo({top:(document.getElementById(`tryit-result`)?.offsetTop??0)-80,behavior:`smooth`})},[n,o]),(0,_.useEffect)(()=>{if(typeof window>`u`)return;let e=new URLSearchParams(window.location.search).get(`scenario`);e&&Nm.some(t=>t.id===e)&&t(e)},[]),(0,_.useEffect)(()=>{if(typeof window>`u`)return;let t=new URL(window.location.href);e?t.searchParams.set(`scenario`,e):t.searchParams.delete(`scenario`),window.history.replaceState({},``,t.toString())},[e]);function E(){if(!e)return;let t=new URL(window.location.href);t.searchParams.set(`scenario`,e),navigator.clipboard.writeText(t.toString()).then(()=>{b(!0),setTimeout(()=>b(!1),2e3)}).catch(()=>{})}async function O(e){a(!0),s(null),r(null);try{let t=await(await fetch(`/api/json/eval-dry-run`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify(e)})).json();t.error?s(t.error):r(t)}catch{s(`Could not reach the governance engine. Is SSG running?`)}finally{a(!1)}}function k(){w&&O(w.toolCall)}function ee(){let e;try{e=JSON.parse(f)}catch{s(`Invalid JSON in input field.`);return}if(typeof e!=`object`||!e){s(`Input must be a JSON object.`);return}O({tool:u,input:e})}let A=n?Im[n.decision]??Im.allow:null;return(0,D.jsxs)(`div`,{className:`max-w-3xl mx-auto py-4 space-y-4`,children:[(0,D.jsxs)(`header`,{className:`flex items-baseline justify-between gap-4 flex-wrap`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-[22px] font-semibold text-[var(--color-fg-0)] tracking-tight leading-tight`,children:`Try it`}),(0,D.jsxs)(`p`,{className:`text-[13px] text-[var(--color-fg-2)] mt-0.5`,children:[`Your AI can run any command. SSG decides what it’s actually allowed to do.`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-3)]`,children:`Pick a scenario to see — nothing actually runs.`})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3 shrink-0`,children:[m&&(0,D.jsx)(`button`,{onClick:C,className:`text-[11.5px] font-medium text-[var(--color-fg-3)] hover:text-[var(--color-fg-0)] cursor-pointer`,title:`Show the introduction again`,children:`What is Try It? →`}),(0,D.jsx)(`a`,{href:`/guardrails`,className:`text-[11.5px] font-medium text-[var(--color-brand)] hover:underline`,children:`Install more guardrails →`})]})]}),!m&&(0,D.jsx)(Um,{os:g,setOs:x,onDismiss:S}),m&&(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 px-1`,children:[(0,D.jsx)(`span`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:`Commands shown as on`}),(0,D.jsx)(Hm,{os:g,setOs:x})]}),(0,D.jsx)(`div`,{"data-tutorial":`try-scenarios`,className:`space-y-4`,children:T.map(n=>(0,D.jsxs)(`section`,{className:`space-y-2`,children:[(0,D.jsxs)(`div`,{className:`flex items-baseline gap-2 px-1`,children:[(0,D.jsx)(`h3`,{className:`text-[11px] uppercase tracking-wide text-[var(--color-fg-3)] font-semibold`,children:n.label}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:n.blurb})]}),(0,D.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:n.scenarios.map(n=>(0,D.jsx)(Wm,{scenario:n,selected:e===n.id,os:g,onClick:()=>{t(n.id),r(null),s(null)}},n.id))})]},n.id))}),w&&(0,D.jsxs)(`div`,{"data-tutorial":`try-detail`,className:`rounded-xl border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-4 space-y-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,D.jsx)(`span`,{className:`text-[22px] leading-none shrink-0`,children:w.emoji}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsx)(`p`,{className:`text-[13.5px] font-medium text-[var(--color-fg-0)]`,children:w.label}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-2)] mt-0.5 leading-relaxed`,children:w.plainEffect})]})]}),(0,D.jsxs)(`div`,{className:`rounded-lg border border-[var(--color-line-0)] bg-[var(--color-surface-0)] px-3 py-2`,children:[(0,D.jsxs)(`p`,{className:`text-[10px] uppercase tracking-wide text-[var(--color-fg-4)] font-semibold mb-1`,children:[`What the AI would run · `,Rm(g)]}),(0,D.jsx)(`code`,{className:`font-mono text-[12px] text-[var(--color-fg-1)] break-all`,children:Bm(w,g)})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,D.jsxs)(`p`,{className:`text-[11.5px] text-[var(--color-fg-3)]`,children:[`Click Run to see what SSG would decide.`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`The command does not actually execute.`})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,D.jsx)(`button`,{onClick:E,className:`inline-flex items-center gap-1 px-3 h-8 rounded-full text-[11.5px] font-medium cursor-pointer transition-colors
|
|
51
51
|
border border-[var(--color-line-1)] bg-[var(--color-surface-1)] text-[var(--color-fg-2)]
|
|
52
52
|
hover:bg-[var(--color-surface-2)]/40 hover:text-[var(--color-fg-0)]`,title:`Copy a deep-link to this exact scenario`,children:y?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`svg`,{width:`11`,height:`11`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M20 6L9 17l-5-5`})}),`Link copied`]}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`svg`,{width:`11`,height:`11`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M10 13a5 5 0 0 0 7.07 0l3-3a5 5 0 0 0-7.07-7.07l-1.5 1.5M14 11a5 5 0 0 0-7.07 0l-3 3a5 5 0 0 0 7.07 7.07l1.5-1.5`})}),`Copy share link`]})}),(0,D.jsx)(`button`,{onClick:k,disabled:i,className:`inline-flex items-center gap-1.5 px-4 h-8 rounded-full text-[12px] font-medium cursor-pointer transition-colors
|
|
53
53
|
bg-[var(--color-brand)] text-white hover:opacity-90
|
|
54
54
|
disabled:opacity-40 disabled:cursor-not-allowed`,children:i?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`svg`,{className:`animate-spin`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,children:(0,D.jsx)(`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`})}),`Running`]}):(0,D.jsxs)(D.Fragment,{children:[`Run simulation`,(0,D.jsx)(`svg`,{width:`11`,height:`11`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M5 12h14M13 5l7 7-7 7`})})]})})]})]})]}),n&&A&&(0,D.jsxs)(`div`,{id:`tryit-result`,className:`rounded-xl border p-4 ${A.bg} space-y-3`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsx)(`span`,{className:`flex items-center justify-center w-9 h-9 rounded-full text-lg font-bold border ${A.bg} ${A.color}`,children:A.icon}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsx)(`p`,{className:`text-[15px] font-semibold ${A.color}`,children:A.label}),(0,D.jsx)(`p`,{className:`text-[12.5px] mt-0.5 ${A.color} opacity-90`,children:A.headline})]})]}),(0,D.jsx)(`p`,{className:`text-[12.5px] text-[var(--color-fg-1)] leading-relaxed`,children:A.next}),(0,D.jsxs)(`div`,{className:`rounded-lg bg-[var(--color-surface-0)]/60 border border-[var(--color-line-0)] px-3 py-2 space-y-1`,children:[(0,D.jsx)(`p`,{className:`text-[10px] uppercase tracking-wide text-[var(--color-fg-4)] font-semibold`,children:`Why this decision`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-1)] leading-relaxed`,children:n.reason??`No specific rule matched this action — SSG defaults to allowing things that aren’t covered by a rule.`}),(0,D.jsxs)(`p`,{className:`text-[10.5px] text-[var(--color-fg-3)] mt-1.5`,children:[n.rules_evaluated,` rule`,n.rules_evaluated===1?``:`s`,` checked`,n.rule_id&&(0,D.jsxs)(D.Fragment,{children:[` `,`· matched`,` `,(0,D.jsx)(`a`,{href:`/rules?focus=${encodeURIComponent(n.rule_id)}`,className:`font-mono text-[var(--color-brand)] hover:underline`,children:n.rule_id})]})]})]}),w&&(0,D.jsxs)(`div`,{className:`rounded-lg border border-[var(--color-line-0)] bg-[var(--color-surface-0)]/60 px-3 py-2.5 flex items-start gap-2.5`,children:[(0,D.jsx)(`span`,{className:`text-[15px] leading-none mt-0.5 shrink-0`,children:n.decision===`block`?`🛡️`:n.decision===`allow`?`⚠️`:n.decision===`ask`?`⏸️`:`ℹ️`}),(0,D.jsxs)(`div`,{className:`min-w-0`,children:[(0,D.jsx)(`p`,{className:`text-[10.5px] uppercase tracking-wide text-[var(--color-fg-4)] font-semibold`,children:n.decision===`block`?`What you just avoided`:n.decision===`allow`?`What this would actually do`:n.decision===`ask`?`What you’d be asked to confirm`:`What gets recorded`}),(0,D.jsx)(`p`,{className:`text-[12.5px] text-[var(--color-fg-1)] leading-relaxed mt-0.5`,children:w.plainEffect})]})]}),n.decision===`allow`&&(0,D.jsxs)(`a`,{href:`/guardrails`,className:`inline-flex items-center gap-1.5 px-3.5 h-8 rounded-full text-[12px] font-medium
|
|
55
55
|
bg-[var(--color-brand)] text-white hover:opacity-90 transition-colors`,children:[`Add a rule to block this`,(0,D.jsx)(`svg`,{width:`11`,height:`11`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M5 12h14M13 5l7 7-7 7`})})]}),(0,D.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1.5 text-[11.5px] pt-1`,children:[n.decision===`block`&&(0,D.jsx)(`a`,{href:`/rules`,className:`font-medium text-[var(--color-brand)] hover:underline`,children:`See the rule that did this →`}),n.decision===`ask`&&(0,D.jsx)(`a`,{href:`/approvals`,className:`font-medium text-[var(--color-brand)] hover:underline`,children:`See where the prompt appears →`}),(0,D.jsx)(`a`,{href:`/audit`,className:`font-medium text-[var(--color-fg-2)] hover:text-[var(--color-fg-0)] hover:underline`,children:`See real decisions in your Activity log →`}),(0,D.jsx)(`a`,{href:`https://sigmashake.com`,target:`_blank`,rel:`noreferrer`,className:`font-medium text-[var(--color-fg-2)] hover:text-[var(--color-fg-0)] hover:underline`,children:`Tell a teammate about SSG ↗`})]})]}),o&&(0,D.jsx)(`div`,{className:`rounded-xl border border-red-500/30 bg-red-500/5 px-4 py-3 text-[12px] text-red-300`,children:o}),(0,D.jsxs)(`div`,{"data-tutorial":`try-advanced`,className:`pt-2`,children:[(0,D.jsx)(`button`,{onClick:()=>l(e=>!e),className:`text-[11px] text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)] transition-colors cursor-pointer`,children:c?`▲ Hide custom input`:`▼ Advanced: write your own scenario`}),c&&(0,D.jsxs)(`div`,{className:`mt-3 rounded-xl border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2`,children:[(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-3)] leading-relaxed`,children:`Pick a tool the AI would call, and the input it would pass. Same idea as the scenarios above — still a simulation, still nothing actually runs.`}),(0,D.jsxs)(`div`,{className:`flex items-end gap-2 flex-wrap`,children:[(0,D.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,D.jsx)(`label`,{className:`text-[10px] font-mono text-[var(--color-fg-3)]`,children:`Tool`}),(0,D.jsx)(`select`,{value:u,onChange:e=>d(e.target.value),className:`bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-[11px] font-mono rounded-md px-2 h-8 focus:outline-none`,children:[`Bash`,`Read`,`Write`,`Edit`,`WebFetch`,`WebSearch`,`Agent`,`Glob`,`Grep`].map(e=>(0,D.jsx)(`option`,{value:e,children:e},e))})]}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-[200px] flex flex-col gap-1`,children:[(0,D.jsx)(`label`,{className:`text-[10px] font-mono text-[var(--color-fg-3)]`,children:`Input JSON`}),(0,D.jsx)(`input`,{type:`text`,value:f,onChange:e=>p(e.target.value),className:`w-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-[11px] font-mono rounded-md px-2 h-8 focus:outline-none focus:border-[var(--color-brand)]/50`})]}),(0,D.jsx)(`button`,{onClick:ee,disabled:i,className:`px-3 h-8 rounded-full text-[11px] font-medium cursor-pointer transition-colors
|
|
56
56
|
bg-[var(--color-fg-1)] text-[var(--color-bg)] hover:opacity-90
|
|
57
|
-
disabled:opacity-40 disabled:cursor-not-allowed`,children:`Run`})]})]})]})]})}var Gm=[{value:`issue`,label:`Bug / Issue`,hint:`Something is broken`},{value:`feature_request`,label:`Feature Request`,hint:`Suggest an improvement`},{value:`question`,label:`Question`,hint:`How does X work?`},{value:`incident`,label:`Incident`,hint:`Urgent outage or data concern`}],Km=[{value:`p4`,label:`P4 — Low`},{value:`p3`,label:`P3 — Normal`},{value:`p2`,label:`P2 — High (4h SLA)`},{value:`p1`,label:`P1 — Critical (1h SLA)`}],qm=5,Jm=8*1024*1024;function Ym(){let[e,t]=(0,_.useState)(`issue`),[n,r]=(0,_.useState)(`p3`),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)([]),[f,p]=(0,_.useState)(!1),[m,h]=(0,_.useState)(null),[g,v]=(0,_.useState)(null),[y,b]=(0,_.useState)(!1),[x,S]=(0,_.useState)(``),C=(0,_.useRef)(null);(0,_.useEffect)(()=>{fetch(`/api/json/profile`,{headers:U()}).then(e=>e.ok?e.json():null).then(e=>{e?.email&&l(e.email)}).catch(()=>{})},[]),(0,_.useEffect)(()=>{!y||g||fetch(`/api/support/diagnostics?route=${encodeURIComponent(window.location.pathname)}`).then(e=>e.ok?e.json():null).then(e=>v(e)).catch(()=>{})},[y,g]),(0,_.useEffect)(()=>{let e=new URL(window.location.href),n=e.searchParams.get(`error`),r=e.searchParams.get(`from`);if(n||r){t(`issue`);let e=r?`Page: ${r}\n\n`:``,i=n?`Error: ${n}\n\n`:``;s(t=>t||`${e}${i}`)}},[]);function w(e){e.preventDefault(),E(Array.from(e.dataTransfer.files))}function T(e){E(Array.from(e.target.files??[])),C.current&&(C.current.value=``)}function E(e){S(``);let t=e.filter(e=>e.type.startsWith(`image/`));t.length<e.length&&S(`Only image files are accepted.`);let n=qm-u.length,r=t.slice(0,n);r.length<t.length&&S(`Maximum ${qm} images. Some were dropped.`);let i=r.filter(e=>e.size>Jm);if(i.length>0){S(`"${i[0].name}" exceeds 8 MiB.`);return}let a=r.map(e=>({file:e,preview:URL.createObjectURL(e)}));d(e=>[...e,...a])}function O(e){d(t=>(URL.revokeObjectURL(t[e].preview),t.filter((t,n)=>n!==e)))}async function k(t){t.preventDefault(),p(!0),h(null);let r=new FormData;r.append(`category`,e),r.append(`severity`,n),r.append(`subject`,i.trim()),r.append(`description`,o.trim()),r.append(`contact_email`,c.trim()),r.append(`route`,window.location.pathname);for(let{file:e}of u)r.append(`images`,e,e.name);try{let e=await(await fetch(`/api/support/feedback`,{method:`POST`,headers:U(),body:r})).json();h(e),e.ok&&(a(``),s(``),d([]))}catch(e){h({ok:!1,error:e instanceof Error?e.message:`Network error`})}finally{p(!1)}}return(0,D.jsxs)(`div`,{className:`max-w-2xl mx-auto space-y-5`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-xl font-medium tracking-tight text-[var(--color-fg-0)]`,children:`Support & Feedback`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-3)] mt-1 font-mono`,children:`report a bug, request a feature, or ask a question`})]}),m?.ok?(0,D.jsx)(q,{children:(0,D.jsx)(Y,{children:(0,D.jsxs)(`div`,{className:`space-y-3 py-2`,children:[(0,D.jsxs)(`p`,{className:`text-sm text-emerald-400 font-mono`,children:[`✓ `,m.message??`Ticket created.`]}),m.ticket_id&&(0,D.jsxs)(`p`,{className:`text-xs text-[var(--color-fg-3)] font-mono`,children:[`Ticket ID:`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:m.ticket_id})]}),(0,D.jsx)(`button`,{className:`text-[12px] text-[var(--color-brand)] hover:underline font-mono`,onClick:()=>h(null),children:`Submit another`})]})})}):(0,D.jsxs)(`form`,{onSubmit:k,className:`space-y-4`,children:[(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{children:[(0,D.jsx)(`label`,{className:`block overline mb-2`,children:`type`}),(0,D.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:Gm.map(n=>(0,D.jsxs)(`button`,{type:`button`,onClick:()=>t(n.value),className:`text-left px-3 py-2 rounded-sm border text-xs font-mono transition-colors ${e===n.value?`border-[var(--color-brand)]/50 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:border-[var(--color-line-0)]`}`,children:[(0,D.jsx)(`span`,{className:`block font-medium text-[var(--color-fg-1)]`,children:n.label}),(0,D.jsx)(`span`,{className:`block text-[11px] mt-0.5`,children:n.hint})]},n.value))})]})}),e===`incident`&&(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{children:[(0,D.jsx)(`label`,{className:`block overline mb-2`,children:`severity`}),(0,D.jsx)(`div`,{className:`flex gap-2 flex-wrap`,children:Km.map(e=>(0,D.jsx)(`button`,{type:`button`,onClick:()=>r(e.value),className:`px-3 py-1.5 rounded-sm border text-xs font-mono transition-colors ${n===e.value?`border-[var(--color-brand)]/50 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:border-[var(--color-line-0)]`}`,children:e.label},e.value))})]})}),(0,D.jsx)(q,{children:(0,D.jsx)(Y,{children:(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`label`,{className:`block overline mb-1.5`,children:`subject`}),(0,D.jsx)(`input`,{"data-tutorial":`support-subject`,type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:`Short summary (required)`,maxLength:200,required:!0,className:`w-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-sm rounded-sm px-3 py-2 focus:outline-none focus:border-[var(--color-brand)]/50 placeholder:text-[var(--color-fg-4)] font-mono`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`label`,{className:`block overline mb-1.5`,children:`description`}),(0,D.jsx)(`textarea`,{"data-tutorial":`support-desc`,value:o,onChange:e=>s(e.target.value),placeholder:`Describe the issue in detail (10–10000 characters)`,minLength:10,maxLength:1e4,required:!0,rows:6,className:`w-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-sm rounded-sm px-3 py-2 focus:outline-none focus:border-[var(--color-brand)]/50 placeholder:text-[var(--color-fg-4)] font-mono resize-y`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`label`,{className:`block overline mb-1.5`,children:`contact email`}),(0,D.jsx)(`input`,{type:`email`,value:c,onChange:e=>l(e.target.value),placeholder:`your@email.com`,required:!0,className:`w-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-sm rounded-sm px-3 py-2 focus:outline-none focus:border-[var(--color-brand)]/50 placeholder:text-[var(--color-fg-4)] font-mono`})]})]})})}),(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{children:[(0,D.jsxs)(`label`,{className:`block overline mb-2`,children:[`screenshots / attachments`,` `,(0,D.jsxs)(`span`,{className:`normal-case text-[var(--color-fg-4)] font-mono font-normal`,children:[`(optional, up to `,qm,` images)`]})]}),u.length<qm&&(0,D.jsxs)(`div`,{"data-tutorial":`support-attach`,onDragOver:e=>e.preventDefault(),onDrop:w,onClick:()=>C.current?.click(),className:`border border-dashed border-[var(--color-line-1)] rounded-sm p-6 text-center cursor-pointer hover:border-[var(--color-brand)]/50 transition-colors`,children:[(0,D.jsxs)(`p`,{className:`text-xs text-[var(--color-fg-3)] font-mono`,children:[`drag & drop images, or`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-brand)]`,children:`click to browse`})]}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] mt-1 font-mono`,children:`PNG · JPEG · WebP · GIF · HEIC — max 8 MiB each`})]}),(0,D.jsx)(`input`,{ref:C,type:`file`,accept:`image/*`,multiple:!0,className:`hidden`,onChange:T}),x&&(0,D.jsx)(`p`,{className:`text-xs text-red-400 font-mono mt-2`,children:x}),u.length>0&&(0,D.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:u.map((e,t)=>(0,D.jsxs)(`div`,{className:`relative group`,children:[(0,D.jsx)(`img`,{src:e.preview,alt:e.file.name,className:`h-20 w-20 object-cover rounded-sm border border-[var(--color-line-1)]`}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>O(t),className:`absolute -top-1.5 -right-1.5 w-5 h-5 rounded-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:text-red-400 text-[10px] font-mono flex items-center justify-center`,title:`Remove`,children:`✕`}),(0,D.jsx)(`p`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] mt-0.5 max-w-[80px] truncate`,children:e.file.name})]},t))})]})}),(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] overflow-hidden`,children:[(0,D.jsxs)(`button`,{type:`button`,onClick:()=>b(e=>!e),className:`w-full flex items-center justify-between px-3 py-2 text-xs font-mono text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] bg-[var(--color-surface-0)] transition-colors`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`diagnostics that will be attached`}),(0,D.jsx)(`span`,{children:y?`▲`:`▼`})]}),y&&(0,D.jsx)(`div`,{className:`px-3 py-2 bg-[var(--color-surface-0)] border-t border-[var(--color-line-1)] max-h-64 overflow-auto`,children:g?(0,D.jsx)(`pre`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] whitespace-pre-wrap break-all`,children:JSON.stringify(g,null,2)}):(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:`Loading…`})})]}),m&&!m.ok&&(0,D.jsx)(`div`,{className:`rounded-sm border border-red-500/25 bg-red-500/5 px-3 py-2 text-xs text-red-300 font-mono`,children:m.error??`Submission failed. Please try again.`}),(0,D.jsx)(K,{type:`submit`,variant:`primary`,disabled:f,children:f?`submitting…`:`submit feedback`})]})]})}function Xm(e){let t=Date.now()-e,n=Math.floor(t/1e3);if(n<60)return`just now`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:new Date(e).toLocaleDateString(void 0,{month:`short`,day:`numeric`})}var Zm={block:`var(--color-hig-red)`,ask:`var(--color-hig-orange)`,log:`var(--color-hig-blue)`,allow:`var(--color-hig-green)`,force:`var(--color-hig-purple)`};function Qm(e){switch(e){case`block`:return`Blocked`;case`ask`:return`Held for review`;case`log`:return`Logged`;case`force`:return`Force-allowed`;default:return`Allowed`}}function $m({type:e}){let t={fill:`none`,stroke:`currentColor`,strokeWidth:1.6,strokeLinecap:`round`,strokeLinejoin:`round`,viewBox:`0 0 24 24`};return e===`code`?(0,D.jsxs)(`svg`,{...t,width:`22`,height:`22`,children:[(0,D.jsx)(`path`,{d:`M9 7l-5 5 5 5M15 7l5 5-5 5`}),(0,D.jsx)(`path`,{d:`M14 4l-4 16`,opacity:`0.55`})]}):e===`docs`?(0,D.jsxs)(`svg`,{...t,width:`22`,height:`22`,children:[(0,D.jsx)(`path`,{d:`M5 4h9l5 5v11a1 1 0 01-1 1H5a1 1 0 01-1-1V5a1 1 0 011-1z`}),(0,D.jsx)(`path`,{d:`M14 4v5h5`}),(0,D.jsx)(`path`,{d:`M8 13h8M8 17h5`,opacity:`0.7`})]}):(0,D.jsxs)(`svg`,{...t,width:`22`,height:`22`,children:[(0,D.jsx)(`path`,{d:`M3 12a9 9 0 109-9`}),(0,D.jsx)(`path`,{d:`M12 3v9l6 3`})]})}function eh(){let{data:e}=H(`/api/json/counters`,[zt([`counters-updated`])[`counters-updated`]]),t=e?.evals_today??0,n=e?.blocked_today??0,r=e?.asked_today??0;return(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-6 gap-y-2`,children:[(0,D.jsx)(th,{value:t,label:`evaluated`,tone:`default`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(th,{value:n,label:`blocked`,tone:`red`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(th,{value:r,label:`held for you`,tone:`orange`}),(0,D.jsx)(`span`,{className:`text-[11px] ml-auto`,style:{color:`var(--color-fg-3)`},children:`Today`})]})}function th({value:e,label:t,tone:n}){return(0,D.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.5`,children:[(0,D.jsx)(`span`,{className:`font-semibold tabular-nums`,style:{color:n===`red`?`var(--color-hig-red)`:n===`orange`?`var(--color-hig-orange)`:`var(--color-fg-0)`,fontSize:`20px`,lineHeight:1,letterSpacing:`-0.018em`},children:e.toLocaleString()}),(0,D.jsx)(`span`,{style:{color:`var(--color-fg-3)`,fontSize:`12px`,letterSpacing:`-0.005em`},children:t})]})}function nh({href:e,title:t,desc:n,tone:r,type:i,cta:a}){let o=r===`orange`?`var(--color-hig-orange)`:r===`indigo`?`var(--color-hig-indigo)`:`var(--color-hig-blue)`;return(0,D.jsx)(`a`,{href:e,className:`group block rounded-2xl px-4 py-4 transition-all`,style:{border:`0.5px solid var(--color-line-1)`,background:`var(--color-surface-1)`,textDecoration:`none`,color:`inherit`,boxShadow:`var(--hig-shadow-1)`},children:(0,D.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,D.jsx)(`span`,{className:`flex items-center justify-center rounded-xl shrink-0`,style:{width:`40px`,height:`40px`,color:o,background:`color-mix(in oklab, ${o} 14%, transparent)`},children:(0,D.jsx)($m,{type:i})}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsx)(`div`,{className:`text-[14px] font-semibold leading-tight`,style:{color:`var(--color-fg-0)`,letterSpacing:`-0.005em`},children:t}),(0,D.jsx)(`div`,{className:`text-[12px] mt-1 leading-snug`,style:{color:`var(--color-fg-2)`},children:n}),(0,D.jsxs)(`div`,{className:`text-[11.5px] mt-2 font-medium inline-flex items-center gap-1 transition-all`,style:{color:o},children:[a,(0,D.jsx)(`span`,{"aria-hidden":`true`,className:`transition-transform group-hover:translate-x-0.5`,children:`→`})]})]})]})})}function rh(){let{data:e}=H(`/api/state/activity?limit=5`,[zt([`activity-updated`])[`activity-updated`]]),[,t]=(0,_.useState)(0);return(0,_.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),6e4);return()=>clearInterval(e)},[]),!e||e.length===0?(0,D.jsxs)(`div`,{className:`py-6 text-center`,style:{color:`var(--color-fg-3)`},children:[(0,D.jsx)(`p`,{style:{fontSize:`12.5px`,color:`var(--color-fg-2)`},children:`Waiting for your first agent action.`}),(0,D.jsx)(`p`,{style:{fontSize:`11px`,color:`var(--color-fg-3)`,marginTop:`4px`},children:`Anything your AI tries — read, write, run — will appear here in real time.`})]}):(0,D.jsx)(`div`,{children:e.slice(0,5).map((e,t)=>(0,D.jsxs)(`div`,{className:`hig-feed-row`,children:[(0,D.jsx)(`span`,{className:`hig-feed-row-dot`,style:{background:Zm[e.decision]??`var(--color-fg-3)`,boxShadow:`0 0 0 3px ${e.decision===`block`?`color-mix(in oklab, var(--color-hig-red) 22%, transparent)`:e.decision===`ask`?`color-mix(in oklab, var(--color-hig-orange) 22%, transparent)`:`transparent`}`}}),(0,D.jsx)(`span`,{className:`hig-feed-row-decision`,style:{color:Zm[e.decision]??`var(--color-fg-2)`},children:Qm(e.decision)}),(0,D.jsx)(`span`,{style:{color:`var(--color-fg-3)`},children:`·`}),(0,D.jsx)(`span`,{className:`hig-feed-row-tool`,title:e.tool,children:fi(e.tool)}),(0,D.jsx)(`span`,{className:`hig-feed-row-time`,children:Xm(e.timestamp)})]},e.id??t))})}function ih(){return(0,D.jsx)(`div`,{className:`relative`,children:(0,D.jsxs)(`div`,{className:`relative max-w-5xl mx-auto px-2 pt-6 pb-12 space-y-6`,children:[(0,D.jsxs)(`section`,{"data-tutorial":`wh-hero`,className:`rounded-2xl px-6 py-5 relative overflow-hidden`,style:{border:`0.5px solid var(--color-line-1)`,background:`radial-gradient(120% 100% at 0% 0%, color-mix(in oklab, var(--color-accent) 14%, transparent) 0%, transparent 55%), var(--color-surface-1)`,boxShadow:`var(--hig-shadow-1)`},children:[(0,D.jsx)(`div`,{className:`hig-eyebrow mb-2`,children:`SigmaShake · Guardrails for AI`}),(0,D.jsx)(`h1`,{className:`font-semibold tracking-tight leading-tight`,style:{color:`var(--color-fg-0)`,fontSize:`26px`,letterSpacing:`-0.018em`},children:`The seatbelt for AI agents.`}),(0,D.jsx)(`p`,{className:`mt-1.5 leading-relaxed`,style:{color:`var(--color-fg-2)`,fontSize:`13.5px`,maxWidth:`52ch`},children:`Watch every move your AI makes. Approve what matters, block what doesn't — without babysitting every step.`}),(0,D.jsx)(`div`,{className:`mt-4 pt-3`,style:{borderTop:`0.5px solid var(--color-line-0)`},children:(0,D.jsx)(eh,{})})]}),(0,D.jsx)(`section`,{children:(0,D.jsxs)(`div`,{"data-tutorial":`wh-actions`,className:`grid grid-cols-1 md:grid-cols-3 gap-3`,children:[(0,D.jsx)(nh,{href:`/guardrails?starter=coding`,tone:`orange`,type:`code`,title:`Code safely with AI`,desc:`Protect files, secrets, and git history from coding agents.`,cta:`Install pack`}),(0,D.jsx)(nh,{href:`/guardrails?starter=knowledge-work`,tone:`indigo`,type:`docs`,title:`Guard sensitive content`,desc:`Watch outbound email, file shares, and document changes.`,cta:`Install pack`}),(0,D.jsx)(nh,{href:`/audit`,tone:`blue`,type:`review`,title:`Review what your AI did`,desc:`Every action, decision, and reason — in one place.`,cta:`Open activity`})]})}),(0,D.jsxs)(`a`,{href:`/try`,"data-tutorial":`wh-try`,className:`group flex items-center justify-between gap-3 rounded-xl px-4 py-3 transition-all`,style:{border:`0.5px solid var(--color-line-1)`,background:`linear-gradient(90deg, color-mix(in oklab, var(--color-accent) 8%, transparent) 0%, transparent 60%), var(--color-surface-1)`,textDecoration:`none`,color:`inherit`},children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,D.jsx)(`span`,{className:`flex items-center justify-center w-8 h-8 rounded-full shrink-0`,style:{background:`linear-gradient(180deg, var(--color-accent) 0%, var(--color-brand-hover) 100%)`,color:`var(--color-accent-on)`,boxShadow:`inset 0 0.5px 0 rgba(255,255,255,0.30), 0 2px 8px color-mix(in oklab, var(--color-accent) 30%, transparent)`},children:(0,D.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`polygon`,{points:`6 4 20 12 6 20`,fill:`currentColor`,stroke:`none`})})}),(0,D.jsxs)(`div`,{className:`min-w-0`,children:[(0,D.jsx)(`div`,{className:`font-semibold text-[13.5px] leading-tight`,style:{color:`var(--color-fg-0)`,letterSpacing:`-0.005em`},children:`Try a scenario — see SigmaShake decide`}),(0,D.jsx)(`div`,{className:`text-[12px] mt-0.5`,style:{color:`var(--color-fg-3)`},children:`30-second dry-run · nothing actually runs.`})]})]}),(0,D.jsxs)(`span`,{className:`text-[12.5px] font-medium shrink-0 inline-flex items-center gap-1 transition-all`,style:{color:`var(--color-accent)`},children:[`Try it`,(0,D.jsx)(`span`,{"aria-hidden":`true`,className:`transition-transform group-hover:translate-x-0.5`,children:`→`})]})]}),(0,D.jsxs)(`section`,{children:[(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between mb-2`,children:[(0,D.jsx)(`h2`,{className:`font-semibold tracking-tight`,style:{color:`var(--color-fg-0)`,fontSize:`15px`,letterSpacing:`-0.008em`},children:`Recent activity`}),(0,D.jsx)(`a`,{href:`/audit`,style:{fontSize:`12px`,color:`var(--color-hig-blue)`,fontWeight:500},children:`View all →`})]}),(0,D.jsx)(`div`,{style:{background:`var(--color-surface-1)`,border:`0.5px solid var(--color-line-1)`,borderRadius:`14px`,padding:`4px 16px`,boxShadow:`var(--hig-shadow-1)`},children:(0,D.jsx)(rh,{})})]})]})})}var ah={dashboard:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`rect`,{x:`3`,y:`3`,width:`7`,height:`9`,rx:`1.5`}),(0,D.jsx)(`rect`,{x:`14`,y:`3`,width:`7`,height:`5`,rx:`1.5`}),(0,D.jsx)(`rect`,{x:`14`,y:`12`,width:`7`,height:`9`,rx:`1.5`}),(0,D.jsx)(`rect`,{x:`3`,y:`16`,width:`7`,height:`5`,rx:`1.5`})]}),graph:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`6`,cy:`18`,r:`2.4`}),(0,D.jsx)(`circle`,{cx:`18`,cy:`6`,r:`2.4`}),(0,D.jsx)(`circle`,{cx:`18`,cy:`18`,r:`2.4`}),(0,D.jsx)(`circle`,{cx:`12`,cy:`11`,r:`2.4`}),(0,D.jsx)(`path`,{d:`M7.5 16.5l3-4M13.5 11.5l3-3.5M13.5 12l3 4.5`})]}),rules:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M9 5h11M9 12h11M9 19h11`}),(0,D.jsx)(`path`,{d:`M4 5l1 1 2-2M4 12l1 1 2-2M4 19l1 1 2-2`})]}),hub:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,D.jsx)(`path`,{d:`M3 12h18`}),(0,D.jsx)(`path`,{d:`M12 3a14 14 0 010 18M12 3a14 14 0 000 18`})]}),audit:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),(0,D.jsx)(`path`,{d:`M21 21l-5-5`})]}),approvals:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M5 7h14v12a2 2 0 01-2 2H7a2 2 0 01-2-2z`}),(0,D.jsx)(`path`,{d:`M9 3v4M15 3v4`}),(0,D.jsx)(`path`,{d:`M9 13l2 2 4-4`})]}),profile:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`8`,r:`4`}),(0,D.jsx)(`path`,{d:`M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8`})]}),monitor:(0,D.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M3 12h3l3-7 4 14 3-7h5`})}),observability:(0,D.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M4 20h16M7 16V8M11 16V4M15 16v-6M19 16v-3`})}),debug:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`rect`,{x:`7`,y:`7`,width:`10`,height:`12`,rx:`5`}),(0,D.jsx)(`path`,{d:`M12 7V4M9 4l3 3 3-3`}),(0,D.jsx)(`path`,{d:`M5 11l2-1M5 18l2-1M19 11l-2-1M19 18l-2-1`})]}),home:(0,D.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M3 11l9-7 9 7v9a2 2 0 01-2 2h-3v-7H10v7H5a2 2 0 01-2-2z`})}),guardrails:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M12 3l8 3.7v6.3c0 5-3.5 9.6-8 11-4.5-1.4-8-6-8-11V6.7L12 3z`}),(0,D.jsx)(`path`,{d:`M9 12l2 2 4-4`})]}),tryit:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M9 3v6L4.5 18a2 2 0 001.7 3h11.6a2 2 0 001.7-3L15 9V3`}),(0,D.jsx)(`path`,{d:`M8 3h8`})]}),agents:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`8`,cy:`9`,r:`3`}),(0,D.jsx)(`circle`,{cx:`16`,cy:`9`,r:`3`}),(0,D.jsx)(`path`,{d:`M3 19c.7-2.5 2.6-4 5-4`}),(0,D.jsx)(`path`,{d:`M21 19c-.7-2.5-2.6-4-5-4`}),(0,D.jsx)(`path`,{d:`M9 17.5c.8-1 1.8-1.5 3-1.5s2.2.5 3 1.5`})]}),notifications:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M18 16v-5a6 6 0 1 0-12 0v5l-2 2h16z`}),(0,D.jsx)(`path`,{d:`M10 20a2 2 0 0 0 4 0`})]}),setup:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M9 12l2 2 4-4`}),(0,D.jsx)(`path`,{d:`M12 3l8 3.7v6.3c0 5-3.5 9.6-8 11-4.5-1.4-8-6-8-11V6.7L12 3z`})]}),support:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3.5`}),(0,D.jsx)(`path`,{d:`M12 2.5v6M12 15.5v6M2.5 12h6M15.5 12h6`})]}),workspace:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`rect`,{x:`3`,y:`4`,width:`18`,height:`14`,rx:`2`}),(0,D.jsx)(`path`,{d:`M3 9h18M8 14h2M14 14h2`}),(0,D.jsx)(`path`,{d:`M9 20h6`})]}),plugins:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M9 3v4a2 2 0 0 1-2 2H3`}),(0,D.jsx)(`path`,{d:`M15 3v4a2 2 0 0 0 2 2h4`}),(0,D.jsx)(`rect`,{x:`3`,y:`9`,width:`18`,height:`12`,rx:`2`}),(0,D.jsx)(`path`,{d:`M7 14h2M12 14h5M7 18h10`})]})},oh=[{title:`Overview`,items:[{path:`/`,label:`Dashboard`,icon:`dashboard`},{path:`/notifications`,label:`Notifications`,icon:`notifications`},{path:`/agents`,label:`Agents`,icon:`agents`},{path:`/graph`,label:`Graph`,icon:`graph`},{path:`/sessions`,label:`Sessions`,icon:`agents`}]},{title:`Rules`,items:[{path:`/rules`,label:`Rules`,icon:`rules`},{path:`/hub`,label:`Hub`,icon:`hub`},{path:`/approvals`,label:`Approvals`,icon:`approvals`}]},{title:`Activity`,items:[{path:`/audit`,label:`Audit`,icon:`audit`},{path:`/monitor`,label:`Monitor`,icon:`monitor`},{path:`/observability`,label:`Observability`,icon:`observability`}]},{title:`Tools`,items:[{path:`/plugins`,label:`Plugins`,icon:`plugins`},{path:`/setup`,label:`Setup`,icon:`setup`},{path:`/debug`,label:`Debug`,icon:`debug`},{path:`/profile`,label:`Profile`,icon:`profile`},{path:`/support`,label:`Support`,icon:`support`}]}],sh=[{title:`Get Started`,items:[{path:`/`,label:`Home`,icon:`home`},{path:`/agents`,label:`Agents`,icon:`agents`},{path:`/guardrails`,label:`Guardrails`,icon:`guardrails`},{path:`/try`,label:`Try It`,icon:`tryit`}]},{title:`Activity`,items:[{path:`/notifications`,label:`Notifications`,icon:`notifications`},{path:`/audit`,label:`Activity`,icon:`audit`},{path:`/approvals`,label:`Approvals`,icon:`approvals`}]},{title:`You`,items:[{path:`/setup`,label:`Setup`,icon:`setup`},{path:`/profile`,label:`Profile`,icon:`profile`},{path:`/support`,label:`Support`,icon:`support`}]}];function ch(e){return lh(e===`newcomer`?sh:oh)}function lh(e){let t=window.__SSG_PLUGINS__;if(!t||t.nav.length===0)return e;let n=e=>{let t=e.toLowerCase();return t===`tools`?`Tools`:t===`activity`?`Activity`:t===`overview`?`Overview`:t===`rules`?`Rules`:e.charAt(0).toUpperCase()+e.slice(1)},r=e.map(e=>({...e,items:[...e.items]})),i=new Map;for(let e of t.nav){let t={path:e.path,label:e.label,icon:`plugins`},a=n(e.section),o=r.find(e=>e.title===a);if(o)o.items.push(t);else{let e=i.get(a)??[];e.push(t),i.set(a,e)}}for(let[e,t]of i)r.push({title:e,items:t});return r}function uh(e){let t=Math.max(0,e-Date.now()),n=Math.floor(t/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60);return r<60?`${r}m ${n%60}s`:`${Math.floor(r/60)}h ${r%60}m`}function dh(){let{data:e}=H(`/api/json/daemon-status`,[zt([`counters-updated`])[`counters-updated`]]),[t,n]=(0,_.useState)(!1),[,r]=(0,_.useState)(0);(0,_.useEffect)(()=>{if(e?.status!==`degraded`||!e.hibernation)return;let t=setInterval(()=>r(e=>e+1),1e3);return()=>clearInterval(t)},[e?.status,e?.hibernation]);let i=e?.status??`starting`,a=i===`running`?`bg-[var(--color-decision-allow)]`:i===`starting`||i===`degraded`?`bg-[var(--color-decision-ask)]`:`bg-[var(--color-decision-block)]`,o=i===`starting`||i===`degraded`?`pulse-soft`:``,s=i===`degraded`&&e?.hibernation?uh(e.hibernation.nextRetryAt):null,c=i===`running`?`Daemon`:i===`starting`?`Booting`:i===`degraded`?`Retry ${s??`…`}`:i===`error`?`Error`:`Offline`;return(0,D.jsxs)(`div`,{className:`relative`,children:[(0,D.jsxs)(`button`,{onClick:()=>n(e=>!e),className:`chip cursor-pointer hover:bg-[var(--color-fill-2)] transition-colors`,title:i===`running`?`Daemon running`:i===`starting`?`Daemon starting…`:i===`degraded`?`Daemon hibernating — retry in ${s??`…`}`:i===`error`?`Daemon error`:`Daemon stopped`,children:[(0,D.jsx)(`span`,{className:`status-dot ${a} ${o}`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:c})]}),t&&(0,D.jsxs)(`div`,{className:`absolute right-0 top-7 z-50 w-72 hig-card hig-card-padded text-xs`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`Eval Daemon`}),(0,D.jsx)(`button`,{onClick:()=>n(!1),className:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-0)] cursor-pointer`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`space-y-1 text-[var(--color-fg-2)]`,children:[(0,D.jsxs)(`div`,{className:`font-mono text-[11px]`,children:[`status:`,` `,(0,D.jsx)(`span`,{className:i===`running`?`text-[var(--color-decision-allow)]`:i===`starting`||i===`degraded`?`text-[var(--color-decision-ask)]`:`text-[var(--color-decision-block)]`,children:i})]}),e?.pid&&(0,D.jsxs)(`div`,{className:`font-mono text-[11px]`,children:[`pid: `,e.pid]}),i===`degraded`&&e?.hibernation&&(0,D.jsxs)(`div`,{className:`mt-2 rounded-lg p-2 text-[11px] space-y-0.5`,style:{background:`color-mix(in oklab, var(--color-hig-orange) 14%, transparent)`,color:`color-mix(in oklab, var(--color-hig-orange) 90%, var(--color-fg-0))`},children:[(0,D.jsxs)(`div`,{children:[`next retry: `,(0,D.jsx)(`span`,{className:`font-medium`,children:s})]}),(0,D.jsxs)(`div`,{children:[`episode attempt: `,e.hibernation.attempt,e.hibernation.reason?` (${e.hibernation.reason})`:``]}),(0,D.jsx)(`div`,{className:`opacity-70`,children:`Slow-tier supervisor is retrying at long backoff — no manual restart required.`})]})]}),e?.logTail&&e.logTail.length>0&&(0,D.jsxs)(`div`,{className:`mt-3`,children:[(0,D.jsx)(`div`,{className:`overline mb-1`,children:`Recent log`}),(0,D.jsx)(`pre`,{className:`bg-[var(--color-surface-2)] border border-[var(--color-line-0)] rounded-md p-2 text-[10px] text-[var(--color-fg-2)] overflow-x-auto whitespace-pre-wrap break-all max-h-32 overflow-y-auto`,children:e.logTail.join(`
|
|
58
|
-
`)})]})]})]})}function fh(){let{data:e}=H(`/api/state/activity-degraded`);if(!e?.degraded)return null;let t=e.since?new Date(e.since).toLocaleTimeString():`recently`;return(0,D.jsxs)(`div`,{role:`status`,className:`hig-banner hig-banner-warning`,title:e.reason??`audit-worker degraded`,children:[(0,D.jsx)(`span`,{children:`⚠`}),(0,D.jsxs)(`span`,{children:[`Audit pipeline degraded since `,t,` — entries may be missing. Run`,` `,(0,D.jsx)(`code`,{className:`font-mono`,children:`ssg daemon --status`}),` to inspect.`]})]})}function ph(){let{data:e}=H(`/api/json/license`,[zt([`counters-updated`])[`counters-updated`]]);return!e||e.tier!==`unlicensed`||e.status===`needs_reauth`||e.status===`needs_login`||e.eval_daily_limit===null||e.evals_today<e.eval_daily_limit?null:(0,D.jsxs)(`div`,{role:`alert`,className:`hig-banner hig-banner-error`,title:`Free tier daily eval limit reached — rules are being bypassed until quota resets`,children:[(0,D.jsx)(`span`,{children:`●`}),(0,D.jsxs)(`span`,{children:[`Quota exhausted — `,e.evals_today.toLocaleString(),`/`,e.eval_daily_limit.toLocaleString(),` evals used today. BLOCK and ASK rules are being bypassed (fail-open) until daily reset.`,` `,(0,D.jsx)(`a`,{href:e.upgrade_url,target:`_blank`,rel:`noopener noreferrer`,className:`underline font-medium`,children:`Upgrade to Pro →`})]})]})}function mh(){let{data:e}=H(`/api/json/license`,[zt([`counters-updated`])[`counters-updated`]]);if(!e||e.status!==`needs_reauth`)return null;let t=e.detail??`License JWT invalid or expired`;return(0,D.jsxs)(`div`,{role:`alert`,className:`hig-banner hig-banner-warning`,title:`Re-authentication required — paid-tier features are paused until you re-login`,children:[(0,D.jsx)(`span`,{children:`⚠`}),(0,D.jsxs)(`span`,{children:[`Re-authentication required — `,t,`. Run`,` `,(0,D.jsx)(`code`,{className:`font-mono`,children:`ssg auth login`}),` in your terminal to restore your tier.`]})]})}function hh(){let{data:e,refetch:t}=H(`/api/json/ask-mode`),[n,r]=(0,_.useState)(!1),i=e?.mode??`tty`;async function a(e){if(!(n||e===i)){r(!0);try{await fetch(`/api/json/ask-mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({mode:e})}),t()}finally{r(!1)}}}let o=i===`tty`;return(0,D.jsxs)(`button`,{onClick:()=>a(o?`dashboard`:`tty`),disabled:n,className:`chip cursor-pointer hover:bg-[var(--color-fill-2)] transition-colors disabled:opacity-50`,title:o?`ASK decisions prompt in the native IDE/TTY. Click to route to dashboard.`:`ASK decisions queue on /approvals. Click to route to native prompt.`,children:[(0,D.jsx)(`span`,{className:`status-dot ${o?`bg-[var(--color-hig-blue)]`:`bg-[var(--color-hig-purple)]`}`}),(0,D.jsxs)(`span`,{className:`hidden sm:inline`,children:[`Ask · `,o?`Native`:`Dashboard`]})]})}function gh(e){let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`}var _h={on:`soft`,soft:`audit`,audit:`off`,off:`on`};function vh(){let{data:e,refetch:t}=H(`/api/json/mode`,[zt([`mode-changed`])[`mode-changed`]]),[n,r]=(0,_.useState)(!1),i=e?.mode??`on`;async function a(e,i){if(!n){r(!0);try{let n={mode:e};typeof i==`number`&&i>0&&(n.forMs=i),await fetch(`/api/json/mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify(n)}),t()}finally{r(!1)}}}let o=i===`on`?`bg-[var(--color-hig-green)]`:i===`soft`?`bg-[var(--color-hig-yellow)]`:i===`audit`?`bg-[var(--color-hig-orange)]`:`bg-[var(--color-hig-red)]`,s=e?.rearmAt!==void 0&&i!==`on`?` · until ${gh(e.rearmAt)}`:``,c=`SSG · ${i.toUpperCase()}${s}`;return(0,D.jsxs)(`button`,{"data-tutorial":`app-mode`,onClick:e=>{e.shiftKey?a(i===`off`?`audit`:`on`):a(_h[i])},disabled:n,className:`chip cursor-pointer hover:bg-[var(--color-fill-2)] transition-colors disabled:opacity-50`,title:i===`on`?`SSG ON — rules enforce normally. Click to cycle: On → Soft → Audit → Off.`:i===`soft`?`SSG SOFT — blocks downgraded to prompts, prompts downgraded to logs. Click for Audit; Shift+Click to resume On.`:i===`audit`?`SSG AUDIT — rules log only, nothing blocked or prompted. Click for Off; Shift+Click to resume On.`:`SSG OFF — kill switch engaged, evaluator returns allow. Click to resume On; Shift+Click for Audit.`,children:[(0,D.jsx)(`span`,{className:`status-dot ${o}`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:c})]})}function yh(){let{data:e,refetch:t}=H(`/api/json/mode`,[zt([`mode-changed`])[`mode-changed`]]),n=e?.mode??`on`;if(n===`on`)return null;let r=e?.rearmAt===void 0?``:` Auto-restores at ${gh(e.rearmAt)}.`,i=n===`off`?`SSG is OFF — kill switch engaged.`:n===`soft`?`SSG is in SOFT mode — non-blocking enforcement.`:`SSG is in AUDIT mode — log-only.`,a=n===`off`?`Every tool call is being allowed without evaluation.${r}`:n===`soft`?`Block decisions are being downgraded to prompts and prompts to logs. Workflow keeps moving; signal still surfaces in the audit log.${r}`:`Rules still match for the audit log, but nothing is being blocked or prompted.${r}`,o=n===`off`?`hig-banner hig-banner-error`:`hig-banner hig-banner-warning`;async function s(){await fetch(`/api/json/mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({mode:`on`})}),t()}return(0,D.jsxs)(`div`,{className:o,children:[(0,D.jsxs)(`svg`,{className:`shrink-0`,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`}),(0,D.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,D.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),(0,D.jsxs)(`span`,{className:`flex-1`,children:[(0,D.jsx)(`span`,{className:`font-semibold`,children:i}),` `,a]}),(0,D.jsx)(`button`,{onClick:s,className:`hig-button hig-button-small`,title:`Re-enable normal rule enforcement`,children:`Resume`})]})}function bh({onRefresh:e}){return(0,D.jsx)(`button`,{onClick:e,className:`hig-button`,title:`Reset page — clears stale graph state without dropping SSE`,"aria-label":`Refresh page`,children:(0,D.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M21 12a9 9 0 1 1-3-6.7`}),(0,D.jsx)(`polyline`,{points:`21 3 21 9 15 9`})]})})}function xh(){return(0,D.jsx)(`button`,{onClick:()=>{try{window.location.reload()}catch{}},className:`hig-button`,title:`Reload dashboard — fetches fresh assets (use after a desktop upgrade)`,"aria-label":`Reload dashboard`,children:(0,D.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M3 12a9 9 0 1 1 3 6.7`}),(0,D.jsx)(`polyline`,{points:`3 21 3 15 9 15`}),(0,D.jsx)(`path`,{d:`M3 3v6h6`})]})})}function Sh(){let{data:e}=H(`/api/json/mcp-status`,[zt([`activity-updated`])[`activity-updated`]]),t=e?.status??`inactive`;if(t===`inactive`)return null;let n=t===`active`?`bg-[var(--color-hig-blue)]`:`bg-[var(--color-fg-3)]`,r=t===`active`?`MCP active`:`MCP idle`;return(0,D.jsxs)(`div`,{className:`chip`,title:t===`active`?`MCP server: ${e?.recentCount??0} evals in last 5 min`:`MCP server: ${e?.totalCount??0} total evals`,children:[(0,D.jsx)(`span`,{className:`status-dot ${n}`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:r})]})}function Ch(){let{data:e}=H(`/api/json/adapters`);if(!e)return null;let t=e.adapters.find(e=>e.active);if(!t)return null;let n=t.id===`generic`;return(0,D.jsxs)(`a`,{href:`/agents`,className:`chip ss-agent-chip cursor-pointer transition-all`,title:n?`No specific AI client detected — SSG is running in generic adapter mode. Click to wire one up.`:`Connected agent: ${t.displayName} (${t.vendor}). Click to manage.`,style:{"--agent-accent":t.accent},"data-generic":n?`true`:`false`,children:[(0,D.jsx)(`span`,{className:`status-dot`,style:{background:t.accent,boxShadow:`0 0 6px color-mix(in oklab, ${t.accent} 60%, transparent)`}}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:t.displayName})]})}function wh(e,t){if(e===`/`)return t===`newcomer`?(0,D.jsx)(ih,{}):(0,D.jsx)(Qc,{});if(e===`/classic`)return(0,D.jsx)(zl,{});if(e===`/graph`)return(0,D.jsx)(ld,{});if(e===`/sessions`)return(0,D.jsx)(ym,{});if(e.startsWith(`/sessions/`)){let t=decodeURIComponent(e.slice(10));if(t)return(0,D.jsx)(fm,{sessionKey:t})}if(e===`/debug`)return(0,D.jsx)(Hl,{});if(e===`/rules`)return(0,D.jsx)(rm,{});if(e===`/audit`)return(0,D.jsx)(Fi,{});if(e===`/approvals`)return(0,D.jsx)(ii,{});if(e===`/profile`)return(0,D.jsx)(up,{});if(e===`/agents`)return(0,D.jsx)(dn,{});if(e===`/notifications`)return(0,D.jsx)(Ud,{});if(e===`/setup`)return(0,D.jsx)(Am,{});if(e===`/try`)return(0,D.jsx)(Wm,{});if(e===`/guardrails`)return(0,D.jsx)(gd,{});if(e===`/hub/connect`)return(0,D.jsx)(ud,{});if(e===`/hub/publish`)return(0,D.jsx)(Od,{});if(e.startsWith(`/hub/`)){let t=e.slice(5);if(t)return(0,D.jsx)(fd,{id:t})}return e===`/hub`?(0,D.jsx)(Ed,{}):e===`/monitor`?(0,D.jsx)(Vd,{}):e===`/observability`?(0,D.jsx)(_f,{}):e===`/plugins`?(0,D.jsx)(Xf,{}):e===`/publish-plugin`?(0,D.jsx)(Sf,{}):e===`/support`?(0,D.jsx)(Ym,{}):(0,D.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-24 text-[var(--color-fg-3)]`,children:[(0,D.jsx)(`p`,{className:`overline mb-2`,children:`Error · 404`}),(0,D.jsx)(`p`,{className:`text-sm`,children:`Page not found`}),(0,D.jsx)(`a`,{href:`/`,className:`mt-4 text-[12px] text-[var(--color-hig-blue)] hover:underline`,children:`← Back to dashboard`})]})}function Th(e,t){return e===`/`?t===`newcomer`?`Home`:`Dashboard`:e===`/classic`?`Classic Dashboard`:e===`/graph`?`Graph`:e===`/sessions`?`Sessions`:e.startsWith(`/sessions/`)?`Session Inspector`:e===`/debug`?`Debug`:e===`/rules`?`Rules`:e===`/audit`?t===`newcomer`?`Activity`:`Audit`:e===`/approvals`?`Approvals`:e===`/profile`?`Profile`:e===`/agents`?`Agents`:e===`/notifications`?`Notifications`:e===`/setup`?`Setup Status`:e===`/try`?`Try It`:e===`/guardrails`?`Guardrails`:e===`/hub/connect`?`Connect Hub`:e===`/hub/publish`?`Publish to Hub`:e.startsWith(`/hub/`)||e===`/hub`?`Hub`:e===`/monitor`?`Monitor`:e===`/observability`?`Observability`:e===`/plugins`?`Plugins`:e===`/publish-plugin`?`Publish a Plugin`:e===`/support`?`Support & Feedback`:`SigmaShake`}function Eh(e){history.pushState(null,``,e),window.dispatchEvent(new PopStateEvent(`popstate`))}function Dh({count:e}){let[t,n]=(0,_.useState)(!1);return t||e===0?null:(0,D.jsxs)(`div`,{className:`hig-banner hig-banner-warning`,children:[(0,D.jsxs)(`svg`,{className:`shrink-0`,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`}),(0,D.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,D.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),(0,D.jsxs)(`span`,{className:`flex-1`,children:[(0,D.jsxs)(`span`,{className:`font-semibold`,children:[e,` other `,e===1?`tab`:`tabs`,` open.`]}),` `,`Each tab holds a live SSE connection. Browsers limit connections per origin — too many tabs will prevent this page from loading.`,` `,(0,D.jsx)(`span`,{className:`opacity-70`,children:`Close other tabs to restore full live-update functionality.`})]}),(0,D.jsx)(`button`,{onClick:()=>n(!0),className:`opacity-60 hover:opacity-100 transition-opacity shrink-0 cursor-pointer`,title:`Dismiss`,children:(0,D.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),(0,D.jsx)(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})]})})]})}function Oh({pathname:e,navSections:t,open:n,onClose:r}){let i=t=>t===`/`?e===`/`:e.startsWith(t);return(0,D.jsxs)(`aside`,{className:`hig-sidebar ${n?`open`:``}`,"aria-label":`Primary`,"data-tutorial":`app-sidebar`,children:[(0,D.jsxs)(`div`,{className:`hig-sidebar-header`,children:[(0,D.jsx)(`span`,{className:`hig-app-icon`,"aria-hidden":`true`,children:`SS`}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`hig-app-name`,children:`SigmaShake`}),(0,D.jsx)(`div`,{className:`hig-app-meta`,children:`Governance`})]})]}),(0,D.jsx)(`nav`,{className:`hig-sidebar-nav`,children:t.map(e=>(0,D.jsxs)(`div`,{className:`hig-sidebar-section`,children:[(0,D.jsx)(`div`,{className:`hig-sidebar-section-title`,children:e.title}),e.items.map(e=>(0,D.jsxs)(`a`,{href:e.path,onClick:r,className:`hig-sidebar-item`,"data-active":i(e.path)?`true`:`false`,children:[(0,D.jsx)(`span`,{className:`hig-sidebar-icon`,"aria-hidden":`true`,children:ah[e.icon]}),(0,D.jsx)(`span`,{children:e.label})]},e.path))]},e.title))})]})}function kh(){let[e,t]=(0,_.useState)(window.location.pathname),[n,r]=(0,_.useState)(0),[i,a]=(0,_.useState)(!1),{otherTabCount:o}=Wt(),{mode:s}=V(),c=ch(s),l=Th(e,s);return(0,_.useEffect)(()=>{let e=()=>t(window.location.pathname);return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(0,_.useEffect)(()=>{a(!1)},[]),(0,_.useEffect)(()=>{let e=e=>{let t=e.target.closest(`a`);if(!t)return;let n=t.getAttribute(`href`);!n||n.startsWith(`http`)||n.startsWith(`//`)||n===`/workspace`||n.startsWith(`/workspace/`)||n.startsWith(`/plugins/`)||(e.preventDefault(),Eh(n))};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[]),(0,D.jsxs)(`div`,{className:`hig-app`,children:[(0,D.jsx)(Oh,{pathname:e,navSections:c,open:i,onClose:()=>a(!1)}),(0,D.jsxs)(`div`,{className:`hig-window`,children:[(0,D.jsxs)(`header`,{className:`hig-toolbar`,children:[(0,D.jsx)(`button`,{"aria-label":`Toggle sidebar`,className:`md:hidden hig-button hig-button-small`,onClick:()=>a(e=>!e),children:(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 18 18`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,children:[(0,D.jsx)(`line`,{x1:`2`,y1:`5`,x2:`16`,y2:`5`}),(0,D.jsx)(`line`,{x1:`2`,y1:`9`,x2:`16`,y2:`9`}),(0,D.jsx)(`line`,{x1:`2`,y1:`13`,x2:`16`,y2:`13`})]})}),(0,D.jsx)(`h1`,{className:`hig-toolbar-title`,children:l}),(0,D.jsx)(he,{pathname:e,mode:s}),(0,D.jsx)(`div`,{className:`hig-toolbar-spacer`}),(0,D.jsxs)(`div`,{className:`hig-toolbar-controls hidden md:flex`,children:[o>0&&(0,D.jsxs)(`span`,{className:`chip`,style:{color:`var(--color-hig-orange)`,background:`color-mix(in oklab, var(--color-hig-orange) 14%, transparent)`},title:`${o} other tab${o===1?``:`s`} open — may cause connection issues`,children:[o+1,` tabs`]}),(0,D.jsx)(Lt,{}),(0,D.jsx)(vh,{}),(0,D.jsx)(hh,{}),(0,D.jsx)(Ch,{}),(0,D.jsx)(Sh,{}),(0,D.jsx)(dh,{}),(0,D.jsx)(bh,{onRefresh:()=>r(e=>e+1)}),(0,D.jsx)(xh,{}),(0,D.jsx)(Se,{}),(0,D.jsx)(re,{}),(0,D.jsx)(O,{}),(0,D.jsx)(Ue,{})]})]}),(0,D.jsx)(yh,{}),(0,D.jsx)(Dh,{count:o}),(0,D.jsx)(mh,{}),(0,D.jsx)(ph,{}),(0,D.jsx)(fh,{}),(0,D.jsx)(`main`,{className:`hig-content px-6 py-6`,children:wh(e,s)},n)]})]})}var Ah=document.getElementById(`app-root`);if(!Ah)throw Error(`Missing #app-root`);g.createRoot(Ah).render((0,D.jsx)(_.StrictMode,{children:(0,D.jsx)(kh,{})}));
|
|
57
|
+
disabled:opacity-40 disabled:cursor-not-allowed`,children:`Run`})]})]})]})]})}var Km=[{value:`issue`,label:`Bug / Issue`,hint:`Something is broken`},{value:`feature_request`,label:`Feature Request`,hint:`Suggest an improvement`},{value:`question`,label:`Question`,hint:`How does X work?`},{value:`incident`,label:`Incident`,hint:`Urgent outage or data concern`}],qm=[{value:`p4`,label:`P4 — Low`},{value:`p3`,label:`P3 — Normal`},{value:`p2`,label:`P2 — High (4h SLA)`},{value:`p1`,label:`P1 — Critical (1h SLA)`}],Jm=5,Ym=8*1024*1024;function Xm(){let[e,t]=(0,_.useState)(`issue`),[n,r]=(0,_.useState)(`p3`),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)([]),[f,p]=(0,_.useState)(!1),[m,h]=(0,_.useState)(null),[g,v]=(0,_.useState)(null),[y,b]=(0,_.useState)(!1),[x,S]=(0,_.useState)(``),C=(0,_.useRef)(null);(0,_.useEffect)(()=>{fetch(`/api/json/profile`,{headers:U()}).then(e=>e.ok?e.json():null).then(e=>{e?.email&&l(e.email)}).catch(()=>{})},[]),(0,_.useEffect)(()=>{!y||g||fetch(`/api/support/diagnostics?route=${encodeURIComponent(window.location.pathname)}`).then(e=>e.ok?e.json():null).then(e=>v(e)).catch(()=>{})},[y,g]),(0,_.useEffect)(()=>{let e=new URL(window.location.href),n=e.searchParams.get(`error`),r=e.searchParams.get(`from`);if(n||r){t(`issue`);let e=r?`Page: ${r}\n\n`:``,i=n?`Error: ${n}\n\n`:``;s(t=>t||`${e}${i}`)}},[]);function w(e){e.preventDefault(),E(Array.from(e.dataTransfer.files))}function T(e){E(Array.from(e.target.files??[])),C.current&&(C.current.value=``)}function E(e){S(``);let t=e.filter(e=>e.type.startsWith(`image/`));t.length<e.length&&S(`Only image files are accepted.`);let n=Jm-u.length,r=t.slice(0,n);r.length<t.length&&S(`Maximum ${Jm} images. Some were dropped.`);let i=r.filter(e=>e.size>Ym);if(i.length>0){S(`"${i[0].name}" exceeds 8 MiB.`);return}let a=r.map(e=>({file:e,preview:URL.createObjectURL(e)}));d(e=>[...e,...a])}function O(e){d(t=>(URL.revokeObjectURL(t[e].preview),t.filter((t,n)=>n!==e)))}async function k(t){t.preventDefault(),p(!0),h(null);let r=new FormData;r.append(`category`,e),r.append(`severity`,n),r.append(`subject`,i.trim()),r.append(`description`,o.trim()),r.append(`contact_email`,c.trim()),r.append(`route`,window.location.pathname);for(let{file:e}of u)r.append(`images`,e,e.name);try{let e=await(await fetch(`/api/support/feedback`,{method:`POST`,headers:U(),body:r})).json();h(e),e.ok&&(a(``),s(``),d([]))}catch(e){h({ok:!1,error:e instanceof Error?e.message:`Network error`})}finally{p(!1)}}return(0,D.jsxs)(`div`,{className:`max-w-2xl mx-auto space-y-5`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h1`,{className:`text-xl font-medium tracking-tight text-[var(--color-fg-0)]`,children:`Support & Feedback`}),(0,D.jsx)(`p`,{className:`text-[12px] text-[var(--color-fg-3)] mt-1 font-mono`,children:`report a bug, request a feature, or ask a question`})]}),m?.ok?(0,D.jsx)(q,{children:(0,D.jsx)(Y,{children:(0,D.jsxs)(`div`,{className:`space-y-3 py-2`,children:[(0,D.jsxs)(`p`,{className:`text-sm text-emerald-400 font-mono`,children:[`✓ `,m.message??`Ticket created.`]}),m.ticket_id&&(0,D.jsxs)(`p`,{className:`text-xs text-[var(--color-fg-3)] font-mono`,children:[`Ticket ID:`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-fg-1)]`,children:m.ticket_id})]}),(0,D.jsx)(`button`,{className:`text-[12px] text-[var(--color-brand)] hover:underline font-mono`,onClick:()=>h(null),children:`Submit another`})]})})}):(0,D.jsxs)(`form`,{onSubmit:k,className:`space-y-4`,children:[(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{children:[(0,D.jsx)(`label`,{className:`block overline mb-2`,children:`type`}),(0,D.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:Km.map(n=>(0,D.jsxs)(`button`,{type:`button`,onClick:()=>t(n.value),className:`text-left px-3 py-2 rounded-sm border text-xs font-mono transition-colors ${e===n.value?`border-[var(--color-brand)]/50 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:border-[var(--color-line-0)]`}`,children:[(0,D.jsx)(`span`,{className:`block font-medium text-[var(--color-fg-1)]`,children:n.label}),(0,D.jsx)(`span`,{className:`block text-[11px] mt-0.5`,children:n.hint})]},n.value))})]})}),e===`incident`&&(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{children:[(0,D.jsx)(`label`,{className:`block overline mb-2`,children:`severity`}),(0,D.jsx)(`div`,{className:`flex gap-2 flex-wrap`,children:qm.map(e=>(0,D.jsx)(`button`,{type:`button`,onClick:()=>r(e.value),className:`px-3 py-1.5 rounded-sm border text-xs font-mono transition-colors ${n===e.value?`border-[var(--color-brand)]/50 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)]`:`border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:border-[var(--color-line-0)]`}`,children:e.label},e.value))})]})}),(0,D.jsx)(q,{children:(0,D.jsx)(Y,{children:(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`label`,{className:`block overline mb-1.5`,children:`subject`}),(0,D.jsx)(`input`,{"data-tutorial":`support-subject`,type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:`Short summary (required)`,maxLength:200,required:!0,className:`w-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-sm rounded-sm px-3 py-2 focus:outline-none focus:border-[var(--color-brand)]/50 placeholder:text-[var(--color-fg-4)] font-mono`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`label`,{className:`block overline mb-1.5`,children:`description`}),(0,D.jsx)(`textarea`,{"data-tutorial":`support-desc`,value:o,onChange:e=>s(e.target.value),placeholder:`Describe the issue in detail (10–10000 characters)`,minLength:10,maxLength:1e4,required:!0,rows:6,className:`w-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-sm rounded-sm px-3 py-2 focus:outline-none focus:border-[var(--color-brand)]/50 placeholder:text-[var(--color-fg-4)] font-mono resize-y`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`label`,{className:`block overline mb-1.5`,children:`contact email`}),(0,D.jsx)(`input`,{type:`email`,value:c,onChange:e=>l(e.target.value),placeholder:`your@email.com`,required:!0,className:`w-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-1)] text-sm rounded-sm px-3 py-2 focus:outline-none focus:border-[var(--color-brand)]/50 placeholder:text-[var(--color-fg-4)] font-mono`})]})]})})}),(0,D.jsx)(q,{children:(0,D.jsxs)(Y,{children:[(0,D.jsxs)(`label`,{className:`block overline mb-2`,children:[`screenshots / attachments`,` `,(0,D.jsxs)(`span`,{className:`normal-case text-[var(--color-fg-4)] font-mono font-normal`,children:[`(optional, up to `,Jm,` images)`]})]}),u.length<Jm&&(0,D.jsxs)(`div`,{"data-tutorial":`support-attach`,onDragOver:e=>e.preventDefault(),onDrop:w,onClick:()=>C.current?.click(),className:`border border-dashed border-[var(--color-line-1)] rounded-sm p-6 text-center cursor-pointer hover:border-[var(--color-brand)]/50 transition-colors`,children:[(0,D.jsxs)(`p`,{className:`text-xs text-[var(--color-fg-3)] font-mono`,children:[`drag & drop images, or`,` `,(0,D.jsx)(`span`,{className:`text-[var(--color-brand)]`,children:`click to browse`})]}),(0,D.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] mt-1 font-mono`,children:`PNG · JPEG · WebP · GIF · HEIC — max 8 MiB each`})]}),(0,D.jsx)(`input`,{ref:C,type:`file`,accept:`image/*`,multiple:!0,className:`hidden`,onChange:T}),x&&(0,D.jsx)(`p`,{className:`text-xs text-red-400 font-mono mt-2`,children:x}),u.length>0&&(0,D.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:u.map((e,t)=>(0,D.jsxs)(`div`,{className:`relative group`,children:[(0,D.jsx)(`img`,{src:e.preview,alt:e.file.name,className:`h-20 w-20 object-cover rounded-sm border border-[var(--color-line-1)]`}),(0,D.jsx)(`button`,{type:`button`,onClick:()=>O(t),className:`absolute -top-1.5 -right-1.5 w-5 h-5 rounded-full bg-[var(--color-surface-0)] border border-[var(--color-line-1)] text-[var(--color-fg-3)] hover:text-red-400 text-[10px] font-mono flex items-center justify-center`,title:`Remove`,children:`✕`}),(0,D.jsx)(`p`,{className:`text-[10px] font-mono text-[var(--color-fg-4)] mt-0.5 max-w-[80px] truncate`,children:e.file.name})]},t))})]})}),(0,D.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] overflow-hidden`,children:[(0,D.jsxs)(`button`,{type:`button`,onClick:()=>b(e=>!e),className:`w-full flex items-center justify-between px-3 py-2 text-xs font-mono text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] bg-[var(--color-surface-0)] transition-colors`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`diagnostics that will be attached`}),(0,D.jsx)(`span`,{children:y?`▲`:`▼`})]}),y&&(0,D.jsx)(`div`,{className:`px-3 py-2 bg-[var(--color-surface-0)] border-t border-[var(--color-line-1)] max-h-64 overflow-auto`,children:g?(0,D.jsx)(`pre`,{className:`text-[10px] font-mono text-[var(--color-fg-3)] whitespace-pre-wrap break-all`,children:JSON.stringify(g,null,2)}):(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:`Loading…`})})]}),m&&!m.ok&&(0,D.jsx)(`div`,{className:`rounded-sm border border-red-500/25 bg-red-500/5 px-3 py-2 text-xs text-red-300 font-mono`,children:m.error??`Submission failed. Please try again.`}),(0,D.jsx)(K,{type:`submit`,variant:`primary`,disabled:f,children:f?`submitting…`:`submit feedback`})]})]})}function Zm(e){let t=Date.now()-e,n=Math.floor(t/1e3);if(n<60)return`just now`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:new Date(e).toLocaleDateString(void 0,{month:`short`,day:`numeric`})}var Qm={block:`var(--color-hig-red)`,ask:`var(--color-hig-orange)`,log:`var(--color-hig-blue)`,allow:`var(--color-hig-green)`,force:`var(--color-hig-purple)`};function $m(e){switch(e){case`block`:return`Blocked`;case`ask`:return`Held for review`;case`log`:return`Logged`;case`force`:return`Force-allowed`;default:return`Allowed`}}function eh({type:e}){let t={fill:`none`,stroke:`currentColor`,strokeWidth:1.6,strokeLinecap:`round`,strokeLinejoin:`round`,viewBox:`0 0 24 24`};return e===`code`?(0,D.jsxs)(`svg`,{...t,width:`22`,height:`22`,children:[(0,D.jsx)(`path`,{d:`M9 7l-5 5 5 5M15 7l5 5-5 5`}),(0,D.jsx)(`path`,{d:`M14 4l-4 16`,opacity:`0.55`})]}):e===`docs`?(0,D.jsxs)(`svg`,{...t,width:`22`,height:`22`,children:[(0,D.jsx)(`path`,{d:`M5 4h9l5 5v11a1 1 0 01-1 1H5a1 1 0 01-1-1V5a1 1 0 011-1z`}),(0,D.jsx)(`path`,{d:`M14 4v5h5`}),(0,D.jsx)(`path`,{d:`M8 13h8M8 17h5`,opacity:`0.7`})]}):(0,D.jsxs)(`svg`,{...t,width:`22`,height:`22`,children:[(0,D.jsx)(`path`,{d:`M3 12a9 9 0 109-9`}),(0,D.jsx)(`path`,{d:`M12 3v9l6 3`})]})}function th(){let{data:e}=H(`/api/json/counters`,[zt([`counters-updated`])[`counters-updated`]]),t=e?.evals_today??0,n=e?.blocked_today??0,r=e?.asked_today??0;return(0,D.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-6 gap-y-2`,children:[(0,D.jsx)(nh,{value:t,label:`evaluated`,tone:`default`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(nh,{value:n,label:`blocked`,tone:`red`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(nh,{value:r,label:`held for you`,tone:`orange`}),(0,D.jsx)(`span`,{className:`text-[11px] ml-auto`,style:{color:`var(--color-fg-3)`},children:`Today`})]})}function nh({value:e,label:t,tone:n}){return(0,D.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.5`,children:[(0,D.jsx)(`span`,{className:`font-semibold tabular-nums`,style:{color:n===`red`?`var(--color-hig-red)`:n===`orange`?`var(--color-hig-orange)`:`var(--color-fg-0)`,fontSize:`20px`,lineHeight:1,letterSpacing:`-0.018em`},children:e.toLocaleString()}),(0,D.jsx)(`span`,{style:{color:`var(--color-fg-3)`,fontSize:`12px`,letterSpacing:`-0.005em`},children:t})]})}function rh({href:e,title:t,desc:n,tone:r,type:i,cta:a}){let o=r===`orange`?`var(--color-hig-orange)`:r===`indigo`?`var(--color-hig-indigo)`:`var(--color-hig-blue)`;return(0,D.jsx)(`a`,{href:e,className:`group block rounded-2xl px-4 py-4 transition-all`,style:{border:`0.5px solid var(--color-line-1)`,background:`var(--color-surface-1)`,textDecoration:`none`,color:`inherit`,boxShadow:`var(--hig-shadow-1)`},children:(0,D.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,D.jsx)(`span`,{className:`flex items-center justify-center rounded-xl shrink-0`,style:{width:`40px`,height:`40px`,color:o,background:`color-mix(in oklab, ${o} 14%, transparent)`},children:(0,D.jsx)(eh,{type:i})}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsx)(`div`,{className:`text-[14px] font-semibold leading-tight`,style:{color:`var(--color-fg-0)`,letterSpacing:`-0.005em`},children:t}),(0,D.jsx)(`div`,{className:`text-[12px] mt-1 leading-snug`,style:{color:`var(--color-fg-2)`},children:n}),(0,D.jsxs)(`div`,{className:`text-[11.5px] mt-2 font-medium inline-flex items-center gap-1 transition-all`,style:{color:o},children:[a,(0,D.jsx)(`span`,{"aria-hidden":`true`,className:`transition-transform group-hover:translate-x-0.5`,children:`→`})]})]})]})})}function ih(){let{data:e}=H(`/api/state/activity?limit=5`,[zt([`activity-updated`])[`activity-updated`]]),[,t]=(0,_.useState)(0);return(0,_.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),6e4);return()=>clearInterval(e)},[]),!e||e.length===0?(0,D.jsxs)(`div`,{className:`py-6 text-center`,style:{color:`var(--color-fg-3)`},children:[(0,D.jsx)(`p`,{style:{fontSize:`12.5px`,color:`var(--color-fg-2)`},children:`Waiting for your first agent action.`}),(0,D.jsx)(`p`,{style:{fontSize:`11px`,color:`var(--color-fg-3)`,marginTop:`4px`},children:`Anything your AI tries — read, write, run — will appear here in real time.`})]}):(0,D.jsx)(`div`,{children:e.slice(0,5).map((e,t)=>(0,D.jsxs)(`div`,{className:`hig-feed-row`,children:[(0,D.jsx)(`span`,{className:`hig-feed-row-dot`,style:{background:Qm[e.decision]??`var(--color-fg-3)`,boxShadow:`0 0 0 3px ${e.decision===`block`?`color-mix(in oklab, var(--color-hig-red) 22%, transparent)`:e.decision===`ask`?`color-mix(in oklab, var(--color-hig-orange) 22%, transparent)`:`transparent`}`}}),(0,D.jsx)(`span`,{className:`hig-feed-row-decision`,style:{color:Qm[e.decision]??`var(--color-fg-2)`},children:$m(e.decision)}),(0,D.jsx)(`span`,{style:{color:`var(--color-fg-3)`},children:`·`}),(0,D.jsx)(`span`,{className:`hig-feed-row-tool`,title:e.tool,children:fi(e.tool)}),(0,D.jsx)(`span`,{className:`hig-feed-row-time`,children:Zm(e.timestamp)})]},e.id??t))})}function ah(){return(0,D.jsx)(`div`,{className:`relative`,children:(0,D.jsxs)(`div`,{className:`relative max-w-5xl mx-auto px-2 pt-6 pb-12 space-y-6`,children:[(0,D.jsxs)(`section`,{"data-tutorial":`wh-hero`,className:`rounded-2xl px-6 py-5 relative overflow-hidden`,style:{border:`0.5px solid var(--color-line-1)`,background:`radial-gradient(120% 100% at 0% 0%, color-mix(in oklab, var(--color-accent) 14%, transparent) 0%, transparent 55%), var(--color-surface-1)`,boxShadow:`var(--hig-shadow-1)`},children:[(0,D.jsx)(`div`,{className:`hig-eyebrow mb-2`,children:`SigmaShake · Guardrails for AI`}),(0,D.jsx)(`h1`,{className:`font-semibold tracking-tight leading-tight`,style:{color:`var(--color-fg-0)`,fontSize:`26px`,letterSpacing:`-0.018em`},children:`The seatbelt for AI agents.`}),(0,D.jsx)(`p`,{className:`mt-1.5 leading-relaxed`,style:{color:`var(--color-fg-2)`,fontSize:`13.5px`,maxWidth:`52ch`},children:`Watch every move your AI makes. Approve what matters, block what doesn't — without babysitting every step.`}),(0,D.jsx)(`div`,{className:`mt-4 pt-3`,style:{borderTop:`0.5px solid var(--color-line-0)`},children:(0,D.jsx)(th,{})})]}),(0,D.jsx)(`section`,{children:(0,D.jsxs)(`div`,{"data-tutorial":`wh-actions`,className:`grid grid-cols-1 md:grid-cols-3 gap-3`,children:[(0,D.jsx)(rh,{href:`/guardrails?starter=coding`,tone:`orange`,type:`code`,title:`Code safely with AI`,desc:`Protect files, secrets, and git history from coding agents.`,cta:`Install pack`}),(0,D.jsx)(rh,{href:`/guardrails?starter=knowledge-work`,tone:`indigo`,type:`docs`,title:`Guard sensitive content`,desc:`Watch outbound email, file shares, and document changes.`,cta:`Install pack`}),(0,D.jsx)(rh,{href:`/audit`,tone:`blue`,type:`review`,title:`Review what your AI did`,desc:`Every action, decision, and reason — in one place.`,cta:`Open activity`})]})}),(0,D.jsxs)(`a`,{href:`/try`,"data-tutorial":`wh-try`,className:`group flex items-center justify-between gap-3 rounded-xl px-4 py-3 transition-all`,style:{border:`0.5px solid var(--color-line-1)`,background:`linear-gradient(90deg, color-mix(in oklab, var(--color-accent) 8%, transparent) 0%, transparent 60%), var(--color-surface-1)`,textDecoration:`none`,color:`inherit`},children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,D.jsx)(`span`,{className:`flex items-center justify-center w-8 h-8 rounded-full shrink-0`,style:{background:`linear-gradient(180deg, var(--color-accent) 0%, var(--color-brand-hover) 100%)`,color:`var(--color-accent-on)`,boxShadow:`inset 0 0.5px 0 rgba(255,255,255,0.30), 0 2px 8px color-mix(in oklab, var(--color-accent) 30%, transparent)`},children:(0,D.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`polygon`,{points:`6 4 20 12 6 20`,fill:`currentColor`,stroke:`none`})})}),(0,D.jsxs)(`div`,{className:`min-w-0`,children:[(0,D.jsx)(`div`,{className:`font-semibold text-[13.5px] leading-tight`,style:{color:`var(--color-fg-0)`,letterSpacing:`-0.005em`},children:`Try a scenario — see SigmaShake decide`}),(0,D.jsx)(`div`,{className:`text-[12px] mt-0.5`,style:{color:`var(--color-fg-3)`},children:`30-second dry-run · nothing actually runs.`})]})]}),(0,D.jsxs)(`span`,{className:`text-[12.5px] font-medium shrink-0 inline-flex items-center gap-1 transition-all`,style:{color:`var(--color-accent)`},children:[`Try it`,(0,D.jsx)(`span`,{"aria-hidden":`true`,className:`transition-transform group-hover:translate-x-0.5`,children:`→`})]})]}),(0,D.jsxs)(`section`,{children:[(0,D.jsxs)(`div`,{className:`flex items-baseline justify-between mb-2`,children:[(0,D.jsx)(`h2`,{className:`font-semibold tracking-tight`,style:{color:`var(--color-fg-0)`,fontSize:`15px`,letterSpacing:`-0.008em`},children:`Recent activity`}),(0,D.jsx)(`a`,{href:`/audit`,style:{fontSize:`12px`,color:`var(--color-hig-blue)`,fontWeight:500},children:`View all →`})]}),(0,D.jsx)(`div`,{style:{background:`var(--color-surface-1)`,border:`0.5px solid var(--color-line-1)`,borderRadius:`14px`,padding:`4px 16px`,boxShadow:`var(--hig-shadow-1)`},children:(0,D.jsx)(ih,{})})]})]})})}var oh={dashboard:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`rect`,{x:`3`,y:`3`,width:`7`,height:`9`,rx:`1.5`}),(0,D.jsx)(`rect`,{x:`14`,y:`3`,width:`7`,height:`5`,rx:`1.5`}),(0,D.jsx)(`rect`,{x:`14`,y:`12`,width:`7`,height:`9`,rx:`1.5`}),(0,D.jsx)(`rect`,{x:`3`,y:`16`,width:`7`,height:`5`,rx:`1.5`})]}),graph:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`6`,cy:`18`,r:`2.4`}),(0,D.jsx)(`circle`,{cx:`18`,cy:`6`,r:`2.4`}),(0,D.jsx)(`circle`,{cx:`18`,cy:`18`,r:`2.4`}),(0,D.jsx)(`circle`,{cx:`12`,cy:`11`,r:`2.4`}),(0,D.jsx)(`path`,{d:`M7.5 16.5l3-4M13.5 11.5l3-3.5M13.5 12l3 4.5`})]}),rules:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M9 5h11M9 12h11M9 19h11`}),(0,D.jsx)(`path`,{d:`M4 5l1 1 2-2M4 12l1 1 2-2M4 19l1 1 2-2`})]}),hub:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,D.jsx)(`path`,{d:`M3 12h18`}),(0,D.jsx)(`path`,{d:`M12 3a14 14 0 010 18M12 3a14 14 0 000 18`})]}),audit:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),(0,D.jsx)(`path`,{d:`M21 21l-5-5`})]}),approvals:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M5 7h14v12a2 2 0 01-2 2H7a2 2 0 01-2-2z`}),(0,D.jsx)(`path`,{d:`M9 3v4M15 3v4`}),(0,D.jsx)(`path`,{d:`M9 13l2 2 4-4`})]}),profile:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`8`,r:`4`}),(0,D.jsx)(`path`,{d:`M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8`})]}),monitor:(0,D.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M3 12h3l3-7 4 14 3-7h5`})}),observability:(0,D.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M4 20h16M7 16V8M11 16V4M15 16v-6M19 16v-3`})}),debug:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`rect`,{x:`7`,y:`7`,width:`10`,height:`12`,rx:`5`}),(0,D.jsx)(`path`,{d:`M12 7V4M9 4l3 3 3-3`}),(0,D.jsx)(`path`,{d:`M5 11l2-1M5 18l2-1M19 11l-2-1M19 18l-2-1`})]}),home:(0,D.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,D.jsx)(`path`,{d:`M3 11l9-7 9 7v9a2 2 0 01-2 2h-3v-7H10v7H5a2 2 0 01-2-2z`})}),guardrails:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M12 3l8 3.7v6.3c0 5-3.5 9.6-8 11-4.5-1.4-8-6-8-11V6.7L12 3z`}),(0,D.jsx)(`path`,{d:`M9 12l2 2 4-4`})]}),tryit:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M9 3v6L4.5 18a2 2 0 001.7 3h11.6a2 2 0 001.7-3L15 9V3`}),(0,D.jsx)(`path`,{d:`M8 3h8`})]}),agents:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`8`,cy:`9`,r:`3`}),(0,D.jsx)(`circle`,{cx:`16`,cy:`9`,r:`3`}),(0,D.jsx)(`path`,{d:`M3 19c.7-2.5 2.6-4 5-4`}),(0,D.jsx)(`path`,{d:`M21 19c-.7-2.5-2.6-4-5-4`}),(0,D.jsx)(`path`,{d:`M9 17.5c.8-1 1.8-1.5 3-1.5s2.2.5 3 1.5`})]}),notifications:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M18 16v-5a6 6 0 1 0-12 0v5l-2 2h16z`}),(0,D.jsx)(`path`,{d:`M10 20a2 2 0 0 0 4 0`})]}),setup:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M9 12l2 2 4-4`}),(0,D.jsx)(`path`,{d:`M12 3l8 3.7v6.3c0 5-3.5 9.6-8 11-4.5-1.4-8-6-8-11V6.7L12 3z`})]}),support:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,D.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3.5`}),(0,D.jsx)(`path`,{d:`M12 2.5v6M12 15.5v6M2.5 12h6M15.5 12h6`})]}),workspace:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`rect`,{x:`3`,y:`4`,width:`18`,height:`14`,rx:`2`}),(0,D.jsx)(`path`,{d:`M3 9h18M8 14h2M14 14h2`}),(0,D.jsx)(`path`,{d:`M9 20h6`})]}),plugins:(0,D.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.6`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M9 3v4a2 2 0 0 1-2 2H3`}),(0,D.jsx)(`path`,{d:`M15 3v4a2 2 0 0 0 2 2h4`}),(0,D.jsx)(`rect`,{x:`3`,y:`9`,width:`18`,height:`12`,rx:`2`}),(0,D.jsx)(`path`,{d:`M7 14h2M12 14h5M7 18h10`})]})},sh=[{title:`Overview`,items:[{path:`/`,label:`Dashboard`,icon:`dashboard`},{path:`/notifications`,label:`Notifications`,icon:`notifications`},{path:`/agents`,label:`Agents`,icon:`agents`},{path:`/graph`,label:`Graph`,icon:`graph`},{path:`/sessions`,label:`Sessions`,icon:`agents`}]},{title:`Rules`,items:[{path:`/rules`,label:`Rules`,icon:`rules`},{path:`/hub`,label:`Hub`,icon:`hub`},{path:`/approvals`,label:`Approvals`,icon:`approvals`}]},{title:`Activity`,items:[{path:`/audit`,label:`Audit`,icon:`audit`},{path:`/monitor`,label:`Monitor`,icon:`monitor`},{path:`/observability`,label:`Observability`,icon:`observability`}]},{title:`Tools`,items:[{path:`/plugins`,label:`Plugins`,icon:`plugins`},{path:`/setup`,label:`Setup`,icon:`setup`},{path:`/debug`,label:`Debug`,icon:`debug`},{path:`/profile`,label:`Profile`,icon:`profile`},{path:`/support`,label:`Support`,icon:`support`}]}],ch=[{title:`Get Started`,items:[{path:`/`,label:`Home`,icon:`home`},{path:`/agents`,label:`Agents`,icon:`agents`},{path:`/guardrails`,label:`Guardrails`,icon:`guardrails`},{path:`/try`,label:`Try It`,icon:`tryit`}]},{title:`Activity`,items:[{path:`/notifications`,label:`Notifications`,icon:`notifications`},{path:`/audit`,label:`Activity`,icon:`audit`},{path:`/approvals`,label:`Approvals`,icon:`approvals`}]},{title:`You`,items:[{path:`/setup`,label:`Setup`,icon:`setup`},{path:`/profile`,label:`Profile`,icon:`profile`},{path:`/support`,label:`Support`,icon:`support`}]}];function lh(e){return uh(e===`newcomer`?ch:sh)}function uh(e){let t=window.__SSG_PLUGINS__;if(!t||t.nav.length===0)return e;let n=e=>{let t=e.toLowerCase();return t===`tools`?`Tools`:t===`activity`?`Activity`:t===`overview`?`Overview`:t===`rules`?`Rules`:e.charAt(0).toUpperCase()+e.slice(1)},r=e.map(e=>({...e,items:[...e.items]})),i=new Map;for(let e of t.nav){let t={path:e.path,label:e.label,icon:`plugins`},a=n(e.section),o=r.find(e=>e.title===a);if(o)o.items.push(t);else{let e=i.get(a)??[];e.push(t),i.set(a,e)}}for(let[e,t]of i)r.push({title:e,items:t});return r}function dh(e){let t=Math.max(0,e-Date.now()),n=Math.floor(t/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60);return r<60?`${r}m ${n%60}s`:`${Math.floor(r/60)}h ${r%60}m`}function fh(){let{data:e}=H(`/api/json/daemon-status`,[zt([`counters-updated`])[`counters-updated`]]),[t,n]=(0,_.useState)(!1),[,r]=(0,_.useState)(0);(0,_.useEffect)(()=>{if(e?.status!==`degraded`||!e.hibernation)return;let t=setInterval(()=>r(e=>e+1),1e3);return()=>clearInterval(t)},[e?.status,e?.hibernation]);let i=e?.status??`starting`,a=i===`running`?`bg-[var(--color-decision-allow)]`:i===`starting`||i===`degraded`?`bg-[var(--color-decision-ask)]`:`bg-[var(--color-decision-block)]`,o=i===`starting`||i===`degraded`?`pulse-soft`:``,s=i===`degraded`&&e?.hibernation?dh(e.hibernation.nextRetryAt):null,c=i===`running`?`Daemon`:i===`starting`?`Booting`:i===`degraded`?`Retry ${s??`…`}`:i===`error`?`Error`:`Offline`;return(0,D.jsxs)(`div`,{className:`relative`,children:[(0,D.jsxs)(`button`,{onClick:()=>n(e=>!e),className:`chip cursor-pointer hover:bg-[var(--color-fill-2)] transition-colors`,title:i===`running`?`Daemon running`:i===`starting`?`Daemon starting…`:i===`degraded`?`Daemon hibernating — retry in ${s??`…`}`:i===`error`?`Daemon error`:`Daemon stopped`,children:[(0,D.jsx)(`span`,{className:`status-dot ${a} ${o}`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:c})]}),t&&(0,D.jsxs)(`div`,{className:`absolute right-0 top-7 z-50 w-72 hig-card hig-card-padded text-xs`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,D.jsx)(`span`,{className:`overline`,children:`Eval Daemon`}),(0,D.jsx)(`button`,{onClick:()=>n(!1),className:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-0)] cursor-pointer`,children:`✕`})]}),(0,D.jsxs)(`div`,{className:`space-y-1 text-[var(--color-fg-2)]`,children:[(0,D.jsxs)(`div`,{className:`font-mono text-[11px]`,children:[`status:`,` `,(0,D.jsx)(`span`,{className:i===`running`?`text-[var(--color-decision-allow)]`:i===`starting`||i===`degraded`?`text-[var(--color-decision-ask)]`:`text-[var(--color-decision-block)]`,children:i})]}),e?.pid&&(0,D.jsxs)(`div`,{className:`font-mono text-[11px]`,children:[`pid: `,e.pid]}),i===`degraded`&&e?.hibernation&&(0,D.jsxs)(`div`,{className:`mt-2 rounded-lg p-2 text-[11px] space-y-0.5`,style:{background:`color-mix(in oklab, var(--color-hig-orange) 14%, transparent)`,color:`color-mix(in oklab, var(--color-hig-orange) 90%, var(--color-fg-0))`},children:[(0,D.jsxs)(`div`,{children:[`next retry: `,(0,D.jsx)(`span`,{className:`font-medium`,children:s})]}),(0,D.jsxs)(`div`,{children:[`episode attempt: `,e.hibernation.attempt,e.hibernation.reason?` (${e.hibernation.reason})`:``]}),(0,D.jsx)(`div`,{className:`opacity-70`,children:`Slow-tier supervisor is retrying at long backoff — no manual restart required.`})]})]}),e?.logTail&&e.logTail.length>0&&(0,D.jsxs)(`div`,{className:`mt-3`,children:[(0,D.jsx)(`div`,{className:`overline mb-1`,children:`Recent log`}),(0,D.jsx)(`pre`,{className:`bg-[var(--color-surface-2)] border border-[var(--color-line-0)] rounded-md p-2 text-[10px] text-[var(--color-fg-2)] overflow-x-auto whitespace-pre-wrap break-all max-h-32 overflow-y-auto`,children:e.logTail.join(`
|
|
58
|
+
`)})]})]})]})}function ph(){let{data:e}=H(`/api/state/activity-degraded`);if(!e?.degraded)return null;let t=e.since?new Date(e.since).toLocaleTimeString():`recently`;return(0,D.jsxs)(`div`,{role:`status`,className:`hig-banner hig-banner-warning`,title:e.reason??`audit-worker degraded`,children:[(0,D.jsx)(`span`,{children:`⚠`}),(0,D.jsxs)(`span`,{children:[`Audit pipeline degraded since `,t,` — entries may be missing. Run`,` `,(0,D.jsx)(`code`,{className:`font-mono`,children:`ssg daemon --status`}),` to inspect.`]})]})}function mh(){let{data:e}=H(`/api/json/license`,[zt([`counters-updated`])[`counters-updated`]]);return!e||e.tier!==`unlicensed`||e.status===`needs_reauth`||e.status===`needs_login`||e.eval_daily_limit===null||e.evals_today<e.eval_daily_limit?null:(0,D.jsxs)(`div`,{role:`alert`,className:`hig-banner hig-banner-error`,title:`Free tier daily eval limit reached — rules are being bypassed until quota resets`,children:[(0,D.jsx)(`span`,{children:`●`}),(0,D.jsxs)(`span`,{children:[`Quota exhausted — `,e.evals_today.toLocaleString(),`/`,e.eval_daily_limit.toLocaleString(),` evals used today. BLOCK and ASK rules are being bypassed (fail-open) until daily reset.`,` `,(0,D.jsx)(`a`,{href:e.upgrade_url,target:`_blank`,rel:`noopener noreferrer`,className:`underline font-medium`,children:`Upgrade to Pro →`})]})]})}function hh(){let{data:e}=H(`/api/json/license`,[zt([`counters-updated`])[`counters-updated`]]);if(!e||e.status!==`needs_reauth`)return null;let t=e.detail??`License JWT invalid or expired`;return(0,D.jsxs)(`div`,{role:`alert`,className:`hig-banner hig-banner-warning`,title:`Re-authentication required — paid-tier features are paused until you re-login`,children:[(0,D.jsx)(`span`,{children:`⚠`}),(0,D.jsxs)(`span`,{children:[`Re-authentication required — `,t,`. Run`,` `,(0,D.jsx)(`code`,{className:`font-mono`,children:`ssg auth login`}),` in your terminal to restore your tier.`]})]})}function gh(){let{data:e,refetch:t}=H(`/api/json/ask-mode`),[n,r]=(0,_.useState)(!1),i=e?.mode??`tty`;async function a(e){if(!(n||e===i)){r(!0);try{await fetch(`/api/json/ask-mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({mode:e})}),t()}finally{r(!1)}}}let o=i===`tty`;return(0,D.jsxs)(`button`,{onClick:()=>a(o?`dashboard`:`tty`),disabled:n,className:`chip cursor-pointer hover:bg-[var(--color-fill-2)] transition-colors disabled:opacity-50`,title:o?`ASK decisions prompt in the native IDE/TTY. Click to route to dashboard.`:`ASK decisions queue on /approvals. Click to route to native prompt.`,children:[(0,D.jsx)(`span`,{className:`status-dot ${o?`bg-[var(--color-hig-blue)]`:`bg-[var(--color-hig-purple)]`}`}),(0,D.jsxs)(`span`,{className:`hidden sm:inline`,children:[`Ask · `,o?`Native`:`Dashboard`]})]})}function _h(e){let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`}var vh={on:`soft`,soft:`audit`,audit:`off`,off:`on`};function yh(){let{data:e,refetch:t}=H(`/api/json/mode`,[zt([`mode-changed`])[`mode-changed`]]),[n,r]=(0,_.useState)(!1),i=e?.mode??`on`;async function a(e,i){if(!n){r(!0);try{let n={mode:e};typeof i==`number`&&i>0&&(n.forMs=i),await fetch(`/api/json/mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify(n)}),t()}finally{r(!1)}}}let o=i===`on`?`bg-[var(--color-hig-green)]`:i===`soft`?`bg-[var(--color-hig-yellow)]`:i===`audit`?`bg-[var(--color-hig-orange)]`:`bg-[var(--color-hig-red)]`,s=e?.rearmAt!==void 0&&i!==`on`?` · until ${_h(e.rearmAt)}`:``,c=`SSG · ${i.toUpperCase()}${s}`;return(0,D.jsxs)(`button`,{"data-tutorial":`app-mode`,onClick:e=>{e.shiftKey?a(i===`off`?`audit`:`on`):a(vh[i])},disabled:n,className:`chip cursor-pointer hover:bg-[var(--color-fill-2)] transition-colors disabled:opacity-50`,title:i===`on`?`SSG ON — rules enforce normally. Click to cycle: On → Soft → Audit → Off.`:i===`soft`?`SSG SOFT — blocks downgraded to prompts, prompts downgraded to logs. Click for Audit; Shift+Click to resume On.`:i===`audit`?`SSG AUDIT — rules log only, nothing blocked or prompted. Click for Off; Shift+Click to resume On.`:`SSG OFF — kill switch engaged, evaluator returns allow. Click to resume On; Shift+Click for Audit.`,children:[(0,D.jsx)(`span`,{className:`status-dot ${o}`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:c})]})}function bh(){let{data:e,refetch:t}=H(`/api/json/mode`,[zt([`mode-changed`])[`mode-changed`]]),n=e?.mode??`on`;if(n===`on`)return null;let r=e?.rearmAt===void 0?``:` Auto-restores at ${_h(e.rearmAt)}.`,i=n===`off`?`SSG is OFF — kill switch engaged.`:n===`soft`?`SSG is in SOFT mode — non-blocking enforcement.`:`SSG is in AUDIT mode — log-only.`,a=n===`off`?`Every tool call is being allowed without evaluation.${r}`:n===`soft`?`Block decisions are being downgraded to prompts and prompts to logs. Workflow keeps moving; signal still surfaces in the audit log.${r}`:`Rules still match for the audit log, but nothing is being blocked or prompted.${r}`,o=n===`off`?`hig-banner hig-banner-error`:`hig-banner hig-banner-warning`;async function s(){await fetch(`/api/json/mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({mode:`on`})}),t()}return(0,D.jsxs)(`div`,{className:o,children:[(0,D.jsxs)(`svg`,{className:`shrink-0`,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`}),(0,D.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,D.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),(0,D.jsxs)(`span`,{className:`flex-1`,children:[(0,D.jsx)(`span`,{className:`font-semibold`,children:i}),` `,a]}),(0,D.jsx)(`button`,{onClick:s,className:`hig-button hig-button-small`,title:`Re-enable normal rule enforcement`,children:`Resume`})]})}function xh({onRefresh:e}){return(0,D.jsx)(`button`,{onClick:e,className:`hig-button`,title:`Reset page — clears stale graph state without dropping SSE`,"aria-label":`Refresh page`,children:(0,D.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M21 12a9 9 0 1 1-3-6.7`}),(0,D.jsx)(`polyline`,{points:`21 3 21 9 15 9`})]})})}function Sh(){return(0,D.jsx)(`button`,{onClick:()=>{try{window.location.reload()}catch{}},className:`hig-button`,title:`Reload dashboard — fetches fresh assets (use after a desktop upgrade)`,"aria-label":`Reload dashboard`,children:(0,D.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M3 12a9 9 0 1 1 3 6.7`}),(0,D.jsx)(`polyline`,{points:`3 21 3 15 9 15`}),(0,D.jsx)(`path`,{d:`M3 3v6h6`})]})})}function Ch(){let{data:e}=H(`/api/json/mcp-status`,[zt([`activity-updated`])[`activity-updated`]]),t=e?.status??`inactive`;if(t===`inactive`)return null;let n=t===`active`?`bg-[var(--color-hig-blue)]`:`bg-[var(--color-fg-3)]`,r=t===`active`?`MCP active`:`MCP idle`;return(0,D.jsxs)(`div`,{className:`chip`,title:t===`active`?`MCP server: ${e?.recentCount??0} evals in last 5 min`:`MCP server: ${e?.totalCount??0} total evals`,children:[(0,D.jsx)(`span`,{className:`status-dot ${n}`}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:r})]})}function wh(){let{data:e}=H(`/api/json/adapters`);if(!e)return null;let t=e.adapters.find(e=>e.active);if(!t)return null;let n=t.id===`generic`;return(0,D.jsxs)(`a`,{href:`/agents`,className:`chip ss-agent-chip cursor-pointer transition-all`,title:n?`No specific AI client detected — SSG is running in generic adapter mode. Click to wire one up.`:`Connected agent: ${t.displayName} (${t.vendor}). Click to manage.`,style:{"--agent-accent":t.accent},"data-generic":n?`true`:`false`,children:[(0,D.jsx)(`span`,{className:`status-dot`,style:{background:t.accent,boxShadow:`0 0 6px color-mix(in oklab, ${t.accent} 60%, transparent)`}}),(0,D.jsx)(`span`,{className:`hidden sm:inline`,children:t.displayName})]})}function Th(e,t){if(e===`/`)return t===`newcomer`?(0,D.jsx)(ah,{}):(0,D.jsx)(Qc,{});if(e===`/classic`)return(0,D.jsx)(zl,{});if(e===`/graph`)return(0,D.jsx)(ld,{});if(e===`/sessions`)return(0,D.jsx)(bm,{});if(e.startsWith(`/sessions/`)){let t=decodeURIComponent(e.slice(10));if(t)return(0,D.jsx)(pm,{sessionKey:t})}if(e===`/debug`)return(0,D.jsx)(Hl,{});if(e===`/rules`)return(0,D.jsx)(rm,{});if(e===`/audit`)return(0,D.jsx)(Fi,{});if(e===`/approvals`)return(0,D.jsx)(ii,{});if(e===`/profile`)return(0,D.jsx)(up,{});if(e===`/agents`)return(0,D.jsx)(dn,{});if(e===`/notifications`)return(0,D.jsx)(Ud,{});if(e===`/setup`)return(0,D.jsx)(jm,{});if(e===`/try`)return(0,D.jsx)(Gm,{});if(e===`/guardrails`)return(0,D.jsx)(gd,{});if(e===`/hub/connect`)return(0,D.jsx)(ud,{});if(e===`/hub/publish`)return(0,D.jsx)(Od,{});if(e.startsWith(`/hub/`)){let t=e.slice(5);if(t)return(0,D.jsx)(fd,{id:t})}return e===`/hub`?(0,D.jsx)(Ed,{}):e===`/monitor`?(0,D.jsx)(Vd,{}):e===`/observability`?(0,D.jsx)(_f,{}):e===`/plugins`?(0,D.jsx)(Xf,{}):e===`/publish-plugin`?(0,D.jsx)(Sf,{}):e===`/support`?(0,D.jsx)(Xm,{}):(0,D.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-24 text-[var(--color-fg-3)]`,children:[(0,D.jsx)(`p`,{className:`overline mb-2`,children:`Error · 404`}),(0,D.jsx)(`p`,{className:`text-sm`,children:`Page not found`}),(0,D.jsx)(`a`,{href:`/`,className:`mt-4 text-[12px] text-[var(--color-hig-blue)] hover:underline`,children:`← Back to dashboard`})]})}function Eh(e,t){return e===`/`?t===`newcomer`?`Home`:`Dashboard`:e===`/classic`?`Classic Dashboard`:e===`/graph`?`Graph`:e===`/sessions`?`Sessions`:e.startsWith(`/sessions/`)?`Session Inspector`:e===`/debug`?`Debug`:e===`/rules`?`Rules`:e===`/audit`?t===`newcomer`?`Activity`:`Audit`:e===`/approvals`?`Approvals`:e===`/profile`?`Profile`:e===`/agents`?`Agents`:e===`/notifications`?`Notifications`:e===`/setup`?`Setup Status`:e===`/try`?`Try It`:e===`/guardrails`?`Guardrails`:e===`/hub/connect`?`Connect Hub`:e===`/hub/publish`?`Publish to Hub`:e.startsWith(`/hub/`)||e===`/hub`?`Hub`:e===`/monitor`?`Monitor`:e===`/observability`?`Observability`:e===`/plugins`?`Plugins`:e===`/publish-plugin`?`Publish a Plugin`:e===`/support`?`Support & Feedback`:`SigmaShake`}function Dh(e){history.pushState(null,``,e),window.dispatchEvent(new PopStateEvent(`popstate`))}function Oh({count:e}){let[t,n]=(0,_.useState)(!1);return t||e===0?null:(0,D.jsxs)(`div`,{className:`hig-banner hig-banner-warning`,children:[(0,D.jsxs)(`svg`,{className:`shrink-0`,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`}),(0,D.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,D.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),(0,D.jsxs)(`span`,{className:`flex-1`,children:[(0,D.jsxs)(`span`,{className:`font-semibold`,children:[e,` other `,e===1?`tab`:`tabs`,` open.`]}),` `,`Each tab holds a live SSE connection. Browsers limit connections per origin — too many tabs will prevent this page from loading.`,` `,(0,D.jsx)(`span`,{className:`opacity-70`,children:`Close other tabs to restore full live-update functionality.`})]}),(0,D.jsx)(`button`,{onClick:()=>n(!0),className:`opacity-60 hover:opacity-100 transition-opacity shrink-0 cursor-pointer`,title:`Dismiss`,children:(0,D.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,D.jsx)(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),(0,D.jsx)(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})]})})]})}function kh({pathname:e,navSections:t,open:n,onClose:r}){let i=t=>t===`/`?e===`/`:e.startsWith(t);return(0,D.jsxs)(`aside`,{className:`hig-sidebar ${n?`open`:``}`,"aria-label":`Primary`,"data-tutorial":`app-sidebar`,children:[(0,D.jsxs)(`div`,{className:`hig-sidebar-header`,children:[(0,D.jsx)(`span`,{className:`hig-app-icon`,"aria-hidden":`true`,children:`SS`}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`hig-app-name`,children:`SigmaShake`}),(0,D.jsx)(`div`,{className:`hig-app-meta`,children:`Governance`})]})]}),(0,D.jsx)(`nav`,{className:`hig-sidebar-nav`,children:t.map(e=>(0,D.jsxs)(`div`,{className:`hig-sidebar-section`,children:[(0,D.jsx)(`div`,{className:`hig-sidebar-section-title`,children:e.title}),e.items.map(e=>(0,D.jsxs)(`a`,{href:e.path,onClick:r,className:`hig-sidebar-item`,"data-active":i(e.path)?`true`:`false`,children:[(0,D.jsx)(`span`,{className:`hig-sidebar-icon`,"aria-hidden":`true`,children:oh[e.icon]}),(0,D.jsx)(`span`,{children:e.label})]},e.path))]},e.title))})]})}function Ah(){let[e,t]=(0,_.useState)(window.location.pathname),[n,r]=(0,_.useState)(0),[i,a]=(0,_.useState)(!1),{otherTabCount:o}=Wt(),{mode:s}=V(),c=lh(s),l=Eh(e,s);return(0,_.useEffect)(()=>{let e=()=>t(window.location.pathname);return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(0,_.useEffect)(()=>{a(!1)},[]),(0,_.useEffect)(()=>{let e=e=>{let t=e.target.closest(`a`);if(!t)return;let n=t.getAttribute(`href`);!n||n.startsWith(`http`)||n.startsWith(`//`)||n===`/workspace`||n.startsWith(`/workspace/`)||n.startsWith(`/plugins/`)||(e.preventDefault(),Dh(n))};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[]),(0,D.jsxs)(`div`,{className:`hig-app`,children:[(0,D.jsx)(kh,{pathname:e,navSections:c,open:i,onClose:()=>a(!1)}),(0,D.jsxs)(`div`,{className:`hig-window`,children:[(0,D.jsxs)(`header`,{className:`hig-toolbar`,children:[(0,D.jsx)(`button`,{"aria-label":`Toggle sidebar`,className:`md:hidden hig-button hig-button-small`,onClick:()=>a(e=>!e),children:(0,D.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 18 18`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,children:[(0,D.jsx)(`line`,{x1:`2`,y1:`5`,x2:`16`,y2:`5`}),(0,D.jsx)(`line`,{x1:`2`,y1:`9`,x2:`16`,y2:`9`}),(0,D.jsx)(`line`,{x1:`2`,y1:`13`,x2:`16`,y2:`13`})]})}),(0,D.jsx)(`h1`,{className:`hig-toolbar-title`,children:l}),(0,D.jsx)(he,{pathname:e,mode:s}),(0,D.jsx)(`div`,{className:`hig-toolbar-spacer`}),(0,D.jsxs)(`div`,{className:`hig-toolbar-controls hidden md:flex`,children:[o>0&&(0,D.jsxs)(`span`,{className:`chip`,style:{color:`var(--color-hig-orange)`,background:`color-mix(in oklab, var(--color-hig-orange) 14%, transparent)`},title:`${o} other tab${o===1?``:`s`} open — may cause connection issues`,children:[o+1,` tabs`]}),(0,D.jsx)(Lt,{}),(0,D.jsx)(yh,{}),(0,D.jsx)(gh,{}),(0,D.jsx)(wh,{}),(0,D.jsx)(Ch,{}),(0,D.jsx)(fh,{}),(0,D.jsx)(xh,{onRefresh:()=>r(e=>e+1)}),(0,D.jsx)(Sh,{}),(0,D.jsx)(Se,{}),(0,D.jsx)(re,{}),(0,D.jsx)(O,{}),(0,D.jsx)(Ue,{})]})]}),(0,D.jsx)(bh,{}),(0,D.jsx)(Oh,{count:o}),(0,D.jsx)(hh,{}),(0,D.jsx)(mh,{}),(0,D.jsx)(ph,{}),(0,D.jsx)(`main`,{className:`hig-content px-6 py-6`,children:Th(e,s)},n)]})]})}var jh=document.getElementById(`app-root`);if(!jh)throw Error(`Missing #app-root`);g.createRoot(jh).render((0,D.jsx)(_.StrictMode,{children:(0,D.jsx)(Ah,{})}));
|