File size: 157,321 Bytes
857a91b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(()=>{var ne=window.MATRIX_API_BASE||"",ee=e=>new Promise(s=>setTimeout(s,e)),ie="matrixcloud_token";function fe(){try{return localStorage.getItem(ie)||""}catch{return""}}function Q(e){try{e?localStorage.setItem(ie,e):localStorage.removeItem(ie)}catch{}}function ye(){try{let e=new URL(window.location.href),s=e.searchParams.get("token")||"",t=e.pathname.replace(/\/+$/,"");if(t.endsWith("/reset")||s.startsWith("mxpr_"))return{kind:"reset",token:s};if(t.endsWith("/verify")||s.startsWith("mxev_"))return{kind:"verify",token:s}}catch{}return{kind:"",token:""}}function le(){try{window.history.replaceState({},"",window.location.pathname.replace(/\/(reset|verify)$/,"/")||"/")}catch{}}var C={async req(e,s,t){let n={method:e,headers:{}};t!==void 0&&(n.headers["Content-Type"]="application/json",n.body=JSON.stringify(t));let a=fe()||window.MATRIX_API_TOKEN;a&&(n.headers.Authorization="Bearer "+a);let i=await fetch(ne+s,n),o=await i.text(),f=null;try{f=o?JSON.parse(o):null}catch{f=o}if(!i.ok){let c=new Error(f&&f.error||"HTTP "+i.status);throw c.status=i.status,c.data=f,c}return f},get(e){return this.req("GET",e)},post(e,s){return this.req("POST",e,s)},del(e){return this.req("DELETE",e)},eventsURL(e){return ne+e}},O={async me(){return(await C.get("/v1/auth/me")).user},async login(e,s){let t=await C.post("/v1/auth/login",{email:e,password:s});return Q(t.token),t.user},async signup(e,s,t,n){let a=await C.post("/v1/auth/signup",{name:e,email:s,password:t,workspace:n});return Q(a.token),a.user},async logout(e){try{await C.post("/v1/auth/logout"+(e?"?all=true":""),{})}catch{}Q(null)},async forgot(e){return(await C.post("/v1/auth/forgot",{email:e})).message||"Check your email."},async reset(e,s){return(await C.post("/v1/auth/reset",{token:e,password:s})).message||"Password updated."},async verify(e){return(await C.post("/v1/auth/verify",{token:e})).message||"Email verified."}},K={async listRuntimes(){return(await C.get("/v1/cloud/runtimes")).runtimes||[]},async mintJoinToken(e,s,t){return C.post("/v1/cloud/join-tokens",{label:e,max_uses:s,ttl_minutes:t})},async listProviders(){return(await C.get("/v1/cloud/providers")).providers||[]},async setProvider(e,s,t,n){return(await C.post("/v1/cloud/providers",{provider:e,label:s,secret:t,meta:n})).provider},async listAudit(){return(await C.get("/v1/cloud/audit")).events||[]}};async function be(e,s,t=25e3){let n=await C.post("/v1/jobs",{type:e,payload:s}),a=Date.now();for(;Date.now()-a<t;){let i=await C.get("/v1/jobs/"+n.job_id);if(["complete","error","expired","cancelled"].includes(i.status)){if(i.status!=="complete")throw new Error(i.error||i.status);return i.result}await ee(500)}throw new Error("timed out")}function xe(e){return e?e>=1e9?(e/1e9).toFixed(1)+"B":e>=1e6?(e/1e6).toFixed(0)+"M":String(e):"\u2014"}var ke=React.createContext(null);function Ce(){let[e,s]=React.useState({loading:!0,online:!1,health:null,caps:null});return React.useEffect(()=>{let t=!0;async function n(){try{let[i,o]=await Promise.all([C.get("/v1/health"),C.get("/v1/capabilities")]);t&&s({loading:!1,online:!0,health:i,caps:o})}catch{t&&s(o=>({...o,loading:!1,online:!1}))}}n();let a=setInterval(n,5e3);return()=>{t=!1,clearInterval(a)}},[]),e}var te=()=>React.useContext(ke);function re(e){let[s,t]=React.useState(null),n=React.useCallback(async()=>{try{let a=await C.get("/v1/jobs");t(a.jobs||[])}catch{t(null)}},[]);return React.useEffect(()=>{if(n(),e){let a=setInterval(n,e);return()=>clearInterval(a)}},[n,e]),{jobs:s,refresh:n}}function u({d:e,size:s=18,sw:t=1.7,style:n,className:a}){return React.createElement("svg",{width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:t,strokeLinecap:"round",strokeLinejoin:"round",style:n,className:a,"aria-hidden":"true"},e)}var d={grid:React.createElement(React.Fragment,null,React.createElement("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1.5"}),React.createElement("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1.5"}),React.createElement("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1.5"}),React.createElement("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1.5"})),server:React.createElement(React.Fragment,null,React.createElement("rect",{x:"3",y:"4",width:"18",height:"7",rx:"2"}),React.createElement("rect",{x:"3",y:"13",width:"18",height:"7",rx:"2"}),React.createElement("path",{d:"M7 7.5h.01M7 16.5h.01"})),download:React.createElement(React.Fragment,null,React.createElement("path",{d:"M12 3v12"}),React.createElement("path",{d:"m7 10 5 5 5-5"}),React.createElement("path",{d:"M5 21h14"})),cpu:React.createElement(React.Fragment,null,React.createElement("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"}),React.createElement("path",{d:"M9 2v2M15 2v2M9 20v2M15 20v2M2 9h2M2 15h2M20 9h2M20 15h2"}),React.createElement("rect",{x:"9.5",y:"9.5",width:"5",height:"5",rx:"1"})),bot:React.createElement(React.Fragment,null,React.createElement("rect",{x:"4",y:"8",width:"16",height:"11",rx:"3"}),React.createElement("path",{d:"M12 8V4M9 4h6"}),React.createElement("circle",{cx:"9",cy:"13.5",r:"1.2",fill:"currentColor",stroke:"none"}),React.createElement("circle",{cx:"15",cy:"13.5",r:"1.2",fill:"currentColor",stroke:"none"})),activity:React.createElement("path",{d:"M22 12h-4l-3 9L9 3l-3 9H2"}),logs:React.createElement(React.Fragment,null,React.createElement("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),React.createElement("path",{d:"M14 2v6h6M9 13h6M9 17h4"})),shield:React.createElement(React.Fragment,null,React.createElement("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10"}),React.createElement("path",{d:"m9 12 2 2 4-4"})),audit:React.createElement(React.Fragment,null,React.createElement("path",{d:"M9 11l3 3 7-7"}),React.createElement("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})),gear:React.createElement(React.Fragment,null,React.createElement("circle",{cx:"12",cy:"12",r:"3"}),React.createElement("path",{d:"M19.4 15a1.6 1.6 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.6 1.6 0 0 0-1.8-.3 1.6 1.6 0 0 0-1 1.5V21a2 2 0 0 1-4 0v-.1A1.6 1.6 0 0 0 9 19.4a1.6 1.6 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.6 1.6 0 0 0 .3-1.8 1.6 1.6 0 0 0-1.5-1H3a2 2 0 0 1 0-4h.1A1.6 1.6 0 0 0 4.6 9a1.6 1.6 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.6 1.6 0 0 0 1.8.3H9a1.6 1.6 0 0 0 1-1.5V3a2 2 0 0 1 4 0v.1a1.6 1.6 0 0 0 1 1.5 1.6 1.6 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.6 1.6 0 0 0-.3 1.8V9a1.6 1.6 0 0 0 1.5 1H21a2 2 0 0 1 0 4h-.1a1.6 1.6 0 0 0-1.5 1z"})),bell:React.createElement(React.Fragment,null,React.createElement("path",{d:"M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9"}),React.createElement("path",{d:"M13.7 21a2 2 0 0 1-3.4 0"})),search:React.createElement(React.Fragment,null,React.createElement("circle",{cx:"11",cy:"11",r:"7"}),React.createElement("path",{d:"m21 21-4.3-4.3"})),chev:React.createElement("path",{d:"m6 9 6 6 6-6"}),chevr:React.createElement("path",{d:"m9 18 6-6-6-6"}),plus:React.createElement("path",{d:"M12 5v14M5 12h14"}),arrowup:React.createElement(React.Fragment,null,React.createElement("path",{d:"M12 19V5"}),React.createElement("path",{d:"m5 12 7-7 7 7"})),arrowdn:React.createElement(React.Fragment,null,React.createElement("path",{d:"M12 5v14"}),React.createElement("path",{d:"m19 12-7 7-7-7"})),check:React.createElement("path",{d:"M20 6 9 17l-5-5"}),x:React.createElement(React.Fragment,null,React.createElement("path",{d:"M18 6 6 18M6 6l12 12"})),play:React.createElement("path",{d:"M6 4l14 8-14 8z"}),refresh:React.createElement(React.Fragment,null,React.createElement("path",{d:"M3 12a9 9 0 0 1 15-6.7L21 8"}),React.createElement("path",{d:"M21 3v5h-5"}),React.createElement("path",{d:"M21 12a9 9 0 0 1-15 6.7L3 16"}),React.createElement("path",{d:"M3 21v-5h5"})),menu:React.createElement(React.Fragment,null,React.createElement("path",{d:"M4 6h16M4 12h16M4 18h16"})),globe:React.createElement(React.Fragment,null,React.createElement("circle",{cx:"12",cy:"12",r:"9"}),React.createElement("path",{d:"M3 12h18"}),React.createElement("path",{d:"M12 3a14 14 0 0 1 0 18 14 14 0 0 1 0-18"})),key:React.createElement(React.Fragment,null,React.createElement("circle",{cx:"8",cy:"15",r:"4"}),React.createElement("path",{d:"m10.8 12.2 8.2-8.2M17 5l2 2M14 8l2 2"})),zap:React.createElement("path",{d:"M13 2 4 14h7l-1 8 9-12h-7z"}),clock:React.createElement(React.Fragment,null,React.createElement("circle",{cx:"12",cy:"12",r:"9"}),React.createElement("path",{d:"M12 7v5l3 2"})),layers:React.createElement(React.Fragment,null,React.createElement("path",{d:"m12 2 9 5-9 5-9-5z"}),React.createElement("path",{d:"m3 12 9 5 9-5"}),React.createElement("path",{d:"m3 17 9 5 9-5"})),user:React.createElement(React.Fragment,null,React.createElement("circle",{cx:"12",cy:"8",r:"4"}),React.createElement("path",{d:"M4 21a8 8 0 0 1 16 0"})),terminal:React.createElement(React.Fragment,null,React.createElement("path",{d:"m4 17 6-6-6-6"}),React.createElement("path",{d:"M12 19h8"}))},Re="npx -y @modelcontextprotocol/server-filesystem /tmp",q={complete:"green",running:"blue",queued:"gray",error:"red",expired:"amber",cancelled:"amber"};function j(e,s){let[t,n]=React.useState(null),a=React.useCallback(async()=>{try{n(await C.get(e))}catch{n(null)}},[e]);return React.useEffect(()=>{if(a(),s){let i=setInterval(a,s);return()=>clearInterval(i)}},[a,s]),{data:t,refresh:a}}function ae(e){let{data:s,refresh:t}=j("/v1/runtimes",e);return{runtimes:s?s.runtimes||[]:null,refresh:t}}function Se(){let{data:e}=j("/v1/catalog");return e?(e.items||[]).map(s=>({...s,kindClass:s.kind_class,startCommand:s.start_command})):null}function ze(e){let{data:s,refresh:t}=j("/v1/cloud/runtimes",e);return{runtimes:s?s.runtimes||[]:null,refresh:t}}function Te(e){if(!e)return"\u2014";let s=new Date(e).getTime();if(!s)return"\u2014";let t=Math.max(0,Math.round((Date.now()-s)/1e3));return t<60?t+"s ago":t<3600?Math.round(t/60)+"m ago":t<86400?Math.round(t/3600)+"h ago":Math.round(t/86400)+"d ago"}var Ie={online:"green",idle:"amber",pending:"violet",offline:"red"};function Ne({initials:e,size:s=44}){return React.createElement("div",{style:{width:s,height:s,borderRadius:11,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid var(--line-2)",background:"var(--raised)",color:"var(--acc)",fontFamily:"var(--mono)",fontWeight:700,fontSize:s*.3}},e)}function Me({label:e,children:s}){let[t,n]=React.useState(!1);function a(){try{navigator.clipboard.writeText(s)}catch{}n(!0),setTimeout(()=>n(!1),1300)}return React.createElement("div",{className:"card",style:{overflow:"hidden",background:"var(--inset)"}},React.createElement("div",{className:"card-h",style:{padding:"9px 14px"}},React.createElement("span",{className:"mono",style:{fontSize:11,color:"var(--ink-3)",textTransform:"uppercase",letterSpacing:"0.1em"}},e),React.createElement("button",{className:"chip",style:{cursor:"pointer"},onClick:a},t?React.createElement(React.Fragment,null,React.createElement(u,{d:d.check,size:11})," copied"):React.createElement(React.Fragment,null,React.createElement(u,{d:d.logs,size:11})," copy"))),React.createElement("pre",{className:"mono",style:{margin:0,padding:15,fontSize:12.5,lineHeight:1.7,color:"var(--ink)",overflowX:"auto"}},React.createElement("span",{style:{color:"var(--ink-4)",userSelect:"none"}},"$ "),s))}function P(){return React.createElement("span",{className:"chip green",title:"Wired to this Matrix Runtime"},React.createElement("span",{className:"dot green pulse"})," live")}var J={api_token_missing:{sev:"high",title:"API token not set",route:"settings"},matrixshell_enabled:{sev:"med",title:"MatrixShell enabled",route:"settings"},sqlite_in_use:{sev:"med",title:"Using SQLite (single-node)",route:"settings"},store_unavailable:{sev:"high",title:"User store unavailable",route:"settings"},local_dev_mode:{sev:"low",title:"Local-dev mode",route:null}};function _e({go:e}){let{data:s}=j("/v1/ready",3e4),[t,n]=React.useState(()=>{try{return sessionStorage.getItem("mc-ready-dismissed")==="1"}catch{return!1}});if(!s||t)return null;let a=(s.warnings||[]).filter(h=>{var v;return(((v=J[h.code])==null?void 0:v.sev)||"low")!=="low"});if(a.length===0)return null;let i=a.some(h=>{var v;return((v=J[h.code])==null?void 0:v.sev)==="high"})?"high":"med",o=i==="high"?"var(--red)":"var(--amber, #f5a623)",f=i==="high"?"var(--red-soft)":"rgba(245,166,35,0.10)";function c(){try{sessionStorage.setItem("mc-ready-dismissed","1")}catch{}n(!0)}return React.createElement("div",{style:{margin:"0 0 16px",padding:"12px 14px",borderRadius:"var(--r-md)",border:"1px solid "+o,background:f}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:10}},React.createElement("span",{style:{color:o,display:"inline-flex",flexShrink:0}},React.createElement(u,{d:d.shield,size:17})),React.createElement("span",{style:{fontWeight:700,fontSize:13.5}},"Production readiness"),React.createElement("span",{className:"chip",style:{color:o}},a.length," warning",a.length>1?"s":""),React.createElement("div",{style:{flex:1}}),React.createElement("button",{className:"iconbtn",onClick:c,title:"Dismiss for this session"},React.createElement(u,{d:d.x,size:15}))),React.createElement("div",{style:{display:"grid",gap:6,marginTop:10}},a.map(h=>{var b;let v=J[h.code]||{title:h.code,route:null};return React.createElement("div",{key:h.code,style:{display:"flex",alignItems:"center",gap:10,fontSize:12.5,color:"var(--ink-2)"}},React.createElement("span",{className:"dot",style:{background:((b=J[h.code])==null?void 0:b.sev)==="high"?"var(--red)":o}}),React.createElement("b",{style:{color:"var(--ink)"}},v.title,".")," ",React.createElement("span",{style:{color:"var(--ink-3)"}},h.message),v.route&&e&&React.createElement("button",{onClick:()=>e(v.route),style:{color:"var(--acc-2)",fontWeight:600,marginLeft:"auto"}},"Fix \u2192"))})))}function de({go:e}){let s=te(),{jobs:t}=re(5e3),n=t||[],a=n.filter(g=>g.status==="running"||g.status==="queued").length,i=s.caps&&s.caps.capabilities||[],o=s.caps&&s.caps.limits||{},f=[{lab:"Runtime",ic:d.server,val:s.online?"Online":s.loading?"\u2026":"Offline",delta:s.health?s.health.mode:"\u2014",dir:s.online?"up":"down",note:"this node"},{lab:"Capabilities",ic:d.zap,val:String(i.length||"\u2014"),delta:s.health?"v"+s.health.version:"\u2014",dir:"flat",note:"advertised"},{lab:"Active jobs",ic:d.activity,val:String(a),delta:String(n.length)+" total",dir:"up",note:"live"},{lab:"Max concurrency",ic:d.layers,val:String(o.max_concurrent_jobs||"\u2014"),delta:(o.max_ttl_seconds||600)+"s TTL",dir:"flat",note:"limit"}],{runtimes:c}=ae(5e3),h=n.slice(0,6),v=s.caps&&s.caps.runtimes||{},b={};n.forEach(g=>{b[g.status]=(b[g.status]||0)+1});let y=["complete","running","queued","error","expired","cancelled"].filter(g=>b[g]).map(g=>[g,b[g]]);return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},s.health?s.health.mode+" \xB7 "+s.health.runtime_id:"matrix runtime"),React.createElement("h1",null,"Overview"),React.createElement("p",null,"Real-time health of this Matrix Runtime, its capabilities, and jobs.")),React.createElement("div",{style:{display:"flex",gap:10}},React.createElement("button",{className:"btn btn-ghost",onClick:()=>e("logs")},React.createElement(u,{d:d.logs,size:15})," Live logs"),React.createElement("button",{className:"btn btn-primary",onClick:()=>e("catalog")},React.createElement(u,{d:d.play,size:15})," New sandbox"))),React.createElement("div",{className:"metrics"},f.map(g=>React.createElement("div",{className:"metric",key:g.lab},React.createElement("div",{className:"lab"},React.createElement("span",{style:{color:"var(--acc)",display:"inline-flex"}},React.createElement(u,{d:g.ic,size:15}))," ",g.lab),React.createElement("div",{className:"val"},g.val),React.createElement("div",{className:"delta "+g.dir},g.dir!=="flat"&&React.createElement(u,{d:g.dir==="up"?d.arrowup:d.arrowdn,size:12}),g.delta," ",React.createElement("span",{style:{color:"var(--ink-4)"}},"\xB7 ",g.note))))),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1.5fr 1fr",gap:16,marginTop:16},className:"ov-grid"},React.createElement("div",{className:"card"},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Runtimes ",c&&React.createElement(P,null)),React.createElement("button",{className:"chip",onClick:()=>e("runtimes")},"manage ",React.createElement(u,{d:d.chevr,size:12}))),React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Runtime"),React.createElement("th",{className:"hide-sm"},"Mode"),React.createElement("th",null,"Region"),React.createElement("th",null,"Jobs"),React.createElement("th",null,"Status"))),React.createElement("tbody",null,(c||[]).length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:5,style:{color:"var(--ink-4)",textAlign:"center",padding:20}},c?"No runtimes.":"\u2026")),(c||[]).map(g=>React.createElement("tr",{className:"row",key:g.id},React.createElement("td",{className:"nm mono"},g.name),React.createElement("td",{className:"hide-sm"},React.createElement("span",{className:"chip"},g.mode)),React.createElement("td",{className:"mono",style:{fontSize:12}},g.region),React.createElement("td",{className:"mono"},g.jobs),React.createElement("td",null,React.createElement("span",{className:"chip "+g.statusClass},React.createElement("span",{className:"dot "+g.statusClass+(g.statusClass==="green"?" pulse":"")})," ",g.status))))))),React.createElement("div",{style:{display:"grid",gap:16,alignContent:"start"}},React.createElement("div",{className:"card card-pad"},React.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},React.createElement("span",{style:{fontSize:13,fontWeight:700}},"Jobs by status"),React.createElement("span",{className:"chip"},n.length," total")),React.createElement("div",{style:{display:"grid",gap:9,marginTop:13}},y.length===0&&React.createElement("div",{style:{fontSize:12.5,color:"var(--ink-4)"}},"No jobs yet \u2014 start a sandbox or inspect a model."),y.map(([g,N])=>React.createElement("div",{key:g,style:{display:"flex",alignItems:"center",gap:8,fontSize:12.5}},React.createElement("span",{className:"chip "+(q[g]||""),style:{height:20,minWidth:78}},g),React.createElement("div",{className:"bar",style:{flex:1}},React.createElement("span",{className:q[g]==="red"?"amber":"green",style:{width:Math.round(N/n.length*100)+"%"}})),React.createElement("span",{className:"mono",style:{fontSize:11,color:"var(--ink-3)"}},N))))),React.createElement("div",{className:"card card-pad"},React.createElement("span",{style:{fontSize:13,fontWeight:700}},"Runtime health"),React.createElement("div",{style:{display:"grid",gap:11,marginTop:13}},[["Control plane",s.online?"green":"red",s.online?"operational":"unreachable"],["Node runner",v.node?"green":"amber",v.node?"ready":"not found"],["Python runner",v.python?"green":"amber",v.python?"ready":"not found"],["Ollama",v.ollama?"green":"gray",v.ollama?"ready":"not detected"],["vLLM",v.vllm?"green":"gray",v.vllm?"ready":"not detected"]].map(([g,N,p])=>React.createElement("div",{key:g,style:{display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:12.5}},React.createElement("span",{style:{display:"flex",alignItems:"center",gap:8,color:"var(--ink-2)"}},React.createElement("span",{className:"dot "+N+(N==="green"?" pulse":"")})," ",g),React.createElement("span",{style:{color:"var(--ink-4)"}},p))))))),React.createElement("div",{className:"card",style:{marginTop:16}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Recent jobs ",t&&React.createElement(P,null)),React.createElement("button",{className:"chip",onClick:()=>e("agents")},"view all ",React.createElement(u,{d:d.chevr,size:12}))),React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Job ID"),React.createElement("th",null,"Type"),React.createElement("th",null,"Status"),React.createElement("th",{className:"hide-sm"},"Created"))),React.createElement("tbody",null,h.length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:4,style:{color:"var(--ink-4)",textAlign:"center",padding:24}},"No jobs yet \u2014 start a sandbox or inspect a model.")),h.map(g=>React.createElement("tr",{className:"row",key:g.job_id},React.createElement("td",{className:"nm mono"},g.job_id),React.createElement("td",null,React.createElement("span",{className:"chip"},g.type)),React.createElement("td",null,React.createElement("span",{className:"chip "+(q[g.status]||"")},g.status==="running"&&React.createElement("span",{className:"dot blue"}),g.status)),React.createElement("td",{className:"hide-sm mono",style:{fontSize:12}},(g.created_at||"").replace("T"," ").replace("Z",""))))))))}function Ae({openItem:e}){let[s,t]=React.useState("All"),[n,a]=React.useState(""),i=Se(),o=["All","MCP Servers","Agents","Tools","Models","Verified","Sandbox Enabled"],f=(i||[]).filter(c=>n&&!(c.name+c.desc+c.id).toLowerCase().includes(n.toLowerCase())?!1:s==="All"?!0:s==="Verified"?c.verified:s==="Sandbox Enabled"?c.sandbox:c.kind===s.replace(/s$/,"")||c.kind+"s"===s);return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Registry ",i&&React.createElement(P,null)),React.createElement("h1",null,"Catalog"),React.createElement("p",null,"Curated MCP servers, agents, tools, and models served by this runtime. Test sandbox-enabled servers in a 10-minute session before you install."))),React.createElement("div",{className:"topsearch",style:{width:"100%",maxWidth:480,height:40,marginBottom:16}},React.createElement(u,{d:d.search,size:16}),React.createElement("input",{value:n,onChange:c=>a(c.target.value),placeholder:"Search MCP servers, tools, agents, models\u2026"})),React.createElement("div",{style:{display:"flex",gap:7,flexWrap:"wrap",marginBottom:18}},o.map(c=>React.createElement("button",{key:c,onClick:()=>t(c),className:"chip"+(s===c?" green":""),style:{height:30,cursor:"pointer",fontFamily:"var(--font)",fontSize:12.5}},c))),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:14},className:"ov-grid"},i===null&&React.createElement("div",{style:{color:"var(--ink-4)",padding:24}},"Loading catalog\u2026"),f.map(c=>React.createElement("div",{className:"card card-pad",key:c.id,style:{display:"flex",flexDirection:"column",gap:13}},React.createElement("div",{style:{display:"flex",gap:13}},React.createElement(Ne,{initials:c.initials}),React.createElement("div",{style:{minWidth:0,flex:1}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:7,flexWrap:"wrap"}},React.createElement("span",{className:"chip "+c.kindClass},c.kind),c.verified&&React.createElement("span",{className:"chip green"},React.createElement(u,{d:d.check,size:11})," Verified"),c.sandbox&&c.startCommand&&React.createElement("span",{className:"chip blue"},"Sandbox \xB7 live"),c.sandbox&&!c.startCommand&&React.createElement("span",{className:"chip blue"},"Sandbox")),React.createElement("button",{onClick:()=>e(c),style:{display:"block",marginTop:9,fontSize:16,fontWeight:700,color:"var(--ink)",textAlign:"left"}},c.name))),React.createElement("p",{style:{margin:0,fontSize:12.5,lineHeight:1.55,color:"var(--ink-3)"}},c.desc),React.createElement("div",{style:{display:"flex",gap:14,fontSize:11.5,color:"var(--ink-3)",fontFamily:"var(--mono)",flexWrap:"wrap"}},React.createElement("span",null,c.runtime),React.createElement("span",null,"\xB7 ",c.source),React.createElement("span",null,"\xB7 ",c.license),React.createElement("span",null,"\xB7 ",c.secrets?"needs secrets":"no secrets")),React.createElement("div",{style:{display:"flex",gap:9,marginTop:2}},c.sandbox?React.createElement("button",{className:"btn btn-primary btn-sm",onClick:()=>e(c,!0)},React.createElement(u,{d:d.play,size:13})," Test Sandbox"):React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>e(c)},"View"),React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>e(c)},"Details"))))))}function Pe({item:e,back:s,startSandbox:t}){let n={id:e.id,kind:e.kind.toLowerCase().replace(" ","_"),runtime:{type:e.runtime.split(" / ")[0].toLowerCase(),transport:e.runtime.includes("stdio")?"stdio":"remote"},sandbox:{enabled:e.sandbox,ttl_seconds:600,requires_secrets:e.secrets},source:e.source,license:e.license,version:e.version},a=[["Runtime",e.runtime],["Source",e.source],["License",e.license],["Secrets",e.secrets?"Required":"None"],["Network",e.network],["Start command",e.startCommand||"\u2014"]];return React.createElement("div",{className:"wrap rise"},React.createElement("button",{className:"chip",onClick:s,style:{marginBottom:16,cursor:"pointer"}},React.createElement(u,{d:d.chev,size:13,style:{transform:"rotate(90deg)"}})," Catalog"),React.createElement("div",{style:{display:"flex",gap:18,flexWrap:"wrap",alignItems:"flex-start",justifyContent:"space-between"}},React.createElement("div",{style:{display:"flex",gap:16,minWidth:0}},React.createElement(Ne,{initials:e.initials,size:64}),React.createElement("div",{style:{minWidth:0}},React.createElement("div",{style:{display:"flex",gap:7,flexWrap:"wrap"}},React.createElement("span",{className:"chip "+e.kindClass},e.kind),e.verified&&React.createElement("span",{className:"chip green"},React.createElement(u,{d:d.check,size:11})," Verified"),e.sandbox&&React.createElement("span",{className:"chip blue"},"Sandbox Enabled"),!e.secrets&&React.createElement("span",{className:"chip"},"No Secrets")),React.createElement("h1",{style:{margin:"13px 0 0",fontSize:26,fontWeight:700,letterSpacing:"-0.02em"}},e.name),React.createElement("p",{style:{margin:"9px 0 0",fontSize:13.5,color:"var(--ink-3)",maxWidth:540,lineHeight:1.6}},e.desc)))),React.createElement("div",{style:{display:"flex",gap:10,marginTop:22,flexWrap:"wrap"}},React.createElement("button",{className:"btn btn-primary",disabled:!e.sandbox,onClick:()=>t(e),title:e.sandbox?"":"Sandbox not available for this item"},React.createElement(u,{d:d.play,size:15})," Test in 10-minute Sandbox"),React.createElement("button",{className:"btn btn-ghost"},React.createElement(u,{d:d.download,size:15})," Install"),React.createElement("button",{className:"btn btn-ghost"},React.createElement(u,{d:d.logs,size:15})," Copy CLI Command"),React.createElement("button",{className:"btn btn-ghost"},React.createElement(u,{d:d.bot,size:15})," Add to Agent")),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16,marginTop:22},className:"ov-grid"},React.createElement("div",{style:{display:"grid",gap:16,alignContent:"start"}},React.createElement("div",{className:"card"},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Overview")),React.createElement("div",{style:{padding:"4px 18px"}},a.map(([i,o])=>React.createElement("div",{key:i,style:{display:"flex",justifyContent:"space-between",padding:"11px 0",borderBottom:"1px solid var(--line)",fontSize:13}},React.createElement("span",{style:{color:"var(--ink-3)"}},i),React.createElement("span",{className:"mono",style:{color:"var(--ink)"}},o))))),React.createElement("div",{className:"card card-pad"},React.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},React.createElement("span",{style:{fontWeight:700,fontSize:14}},"Sandbox"),React.createElement("span",{className:"chip "+(e.sandbox?"green":"")},e.sandbox?"Available":"Unavailable")),React.createElement("div",{style:{display:"grid",gap:9,marginTop:13,fontSize:12.5}},[["TTL","10 minutes"],["Requires secrets",e.secrets?"Yes":"No"],["Network",e.network],["Runtime",e.runtime.split(" / ")[0]]].map(([i,o])=>React.createElement("div",{key:i,style:{display:"flex",justifyContent:"space-between"}},React.createElement("span",{style:{color:"var(--ink-3)"}},i),React.createElement("span",{className:"mono"},o)))))),React.createElement("div",{className:"card",style:{overflow:"hidden"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Manifest"),React.createElement("span",{className:"chip mono"},"manifest.json")),React.createElement("pre",{className:"mono",style:{margin:0,padding:16,fontSize:12,lineHeight:1.7,color:"var(--ink-2)",overflowX:"auto"}},JSON.stringify(n,null,2)))))}function We({item:e,onClose:s,onStart:t}){let n=!!e.startCommand;return ReactDOM.createPortal(React.createElement("div",{className:"scrim",style:{position:"fixed",inset:0,zIndex:70,display:"flex",alignItems:"center",justifyContent:"center",padding:24,background:"rgba(5,8,12,0.7)",backdropFilter:"blur(6px)"},onMouseDown:a=>{a.target===a.currentTarget&&s()}},React.createElement("div",{className:"rise card",style:{width:"100%",maxWidth:460,background:"var(--panel-2)"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Test ",e.name),React.createElement("button",{className:"iconbtn",onClick:s},React.createElement(u,{d:d.x,size:16}))),React.createElement("div",{style:{padding:18}},React.createElement("p",{style:{margin:0,fontSize:13,lineHeight:1.6,color:"var(--ink-2)"}},n?"This starts a real sandbox on this Matrix Runtime over stdio. No production credentials are used. The session expires automatically after 10 minutes.":"This item has no runnable start command in this demo. The session will play a simulated lifecycle."),React.createElement("div",{style:{display:"grid",gap:1,marginTop:16,borderRadius:"var(--r-sm)",overflow:"hidden",border:"1px solid var(--line)"}},[["Runtime","Matrix Runtime \xB7 local"],["TTL","10 minutes"],["Network",e.network],["Secrets","None"],["Command",n?e.startCommand:"\u2014"]].map(([a,i])=>React.createElement("div",{key:a,style:{display:"flex",gap:12,padding:"11px 13px",background:"var(--inset)"}},React.createElement("span",{style:{width:84,flexShrink:0,fontSize:12,color:"var(--ink-3)",textTransform:"uppercase",letterSpacing:"0.05em"}},a),React.createElement("span",{className:"mono",style:{fontSize:12.5,color:"var(--ink)",wordBreak:"break-all"}},i)))),React.createElement("div",{style:{display:"flex",gap:10,marginTop:18}},React.createElement("button",{className:"btn btn-primary",style:{flex:1},onClick:t},React.createElement(u,{d:d.play,size:15})," Start Sandbox"),React.createElement("button",{className:"btn btn-ghost",onClick:s},"Cancel"))))),document.body)}function ce(e){let s=e.input_schema||e.inputSchema||{},t=s.properties||{},n=s.required||Object.keys(t),a={};for(let i of n){let o=t[i]||{};i==="path"?a[i]="/tmp":i==="pattern"?a[i]="*":o.type==="number"||o.type==="integer"?a[i]=0:o.type==="boolean"?a[i]=!1:o.type==="array"?a[i]=[]:a[i]=""}return a}var pe=[{step:"validate",status:"ok",message:"Command accepted"},{step:"sandbox",status:"start",message:"Temporary directory created"},{step:"mcp_start",status:"start",message:"MCP server started"},{step:"mcp_initialize",status:"ok",message:"MCP initialize succeeded"},{step:"tools_list",status:"ok",message:"Found 4 tools"},{step:"ready",status:"ok",message:"Sandbox ready"}],Le=[{name:"list_directory",description:"Read directory contents.",input_schema:{properties:{path:{type:"string"}},required:["path"]}},{name:"read_file",description:"Read the contents of a file.",input_schema:{properties:{path:{type:"string"}},required:["path"]}},{name:"write_file",description:"Write content to a file.",input_schema:{properties:{path:{type:"string"},content:{type:"string"}},required:["path","content"]}}];function Ee({item:e,back:s}){let[t,n]=React.useState([]),[a,i]=React.useState("starting"),[o,f]=React.useState([]),[c,h]=React.useState(600),[v,b]=React.useState(0),[y,g]=React.useState(null),[N,p]=React.useState(!1),[l,x]=React.useState(!0),m=React.useRef(null),S=React.useRef(null);React.useEffect(()=>{let w=null,R=null,A=!1,W=e.startCommand;async function $(r){try{let k=await C.get("/v1/sandbox/sessions/"+r+"/tools");A||f(k.tools||[])}catch{}}function D(){x(!1);let r=0;R=setInterval(()=>{if(r>=pe.length){clearInterval(R),i("ready"),f(Le),B();return}n(k=>[...k,pe[r]]),r++},600)}function B(r){R=setInterval(()=>{h(k=>r?Math.max(0,Math.round((r-Date.now())/1e3)):Math.max(0,k-1))},1e3)}return W?((async()=>{try{let r=await C.post("/v1/sandbox/sessions",{entity_id:e.id,ttl_seconds:600,runtime:"node",transport:"stdio",start_command:W});if(A){C.del("/v1/sandbox/sessions/"+r.session_id).catch(()=>{});return}m.current=r.session_id;let k=r.expires_at?new Date(r.expires_at).getTime():null;w=new EventSource(C.eventsURL("/v1/sandbox/sessions/"+r.session_id+"/events")),w.onmessage=_=>{let I;try{I=JSON.parse(_.data)}catch{return}n(V=>[...V,I]),I.step==="ready"?(i("ready"),$(r.session_id)):I.status==="expired"?i("expired"):I.status==="error"&&i("error")},w.onerror=()=>{},B(k)}catch(r){n(k=>[...k,{step:"error",status:"error",message:r.message}]),D()}})(),()=>{A=!0,w&&w.close(),R&&clearInterval(R),m.current&&C.del("/v1/sandbox/sessions/"+m.current).catch(()=>{})}):(D(),()=>{A=!0,R&&clearInterval(R)})},[e.id]),React.useEffect(()=>{S.current&&(S.current.scrollTop=S.current.scrollHeight)},[t]);let z=String(Math.floor(c/60)).padStart(2,"0"),T=String(c%60).padStart(2,"0");async function L(){let w=o[v];if(!w)return;p(!0),g(null);let R=ce(w);try{if(l&&m.current){let A=await C.post("/v1/sandbox/sessions/"+m.current+"/tools/call",{name:w.name,arguments:R});g(A.result!==void 0?A.result:A)}else await ee(700),g(w.name==="list_directory"?{entries:["notes.txt","out.txt","project/","readme.md"],count:4}:{ok:!0,tool:w.name})}catch(A){g({error:A.message})}finally{p(!1)}}let M=o.length;return React.createElement("div",{className:"wrap rise"},React.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:14,flexWrap:"wrap",marginBottom:18}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:12}},React.createElement("button",{className:"chip",onClick:s,style:{cursor:"pointer"}},React.createElement(u,{d:d.chev,size:13,style:{transform:"rotate(90deg)"}})," Back"),React.createElement("div",null,React.createElement("h1",{style:{margin:0,fontSize:20,fontWeight:700}},e.name," \xB7 Sandbox"),React.createElement("p",{style:{margin:"3px 0 0",fontSize:12,color:"var(--ink-3)",fontFamily:"var(--mono)"}},"session ",m.current||"sbx_\u2026"," \xB7 ",l?"live runtime":"simulated"))),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:10}},l&&React.createElement(P,null),React.createElement("span",{className:"chip "+(a==="ready"?"green":a==="error"?"red":"amber")},React.createElement("span",{className:"dot "+(a==="ready"?"green pulse":a==="error"?"red":"amber")})," ",a==="ready"?"Running":a==="error"?"Error":a==="expired"?"Expired":"Starting"),React.createElement("span",{className:"chip mono",style:{fontSize:13}},React.createElement(u,{d:d.clock,size:13})," ",z,":",T))),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"260px 1fr 300px",gap:16},className:"sbx-grid"},React.createElement("div",{className:"card",style:{alignSelf:"start"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Lifecycle")),React.createElement("div",{style:{padding:"8px 16px 14px"}},t.map((w,R)=>React.createElement("div",{key:R,className:"rise",style:{display:"flex",gap:10,padding:"9px 0",borderBottom:"1px solid var(--line)"}},React.createElement("span",{style:{color:w.status==="error"?"var(--red)":"var(--acc)",display:"inline-flex",marginTop:1}},React.createElement(u,{d:w.status==="error"?d.x:d.check,size:15,sw:2.4})),React.createElement("div",null,React.createElement("div",{className:"mono",style:{fontSize:12.5,color:"var(--ink)"}},w.step),React.createElement("div",{style:{fontSize:11.5,color:"var(--ink-3)",marginTop:1}},w.message)))),a==="starting"&&React.createElement("div",{style:{padding:"9px 0",color:"var(--ink-4)",fontSize:12}},React.createElement("span",{className:"cur"})))),React.createElement("div",{className:"card",style:{alignSelf:"start"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Tool explorer"),React.createElement("span",{className:"chip"},a==="ready"?M+" tools":"\u2014")),a!=="ready"?React.createElement("div",{style:{padding:40,textAlign:"center",color:"var(--ink-3)",fontSize:13}},"Waiting for ",React.createElement("span",{className:"mono"},"tools/list"),"\u2026"):React.createElement("div",{style:{padding:16}},React.createElement("div",{style:{display:"flex",gap:7,flexWrap:"wrap",marginBottom:14}},o.map((w,R)=>React.createElement("button",{key:w.name,onClick:()=>{b(R),g(null)},className:"chip"+(v===R?" green":""),style:{cursor:"pointer",height:28}},w.name))),o[v]&&React.createElement(React.Fragment,null,React.createElement("p",{style:{margin:"0 0 10px",fontSize:12.5,color:"var(--ink-3)"}},o[v].description),React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)",marginBottom:6,textTransform:"uppercase",letterSpacing:"0.06em"}},"Input"),React.createElement("pre",{className:"mono",style:{margin:0,padding:12,background:"var(--inset)",border:"1px solid var(--line)",borderRadius:"var(--r-sm)",fontSize:12,color:"var(--ink-2)",overflowX:"auto"}},JSON.stringify(ce(o[v]),null,2)),React.createElement("button",{className:"btn btn-primary btn-sm",style:{marginTop:12},onClick:L,disabled:N},N?"Running\u2026":React.createElement(React.Fragment,null,React.createElement(u,{d:d.play,size:13})," Run Tool"))),y&&React.createElement("div",{className:"rise",style:{marginTop:12}},React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)",marginBottom:6,textTransform:"uppercase",letterSpacing:"0.06em"}},"Output"),React.createElement("pre",{className:"mono",style:{margin:0,padding:12,background:"var(--inset)",border:"1px solid var(--acc-line)",borderRadius:"var(--r-sm)",fontSize:12,color:"var(--acc-2)",overflowX:"auto",maxHeight:240}},JSON.stringify(y,null,2))))),React.createElement("div",{style:{display:"grid",gap:16,alignContent:"start"}},React.createElement("div",{className:"card"},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Logs"),l&&React.createElement("span",{className:"chip"},React.createElement("span",{className:"dot green pulse"})," SSE")),React.createElement("div",{className:"logwin",ref:S,style:{height:180,borderRadius:0,border:"none"}},t.map((w,R)=>React.createElement("div",{key:R,style:{color:w.status==="error"?"var(--red)":"var(--ink-3)"}},React.createElement("span",{style:{color:"var(--ink-4)"}},"[",w.step,"]")," ",w.message)),a==="ready"&&React.createElement("div",{style:{color:"var(--acc-2)"}},"stdout: server listening on stdio"),React.createElement("span",{className:"cur"}))),React.createElement("div",{className:"card card-pad",style:{borderColor:a==="ready"?"var(--acc-line)":"var(--line)"}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},React.createElement("span",{style:{fontWeight:700,fontSize:14}},"Verdict"),React.createElement("span",{className:"chip "+(a==="ready"?"green":a==="error"?"red":"amber")},a==="ready"?"Passed":a==="error"?"Failed":"Pending")),a==="ready"?React.createElement(React.Fragment,null,React.createElement("p",{style:{margin:"11px 0 0",fontSize:12.5,lineHeight:1.6,color:"var(--ink-2)"}},"The MCP server initialized and exposed ",M," tools. No secrets were required. No blocked commands detected."),React.createElement("div",{style:{marginTop:12,fontSize:11,color:"var(--ink-4)",textTransform:"uppercase",letterSpacing:"0.06em"}},"Recommended next step"),React.createElement("pre",{className:"mono",style:{margin:"6px 0 0",padding:11,background:"var(--inset)",border:"1px solid var(--line)",borderRadius:"var(--r-sm)",fontSize:11.5,color:"var(--acc-2)",overflowX:"auto"}},"matrix install ",e.id.split(":")[1]," --alias ",e.id.split(":")[1])):React.createElement("p",{style:{margin:"11px 0 0",fontSize:12.5,color:"var(--ink-3)"}},a==="error"?"Sandbox failed \u2014 see lifecycle.":"Running safety checks\u2026")))))}function Fe(){let{runtimes:e,refresh:s}=ze(5e3);return e===null?null:React.createElement("div",{className:"card",style:{overflow:"hidden",marginBottom:16}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Workspace runtimes ",React.createElement("span",{style:{color:"var(--ink-4)",fontWeight:500}},"\xB7 joined sandboxes & self-hosted")),React.createElement("button",{className:"chip",style:{cursor:"pointer"},onClick:s},React.createElement(u,{d:d.refresh,size:11})," refresh")),React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Runtime"),React.createElement("th",null,"Status"),React.createElement("th",{className:"hide-sm"},"Kind"),React.createElement("th",{className:"hide-sm"},"Capabilities"),React.createElement("th",{className:"hide-sm"},"Heartbeat"))),React.createElement("tbody",null,e.length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:5,style:{color:"var(--ink-4)",textAlign:"center",padding:22}},"No runtimes have joined yet. Use ",React.createElement("b",{style:{color:"var(--ink-2)"}},"Add a runtime")," to mint a join token or duplicate the HF Space.")),e.map(t=>{let n=Ie[t.status]||"violet";return React.createElement("tr",{className:"row",key:t.id},React.createElement("td",null,React.createElement("div",{className:"nm mono",style:{display:"flex",alignItems:"center",gap:8}},t.name||t.id),t.hf_space?React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)"},className:"hide-sm"},"\u{1F917} ",t.hf_space):t.url?React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)"},className:"hide-sm"},t.url):null),React.createElement("td",null,React.createElement("span",{className:"chip "+n},React.createElement("span",{className:"dot "+n+(n==="green"?" pulse":"")})," ",t.status)),React.createElement("td",{className:"hide-sm"},React.createElement("span",{className:"chip"},t.kind||"self-hosted")),React.createElement("td",{className:"hide-sm",style:{fontSize:11.5,color:"var(--ink-3)"}},(t.caps||[]).join(" \xB7 ")||"\u2014"),React.createElement("td",{className:"hide-sm mono",style:{fontSize:12,color:"var(--ink-3)"}},Te(t.last_seen_at)))}))))}function Oe({go:e}){let{runtimes:s,refresh:t}=ae(5e3),n=s||[];return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Execution plane ",s&&React.createElement(P,null)),React.createElement("h1",null,"Runtimes"),React.createElement("p",null,"Matrix Runtime installations connected to this control surface. Hybrid runtimes connect outbound \u2014 no inbound ports.")),React.createElement("div",{style:{display:"flex",gap:9}},React.createElement("button",{className:"btn btn-ghost",onClick:t},React.createElement(u,{d:d.refresh,size:15})," Refresh"),React.createElement("button",{className:"btn btn-primary",onClick:()=>e("install")},React.createElement(u,{d:d.download,size:15})," Add a runtime"))),React.createElement(Fe,null),React.createElement("div",{className:"card",style:{overflow:"hidden"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"This control node")),React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Runtime"),React.createElement("th",null,"Status"),React.createElement("th",{className:"hide-sm"},"Mode"),React.createElement("th",{className:"hide-sm"},"Region"),React.createElement("th",null,"Jobs"),React.createElement("th",{className:"hide-sm"},"Heartbeat"),React.createElement("th",null))),React.createElement("tbody",null,n.length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:7,style:{color:"var(--ink-4)",textAlign:"center",padding:24}},s?"No runtimes connected.":"\u2026")),n.map(a=>React.createElement("tr",{className:"row",key:a.id},React.createElement("td",null,React.createElement("div",{className:"nm mono",style:{display:"flex",alignItems:"center",gap:8}},a.name," ",a.live&&React.createElement(P,null)),React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)"},className:"hide-sm"},a.caps.join(" \xB7 "))),React.createElement("td",null,React.createElement("span",{className:"chip "+a.statusClass},React.createElement("span",{className:"dot "+a.statusClass+(a.statusClass==="green"?" pulse":"")})," ",a.status)),React.createElement("td",{className:"hide-sm"},React.createElement("span",{className:"chip"},a.mode)),React.createElement("td",{className:"hide-sm mono",style:{fontSize:12}},a.region),React.createElement("td",{className:"mono"},a.jobs),React.createElement("td",{className:"hide-sm mono",style:{fontSize:12,color:"var(--ink-3)"}},a.heartbeat),React.createElement("td",null,React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>e("agents")},"View"))))))))}var je=(window.MATRIX_HF_SPACE_URL||"https://huggingface.co/spaces/agent-matrix/matrixcloud")+"?duplicate=true",Y=window.MATRIX_CLOUD_URL||"https://api.matrixhub.io";function De(){let[e,s]=React.useState("Hugging Face Space"),[t,n]=React.useState(""),[a,i]=React.useState(!1),[o,f]=React.useState(""),[c,h]=React.useState(!1),v=["Hugging Face Space","Docker","Kubernetes","Helm","Local Dev","On-Prem"],b=t||"mxrt_xxxxx_mint_a_token";async function y(){f(""),i(!0);try{let p=await K.mintJoinToken("console",1,60);n(p.secret)}catch(p){f(p.message||"Could not mint a join token.")}finally{i(!1)}}function g(){try{navigator.clipboard.writeText(t)}catch{}h(!0),setTimeout(()=>h(!1),1300)}let N={Helm:`helm install matrix-runtime ./deploy/helm/matrix-runtime \\
  --namespace matrix-runtime --create-namespace \\
  --set cloud.url=${Y} \\
  --set runtime.joinToken=${b}`,Docker:`docker run -d --name matrix-runtime \\
  -e MATRIX_CLOUD_URL=${Y} \\
  -e MATRIX_RUNTIME_JOIN_TOKEN=${b} \\
  -v matrix-runtime-data:/var/lib/matrix-runtime \\
  ghcr.io/agent-matrix/matrix-runtime:latest`,Kubernetes:`kubectl apply -f deploy/k8s/namespace.yaml
kubectl -n matrix-runtime create secret generic join-token \\
  --from-literal=token=${b}`,"Hugging Face Space":`# 1) Duplicate the Space (button on the right), then
# 2) set these as Space secrets:
MATRIX_RUNTIME_MODE=hf-space
MATRIX_CLOUD_URL=${Y}
MATRIX_RUNTIME_JOIN_TOKEN=${b}
# 3) (optional) bring your own HF inference:
HF_TOKEN=hf_your_token`,"Local Dev":`make build
./bin/matrix-runtime --mode local-dev
# join the control plane:
matrix-runtime join --cloud-url ${Y} --token ${b}`,"On-Prem":`sudo make install INSTALL_SYSTEMD=1
sudo systemctl enable --now matrix-runtime
# join-token: ${b}`};return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Onboarding"),React.createElement("h1",null,"Add a runtime"),React.createElement("p",null,"MatrixCloud manages the control plane. A runtime executes jobs inside your environment \u2014 duplicate the Hugging Face Space for a managed sandbox, or self-host. Runtimes connect outbound only.")),React.createElement("span",{className:"chip violet"},"Hybrid \xB7 recommended")),React.createElement("div",{className:"card card-pad",style:{display:"flex",gap:16,alignItems:"center",marginBottom:18,borderColor:"rgba(157,123,255,0.3)"}},[["Control plane","MatrixHub Cloud","SaaS"],["\u2192","",""],["Execution plane","Your infrastructure","Runtime"]].map(([p,l,x],m)=>p==="\u2192"?React.createElement(u,{key:m,d:d.chevr,size:20,style:{color:"var(--ink-4)",flexShrink:0}}):React.createElement("div",{key:m,style:{flex:1,padding:"12px 14px",borderRadius:"var(--r-md)",border:"1px solid var(--line-2)",background:"var(--inset)"}},React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)",textTransform:"uppercase",letterSpacing:"0.06em"}},p),React.createElement("div",{style:{fontWeight:700,fontSize:14,marginTop:4}},l),React.createElement("span",{className:"chip",style:{marginTop:8}},x)))),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 300px",gap:16},className:"ov-grid"},React.createElement("div",null,React.createElement("div",{style:{display:"flex",gap:7,flexWrap:"wrap",marginBottom:14}},v.map(p=>React.createElement("button",{key:p,onClick:()=>s(p),className:"chip"+(e===p?" green":""),style:{height:30,cursor:"pointer",fontFamily:"var(--font)",fontSize:12.5}},p))),React.createElement(Me,{label:e+" install"},N[e]),React.createElement("div",{className:"card card-pad",style:{marginTop:14}},React.createElement("span",{style:{fontWeight:700,fontSize:13.5}},"Expected result"),React.createElement("p",{style:{margin:"8px 0 0",fontSize:12.5,color:"var(--ink-3)",lineHeight:1.6}},"After installation, your runtime appears under ",React.createElement("b",{style:{color:"var(--ink-2)"}},"Runtimes")," with status ",React.createElement("span",{className:"chip green",style:{height:20}},React.createElement("span",{className:"dot green"})," Online")," and these capabilities:"),React.createElement("div",{style:{display:"flex",gap:7,flexWrap:"wrap",marginTop:11}},["mcp.test","mcp.run","agent.run","model.pull","model.preload"].map(p=>React.createElement("span",{key:p,className:"chip green"},p))))),React.createElement("div",{style:{display:"grid",gap:16,alignContent:"start"}},e==="Hugging Face Space"&&React.createElement("a",{className:"btn btn-primary",href:je,target:"_blank",rel:"noopener noreferrer",style:{height:46,justifyContent:"center",textDecoration:"none"}},React.createElement(u,{d:d.download,size:16})," Duplicate the Space"),React.createElement("div",{className:"card card-pad"},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},React.createElement(u,{d:d.key,size:16,style:{color:"var(--acc)"}}),React.createElement("span",{style:{fontWeight:700,fontSize:13.5}},"Runtime join token")),t?React.createElement(React.Fragment,null,React.createElement("div",{className:"mono",style:{marginTop:12,padding:"11px 13px",borderRadius:"var(--r-sm)",background:"var(--inset)",border:"1px solid var(--line-2)",fontSize:13,color:"var(--ink)",letterSpacing:"0.04em",wordBreak:"break-all"}},t),React.createElement("div",{style:{display:"flex",gap:8,marginTop:12}},React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:g,style:{flex:1}},c?React.createElement(React.Fragment,null,React.createElement(u,{d:d.check,size:14})," Copied"):React.createElement(React.Fragment,null,React.createElement(u,{d:d.logs,size:14})," Copy")),React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:y,title:"Mint another"},React.createElement(u,{d:d.refresh,size:14}))),React.createElement("p",{style:{margin:"11px 0 0",fontSize:11.5,color:"var(--acc-2)",lineHeight:1.5}},"Shown once \u2014 copy it now. Single-use, expires in 60 minutes.")):React.createElement(React.Fragment,null,React.createElement("p",{style:{margin:"11px 0 0",fontSize:12,color:"var(--ink-3)",lineHeight:1.5}},"Mint a single-use token scoped to your workspace, then paste it into the runtime's secrets."),React.createElement("button",{className:"btn btn-primary btn-sm",onClick:y,disabled:a,style:{marginTop:12,width:"100%"}},a?"Minting\u2026":React.createElement(React.Fragment,null,React.createElement(u,{d:d.key,size:14})," Mint join token")),o&&React.createElement("p",{style:{margin:"10px 0 0",fontSize:11.5,color:"var(--red)"}},o))),React.createElement("div",{className:"card card-pad"},React.createElement("span",{style:{fontWeight:700,fontSize:13.5}},"Security posture"),React.createElement("div",{style:{display:"grid",gap:9,marginTop:12}},["Outbound-only tunnel","Secrets stay on-prem","Signed runtime image","TLS + audited control channel"].map(p=>React.createElement("div",{key:p,style:{display:"flex",alignItems:"center",gap:8,fontSize:12.5,color:"var(--ink-2)"}},React.createElement("span",{style:{color:"var(--acc)",display:"inline-flex"}},React.createElement(u,{d:d.check,size:14,sw:2.4}))," ",p)))))))}var Be=[{id:"deepseek-ai/DeepSeek-V3",pipeline_tag:"text-generation",downloads:152e4,likes:8100,tags:["transformers","moe"],library_name:"transformers"},{id:"deepseek-ai/DeepSeek-R1",pipeline_tag:"text-generation",downloads:21e5,likes:11200,tags:["transformers","reasoning"],library_name:"transformers"},{id:"Qwen/Qwen2.5-7B-Instruct",pipeline_tag:"text-generation",downloads:23e5,likes:12e3,tags:["transformers"],library_name:"transformers"},{id:"meta-llama/Llama-3.1-8B-Instruct",pipeline_tag:"text-generation",downloads:31e5,likes:15e3,tags:["transformers","gated"],library_name:"transformers"},{id:"mistralai/Mistral-7B-Instruct-v0.3",pipeline_tag:"text-generation",downloads:19e5,likes:7600,tags:["transformers"],library_name:"transformers"},{id:"BAAI/bge-large-en-v1.5",pipeline_tag:"feature-extraction",downloads:42e5,likes:2200,tags:["sentence-transformers"],library_name:"sentence-transformers"}];function me(e){return e==null?"\u2014":e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(0)+"K":String(e)}function U(e){return/(\b|-|\/)(7b|8b|13b|70b|v3|v4|r1|large|moe)/i.test(e&&e.id||"")||(e&&e.tags||[]).includes("moe")}function He(e){return e.library_name==="sentence-transformers"||e.pipeline_tag==="feature-extraction"?"Matrix Runtime":U(e)?"vLLM / SGLang":"Ollama / vLLM"}async function Ue(e,s){try{let n=new URLSearchParams({q:e||"deepseek",limit:"16"});s&&s!=="any"&&n.set("task",s);let a=await C.get("/v1/model-sources/huggingface/search?"+n.toString());if(a&&a.live&&Array.isArray(a.items)&&a.items.length)return{live:!0,items:a.items}}catch{}try{let n=new URLSearchParams({search:e||"deepseek",sort:"downloads",direction:"-1",limit:"16"});s&&s!=="any"&&n.set("pipeline_tag",s);let a=await fetch("https://huggingface.co/api/models?"+n.toString(),{headers:{Accept:"application/json"}});if(a.ok){let i=await a.json();if(Array.isArray(i)&&i.length)return{live:!0,items:i.map(o=>({id:o.id||o.modelId,pipeline_tag:o.pipeline_tag,downloads:o.downloads,likes:o.likes,tags:o.tags||[],library_name:o.library_name}))}}}catch{}let t=(e||"").toLowerCase();return{live:!1,items:Be.filter(n=>!t||n.id.toLowerCase().includes(t))}}var ue=[{id:"huggingface",name:"Hugging Face",glyph:"\u{1F917}",desc:"Search public & private models",search:!0},{id:"github",name:"GitHub",mono:"GH",desc:"Import from a repository",repo:!0},{id:"gitlab",name:"GitLab",mono:"GL",desc:"Import from a repository",repo:!0},{id:"s3",name:"Amazon S3",mono:"S3",desc:"Model artifacts in a bucket",bucket:!0},{id:"r2",name:"Cloudflare R2",mono:"R2",desc:"S3-compatible object storage",bucket:!0},{id:"ollama",name:"Ollama",mono:"OL",desc:"Pull a local Ollama model",ollama:!0},{id:"url",name:"Custom URL",mono:"URL",desc:"Direct manifest or weights URL",url:!0}];function F({label:e,value:s,onChange:t,placeholder:n,mono:a}){return React.createElement("label",{style:{display:"block"}},React.createElement("span",{style:{display:"block",fontSize:10.5,fontFamily:"var(--mono)",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--ink-4)",marginBottom:6}},e),React.createElement("input",{value:s,onChange:i=>t(i.target.value),placeholder:n,spellCheck:!1,style:{width:"100%",height:42,padding:"0 12px",borderRadius:"var(--r-sm)",border:"1px solid var(--line-2)",background:"rgba(0,0,0,0.35)",color:"var(--ink)",fontSize:13,fontFamily:a?"var(--mono)":"var(--font)",outline:"none"}}))}function $e({onClose:e,onImport:s,initialSource:t}){let[n,a]=React.useState(null),[i,o]=React.useState(0),[f,c]=React.useState("deepseek"),[h,v]=React.useState("any"),[b,y]=React.useState([]),[g,N]=React.useState(!0),[p,l]=React.useState(!1),[x,m]=React.useState(!1),[S,z]=React.useState(""),[T,L]=React.useState({repo:"",branch:"main",bucket:"",endpoint:"",path:"",model:"",url:""}),[M,w]=React.useState(null),R=(r,k)=>L(_=>({..._,[r]:k}));async function A(){l(!0);let r=await Ue(f,h);y(r.items),N(r.live),l(!1)}function W(r){a(r),r.search&&(y([]),A())}React.useEffect(()=>{if(t){let r=ue.find(k=>k.id===t);r&&W(r)}},[]);function $(){let r="";n.repo?r=(T.repo||"owner/repo").replace(/^https?:\/\/(github|gitlab)\.com\//,""):n.bucket?r=n.id+"://"+(T.bucket||"bucket")+"/"+(T.path||"model"):n.ollama?r="ollama/"+(T.model||"llama3.1"):n.url&&(r=T.url||"https://example.com/model.gguf"),w({id:r,pipeline_tag:"text-generation",library_name:n.ollama?"ollama":"custom",tags:x?["private"]:[],_source:n.name}),o(1)}let D=["any","text-generation","feature-extraction","text-classification","automatic-speech-recognition"],B=["Source","Preview","Attach"];return ReactDOM.createPortal(React.createElement("div",{className:"scrim",style:{position:"fixed",inset:0,zIndex:70,display:"flex",alignItems:"center",justifyContent:"center",padding:24,background:"rgba(5,8,12,0.72)",backdropFilter:"blur(7px)"},onMouseDown:r=>{r.target===r.currentTarget&&e()}},React.createElement("div",{className:"rise card",style:{width:"100%",maxWidth:760,maxHeight:"88vh",display:"flex",flexDirection:"column",background:"var(--panel-2)"}},React.createElement("div",{className:"card-h"},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:10}},React.createElement("span",{style:{color:"var(--acc)",display:"inline-flex"}},React.createElement(u,{d:d.download,size:17})),React.createElement("span",{className:"t",style:{letterSpacing:"0.04em"}},"Import Model",n?" \xB7 "+n.name:"")),React.createElement("button",{className:"iconbtn",onClick:e},React.createElement(u,{d:d.x,size:16}))),n&&React.createElement("div",{style:{display:"flex",gap:8,padding:"12px 20px 0"}},B.map((r,k)=>React.createElement("div",{key:r,style:{display:"flex",alignItems:"center",gap:7,fontSize:11.5,color:k===i?"var(--acc-2)":k<i?"var(--ink-2)":"var(--ink-4)"}},React.createElement("span",{style:{width:18,height:18,borderRadius:99,display:"grid",placeItems:"center",fontSize:10,fontFamily:"var(--mono)",border:"1px solid "+(k<=i?"var(--acc)":"var(--line-3)"),background:k<i?"var(--acc)":"transparent",color:k<i?"#03140c":"inherit"}},k<i?"\u2713":k+1),r,k<2&&React.createElement("span",{style:{color:"var(--ink-4)"}},"\u203A")))),React.createElement("div",{style:{padding:20,overflowY:"auto",flex:1}},!n&&React.createElement("div",null,React.createElement("p",{style:{margin:"0 0 14px",fontSize:13,color:"var(--ink-3)"}},"Choose where to import the model from. Private sources accept a token."),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10},className:"ov-grid"},ue.map(r=>React.createElement("button",{key:r.id,onClick:()=>W(r),style:{display:"flex",alignItems:"center",gap:13,padding:"13px 14px",borderRadius:"var(--r-md)",textAlign:"left",border:"1px solid var(--line-2)",background:"rgba(0,0,0,0.3)"}},React.createElement("span",{style:{width:38,height:38,borderRadius:10,flexShrink:0,display:"grid",placeItems:"center",border:"1px solid var(--line-2)",background:"var(--raised)",color:"var(--ink)",fontFamily:"var(--mono)",fontWeight:700,fontSize:12}},r.glyph||r.mono),React.createElement("span",{style:{minWidth:0}},React.createElement("span",{style:{display:"block",fontSize:13.5,fontWeight:600}},r.name),React.createElement("span",{style:{display:"block",fontSize:11.5,color:"var(--ink-3)",marginTop:1}},r.desc)))))),n&&i===0&&n.search&&React.createElement("div",null,React.createElement("form",{onSubmit:r=>{r.preventDefault(),A()},style:{display:"flex",gap:9,flexWrap:"wrap"}},React.createElement("div",{className:"topsearch",style:{flex:"1 1 260px",height:42,width:"auto",maxWidth:"none",display:"flex"}},React.createElement(u,{d:d.search,size:16}),React.createElement("input",{value:f,onChange:r=>c(r.target.value),placeholder:"Search models\u2026 e.g. deepseek",autoFocus:!0})),React.createElement("select",{value:h,onChange:r=>v(r.target.value),style:{height:42,padding:"0 12px",borderRadius:"var(--r-sm)",border:"1px solid var(--line-2)",background:"rgba(0,0,0,0.35)",color:"var(--ink)",fontSize:13}},D.map(r=>React.createElement("option",{key:r,value:r},r==="any"?"Any task":r))),React.createElement("button",{className:"btn btn-primary",type:"submit"},"Search")),React.createElement("label",{style:{display:"flex",alignItems:"center",gap:8,margin:"12px 0 0",fontSize:12.5,color:"var(--ink-2)",cursor:"pointer"}},React.createElement("input",{type:"checkbox",checked:x,onChange:r=>m(r.target.checked),style:{accentColor:"var(--acc)"}})," Private repository (use access token)"),x&&React.createElement("div",{style:{marginTop:10}},React.createElement(F,{label:"HF access token",value:S,onChange:z,placeholder:"hf_\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",mono:!0})),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,margin:"12px 0 4px"}},React.createElement("span",{className:"chip "+(g?"green":"amber"),style:{height:20}},React.createElement("span",{className:"dot "+(g?"green":"amber")})," ",g?"live \xB7 huggingface.co/api":"offline \xB7 sample results"),p&&React.createElement("span",{style:{fontSize:11.5,color:"var(--ink-4)"}},"searching\u2026")),React.createElement("div",{style:{display:"grid",gap:9,marginTop:8}},p?React.createElement("div",{style:{padding:28,textAlign:"center",color:"var(--ink-3)",fontSize:13}},"Querying Hugging Face\u2026"):b.map(r=>React.createElement("div",{key:r.id,style:{display:"flex",alignItems:"center",gap:13,padding:"11px 14px",borderRadius:"var(--r-md)",border:"1px solid var(--line-2)",background:"rgba(0,0,0,0.3)"}},React.createElement("div",{style:{minWidth:0,flex:1}},React.createElement("div",{className:"mono",style:{fontSize:13,fontWeight:600,color:"var(--ink)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},r.id),React.createElement("div",{style:{display:"flex",gap:12,marginTop:5,fontSize:11.5,color:"var(--ink-3)",flexWrap:"wrap"}},React.createElement("span",null,r.pipeline_tag||"\u2014"),React.createElement("span",null,"\u2193 ",me(r.downloads)),React.createElement("span",null,"\u2665 ",me(r.likes)),U(r)&&React.createElement("span",{className:"chip amber",style:{height:18}},"GPU"),((r.tags||[]).includes("gated")||r.gated)&&React.createElement("span",{className:"chip amber",style:{height:18}},"Gated"))),React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>{w({...r,_source:"Hugging Face"}),o(1)}},"Import Profile"))))),n&&i===0&&!n.search&&React.createElement("div",{style:{display:"grid",gap:14}},React.createElement("p",{style:{margin:0,fontSize:13,color:"var(--ink-3)"}},"Provide the ",n.name," location to resolve a model profile."),n.repo&&React.createElement(React.Fragment,null,React.createElement(F,{label:"Repository",value:T.repo,onChange:r=>R("repo",r),placeholder:n.id+".com/owner/model-repo",mono:!0}),React.createElement(F,{label:"Branch / tag",value:T.branch,onChange:r=>R("branch",r),placeholder:"main",mono:!0})),n.bucket&&React.createElement(React.Fragment,null,React.createElement(F,{label:"Bucket",value:T.bucket,onChange:r=>R("bucket",r),placeholder:"my-models",mono:!0}),React.createElement(F,{label:"Endpoint",value:T.endpoint,onChange:r=>R("endpoint",r),placeholder:n.id==="r2"?"https://<acct>.r2.cloudflarestorage.com":"s3.us-east-1.amazonaws.com",mono:!0}),React.createElement(F,{label:"Object path",value:T.path,onChange:r=>R("path",r),placeholder:"models/deepseek-v4/",mono:!0})),n.ollama&&React.createElement(F,{label:"Ollama model",value:T.model,onChange:r=>R("model",r),placeholder:"llama3.1 / qwen2.5 / mistral",mono:!0}),n.url&&React.createElement(F,{label:"Manifest / weights URL",value:T.url,onChange:r=>R("url",r),placeholder:"https://\u2026/model.gguf",mono:!0}),React.createElement("label",{style:{display:"flex",alignItems:"center",gap:8,fontSize:12.5,color:"var(--ink-2)",cursor:"pointer"}},React.createElement("input",{type:"checkbox",checked:x,onChange:r=>m(r.target.checked),style:{accentColor:"var(--acc)"}})," Private \u2014 requires credentials"),x&&React.createElement(F,{label:n.bucket?"Access key / secret":"Access token",value:S,onChange:z,placeholder:n.bucket?"AKIA\u2026 / \u2022\u2022\u2022\u2022":"token \u2022\u2022\u2022\u2022",mono:!0}),React.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},React.createElement("button",{className:"btn btn-ghost",onClick:()=>a(null)},"Back"),React.createElement("button",{className:"btn btn-primary",onClick:$},"Resolve profile"))),n&&i===1&&M&&React.createElement("div",null,React.createElement("div",{className:"mono",style:{fontSize:15,fontWeight:700,color:"var(--ink)",wordBreak:"break-all"}},M.id),React.createElement("div",{style:{fontSize:12,color:"var(--ink-3)",marginTop:4}},"Model Profile preview \xB7 resolved from ",M._source,x?" \xB7 private":""),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1px",marginTop:16,borderRadius:"var(--r-sm)",overflow:"hidden",border:"1px solid var(--line)"}},[["Source",M._source],["Model ID",M.id],["Task",M.pipeline_tag||"text-generation"],["Library",M.library_name||"transformers"],["Requires GPU",U(M)?"Likely":"No"],["Recommended runtime",He(M)],["Access",x?"Private \xB7 token":"Public"],["License",(M.tags||[]).includes("gated")?"Gated \xB7 review":"review required"]].map(([r,k])=>React.createElement("div",{key:r,style:{padding:"11px 13px",background:"var(--inset)"}},React.createElement("div",{style:{fontSize:10.5,color:"var(--ink-4)",textTransform:"uppercase",letterSpacing:"0.05em"}},r),React.createElement("div",{className:"mono",style:{fontSize:12.5,color:"var(--ink)",marginTop:4,overflow:"hidden",textOverflow:"ellipsis"}},k)))),React.createElement("div",{style:{marginTop:16,padding:14,borderRadius:"var(--r-md)",border:"1px solid var(--line)",background:"rgba(0,0,0,0.25)"}},React.createElement("div",{style:{fontSize:12,fontWeight:700,color:"var(--ink-2)",marginBottom:10}},"Security"),React.createElement("div",{style:{display:"grid",gap:8,fontSize:12.5}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,color:"var(--acc-2)"}},React.createElement(u,{d:d.check,size:14})," safetensors preferred"),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,color:"var(--ink-2)"}},React.createElement(u,{d:d.shield,size:14})," remote code disabled by default \u2014 requires explicit approval"))),React.createElement("div",{style:{display:"flex",justifyContent:"space-between",marginTop:18}},React.createElement("button",{className:"btn btn-ghost",onClick:()=>o(0)},"Back"),React.createElement("button",{className:"btn btn-primary",onClick:()=>o(2)},React.createElement(u,{d:d.download,size:15})," Import Profile"))),n&&i===2&&M&&React.createElement(Ve,{model:M,onImport:s})))),document.body)}function Ve({model:e,onImport:s}){let{runtimes:t,refresh:n}=ae(),[a,i]=React.useState(!1),o=(t||[]).filter(p=>p.statusClass!=="red"),[f,c]=React.useState("");React.useEffect(()=>{!f&&o[0]&&c(o[0].name)},[o,f]);let[h,v]=React.useState("pull"),[b,y]=React.useState(U(e)?"vLLM":"Ollama"),g=["vLLM","SGLang","TGI","Ollama","External endpoint"];function N(){i(!0),n(),setTimeout(()=>i(!1),700)}return React.createElement("div",null,React.createElement("div",{style:{fontSize:13.5,fontWeight:700}},"Attach model to runtime"),React.createElement("div",{className:"mono",style:{fontSize:12.5,color:"var(--ink-3)",marginTop:4,wordBreak:"break-all"}},e.id),React.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",margin:"16px 0 8px"}},React.createElement("span",{style:{fontSize:11,color:"var(--ink-4)",textTransform:"uppercase",letterSpacing:"0.06em"}},"Choose runtime"),React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:N,disabled:a},React.createElement(u,{d:d.refresh,size:13,style:a?{animation:"spin 0.7s linear infinite"}:null})," ",a?"Refreshing\u2026":"Refresh")),React.createElement("div",{style:{display:"grid",gap:8}},o.map(p=>{let l=U(e)?p.caps.includes("model.preload")?"compatible":p.mode==="local-dev"?"not recommended":"limited":"compatible";return React.createElement("button",{key:p.id,onClick:()=>c(p.name),style:{display:"flex",alignItems:"center",gap:11,padding:"11px 13px",borderRadius:"var(--r-md)",textAlign:"left",border:"1px solid "+(f===p.name?"var(--acc-line)":"var(--line-2)"),background:f===p.name?"var(--acc-soft)":"rgba(0,0,0,0.3)"}},React.createElement("span",{style:{flex:1}},React.createElement("span",{className:"mono",style:{fontSize:13,color:"var(--ink)"}},p.name),p.live&&React.createElement(P,null),React.createElement("span",{style:{fontSize:11.5,color:"var(--ink-4)",marginLeft:8}},p.mode," \xB7 ",p.region)),React.createElement("span",{className:"chip "+(l==="compatible"?"green":"amber"),style:{height:20}},l))})),U(e)&&f&&o.find(p=>p.name===f&&p.mode==="local-dev")&&React.createElement("div",{style:{marginTop:10,padding:"10px 12px",borderRadius:"var(--r-sm)",border:"1px solid var(--amber-soft)",background:"var(--amber-soft)",fontSize:12,color:"var(--amber)"}},"This model is likely too large for the selected runtime. Recommended: a GPU runtime, a quantized variant, or an external endpoint."),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16,marginTop:16},className:"ov-grid"},React.createElement("div",null,React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:8}},"Install mode"),React.createElement("div",{style:{display:"grid",gap:7}},[["pull","Pull from source"],["mount","Mount existing volume"],["endpoint","Use external endpoint"]].map(([p,l])=>React.createElement("label",{key:p,style:{display:"flex",alignItems:"center",gap:9,fontSize:12.5,color:"var(--ink-2)",cursor:"pointer",padding:"8px 11px",borderRadius:8,border:"1px solid "+(h===p?"var(--acc-line)":"var(--line)"),background:h===p?"var(--acc-soft)":"transparent"}},React.createElement("input",{type:"radio",name:"imode",checked:h===p,onChange:()=>v(p),style:{accentColor:"var(--acc)"}})," ",l)))),React.createElement("div",null,React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:8}},"Serving engine"),React.createElement("div",{style:{display:"flex",gap:7,flexWrap:"wrap"}},g.map(p=>React.createElement("button",{key:p,onClick:()=>y(p),className:"chip"+(b===p?" green":""),style:{height:30,cursor:"pointer",fontFamily:"var(--font)"}},p))))),React.createElement("div",{style:{display:"flex",justifyContent:"flex-end",gap:10,marginTop:20}},React.createElement("button",{className:"btn btn-ghost",onClick:()=>s({model:e,runtime:f,engine:b,mode:h})},"Import profile only"),React.createElement("button",{className:"btn btn-primary",onClick:()=>s({model:e,runtime:f,engine:b,mode:h,install:!0})},React.createElement(u,{d:d.download,size:15})," Attach & install")))}var qe={"Hugging Face":"huggingface",GitHub:"github",GitLab:"gitlab","Amazon S3":"s3","Cloudflare R2":"r2",Ollama:"ollama","Custom URL":"url"},Je={pull:"pull_from_source",mount:"mount_volume",endpoint:"external_endpoint"},Ye={ready:"green",attached:"green",installed:"green",downloading:"amber",queued:"blue",profile_only:"",failed:"red",gated:"amber",incompatible:"red"};function Ge(e){let[s,t]=React.useState(null),[n,a]=React.useState(null),i=React.useCallback(async()=>{try{let o=await C.get("/v1/model-profiles");t(o.profiles||[])}catch{t(null)}try{let o=await C.get("/v1/model-installations");a(o.installations||[])}catch{a(null)}},[]);return React.useEffect(()=>{if(i(),e){let o=setInterval(i,e);return()=>clearInterval(o)}},[i,e]),{profiles:s,installs:n,refresh:i}}function Qe({onAttach:e}){let[s,t]=React.useState("Model Profiles"),[n,a]=React.useState(!1),[i,o]=React.useState(null),[f,c]=React.useState(!1),{profiles:h,installs:v,refresh:b}=Ge(f?1500:6e3),y=["Available Models","Connected Providers","Model Profiles","Runtime Cache"],g=[["Hugging Face","HF","connected","live search \xB7 resolvable",!0],["OpenAI-compatible","AI","connected","gpt-4o \xB7 gpt-4o-mini",!1],["Ollama","OL","connected","local models",!1],["vLLM","VL","available","GPU endpoint",!1],["GitHub","GH","available","repo-hosted models",!1],["Amazon S3","S3","available","bucket artifacts",!1]],N=(v||[]).filter(l=>l.status==="ready"||l.status==="attached");React.useEffect(()=>{let l=(v||[]).some(x=>x.status==="downloading"||x.status==="checking"||x.status==="queued");c(l)},[v]);async function p(l){a(!1),o(null);let x=l.model||{},m=x._source||"Custom URL",S={source_type:qe[m]||"url",provider:m,external_id:x.id,display_name:x.id,source_uri:m==="Hugging Face"?"hf:"+x.id:x.id,task:x.pipeline_tag||"text-generation",library:x.library_name||"transformers",license:(x.tags||[]).includes("gated")?"gated":"review required",tags:x.tags||[],metadata:{downloads:x.downloads,likes:x.likes}},z;try{z=(await C.post("/v1/model-profiles",S)).profile}catch{return}if(l.install&&z){t("Runtime Cache"),c(!0);try{await C.post("/v1/model-profiles/"+z.id+"/attach",{runtimeId:l.runtime,installMode:Je[l.mode]||"pull_from_source",servingEngine:l.engine})}catch{}b()}else t("Model Profiles"),b()}return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Model gateway \xB7 matrix-llm"),React.createElement("h1",null,"Models"),React.createElement("p",null,"Connect providers, resolve metadata into profiles, then attach and install models into runtimes \u2014 from Hugging Face, GitHub, S3, R2, Ollama, or a custom URL.")),React.createElement("div",{style:{display:"flex",gap:9,flexWrap:"wrap"}},React.createElement("button",{className:"btn btn-ghost",onClick:e},React.createElement(u,{d:d.plus,size:15})," Add Model"),React.createElement("button",{className:"btn btn-primary",onClick:()=>{o(null),a(!0)}},React.createElement(u,{d:d.download,size:15})," Import Model"))),React.createElement("div",{style:{display:"flex",gap:7,flexWrap:"wrap",marginBottom:18}},y.map(l=>React.createElement("button",{key:l,onClick:()=>t(l),className:"chip"+(s===l?" green":""),style:{height:30,cursor:"pointer",fontFamily:"var(--font)",fontSize:12.5}},l))),s==="Available Models"&&React.createElement("div",{className:"card",style:{overflow:"hidden"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Ready to use ",v&&React.createElement(P,null))),React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Model"),React.createElement("th",{className:"hide-sm"},"Provider"),React.createElement("th",null,"Runtime"),React.createElement("th",{className:"hide-sm"},"Engine"),React.createElement("th",null))),React.createElement("tbody",null,N.length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:5,style:{color:"var(--ink-4)",textAlign:"center",padding:24}},"No models ready yet \u2014 import one and attach it to a runtime.")),N.map(l=>React.createElement("tr",{className:"row",key:l.id},React.createElement("td",{className:"nm mono",style:{fontSize:12.5}},l.model_name),React.createElement("td",{className:"hide-sm"},l.provider),React.createElement("td",null,React.createElement("span",{className:"chip"},l.runtime_id)),React.createElement("td",{className:"hide-sm"},l.serving_engine||"\u2014"),React.createElement("td",{style:{textAlign:"right"}},React.createElement("button",{className:"btn btn-ghost btn-sm"},"Use"))))))),s==="Connected Providers"&&React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:14},className:"ov-grid"},g.map(([l,x,m,S,z])=>React.createElement("div",{className:"card card-pad",key:l,style:{display:"flex",alignItems:"center",gap:14}},React.createElement("div",{style:{width:40,height:40,borderRadius:10,flexShrink:0,display:"grid",placeItems:"center",border:"1px solid var(--line-2)",background:"var(--raised)",color:"var(--ink)",fontFamily:"var(--mono)",fontWeight:700,fontSize:11}},z?"\u{1F917}":x),React.createElement("div",{style:{flex:1,minWidth:0}},React.createElement("div",{style:{fontWeight:700,fontSize:14}},l),React.createElement("div",{style:{fontSize:12,color:"var(--ink-3)",marginTop:2}},S)),z?React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>{o("huggingface"),a(!0)}},React.createElement(u,{d:d.search,size:13})," Search Models"):m==="connected"?React.createElement("span",{className:"chip green"},React.createElement("span",{className:"dot green"})," connected"):React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>{o(x==="GH"?"github":x==="S3"?"s3":null),a(!0)}},"Connect")))),s==="Model Profiles"&&React.createElement("div",{className:"card",style:{overflow:"hidden"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Model Profiles ",h&&React.createElement(P,null)),React.createElement("button",{className:"chip",onClick:b,style:{cursor:"pointer"}},React.createElement(u,{d:d.refresh,size:11})," refresh")),React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Model Profile"),React.createElement("th",{className:"hide-sm"},"Provider"),React.createElement("th",null,"Status"),React.createElement("th",{className:"hide-sm"},"Runtime"),React.createElement("th",null))),React.createElement("tbody",null,(h||[]).length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:5,style:{color:"var(--ink-4)",textAlign:"center",padding:24}},h?"No profiles yet \u2014 click Import Model to resolve one.":"Runtime unreachable.")),(h||[]).map(l=>{let x=(v||[]).find(T=>T.model_profile_id===l.id),m=x?x.runtime_id:"Not attached",S=Ye[l.status]||"",z=l.status==="profile_only"?"Profile only":l.status.charAt(0).toUpperCase()+l.status.slice(1);return React.createElement("tr",{className:"row",key:l.id},React.createElement("td",{className:"nm mono",style:{fontSize:12.5}},l.display_name),React.createElement("td",{className:"hide-sm"},l.provider),React.createElement("td",null,React.createElement("span",{className:"chip "+S},l.status==="downloading"&&React.createElement("span",{className:"dot amber"}),z)),React.createElement("td",{className:"hide-sm mono",style:{fontSize:12}},m),React.createElement("td",{style:{textAlign:"right",whiteSpace:"nowrap"}},x?React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>t("Runtime Cache")},"View"):React.createElement("button",{className:"btn btn-primary btn-sm",onClick:()=>{o(null),a(!0)}},"Attach Runtime")))})))),s==="Runtime Cache"&&React.createElement("div",{className:"card",style:{overflow:"hidden"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Runtime Cache ",v&&React.createElement(P,null)),React.createElement("button",{className:"chip",onClick:b,style:{cursor:"pointer"}},React.createElement(u,{d:d.refresh,size:11})," refresh")),React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Runtime"),React.createElement("th",null,"Model"),React.createElement("th",null,"Status"),React.createElement("th",{className:"hide-sm"},"Engine"),React.createElement("th",null))),React.createElement("tbody",null,(v||[]).length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:5,style:{color:"var(--ink-4)",textAlign:"center",padding:24}},v?"Nothing installed yet \u2014 attach a model from Model Profiles.":"Runtime unreachable.")),(v||[]).map(l=>{let x=l.status==="downloading"||l.status==="checking"||l.status==="queued",m=l.status==="ready"||l.status==="attached"?"green":l.status==="failed"?"red":"amber";return React.createElement("tr",{className:"row",key:l.id},React.createElement("td",{className:"nm mono",style:{fontSize:12.5}},l.runtime_id),React.createElement("td",{className:"mono",style:{fontSize:12.5}},l.model_name),React.createElement("td",{style:{minWidth:160}},x?React.createElement("div",{style:{display:"flex",alignItems:"center",gap:9}},React.createElement("div",{className:"bar",style:{flex:1}},React.createElement("span",{className:"amber",style:{width:(l.progress||0)+"%"}})),React.createElement("span",{className:"mono",style:{fontSize:11,color:"var(--lime)"}},l.progress||0,"%")):React.createElement("span",{className:"chip "+m},React.createElement("span",{className:"dot "+m})," ",l.status)),React.createElement("td",{className:"hide-sm mono",style:{fontSize:12}},l.serving_engine||"\u2014"),React.createElement("td",{style:{textAlign:"right"}},React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>l.job_id&&window.open(ne+"/v1/jobs/"+l.job_id,"_blank")},x?"Logs":"Test")))})))),n&&React.createElement($e,{initialSource:i,onClose:()=>{a(!1),o(null)},onImport:p}))}function Xe(){let{jobs:e,refresh:s}=re(3e3),[t,n]=React.useState(null),[a,i]=React.useState("All"),[o,f]=React.useState(!1),c=["All","running","complete","error","queued","expired"],v=(e||[]).filter(y=>a==="All"||y.status===a);async function b(y,g){f(!0);try{await C.post("/v1/jobs",{type:y,ttl_seconds:y==="mcp.test"?600:void 0,payload:g}),await ee(300),s()}catch{}finally{f(!1)}}return t?React.createElement(Ke,{job:t,back:()=>{n(null),s()}}):React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Execution"),React.createElement("h1",null,"Jobs ",e&&React.createElement(P,null)),React.createElement("p",null,"Every unit of runtime work \u2014 sandbox tests, model inspections, pulls, and tool calls \u2014 with live status.")),React.createElement("button",{className:"btn btn-ghost",onClick:s},React.createElement(u,{d:d.refresh,size:15})," Refresh")),React.createElement("div",{className:"card card-pad",style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap",marginBottom:14}},React.createElement("span",{style:{fontSize:12.5,color:"var(--ink-3)",fontWeight:600}},"Quick run:"),React.createElement("button",{className:"btn btn-ghost btn-sm",disabled:o,onClick:()=>b("model.inspect",{model:"hf:Qwen/Qwen2.5-7B-Instruct",revision:"main"})},React.createElement(u,{d:d.cpu,size:13})," model.inspect Qwen2.5-7B"),React.createElement("button",{className:"btn btn-ghost btn-sm",disabled:o,onClick:()=>b("mcp.test",{runtime:"node",transport:"stdio",start_command:Re})},React.createElement(u,{d:d.play,size:13})," mcp.test filesystem")),React.createElement("div",{style:{display:"flex",gap:7,flexWrap:"wrap",marginBottom:16}},c.map(y=>React.createElement("button",{key:y,onClick:()=>i(y),className:"chip"+(a===y?" green":""),style:{height:28,cursor:"pointer",fontFamily:"var(--font)"}},y))),React.createElement("div",{className:"card",style:{overflow:"hidden"}},React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Job ID"),React.createElement("th",null,"Type"),React.createElement("th",null,"Status"),React.createElement("th",{className:"hide-sm"},"Created"),React.createElement("th",{className:"hide-sm"},"Expires"))),React.createElement("tbody",null,v.length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:5,style:{color:"var(--ink-4)",textAlign:"center",padding:24}},e?"No jobs match.":"Runtime unreachable.")),v.map(y=>React.createElement("tr",{className:"row",key:y.job_id,style:{cursor:"pointer"},onClick:()=>n(y)},React.createElement("td",{className:"nm mono"},y.job_id),React.createElement("td",null,React.createElement("span",{className:"chip"},y.type)),React.createElement("td",null,React.createElement("span",{className:"chip "+(q[y.status]||"")},y.status==="running"&&React.createElement("span",{className:"dot blue"}),y.status)),React.createElement("td",{className:"hide-sm mono",style:{fontSize:12}},(y.created_at||"").replace("T"," ").replace("Z","")),React.createElement("td",{className:"hide-sm mono",style:{fontSize:12}},(y.expires_at||"").replace("T"," ").replace("Z",""))))))))}function Ke({job:e,back:s}){let[t,n]=React.useState([]),[a,i]=React.useState(e);return React.useEffect(()=>{let o=null,f=null,c=!0;o=new EventSource(C.eventsURL("/v1/jobs/"+e.job_id+"/events")),o.onmessage=v=>{try{let b=JSON.parse(v.data);n(y=>[...y,b])}catch{}},o.onerror=()=>{o&&o.close()};async function h(){try{let v=await C.get("/v1/jobs/"+e.job_id);c&&i(v)}catch{}}return h(),f=setInterval(h,2e3),()=>{c=!1,o&&o.close(),f&&clearInterval(f)}},[e.job_id]),React.createElement("div",{className:"wrap rise"},React.createElement("button",{className:"chip",onClick:s,style:{marginBottom:16,cursor:"pointer"}},React.createElement(u,{d:d.chev,size:13,style:{transform:"rotate(90deg)"}})," Jobs"),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:12,flexWrap:"wrap"}},React.createElement("h1",{style:{margin:0,fontSize:22,fontWeight:700},className:"mono"},a.job_id),React.createElement("span",{className:"chip"},a.type),React.createElement("span",{className:"chip "+(q[a.status]||"")},a.status)),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 320px",gap:16,marginTop:20},className:"ov-grid"},React.createElement("div",{className:"card"},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Event timeline"),React.createElement("span",{className:"chip"},React.createElement("span",{className:"dot green pulse"})," SSE")),React.createElement("div",{style:{padding:"10px 18px 16px"}},t.map((o,f)=>React.createElement("div",{key:f,className:"rise",style:{display:"flex",alignItems:"center",gap:12,padding:"10px 0",borderBottom:"1px solid var(--line)"}},React.createElement("span",{className:"mono",style:{fontSize:13,color:"var(--ink)",flex:1}},o.step),React.createElement("span",{style:{fontSize:12,color:"var(--ink-3)",flex:2,minWidth:0}},o.message),React.createElement("span",{className:"chip "+(o.status==="ok"||o.status==="complete"?"green":o.status==="error"?"red":o.status==="expired"||o.status==="cancelled"?"amber":"")},o.status))),t.length===0&&React.createElement("div",{style:{padding:"10px 0",color:"var(--ink-4)"}},React.createElement("span",{className:"cur"})))),React.createElement("div",{style:{display:"grid",gap:16,alignContent:"start"}},React.createElement("div",{className:"card card-pad"},React.createElement("span",{style:{fontWeight:700,fontSize:13.5}},"Details"),React.createElement("div",{style:{display:"grid",gap:9,marginTop:12,fontSize:12.5}},[["Type",a.type],["Status",a.status],["Created",(a.created_at||"").replace("T"," ").replace("Z","")],["Expires",(a.expires_at||"").replace("T"," ").replace("Z","")]].map(([o,f])=>React.createElement("div",{key:o,style:{display:"flex",justifyContent:"space-between",gap:10}},React.createElement("span",{style:{color:"var(--ink-3)"}},o),React.createElement("span",{className:"mono",style:{color:"var(--ink)",textAlign:"right"}},f))))),React.createElement("div",{className:"card"},React.createElement("div",{className:"card-h",style:{padding:"10px 14px"}},React.createElement("span",{className:"mono",style:{fontSize:11,color:"var(--ink-3)"}},"RESULT")),React.createElement("pre",{className:"mono",style:{margin:0,padding:14,fontSize:11.5,color:a.error?"var(--red)":"var(--acc-2)",overflowX:"auto",maxHeight:280}},a.error?a.error:JSON.stringify(a.result,null,2))))))}function Ze(){let{jobs:e}=re(4e3),[s,t]=React.useState([]),n=e&&e[0];React.useEffect(()=>{if(!n)return;let i=new EventSource(C.eventsURL("/v1/jobs/"+n.job_id+"/events"));return i.onmessage=o=>{try{let f=JSON.parse(o.data);t(c=>[...c.slice(-200),{job:n.job_id,...f}])}catch{}},i.onerror=()=>i.close(),()=>i.close()},[n&&n.job_id]);function a(i){return i.status==="error"?"var(--red)":i.status==="ok"||i.status==="complete"?"var(--acc-2)":i.status==="expired"?"var(--amber)":"var(--ink-2)"}return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Observability"),React.createElement("h1",null,"Logs ",e&&React.createElement(P,null)),React.createElement("p",null,"Live event stream from the newest job on this runtime."))),React.createElement("div",{className:"logwin",style:{height:440}},s.length===0&&React.createElement("div",{style:{color:"var(--ink-4)"}},n?"waiting for events from "+n.job_id+"\u2026":"no jobs yet \u2014 start a sandbox or inspect a model to see live events"),s.map((i,o)=>React.createElement("div",{key:"t"+o,style:{color:a(i)}},React.createElement("span",{style:{color:"var(--ink-4)"}},"[",i.job,"]")," ",React.createElement("span",{style:{color:"var(--ink-4)"}},i.step),"  ",i.message)),React.createElement("span",{className:"cur"})))}var et={"Sandbox Policy":d.play,"Command Policy":d.shield,"Runtime Policy":d.server};function tt(){let{data:e}=j("/v1/policies"),s=e?e.policies||[]:null;return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Governance ",s&&React.createElement(P,null)),React.createElement("h1",null,"Policies"),React.createElement("p",null,"The guardrails this runtime actually enforces \u2014 derived from its live configuration and the command allow/deny lists."))),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16},className:"ov-grid"},s===null&&React.createElement("div",{style:{color:"var(--ink-4)",padding:24}},"Loading\u2026"),(s||[]).map(t=>React.createElement("div",{className:"card",key:t.name},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t",style:{display:"flex",alignItems:"center",gap:9}},React.createElement("span",{style:{color:"var(--acc)",display:"inline-flex"}},React.createElement(u,{d:et[t.name]||d.shield,size:16}))," ",t.name),React.createElement("span",{className:"chip "+(t.active?"green":"")},t.active&&React.createElement("span",{className:"dot green"})," ",t.active?"enforced":"off")),React.createElement("div",{style:{padding:"6px 16px 14px"}},Object.entries(t.body).map(([n,a])=>React.createElement("div",{key:n,style:{padding:"10px 0",borderBottom:"1px solid var(--line)"}},React.createElement("div",{style:{fontSize:12,color:"var(--ink-3)",marginBottom:Array.isArray(a)?7:0,display:"flex",justifyContent:"space-between",alignItems:"center",gap:10}},React.createElement("span",{style:{fontWeight:600,color:"var(--ink-2)"}},n.replace(/_/g," ")),!Array.isArray(a)&&(typeof a=="boolean"?React.createElement("span",{className:"chip "+(a?"green":"")},a?"yes":"no"):React.createElement("span",{className:"mono",style:{fontSize:12,color:"var(--ink)"}},String(a)))),Array.isArray(a)&&(a.length?React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:6}},a.map(i=>React.createElement("span",{key:i,className:"chip"+(n.startsWith("blocked")?" red":""),style:{fontFamily:"var(--mono)",fontSize:11}},i))):React.createElement("span",{style:{fontSize:12,color:"var(--ink-4)"}},"none")))))))))}function at(){let[e,s]=React.useState(null),t=React.useCallback(()=>{K.listAudit().then(s).catch(()=>s([]))},[]);React.useEffect(()=>{t();let a=setInterval(t,1e4);return()=>clearInterval(a)},[t]);let n=e||[];return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Compliance ",e&&React.createElement(P,null)),React.createElement("h1",null,"Audit"),React.createElement("p",null,"Append-only record of sensitive actions in your workspace \u2014 logins, runtime & token activity, credentials, model imports and attaches, and MatrixShell commands.")),React.createElement("button",{className:"btn btn-ghost",onClick:t},React.createElement(u,{d:d.refresh,size:15})," Refresh")),React.createElement("div",{className:"card",style:{overflow:"hidden"}},React.createElement("table",{className:"tbl"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Timestamp"),React.createElement("th",null,"Action"),React.createElement("th",null,"Target"),React.createElement("th",{className:"hide-sm"},"Actor"),React.createElement("th",{className:"hide-sm"},"IP"),React.createElement("th",null,"Status"))),React.createElement("tbody",null,n.length===0&&React.createElement("tr",null,React.createElement("td",{colSpan:6,style:{color:"var(--ink-4)",textAlign:"center",padding:24}},e?"No audited activity yet.":"\u2026")),n.map(a=>React.createElement("tr",{className:"row",key:a.id},React.createElement("td",{className:"mono",style:{fontSize:12,color:"var(--ink-3)"}},(a.created_at||"").replace("T"," ").replace("Z","").replace(/\..*/,"")),React.createElement("td",{className:"nm"},React.createElement("span",{className:"chip"},a.action)),React.createElement("td",{style:{fontSize:12.5,maxWidth:260,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},a.target||"\u2014"),React.createElement("td",{className:"hide-sm mono",style:{fontSize:11.5,color:"var(--ink-3)"}},a.actor||"\u2014"),React.createElement("td",{className:"hide-sm mono",style:{fontSize:11.5,color:"var(--ink-4)"}},a.ip||"\u2014"),React.createElement("td",null,React.createElement("span",{className:"chip "+(a.status==="success"?"green":"red")},React.createElement("span",{className:"dot "+(a.status==="success"?"green":"red")})," ",a.status))))))))}var st=[{id:"huggingface",name:"Hugging Face",hint:"hf_\u2026",ph:"hf_xxxxxxxxxxxxxxxxxxxx",note:"Use your own HF account & inference quota for HF LLMs inside your runtimes.",meta:"default_model"},{id:"openai",name:"OpenAI-compatible",hint:"sk_\u2026",ph:"sk-\u2026",note:"Any OpenAI-compatible endpoint (OpenAI, Together, Groq, \u2026).",meta:"base_url"},{id:"anthropic",name:"Anthropic",hint:"sk-ant-\u2026",ph:"sk-ant-\u2026",note:"Claude models via the Anthropic API.",meta:"default_model"}];function nt(){let[e,s]=React.useState(null),[t,n]=React.useState(null),[a,i]=React.useState(""),[o,f]=React.useState(""),[c,h]=React.useState(!1),[v,b]=React.useState(""),[y,g]=React.useState(""),N=React.useCallback(()=>{K.listProviders().then(s).catch(()=>s([]))},[]);React.useEffect(N,[N]);function p(m){n(m),i(""),f(""),b(""),g("")}async function l(m){if(b(""),g(""),!a.trim())return b("Paste your token first.");h(!0);try{let S=o.trim()?{[m.meta]:o.trim()}:void 0;await K.setProvider(m.id,"default",a.trim(),S),n(null),i(""),f(""),g(m.name+" connected."),N()}catch(S){b(S.message||"Could not save credential.")}finally{h(!1)}}let x={};return(e||[]).forEach(m=>{x[m.provider]=m}),React.createElement("div",{className:"card",style:{gridColumn:"1 / -1"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Model providers \xB7 bring your own key"),e&&React.createElement("span",{className:"chip"},React.createElement("span",{className:"dot green"})," ",e.length," connected")),React.createElement("div",{style:{padding:"4px 18px 14px"}},React.createElement("p",{style:{fontSize:12.5,color:"var(--ink-3)",lineHeight:1.6,margin:"10px 0 6px"}},"Plug in your own provider tokens. They're encrypted at rest (AES-256-GCM) and used server-side only \u2014 the console never shows the secret back, only a ",React.createElement("span",{className:"mono"},"\u2022\u2022\u2022\u20221234")," hint."),y&&React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"9px 11px",margin:"6px 0",borderRadius:"var(--r-sm)",border:"1px solid var(--acc-line)",background:"var(--acc-soft)",color:"var(--acc-2)",fontSize:12.5}},React.createElement(u,{d:d.check,size:14,sw:2.4})," ",y),st.map(m=>{let S=x[m.id],z=t===m.id;return React.createElement("div",{key:m.id,style:{padding:"13px 0",borderBottom:"1px solid var(--line)"}},React.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12}},React.createElement("div",{style:{minWidth:0}},React.createElement("div",{style:{fontSize:13.5,fontWeight:600,display:"flex",alignItems:"center",gap:8}},m.name,S?React.createElement("span",{className:"chip green"},React.createElement("span",{className:"dot green"})," ",S.hint):React.createElement("span",{className:"chip",style:{color:"var(--ink-4)"}},"not set")),React.createElement("div",{style:{fontSize:12,color:"var(--ink-4)",marginTop:3}},m.note)),React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>z?n(null):p(m.id)},z?"Cancel":S?"Replace":"Connect")),z&&React.createElement("div",{style:{display:"grid",gap:10,marginTop:12}},React.createElement(H,{label:m.name+" token",type:"password",value:a,onChange:i,placeholder:m.ph,icon:"key",autoFocus:!0}),React.createElement(H,{label:m.meta==="base_url"?"Base URL (optional)":"Default model (optional)",value:o,onChange:f,placeholder:m.meta==="base_url"?"https://api.example.com/v1":"Qwen/Qwen2.5-7B-Instruct",icon:"cpu"}),v&&React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"9px 11px",borderRadius:"var(--r-sm)",border:"1px solid rgba(251,113,133,0.3)",background:"var(--red-soft)",color:"var(--red)",fontSize:12.5}},React.createElement(u,{d:d.x,size:14})," ",v),React.createElement("div",{style:{display:"flex",justifyContent:"flex-end",gap:8}},React.createElement("button",{className:"btn btn-primary btn-sm",disabled:c,onClick:()=>l(m)},c?"Saving\u2026":"Save token"))))})))}function it(){let e=te(),{data:s}=j("/v1/auth/me"),t=s&&s.user,n=e.caps&&e.caps.runtimes||{},a=[["Workspace",t?t.workspace:"\u2014"],["Owner",t?t.email:"\u2014"],["Role",t?t.role:"\u2014"],["Runtime",e.health?e.health.runtime_id:"\u2014"],["Mode",e.health?e.health.mode:"\u2014"],["Version",e.health?"v"+e.health.version:"\u2014"]],i=[["Hugging Face","connected"],["Node runner",n.node?"connected":"available"],["Python runner",n.python?"connected":"available"],["Ollama",n.ollama?"connected":"available"],["vLLM",n.vllm?"connected":"available"]];return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Workspace"),React.createElement("h1",null,"Settings"),React.createElement("p",null,"Your workspace, this runtime, and the detected model runtimes."))),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16},className:"ov-grid"},React.createElement("div",{className:"card"},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Workspace")),React.createElement("div",{style:{padding:"4px 18px"}},a.map(([o,f])=>React.createElement("div",{key:o,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"13px 0",borderBottom:"1px solid var(--line)"}},React.createElement("span",{style:{fontSize:13.5,fontWeight:600}},o),React.createElement("span",{style:{fontSize:12.5,color:"var(--ink-3)"},className:"mono"},f))))),React.createElement("div",{className:"card"},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Registries"),React.createElement("button",{className:"chip",style:{cursor:"pointer"}},React.createElement(u,{d:d.plus,size:11})," add")),React.createElement("div",{style:{padding:"4px 18px"}},i.map(([o,f])=>React.createElement("div",{key:o,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"13px 0",borderBottom:"1px solid var(--line)"}},React.createElement("span",{style:{fontSize:13.5,fontWeight:600}},o),f==="connected"?React.createElement("span",{className:"chip green"},React.createElement("span",{className:"dot green"})," connected"):React.createElement("span",{className:"chip",style:{color:"var(--ink-4)"}},f))))),React.createElement(It,null),React.createElement(nt,null)))}var oe={name:"Neo Anderson",email:"neo@acme.io",username:"neo",role:"AI Engineer",theme:"Dark",language:"English",timezone:"UTC",dateFormat:"YYYY-MM-DD",defaultWorkspace:"acme-prod",defaultEnv:"Production",notifyEmail:!0,notifyJobs:!0,notifySecurity:!0,notifyDigest:!1};function ot(){try{return{...oe,...JSON.parse(localStorage.getItem("mcloud-profile")||"{}")}}catch{return{...oe}}}function E({label:e,hint:s,children:t}){return React.createElement("label",{style:{display:"block",minWidth:0}},React.createElement("span",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"var(--ink-2)",marginBottom:6}},e),t,s&&React.createElement("span",{style:{display:"block",fontSize:11.5,color:"var(--ink-4)",marginTop:5}},s))}var X={width:"100%",height:40,padding:"0 12px",fontSize:13.5,color:"var(--ink)",background:"var(--inset)",border:"1px solid var(--line-2)",borderRadius:"var(--r-sm)",outline:"none"},rt={...X,cursor:"pointer",appearance:"none",WebkitAppearance:"none",backgroundImage:"linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%)",backgroundPosition:"calc(100% - 16px) 17px, calc(100% - 11px) 17px",backgroundSize:"5px 5px, 5px 5px",backgroundRepeat:"no-repeat"};function lt({on:e,onChange:s}){return React.createElement("button",{onClick:()=>s(!e),role:"switch","aria-checked":e,style:{width:40,height:23,borderRadius:99,padding:2,flexShrink:0,background:e?"var(--acc)":"var(--line-3)",transition:"background .15s"}},React.createElement("span",{style:{display:"block",width:19,height:19,borderRadius:99,background:"#fff",transform:e?"translateX(17px)":"translateX(0)",transition:"transform .15s",boxShadow:"0 1px 3px rgba(0,0,0,0.3)"}}))}function dt(){let[e,s]=React.useState(ot),[t,n]=React.useState(!1),a=(h,v)=>{s(b=>({...b,[h]:v})),n(!1)},i=e.name.split(" ").map(h=>h[0]).slice(0,2).join("").toUpperCase();function o(){try{localStorage.setItem("mcloud-profile",JSON.stringify(e))}catch{}n(!0),setTimeout(()=>n(!1),1800)}function f(){s({...oe}),n(!1)}let c=(h,v)=>React.createElement("select",{style:rt,value:e[h],onChange:b=>a(h,b.target.value)},v.map(b=>React.createElement("option",{key:b,value:b},b)));return React.createElement("div",{className:"wrap rise",style:{maxWidth:880}},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Account"),React.createElement("h1",null,"Profile & preferences"),React.createElement("p",null,"Your personal account details and standard workspace preferences."))),React.createElement("div",{className:"card card-pad",style:{display:"flex",alignItems:"center",gap:16,flexWrap:"wrap"}},React.createElement("div",{style:{width:60,height:60,borderRadius:14,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",background:"linear-gradient(135deg, var(--acc), var(--acc-dim))",color:"#042012",fontWeight:800,fontSize:22}},i),React.createElement("div",{style:{flex:1,minWidth:0}},React.createElement("div",{style:{fontSize:18,fontWeight:700}},e.name),React.createElement("div",{style:{fontSize:13,color:"var(--ink-3)",marginTop:2}},e.email)),React.createElement("span",{className:"chip violet"},e.role),React.createElement("button",{className:"btn btn-ghost btn-sm"},"Change avatar")),React.createElement("div",{className:"card",style:{marginTop:16}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Account")),React.createElement("div",{className:"card-pad ov-grid",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}},React.createElement(E,{label:"Full name"},React.createElement("input",{style:X,value:e.name,onChange:h=>a("name",h.target.value)})),React.createElement(E,{label:"Email"},React.createElement("input",{style:X,value:e.email,onChange:h=>a("email",h.target.value)})),React.createElement(E,{label:"Username"},React.createElement("input",{style:{...X,fontFamily:"var(--mono)"},value:e.username,onChange:h=>a("username",h.target.value)})),React.createElement(E,{label:"Role",hint:"Assigned by your workspace admin."},c("role",["Platform Admin","AI Engineer","Security / Compliance","Developer"])))),React.createElement("div",{className:"card",style:{marginTop:16}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Preferences")),React.createElement("div",{className:"card-pad ov-grid",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}},React.createElement(E,{label:"Theme"},c("theme",["Dark","System"])),React.createElement(E,{label:"Language"},c("language",["English","Espa\xF1ol","Deutsch","Fran\xE7ais","\u65E5\u672C\u8A9E"])),React.createElement(E,{label:"Timezone"},c("timezone",["UTC","America/New_York","America/Los_Angeles","Europe/London","Europe/Berlin","Asia/Tokyo"])),React.createElement(E,{label:"Date format"},c("dateFormat",["YYYY-MM-DD","DD/MM/YYYY","MM/DD/YYYY"])),React.createElement(E,{label:"Default workspace"},c("defaultWorkspace",["acme-prod","shared","personal"])),React.createElement(E,{label:"Default environment"},c("defaultEnv",["Production","Staging","Development"])))),React.createElement("div",{className:"card",style:{marginTop:16}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Notifications")),React.createElement("div",{style:{padding:"4px 18px"}},[["notifyEmail","Email notifications","Receive account and workspace emails."],["notifyJobs","Job alerts","Notify when your jobs complete or fail."],["notifySecurity","Security alerts","Approvals, policy changes, and token events."],["notifyDigest","Weekly digest","A weekly summary of activity and usage."]].map(([h,v,b])=>React.createElement("div",{key:h,style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:14,padding:"14px 0",borderBottom:"1px solid var(--line)"}},React.createElement("div",null,React.createElement("div",{style:{fontSize:13.5,fontWeight:600}},v),React.createElement("div",{style:{fontSize:12,color:"var(--ink-3)",marginTop:2}},b)),React.createElement(lt,{on:e[h],onChange:y=>a(h,y)}))))),React.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginTop:20,flexWrap:"wrap"}},React.createElement("button",{className:"btn btn-ghost",onClick:f},React.createElement(u,{d:d.refresh,size:15})," Reset to defaults"),React.createElement("div",{style:{display:"flex",gap:10}},React.createElement("button",{className:"btn btn-ghost",style:{color:"var(--red)",borderColor:"rgba(255,93,108,0.3)"}},"Sign out"),React.createElement("button",{className:"btn btn-primary",onClick:o},t?React.createElement(React.Fragment,null,React.createElement(u,{d:d.check,size:15,sw:2.4})," Saved"):"Save changes"))))}function H({label:e,type:s="text",value:t,onChange:n,placeholder:a,icon:i,autoFocus:o}){let f=i?d[i]:null;return React.createElement("label",{style:{display:"block"}},React.createElement("span",{style:{display:"block",fontFamily:"var(--mono)",fontSize:10.5,letterSpacing:"0.18em",textTransform:"uppercase",color:"var(--ink-3)",marginBottom:7}},e),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:10,height:46,padding:"0 13px",borderRadius:"var(--r-sm)",border:"1px solid var(--line-2)",background:"rgba(0,0,0,0.35)"}},f&&React.createElement("span",{style:{color:"var(--acc)",display:"inline-flex",flexShrink:0}},React.createElement(u,{d:f,size:16})),React.createElement("input",{type:s,value:t,onChange:c=>n(c.target.value),placeholder:a,autoFocus:o,spellCheck:!1,style:{flex:1,minWidth:0,height:"100%",background:"transparent",border:"none",outline:"none",color:"var(--ink)",fontSize:14}})))}function ve({onAuthed:e}){let s=React.useMemo(ye,[]),[t,n]=React.useState(s.kind==="reset"?"reset":s.kind==="verify"?"verify":"login"),[a,i]=React.useState(""),[o,f]=React.useState(""),[c,h]=React.useState(""),[v,b]=React.useState(""),[y]=React.useState(s.token),[g,N]=React.useState(""),[p,l]=React.useState(""),[x,m]=React.useState(!1);React.useEffect(()=>{if(t==="verify"){if(!y){N("This verification link is missing its token.");return}m(!0),O.verify(y).then(w=>{l(w),le()}).catch(w=>N(w.message||"Verification failed.")).finally(()=>m(!1))}},[t,y]);function S(w){n(w),N(""),l("")}async function z(w){if(w.preventDefault(),N(""),l(""),t==="forgot"){if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))return N("Enter a valid email.");m(!0);try{l(await O.forgot(o.trim()))}catch(R){N(R.message||"Could not send reset email.")}finally{m(!1)}return}if(t==="reset"){if(c.length<8)return N("Password must be at least 8 characters.");if(c!==v)return N("Passwords do not match.");m(!0);try{l(await O.reset(y,c)),le(),setTimeout(()=>S("login"),1200)}catch(R){N(R.message||"Could not reset password.")}finally{m(!1)}return}if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))return N("Enter a valid work email.");if(c.length<6)return N("Password must be at least 6 characters.");if(t==="signup"){if(!a.trim())return N("Enter your full name.");if(c!==v)return N("Passwords do not match.")}m(!0);try{let R=t==="signup"?await O.signup(a.trim(),o.trim(),c):await O.login(o.trim(),c);e(R)}catch(R){N(R.message||"Authentication failed.")}finally{m(!1)}}let T=[["shield","Secure by default","Signed manifests, audited installs, approval gates."],["server","Runtime isolation","Hybrid and customer-agent execution modes."],["cpu","Model gateway","Hugging Face, OpenAI-compatible, Ollama, vLLM."],["audit","Complete audit trail","Every install, policy, and access change."]],L={login:["Welcome back","Sign in to MatrixCloud","Use your work email and password."],signup:["Get started","Create your account","Set up a workspace owner account to get started."],forgot:["Account recovery","Reset your password","Enter your email and we'll send you a secure reset link."],reset:["Account recovery","Choose a new password","Pick a strong password \u2014 at least 8 characters."],verify:["Email verification","Verifying your email","Confirming your address with MatrixCloud."]},M={login:"Sign in",signup:"Create account",forgot:"Send reset link",reset:"Update password",verify:"Continue"};return React.createElement("div",{style:{position:"relative",zIndex:1,minHeight:"100vh",display:"grid",gridTemplateColumns:"1.1fr 520px"},className:"auth-grid"},React.createElement("section",{className:"auth-hero",style:{display:"flex",flexDirection:"column",justifyContent:"space-between",padding:"44px 52px"}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:11}},React.createElement("span",{style:{width:38,height:38,borderRadius:11,display:"grid",placeItems:"center",border:"1px solid var(--acc-line)",background:"var(--acc-soft)",color:"var(--acc)",boxShadow:"0 0 26px rgba(0,255,136,0.14)"}},React.createElement(u,{d:d.terminal,size:19})),React.createElement("div",null,React.createElement("p",{style:{margin:0,fontSize:16,fontWeight:700,letterSpacing:"-0.01em"}},"MatrixCloud"),React.createElement("p",{style:{margin:"2px 0 0",fontFamily:"var(--mono)",fontSize:9.5,letterSpacing:"0.24em",textTransform:"uppercase",color:"var(--acc-2)",opacity:.7}},"Enterprise Control Plane"))),React.createElement("div",{style:{maxWidth:620}},React.createElement("p",{className:"eyebrow"},"Secure AI infrastructure"),React.createElement("h1",{style:{margin:"18px 0 0",fontSize:"clamp(34px, 4vw, 56px)",fontWeight:600,letterSpacing:"-0.045em",lineHeight:1.02}},"Operate your AI",React.createElement("br",null),"runtime layer."),React.createElement("p",{style:{margin:"20px 0 0",fontSize:15,lineHeight:1.7,color:"var(--ink-3)",maxWidth:520}},"Connect runtimes, test MCP servers, manage models, run agents, enforce policies, and audit every action across your workspace."),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,marginTop:28},className:"auth-feats"},T.map(([w,R,A])=>React.createElement("div",{key:R,style:{borderRadius:"var(--r-md)",border:"1px solid var(--line)",background:"rgba(0,0,0,0.25)",padding:16,backdropFilter:"blur(10px)"}},React.createElement("span",{style:{color:"var(--acc)",display:"inline-flex"}},React.createElement(u,{d:d[w],size:18})),React.createElement("p",{style:{margin:"11px 0 0",fontSize:13.5,fontWeight:600}},R),React.createElement("p",{style:{margin:"5px 0 0",fontSize:12,lineHeight:1.55,color:"var(--ink-4)"}},A))))),React.createElement("p",{style:{margin:0,fontFamily:"var(--mono)",fontSize:11,color:"var(--ink-4)"}},"multitenant workspaces \xB7 session security \xB7 approval gates")),React.createElement("section",{className:"auth-form",style:{display:"flex",alignItems:"center",justifyContent:"center",borderLeft:"1px solid var(--line)",background:"rgba(0,0,0,0.3)",padding:28,backdropFilter:"blur(20px)"}},React.createElement("div",{className:"card rise",style:{width:"100%",maxWidth:400,padding:28}},React.createElement("p",{className:"eyebrow"},L[t][0]),React.createElement("h2",{style:{margin:"12px 0 0",fontSize:25,fontWeight:600,letterSpacing:"-0.02em"}},L[t][1]),React.createElement("p",{style:{margin:"8px 0 0",fontSize:13,lineHeight:1.6,color:"var(--ink-3)"}},L[t][2]),(t==="login"||t==="signup")&&React.createElement("div",{style:{display:"flex",gap:4,marginTop:20,padding:4,borderRadius:"var(--r-sm)",border:"1px solid var(--line)",background:"rgba(0,0,0,0.3)"}},[["login","Sign in"],["signup","Sign up"]].map(([w,R])=>React.createElement("button",{key:w,onClick:()=>S(w),style:{flex:1,height:34,borderRadius:8,fontSize:13,fontWeight:600,background:t===w?"var(--acc-soft)":"transparent",color:t===w?"var(--acc-2)":"var(--ink-3)",border:"1px solid "+(t===w?"var(--line-2)":"transparent")}},R))),t==="verify"?React.createElement("div",{style:{marginTop:22,display:"grid",gap:14}},x&&React.createElement("p",{style:{fontSize:13,color:"var(--ink-3)"}},"Verifying your email\u2026"),p&&React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 12px",borderRadius:"var(--r-sm)",border:"1px solid var(--acc-line)",background:"var(--acc-soft)",color:"var(--acc-2)",fontSize:12.5}},React.createElement(u,{d:d.check,size:14,sw:2.4})," ",p),g&&React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 12px",borderRadius:"var(--r-sm)",border:"1px solid rgba(251,113,133,0.3)",background:"var(--red-soft)",color:"var(--red)",fontSize:12.5}},React.createElement(u,{d:d.x,size:14})," ",g),React.createElement("button",{className:"btn btn-primary",onClick:()=>S("login"),style:{height:46}},"Continue to sign in")):React.createElement("form",{onSubmit:z,style:{display:"grid",gap:14,marginTop:18}},t==="signup"&&React.createElement(H,{label:"Full name",value:a,onChange:i,placeholder:"Maya Chen",icon:"user",autoFocus:!0}),(t==="login"||t==="signup"||t==="forgot")&&React.createElement(H,{label:"Work email",type:"email",value:o,onChange:f,placeholder:"you@company.com",icon:"globe",autoFocus:t==="login"||t==="forgot"}),t!=="forgot"&&React.createElement(H,{label:t==="reset"?"New password":"Password",type:"password",value:c,onChange:h,placeholder:"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",icon:"key",autoFocus:t==="reset"}),(t==="signup"||t==="reset")&&React.createElement(H,{label:"Confirm password",type:"password",value:v,onChange:b,placeholder:"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",icon:"key"}),g&&React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 12px",borderRadius:"var(--r-sm)",border:"1px solid rgba(251,113,133,0.3)",background:"var(--red-soft)",color:"var(--red)",fontSize:12.5}},React.createElement(u,{d:d.x,size:14})," ",g),p&&React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 12px",borderRadius:"var(--r-sm)",border:"1px solid var(--acc-line)",background:"var(--acc-soft)",color:"var(--acc-2)",fontSize:12.5}},React.createElement(u,{d:d.check,size:14,sw:2.4})," ",p),t==="login"&&React.createElement("div",{style:{textAlign:"right",marginTop:-4}},React.createElement("button",{type:"button",onClick:()=>S("forgot"),style:{fontSize:12,color:"var(--acc-2)",fontWeight:600}},"Forgot password?")),React.createElement("button",{className:"btn btn-primary",type:"submit",disabled:x,style:{height:46,marginTop:2}},x?"Please wait\u2026":M[t])),(t==="login"||t==="signup")&&React.createElement("p",{style:{margin:"16px 0 0",textAlign:"center",fontSize:12.5,color:"var(--ink-3)"}},t==="login"?"Need an account? ":"Already have an account? ",React.createElement("button",{onClick:()=>S(t==="login"?"signup":"login"),style:{color:"var(--acc-2)",fontWeight:600}},t==="login"?"Sign up":"Sign in")),(t==="forgot"||t==="reset")&&React.createElement("p",{style:{margin:"16px 0 0",textAlign:"center",fontSize:12.5,color:"var(--ink-3)"}},React.createElement("button",{onClick:()=>S("login"),style:{color:"var(--acc-2)",fontWeight:600}},"\u2190 Back to sign in")),React.createElement("p",{style:{margin:"14px 0 0",textAlign:"center",fontFamily:"var(--mono)",fontSize:10.5,color:"var(--ink-4)"}},"multitenant workspaces \xB7 session security"))))}var ct=[/mkfs/i,/dd\s+if=/i,/\bfdisk\b/i,/\bdiskpart\b/i,/\bshutdown\b/i,/\breboot\b/i,/:\(\)\s*\{/,/\brm\s+-rf\s+(\/|~|\$HOME)(\s|$)/i],pt=e=>ct.some(s=>s.test(e));async function mt(e){let s=e.trim().split(/\s+/),t=(s[1]||"").toLowerCase();try{if(t==="status"){let[n,a]=await Promise.all([C.get("/v1/health"),C.get("/v1/capabilities")]);return{tone:"ok",lines:[`runtime ${n.runtime_id} \xB7 mode ${n.mode} \xB7 v${n.version}`,`capabilities: ${(a.capabilities||[]).join(", ")}`,`runtimes: node=${a.runtimes.node} python=${a.runtimes.python} ollama=${a.runtimes.ollama}`,`limits: max_ttl=${a.limits.max_ttl_seconds}s \xB7 max_jobs=${a.limits.max_concurrent_jobs}`]}}if(t==="ps"){let a=((await C.get("/v1/jobs")).jobs||[]).slice(0,10);return a.length?{tone:"ok",lines:["RUNNING / RECENT JOBS",...a.map(i=>`  ${i.job_id}  ${i.type.padEnd(13)} ${i.status}`)]}:{tone:"dim",lines:["no jobs yet \u2014 try: matrix inspect hf:Qwen/Qwen2.5-7B-Instruct"]}}if(t==="capabilities"||t==="caps")return{tone:"ok",lines:["CAPABILITIES",...((await C.get("/v1/capabilities")).capabilities||[]).map(a=>"  "+a)]};if(t==="inspect"){let n=s[2]||"hf:Qwen/Qwen2.5-7B-Instruct",a=await be("model.inspect",{model:n,revision:"main"});return{tone:"ok",lines:[`model ${a.model}`,`task=${a.pipeline_tag||"?"} \xB7 library=${a.library_name||"?"} \xB7 type=${a.model_type||"?"}`,`license=${a.license||"?"} \xB7 params\u2248${xe(a.estimated_parameters)} \xB7 runtime=${a.recommended_runtime} \xB7 gpu=${a.requires_gpu}`]}}return t==="help"||s.length===1?{tone:"sys",lines:["MATRIX CLI \u2014 inside MatrixShell (wired to this runtime)","  matrix status            runtime health + capabilities (live)","  matrix ps                running / recent jobs (live)","  matrix capabilities      advertised capabilities (live)","  matrix inspect <model>   resolve a model via model.inspect (live)","  \u2026or just describe what you want in plain English."]}:{tone:"dim",lines:[`unknown: ${e}`,"try: matrix help"]}}catch(n){return{tone:"dim",lines:["\u2717 "+(n.message||"command failed")]}}}var ut=[{re:/inspect.*runtime|runtime.*(health|status)|status/i,cmd:"matrix status",risk:"low",expl:"Shows the connected runtime, its mode, version and capabilities \u2014 live from this runtime."},{re:/recent jobs|show.*jobs|running jobs|\bjobs\b/i,cmd:"matrix ps",risk:"low",expl:"Lists the jobs currently running on the connected runtime."},{re:/(list|show).*(capabilit|tools)/i,cmd:"matrix capabilities",risk:"low",expl:"Lists the capabilities this runtime advertises."},{re:/inspect.*model|resolve.*model|qwen|llama|mistral/i,cmd:"matrix inspect hf:Qwen/Qwen2.5-7B-Instruct",risk:"low",expl:"Resolves model metadata (task, license, parameters, recommended runtime) via model.inspect."},{re:/(biggest|largest) files?/i,cmd:"du -ah . | sort -hr | head -n 20",risk:"low",expl:"Lists the 20 largest files and folders in the current directory."},{re:/disk|space|storage/i,cmd:"df -h",risk:"low",expl:"Shows disk space usage for mounted filesystems."},{re:/(install|add).*(package|dependency)/i,cmd:"pip install <package>",risk:"medium",expl:"Installs a package into the sandbox. Write operation \u2014 requires approval."}];function vt(e){for(let s of ut)if(s.re.test(e))return{cmd:s.cmd,risk:s.risk,expl:s.expl};return{cmd:`echo "${e.replace(/"/g,"")}"`,risk:"low",expl:"Could not map this to a known operation \u2014 here is a safe echo. Refine it, or run a matrix command."}}var gt=["ls","cd","pwd","whoami","echo","cat","ps","df","du","git","python","python3","pip","uv","matrix","matrixsh","grep","rm","mkdir","mv","cp","head","tail","find","which","env","node","npm","npx","curl","touch","wc","sort","make","go"];function ht(e){let s=e.trim();return!s||/[?]|\bhow\b|\bwhat\b|\bwhy\b|\bcan i\b|please|inspect|show|list|test|create/i.test(s)&&!s.startsWith("matrix")?!1:gt.includes(s.split(/\s+/)[0].toLowerCase())}function ft(e){return e==="ok"?"var(--acc-2)":e==="sys"?"var(--blue)":e==="warn"?"var(--lime)":e==="dim"?"var(--ink-3)":"var(--ink-2)"}function yt({s:e,answered:s,onAnswer:t}){let n=e.risk==="high"?"red":e.risk==="medium"?"amber":"green";return React.createElement("div",{style:{border:"1px solid var(--line-2)",borderRadius:"var(--r-md)",margin:"8px 0 4px",overflow:"hidden",background:"rgba(0,0,0,0.3)"}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 13px",borderBottom:"1px solid var(--line)",background:"rgba(92,200,255,0.05)"}},React.createElement("span",{style:{color:"var(--blue)",display:"inline-flex"}},React.createElement(u,{d:d.cpu,size:14})),React.createElement("span",{style:{fontSize:12,fontWeight:600,color:"var(--blue)",letterSpacing:"0.02em"}},"Suggested command")),React.createElement("div",{style:{padding:"12px 14px"}},React.createElement("div",{style:{fontSize:12.5,lineHeight:1.6,color:"var(--ink-2)"}},e.expl),React.createElement("pre",{className:"mono",style:{margin:"10px 0 0",padding:"10px 12px",borderRadius:8,background:"rgba(0,0,0,0.5)",border:"1px solid var(--line)",fontSize:12.5,color:"#fff",overflowX:"auto"}},e.cmd),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:11}},React.createElement("span",{className:"chip "+n},"risk: ",e.risk),e.risk!=="low"&&React.createElement("span",{style:{fontSize:11.5,color:"var(--lime)"}},"write operation \xB7 approval required")),s?React.createElement("div",{style:{marginTop:12,fontSize:12.5,color:s==="yes"?"var(--acc-2)":"var(--ink-3)"}},s==="yes"?"\u2713 executed":"\u2717 cancelled"):React.createElement("div",{style:{display:"flex",alignItems:"center",gap:9,marginTop:12}},React.createElement("span",{style:{fontSize:12.5,color:"var(--ink-2)"}},"Execute it?"),React.createElement("button",{className:"btn btn-primary btn-sm",onClick:()=>t(!0)},"Yes, run"),React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:()=>t(!1)},"No"))))}function bt({back:e,user:s}){let t=te(),[n,a]=React.useState(null),[i,o]=React.useState([]),[f,c]=React.useState(""),[h,v]=React.useState(!1),[b,y]=React.useState(!1),g=React.useRef(null),N=React.useRef(null),p=React.useRef([]),l=React.useRef(-1),x=React.useCallback(async()=>{try{a(await C.get("/v1/matrixshell/status"))}catch(r){a({installed:!1,error:r.message})}},[]);React.useEffect(()=>{x(),N.current&&N.current.focus()},[x]),React.useEffect(()=>{g.current&&(g.current.scrollTop=g.current.scrollHeight)},[i]);let m=r=>o(k=>[...k,...r]),S=(r,k)=>({kind:"out",c:k||"var(--ink-2)",text:r});async function z(r){let k=await mt(r);m(k.lines.map(_=>S(_,ft(k.tone))))}async function T(r){if(pt(r)){m([S("\u2717 Refusing to execute \u2014 blocked by safety denylist.","var(--red)")]);return}if(!n||!n.installed){m([S("MatrixShell sandbox is not installed \u2014 click \u2018Install MatrixShell\u2019 above.","var(--amber)")]);return}v(!0);try{let k=await C.post("/v1/matrixshell/exec",{command:r}),_=[];k.stdout&&k.stdout.replace(/\n$/,"").split(`
`).forEach(I=>_.push(S(I,"var(--ink)"))),k.stderr&&k.stderr.replace(/\n$/,"").split(`
`).forEach(I=>_.push(S(I,"var(--ink-3)"))),k.exit_code!==0&&_.push(S("exit "+k.exit_code,"var(--red)")),_.length===0&&_.push(S("\u2713 exit 0","var(--acc-2)")),m(_)}catch(k){m([S("\u2717 "+k.message,"var(--red)")])}finally{v(!1)}}async function L(r){if(r.startsWith("matrix ")||r==="matrix"){await z(r);return}await T(r)}async function M(r,k){if(o(_=>_.map((I,V)=>V===r?{...I,answered:k?"yes":"no"}:I)),!k){m([S("Cancelled.","var(--ink-3)")]);return}await L(i[r].s.cmd)}async function w(r){let k=r.trim();if(k){if(p.current.push(k),l.current=p.current.length,c(""),k==="clear"){o([]);return}if(m([{kind:"in",text:k}]),ht(k)){await L(k);return}m([{kind:"suggestion",s:vt(k)}])}}function R(r){r.key==="ArrowUp"?(r.preventDefault(),l.current>0&&(l.current--,c(p.current[l.current]||""))):r.key==="ArrowDown"&&(r.preventDefault(),l.current<p.current.length-1?(l.current++,c(p.current[l.current]||"")):(l.current=p.current.length,c("")))}async function A(){y(!0),m([S("$ installing MatrixShell into a local Python sandbox\u2026","var(--acc-2)")]);try{let r=await C.post("/v1/matrixshell/install",{}),k=new EventSource(C.eventsURL("/v1/jobs/"+r.job_id+"/events"));k.onmessage=_=>{let I;try{I=JSON.parse(_.data)}catch{return}I.message&&m([S(I.message,I.status==="error"?"var(--red)":"var(--ink-3)")]),(I.step==="ready"||I.status==="error"||I.status==="complete")&&(k.close(),y(!1),x())},k.onerror=()=>{k.close(),y(!1),x()}}catch(r){m([S("\u2717 "+r.message,"var(--red)")]),y(!1)}}let W=n&&n.installed,$=W?["matrix status","matrixsh --help","python --version","ls -la","pip list"]:["matrix status","matrix ps"],D=i.length===0,B=n==null?"checking\u2026":W?"matrixsh "+n.version:"not installed";return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Operator terminal"),React.createElement("h1",null,"MatrixShell"),React.createElement("p",null,"The real MatrixShell CLI in a Python sandbox on this runtime's host. Type a command (executed for real), or describe what you want and confirm the suggestion.")),React.createElement("div",{style:{display:"flex",gap:9,flexWrap:"wrap",alignItems:"center"}},React.createElement("span",{className:"chip "+(t.online?"green":"red")},React.createElement("span",{className:"dot "+(t.online?"green pulse":"red")})," ",t.online?"Connected":"Offline"),React.createElement("span",{className:"chip green"},React.createElement(u,{d:d.shield,size:12})," Safe mode"),React.createElement("span",{className:"chip "+(W?"green":"amber")},React.createElement(u,{d:d.terminal,size:12})," ",B),React.createElement("button",{className:"btn btn-ghost btn-sm",onClick:e},React.createElement(u,{d:d.x,size:14})," Close"))),n!=null&&!W&&React.createElement("div",{className:"card card-pad",style:{marginBottom:16,display:"flex",alignItems:"center",gap:16,flexWrap:"wrap",borderColor:"var(--amber-soft)"}},React.createElement("div",{style:{flex:1,minWidth:240}},React.createElement("div",{style:{fontWeight:700,fontSize:14}},"MatrixShell is not installed yet"),React.createElement("p",{style:{margin:"5px 0 0",fontSize:12.5,color:"var(--ink-3)"}},"This installs the real ",React.createElement("span",{className:"mono"},"matrixsh")," CLI from git into a dedicated Python venv on this host, then runs commands there. ",n.error?"("+n.error+")":"")),React.createElement("button",{className:"btn btn-primary",onClick:A,disabled:b},React.createElement(u,{d:d.download,size:15})," ",b?"Installing\u2026":"Install MatrixShell")),React.createElement("div",{className:"card card-pad",style:{marginBottom:16}},React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"14px 36px"}},[["Workspace",s&&s.workspace||"\u2014"],["Runtime",t.health&&t.health.runtime_id||"\u2014"],["Mode",t.health&&t.health.mode||"\u2014"],["matrixsh",W?n.version:"\u2014"],["Sandbox",n&&n.sandbox||"\u2014"]].map(([r,k])=>React.createElement("div",{key:r,style:{minWidth:0}},React.createElement("div",{style:{fontFamily:"var(--mono)",fontSize:10,letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--ink-4)"}},r),React.createElement("div",{className:"mono",style:{fontSize:12.5,color:"var(--ink)",marginTop:4,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:320}},k))))),React.createElement("div",{className:"card",style:{display:"flex",flexDirection:"column",overflow:"hidden"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Terminal"),React.createElement("span",{className:"chip mono"},W?"sandbox \xB7 matrixsh "+n.version:"matrix-runtime")),React.createElement("div",{ref:g,style:{minHeight:320,maxHeight:"46vh",overflowY:"auto",padding:"16px 18px",fontFamily:"var(--mono)",fontSize:12.5,lineHeight:1.75}},React.createElement("p",{style:{margin:0,color:"var(--ink-3)"}},W?"matrixsh "+n.version+" \xB7 real Python sandbox on "+(t.health&&t.health.runtime_id||"this host"):"MatrixShell control terminal"),React.createElement("p",{style:{margin:0,color:"var(--ink-4)"}},"Commands run for real in the sandbox. Destructive operations are blocked. ",React.createElement("span",{className:"mono"},"matrix \u2026")," talks to the control plane."),D&&React.createElement("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"40px 0 32px",textAlign:"center",opacity:.7}},React.createElement("span",{style:{color:"var(--acc)",opacity:.5}},React.createElement(u,{d:d.terminal,size:30})),React.createElement("p",{style:{margin:"16px 0 0",fontSize:13,color:"var(--ink-3)",fontFamily:"var(--font)"}},W?"Ready for commands":"Install MatrixShell to run sandbox commands"),React.createElement("p",{style:{margin:"6px 0 0",fontSize:11.5,color:"var(--ink-4)",fontFamily:"var(--font)"}},"Try: matrixsh --help \xB7 python --version \xB7 matrix status")),React.createElement("div",{style:{marginTop:12}},i.map((r,k)=>r.kind==="suggestion"?React.createElement(yt,{key:k,s:r.s,answered:r.answered,onAnswer:_=>M(k,_)}):r.kind==="in"?React.createElement("p",{key:k,style:{margin:0}},React.createElement("span",{style:{color:"var(--acc)"}},"sandbox"),React.createElement("span",{style:{color:"var(--ink-4)"}}," $ "),React.createElement("span",{style:{color:"#fff"}},r.text)):React.createElement("p",{key:k,style:{margin:0,color:r.c,whiteSpace:"pre-wrap"}},r.text)),h&&React.createElement("p",{style:{margin:0,color:"var(--ink-4)"}},React.createElement("span",{className:"cur"})))),React.createElement("div",{style:{borderTop:"1px solid var(--line)",background:"rgba(0,0,0,0.25)",padding:14,flexShrink:0}},React.createElement("div",{className:"no-bar",style:{display:"flex",gap:8,overflowX:"auto",marginBottom:11}},$.map(r=>React.createElement("button",{key:r,onClick:()=>w(r),className:"chip",style:{flexShrink:0,cursor:"pointer",height:28,fontFamily:"var(--font)"}},r))),React.createElement("form",{onSubmit:r=>{r.preventDefault(),w(f)},style:{display:"flex",alignItems:"center",gap:10,height:46,padding:"0 14px",borderRadius:"var(--r-sm)",border:"1px solid var(--line-2)",background:"rgba(0,0,0,0.4)"}},React.createElement("span",{className:"mono",style:{fontSize:13.5,color:"var(--acc)",fontWeight:700}},"sandbox",React.createElement("span",{style:{color:"var(--ink-4)"}},">")),React.createElement("input",{ref:N,value:f,onChange:r=>c(r.target.value),onKeyDown:R,placeholder:"type a command, or ask in plain English\u2026",spellCheck:!1,style:{flex:1,minWidth:0,height:"100%",background:"transparent",border:"none",outline:"none",color:"var(--ink)",fontFamily:"var(--mono)",fontSize:13.5}}),React.createElement("button",{type:"submit","aria-label":"Run",disabled:h,style:{width:34,height:34,borderRadius:9,background:"var(--acc)",color:"#03140c",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0}},React.createElement(u,{d:d.chevr,size:16,sw:2.4}))),React.createElement("div",{style:{marginTop:9,display:"flex",alignItems:"center",gap:7,fontSize:11,color:"var(--ink-4)"}},React.createElement(u,{d:d.shield,size:12,style:{color:"var(--acc)"}})," Real execution in a Python sandbox \xB7 destructive commands are blocked."))))}function we({title:e,eyebrow:s,steps:t,step:n,onCancel:a,children:i,footer:o}){return React.createElement("div",{className:"wrap rise",style:{maxWidth:880}},React.createElement("button",{className:"chip",onClick:a,style:{marginBottom:16,cursor:"pointer"}},React.createElement(u,{d:d.chev,size:13,style:{transform:"rotate(90deg)"}})," Cancel"),React.createElement("p",{className:"eyebrow"},s),React.createElement("h1",{style:{margin:"7px 0 0",fontSize:24,fontWeight:700,letterSpacing:"-0.02em"}},e),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:0,margin:"22px 0 4px"}},t.map((f,c)=>{let h=c<n?"done":c===n?"active":"todo";return React.createElement(React.Fragment,{key:f},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:9,flexShrink:0}},React.createElement("span",{style:{width:26,height:26,borderRadius:99,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",fontSize:12,fontWeight:700,fontFamily:"var(--mono)",background:h==="done"?"var(--acc)":"transparent",border:"1px solid "+(h==="todo"?"var(--line-3)":"var(--acc)"),color:h==="done"?"#042012":h==="active"?"var(--acc)":"var(--ink-4)"}},h==="done"?React.createElement(u,{d:d.check,size:14,sw:2.6}):c+1),React.createElement("span",{style:{fontSize:12.5,fontWeight:600,color:h==="todo"?"var(--ink-4)":"var(--ink)",whiteSpace:"nowrap"},className:"hide-sm"},f)),c<t.length-1&&React.createElement("div",{style:{flex:1,height:1,background:c<n?"var(--acc)":"var(--line-2)",margin:"0 12px",minWidth:18}}))})),React.createElement("div",{className:"card",style:{marginTop:18}},React.createElement("div",{className:"card-pad"},i),React.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,padding:"14px 18px",borderTop:"1px solid var(--line)"}},o)))}function Z({active:e,onClick:s,mono:t,title:n,sub:a,right:i,disabled:o}){return React.createElement("button",{onClick:o?void 0:s,disabled:o,style:{display:"flex",alignItems:"center",gap:13,width:"100%",textAlign:"left",padding:"13px 14px",borderRadius:"var(--r-md)",border:"1px solid "+(e?"var(--acc-line)":"var(--line-2)"),background:e?"var(--acc-soft)":"var(--inset)",opacity:o?.5:1,cursor:o?"not-allowed":"pointer",transition:"all .14s"}},React.createElement("span",{style:{width:38,height:38,borderRadius:10,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid var(--line-2)",background:"var(--raised)",color:"var(--acc)",fontFamily:"var(--mono)",fontWeight:700,fontSize:12}},t),React.createElement("span",{style:{flex:1,minWidth:0}},React.createElement("span",{style:{display:"block",fontSize:13.5,fontWeight:600,color:"var(--ink)"}},n),React.createElement("span",{style:{display:"block",fontSize:12,color:"var(--ink-3)",marginTop:1}},a)),i,React.createElement("span",{style:{width:18,height:18,borderRadius:99,flexShrink:0,border:"1px solid "+(e?"var(--acc)":"var(--line-3)"),background:e?"var(--acc)":"transparent",display:"flex",alignItems:"center",justifyContent:"center"}},e&&React.createElement(u,{d:d.check,size:12,sw:3,style:{color:"#042012"}})))}function xt({onCancel:e,onLaunch:s}){let[t,n]=React.useState(0),[a,i]=React.useState(null),[o,f]=React.useState(""),c=Se(),{runtimes:h}=ae(),v=(c||[]).filter(l=>l.sandbox),b=["Component","Environment","Review"],y=v.find(l=>l.id===a),g=()=>n(l=>Math.min(b.length-1,l+1)),N=()=>n(l=>Math.max(0,l-1)),p=(h||[]).filter(l=>l.statusClass!=="red");return React.useEffect(()=>{!o&&p[0]&&f(p[0].name)},[p,o]),React.createElement(we,{eyebrow:"Sandboxes \xB7 New session",title:"Start a sandbox",steps:b,step:t,onCancel:e,footer:React.createElement(React.Fragment,null,React.createElement("button",{className:"btn btn-ghost",onClick:t===0?e:N},t===0?"Cancel":"Back"),t<b.length-1?React.createElement("button",{className:"btn btn-primary",disabled:t===0&&!a,onClick:g},"Continue ",React.createElement(u,{d:d.chevr,size:15})):React.createElement("button",{className:"btn btn-primary",onClick:()=>s(y)},React.createElement(u,{d:d.play,size:15})," Launch sandbox"))},t===0&&React.createElement("div",null,React.createElement("p",{style:{margin:"0 0 14px",fontSize:13,color:"var(--ink-3)"}},"Choose a sandbox-enabled MCP server to test in an isolated 10-minute session. No production secrets are used. Items badged ",React.createElement("span",{className:"chip green",style:{height:20}},"live")," run for real on this runtime."),React.createElement("div",{style:{display:"grid",gap:9}},v.map(l=>React.createElement(Z,{key:l.id,active:a===l.id,onClick:()=>i(l.id),mono:l.initials,title:l.name,sub:`${l.runtime} \xB7 ${l.secrets?"needs secrets":"no secrets"}`,right:l.startCommand?React.createElement("span",{className:"chip green",style:{height:20}},"live"):l.verified?React.createElement("span",{className:"chip green",style:{height:20}},"Verified"):null})))),t===1&&React.createElement("div",null,React.createElement("p",{style:{margin:"0 0 14px",fontSize:13,color:"var(--ink-3)"}},"Select the runtime that will host the sandbox."),React.createElement("div",{style:{display:"grid",gap:9}},p.length===0&&React.createElement("div",{style:{color:"var(--ink-4)",fontSize:12.5}},"No runtimes available."),p.map(l=>React.createElement(Z,{key:l.id,active:o===l.name,onClick:()=>f(l.name),mono:(l.region||"lo").slice(0,2).toUpperCase(),title:l.name,sub:`${l.mode} \xB7 ${l.region}`,right:l.live?React.createElement(P,null):React.createElement("span",{className:"chip "+(l.statusClass||"green"),style:{height:20}},React.createElement("span",{className:"dot "+(l.statusClass||"green")})," ",l.status||"Online")})))),t===2&&y&&React.createElement("div",null,React.createElement("p",{style:{margin:"0 0 16px",fontSize:13,color:"var(--ink-3)"}},"Review and launch. The session boots immediately and expires automatically."),React.createElement("div",{style:{display:"grid",gap:1,borderRadius:"var(--r-sm)",overflow:"hidden",border:"1px solid var(--line)"}},[["Component",y.name],["Manifest",y.id],["Runtime",o||"\u2014"],["Command",y.startCommand||"\u2014"],["TTL","10 minutes"],["Secrets","None"]].map(([l,x])=>React.createElement("div",{key:l,style:{display:"flex",gap:12,padding:"12px 14px",background:"var(--inset)"}},React.createElement("span",{style:{width:100,flexShrink:0,fontSize:12,color:"var(--ink-3)",textTransform:"uppercase",letterSpacing:"0.05em"}},l),React.createElement("span",{className:"mono",style:{fontSize:12.5,color:"var(--ink)",wordBreak:"break-all"}},x))))))}var ge=[{id:"huggingface",mono:"HF",name:"Hugging Face",sub:"resolvable via model.inspect",models:["hf:Qwen/Qwen2.5-7B-Instruct","hf:mistralai/Mistral-7B-Instruct-v0.3","hf:BAAI/bge-large-en-v1.5"]},{id:"ollama",mono:"OL",name:"Ollama",sub:"local \xB7 6 models",models:["llama3.1","mistral","qwen2.5"]}];function kt({onCancel:e,onDone:s}){let[t,n]=React.useState(0),[a,i]=React.useState("huggingface"),[o,f]=React.useState(null),[c,h]=React.useState([]),[v,b]=React.useState(!1),[y,g]=React.useState(""),N=["Provider","Model","Attach"],p=ge.find(m=>m.id===a),l=()=>n(m=>Math.min(N.length-1,m+1)),x=()=>n(m=>Math.max(0,m-1));return React.useEffect(()=>{if(t!==2||!o)return;let m=!0;return h([]),b(!1),g(""),(async()=>{let S=(z,T)=>m&&h(L=>[...L,{k:z,msg:T}]);S("resolve","Resolving metadata via model.inspect\u2026");try{if(a==="huggingface"){let z=await be("model.inspect",{model:o,revision:"main"});if(!m)return;S("resolve",`task=${z.pipeline_tag||"?"} \xB7 library=${z.library_name||"?"}`),S("license",`License check \xB7 ${z.license||"unknown"}`),S("params",`Parameters \u2248 ${xe(z.estimated_parameters)} \xB7 runtime=${z.recommended_runtime}`),S("ready","Model resolved and ready to attach.")}else await ee(500),S("ready","Provider model selected.");m&&b(!0)}catch(z){m&&(g(z.message),S("error","\u2717 "+z.message))}})(),()=>{m=!1}},[t,o,a]),React.createElement(we,{eyebrow:"Models \xB7 Attach",title:"Attach a model",steps:N,step:t,onCancel:e,footer:t<2?React.createElement(React.Fragment,null,React.createElement("button",{className:"btn btn-ghost",onClick:t===0?e:x},t===0?"Cancel":"Back"),React.createElement("button",{className:"btn btn-primary",disabled:t===0&&!a||t===1&&!o,onClick:l},t===1?React.createElement(React.Fragment,null,React.createElement(u,{d:d.download,size:15})," Attach model"):React.createElement(React.Fragment,null,"Continue ",React.createElement(u,{d:d.chevr,size:15})))):React.createElement(React.Fragment,null,React.createElement("span",{style:{fontSize:12.5,color:y?"var(--red)":"var(--ink-3)"}},y?"Failed":v?"Resolved successfully.":"Resolving\u2026"),React.createElement("button",{className:"btn btn-primary",disabled:!v,onClick:s},React.createElement(u,{d:d.check,size:15,sw:2.4})," Done"))},t===0&&React.createElement("div",null,React.createElement("p",{style:{margin:"0 0 14px",fontSize:13,color:"var(--ink-3)"}},"Choose the provider that serves the model. Hugging Face models resolve live through this runtime."),React.createElement("div",{style:{display:"grid",gap:9}},ge.map(m=>React.createElement(Z,{key:m.id,active:a===m.id,onClick:()=>{i(m.id),f(null)},mono:m.mono,title:m.name,sub:m.sub,right:m.id==="huggingface"?React.createElement(P,null):React.createElement("span",{className:"chip green",style:{height:20}},React.createElement("span",{className:"dot green"})," connected")})))),t===1&&p&&React.createElement("div",null,React.createElement("p",{style:{margin:"0 0 14px",fontSize:13,color:"var(--ink-3)"}},"Pick a model from ",React.createElement("b",{style:{color:"var(--ink-2)"}},p.name),". Metadata is resolved before attach."),React.createElement("div",{style:{display:"grid",gap:9}},p.models.map(m=>React.createElement(Z,{key:m,active:o===m,onClick:()=>f(m),mono:"M",title:m,sub:m.includes("bge")?"embeddings":"text-generation",right:m.includes("7B")||m.includes("8B")?React.createElement("span",{className:"chip amber",style:{height:20}},"GPU"):null})))),t===2&&React.createElement("div",null,React.createElement("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:16}},React.createElement("span",{style:{width:40,height:40,borderRadius:10,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid var(--line-2)",background:"var(--raised)",color:"var(--acc)"}},React.createElement(u,{d:d.cpu,size:18})),React.createElement("div",{style:{minWidth:0}},React.createElement("div",{style:{fontSize:14,fontWeight:700},className:"mono"},o),React.createElement("div",{style:{fontSize:12,color:"var(--ink-3)"}},p.name)),React.createElement("span",{className:"chip "+(y?"red":v?"green":"amber"),style:{marginLeft:"auto"}},React.createElement("span",{className:"dot "+(y?"red":v?"green pulse":"amber")})," ",y?"Failed":v?"Ready":"Resolving")),React.createElement("div",{className:"logwin",style:{height:200}},c.map((m,S)=>React.createElement("div",{key:S,className:"rise",style:{color:m.k==="error"?"var(--red)":"var(--ink-2)"}},React.createElement("span",{style:{color:m.k==="error"?"var(--red)":"var(--acc)"}},m.k==="error"?"\u2717":"\u2713")," ",React.createElement("span",{style:{color:"var(--ink-4)"}},"[",m.k,"]")," ",m.msg)),!v&&!y&&React.createElement("span",{className:"cur"})),v&&React.createElement("div",{className:"rise",style:{marginTop:14,padding:14,borderRadius:"var(--r-md)",border:"1px solid var(--acc-line)",background:"var(--acc-soft)"}},React.createElement("div",{style:{fontSize:13.5,fontWeight:700,color:"var(--acc-2)"}},"Model resolved"),React.createElement("p",{style:{margin:"5px 0 0",fontSize:12.5,color:"var(--ink-2)"}},React.createElement("span",{className:"mono"},o)," resolved and ready for agents to use."))))}function G({ic:e,label:s,chevron:t,danger:n,onClick:a}){return React.createElement("button",{className:"navitem",onClick:a,style:{fontSize:13,color:n?"var(--red)":void 0}},e&&React.createElement("span",{className:"i",style:n?{color:"var(--red)"}:null},React.createElement(u,{d:e,size:15})),React.createElement("span",{style:{flex:1,textAlign:"left"}},s),t&&React.createElement(u,{d:d.chevr,size:13,style:{color:"var(--ink-4)"}}))}function he(){return React.createElement("div",{style:{height:1,background:"var(--line)",margin:"5px 0"}})}function St({onClose:e,onConfirm:s}){return ReactDOM.createPortal(React.createElement("div",{className:"scrim",style:{position:"fixed",inset:0,zIndex:80,display:"flex",alignItems:"center",justifyContent:"center",padding:24,background:"rgba(5,8,12,0.7)",backdropFilter:"blur(6px)"},onMouseDown:t=>{t.target===t.currentTarget&&e()}},React.createElement("div",{className:"rise card",style:{width:"100%",maxWidth:420,background:"var(--panel-2)"}},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Sign out of MatrixCloud?")),React.createElement("div",{style:{padding:18}},React.createElement("p",{style:{margin:0,fontSize:13,lineHeight:1.6,color:"var(--ink-2)"}},"You will be signed out of this browser. Running jobs, runtimes, and sandboxes will continue."),React.createElement("div",{style:{display:"flex",gap:10,marginTop:18}},React.createElement("button",{className:"btn btn-ghost",style:{flex:1},onClick:e},"Cancel"),React.createElement("button",{className:"btn btn-primary",style:{flex:1,background:"var(--red)",color:"#fff"},onClick:()=>s(!1)},"Sign out")),React.createElement("button",{className:"navitem",style:{marginTop:8,fontSize:12.5,color:"var(--ink-3)",justifyContent:"center"},onClick:()=>s(!0)},"Sign out of all sessions")))),document.body)}function Nt({onProfile:e,go:s,user:t,onSignOut:n}){let[a,i]=React.useState(!1),[o,f]=React.useState(!1),c=(t.name||t.email||"U").split(" ").map(v=>v[0]).slice(0,2).join("").toUpperCase(),h=v=>{i(!1),v&&v()};return React.createElement("div",{style:{position:"relative"}},a&&React.createElement(React.Fragment,null,React.createElement("div",{style:{position:"fixed",inset:0,zIndex:44},onClick:()=>i(!1)}),React.createElement("div",{className:"card rise no-bar",style:{position:"absolute",bottom:"calc(100% + 8px)",left:0,width:250,zIndex:45,padding:6,background:"var(--panel-2)",boxShadow:"0 -8px 40px rgba(0,0,0,0.5)"}},React.createElement("div",{style:{display:"flex",gap:11,padding:"11px 11px 12px"}},React.createElement("span",{className:"ua",style:{width:38,height:38,fontSize:15,borderRadius:10}},c),React.createElement("div",{style:{minWidth:0}},React.createElement("div",{style:{fontSize:13.5,fontWeight:700,color:"var(--ink)"}},t.name),React.createElement("div",{style:{fontSize:12,color:"var(--ink-3)",fontFamily:"var(--mono)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},t.email),React.createElement("div",{style:{fontSize:11.5,color:"var(--acc-2)",marginTop:3}},t.role," \xB7 ",t.workspace))),React.createElement(he,null),React.createElement(G,{ic:d.layers,label:"Switch workspace",chevron:!0,onClick:()=>h(()=>s("settings"))}),React.createElement(G,{ic:d.user,label:"Profile",onClick:()=>h(e)}),React.createElement(G,{ic:d.gear,label:"Settings",onClick:()=>h(()=>s("settings"))}),React.createElement(he,null),React.createElement(G,{ic:d.x,label:"Sign out",danger:!0,onClick:()=>{i(!1),f(!0)}}))),React.createElement("button",{onClick:()=>i(v=>!v),className:"user-row"+(a?" open":""),"aria-label":"Account menu"},React.createElement("span",{className:"ua"},c),React.createElement("span",{style:{flex:1,minWidth:0,textAlign:"left"}},React.createElement("span",{style:{display:"block",fontSize:13,fontWeight:600,color:"var(--ink)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},t.name),React.createElement("span",{style:{display:"block",fontSize:11,color:"var(--ink-4)",fontFamily:"var(--mono)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},t.email)),React.createElement(u,{d:d.chev,size:15,style:{color:"var(--ink-4)",transform:a?"rotate(0deg)":"rotate(180deg)",flexShrink:0}})),o&&React.createElement(St,{onClose:()=>f(!1),onConfirm:v=>{f(!1),n(v)}}))}var wt=[{grp:"Platform",items:[{id:"overview",label:"Overview",ic:d.grid},{id:"catalog",label:"Catalog",ic:d.layers},{id:"sandboxes",label:"Sandboxes",ic:d.play},{id:"models",label:"Models",ic:d.cpu}]},{grp:"Runtime",items:[{id:"runtimes",label:"Runtimes",ic:d.server},{id:"agents",label:"Jobs",ic:d.activity},{id:"logs",label:"Logs",ic:d.logs},{id:"install",label:"Install Runtime",ic:d.download}]},{grp:"Governance",items:[{id:"policies",label:"Policies",ic:d.shield},{id:"audit",label:"Audit",ic:d.audit},{id:"settings",label:"Settings",ic:d.gear}]}];function Ct(){let[e,s]=React.useState(!1),[t,n]=React.useState("Production"),a=[["Production","green"],["Staging","amber"],["Development","blue"]];return React.createElement("div",{style:{position:"relative"}},React.createElement("button",{className:"switcher",onClick:()=>s(i=>!i)},React.createElement("span",{className:"dot green"})," ",React.createElement("span",{className:"env-switch-lab"},t)," ",React.createElement(u,{d:d.chev,size:14,className:"chev"})),e&&React.createElement(React.Fragment,null,React.createElement("div",{style:{position:"fixed",inset:0,zIndex:40},onClick:()=>s(!1)}),React.createElement("div",{className:"card rise",style:{position:"absolute",top:40,left:0,zIndex:41,width:180,padding:6,background:"var(--panel-2)"}},a.map(([i,o])=>React.createElement("button",{key:i,className:"navitem",onClick:()=>{n(i),s(!1)},style:{fontSize:13}},React.createElement("span",{className:"dot "+o})," ",i)))))}function Rt(){return React.createElement("button",{className:"switcher"},React.createElement("span",{className:"av",style:{background:"linear-gradient(135deg,#2bd576,#1c9c54)"}},"A"),React.createElement("span",{style:{fontWeight:600,color:"var(--ink)"},className:"hide-sm"},"Acme Corp"),React.createElement(u,{d:d.chev,size:14,className:"chev"}))}function zt({onNew:e}){return React.createElement("div",{className:"wrap rise"},React.createElement("div",{className:"phead"},React.createElement("div",null,React.createElement("p",{className:"eyebrow"},"Execution plane"),React.createElement("h1",null,"Sandboxes"),React.createElement("p",null,"Temporary 10-minute sessions to test MCP servers safely before installing \u2014 no production secrets, auto-expiring.")),React.createElement("button",{className:"btn btn-primary",onClick:e},React.createElement(u,{d:d.play,size:15})," New sandbox")),React.createElement("div",{className:"card card-pad",style:{display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",padding:48}},React.createElement("span",{style:{display:"inline-flex",color:"var(--ink-4)"}},React.createElement(u,{d:d.play,size:36})),React.createElement("h2",{style:{margin:"16px 0 0",fontSize:18}},"No active sandboxes"),React.createElement("p",{style:{margin:"8px 0 0",fontSize:13,color:"var(--ink-3)",maxWidth:380}},"Start a guided 10-minute test session \u2014 pick a sandbox-enabled MCP server, choose a runtime, and launch."),React.createElement("button",{className:"btn btn-primary",style:{marginTop:18},onClick:e},React.createElement(u,{d:d.play,size:15})," New sandbox")))}function Tt(){let e=te();return React.createElement("div",{className:"side-foot"},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:12,color:"var(--ink-2)"}},React.createElement("span",{className:"dot "+(e.online?"green pulse":"red")})," ",e.online?"Control plane online":e.loading?"Connecting\u2026":"Runtime offline"),React.createElement("div",{style:{fontSize:11,color:"var(--ink-4)",marginTop:5,fontFamily:"var(--mono)"}},e.health?e.health.runtime_id+" \xB7 v"+e.health.version:"cloud.matrixhub.io"),React.createElement("a",{href:"/docs",target:"_blank",rel:"noopener noreferrer",style:{display:"inline-flex",alignItems:"center",gap:6,fontSize:11,color:"var(--ink-3)",marginTop:8}},React.createElement(u,{d:d.logs,size:12})," API docs"))}function se(e){if(e=Number(e)||0,e<1024)return e+" B";let s=["KB","MB","GB","TB"],t=-1;do e/=1024,t++;while(e>=1024&&t<s.length-1);return e.toFixed(e<10?1:0)+" "+s[t]}function It(){let{data:e}=j("/v1/system/storage",15e3),s={models:"Model cache",mcp:"MCP cache",agents:"Agents",jobs:"Jobs",logs:"Logs",database:"Database"},t=e?e.areas||{}:{},n=Object.keys(s).filter(a=>a in t);return React.createElement("div",{className:"card"},React.createElement("div",{className:"card-h"},React.createElement("span",{className:"t"},"Storage"),e&&React.createElement("span",{className:"chip"},se(e.total_bytes)," used",e.free_bytes?" \xB7 "+se(e.free_bytes)+" free":"")),React.createElement("div",{style:{padding:"4px 18px"}},!e&&React.createElement("div",{style:{padding:"13px 0",color:"var(--ink-4)",fontSize:12.5}},"Loading\u2026"),e&&n.map(a=>React.createElement("div",{key:a,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 0",borderBottom:"1px solid var(--line)"}},React.createElement("span",{style:{fontSize:13.5,fontWeight:600}},s[a]),React.createElement("span",{className:"mono",style:{fontSize:12.5,color:"var(--ink-3)"}},se(t[a])))),e&&React.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 0"}},React.createElement("span",{style:{fontSize:12,color:"var(--ink-4)"}},e.jobs_count||0," job dir(s) \xB7 ",e.data_dir))))}function Mt({user:e,onSignOut:s}){let[t,n]=React.useState("overview"),[a,i]=React.useState(!1),[o,f]=React.useState(null),[c,h]=React.useState(null),[v,b]=React.useState(null);function y(l){n(l),f(null),b(null),i(!1)}function g(l,x){x?h(l):f(l)}function N(l){h(null),b(l),f(null),n("sandboxes")}let p;return v?p=React.createElement(Ee,{item:v,back:()=>{b(null),n("catalog")}}):o?p=React.createElement(Pe,{item:o,back:()=>f(null),startSandbox:l=>h(l)}):t==="overview"?p=React.createElement(de,{go:y}):t==="catalog"?p=React.createElement(Ae,{openItem:g}):t==="sandboxes"?p=React.createElement(zt,{onNew:()=>n("new-sandbox")}):t==="new-sandbox"?p=React.createElement(xt,{onCancel:()=>n("sandboxes"),onLaunch:l=>N(l)}):t==="models"?p=React.createElement(Qe,{onAttach:()=>n("attach-model")}):t==="attach-model"?p=React.createElement(kt,{onCancel:()=>n("models"),onDone:()=>n("models")}):t==="runtimes"?p=React.createElement(Oe,{go:y}):t==="agents"?p=React.createElement(Xe,null):t==="logs"?p=React.createElement(Ze,null):t==="install"?p=React.createElement(De,null):t==="policies"?p=React.createElement(tt,null):t==="audit"?p=React.createElement(at,null):t==="settings"?p=React.createElement(it,null):t==="profile"?p=React.createElement(dt,null):t==="matrixshell"?p=React.createElement(bt,{user:e,back:()=>y("overview")}):p=React.createElement(de,{go:y}),React.createElement(React.Fragment,null,React.createElement("div",{className:"top"},React.createElement("button",{className:"iconbtn menu-btn",onClick:()=>i(l=>!l)},React.createElement(u,{d:d.menu,size:18})),React.createElement("div",{className:"brand"},React.createElement("span",{className:"logo"},React.createElement(u,{d:d.terminal,size:16})),React.createElement("span",{className:"nm hide-sm"},"MatrixCloud")),React.createElement("div",{className:"sep hide-sm"}),React.createElement(Rt,null),React.createElement(Ct,null),React.createElement("div",{className:"grow"}),React.createElement("div",{className:"topsearch"},React.createElement(u,{d:d.search,size:15}),React.createElement("input",{placeholder:"Search\u2026"}),React.createElement("kbd",null,"\u2318K")),React.createElement("button",{className:"btn btn-primary btn-sm",onClick:()=>y("matrixshell"),title:"Open MatrixShell"},React.createElement(u,{d:d.terminal,size:15})," ",React.createElement("span",{className:"hide-sm"},"MatrixShell")),React.createElement("button",{className:"iconbtn"},React.createElement(u,{d:d.bell,size:17}))),React.createElement("div",{className:"shell"},a&&React.createElement("div",{className:"side-scrim",onClick:()=>i(!1)}),React.createElement("aside",{className:"side"+(a?" open":"")},wt.map(l=>React.createElement(React.Fragment,{key:l.grp},React.createElement("div",{className:"navlabel"},l.grp),React.createElement("nav",null,l.items.map(x=>React.createElement("button",{key:x.id,className:"navitem"+(t===x.id?" active":""),onClick:()=>y(x.id)},React.createElement("span",{className:"i"},React.createElement(u,{d:x.ic,size:17}))," ",x.label,x.tag&&React.createElement("span",{className:"tag"},x.tag)))))),React.createElement(Tt,null),React.createElement(Nt,{user:e,go:y,onProfile:()=>y("profile"),onSignOut:s})),React.createElement("main",{className:"main"},React.createElement(_e,{go:y}),p)),c&&React.createElement(We,{item:c,onClose:()=>h(null),onStart:()=>N(c)}))}function _t(){let e=Ce(),[s,t]=React.useState({loading:!0,user:null});React.useEffect(()=>{let i=!0;if(!fe()){t({loading:!1,user:null});return}return O.me().then(o=>i&&t({loading:!1,user:o})).catch(()=>{Q(null),i&&t({loading:!1,user:null})}),()=>{i=!1}},[]);async function n(i){await O.logout(i),t({loading:!1,user:null})}let a=React.useMemo(ye,[]);return a.kind==="reset"||a.kind==="verify"?React.createElement(ve,{onAuthed:i=>t({loading:!1,user:i})}):s.loading?React.createElement("div",{style:{minHeight:"100vh",display:"grid",placeItems:"center",color:"var(--ink-3)",fontFamily:"var(--mono)",fontSize:13}},"Loading MatrixCloud\u2026"):s.user?React.createElement(ke.Provider,{value:e},React.createElement(Mt,{user:s.user,onSignOut:n})):React.createElement(ve,{onAuthed:i=>t({loading:!1,user:i})})}ReactDOM.createRoot(document.getElementById("cloud-root")).render(React.createElement(_t,null));})();