Ampel / ampel (push) Successful in 26s
- Waechter und Dienste-Liste kennen "schlaeft": abgeschaltete Units (disable --now) sind kein Befund mehr; die Oberflaeche zeigt sie grau mit Knopf "Wecken" (fuer die Android-App spaeter). - Updates am Sonntag laufen wieder ueber mc2-autoupdate.timer (jobs/sonntags-update.sh) statt als Hermes-Cron, der sich beim Hermes-Update selbst neu startete (20.09.: 180 s, Fehlschlag). Flugplan und Waechter kennen den Timer. - 10 abgeloeste Skills (Werkstatt, Kanban, Orchestrator, Trend-Radar ...) aus dem Repo; deploy.sh verschiebt sie in ~/.hermes/skills-archiv statt sie weiter zu Lucy zu kopieren. - Embedding und Reranker schlafen: raus aus brains und Warm-Set, ttl 300, warmup.sh waermt sie nicht mehr vor. deploy.sh spielt Timer und Warm-Set-Drop-in selbst aus. - Dienste-Namen: "Box-Wart (MC2)", "Hermes-Dashboard", "Spracherkennung (Desktop-Lucy)". - Frontend neu gebaut (npm ci, lokale Pakete waren vom 28.08.). Tests: 87 gruen (neu: schlafende Dienste), Frontend Lint/Tests/Build gruen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 line
27 KiB
JavaScript
1 line
27 KiB
JavaScript
import{c as e,f as t,o as n,s as r,t as i,u as a}from"./button-Dd8hfusv.js";import{C as o,E as s,M as c,N as l,P as u,R as d,S as f,b as p,c as m,d as h,f as g,i as _,j as v,l as y,n as b,o as x,p as S,r as C,s as w,t as T,u as E,v as D,w as O,y as k,z as A}from"./index-e_N1YCsL.js";import{a as j,i as M,n as N,r as P,t as F}from"./sheet-DWG2Q04V.js";import{t as I}from"./Bestaetigen-VrcNpcBb.js";var L={name:`search`,size:24,node:[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]};L.node;var R=n(L),z=r(),B=t(a(),1),V=e();function H({offen:e,onSchliessen:t}){let n=A(),[r,a]=(0,B.useState)(``),[o,s]=(0,B.useState)(``),[u,f]=(0,B.useState)(null),[p,m]=(0,B.useState)(``),g=d({queryKey:[`hf-suche`,o],queryFn:()=>v(`/api/hf/search?q=${encodeURIComponent(o)}`),enabled:o.length>1}),_=d({queryKey:[`hf-quants`,u],queryFn:()=>v(`/api/hf/quants?repo=${encodeURIComponent(u??``)}`),enabled:!!u});async function y(e){if(u)try{await c(`/api/models/install`,{repo:u,quant:e,role:p||null}),l(`erfolg`,`${u} (${e}) wird heruntergeladen. Den Fortschritt siehst du unter Updates.`),n.invalidateQueries({queryKey:[`jobs`]}),n.invalidateQueries({queryKey:[`models`]}),t()}catch(e){l(`fehler`,e.message)}}let b=(_.data?.quants??[]).map(e=>typeof e==`string`?{quant:e}:e);return(0,V.jsx)(F,{open:e,onOpenChange:e=>!e&&t(),children:(0,V.jsxs)(N,{side:`right`,className:`w-full gap-3 overflow-y-auto border-linie bg-panel sm:max-w-xl`,children:[(0,V.jsxs)(M,{children:[(0,V.jsx)(j,{className:`schild text-lg`,children:`Modelle selbst suchen`}),(0,V.jsx)(P,{className:`text-text-2`,children:`Auf Hugging Face suchen, Quantisierung wählen, installieren.`})]}),(0,V.jsxs)(`form`,{className:`flex gap-2 px-4`,onSubmit:e=>{e.preventDefault(),f(null),s(r.trim())},children:[(0,V.jsx)(`label`,{htmlFor:`hf-suche`,className:`sr-only`,children:`Suchbegriff`}),(0,V.jsx)(`input`,{id:`hf-suche`,value:r,onChange:e=>a(e.target.value),placeholder:`z. B. Qwen3.8 GGUF`,className:`h-11 min-w-0 flex-1 rounded-lg border border-linie-stark bg-erhaben px-3 text-[15px] outline-none focus:border-cyan`}),(0,V.jsx)(i,{type:`submit`,children:`Suchen`})]}),(0,V.jsxs)(`div`,{className:`flex flex-col px-4 pb-4`,children:[g.isFetching&&(0,V.jsx)(`p`,{className:`py-3 text-sm text-text-2`,children:`Suche läuft …`}),!u&&g.data?.results.map(e=>(0,V.jsxs)(`button`,{type:`button`,onClick:()=>f(e.repo),className:`flex min-h-11 items-center justify-between gap-3 border-t border-linie py-2 text-left hover:text-cyan`,children:[(0,V.jsx)(`span`,{className:`ziffern min-w-0 text-sm break-all`,children:e.repo}),(0,V.jsxs)(`span`,{className:`ziffern shrink-0 text-xs text-text-3`,children:[h(e.downloads),` ↓`]})]},e.repo)),u&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 pt-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,V.jsx)(`span`,{className:`ziffern text-sm break-all`,children:u}),(0,V.jsx)(i,{variant:`ghost`,size:`sm`,onClick:()=>f(null),children:`Zurück`})]}),(0,V.jsxs)(`label`,{className:`flex items-center gap-3 text-sm text-text-2`,children:[`Rolle`,(0,V.jsxs)(`select`,{value:p,onChange:e=>m(e.target.value),className:`h-11 rounded-lg border border-linie-stark bg-erhaben px-3 text-foreground`,children:[(0,V.jsx)(`option`,{value:``,children:`ohne Rolle (nur installieren)`}),(0,V.jsx)(`option`,{value:`coder`,children:`Coder`})]})]}),_.isFetching&&(0,V.jsx)(`p`,{className:`text-sm text-text-2`,children:`Quantisierungen werden gelesen …`}),b.map(e=>{let t=e.quant??e.name??`?`,n=e.total_bytes??e.size_bytes;return(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-t border-linie py-2`,children:[(0,V.jsx)(`span`,{className:`ziffern text-sm`,children:t}),(0,V.jsxs)(`span`,{className:`flex items-center gap-3`,children:[n?(0,V.jsxs)(`span`,{className:`ziffern text-xs text-text-3`,children:[(n/1024**3).toFixed(1).replace(`.`,`,`),` GB`]}):null,(0,V.jsx)(i,{variant:`outline`,size:`sm`,onClick:()=>y(t),children:`Installieren`})]})]},t)})]})]})]})})}var U=115;function W(e){let t=(0,z.c)(55),{modelle:n,laufend:r}=e,i=u(),a=s(),o,c,l,d,f,p,m,h,g,_;if(t[0]!==r||t[1]!==i?.ram_total||t[2]!==i?.ram_used||t[3]!==n||t[4]!==a){let e=y(i?.ram_total??a.data?.box.ram_total)??122.7,s=y(i?.ram_used??a.data?.box.ram_used)??0,u;t[15]===r?u=t[16]:(u=e=>r.includes(e.name),t[15]=r,t[16]=u);let v=n.filter(u).reduce(G,0);c=Math.max(0,s-v);let b=t=>`${Math.min(100,t/e*100)}%`;o=T,h=`Speicher`,g=(0,V.jsxs)(`span`,{className:`ziffern text-sm text-text-2`,children:[Math.round(s),` von `,Math.round(e),` GB belegt · Grenze ~`,U,` GB`]});let x=`Speicher: ${Math.round(s)} von ${Math.round(e)} GB belegt`,S=b(s),C;t[17]===S?C=t[18]:(C={width:S},t[17]=S,t[18]=C);let w=`${s?v/s*100:0}%`,E;t[19]===w?E=t[20]:(E=(0,V.jsx)(`div`,{className:`h-full bg-cyan`,style:{width:w}}),t[19]=w,t[20]=E);let D=`${s?c/s*100:0}%`,O;t[21]===D?O=t[22]:(O=(0,V.jsx)(`div`,{className:`h-full bg-cyan/35`,style:{width:D}}),t[21]=D,t[22]=O);let k;t[23]!==C||t[24]!==E||t[25]!==O?(k=(0,V.jsxs)(`div`,{className:`absolute inset-y-0 left-0 flex overflow-hidden rounded-lg`,style:C,children:[E,O]}),t[23]=C,t[24]=E,t[25]=O,t[26]=k):k=t[26];let A=b(U),j;t[27]===A?j=t[28]:(j=(0,V.jsx)(`div`,{className:`absolute -top-1.5 -bottom-1.5 w-0.5 bg-bernstein`,style:{left:A}}),t[27]=A,t[28]=j),t[29]!==x||t[30]!==k||t[31]!==j?(_=(0,V.jsxs)(`div`,{className:`relative h-8 rounded-lg bg-erhaben`,role:`img`,"aria-label":x,children:[k,j]}),t[29]=x,t[30]=k,t[31]=j,t[32]=_):_=t[32],m=`flex flex-wrap gap-x-6 gap-y-2 text-sm text-text-2`,l=`flex items-center gap-2`,t[33]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,V.jsx)(`span`,{className:`size-2.5 rounded-sm bg-cyan`}),t[33]=d):d=t[33],f=` Geladene Modelle: `,p=Math.round(v),t[0]=r,t[1]=i?.ram_total,t[2]=i?.ram_used,t[3]=n,t[4]=a,t[5]=o,t[6]=c,t[7]=l,t[8]=d,t[9]=f,t[10]=p,t[11]=m,t[12]=h,t[13]=g,t[14]=_}else o=t[5],c=t[6],l=t[7],d=t[8],f=t[9],p=t[10],m=t[11],h=t[12],g=t[13],_=t[14];let v;t[34]!==l||t[35]!==d||t[36]!==f||t[37]!==p?(v=(0,V.jsxs)(`span`,{className:l,children:[d,f,p,` GB Dateien`]}),t[34]=l,t[35]=d,t[36]=f,t[37]=p,t[38]=v):v=t[38];let b;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,V.jsx)(`span`,{className:`size-2.5 rounded-sm bg-cyan/35`}),t[39]=b):b=t[39];let x;t[40]===c?x=t[41]:(x=Math.round(c),t[40]=c,t[41]=x);let S;t[42]===x?S=t[43]:(S=(0,V.jsxs)(`span`,{className:`flex items-center gap-2`,children:[b,` Cache, Dienste, System: `,x,` GB`]}),t[42]=x,t[43]=S);let C;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,V.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`h-3 w-0.5 bg-bernstein`}),` Ab hier wird es eng`]}),t[44]=C):C=t[44];let w;t[45]!==S||t[46]!==m||t[47]!==v?(w=(0,V.jsxs)(`div`,{className:m,children:[v,S,C]}),t[45]=S,t[46]=m,t[47]=v,t[48]=w):w=t[48];let E;return t[49]!==o||t[50]!==w||t[51]!==h||t[52]!==g||t[53]!==_?(E=(0,V.jsxs)(o,{titel:h,rechts:g,children:[_,w]}),t[49]=o,t[50]=w,t[51]=h,t[52]=g,t[53]=_,t[54]=E):E=t[54],E}function G(e,t){return e+(y(t.size_bytes)??0)}function K(e){let t=(0,z.c)(7),{name:n,wert:r}=e,i;t[0]===n?i=t[1]:(i=(0,V.jsx)(`dt`,{className:`text-xs text-text-3`,children:n}),t[0]=n,t[1]=i);let a;t[2]===r?a=t[3]:(a=(0,V.jsx)(`dd`,{className:`ziffern m-0 text-lg`,children:r}),t[2]=r,t[3]=a);let o;return t[4]!==i||t[5]!==a?(o=(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6],o}function q(e){let t=(0,z.c)(48),{titel:n,modell:r,zwilling:a,laeuft:o,nutzer:s}=e,c=D();if(!r){let e;t[0]===n?e=t[1]:(e=(0,V.jsx)(`span`,{className:`schild text-sm text-text-3`,children:n}),t[0]=n,t[1]=e);let r;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,V.jsx)(x,{children:`Frei`}),t[2]=r):r=t[2];let i;t[3]===e?i=t[4]:(i=(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e,r]}),t[3]=e,t[4]=i);let a,o;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,V.jsx)(`h3`,{className:`font-anzeige text-xl font-semibold text-text-2`,children:`Nicht belegt`}),o=(0,V.jsx)(`p`,{className:`text-sm text-text-2`,children:`Nur belegen, wenn ein Modell hier echten Mehrwert bringt. Das Radar meldet Kandidaten.`}),t[5]=a,t[6]=o):(a=t[5],o=t[6]);let s;return t[7]===i?s=t[8]:(s=(0,V.jsxs)(`article`,{className:`flex flex-col gap-3.5 rounded-2xl border border-dashed border-linie-stark p-5`,children:[i,a,o]}),t[7]=i,t[8]=s),s}let l;t[9]!==r.ctx||t[10]!==r.parallel_slots?(l=r.ctx?Math.round(r.ctx/Math.max(1,r.parallel_slots)/1024):null,t[9]=r.ctx,t[10]=r.parallel_slots,t[11]=l):l=t[11];let u=l,d=!!r.capabilities?.vision||!!a,f;t[12]===n?f=t[13]:(f=(0,V.jsx)(`span`,{className:`schild text-sm text-text-3`,children:n}),t[12]=n,t[13]=f);let p=o?`gruen`:`grau`,m=o?`Geladen`:`Auf Abruf`,h;t[14]!==p||t[15]!==m?(h=(0,V.jsx)(x,{art:p,children:m}),t[14]=p,t[15]=m,t[16]=h):h=t[16];let g;t[17]!==f||t[18]!==h?(g=(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[f,h]}),t[17]=f,t[18]=h,t[19]=g):g=t[19];let _;t[20]===r.name?_=t[21]:(_=(0,V.jsx)(`h3`,{className:`ziffern m-0 text-lg font-medium break-all`,children:r.name}),t[20]=r.name,t[21]=_);let v;t[22]===r.size_bytes?v=t[23]:(v=E(r.size_bytes),t[22]=r.size_bytes,t[23]=v);let y;t[24]===v?y=t[25]:(y=(0,V.jsx)(K,{name:`Größe`,wert:v}),t[24]=v,t[25]=y);let b=u?`${u}k`:`–`,S;t[26]===b?S=t[27]:(S=(0,V.jsx)(K,{name:`Kontext`,wert:b}),t[26]=b,t[27]=S);let C=d?`ja`:`nein`,w;t[28]===C?w=t[29]:(w=(0,V.jsx)(K,{name:`Bilder`,wert:C}),t[28]=C,t[29]=w);let T;t[30]!==S||t[31]!==w||t[32]!==y?(T=(0,V.jsxs)(`dl`,{className:`m-0 grid grid-cols-3 gap-3`,children:[y,S,w]}),t[30]=S,t[31]=w,t[32]=y,t[33]=T):T=t[33];let O=r.spec_active?` Mit Draft-Beschleunigung.`:``,k=a?` Bilder sieht es über seinen Bild-Zwilling, der nur bei Bedarf lädt.`:``,A;t[34]!==s||t[35]!==O||t[36]!==k?(A=(0,V.jsxs)(`p`,{className:`text-sm text-text-2`,children:[`Genutzt von `,s,`.`,O,k]}),t[34]=s,t[35]=O,t[36]=k,t[37]=A):A=t[37];let j;t[38]!==c||t[39]!==o||t[40]!==r.name?(j=!o&&(0,V.jsx)(i,{variant:`outline`,size:`sm`,className:`mt-auto self-start`,onClick:()=>c.mutate(r.name),disabled:c.isPending,children:`Jetzt laden`}),t[38]=c,t[39]=o,t[40]=r.name,t[41]=j):j=t[41];let M;return t[42]!==T||t[43]!==A||t[44]!==j||t[45]!==g||t[46]!==_?(M=(0,V.jsxs)(`article`,{className:`flex flex-col gap-3.5 rounded-2xl border border-linie bg-panel p-5`,children:[g,_,T,A,j]}),t[42]=T,t[43]=A,t[44]=j,t[45]=g,t[46]=_,t[47]=M):M=t[47],M}function J(e){let t=(0,z.c)(51),{nutzung:n}=e;if(!n)return null;let r;t[0]===n.absender?r=t[1]:(r=Math.max(1,...n.absender.map(Q)),t[0]=n.absender,t[1]=r);let i=r,a,o,s,c,l,u,d,f,p,m,g,_;if(t[2]!==i||t[3]!==n.absender||t[4]!==n.letzte_24h||t[5]!==n.tage){let e=n.letzte_24h.map(X),r=Math.max(1,...e);a=T,_=`Wer nutzt die Modelle`,t[18]===n.tage?o=t[19]:(o=(0,V.jsxs)(`span`,{className:`ziffern text-xs text-text-3`,children:[`letzte `,n.tage,` Tage`]}),t[18]=n.tage,t[19]=o),t[20]===n.absender.length?s=t[21]:(s=n.absender.length===0&&(0,V.jsx)(`p`,{className:`text-[15px] text-text-2`,children:`Keine Anfragen aufgezeichnet.`}),t[20]=n.absender.length,t[21]=s);let v;if(t[22]!==i||t[23]!==n.absender){let e;t[25]===i?e=t[26]:(e=e=>(0,V.jsxs)(`li`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsxs)(`div`,{className:`flex justify-between gap-3 text-sm`,children:[(0,V.jsx)(`span`,{children:e.name}),(0,V.jsx)(`span`,{className:`ziffern`,children:h(e.anfragen)})]}),(0,V.jsx)(`div`,{className:`h-2 rounded-full bg-erhaben`,children:(0,V.jsx)(`div`,{className:`h-2 rounded-full bg-cyan`,style:{width:`${e.anfragen/i*100}%`}})})]},e.name),t[25]=i,t[26]=e),v=n.absender.map(e),t[22]=i,t[23]=n.absender,t[24]=v}else v=t[24];t[27]===v?c=t[28]:(c=(0,V.jsx)(`ul`,{className:`m-0 flex list-none flex-col gap-3.5 p-0`,children:v}),t[27]=v,t[28]=c),m=`flex flex-col gap-1.5`,t[29]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,V.jsx)(`span`,{className:`schild text-xs text-text-3`,children:`Anfragen je Stunde, letzte 24 h`}),t[29]=g):g=t[29],l=`0 0 240 64`,u=`h-16 w-full`,d=`img`,f=`Anfragen je Stunde in den letzten 24 Stunden`;let y;t[30]===r?y=t[31]:(y=(e,t)=>{let n=e?Math.max(3,e/r*50):2;return(0,V.jsx)(`rect`,{x:t*10+1.5,y:52-n,width:7,height:n,rx:1.5,fill:e?`var(--cyan)`:`var(--linie)`},t)},t[30]=r,t[31]=y),p=e.map(y),t[2]=i,t[3]=n.absender,t[4]=n.letzte_24h,t[5]=n.tage,t[6]=a,t[7]=o,t[8]=s,t[9]=c,t[10]=l,t[11]=u,t[12]=d,t[13]=f,t[14]=p,t[15]=m,t[16]=g,t[17]=_}else a=t[6],o=t[7],s=t[8],c=t[9],l=t[10],u=t[11],d=t[12],f=t[13],p=t[14],m=t[15],g=t[16],_=t[17];let v;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(v=[0,6,12,18].map(Y),t[32]=v):v=t[32];let y;t[33]!==l||t[34]!==u||t[35]!==d||t[36]!==f||t[37]!==p?(y=(0,V.jsxs)(`svg`,{viewBox:l,className:u,role:d,"aria-label":f,children:[p,v]}),t[33]=l,t[34]=u,t[35]=d,t[36]=f,t[37]=p,t[38]=y):y=t[38];let b;t[39]!==y||t[40]!==m||t[41]!==g?(b=(0,V.jsxs)(`div`,{className:m,children:[g,y]}),t[39]=y,t[40]=m,t[41]=g,t[42]=b):b=t[42];let x;t[43]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,V.jsx)(`p`,{className:`text-xs text-text-3`,children:`Anfragen an llama-swap. NerdQuiz geht direkt dorthin, alles andere über MC2.`}),t[43]=x):x=t[43];let S;return t[44]!==a||t[45]!==o||t[46]!==s||t[47]!==c||t[48]!==b||t[49]!==_?(S=(0,V.jsxs)(a,{titel:_,rechts:o,children:[s,c,b,x]}),t[44]=a,t[45]=o,t[46]=s,t[47]=c,t[48]=b,t[49]=_,t[50]=S):S=t[50],S}function Y(e){return(0,V.jsx)(`text`,{x:e*10+5,y:63,textAnchor:`middle`,style:{fontSize:9,fill:`var(--text-3)`,fontFamily:`var(--font-mono)`},children:e},e)}function X(e){return Object.values(e.je_absender).reduce(Z,0)}function Z(e,t){return e+t}function Q(e){return e.anfragen}var $={bestanden:`gruen`,durchgefallen:`rot`,wartet:`cyan`,neu:`cyan`,getestet:`grau`,uebernommen:`gruen`,verworfen:`grau`},ee={besser:`text-gruen`,schlechter:`text-rot-text`,gleich:`text-text-2`};function te(e){let t=(0,z.c)(4),{test:n}=e,r,i;if(t[0]!==n.vergleich){i=Symbol.for(`react.early_return_sentinel`);bb0:{let e=Object.entries(n.vergleich??{});if(e.length===0){i=null;break bb0}let a;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,V.jsxs)(`div`,{role:`row`,className:`schild grid grid-cols-[minmax(0,1fr)_auto_auto] gap-x-4 pb-1 text-xs text-text-3`,children:[(0,V.jsx)(`span`,{role:`columnheader`,children:`Messwert`}),(0,V.jsx)(`span`,{role:`columnheader`,className:`text-right`,children:`Kandidat`}),(0,V.jsx)(`span`,{role:`columnheader`,className:`text-right`,children:`Heute`})]}),t[3]=a):a=t[3],r=(0,V.jsxs)(`div`,{role:`table`,"aria-label":`Messwerte gegen das heutige Modell`,className:`rounded-lg border border-linie bg-erhaben/50 px-3 py-2 text-sm`,children:[a,e.map(ne)]})}t[0]=n.vergleich,t[1]=r,t[2]=i}else r=t[1],i=t[2];return i===Symbol.for(`react.early_return_sentinel`)?r:i}function ne(e){let[t,n]=e;return(0,V.jsxs)(`div`,{role:`row`,className:`grid grid-cols-[minmax(0,1fr)_auto_auto] gap-x-4 border-t border-linie py-1`,children:[(0,V.jsx)(`span`,{role:`rowheader`,className:`text-text-2`,children:t}),(0,V.jsx)(`span`,{role:`cell`,className:`ziffern text-right ${ee[n.urteil??``]??`text-text-2`}`,children:C(n.kandidat,n.einheit)}),(0,V.jsx)(`span`,{role:`cell`,className:`ziffern text-right text-text-3`,children:C(n.baseline,n.einheit)})]},t)}function re(e){let t=(0,z.c)(55),{k:n,test:r,heute:a}=e,s=o(),[c,l]=(0,B.useState)(null),u;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(u=[`bestanden`,`wartet`,`neu`,`getestet`],t[0]=u):u=t[0];let d=u.includes(n.status),f=n.rolle===`hirn`,p;t[1]===n.name?p=t[2]:(p=(0,V.jsx)(`span`,{className:`ziffern text-[15px] font-medium`,children:n.name}),t[1]=n.name,t[2]=p);let m=f?`fürs Hirn`:`fürs Coden`,h;t[3]===m?h=t[4]:(h=(0,V.jsx)(x,{art:`cyan`,children:m}),t[3]=m,t[4]=h);let g;t[5]!==n.eng||t[6]!==n.groesse_gb||t[7]!==n.passt?(g=n.groesse_gb!=null&&(0,V.jsx)(x,{art:n.eng?`bernstein`:n.passt?`gruen`:`rot`,children:n.eng?`passt knapp`:n.passt?`passt`:`passt nicht`}),t[5]=n.eng,t[6]=n.groesse_gb,t[7]=n.passt,t[8]=g):g=t[8];let _=$[n.status]??`grau`,v=b[n.status]??n.status,y;t[9]!==_||t[10]!==v?(y=(0,V.jsx)(x,{art:_,children:v}),t[9]=_,t[10]=v,t[11]=y):y=t[11];let S;t[12]!==p||t[13]!==h||t[14]!==g||t[15]!==y?(S=(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[p,h,g,y]}),t[12]=p,t[13]=h,t[14]=g,t[15]=y,t[16]=S):S=t[16];let C;t[17]===n.groesse_gb?C=t[18]:(C=n.groesse_gb==null?``:`${n.groesse_gb.toLocaleString(`de-DE`)} GB. `,t[17]=n.groesse_gb,t[18]=C);let w;t[19]!==n.begruendung||t[20]!==C?(w=(0,V.jsxs)(`p`,{className:`text-sm text-text-2`,children:[C,n.begruendung]}),t[19]=n.begruendung,t[20]=C,t[21]=w):w=t[21];let T;t[22]!==n.status||t[23]!==r?(T=r&&[`bestanden`,`durchgefallen`].includes(n.status)&&(0,V.jsx)(te,{test:r}),t[22]=n.status,t[23]=r,t[24]=T):T=t[24];let E;t[25]!==s.isPending||t[26]!==n.status||t[27]!==d?(E=d&&(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[n.status===`bestanden`&&(0,V.jsx)(i,{size:`sm`,disabled:s.isPending,onClick:()=>l(`uebernehmen`),children:`Übernehmen`}),(0,V.jsx)(i,{variant:`outline`,size:`sm`,disabled:s.isPending,onClick:()=>l(`verwerfen`),children:`Verwerfen`})]}),t[25]=s.isPending,t[26]=n.status,t[27]=d,t[28]=E):E=t[28];let D=c===`uebernehmen`,O=`${n.name} übernehmen?`,k=f?`${n.name} wird Lucys Hirn${a?` und löst ${a} ab`:``}. NerdQuiz und OpenChamber nutzen ab dann ebenfalls das neue Modell. Hermes startet dafür kurz neu, Lucy ist etwa eine Minute nicht erreichbar. Das alte Modell bleibt auf der Platte.`:`${n.name} wird der Coder${a?` und löst ${a} ab`:``}. OpenChamber plant und baut ab dann damit. Das alte Modell bleibt auf der Platte.`,A;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(A=()=>l(null),t[29]=A):A=t[29];let j;t[30]!==s||t[31]!==n.id||t[32]!==n.name?(j=()=>{s.mutate({id:n.id,aktion:`uebernehmen`,name:n.name}),l(null)},t[30]=s,t[31]=n.id,t[32]=n.name,t[33]=j):j=t[33];let M;t[34]!==D||t[35]!==O||t[36]!==k||t[37]!==j?(M=(0,V.jsx)(I,{offen:D,titel:O,text:k,knopf:`Übernehmen`,onNein:A,onJa:j}),t[34]=D,t[35]=O,t[36]=k,t[37]=j,t[38]=M):M=t[38];let N=c===`verwerfen`,P=`${n.name} verwerfen?`,F;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(F=()=>l(null),t[39]=F):F=t[39];let L;t[40]!==s||t[41]!==n.id||t[42]!==n.name?(L=()=>{s.mutate({id:n.id,aktion:`verwerfen`,name:n.name}),l(null)},t[40]=s,t[41]=n.id,t[42]=n.name,t[43]=L):L=t[43];let R;t[44]!==N||t[45]!==P||t[46]!==L?(R=(0,V.jsx)(I,{offen:N,gefahr:!0,titel:P,text:`Die heruntergeladenen Dateien werden gelöscht, und das Radar testet dieses Modell nicht noch einmal.`,knopf:`Verwerfen`,onNein:F,onJa:L}),t[44]=N,t[45]=P,t[46]=L,t[47]=R):R=t[47];let H;return t[48]!==w||t[49]!==T||t[50]!==E||t[51]!==M||t[52]!==R||t[53]!==S?(H=(0,V.jsxs)(`li`,{className:`flex flex-col gap-2 border-t border-linie py-3.5`,children:[S,w,T,E,M,R]}),t[48]=w,t[49]=T,t[50]=E,t[51]=M,t[52]=R,t[53]=S,t[54]=H):H=t[54],H}function ie(e){let t=(0,z.c)(21),{hirn:n,coder:r}=e,a=f(),o=O();if(a.isError){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,V.jsx)(T,{titel:`Modell-Radar`,id:`radar`,children:(0,V.jsx)(`p`,{className:`text-[15px] text-text-2`,children:`Das Radar ist auf dieser Box noch nicht eingerichtet.`})}),t[0]=e):e=t[0],e}let s=a.data,c;t[1]===o?c=t[2]:(c=()=>o.mutate(void 0),t[1]=o,t[2]=c);let l;t[3]!==o.isPending||t[4]!==c?(l=(0,V.jsx)(i,{variant:`info`,size:`sm`,onClick:c,disabled:o.isPending,children:`Jetzt suchen`}),t[3]=o.isPending,t[4]=c,t[5]=l):l=t[5];let u;t[6]===s?u=t[7]:(u=s?.naechster_test?` Nächster Test: ${m(s.naechster_test)}.`:``,t[6]=s,t[7]=u);let d;t[8]===u?d=t[9]:(d=(0,V.jsxs)(`p`,{className:`-mt-2 text-sm text-text-2`,children:[`Testet nachts zwischen 00:30 und 02:30 selbst, höchstens einen Kandidaten pro Woche.`,u]}),t[8]=u,t[9]=d);let p;t[10]!==r||t[11]!==s||t[12]!==n?(p=s?s.kandidaten.length===0?(0,V.jsx)(`p`,{className:`text-[15px] text-text-2`,children:`Nichts Besseres in Sicht.`}):(0,V.jsx)(`ul`,{className:`m-0 flex list-none flex-col p-0`,children:s.kandidaten.map(e=>(0,V.jsx)(re,{k:e,test:s.tests.find(t=>t.kandidat===e.id),heute:e.rolle===`hirn`?n:r},e.id))}):(0,V.jsx)(`p`,{className:`text-[15px] text-text-2`,children:`Wird gelesen …`}),t[10]=r,t[11]=s,t[12]=n,t[13]=p):p=t[13];let h;t[14]===s?h=t[15]:(h=s&&s.tests.length>0&&(0,V.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,V.jsx)(`h3`,{className:`schild text-xs text-text-3`,children:`Letzte Tests`}),s.tests.slice(0,3).map(ae)]}),t[14]=s,t[15]=h);let g;return t[16]!==l||t[17]!==d||t[18]!==p||t[19]!==h?(g=(0,V.jsxs)(T,{titel:`Modell-Radar`,id:`radar`,rechts:l,children:[d,p,h]}),t[16]=l,t[17]=d,t[18]=p,t[19]=h,t[20]=g):g=t[20],g}function ae(e){return(0,V.jsxs)(`p`,{className:`text-sm text-text-2`,children:[(0,V.jsx)(`span`,{className:`ziffern text-text-3`,children:m(e.datum)}),` · `,e.zusammenfassung]},e.id)}function oe(){let e=(0,z.c)(29),t=g(),n=S(),[r,a]=(0,B.useState)(null),o,s,c,l,u;if(e[0]!==t.data?.kandidaten||e[1]!==t.isError){u=Symbol.for(`react.early_return_sentinel`);bb0:{s=t.data?.kandidaten??[];let e=s.reduce(se,0);if(t.isError){u=null;break bb0}o=T,c=`Aufräumen`,l=s.length>0?(0,V.jsxs)(`span`,{className:`ziffern text-sm text-text-2`,children:[`bis zu `,e.toLocaleString(`de-DE`,{maximumFractionDigits:0}),` GB frei`]}):void 0}e[0]=t.data?.kandidaten,e[1]=t.isError,e[2]=o,e[3]=s,e[4]=c,e[5]=l,e[6]=u}else o=e[2],s=e[3],c=e[4],l=e[5],u=e[6];if(u!==Symbol.for(`react.early_return_sentinel`))return u;let d;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,V.jsx)(`p`,{className:`-mt-2 text-sm text-text-2`,children:`Modelle und Ordner, die gerade niemand nutzt. Nichts davon wird von selbst gelöscht, das entscheidest du je Eintrag.`}),e[7]=d):d=e[7];let f;e[8]!==s||e[9]!==t.isPending||e[10]!==n?(f=t.isPending?(0,V.jsx)(`p`,{className:`text-[15px] text-text-2`,children:`Wird gelesen …`}):s.length===0?(0,V.jsx)(`p`,{className:`text-[15px] text-text-2`,children:`Nichts aufzuräumen.`}):(0,V.jsx)(`ul`,{className:`m-0 flex list-none flex-col p-0`,children:s.map(e=>(0,V.jsxs)(`li`,{className:`flex flex-wrap items-center justify-between gap-3 border-t border-linie py-3`,children:[(0,V.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col gap-1`,children:[(0,V.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`ziffern text-sm break-all`,children:e.name}),(0,V.jsx)(x,{children:e.art===`eintrag`?`Eintrag`:`Ordner`})]}),(0,V.jsx)(`span`,{className:`text-sm text-text-2`,children:e.hinweis})]}),(0,V.jsxs)(`span`,{className:`flex items-center gap-3`,children:[(0,V.jsxs)(`span`,{className:`ziffern text-sm text-text-2`,children:[e.groesse_gb.toLocaleString(`de-DE`),` GB`]}),(0,V.jsx)(i,{variant:`gefahr`,size:`sm`,disabled:n.isPending,onClick:()=>a(e),children:`Löschen`})]})]},`${e.art}-${e.name}`))}),e[8]=s,e[9]=t.isPending,e[10]=n,e[11]=f):f=e[11];let p=r!==null,m=`${r?.name??``} löschen?`,h;e[12]===r?.groesse_gb?h=e[13]:(h=r?.groesse_gb.toLocaleString(`de-DE`)??``,e[12]=r?.groesse_gb,e[13]=h);let _=`${r?.hinweis??``} Es werden ${h} GB frei. Das lässt sich nicht rückgängig machen — zurück ginge es nur mit einem neuen Download.`,v;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(v=()=>a(null),e[14]=v):v=e[14];let y;e[15]!==r||e[16]!==n?(y=()=>{r&&n.mutate(r),a(null)},e[15]=r,e[16]=n,e[17]=y):y=e[17];let b;e[18]!==y||e[19]!==p||e[20]!==m||e[21]!==_?(b=(0,V.jsx)(I,{offen:p,gefahr:!0,titel:m,text:_,knopf:`Endgültig löschen`,onNein:v,onJa:y}),e[18]=y,e[19]=p,e[20]=m,e[21]=_,e[22]=b):b=e[22];let C;return e[23]!==o||e[24]!==c||e[25]!==l||e[26]!==b||e[27]!==f?(C=(0,V.jsxs)(o,{titel:c,rechts:l,children:[d,f,b]}),e[23]=o,e[24]=c,e[25]=l,e[26]=b,e[27]=f,e[28]=C):C=e[28],C}function se(e,t){return e+t.groesse_gb}function ce(){let e=(0,z.c)(52),t=k(),n=p(),[r,a]=(0,B.useState)(!1);if(t.isPending){let t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,V.jsx)(w,{text:`Modelle werden gelesen …`}),e[0]=t):t=e[0],t}if(t.error||!t.data){let n=`Die Modell-Liste fehlt: ${t.error?.message??`keine Daten`}`,r;return e[1]===n?r=e[2]:(r=(0,V.jsx)(w,{fehler:!0,text:n}),e[1]=n,e[2]=r),r}let o=t.data.models,s=t.data.running,c,l,u,d,f,h,g,_;if(e[3]!==s||e[4]!==o||e[5]!==n.data){let t=o.find(ue),r=o.find(le),p;e[14]===o?p=e[15]:(p=(e,t)=>e?o.find(n=>n!==e&&n.aliases.includes(t)&&n.filename===e.filename):void 0,e[14]=o,e[15]=p);let v=p,y=v(t,`vision`),b=v(r,`coder-bild`),x=o.filter(e=>![t,r,y,b].includes(e)),S;e[16]===n.data?.zuletzt_geladen?S=e[17]:(S=n.data?.zuletzt_geladen??{},e[16]=n.data?.zuletzt_geladen,e[17]=S);let C=S;e[18]!==s||e[19]!==o?(h=(0,V.jsx)(W,{modelle:o,laufend:s}),e[18]=s,e[19]=o,e[20]=h):h=e[20];let w;e[21]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,V.jsx)(q,{titel:`Dritte Rolle`,laeuft:!1,nutzer:``}),e[21]=w):w=e[21],g=(0,V.jsxs)(`section`,{"aria-label":`Rollen`,className:`grid gap-5 md:grid-cols-3 md:gap-6`,children:[(0,V.jsx)(q,{titel:`Hirn`,modell:t,zwilling:y,laeuft:!!t&&s.includes(t.name),nutzer:`Lucy, NerdQuiz und OpenChamber für Kleinkram`}),(0,V.jsx)(q,{titel:`Coder`,modell:r,zwilling:b,laeuft:!!r&&s.includes(r.name),nutzer:`OpenChamber zum Planen und Bauen und Lucys Delegation`}),w]});let D;e[22]===n.data?D=e[23]:(D=(0,V.jsx)(J,{nutzung:n.data}),e[22]=n.data,e[23]=D);let O=t?.name,k=r?.name,A;e[24]!==O||e[25]!==k?(A=(0,V.jsx)(ie,{hirn:O,coder:k}),e[24]=O,e[25]=k,e[26]=A):A=e[26],e[27]!==D||e[28]!==A?(_=(0,V.jsxs)(`div`,{className:`grid gap-5 md:gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.3fr)]`,children:[D,A]}),e[27]=D,e[28]=A,e[29]=_):_=e[29],c=T,d=`Weitere Einträge`,e[30]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,V.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>a(!0),children:[(0,V.jsx)(R,{"aria-hidden":!0}),` Modelle selbst suchen`]}),e[30]=f):f=e[30],l=`m-0 flex list-none flex-col p-0`;let j;e[31]!==s||e[32]!==C?(j=e=>(0,V.jsxs)(`li`,{className:`grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 border-t border-linie py-2.5 sm:grid-cols-[minmax(0,1fr)_120px_160px]`,children:[(0,V.jsxs)(`span`,{className:`min-w-0`,children:[(0,V.jsx)(`span`,{className:`ziffern block text-sm break-all`,children:e.name}),(0,V.jsx)(`span`,{className:`text-xs text-text-3`,children:e.aliases.length?e.aliases.join(`, `):`ohne Rolle`})]}),(0,V.jsx)(`span`,{className:`ziffern text-sm text-text-2`,children:E(e.size_bytes)}),(0,V.jsx)(`span`,{className:`ziffern hidden text-xs text-text-3 sm:block`,children:s.includes(e.name)?`geladen`:C[e.name]?`zuletzt ${m(C[e.name])}`:`länger nicht geladen`})]},e.name),e[31]=s,e[32]=C,e[33]=j):j=e[33],u=x.map(j),e[3]=s,e[4]=o,e[5]=n.data,e[6]=c,e[7]=l,e[8]=u,e[9]=d,e[10]=f,e[11]=h,e[12]=g,e[13]=_}else c=e[6],l=e[7],u=e[8],d=e[9],f=e[10],h=e[11],g=e[12],_=e[13];let v;e[34]!==l||e[35]!==u?(v=(0,V.jsx)(`ul`,{className:l,children:u}),e[34]=l,e[35]=u,e[36]=v):v=e[36];let y;e[37]!==c||e[38]!==d||e[39]!==f||e[40]!==v?(y=(0,V.jsx)(c,{titel:d,rechts:f,children:v}),e[37]=c,e[38]=d,e[39]=f,e[40]=v,e[41]=y):y=e[41];let b;e[42]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,V.jsx)(oe,{}),e[42]=b):b=e[42];let x;e[43]===Symbol.for(`react.memo_cache_sentinel`)?(x=()=>a(!1),e[43]=x):x=e[43];let S;e[44]===r?S=e[45]:(S=(0,V.jsx)(H,{offen:r,onSchliessen:x}),e[44]=r,e[45]=S);let C;return e[46]!==S||e[47]!==h||e[48]!==g||e[49]!==_||e[50]!==y?(C=(0,V.jsxs)(V.Fragment,{children:[h,g,_,y,b,S]}),e[46]=S,e[47]=h,e[48]=g,e[49]=_,e[50]=y,e[51]=C):C=e[51],C}function le(e){return _(e)===`coder`}function ue(e){return _(e)===`hirn`}export{ce as ModelleSeite}; |