@sigmashake/ssg 0.29.96 → 0.29.97

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sigmashake/ssg",
3
- "version": "0.29.96",
3
+ "version": "0.29.97",
4
4
  "description": "AI Agent Governance CLI — evaluate tool calls against rules, block dangerous operations, and surface blocked commands",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -14,8 +14,8 @@
14
14
  "README.md"
15
15
  ],
16
16
  "optionalDependencies": {
17
- "@sigmashake/ssg-linux-x64": "0.29.96",
18
- "@sigmashake/ssg-linux-arm64": "0.29.96",
17
+ "@sigmashake/ssg-linux-x64": "0.29.97",
18
+ "@sigmashake/ssg-linux-arm64": "0.29.97",
19
19
  "@sigmashake/ssg-darwin-arm64": "0.29.82",
20
20
  "@sigmashake/ssg-darwin-x64": "0.29.82",
21
21
  "@sigmashake/ssg-win32-x64": "0.29.90"
@@ -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 $m({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 Pm(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 Nm(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 eh({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&&Tm.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)(Y,{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:Om[c.decision]??`text-[var(--color-fg-2)]`,children:c.decision}),` `,`· `,zm(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)(Z,{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 ${Om[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:zm(c.timestamp)}),(0,D.jsx)($m,{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 ${Om[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:zm(e.lastSeen)}),(0,D.jsx)($m,{entry:i,ruleId:e.ruleId,onJump:n,onChanged:r})]},e.ruleId)})})]})]})]})}):(0,D.jsx)(Y,{children:(0,D.jsxs)(Z,{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 th({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 nh({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 rh({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)(Y,{children:(0,D.jsx)(Z,{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()]})]}),Dm.map(n=>{let o=r[n]??0,s=i[n]??0,c=e===n,l=o===0,u=Om[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)})]})]})})})}function ih(){let{mode:e,setMode:t}=oe(),n=e===`pro`,r=Vt(Em)[`rules-changed`],[i,a]=(0,_.useState)(!0),[o,s]=(0,_.useState)(0);(0,_.useEffect)(()=>{if(!i)return;let e=setInterval(()=>{s(e=>e+1)},jm);return()=>clearInterval(e)},[i]);let{data:c,refetch:l}=H(Mm(`/api/json/rules`,r+o),[r,o]),[u,d]=(0,_.useState)(`7d`),{data:f,refetch:p}=H(Mm(`/api/json/rules-stats?window=${u}`,o),[r,u,o]),{data:m,refetch:h}=H(Mm(`/api/json/rules-performance`,o),[r,o]),{data:g,refetch:v}=H(Mm(`/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`),[A,j]=(0,_.useState)(new Set),[M,N]=(0,_.useState)(new Set),[ee,te]=(0,_.useState)(!1),P=Bt(`voice`),[F,I]=(0,_.useState)(()=>new URLSearchParams(window.location.search).get(`highlight`)??``),ne=(0,_.useRef)(null);(0,_.useEffect)(()=>{ne.current&&ne.current.scrollIntoView({behavior:`smooth`,block:`center`})},[]);let re=f?.stats??{},L=(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]);function R(){l(),p(),h(),v(),s(e=>e+1)}function z(e){b(``),S(`all`),w(`all`),E(`none`),I(e);let t=new URL(window.location.href);t.searchParams.set(`highlight`,e),window.history.replaceState(null,``,t.toString())}let ie=(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]),B=(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||Tm.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 ae=y.toLowerCase(),se=(()=>{let e=new Set;if(!ae||!g)return e;for(let t of g.rows){if(!t.ruleId)continue;let n=(t.input??``).toLowerCase(),r=(t.tool??``).toLowerCase();(n.includes(ae)||r.includes(ae))&&e.add(t.ruleId)}return e})();function ce(e){if(x===`enabled`&&!e.enabled||x===`disabled`&&e.enabled)return!1;let t=re[e.id],n=t?.hits??0;return!(x===`hit`&&n===0||x===`never`&&n>0||C!==`all`&&e.decision!==C||T===`hot`&&!ie.has(e.id)||T===`noisy`&&!B.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 le=(()=>{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=re[r.id]?.hits??0;n>0&&(t[r.decision]=(t[r.decision]??0)+n)}return{ruleCount:e,hits:t}})(),ue={hot:0,blocked:0,noisy:B.size,slow:0,never:0,disabled:0};for(let e of c.rulesets)for(let t of e.rules){ie.has(t.id)&&ue.hot++,t.decision===`block`&&t.enabled&&ue.blocked++;let e=re[t.id];e&&e.avgDurationMs>50&&ue.slow++,t.enabled&&(!e||e.hits===0)&&ue.never++,t.enabled||ue.disabled++}let de=c.rulesets.map(e=>{let t=e.rules.filter(e=>ae&&!e.id.toLowerCase().includes(ae)&&!e.message.toLowerCase().includes(ae)&&!se.has(e.id)?!1:ce(e));return O!==`default`&&(t=[...t].sort((e,t)=>O===`hits`?(re[t.id]?.hits??0)-(re[e.id]?.hits??0):O===`slowest`?(re[t.id]?.avgDurationMs??0)-(re[e.id]?.avgDurationMs??0):O===`recent`?(re[t.id]?.lastSeen??0)-(re[e.id]?.lastSeen??0):O===`alpha`?e.id.localeCompare(t.id):0)),{...e,rules:t}}).filter(e=>e.rules.length>0||!ae&&x===`all`&&C===`all`&&T===`none`),fe=c.rulesets.reduce((e,t)=>e+t.rules.length,0),pe=c.rulesets.reduce((e,t)=>e+t.rules.filter(e=>e.enabled).length,0),me=new Set;for(let e of de)for(let t of e.rules)me.add(t.id);let he=ae||x!==`all`||C!==`all`||T!==`none`?me.size:null,V=[];for(let e of A){let t=L.get(e);t&&V.push({ruleId:e,file:t.file})}function ge(e){j(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function _e(e){j(t=>{let n=new Set(t);if(e.rules.every(e=>n.has(e.id)))for(let t of e.rules)n.delete(t.id);else for(let t of e.rules)n.add(t.id);return n})}function ve(){j(e=>{let t=new Set(e);for(let e of me)t.add(e);return t})}function ye(e){N(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function be(e,t){V.length!==0&&(e===`enable`?await Fm(V,!0):e===`disable`?await Fm(V,!1):e===`delete`?(await Lm(V),j(new Set)):e===`decision`&&t&&await Im(V,t),R())}return(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsxs)(`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:[pe,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`/`,fe]}),(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`,{className:`ml-auto flex items-center gap-2`,children:P&&(0,D.jsx)(`button`,{type:`button`,onClick:()=>te(!0),className:`px-2 py-1 text-[11px] font-mono uppercase tracking-wider rounded-sm border border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)] hover:bg-[var(--color-brand)]/20 cursor-pointer transition-colors`,title:`Dictate or type a new rule — deterministic match, no inference cost`,children:`🎙 dictate rule`})})]}),(0,D.jsx)(Gm,{perf:m,triggers:g,decisionAggregates:le,livePoll:i,onTogglePoll:()=>a(e=>!e),statsWindow:u,onWindowChange:d,mode:e,onModeChange:t}),(0,D.jsx)(Y,{children:(0,D.jsxs)(Z,{className:`px-3 py-2.5 space-y-2.5`,children:[(0,D.jsx)(nh,{value:y,onChange:b,matchCount:he,sortKey:O,onSortChange:k}),(0,D.jsx)(th,{chip:T,onChange:E,counts:ue}),(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)(rh,{decisionFilter:C,onChange:w,totalRules:fe,ruleCount:le.ruleCount,hits:le.hits,window:u}),n&&(0,D.jsx)(qm,{stats:re,ruleIndex:L,triggers:g?.rows,statsWindow:u,onJump:z}),(0,D.jsx)(eh,{triggers:g?.rows,ruleIndex:L,onJump:z,onChanged:R}),n&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(Km,{perf:m}),(0,D.jsx)(Jm,{totalRules:fe,activeRules:pe,onChanged:R}),(0,D.jsx)(Wm,{}),(0,D.jsx)(Qm,{})]}),(0,D.jsx)(Xm,{selected:V,onClear:()=>j(new Set),onApply:be}),me.size>0&&(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] font-mono`,children:[(0,D.jsxs)(`button`,{onClick:ve,className:`uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:[`select `,me.size,` visible`]}),A.size>0&&(0,D.jsx)(`button`,{onClick:()=>j(new Set),className:`uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:`clear selection`})]}),de.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:de.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=>A.has(e.id)),a=!i&&e.rules.some(e=>A.has(e.id)),o=Bm(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)(Y,{children:(0,D.jsxs)(`details`,{open:t||!!ae||x!==`all`||C!==`all`||T!==`none`||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:()=>_e(e),onClick:e=>e.stopPropagation(),className:`accent-[var(--color-brand)] cursor-pointer`,"aria-label":`Select all rules in ${e.file}`}),(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`,children:e.file}),s&&(0,D.jsx)(il,{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)(Z,{className:`py-0`,children:[e.rules.length===0?(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] py-3`,children:`no rules in this file`}):(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:e.rules.map(t=>{let r=t.id===F,i=A.has(t.id),a=re[t.id],o=M.has(t.id),s=a&&a.hits>0?Bm(g?.rows,20,3600*1e3,e=>e.ruleId===t.id):null;return(0,D.jsx)(`div`,{ref:r?ne:null,className:`py-2.5 ${r?`bg-amber-400/8 border-l-2 border-l-amber-400/60 -mx-3 px-3 -my-px`:i?`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:i,onChange:()=>ge(t.id),className:`mt-1 accent-[var(--color-brand)] cursor-pointer`,"aria-label":`Select rule ${t.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:t.decision,onChange:async n=>{await Pm(t.id,e.file,n.target.value),R()},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 ${Om[t.decision]??`text-[var(--color-fg-2)]`}`,children:Dm.map(e=>(0,D.jsx)(`option`,{value:e,children:e},e))}),(0,D.jsx)($i,{ruleId:t.id,children:(0,D.jsx)(`code`,{className:`text-xs font-mono text-[var(--color-fg-0)] break-all`,children:t.id})}),s&&(0,D.jsx)(il,{data:s,width:50,height:14,color:km[t.decision]??`#a8a29e`}),a&&a.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:a.hits}),` `,`hit`,a.hits===1?``:`s`,a.avgDurationMs>0&&(0,D.jsxs)(D.Fragment,{children:[` · `,(0,D.jsxs)(`span`,{className:a.avgDurationMs>50?`text-amber-300`:`text-[var(--color-fg-1)]`,children:[a.avgDurationMs.toFixed(1),`ms`]}),` `,`avg`]}),` · `,zm(a.lastSeen)]}),(!a||a.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:()=>ye(t.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:o?`hide audit`:`audit`})]}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--color-fg-2)] truncate`,children:t.message}),n&&o&&(0,D.jsx)(Zm,{ruleId:t.id})]})]}),(0,D.jsx)(Um,{rule:t,file:e.file,onToggle:async()=>{await Nm(t.id,e.file),R()}})]})},t.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.file)})}),P&&(0,D.jsx)(bm,{open:ee,onClose:()=>te(!1),onSaved:R})]})}var ah={allow:`#4ade80`,block:`#f87171`,ask:`#fbbf24`,force:`#a78bfa`,log:`#7dd3fc`,shadow:`#94a3b8`},oh=[`<1ms`,`1-10ms`,`10-100ms`,`100ms-1s`,`>1s`];function sh(e){return e?new Date(e*1e3).toLocaleString():`—`}function ch(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 lh({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 uh({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:ah.allow},{label:`block`,value:a,color:ah.block},{label:`ask`,value:o,color:ah.ask},{label:`force`,value:s,color:ah.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 dh({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 fh({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:oh.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 ph({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=Vt([`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`,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)(mh,{label:`Evals`,value:f.evals.toLocaleString()}),(0,D.jsx)(mh,{label:`Blocked`,value:f.blocked>0?`${f.blocked} (${p}%)`:`0`,color:f.blocked>0?`text-rose-300`:void 0}),(0,D.jsx)(mh,{label:`Asked`,value:f.asked.toLocaleString(),color:`text-amber-300`}),(0,D.jsx)(mh,{label:`Started`,value:sh(f.started_at)}),(0,D.jsx)(mh,{label:`Duration`,value:ch(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)(lh,{title:`Decisions`,hint:`${f.evals} evals`,children:(0,D.jsx)(uh,{allowed:f.allowed,blocked:f.blocked,asked:f.asked,forced:f.forced})}),(0,D.jsx)(lh,{title:`Top tools`,hint:`${r.tools.top.length+ +(r.tools.other>0)} buckets`,children:(0,D.jsx)(dh,{rows:s,emptyMessage:`No tool activity.`})}),(0,D.jsx)(lh,{title:`Top rules`,hint:`${c.length} hit`,children:(0,D.jsx)(dh,{rows:c,emptyMessage:`No rules matched this session.`})}),(0,D.jsx)(lh,{title:`Latency`,hint:`duration buckets`,children:(0,D.jsx)(fh,{latency:d})})]}),(0,D.jsx)(`div`,{className:`flex-1 min-h-[400px]`,children:(0,D.jsx)(Nd,{sessionKey:e,entries:u,loading:i,error:null,playingIndex:-1})})]})}function mh({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 hh=100,gh={"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 _h(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 vh(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 yh({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 ${gh[e]??`bg-white/5 text-[var(--color-fg-3)] border-white/10`}`,children:e})}function bh(){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=${hh}&offset=${e}`,[i]),u=Vt([`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`,{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`,{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`,{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)(yh,{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:_h(t.started_at)}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-3)]`,children:vh(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>hh&&(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+hh,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-hh)),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+hh>=f,onClick:()=>t(e+hh),className:`px-3 py-1 border border-[var(--color-line-1)] rounded-sm disabled:opacity-30 hover:bg-white/5`,children:`Next →`})]})]})]})}function xh({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 Sh({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 Ch(e){return e===void 0?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function wh(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 Th(e,t){return t&&e.startsWith(`${t}/`)?`~/${e.slice(t.length+1)}`:e===t?`~`:e}function Eh({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)(xh,{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:Th(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:Ch(e.size)}),(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)] min-w-[60px] text-right`,children:wh(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 Dh({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)(xh,{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 Oh({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 kh={"claude-code":`Claude Code`,cursor:`Cursor`,codex:`Codex CLI`,pi:`Pi Agent`,gemini:`Gemini CLI`,antigravity:`Antigravity`,copilot:`GitHub Copilot`};function Ah({adapter:e,home:t}){let n=kh[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)(xh,{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)(Eh,{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 jh(){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`,{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)(xh,{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:Th(_,g)})]})]}),(0,D.jsx)(Dh,{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)(xh,{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)(Sh,{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)(Dh,{title:`License & authentication`,status:a.status===`healthy`||a.status===`healthy_free`?`ok`:`warn`,children:[(0,D.jsx)(Oh,{k:`Tier`,v:a.tier_label}),(0,D.jsx)(Oh,{k:`Status`,v:a.status}),(0,D.jsx)(Oh,{k:`Account`,v:a.email??`—`}),(0,D.jsx)(Oh,{k:`Auth method`,v:a.auth_method??`—`}),(0,D.jsx)(Oh,{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)(Eh,{file:a.license_file,home:g}),(0,D.jsx)(Eh,{file:a.hosts_file,home:g})]})]}),(0,D.jsxs)(Dh,{title:`Runtime processes`,status:o.alive&&s.alive?`ok`:`warn`,children:[(0,D.jsx)(Oh,{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)(Oh,{k:`Daemon socket`,v:o.socket_exists?`present`:`missing`,mono:!0}),(0,D.jsx)(Oh,{k:`Dashboard (serve)`,v:s.alive?`running — PID ${s.pid}`:`not running`}),(0,D.jsx)(Oh,{k:`Native engine`,v:c.available?`loaded — sub-ms eval available`:`unavailable — TypeScript fallback`})]}),(0,D.jsxs)(Dh,{title:`Database & MCP`,status:l.status,children:[(0,D.jsx)(Oh,{k:`Rules in DB`,v:l.rules.toLocaleString()}),(0,D.jsx)(Oh,{k:`Audit log rows`,v:l.audit_rows.toLocaleString()}),(0,D.jsx)(Oh,{k:`DB path`,v:Th(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)(Oh,{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)(Oh,{k:`All-time calls`,v:u.total.toLocaleString()})]})]}),(0,D.jsxs)(Dh,{title:`Rules directories`,status:d.local_count>0?`ok`:`warn`,children:[(0,D.jsx)(Oh,{k:`Local`,v:`${d.local_count} .rules file${d.local_count===1?``:`s`}`}),(0,D.jsx)(Oh,{k:`Local path`,v:Th(d.local_dir,g),mono:!0}),(0,D.jsx)(Oh,{k:`Global`,v:`${d.global_count} .rules file${d.global_count===1?``:`s`}`}),(0,D.jsx)(Oh,{k:`Global path`,v:Th(d.global_dir,g),mono:!0})]}),(0,D.jsx)(Dh,{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)(Eh,{file:e,home:g},e.path))})}),(0,D.jsx)(Dh,{title:`Adapters, hooks & MCP files`,hint:e.active_adapter?`Active: ${kh[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)(Ah,{adapter:e,home:g},e.id))})}),(0,D.jsxs)(Dh,{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)(Eh,{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)(xh,{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:wh(e.installed_at)})]}),(0,D.jsx)(`code`,{className:`block truncate text-[11px] text-[var(--color-fg-2)]`,title:e.path,children:Th(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 Mh=[{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`}],Nh=[{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`}}],Ph=`ssg.tryit.intro-dismissed.v1`,Fh=`ssg.tryit.os.v1`,Ih={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 Lh(){if(typeof window>`u`)return`linux`;try{let e=window.localStorage.getItem(Fh);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 Rh(e){return e===`windows`?`Windows`:e===`macos`?`Mac`:`Linux`}function zh(e){return e===`windows`?`⊞`:e===`macos`?`🍎`:`🐧`}function Bh(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 Vh({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 Hh({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 ${Rh(n)}`,children:[zh(n),` `,Rh(n)]},n))})}function Uh({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)(Vh,{n:1,label:`Pick a scenario below`}),(0,D.jsx)(Vh,{n:2,label:`Click Run`}),(0,D.jsx)(Vh,{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)(Hh,{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 Wh({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:Bh(e,n)})]})}function Gh(){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(Ph)===`1`}catch{return!1}}),[g,v]=(0,_.useState)(()=>Lh()),[y,b]=(0,_.useState)(!1);function x(e){v(e);try{window.localStorage.setItem(Fh,e)}catch{}}function S(){h(!0);try{window.localStorage.setItem(Ph,`1`)}catch{}}function C(){h(!1);try{window.localStorage.removeItem(Ph)}catch{}}let w=Nh.find(t=>t.id===e),T=(0,_.useMemo)(()=>{let e=new Map;for(let t of Nh){let n=e.get(t.category)??[];n.push(t),e.set(t.category,n)}return Mh.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&&Nh.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 A(){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 j=n?Ih[n.decision]??Ih.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)(Uh,{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)(Hh,{os:g,setOs:x})]}),(0,D.jsx)(`div`,{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)(Wh,{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`,{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 · `,Rh(g)]}),(0,D.jsx)(`code`,{className:`font-mono text-[12px] text-[var(--color-fg-1)] break-all`,children:Bh(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 $m({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 Pm(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 Nm(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 eh({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)(Y,{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)(Z,{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 ${Om[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:zm(e.lastBlockAskSeen)}),(0,D.jsx)($m,{entry:e.entry,ruleId:e.ruleId,onJump:n,onChanged:r})]},e.ruleId)})})})]})})}function th({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&&Tm.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)(Y,{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:Om[c.decision]??`text-[var(--color-fg-2)]`,children:c.decision}),` `,`· `,zm(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)(Z,{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 ${Om[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:zm(c.timestamp)}),(0,D.jsx)($m,{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 ${Om[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:zm(e.lastSeen)}),(0,D.jsx)($m,{entry:i,ruleId:e.ruleId,onJump:n,onChanged:r})]},e.ruleId)})})]})]})]})}):(0,D.jsx)(Y,{children:(0,D.jsxs)(Z,{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 nh({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 rh({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 ih({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)(Y,{children:(0,D.jsx)(Z,{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()]})]}),Dm.map(n=>{let o=r[n]??0,s=i[n]??0,c=e===n,l=o===0,u=Om[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)})]})]})})})}function ah(){let{mode:e,setMode:t}=oe(),n=e===`pro`,r=Vt(Em)[`rules-changed`],[i,a]=(0,_.useState)(!0),[o,s]=(0,_.useState)(0);(0,_.useEffect)(()=>{if(!i)return;let e=setInterval(()=>{s(e=>e+1)},jm);return()=>clearInterval(e)},[i]);let{data:c,refetch:l}=H(Mm(`/api/json/rules`,r+o),[r,o]),[u,d]=(0,_.useState)(`7d`),{data:f,refetch:p}=H(Mm(`/api/json/rules-stats?window=${u}`,o),[r,u,o]),{data:m,refetch:h}=H(Mm(`/api/json/rules-performance`,o),[r,o]),{data:g,refetch:v}=H(Mm(`/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`),[A,j]=(0,_.useState)(new Set),[M,N]=(0,_.useState)(new Set),[ee,te]=(0,_.useState)(!1),P=Bt(`voice`),[F,I]=(0,_.useState)(()=>new URLSearchParams(window.location.search).get(`highlight`)??``),ne=(0,_.useRef)(null);(0,_.useEffect)(()=>{ne.current&&ne.current.scrollIntoView({behavior:`smooth`,block:`center`})},[]);let re=f?.stats??{},L=(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]);function R(){l(),p(),h(),v(),s(e=>e+1)}function z(e){b(``),S(`all`),w(`all`),E(`none`),I(e);let t=new URL(window.location.href);t.searchParams.set(`highlight`,e),window.history.replaceState(null,``,t.toString())}let ie=(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]),B=(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||Tm.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 ae=y.toLowerCase(),se=(()=>{let e=new Set;if(!ae||!g)return e;for(let t of g.rows){if(!t.ruleId)continue;let n=(t.input??``).toLowerCase(),r=(t.tool??``).toLowerCase();(n.includes(ae)||r.includes(ae))&&e.add(t.ruleId)}return e})();function ce(e){if(x===`enabled`&&!e.enabled||x===`disabled`&&e.enabled)return!1;let t=re[e.id],n=t?.hits??0;return!(x===`hit`&&n===0||x===`never`&&n>0||C!==`all`&&e.decision!==C||T===`hot`&&!ie.has(e.id)||T===`noisy`&&!B.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 le=(()=>{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=re[r.id]?.hits??0;n>0&&(t[r.decision]=(t[r.decision]??0)+n)}return{ruleCount:e,hits:t}})(),ue={hot:0,blocked:0,noisy:B.size,slow:0,never:0,disabled:0};for(let e of c.rulesets)for(let t of e.rules){ie.has(t.id)&&ue.hot++,t.decision===`block`&&t.enabled&&ue.blocked++;let e=re[t.id];e&&e.avgDurationMs>50&&ue.slow++,t.enabled&&(!e||e.hits===0)&&ue.never++,t.enabled||ue.disabled++}let de=c.rulesets.map(e=>{let t=e.rules.filter(e=>ae&&!e.id.toLowerCase().includes(ae)&&!e.message.toLowerCase().includes(ae)&&!se.has(e.id)?!1:ce(e));return O!==`default`&&(t=[...t].sort((e,t)=>O===`hits`?(re[t.id]?.hits??0)-(re[e.id]?.hits??0):O===`slowest`?(re[t.id]?.avgDurationMs??0)-(re[e.id]?.avgDurationMs??0):O===`recent`?(re[t.id]?.lastSeen??0)-(re[e.id]?.lastSeen??0):O===`alpha`?e.id.localeCompare(t.id):0)),{...e,rules:t}}).filter(e=>e.rules.length>0||!ae&&x===`all`&&C===`all`&&T===`none`),fe=c.rulesets.reduce((e,t)=>e+t.rules.length,0),pe=c.rulesets.reduce((e,t)=>e+t.rules.filter(e=>e.enabled).length,0),me=new Set;for(let e of de)for(let t of e.rules)me.add(t.id);let he=ae||x!==`all`||C!==`all`||T!==`none`?me.size:null,V=[];for(let e of A){let t=L.get(e);t&&V.push({ruleId:e,file:t.file})}function ge(e){j(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function _e(e){j(t=>{let n=new Set(t);if(e.rules.every(e=>n.has(e.id)))for(let t of e.rules)n.delete(t.id);else for(let t of e.rules)n.add(t.id);return n})}function ve(){j(e=>{let t=new Set(e);for(let e of me)t.add(e);return t})}function ye(e){N(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function be(e,t){V.length!==0&&(e===`enable`?await Fm(V,!0):e===`disable`?await Fm(V,!1):e===`delete`?(await Lm(V),j(new Set)):e===`decision`&&t&&await Im(V,t),R())}return(0,D.jsxs)(`div`,{className:`space-y-4`,children:[(0,D.jsxs)(`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:[pe,(0,D.jsxs)(`span`,{className:`text-[var(--color-fg-4)]`,children:[`/`,fe]}),(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`,{className:`ml-auto flex items-center gap-2`,children:P&&(0,D.jsx)(`button`,{type:`button`,onClick:()=>te(!0),className:`px-2 py-1 text-[11px] font-mono uppercase tracking-wider rounded-sm border border-[var(--color-brand)]/60 bg-[var(--color-brand)]/10 text-[var(--color-fg-0)] hover:bg-[var(--color-brand)]/20 cursor-pointer transition-colors`,title:`Dictate or type a new rule — deterministic match, no inference cost`,children:`🎙 dictate rule`})})]}),(0,D.jsx)(Gm,{perf:m,triggers:g,decisionAggregates:le,livePoll:i,onTogglePoll:()=>a(e=>!e),statsWindow:u,onWindowChange:d,mode:e,onModeChange:t}),(0,D.jsx)(Y,{children:(0,D.jsxs)(Z,{className:`px-3 py-2.5 space-y-2.5`,children:[(0,D.jsx)(rh,{value:y,onChange:b,matchCount:he,sortKey:O,onSortChange:k}),(0,D.jsx)(nh,{chip:T,onChange:E,counts:ue}),(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)(ih,{decisionFilter:C,onChange:w,totalRules:fe,ruleCount:le.ruleCount,hits:le.hits,window:u}),n&&(0,D.jsx)(qm,{stats:re,ruleIndex:L,triggers:g?.rows,statsWindow:u,onJump:z}),(0,D.jsx)(eh,{stats:re,ruleIndex:L,onJump:z,onChanged:R}),(0,D.jsx)(th,{triggers:g?.rows,ruleIndex:L,onJump:z,onChanged:R}),n&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(Km,{perf:m}),(0,D.jsx)(Jm,{totalRules:fe,activeRules:pe,onChanged:R}),(0,D.jsx)(Wm,{}),(0,D.jsx)(Qm,{})]}),(0,D.jsx)(Xm,{selected:V,onClear:()=>j(new Set),onApply:be}),me.size>0&&(0,D.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] font-mono`,children:[(0,D.jsxs)(`button`,{onClick:ve,className:`uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:[`select `,me.size,` visible`]}),A.size>0&&(0,D.jsx)(`button`,{onClick:()=>j(new Set),className:`uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:`clear selection`})]}),de.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:de.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=>A.has(e.id)),a=!i&&e.rules.some(e=>A.has(e.id)),o=Bm(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)(Y,{children:(0,D.jsxs)(`details`,{open:t||!!ae||x!==`all`||C!==`all`||T!==`none`||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:()=>_e(e),onClick:e=>e.stopPropagation(),className:`accent-[var(--color-brand)] cursor-pointer`,"aria-label":`Select all rules in ${e.file}`}),(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`,children:e.file}),s&&(0,D.jsx)(il,{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)(Z,{className:`py-0`,children:[e.rules.length===0?(0,D.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-3)] py-3`,children:`no rules in this file`}):(0,D.jsx)(`div`,{className:`divide-y divide-[var(--color-line-0)]`,children:e.rules.map(t=>{let r=t.id===F,i=A.has(t.id),a=re[t.id],o=M.has(t.id),s=a&&a.hits>0?Bm(g?.rows,20,3600*1e3,e=>e.ruleId===t.id):null;return(0,D.jsx)(`div`,{ref:r?ne:null,className:`py-2.5 ${r?`bg-amber-400/8 border-l-2 border-l-amber-400/60 -mx-3 px-3 -my-px`:i?`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:i,onChange:()=>ge(t.id),className:`mt-1 accent-[var(--color-brand)] cursor-pointer`,"aria-label":`Select rule ${t.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:t.decision,onChange:async n=>{await Pm(t.id,e.file,n.target.value),R()},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 ${Om[t.decision]??`text-[var(--color-fg-2)]`}`,children:Dm.map(e=>(0,D.jsx)(`option`,{value:e,children:e},e))}),(0,D.jsx)($i,{ruleId:t.id,children:(0,D.jsx)(`code`,{className:`text-xs font-mono text-[var(--color-fg-0)] break-all`,children:t.id})}),s&&(0,D.jsx)(il,{data:s,width:50,height:14,color:km[t.decision]??`#a8a29e`}),a&&a.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:a.hits}),` `,`hit`,a.hits===1?``:`s`,a.avgDurationMs>0&&(0,D.jsxs)(D.Fragment,{children:[` · `,(0,D.jsxs)(`span`,{className:a.avgDurationMs>50?`text-amber-300`:`text-[var(--color-fg-1)]`,children:[a.avgDurationMs.toFixed(1),`ms`]}),` `,`avg`]}),` · `,zm(a.lastSeen)]}),(!a||a.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:()=>ye(t.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:o?`hide audit`:`audit`})]}),(0,D.jsx)(`p`,{className:`text-xs text-[var(--color-fg-2)] truncate`,children:t.message}),n&&o&&(0,D.jsx)(Zm,{ruleId:t.id})]})]}),(0,D.jsx)(Um,{rule:t,file:e.file,onToggle:async()=>{await Nm(t.id,e.file),R()}})]})},t.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.file)})}),P&&(0,D.jsx)(bm,{open:ee,onClose:()=>te(!1),onSaved:R})]})}var oh={allow:`#4ade80`,block:`#f87171`,ask:`#fbbf24`,force:`#a78bfa`,log:`#7dd3fc`,shadow:`#94a3b8`},sh=[`<1ms`,`1-10ms`,`10-100ms`,`100ms-1s`,`>1s`];function ch(e){return e?new Date(e*1e3).toLocaleString():`—`}function lh(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 uh({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 dh({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:oh.allow},{label:`block`,value:a,color:oh.block},{label:`ask`,value:o,color:oh.ask},{label:`force`,value:s,color:oh.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 fh({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 ph({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:sh.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 mh({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=Vt([`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`,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)(hh,{label:`Evals`,value:f.evals.toLocaleString()}),(0,D.jsx)(hh,{label:`Blocked`,value:f.blocked>0?`${f.blocked} (${p}%)`:`0`,color:f.blocked>0?`text-rose-300`:void 0}),(0,D.jsx)(hh,{label:`Asked`,value:f.asked.toLocaleString(),color:`text-amber-300`}),(0,D.jsx)(hh,{label:`Started`,value:ch(f.started_at)}),(0,D.jsx)(hh,{label:`Duration`,value:lh(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)(uh,{title:`Decisions`,hint:`${f.evals} evals`,children:(0,D.jsx)(dh,{allowed:f.allowed,blocked:f.blocked,asked:f.asked,forced:f.forced})}),(0,D.jsx)(uh,{title:`Top tools`,hint:`${r.tools.top.length+ +(r.tools.other>0)} buckets`,children:(0,D.jsx)(fh,{rows:s,emptyMessage:`No tool activity.`})}),(0,D.jsx)(uh,{title:`Top rules`,hint:`${c.length} hit`,children:(0,D.jsx)(fh,{rows:c,emptyMessage:`No rules matched this session.`})}),(0,D.jsx)(uh,{title:`Latency`,hint:`duration buckets`,children:(0,D.jsx)(ph,{latency:d})})]}),(0,D.jsx)(`div`,{className:`flex-1 min-h-[400px]`,children:(0,D.jsx)(Nd,{sessionKey:e,entries:u,loading:i,error:null,playingIndex:-1})})]})}function hh({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 gh=100,_h={"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 vh(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 yh(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 bh({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 ${_h[e]??`bg-white/5 text-[var(--color-fg-3)] border-white/10`}`,children:e})}function xh(){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=${gh}&offset=${e}`,[i]),u=Vt([`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`,{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`,{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`,{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)(bh,{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:vh(t.started_at)}),(0,D.jsx)(`td`,{className:`px-3 py-2 text-[var(--color-fg-3)]`,children:yh(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>gh&&(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+gh,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-gh)),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+gh>=f,onClick:()=>t(e+gh),className:`px-3 py-1 border border-[var(--color-line-1)] rounded-sm disabled:opacity-30 hover:bg-white/5`,children:`Next →`})]})]})]})}function Sh({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 Ch({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 wh(e){return e===void 0?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function Th(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 Eh(e,t){return t&&e.startsWith(`${t}/`)?`~/${e.slice(t.length+1)}`:e===t?`~`:e}function Dh({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)(Sh,{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:Eh(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:wh(e.size)}),(0,D.jsx)(`span`,{className:`text-[10.5px] text-[var(--color-fg-3)] min-w-[60px] text-right`,children:Th(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 Oh({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)(Sh,{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 kh({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 Ah={"claude-code":`Claude Code`,cursor:`Cursor`,codex:`Codex CLI`,pi:`Pi Agent`,gemini:`Gemini CLI`,antigravity:`Antigravity`,copilot:`GitHub Copilot`};function jh({adapter:e,home:t}){let n=Ah[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)(Sh,{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)(Dh,{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 Mh(){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`,{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)(Sh,{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:Eh(_,g)})]})]}),(0,D.jsx)(Oh,{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)(Sh,{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)(Ch,{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)(Oh,{title:`License & authentication`,status:a.status===`healthy`||a.status===`healthy_free`?`ok`:`warn`,children:[(0,D.jsx)(kh,{k:`Tier`,v:a.tier_label}),(0,D.jsx)(kh,{k:`Status`,v:a.status}),(0,D.jsx)(kh,{k:`Account`,v:a.email??`—`}),(0,D.jsx)(kh,{k:`Auth method`,v:a.auth_method??`—`}),(0,D.jsx)(kh,{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)(Dh,{file:a.license_file,home:g}),(0,D.jsx)(Dh,{file:a.hosts_file,home:g})]})]}),(0,D.jsxs)(Oh,{title:`Runtime processes`,status:o.alive&&s.alive?`ok`:`warn`,children:[(0,D.jsx)(kh,{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)(kh,{k:`Daemon socket`,v:o.socket_exists?`present`:`missing`,mono:!0}),(0,D.jsx)(kh,{k:`Dashboard (serve)`,v:s.alive?`running — PID ${s.pid}`:`not running`}),(0,D.jsx)(kh,{k:`Native engine`,v:c.available?`loaded — sub-ms eval available`:`unavailable — TypeScript fallback`})]}),(0,D.jsxs)(Oh,{title:`Database & MCP`,status:l.status,children:[(0,D.jsx)(kh,{k:`Rules in DB`,v:l.rules.toLocaleString()}),(0,D.jsx)(kh,{k:`Audit log rows`,v:l.audit_rows.toLocaleString()}),(0,D.jsx)(kh,{k:`DB path`,v:Eh(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)(kh,{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)(kh,{k:`All-time calls`,v:u.total.toLocaleString()})]})]}),(0,D.jsxs)(Oh,{title:`Rules directories`,status:d.local_count>0?`ok`:`warn`,children:[(0,D.jsx)(kh,{k:`Local`,v:`${d.local_count} .rules file${d.local_count===1?``:`s`}`}),(0,D.jsx)(kh,{k:`Local path`,v:Eh(d.local_dir,g),mono:!0}),(0,D.jsx)(kh,{k:`Global`,v:`${d.global_count} .rules file${d.global_count===1?``:`s`}`}),(0,D.jsx)(kh,{k:`Global path`,v:Eh(d.global_dir,g),mono:!0})]}),(0,D.jsx)(Oh,{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)(Dh,{file:e,home:g},e.path))})}),(0,D.jsx)(Oh,{title:`Adapters, hooks & MCP files`,hint:e.active_adapter?`Active: ${Ah[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)(jh,{adapter:e,home:g},e.id))})}),(0,D.jsxs)(Oh,{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)(Dh,{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)(Sh,{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:Th(e.installed_at)})]}),(0,D.jsx)(`code`,{className:`block truncate text-[11px] text-[var(--color-fg-2)]`,title:e.path,children:Eh(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 Nh=[{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`}],Ph=[{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`}}],Fh=`ssg.tryit.intro-dismissed.v1`,Ih=`ssg.tryit.os.v1`,Lh={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 Rh(){if(typeof window>`u`)return`linux`;try{let e=window.localStorage.getItem(Ih);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 zh(e){return e===`windows`?`Windows`:e===`macos`?`Mac`:`Linux`}function Bh(e){return e===`windows`?`⊞`:e===`macos`?`🍎`:`🐧`}function Vh(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 Hh({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 Uh({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 ${zh(n)}`,children:[Bh(n),` `,zh(n)]},n))})}function Wh({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)(Hh,{n:1,label:`Pick a scenario below`}),(0,D.jsx)(Hh,{n:2,label:`Click Run`}),(0,D.jsx)(Hh,{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)(Uh,{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 Gh({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:Vh(e,n)})]})}function Kh(){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(Fh)===`1`}catch{return!1}}),[g,v]=(0,_.useState)(()=>Rh()),[y,b]=(0,_.useState)(!1);function x(e){v(e);try{window.localStorage.setItem(Ih,e)}catch{}}function S(){h(!0);try{window.localStorage.setItem(Fh,`1`)}catch{}}function C(){h(!1);try{window.localStorage.removeItem(Fh)}catch{}}let w=Ph.find(t=>t.id===e),T=(0,_.useMemo)(()=>{let e=new Map;for(let t of Ph){let n=e.get(t.category)??[];n.push(t),e.set(t.category,n)}return Nh.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&&Ph.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 A(){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 j=n?Lh[n.decision]??Lh.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)(Wh,{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)(Uh,{os:g,setOs:x})]}),(0,D.jsx)(`div`,{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)(Gh,{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`,{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 · `,zh(g)]}),(0,D.jsx)(`code`,{className:`font-mono text-[12px] text-[var(--color-fg-1)] break-all`,children:Vh(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&&j&&(0,D.jsxs)(`div`,{id:`tryit-result`,className:`rounded-xl border p-4 ${j.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 ${j.bg} ${j.color}`,children:j.icon}),(0,D.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,D.jsx)(`p`,{className:`text-[15px] font-semibold ${j.color}`,children:j.label}),(0,D.jsx)(`p`,{className:`text-[12.5px] mt-0.5 ${j.color} opacity-90`,children:j.headline})]})]}),(0,D.jsx)(`p`,{className:`text-[12.5px] text-[var(--color-fg-1)] leading-relaxed`,children:j.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`,{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:A,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 Kh=[{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`}],qh=[{value:`p4`,label:`P4 — Low`},{value:`p3`,label:`P3 — Normal`},{value:`p2`,label:`P2 — High (4h SLA)`},{value:`p1`,label:`P1 — Critical (1h SLA)`}],Jh=5,Yh=8*1024*1024;function Xh(){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=Jh-u.length,r=t.slice(0,n);r.length<t.length&&S(`Maximum ${Jh} images. Some were dropped.`);let i=r.filter(e=>e.size>Yh);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)(Y,{children:(0,D.jsx)(Z,{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)(Y,{children:(0,D.jsxs)(Z,{children:[(0,D.jsx)(`label`,{className:`block overline mb-2`,children:`type`}),(0,D.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:Kh.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)(Y,{children:(0,D.jsxs)(Z,{children:[(0,D.jsx)(`label`,{className:`block overline mb-2`,children:`severity`}),(0,D.jsx)(`div`,{className:`flex gap-2 flex-wrap`,children:qh.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)(Y,{children:(0,D.jsx)(Z,{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`,{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`,{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)(Y,{children:(0,D.jsxs)(Z,{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 `,Jh,` images)`]})]}),u.length<Jh&&(0,D.jsxs)(`div`,{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)(J,{type:`submit`,variant:`primary`,disabled:f,children:f?`submitting…`:`submit feedback`})]})]})}function Zh(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 Qh={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 $h(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 eg({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 tg(){let{data:e}=H(`/api/json/counters`,[Vt([`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)(ng,{value:t,label:`evaluated`,tone:`default`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(ng,{value:n,label:`blocked`,tone:`red`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(ng,{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 ng({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 rg({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)(eg,{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 ig(){let{data:e}=H(`/api/state/activity?limit=5`,[Vt([`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:Qh[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:Qh[e.decision]??`var(--color-fg-2)`},children:$h(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:wa(e.tool)}),(0,D.jsx)(`span`,{className:`hig-feed-row-time`,children:Zh(e.timestamp)})]},e.id??t))})}function ag(){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`,{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)(tg,{})})]}),(0,D.jsx)(`section`,{children:(0,D.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-3 gap-3`,children:[(0,D.jsx)(rg,{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)(rg,{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)(rg,{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`,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)(ig,{})})]})]})})}var og={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`})]})},sg=[{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:`/workspace`,label:`Workspace`,icon:`workspace`},{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`}]}],cg=[{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 lg(e){return ug(e===`newcomer`?cg:sg)}function ug(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 dg(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 fg(){let{data:e}=H(`/api/json/daemon-status`,[Vt([`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?dg(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 pg(){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 mg(){let{data:e}=H(`/api/json/license`,[Vt([`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 hg(){let{data:e}=H(`/api/json/license`,[Vt([`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 gg(){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 _g(e){let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`}var vg={on:`soft`,soft:`audit`,audit:`off`,off:`on`};function yg(){let{data:e,refetch:t}=H(`/api/json/mode`,[Vt([`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 ${_g(e.rearmAt)}`:``,c=`SSG · ${i.toUpperCase()}${s}`;return(0,D.jsxs)(`button`,{onClick:e=>{e.shiftKey?a(i===`off`?`audit`:`on`):a(vg[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 bg(){let{data:e,refetch:t}=H(`/api/json/mode`,[Vt([`mode-changed`])[`mode-changed`]]),n=e?.mode??`on`;if(n===`on`)return null;let r=e?.rearmAt===void 0?``:` Auto-restores at ${_g(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 xg({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 Sg(){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 Cg(){let{data:e}=H(`/api/json/mcp-status`,[Vt([`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 wg(){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 Tg(e,t){if(e===`/`)return t===`newcomer`?(0,D.jsx)(ag,{}):(0,D.jsx)(_u,{});if(e===`/classic`)return(0,D.jsx)(ad,{});if(e===`/graph`)return(0,D.jsx)(kf,{});if(e===`/sessions`)return(0,D.jsx)(bh,{});if(e.startsWith(`/sessions/`)){let t=decodeURIComponent(e.slice(10));if(t)return(0,D.jsx)(ph,{sessionKey:t})}if(e===`/debug`)return(0,D.jsx)(cd,{});if(e===`/rules`)return(0,D.jsx)(ih,{});if(e===`/audit`)return(0,D.jsx)(qa,{});if(e===`/approvals`)return(0,D.jsx)(ga,{});if(e===`/profile`)return(0,D.jsx)(vm,{});if(e===`/agents`)return(0,D.jsx)(pn,{});if(e===`/notifications`)return(0,D.jsx)(up,{});if(e===`/setup`)return(0,D.jsx)(jh,{});if(e===`/try`)return(0,D.jsx)(Gh,{});if(e===`/guardrails`)return(0,D.jsx)(If,{});if(e===`/hub/connect`)return(0,D.jsx)(Af,{});if(e===`/hub/publish`)return(0,D.jsx)(Yf,{});if(e.startsWith(`/hub/`)){let t=e.slice(5);if(t)return(0,D.jsx)(Mf,{id:t})}return e===`/hub`?(0,D.jsx)(qf,{}):e===`/monitor`?(0,D.jsx)(cp,{}):e===`/observability`?(0,D.jsx)(Lp,{}):e===`/plugins`?(0,D.jsx)(im,{}):e===`/support`?(0,D.jsx)(Xh,{}):(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 Eg(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===`/support`?`Support & Feedback`:`SigmaShake`}function Dg(e){history.pushState(null,``,e),window.dispatchEvent(new PopStateEvent(`popstate`))}function Og({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 kg({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`,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:og[e.icon]}),(0,D.jsx)(`span`,{children:e.label})]},e.path))]},e.title))})]})}function Ag(){let[e,t]=(0,_.useState)(window.location.pathname),[n,r]=(0,_.useState)(0),[i,a]=(0,_.useState)(!1),{otherTabCount:o}=Kt(),{mode:s,setMode:c}=oe(),l=Bt(`voice`),u=lg(s),d=Eg(e,s),[f,p]=(0,_.useState)(0),m=(0,_.useMemo)(()=>({navigate:e=>Dg(e),async setSsgMode(e){await fetch(`/api/json/mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({mode:e})})},async setAskMode(e){await fetch(`/api/json/ask-mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({mode:e})})},setUiMode:e=>c(e),refresh:()=>r(e=>e+1),hardReload:()=>{try{window.location.reload()}catch{}}}),[c]);return(0,_.useEffect)(()=>{let e=e=>{let t=e.detail;if(!t?.selector)return;let n=null;try{n=document.querySelector(t.selector)}catch{return}if(!n)return;n.classList.remove(`voice-nav-pulse`),n.offsetWidth,n.classList.add(`voice-nav-pulse`);let r=window.setTimeout(()=>{n?.classList.remove(`voice-nav-pulse`)},1100);return()=>window.clearTimeout(r)},t=()=>p(e=>e+1);return window.addEventListener(`ssg:voice-target`,e),window.addEventListener(`ssg:voice-page-morph`,t),()=>{window.removeEventListener(`ssg:voice-target`,e),window.removeEventListener(`ssg:voice-page-morph`,t)}},[]),(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/`)||(e.preventDefault(),Dg(n))};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[]),(0,D.jsxs)(`div`,{className:`hig-app`,children:[(0,D.jsx)(kg,{pathname:e,navSections:u,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:d}),(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)(xt,{}),(0,D.jsx)(yg,{}),(0,D.jsx)(gg,{}),(0,D.jsx)(wg,{}),(0,D.jsx)(Cg,{}),(0,D.jsx)(fg,{}),(0,D.jsx)(xg,{onRefresh:()=>r(e=>e+1)}),(0,D.jsx)(Sg,{}),(0,D.jsx)(se,{}),(0,D.jsx)(ne,{}),(0,D.jsx)(O,{}),(0,D.jsx)(De,{})]})]}),(0,D.jsx)(bg,{}),(0,D.jsx)(Og,{count:o}),(0,D.jsx)(hg,{}),(0,D.jsx)(mg,{}),(0,D.jsx)(pg,{}),(0,D.jsx)(`main`,{className:`hig-content px-6 py-6`,children:Tg(e,s)},n),f>0&&(0,D.jsx)(`div`,{className:`voice-page-flash`,"aria-hidden":`true`},f)]}),l&&(0,D.jsx)(At,{actions:m})]})}var jg=document.getElementById(`app-root`);if(!jg)throw Error(`Missing #app-root`);g.createRoot(jg).render((0,D.jsx)(_.StrictMode,{children:(0,D.jsx)(Ag,{})}));
57
+ disabled:opacity-40 disabled:cursor-not-allowed`,children:`Run`})]})]})]})]})}var qh=[{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`}],Jh=[{value:`p4`,label:`P4 — Low`},{value:`p3`,label:`P3 — Normal`},{value:`p2`,label:`P2 — High (4h SLA)`},{value:`p1`,label:`P1 — Critical (1h SLA)`}],Yh=5,Xh=8*1024*1024;function Zh(){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=Yh-u.length,r=t.slice(0,n);r.length<t.length&&S(`Maximum ${Yh} images. Some were dropped.`);let i=r.filter(e=>e.size>Xh);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)(Y,{children:(0,D.jsx)(Z,{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)(Y,{children:(0,D.jsxs)(Z,{children:[(0,D.jsx)(`label`,{className:`block overline mb-2`,children:`type`}),(0,D.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:qh.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)(Y,{children:(0,D.jsxs)(Z,{children:[(0,D.jsx)(`label`,{className:`block overline mb-2`,children:`severity`}),(0,D.jsx)(`div`,{className:`flex gap-2 flex-wrap`,children:Jh.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)(Y,{children:(0,D.jsx)(Z,{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`,{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`,{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)(Y,{children:(0,D.jsxs)(Z,{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 `,Yh,` images)`]})]}),u.length<Yh&&(0,D.jsxs)(`div`,{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)(J,{type:`submit`,variant:`primary`,disabled:f,children:f?`submitting…`:`submit feedback`})]})]})}function Qh(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 $h={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 eg(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 tg({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 ng(){let{data:e}=H(`/api/json/counters`,[Vt([`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)(rg,{value:t,label:`evaluated`,tone:`default`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(rg,{value:n,label:`blocked`,tone:`red`}),(0,D.jsx)(`span`,{className:`text-[var(--color-fg-4)]`,children:`·`}),(0,D.jsx)(rg,{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 rg({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 ig({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)(tg,{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 ag(){let{data:e}=H(`/api/state/activity?limit=5`,[Vt([`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:$h[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:$h[e.decision]??`var(--color-fg-2)`},children:eg(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:wa(e.tool)}),(0,D.jsx)(`span`,{className:`hig-feed-row-time`,children:Qh(e.timestamp)})]},e.id??t))})}function og(){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`,{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)(ng,{})})]}),(0,D.jsx)(`section`,{children:(0,D.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-3 gap-3`,children:[(0,D.jsx)(ig,{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)(ig,{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)(ig,{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`,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)(ag,{})})]})]})})}var sg={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`})]})},cg=[{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:`/workspace`,label:`Workspace`,icon:`workspace`},{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`}]}],lg=[{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 ug(e){return dg(e===`newcomer`?lg:cg)}function dg(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 fg(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 pg(){let{data:e}=H(`/api/json/daemon-status`,[Vt([`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?fg(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 mg(){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 hg(){let{data:e}=H(`/api/json/license`,[Vt([`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 gg(){let{data:e}=H(`/api/json/license`,[Vt([`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 _g(){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 vg(e){let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`}var yg={on:`soft`,soft:`audit`,audit:`off`,off:`on`};function bg(){let{data:e,refetch:t}=H(`/api/json/mode`,[Vt([`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 ${vg(e.rearmAt)}`:``,c=`SSG · ${i.toUpperCase()}${s}`;return(0,D.jsxs)(`button`,{onClick:e=>{e.shiftKey?a(i===`off`?`audit`:`on`):a(yg[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 xg(){let{data:e,refetch:t}=H(`/api/json/mode`,[Vt([`mode-changed`])[`mode-changed`]]),n=e?.mode??`on`;if(n===`on`)return null;let r=e?.rearmAt===void 0?``:` Auto-restores at ${vg(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 Sg({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 Cg(){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 wg(){let{data:e}=H(`/api/json/mcp-status`,[Vt([`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 Tg(){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 Eg(e,t){if(e===`/`)return t===`newcomer`?(0,D.jsx)(og,{}):(0,D.jsx)(_u,{});if(e===`/classic`)return(0,D.jsx)(ad,{});if(e===`/graph`)return(0,D.jsx)(kf,{});if(e===`/sessions`)return(0,D.jsx)(xh,{});if(e.startsWith(`/sessions/`)){let t=decodeURIComponent(e.slice(10));if(t)return(0,D.jsx)(mh,{sessionKey:t})}if(e===`/debug`)return(0,D.jsx)(cd,{});if(e===`/rules`)return(0,D.jsx)(ah,{});if(e===`/audit`)return(0,D.jsx)(qa,{});if(e===`/approvals`)return(0,D.jsx)(ga,{});if(e===`/profile`)return(0,D.jsx)(vm,{});if(e===`/agents`)return(0,D.jsx)(pn,{});if(e===`/notifications`)return(0,D.jsx)(up,{});if(e===`/setup`)return(0,D.jsx)(Mh,{});if(e===`/try`)return(0,D.jsx)(Kh,{});if(e===`/guardrails`)return(0,D.jsx)(If,{});if(e===`/hub/connect`)return(0,D.jsx)(Af,{});if(e===`/hub/publish`)return(0,D.jsx)(Yf,{});if(e.startsWith(`/hub/`)){let t=e.slice(5);if(t)return(0,D.jsx)(Mf,{id:t})}return e===`/hub`?(0,D.jsx)(qf,{}):e===`/monitor`?(0,D.jsx)(cp,{}):e===`/observability`?(0,D.jsx)(Lp,{}):e===`/plugins`?(0,D.jsx)(im,{}):e===`/support`?(0,D.jsx)(Zh,{}):(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 Dg(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===`/support`?`Support & Feedback`:`SigmaShake`}function Og(e){history.pushState(null,``,e),window.dispatchEvent(new PopStateEvent(`popstate`))}function kg({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 Ag({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`,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:sg[e.icon]}),(0,D.jsx)(`span`,{children:e.label})]},e.path))]},e.title))})]})}function jg(){let[e,t]=(0,_.useState)(window.location.pathname),[n,r]=(0,_.useState)(0),[i,a]=(0,_.useState)(!1),{otherTabCount:o}=Kt(),{mode:s,setMode:c}=oe(),l=Bt(`voice`),u=ug(s),d=Dg(e,s),[f,p]=(0,_.useState)(0),m=(0,_.useMemo)(()=>({navigate:e=>Og(e),async setSsgMode(e){await fetch(`/api/json/mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({mode:e})})},async setAskMode(e){await fetch(`/api/json/ask-mode`,{method:`POST`,headers:{"Content-Type":`application/json`,...U()},body:JSON.stringify({mode:e})})},setUiMode:e=>c(e),refresh:()=>r(e=>e+1),hardReload:()=>{try{window.location.reload()}catch{}}}),[c]);return(0,_.useEffect)(()=>{let e=e=>{let t=e.detail;if(!t?.selector)return;let n=null;try{n=document.querySelector(t.selector)}catch{return}if(!n)return;n.classList.remove(`voice-nav-pulse`),n.offsetWidth,n.classList.add(`voice-nav-pulse`);let r=window.setTimeout(()=>{n?.classList.remove(`voice-nav-pulse`)},1100);return()=>window.clearTimeout(r)},t=()=>p(e=>e+1);return window.addEventListener(`ssg:voice-target`,e),window.addEventListener(`ssg:voice-page-morph`,t),()=>{window.removeEventListener(`ssg:voice-target`,e),window.removeEventListener(`ssg:voice-page-morph`,t)}},[]),(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/`)||(e.preventDefault(),Og(n))};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[]),(0,D.jsxs)(`div`,{className:`hig-app`,children:[(0,D.jsx)(Ag,{pathname:e,navSections:u,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:d}),(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)(xt,{}),(0,D.jsx)(bg,{}),(0,D.jsx)(_g,{}),(0,D.jsx)(Tg,{}),(0,D.jsx)(wg,{}),(0,D.jsx)(pg,{}),(0,D.jsx)(Sg,{onRefresh:()=>r(e=>e+1)}),(0,D.jsx)(Cg,{}),(0,D.jsx)(se,{}),(0,D.jsx)(ne,{}),(0,D.jsx)(O,{}),(0,D.jsx)(De,{})]})]}),(0,D.jsx)(xg,{}),(0,D.jsx)(kg,{count:o}),(0,D.jsx)(gg,{}),(0,D.jsx)(hg,{}),(0,D.jsx)(mg,{}),(0,D.jsx)(`main`,{className:`hig-content px-6 py-6`,children:Eg(e,s)},n),f>0&&(0,D.jsx)(`div`,{className:`voice-page-flash`,"aria-hidden":`true`},f)]}),l&&(0,D.jsx)(At,{actions:m})]})}var Mg=document.getElementById(`app-root`);if(!Mg)throw Error(`Missing #app-root`);g.createRoot(Mg).render((0,D.jsx)(_.StrictMode,{children:(0,D.jsx)(jg,{})}));