@sigmashake/ssg 0.29.40 → 0.29.41

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.40",
3
+ "version": "0.29.41",
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,10 +14,10 @@
14
14
  "README.md"
15
15
  ],
16
16
  "optionalDependencies": {
17
- "@sigmashake/ssg-linux-x64": "0.29.38",
18
- "@sigmashake/ssg-linux-arm64": "0.29.38",
19
- "@sigmashake/ssg-darwin-arm64": "0.29.40",
20
- "@sigmashake/ssg-darwin-x64": "0.29.40",
17
+ "@sigmashake/ssg-linux-x64": "0.29.41",
18
+ "@sigmashake/ssg-linux-arm64": "0.29.41",
19
+ "@sigmashake/ssg-darwin-arm64": "0.29.41",
20
+ "@sigmashake/ssg-darwin-x64": "0.29.41",
21
21
  "@sigmashake/ssg-win32-x64": "0.29.39"
22
22
  },
23
23
  "scripts": {
@@ -20,4 +20,4 @@ Error generating stack: `+e.message+`
20
20
  `),children:[`+`,R.overflow.length,` more`]})]}),(0,W.jsx)(`div`,{className:`grid gap-2`,style:{gridTemplateColumns:`repeat(${Math.min(R.rail.length,4)}, minmax(0, 1fr))`,gridAutoRows:`110px`},children:R.rail.map(e=>{let n=e.fadingOutAt!=null||M.playhead_ms-e.newestTs>gu;return L!=null&&L!==e.key?null:(0,W.jsx)(Gl,{sessionKey:e.key,bursts:e.bursts,paused:M.mode!==`live`||e.fadingOutAt!=null,selectedId:i,onSelect:c,burstSeq:t,layout:r.current,isStale:n,isFadingOut:e.fadingOutAt!=null,minHeight:110,pinned:e.state.pinned,minimized:e.state.minimized,isFullscreen:!1,viewMode:f,thumbnail:!0,onPromote:()=>be(e.key),activePanelCount:R.rail.length+1,onTogglePin:()=>de(e.key),onToggleMinimize:()=>fe(e.key),onToggleFullscreen:()=>pe(e.key),onClose:()=>void D([e.key]),onFrameTime:t=>te(e.key,t)},e.key)})})]}),f===`broadcast`&&R.overflow.length>0&&(0,W.jsxs)(`div`,{className:`shrink-0 self-end pointer-events-none chip text-[var(--color-fg-3)] border-[var(--color-line-1)]`,children:[`+`,R.overflow.length,` more session`,R.overflow.length===1?``:`s`,` off-screen`]})]})}),!y&&(0,W.jsxs)(`aside`,{className:`flex flex-col gap-2 min-w-0 min-h-0 overflow-y-auto`,children:[(0,W.jsx)(pu,{onMilestone:u,onRecord:d}),!b&&(0,W.jsx)(`section`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3`,children:(0,W.jsx)(cu,{bursts:ne,allBursts:e.allBursts})}),(0,W.jsx)(ru,{burst:he,anchor:o,onClose:()=>{a(null),s(null)}})]})]}),!v&&(0,W.jsx)(`section`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3`,children:(0,W.jsx)(Xl,{playback:M,bursts:ne,rangeStart:Ce,rangeEnd:we,loading:re,onPlayhead:t=>e.setPlayhead(t),onLive:()=>e.jumpToLive(),onPause:()=>e.setMode(`paused`),onResume:()=>e.setMode(`scrubbing`),on24h:()=>e.jumpTo24h()})}),m&&(0,W.jsxs)(`div`,{className:`pointer-events-none fixed bottom-3 right-4 flex flex-col items-end gap-1 z-30`,children:[(0,W.jsx)(`span`,{className:`text-[11px] font-mono uppercase tracking-[0.18em] text-[var(--color-fg-3)]`,children:`sigmashake gov`}),(0,W.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:`broadcast mode · press B or Esc to exit`})]}),z&&(0,W.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/90 backdrop-blur-sm flex flex-col p-6`,children:(0,W.jsx)(Gl,{sessionKey:z.key,bursts:z.bursts,paused:M.mode!==`live`||z.fadingOutAt!=null,selectedId:i,onSelect:c,burstSeq:t,layout:r.current,isStale:z.fadingOutAt!=null||M.playhead_ms-z.newestTs>gu,isFadingOut:!1,minHeight:0,pinned:z.state.pinned,minimized:!1,isFullscreen:!0,viewMode:f,onTogglePin:()=>de(z.key),onToggleMinimize:()=>fe(z.key),onToggleFullscreen:()=>pe(z.key)},`fs-${z.key}`)})]})}var Eu=[{id:`rca`,label:`rca`,hint:`pre-computed root cause`},{id:`timeline`,label:`timeline`,hint:`recent frames across traces`},{id:`watch`,label:`watch`,hint:`subscribe to any ssg:// URI`},{id:`state`,label:`state`,hint:`daemon runtime snapshot`},{id:`metrics`,label:`metrics`,hint:`latency + counters`}];function Du(){let[e,t]=(0,_.useState)(`rca`);return(0,W.jsxs)(`div`,{className:`flex flex-col gap-4 min-h-[70vh]`,children:[(0,W.jsxs)(`header`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(`h1`,{className:`text-sm font-mono uppercase tracking-wider text-[var(--color-fg-1)]`,children:`ai-native debugger`}),(0,W.jsx)(`span`,{className:`chip text-sky-300 border-sky-500/30`,children:`ssg:// unified resolver`}),(0,W.jsx)(Ou,{})]}),(0,W.jsx)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)]`,children:`one surface · cli · mcp · dashboard`})]}),(0,W.jsx)(`nav`,{className:`flex items-center gap-1 border-b border-[var(--color-line-1)]`,children:Eu.map(n=>(0,W.jsx)(`button`,{type:`button`,onClick:()=>t(n.id),title:n.hint,className:`px-3 py-1.5 text-[11px] font-mono uppercase tracking-wider border-b-2 transition-colors `+(e===n.id?`border-[var(--color-brand)] text-[var(--color-fg-1)]`:`border-transparent text-[var(--color-fg-4)] hover:text-[var(--color-fg-2)]`),children:n.label},n.id))}),(0,W.jsxs)(`section`,{className:`flex-1 min-h-0`,children:[e===`rca`&&(0,W.jsx)(ku,{}),e===`timeline`&&(0,W.jsx)(Pu,{}),e===`watch`&&(0,W.jsx)(Hu,{}),e===`state`&&(0,W.jsx)(Uu,{uri:`ssg://daemon/state`}),e===`metrics`&&(0,W.jsx)(Uu,{uri:`ssg://daemon/metrics`})]})]})}function Ou(){let e=Ae([`debug-frame`])[`debug-frame`]??0;return(0,W.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-emerald-300`,title:`${e} debug-frame bursts received`,children:[(0,W.jsx)(`span`,{className:`status-dot bg-emerald-400 pulse-soft`}),`live · `,e]})}function ku(){let e=Ae([`debug-frame`,`activity-updated`]),{data:t,loading:n,error:r,refetch:i}=z(`/api/json/debug?uri=ssg%3A%2F%2Frca%2Fcurrent`,[e[`debug-frame`],e[`activity-updated`]]),a=t?.data?.pack??null;return(0,W.jsxs)(`div`,{className:`grid grid-cols-1 xl:grid-cols-[1fr_340px] gap-4`,children:[(0,W.jsxs)(`article`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-4 space-y-3`,children:[n&&!t&&(0,W.jsx)(`p`,{className:`text-sm text-[var(--color-fg-4)]`,children:`loading RCA pack…`}),r&&(0,W.jsxs)(`p`,{className:`text-sm text-rose-300`,children:[`rca fetch error: `,r]}),!n&&!a&&(0,W.jsxs)(`div`,{className:`text-sm text-[var(--color-fg-3)] space-y-2`,children:[(0,W.jsx)(`p`,{className:`font-mono`,children:`no current RCA pack`}),(0,W.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:`Packs are composed automatically when an eval errors, an ssqa finding arrives, or a daemon-level error fires. Nothing to diagnose yet — you're green.`})]}),a&&(0,W.jsx)(ju,{pack:a})]}),(0,W.jsxs)(`aside`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 text-[11px] font-mono text-[var(--color-fg-4)] space-y-2`,children:[(0,W.jsx)(`p`,{className:`uppercase tracking-wider text-[var(--color-fg-2)]`,children:`how claude sees this`}),(0,W.jsxs)(`pre`,{className:`text-[10px] whitespace-pre-wrap leading-snug`,children:[`ssg debug rca --current --json`,`
21
21
  `,`# or via MCP:`,`
22
22
  `,`ssg_debug_rca(`,`{`,`auto_current:true`,`}`,`)`]}),(0,W.jsx)(`button`,{type:`button`,onClick:i,className:`w-full mt-2 px-2 py-1 border border-[var(--color-line-1)] rounded-sm hover:bg-[var(--color-surface-2)]`,children:`refresh`}),t?.snapshot_hash&&(0,W.jsxs)(`p`,{className:`text-[10px] opacity-60`,children:[`hash `,t.snapshot_hash.slice(0,12),`…`]})]})]})}function Au(e){return e===`critical`?`text-rose-400 border-rose-500/40`:e===`high`?`text-amber-300 border-amber-500/40`:e===`medium`?`text-sky-300 border-sky-500/40`:`text-[var(--color-fg-3)] border-[var(--color-line-1)]`}function ju({pack:e}){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`header`,{className:`flex items-start justify-between gap-4`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`p`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-4)]`,children:[`rca pack · `,new Date(e.ts_ms).toLocaleTimeString()]}),(0,W.jsx)(`h2`,{className:`text-[15px] font-medium text-[var(--color-fg-1)] mt-1`,children:e.summary}),e.trace_id&&(0,W.jsxs)(`p`,{className:`text-[11px] font-mono text-[var(--color-fg-4)] mt-1`,children:[`trace_id · `,e.trace_id]})]}),(0,W.jsx)(`span`,{className:`chip uppercase text-[10px] tracking-wider `+Au(e.severity),children:e.severity})]}),e.hypothesis&&e.hypothesis.length>0&&(0,W.jsxs)(`section`,{children:[(0,W.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`hypothesis`}),(0,W.jsx)(`ol`,{className:`space-y-2`,children:e.hypothesis.map((e,t)=>(0,W.jsxs)(`li`,{className:`p-2 rounded-sm bg-[var(--color-surface-2)] border border-[var(--color-line-1)]`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,W.jsx)(`p`,{className:`text-[13px] text-[var(--color-fg-1)]`,children:e.cause}),(0,W.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:[`conf `,(e.confidence*100).toFixed(0),`%`]})]}),e.evidence.length>0&&(0,W.jsx)(`ul`,{className:`mt-1 pl-3 text-[11px] text-[var(--color-fg-3)] list-disc list-inside space-y-0.5`,children:e.evidence.map((e,t)=>(0,W.jsx)(`li`,{children:e},t))})]},t))})]}),e.suggested_next_actions&&e.suggested_next_actions.length>0&&(0,W.jsxs)(`section`,{children:[(0,W.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`suggested next actions`}),(0,W.jsx)(`ul`,{className:`space-y-1 text-[13px] text-[var(--color-fg-2)]`,children:e.suggested_next_actions.map((e,t)=>(0,W.jsxs)(`li`,{className:`font-mono text-[12px]`,children:[`→ `,e]},t))})]}),e.state_snapshot&&e.state_snapshot.length>0&&(0,W.jsxs)(`section`,{children:[(0,W.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] mb-2`,children:`expand`}),(0,W.jsx)(`ul`,{className:`space-y-1 text-[11px] font-mono`,children:e.state_snapshot.map(e=>(0,W.jsxs)(`li`,{className:`text-[var(--color-fg-3)]`,children:[(0,W.jsx)(`code`,{className:`text-sky-300`,children:e.uri}),(0,W.jsxs)(`span`,{className:`opacity-50 ml-2`,children:[e.hash.slice(0,10),`…`]})]},e.uri))})]})]})}var Mu=[`hook-ingress`,`parse`,`match`,`ffi-call`,`decide`,`audit`,`respond`],Nu={"hook-ingress":`#6ea8ff`,parse:`#a78bfa`,match:`#60d394`,"ffi-call":`#f59e0b`,decide:`#f472b6`,audit:`#94a3b8`,respond:`#22d3ee`};function Pu(){let{data:e,loading:t,error:n}=z(`/api/json/debug?uri=ssg%3A%2F%2Fframes%2Frecent%3Flimit%3D1024`,[Ae([`debug-frame`])[`debug-frame`]]),r=e?.data?.frames??[],i=e?.data?.dropped??0,[a,o]=(0,_.useState)(null);return(0,W.jsxs)(`div`,{className:`grid grid-cols-1 xl:grid-cols-[1fr_320px] gap-4`,children:[(0,W.jsxs)(`article`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:[`frames · `,r.length,i>0&&(0,W.jsxs)(`span`,{className:`ml-2 text-amber-300`,children:[`dropped · `,i]})]}),(0,W.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:`ssg://frames/recent`})]}),n&&(0,W.jsxs)(`p`,{className:`text-sm text-rose-300`,children:[`timeline fetch error: `,n]}),t&&r.length===0?(0,W.jsx)(`p`,{className:`text-sm text-[var(--color-fg-4)]`,children:`loading…`}):r.length===0?(0,W.jsx)(Fu,{}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Lu,{frames:r,onSelect:o}),(0,W.jsx)(Iu,{})]})]}),(0,W.jsxs)(`aside`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2 text-[11px] font-mono text-[var(--color-fg-3)]`,children:[(0,W.jsx)(`p`,{className:`uppercase tracking-wider text-[var(--color-fg-2)]`,children:`frame inspector`}),a?(0,W.jsx)(Ru,{frame:a}):(0,W.jsx)(`p`,{className:`opacity-60`,children:`click a bar to inspect`})]})]})}function Fu(){return(0,W.jsxs)(`div`,{className:`text-[12px] text-[var(--color-fg-3)] space-y-1 py-4`,children:[(0,W.jsx)(`p`,{children:`no frames yet`}),(0,W.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)] font-mono`,children:`SSG_DEBUG_ENABLED=1 ssg daemon`}),(0,W.jsx)(`p`,{className:`text-[11px] text-[var(--color-fg-4)]`,children:`then fire an eval — frames stream in live.`})]})}function Iu(){return(0,W.jsx)(`div`,{className:`flex flex-wrap gap-3 text-[10px] font-mono text-[var(--color-fg-4)]`,children:Mu.map(e=>(0,W.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-sm`,style:{background:Nu[e]}}),e]},e))})}function Lu({frames:e,onSelect:t}){let n=(0,_.useRef)(null),r=(0,_.useRef)([]),[i,a]=(0,_.useState)(-1),{rows:o,tMin:s,tMax:c}=(0,_.useMemo)(()=>{let t=new Map;for(let n of e){let e=t.get(n.trace_id)??[];e.push(n),t.set(n.trace_id,e)}let n=Array.from(t.entries()).map(([e,t])=>({trace_id:e,frames:t.slice().sort((e,t)=>Bu(e.ts_start_ns,t.ts_start_ns))}));n.sort((e,t)=>Bu(e.frames[0].ts_start_ns,t.frames[0].ts_start_ns));let r=null,i=null;for(let t of e){let e=BigInt(t.ts_start_ns),n=BigInt(t.ts_end_ns);(r===null||e<r)&&(r=e),(i===null||n>i)&&(i=n)}return{rows:n,tMin:r??0n,tMax:i??1n}},[e]);(0,_.useEffect)(()=>{let e=n.current;if(!e)return;let t=window.devicePixelRatio||1,a=e.clientWidth,l=Math.max(120,o.length*22+24);e.width=a*t,e.height=l*t,e.style.height=`${l}px`;let u=e.getContext(`2d`);if(!u)return;u.setTransform(t,0,0,t,0,0),u.clearRect(0,0,a,l),u.strokeStyle=`rgba(255,255,255,0.04)`,u.lineWidth=1;for(let e=1;e<4;e++){let t=e*a/4;u.beginPath(),u.moveTo(t,0),u.lineTo(t,l),u.stroke()}let d=c>s?Number(c-s):1,f=a-110-8;u.font=`10px ui-monospace, monospace`,u.textBaseline=`middle`;let p=[];if(o.forEach((e,t)=>{let n=8+t*22;u.fillStyle=`rgba(255,255,255,0.55)`,u.fillText(e.trace_id.slice(0,10),6,n+18/2);for(let t of e.frames){let e=Number(BigInt(t.ts_start_ns)-s),r=Number(BigInt(t.ts_end_ns)-s),i=110+e/d*f,a=Math.max(2,(r-e)/d*f);u.fillStyle=Nu[t.stage]??`#888`,u.globalAlpha=t.result===`error`?1:.82,u.fillRect(i,n,a,18),u.globalAlpha=1,t.result===`error`&&(u.strokeStyle=`#f43f5e`,u.lineWidth=1.5,u.strokeRect(i+.5,n+.5,a-1,17)),p.push({x:i,y:n,w:a,h:18,frame:t})}}),r.current=p,i>=0&&i<p.length){let e=p[i];u.strokeStyle=`#fff`,u.lineWidth=1.5,u.strokeRect(e.x+.5,e.y+.5,e.w-1,e.h-1)}},[o,s,c,i]);function l(e){let t=n.current;if(!t)return-1;let i=t.getBoundingClientRect(),a=e.clientX-i.left,o=e.clientY-i.top;for(let e=r.current.length-1;e>=0;e--){let t=r.current[e];if(a>=t.x&&a<=t.x+t.w&&o>=t.y&&o<=t.y+t.h)return e}return-1}return(0,W.jsx)(`canvas`,{ref:n,className:`w-full block cursor-crosshair`,onMouseMove:e=>a(l(e)),onMouseLeave:()=>a(-1),onClick:e=>{let n=l(e);t(n>=0?r.current[n].frame:null)}})}function Ru({frame:e}){let t=Number(BigInt(e.ts_end_ns)-BigInt(e.ts_start_ns)),n=t>=1e6?`${(t/1e6).toFixed(2)}ms`:t>=1e3?`${(t/1e3).toFixed(1)}µs`:`${t}ns`;return(0,W.jsxs)(`dl`,{className:`space-y-1`,children:[(0,W.jsxs)(zu,{k:`stage`,children:[(0,W.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-sm mr-1 align-middle`,style:{background:Nu[e.stage]??`#888`}}),e.stage]}),(0,W.jsx)(zu,{k:`tool`,children:e.tool}),(0,W.jsx)(zu,{k:`result`,children:(0,W.jsx)(`span`,{className:e.result===`error`?`text-rose-300`:e.result===`skip`?`text-[var(--color-fg-4)]`:`text-emerald-300`,children:e.result})}),(0,W.jsx)(zu,{k:`dur`,children:n}),e.rule_id&&(0,W.jsx)(zu,{k:`rule`,children:e.rule_id}),e.error&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(zu,{k:`err.type`,children:(0,W.jsx)(`span`,{className:`text-rose-300`,children:e.error.type})}),(0,W.jsx)(zu,{k:`err.msg`,children:(0,W.jsx)(`span`,{className:`text-rose-200`,children:e.error.message})})]}),e.input_preview&&(0,W.jsx)(zu,{k:`input`,children:(0,W.jsx)(`code`,{className:`text-[10px] break-all`,children:e.input_preview})}),(0,W.jsx)(zu,{k:`trace`,children:(0,W.jsx)(`code`,{className:`text-[10px]`,children:e.trace_id})}),(0,W.jsx)(zu,{k:`frame`,children:(0,W.jsx)(`code`,{className:`text-[10px]`,children:e.frame_id})})]})}function zu({k:e,children:t}){return(0,W.jsxs)(`div`,{className:`flex gap-2 text-[11px] leading-tight`,children:[(0,W.jsx)(`dt`,{className:`text-[var(--color-fg-4)] w-16 shrink-0 uppercase tracking-wider`,children:e}),(0,W.jsx)(`dd`,{className:`text-[var(--color-fg-2)] break-all min-w-0`,children:t})]})}function Bu(e,t){let n=BigInt(e),r=BigInt(t);return n<r?-1:n>r?1:0}var Vu=[`ssg://daemon/state`,`ssg://daemon/metrics`,`ssg://audit/recent?limit=10`,`ssg://frames/recent?limit=32`,`ssg://rules/list`,`ssg://rca/current`,`ssg://native/stats`];function Hu(){let[e,t]=(0,_.useState)(`ssg://daemon/state`),[n,r]=(0,_.useState)(`ssg://daemon/state`);return(0,W.jsxs)(`div`,{className:`space-y-3`,children:[(0,W.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Vu.map(e=>(0,W.jsx)(`button`,{type:`button`,onClick:()=>{t(e),r(e)},className:`chip text-[10px] `+(n===e?`border-[var(--color-brand)] text-[var(--color-fg-1)]`:`text-[var(--color-fg-3)]`),children:e},e))}),(0,W.jsxs)(`form`,{className:`flex items-center gap-2`,onSubmit:t=>{t.preventDefault(),r(e)},children:[(0,W.jsx)(`input`,{value:e,onChange:e=>t(e.target.value),placeholder:`ssg://source/path?k=v`,className:`flex-1 px-3 py-1.5 text-[12px] font-mono rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] text-[var(--color-fg-1)]`}),(0,W.jsx)(`button`,{type:`submit`,className:`px-3 py-1.5 text-[11px] font-mono uppercase tracking-wider border border-[var(--color-line-1)] rounded-sm hover:bg-[var(--color-surface-2)]`,children:`resolve`})]}),(0,W.jsx)(Uu,{uri:n})]})}function Uu({uri:e}){let t=Ae([`debug-frame`,`activity-updated`,`counters-updated`]),{data:n,loading:r,error:i,refetch:a}=z(`/api/json/debug?uri=${encodeURIComponent(e)}`,[t[`debug-frame`],t[`activity-updated`],t[`counters-updated`],e]),o=n?JSON.stringify(n.data,null,2):``;return(0,W.jsxs)(`div`,{className:`rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-3 space-y-2`,children:[(0,W.jsxs)(`header`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`h3`,{className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,children:e}),n?.snapshot_hash&&(0,W.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--color-fg-4)]`,children:[`hash `,n.snapshot_hash.slice(0,10),`…`]}),n?.stale&&(0,W.jsxs)(`span`,{className:`chip text-amber-300 border-amber-500/40 text-[10px]`,children:[`stale `,n.age_ms?`${Math.round(n.age_ms/1e3)}s`:``]})]}),(0,W.jsx)(`button`,{type:`button`,onClick:a,className:`text-[10px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`,children:`refresh`})]}),r&&!n&&(0,W.jsx)(`p`,{className:`text-sm text-[var(--color-fg-4)]`,children:`resolving…`}),i&&(0,W.jsx)(`p`,{className:`text-sm text-rose-300`,children:i}),o&&(0,W.jsx)(`pre`,{className:`text-[11px] leading-snug font-mono text-[var(--color-fg-2)] overflow-auto max-h-[60vh] whitespace-pre-wrap break-all`,children:o})]})}var Wu=`ssg-dashboard-tabs`,Gu=2e3,Ku=6e3;function qu(){return`tab-${Date.now()}-${Math.random().toString(36).slice(2,7)}`}function Ju(){let[e,t]=(0,_.useState)(0),[n,r]=(0,_.useState)(!0),i=(0,_.useRef)(qu()),a=(0,_.useRef)(new Map);return(0,_.useEffect)(()=>{if(typeof BroadcastChannel>`u`)return;let e=new BroadcastChannel(Wu);function n(){let e=Date.now();for(let[t,n]of a.current.entries())e-n>Ku&&a.current.delete(t);let n=a.current.size;t(n),r([...a.current.keys(),i.current].sort()[0]===i.current)}function o(e){let t=e.data;!t||t.id===i.current||(t.type===`leave`?a.current.delete(t.id):a.current.set(t.id,Date.now()),n())}e.addEventListener(`message`,o),e.postMessage({type:`join`,id:i.current});let s=setInterval(()=>{e.postMessage({type:`heartbeat`,id:i.current}),n()},Gu),c=()=>{e.postMessage({type:`leave`,id:i.current})};return window.addEventListener(`beforeunload`,c),()=>{clearInterval(s),e.postMessage({type:`leave`,id:i.current}),e.removeEventListener(`message`,o),e.close(),window.removeEventListener(`beforeunload`,c)}},[]),{otherTabCount:e,isLeader:n}}var Yu=b;function Xu(){(0,_.useEffect)(()=>Ce([]),[]);let e=(0,_.useSyncExternalStore)(he,ge),[,t]=(0,_.useState)(0);(0,_.useEffect)(()=>{if(e.connected||e.lastErrorAt===null)return;let n=setInterval(()=>t(e=>e+1),500);return()=>clearInterval(n)},[e.connected,e.lastErrorAt]);let n=Zu(e),r=n===`reconnecting`&&e.lastErrorAt!==null?Math.max(0,Math.ceil((e.lastErrorAt+e.reconnectDelayMs-Date.now())/1e3)):null,i=Math.round(Yu/1e3);if(n===`connected`)return(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,title:`Telemetry Live — SSE connected`,"data-testid":`sse-status-chip`,"data-state":`connected`,children:[(0,W.jsx)(`span`,{className:`status-dot bg-emerald-400`}),(0,W.jsx)(`span`,{className:`hidden sm:inline`,children:`sse · live`})]});let a=n===`reconnecting`,o=a?`border-amber-500/40 bg-amber-500/10 text-amber-200`:`border-red-500/40 bg-red-500/10 text-red-200`,s=a?`bg-amber-400`:`bg-red-400`,c=a?r===null?`reconnecting`:`reconnect · ${r}s`:`offline`,l=`live paused · ${i}s poll`,u=a?`Live stream down — reconnect in ${r??`…`}s (attempt ${e.reconnectAttempts}). Dashboard is polling every ${i}s until SSE recovers.`:`Live stream disconnected. Dashboard is polling every ${i}s — data still updates, just at a coarser cadence.`;return(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded border px-2 py-0.5 text-[11px] font-mono uppercase tracking-wider ${o}`,title:u,"data-testid":`sse-status-chip`,"data-state":n,role:`status`,"aria-live":`polite`,children:[(0,W.jsx)(`span`,{className:`status-dot ${s} pulse-soft`}),(0,W.jsx)(`span`,{className:`hidden md:inline`,children:l}),(0,W.jsx)(`span`,{className:`md:hidden`,children:c})]})}function Zu(e){return e.connected?`connected`:e.reconnectAttempts>0||e.lastErrorAt!==null?`reconnecting`:`disconnected`}var Qu=`ssg:ui:font-scale:v1`,$u=[{label:`S`,value:.9},{label:`M`,value:1},{label:`L`,value:1.15},{label:`XL`,value:1.3}],ed=1;function td(e){if(typeof e!=`number`||!Number.isFinite(e))return ed;let t=$u.find(t=>Math.abs(t.value-e)<.001);return t?t.value:ed}function nd(){if(typeof localStorage>`u`)return ed;try{let e=localStorage.getItem(Qu);return e===null?ed:td(parseFloat(e))}catch{return ed}}function rd(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(Qu,String(e))}catch{}}function id(e){typeof document>`u`||(document.documentElement.style.setProperty(`--ssg-font-scale`,String(e)),document.documentElement.style.fontSize=`${16*e}px`)}function ad(){let[e,t]=(0,_.useState)(()=>{let e=nd();return id(e),e});return(0,_.useEffect)(()=>{id(e)},[e]),{scale:e,setScale:(0,_.useCallback)(e=>{t(e),rd(e),id(e)},[])}}function od(){let{scale:e,setScale:t}=ad();return(0,W.jsx)(`div`,{role:`radiogroup`,"aria-label":`Font size`,className:`flex items-center gap-0.5 rounded-sm border border-[var(--color-line-1)] bg-[var(--color-surface-1)] p-0.5`,children:$u.map(n=>{let r=Math.abs(n.value-e)<.001;return(0,W.jsx)(`button`,{role:`radio`,"aria-checked":r,onClick:()=>t(n.value),title:`Font size: ${n.label} (${Math.round(n.value*100)}%)`,className:`px-1.5 py-0.5 text-[10px] font-mono uppercase tracking-wider cursor-pointer transition-colors rounded-sm `+(r?`bg-[var(--color-surface-3)] text-[var(--color-fg-0)]`:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`),children:n.label},n.label)})})}var sd=[{path:`/`,label:`dashboard`},{path:`/graph`,label:`graph`},{path:`/rules`,label:`rules`},{path:`/audit`,label:`audit`},{path:`/approvals`,label:`approvals`},{path:`/hub`,label:`hub`},{path:`/profile`,label:`profile`},{path:`/monitor`,label:`monitor`},{path:`/observability`,label:`observability`},{path:`/debug`,label:`debug`}];function cd(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 ld(){let{data:e}=z(`/api/json/daemon-status`,[Ae([`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-emerald-400`:i===`starting`||i===`degraded`?`bg-amber-400`:`bg-red-400`,o=i===`starting`||i===`degraded`?`pulse-soft`:``,s=i===`degraded`&&e?.hibernation?cd(e.hibernation.nextRetryAt):null,c=i===`running`?`daemon · online`:i===`starting`?`daemon · booting`:i===`degraded`?`daemon · retry ${s??`…`}`:i===`error`?`daemon · error`:`daemon · offline`;return(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsxs)(`button`,{onClick:()=>n(e=>!e),className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] transition-colors cursor-pointer`,title:i===`running`?`Daemon running`:i===`starting`?`Daemon starting…`:i===`degraded`?`Daemon hibernating — retry in ${s??`…`}`:i===`error`?`Daemon error`:`Daemon stopped`,children:[(0,W.jsx)(`span`,{className:`status-dot ${a} ${o}`}),(0,W.jsx)(`span`,{className:`hidden sm:inline`,children:c})]}),t&&(0,W.jsxs)(`div`,{className:`absolute right-0 top-7 z-50 w-72 bg-[var(--color-surface-1)] border border-[var(--color-line-2)] rounded-sm shadow-xl p-3 text-xs`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,W.jsx)(`span`,{className:`overline`,children:`eval daemon`}),(0,W.jsx)(`button`,{onClick:()=>n(!1),className:`text-[var(--color-fg-4)] hover:text-[var(--color-fg-1)] cursor-pointer`,children:`✕`})]}),(0,W.jsxs)(`div`,{className:`space-y-1 text-[var(--color-fg-2)]`,children:[(0,W.jsxs)(`div`,{className:`font-mono text-[11px]`,children:[`status:`,` `,(0,W.jsx)(`span`,{className:i===`running`?`text-emerald-300`:i===`starting`||i===`degraded`?`text-amber-300`:`text-red-300`,children:i})]}),e?.pid&&(0,W.jsxs)(`div`,{className:`font-mono text-[11px]`,children:[`pid: `,e.pid]}),i===`degraded`&&e?.hibernation&&(0,W.jsxs)(`div`,{className:`mt-2 rounded-sm border border-amber-500/25 bg-amber-500/5 p-2 text-[11px] text-amber-300 space-y-0.5`,children:[(0,W.jsxs)(`div`,{children:[`next retry:`,` `,(0,W.jsx)(`span`,{className:`font-medium`,children:s})]}),(0,W.jsxs)(`div`,{children:[`episode attempt: `,e.hibernation.attempt,e.hibernation.reason?` (${e.hibernation.reason})`:``]}),(0,W.jsx)(`div`,{className:`text-amber-400/70`,children:`Slow-tier supervisor is retrying at long backoff — no manual restart required.`})]})]}),e?.logTail&&e.logTail.length>0&&(0,W.jsxs)(`div`,{className:`mt-3`,children:[(0,W.jsx)(`div`,{className:`overline mb-1`,children:`recent log`}),(0,W.jsx)(`pre`,{className:`bg-[var(--color-surface-0)] border border-[var(--color-line-0)] rounded-sm p-2 text-[10px] text-[var(--color-fg-2)] overflow-x-auto whitespace-pre-wrap break-all max-h-32 overflow-y-auto`,children:e.logTail.join(`
23
- `)})]})]})]})}function ud(){let{data:e}=z(`/api/state/activity-degraded`);if(!e?.degraded)return null;let t=e.since?new Date(e.since).toLocaleTimeString():`recently`;return(0,W.jsxs)(`div`,{role:`status`,className:`border-b border-amber-500/40 bg-amber-500/10 px-4 py-1.5 text-[11px] font-mono text-amber-200 text-center`,title:e.reason??`audit-worker degraded`,children:[`audit pipeline degraded since `,t,` — entries may be missing. Run`,` `,(0,W.jsx)(`code`,{className:`text-amber-100`,children:`ssg daemon --status`}),` to inspect.`]})}function dd(){let{data:e}=z(`/api/json/license`,[Ae([`counters-updated`])[`counters-updated`]]);return!e||e.tier!==`unlicensed`||e.eval_daily_limit===null||e.evals_today<e.eval_daily_limit?null:(0,W.jsxs)(`div`,{role:`alert`,className:`border-b border-red-500/50 bg-red-500/10 px-4 py-1.5 text-[11px] font-mono text-red-200 text-center`,title:`Free tier daily eval limit reached — rules are being bypassed until quota resets`,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,W.jsx)(`a`,{href:e.upgrade_url,target:`_blank`,rel:`noopener noreferrer`,className:`text-red-100 underline hover:text-white`,children:`Upgrade to Pro →`})]})}function fd(){let{data:e,refetch:t}=z(`/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`,...ke()},body:JSON.stringify({mode:e})}),t()}finally{r(!1)}}}let o=i===`tty`;return(0,W.jsxs)(`button`,{onClick:()=>a(o?`dashboard`:`tty`),disabled:n,className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] transition-colors cursor-pointer 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,W.jsx)(`span`,{className:`status-dot ${o?`bg-sky-400`:`bg-violet-400`}`}),(0,W.jsx)(`span`,{className:`hidden sm:inline`,children:o?`ask · native`:`ask · dashboard`})]})}function pd(){let{data:e}=z(`/api/json/mcp-status`,[Ae([`activity-updated`])[`activity-updated`]]),t=e?.status??`inactive`;if(t===`inactive`)return null;let n=t===`active`?`bg-sky-400`:`bg-[var(--color-fg-4)]`,r=t===`active`?`mcp · active`:`mcp · idle`;return(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,title:t===`active`?`MCP server: ${e?.recentCount??0} evals in last 5 min`:`MCP server: ${e?.totalCount??0} total evals`,children:[(0,W.jsx)(`span`,{className:`status-dot ${n}`}),(0,W.jsx)(`span`,{className:`hidden sm:inline`,children:r})]})}function md(e){if(e===`/`)return(0,W.jsx)(Os,{});if(e===`/classic`)return(0,W.jsx)(cc,{});if(e===`/graph`)return(0,W.jsx)(Tu,{});if(e===`/debug`)return(0,W.jsx)(Du,{});if(e===`/rules`)return(0,W.jsx)(gc,{});if(e===`/audit`)return(0,W.jsx)(bc,{});if(e===`/approvals`)return(0,W.jsx)(Ac,{});if(e===`/profile`)return(0,W.jsx)(Jc,{});if(e===`/hub/connect`)return(0,W.jsx)(al,{});if(e===`/hub/publish`)return(0,W.jsx)(ol,{});if(e.startsWith(`/hub/`)){let t=e.slice(5);if(t)return(0,W.jsx)(il,{id:t})}return e===`/hub`?(0,W.jsx)(nl,{}):e===`/monitor`?(0,W.jsx)(yl,{}):e===`/observability`?(0,W.jsx)(Ll,{}):(0,W.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-24 text-[var(--color-fg-3)]`,children:[(0,W.jsx)(`p`,{className:`overline mb-2`,children:`error · 404`}),(0,W.jsx)(`p`,{className:`text-sm`,children:`page not found`}),(0,W.jsx)(`a`,{href:`/`,className:`mt-4 text-[11px] font-mono uppercase tracking-wider text-[var(--color-brand)] hover:underline`,children:`← back to dashboard`})]})}function hd(e){history.pushState(null,``,e),window.dispatchEvent(new PopStateEvent(`popstate`))}function gd({count:e}){let[t,n]=(0,_.useState)(!1);return t||e===0?null:(0,W.jsx)(`div`,{className:`border-b border-amber-500/25 bg-amber-500/5 px-4 py-2`,children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsxs)(`svg`,{className:`shrink-0 text-amber-300`,width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,W.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,W.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,W.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),(0,W.jsxs)(`p`,{className:`text-[11px] text-amber-200 flex-1 font-mono`,children:[(0,W.jsxs)(`span`,{className:`font-semibold uppercase tracking-wider`,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,W.jsx)(`span`,{className:`text-amber-400/70`,children:`Close other tabs to restore full live-update functionality.`})]}),(0,W.jsx)(`button`,{onClick:()=>n(!0),className:`text-amber-500/50 hover:text-amber-300 transition-colors shrink-0 cursor-pointer`,title:`Dismiss`,children:(0,W.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,W.jsx)(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),(0,W.jsx)(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})]})})]})})}function _d(){let[e,t]=(0,_.useState)(window.location.pathname),{otherTabCount:n}=Ju();(0,_.useEffect)(()=>{let e=()=>t(window.location.pathname);return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(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(`//`)||(e.preventDefault(),hd(n))};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[]);let r=t=>t===`/`?e===`/`:e.startsWith(t);return(0,W.jsxs)(`div`,{className:`min-h-screen bg-[var(--color-surface-0)] text-[var(--color-fg-1)]`,children:[(0,W.jsxs)(`header`,{className:`border-b border-[var(--color-line-1)] sticky top-0 z-50 bg-[var(--color-surface-0)]/95 backdrop-blur`,children:[(0,W.jsxs)(`div`,{className:`px-6 flex items-center h-12 gap-5`,children:[(0,W.jsxs)(`a`,{href:`/`,className:`flex items-baseline gap-0.5 select-none`,title:`SigmaShake Governance`,children:[(0,W.jsx)(`span`,{className:`font-mono text-sm font-semibold text-[var(--color-brand)] tracking-tight`,children:`ssg`}),(0,W.jsx)(`span`,{className:`font-mono text-[11px] text-[var(--color-fg-3)] tracking-tight`,children:`/gov`})]}),(0,W.jsx)(`nav`,{className:`flex items-center`,children:sd.map(e=>{let t=r(e.path);return(0,W.jsxs)(`a`,{href:e.path,className:`relative px-3 py-1.5 text-[13px] font-mono tracking-wide transition-colors ${t?`text-[var(--color-fg-0)]`:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`}`,children:[e.label,t&&(0,W.jsx)(`span`,{className:`absolute inset-x-2 -bottom-px h-px bg-[var(--color-brand)]`})]},e.path)})}),(0,W.jsxs)(`div`,{className:`flex items-center gap-4 ml-auto`,children:[n>0&&(0,W.jsxs)(`span`,{className:`chip text-amber-300 border-amber-500/30`,title:`${n} other tab${n===1?``:`s`} open — may cause connection issues`,children:[n+1,` tabs`]}),(0,W.jsx)(Xu,{}),(0,W.jsx)(fd,{}),(0,W.jsx)(pd,{}),(0,W.jsx)(ld,{}),(0,W.jsx)(od,{})]})]}),(0,W.jsx)(gd,{count:n}),(0,W.jsx)(dd,{}),(0,W.jsx)(ud,{})]}),(0,W.jsx)(`main`,{className:`px-6 py-6`,children:md(e)})]})}var vd=document.getElementById(`app-root`);if(!vd)throw Error(`Missing #app-root`);g.createRoot(vd).render((0,W.jsx)(_.StrictMode,{children:(0,W.jsx)(_d,{})}));
23
+ `)})]})]})]})}function ud(){let{data:e}=z(`/api/state/activity-degraded`);if(!e?.degraded)return null;let t=e.since?new Date(e.since).toLocaleTimeString():`recently`;return(0,W.jsxs)(`div`,{role:`status`,className:`border-b border-amber-500/40 bg-amber-500/10 px-4 py-1.5 text-[11px] font-mono text-amber-200 text-center`,title:e.reason??`audit-worker degraded`,children:[`audit pipeline degraded since `,t,` — entries may be missing. Run`,` `,(0,W.jsx)(`code`,{className:`text-amber-100`,children:`ssg daemon --status`}),` to inspect.`]})}function dd(){let{data:e}=z(`/api/json/license`,[Ae([`counters-updated`])[`counters-updated`]]);return!e||e.tier!==`unlicensed`||e.eval_daily_limit===null||e.evals_today<e.eval_daily_limit?null:(0,W.jsxs)(`div`,{role:`alert`,className:`border-b border-red-500/50 bg-red-500/10 px-4 py-1.5 text-[11px] font-mono text-red-200 text-center`,title:`Free tier daily eval limit reached — rules are being bypassed until quota resets`,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,W.jsx)(`a`,{href:e.upgrade_url,target:`_blank`,rel:`noopener noreferrer`,className:`text-red-100 underline hover:text-white`,children:`Upgrade to Pro →`})]})}function fd(){let{data:e,refetch:t}=z(`/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`,...ke()},body:JSON.stringify({mode:e})}),t()}finally{r(!1)}}}let o=i===`tty`;return(0,W.jsxs)(`button`,{onClick:()=>a(o?`dashboard`:`tty`),disabled:n,className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] transition-colors cursor-pointer 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,W.jsx)(`span`,{className:`status-dot ${o?`bg-sky-400`:`bg-violet-400`}`}),(0,W.jsx)(`span`,{className:`hidden sm:inline`,children:o?`ask · native`:`ask · dashboard`})]})}function pd({onRefresh:e}){return(0,W.jsx)(`button`,{onClick:e,className:`flex items-center justify-center text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)] transition-colors cursor-pointer p-1 rounded-sm`,title:`Reset page — clears stale graph state without dropping SSE`,"aria-label":`Refresh page`,children:(0,W.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,W.jsx)(`path`,{d:`M21 12a9 9 0 1 1-3-6.7`}),(0,W.jsx)(`polyline`,{points:`21 3 21 9 15 9`})]})})}function md(){let{data:e}=z(`/api/json/mcp-status`,[Ae([`activity-updated`])[`activity-updated`]]),t=e?.status??`inactive`;if(t===`inactive`)return null;let n=t===`active`?`bg-sky-400`:`bg-[var(--color-fg-4)]`,r=t===`active`?`mcp · active`:`mcp · idle`;return(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-mono uppercase tracking-wider text-[var(--color-fg-3)]`,title:t===`active`?`MCP server: ${e?.recentCount??0} evals in last 5 min`:`MCP server: ${e?.totalCount??0} total evals`,children:[(0,W.jsx)(`span`,{className:`status-dot ${n}`}),(0,W.jsx)(`span`,{className:`hidden sm:inline`,children:r})]})}function hd(e){if(e===`/`)return(0,W.jsx)(Os,{});if(e===`/classic`)return(0,W.jsx)(cc,{});if(e===`/graph`)return(0,W.jsx)(Tu,{});if(e===`/debug`)return(0,W.jsx)(Du,{});if(e===`/rules`)return(0,W.jsx)(gc,{});if(e===`/audit`)return(0,W.jsx)(bc,{});if(e===`/approvals`)return(0,W.jsx)(Ac,{});if(e===`/profile`)return(0,W.jsx)(Jc,{});if(e===`/hub/connect`)return(0,W.jsx)(al,{});if(e===`/hub/publish`)return(0,W.jsx)(ol,{});if(e.startsWith(`/hub/`)){let t=e.slice(5);if(t)return(0,W.jsx)(il,{id:t})}return e===`/hub`?(0,W.jsx)(nl,{}):e===`/monitor`?(0,W.jsx)(yl,{}):e===`/observability`?(0,W.jsx)(Ll,{}):(0,W.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-24 text-[var(--color-fg-3)]`,children:[(0,W.jsx)(`p`,{className:`overline mb-2`,children:`error · 404`}),(0,W.jsx)(`p`,{className:`text-sm`,children:`page not found`}),(0,W.jsx)(`a`,{href:`/`,className:`mt-4 text-[11px] font-mono uppercase tracking-wider text-[var(--color-brand)] hover:underline`,children:`← back to dashboard`})]})}function gd(e){history.pushState(null,``,e),window.dispatchEvent(new PopStateEvent(`popstate`))}function _d({count:e}){let[t,n]=(0,_.useState)(!1);return t||e===0?null:(0,W.jsx)(`div`,{className:`border-b border-amber-500/25 bg-amber-500/5 px-4 py-2`,children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsxs)(`svg`,{className:`shrink-0 text-amber-300`,width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,W.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,W.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,W.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]}),(0,W.jsxs)(`p`,{className:`text-[11px] text-amber-200 flex-1 font-mono`,children:[(0,W.jsxs)(`span`,{className:`font-semibold uppercase tracking-wider`,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,W.jsx)(`span`,{className:`text-amber-400/70`,children:`Close other tabs to restore full live-update functionality.`})]}),(0,W.jsx)(`button`,{onClick:()=>n(!0),className:`text-amber-500/50 hover:text-amber-300 transition-colors shrink-0 cursor-pointer`,title:`Dismiss`,children:(0,W.jsxs)(`svg`,{width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,W.jsx)(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),(0,W.jsx)(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})]})})]})})}function vd(){let[e,t]=(0,_.useState)(window.location.pathname),[n,r]=(0,_.useState)(0),{otherTabCount:i}=Ju();(0,_.useEffect)(()=>{let e=()=>t(window.location.pathname);return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]),(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(`//`)||(e.preventDefault(),gd(n))};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[]);let a=t=>t===`/`?e===`/`:e.startsWith(t);return(0,W.jsxs)(`div`,{className:`min-h-screen bg-[var(--color-surface-0)] text-[var(--color-fg-1)]`,children:[(0,W.jsxs)(`header`,{className:`border-b border-[var(--color-line-1)] sticky top-0 z-50 bg-[var(--color-surface-0)]/95 backdrop-blur`,children:[(0,W.jsxs)(`div`,{className:`px-6 flex items-center h-12 gap-5`,children:[(0,W.jsxs)(`a`,{href:`/`,className:`flex items-baseline gap-0.5 select-none`,title:`SigmaShake Governance`,children:[(0,W.jsx)(`span`,{className:`font-mono text-sm font-semibold text-[var(--color-brand)] tracking-tight`,children:`ssg`}),(0,W.jsx)(`span`,{className:`font-mono text-[11px] text-[var(--color-fg-3)] tracking-tight`,children:`/gov`})]}),(0,W.jsx)(`nav`,{className:`flex items-center`,children:sd.map(e=>{let t=a(e.path);return(0,W.jsxs)(`a`,{href:e.path,className:`relative px-3 py-1.5 text-[13px] font-mono tracking-wide transition-colors ${t?`text-[var(--color-fg-0)]`:`text-[var(--color-fg-3)] hover:text-[var(--color-fg-1)]`}`,children:[e.label,t&&(0,W.jsx)(`span`,{className:`absolute inset-x-2 -bottom-px h-px bg-[var(--color-brand)]`})]},e.path)})}),(0,W.jsxs)(`div`,{className:`flex items-center gap-4 ml-auto`,children:[i>0&&(0,W.jsxs)(`span`,{className:`chip text-amber-300 border-amber-500/30`,title:`${i} other tab${i===1?``:`s`} open — may cause connection issues`,children:[i+1,` tabs`]}),(0,W.jsx)(Xu,{}),(0,W.jsx)(fd,{}),(0,W.jsx)(md,{}),(0,W.jsx)(ld,{}),(0,W.jsx)(pd,{onRefresh:()=>r(e=>e+1)}),(0,W.jsx)(od,{})]})]}),(0,W.jsx)(_d,{count:i}),(0,W.jsx)(dd,{}),(0,W.jsx)(ud,{})]}),(0,W.jsx)(`main`,{className:`px-6 py-6`,children:hd(e)},n)]})}var $=document.getElementById(`app-root`);if(!$)throw Error(`Missing #app-root`);g.createRoot($).render((0,W.jsx)(_.StrictMode,{children:(0,W.jsx)(vd,{})}));