- kern/schwaerzen.py + dieselben Regeln im Ausführer (Test vergleicht beide): private Schlüssel, Werte hinter password/secret/token/key…, Passwort-Hashes, htpasswd, Zugangsdaten in Adressen, Authorization-Kopfzeilen, Token-Formate, lange Hex-Ketten - Ausführer: sammelt Proxmox (Gäste, Speicher, Aufträge, Netz), AdGuard, NPMplus (ohne tls/), schwärzt auf dem Host, sendet alle 6 h und auf Abruf (Aktion konfig_senden) an POST /api/homelab/ausfuehrer/konfig - Homelab-Teil: GET /api/homelab/konfig (frisch=1), dazu Compose und .env der Arcane-Projekte, geschwärzt - KI-Box: services/konfig_sicherung.py legt das Repo beim ersten Lauf privat an, Arbeitskopie je Lauf auf Gitea-Stand, Commit nur bei Änderungen; Timer täglich 02:30, Knopf „Jetzt sichern“ unter Einstellungen → Homelab - Totmannschalter und Wächter kennen den Timer; Doku Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 line
51 KiB
JavaScript
1 line
51 KiB
JavaScript
import{a as e,c as t,i as n,n as r,r as i,t as a}from"./dist-aE7UmubC.js";import{A as o,F as s,Gt as c,I as l,K as u,Kt as d,L as f,Mt as p,R as m,V as h,Wt as g,X as _,_t as v,b as y,ft as b,gt as x,h as S,ht as C,ln as w,lt as T,n as E,o as D,s as O,st as k,v as A,vt as j,xt as M}from"./abfragen-CLTLeU-R.js";import{t as N}from"./button-BHVKhtQ6.js";import{H as P,f as F,h as I,ht as L,p as R}from"./index-hnnYWPzT.js";var z={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};z.node;var B=r(z),V=i(),H=t(e(),1),U=n(),W=[`Montag`,`Dienstag`,`Mittwoch`,`Donnerstag`,`Freitag`,`Samstag`,`Sonntag`],G={melden:`Nur melden`,sicherheit:`Sicherheitsupdates automatisch`,alles:`Alles automatisch im Fenster`},K=`h-10 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-lab/60`;function q(e){let t=(0,V.c)(11),{wert:n,onWahl:r,label:i,mitStandard:a}=e,o=n??``,s;t[0]===r?s=t[1]:(s=e=>r(e.target.value||null),t[0]=r,t[1]=s);let c;t[2]===a?c=t[3]:(c=a&&(0,U.jsxs)(`option`,{value:``,children:[`Wie Standard (`,a,`)`]}),t[2]=a,t[3]=c);let l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=Object.keys(G),t[4]=l):l=t[4];let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=l.map(J),t[5]=u):u=t[5];let d;return t[6]!==i||t[7]!==o||t[8]!==s||t[9]!==c?(d=(0,U.jsxs)(`select`,{"aria-label":i,value:o,onChange:s,className:`${K} min-w-0`,children:[c,u]}),t[6]=i,t[7]=o,t[8]=s,t[9]=c,t[10]=d):d=t[10],d}function J(e){return(0,U.jsx)(`option`,{value:e,children:G[e]},e)}function Y(e){let t=(0,V.c)(61),{aktiv:n}=e,r=C(n),i=A(n).data?.ziele??[],a=x(),[o,s]=(0,H.useState)(null);if(!r.data){let e=r.isPending?`Wird gelesen …`:`Das Wartungsfenster lässt sich gerade nicht lesen.`,n;return t[0]===e?n=t[1]:(n=(0,U.jsx)(`p`,{className:`text-sm text-text-3`,children:e}),t[0]=e,t[1]=n),n}let c=o??r.data.fenster,l;t[2]!==o||t[3]!==r.data.fenster?(l=!!o&&JSON.stringify(o)!==JSON.stringify(r.data.fenster),t[2]=o,t[3]=r.data.fenster,t[4]=l):l=t[4];let u=l,d=r.data.stand,f;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,U.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Im Fenster spielt der Orchestrator ein, was die Regel des Geräts erlaubt — mit Snapshot vorher und Rückweg bei Rot. Einzelne Erfolge kommen gesammelt als eine Meldung, Fehler sofort. Den Proxmox-Host startet er nie von selbst neu.`}),t[5]=f):f=t[5];let p=c.tag,m;t[6]===c?m=t[7]:(m=e=>s({...c,tag:Number(e.target.value)}),t[6]=c,t[7]=m);let h;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(h=W.map(ee),t[8]=h):h=t[8];let g;t[9]!==c.tag||t[10]!==m?(g=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`Tag`,(0,U.jsx)(`select`,{className:K,value:p,onChange:m,children:h})]}),t[9]=c.tag,t[10]=m,t[11]=g):g=t[11];let _;t[12]===c?_=t[13]:(_=e=>s({...c,von:e.target.value}),t[12]=c,t[13]=_);let v;t[14]!==c.von||t[15]!==_?(v=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`von`,(0,U.jsx)(`input`,{type:`time`,className:K,value:c.von,onChange:_})]}),t[14]=c.von,t[15]=_,t[16]=v):v=t[16];let y;t[17]===c?y=t[18]:(y=e=>s({...c,bis:e.target.value}),t[17]=c,t[18]=y);let b;t[19]!==c.bis||t[20]!==y?(b=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`bis`,(0,U.jsx)(`input`,{type:`time`,className:K,value:c.bis,onChange:y})]}),t[19]=c.bis,t[20]=y,t[21]=b):b=t[21];let S=!u||a.isPending,w;t[22]!==c||t[23]!==a?(w=()=>a.mutate({fenster:c},{onSuccess:()=>s(null)}),t[22]=c,t[23]=a,t[24]=w):w=t[24];let T;t[25]!==S||t[26]!==w?(T=(0,U.jsx)(`button`,{type:`button`,disabled:S,onClick:w,className:`h-10 rounded-xl bg-lab/20 px-4 text-sm font-medium text-lab-text ring-1 ring-lab/40 ring-inset disabled:opacity-40`,children:`Fenster speichern`}),t[25]=S,t[26]=w,t[27]=T):T=t[27];let E;t[28]!==b||t[29]!==T||t[30]!==g||t[31]!==v?(E=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-end gap-2`,children:[g,v,b,T]}),t[28]=b,t[29]=T,t[30]=g,t[31]=v,t[32]=E):E=t[32];let D;t[33]===r.data.naechstes?D=t[34]:(D=M(new Date(r.data.naechstes*1e3).toISOString()).toLowerCase(),t[33]=r.data.naechstes,t[34]=D);let O;t[35]===d?O=t[36]:(O=d?` · zuletzt ${d.datum.split(`-`).reverse().join(`.`)}: ${d.status===`laeuft`?`läuft gerade`:`${d.schritte.length} Schritte`}`:``,t[35]=d,t[36]=O);let k;t[37]!==D||t[38]!==O?(k=(0,U.jsxs)(`p`,{className:`m-0 text-xs text-text-3`,children:[`Nächstes Fenster: `,D,O]}),t[37]=D,t[38]=O,t[39]=k):k=t[39];let j;t[40]===a?j=t[41]:(j=e=>e&&a.mutate({standard:e}),t[40]=a,t[41]=j);let N;t[42]!==j||t[43]!==r.data.standard?(N=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`Standard für alle Geräte (auch neue)`,(0,U.jsx)(q,{label:`Standard-Regel`,wert:r.data.standard,onWahl:j})]}),t[42]=j,t[43]=r.data.standard,t[44]=N):N=t[44];let P;if(t[45]!==a||t[46]!==r.data.regeln||t[47]!==r.data.standard||t[48]!==i){let e;t[50]!==a||t[51]!==r.data.regeln||t[52]!==r.data.standard?(e=e=>(0,U.jsxs)(`div`,{role:`row`,className:`flex flex-wrap items-center justify-between gap-2 border-t border-white/[0.06] py-2`,children:[(0,U.jsx)(`span`,{role:`rowheader`,className:`text-[15px]`,children:e.name}),(0,U.jsx)(`span`,{role:`cell`,children:(0,U.jsx)(q,{label:`Regel für ${e.name}`,wert:r.data.regeln[e.id]??null,mitStandard:G[r.data.standard],onWahl:t=>a.mutate({regeln:{[e.id]:t}})})})]},e.id),t[50]=a,t[51]=r.data.regeln,t[52]=r.data.standard,t[53]=e):e=t[53],P=i.map(e),t[45]=a,t[46]=r.data.regeln,t[47]=r.data.standard,t[48]=i,t[49]=P}else P=t[49];let F;t[54]===P?F=t[55]:(F=(0,U.jsx)(`div`,{role:`table`,"aria-label":`Regel je Gerät`,className:`flex flex-col`,children:P}),t[54]=P,t[55]=F);let I;return t[56]!==E||t[57]!==k||t[58]!==N||t[59]!==F?(I=(0,U.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[f,E,k,N,F]}),t[56]=E,t[57]=k,t[58]=N,t[59]=F,t[60]=I):I=t[60],I}function ee(e,t){return(0,U.jsx)(`option`,{value:t,children:e},e)}var te=[{id:`lesen`,kurz:`Nur lesen`},{id:`fragen`,kurz:`Erst fragen`},{id:`selbst`,kurz:`Selbst handeln`}],ne=`h-10 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-lab/60`;function re(){let e=(0,V.c)(22),t=f(),n=m(),[r,i]=(0,H.useState)(null);if(!t.data){let n=t.isPending?`Wird gelesen …`:`Lucys Freiheiten lassen sich gerade nicht lesen.`,r;return e[0]===n?r=e[1]:(r=(0,U.jsx)(`p`,{className:`text-sm text-text-3`,children:n}),e[0]=n,e[1]=r),r}let o=ie,s;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,U.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Bittest du Lucy ausdrücklich um etwas, tut sie es. Hier stellst du ein, was sie aus eigenem Antrieb darf: nur erklären, dich vorher fragen (in Telegram antwortest du mit „ja“ und der Nummer) oder selbst handeln — dann bekommst du danach eine Meldung.`}),e[2]=s):s=e[2];let c;if(e[3]!==t.data.arten||e[4]!==n){let r;e[6]===n?r=e[7]:(r=e=>(0,U.jsxs)(`div`,{role:`row`,className:`flex flex-col gap-2 border-t border-white/[0.06] py-3 first:border-t-0 sm:flex-row sm:items-center sm:justify-between`,children:[(0,U.jsxs)(`span`,{role:`rowheader`,className:`flex min-w-0 flex-col gap-0.5`,children:[(0,U.jsx)(`span`,{className:`text-[15px]`,children:e.name}),(0,U.jsx)(`span`,{className:`text-xs text-text-3`,children:e.text})]}),(0,U.jsx)(`span`,{role:`cell`,className:`shrink-0`,children:(0,U.jsx)(`select`,{"aria-label":`Freiheit: ${e.name}`,value:e.stufe,disabled:n.isPending,className:a(ne,`min-w-44`,e.stufe!==e.standard&&`border-lab/50`),onChange:t=>{let r=t.target.value;o(r)>o(e.standard)&&r===`selbst`?i({id:e.id,name:e.name,stufe:r}):n.mutate({[e.id]:r})},children:te.map(t=>(0,U.jsxs)(`option`,{value:t.id,children:[t.kurz,t.id===e.standard?` (Start)`:``]},t.id))})})]},e.id),e[6]=n,e[7]=r),c=t.data.arten.map(r),e[3]=t.data.arten,e[4]=n,e[5]=c}else c=e[5];let l;e[8]===c?l=e[9]:(l=(0,U.jsx)(`div`,{role:`table`,"aria-label":`Lucys Freiheiten`,className:`flex flex-col`,children:c}),e[8]=c,e[9]=l);let u=!!r,d=r?`„${r.name}“: Lucy selbst handeln lassen?`:``,p;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(p=()=>i(null),e[10]=p):p=e[10];let h;e[11]!==r||e[12]!==n?(h=()=>{r&&n.mutate({[r.id]:r.stufe}),i(null)},e[11]=r,e[12]=n,e[13]=h):h=e[13];let g;e[14]!==n.isPending||e[15]!==u||e[16]!==d||e[17]!==h?(g=(0,U.jsx)(I,{offen:u,titel:d,text:`Dann tut sie es aus eigenem Antrieb, ohne dich vorher zu fragen, und meldet es erst danach. Zurückstellen kannst du es hier jederzeit.`,knopf:`Selbst handeln lassen`,gesperrt:n.isPending,onNein:p,onJa:h}),e[14]=n.isPending,e[15]=u,e[16]=d,e[17]=h,e[18]=g):g=e[18];let _;return e[19]!==l||e[20]!==g?(_=(0,U.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[s,l,g]}),e[19]=l,e[20]=g,e[21]=_):_=e[21],_}function ie(e){return te.findIndex(t=>t.id===e)}function ae(){let e=(0,V.c)(27),t=v(),n=j(),[r,i]=(0,H.useState)(!1),a=t.data?.zuletzt,o;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,U.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Sonntags um 07:30 schickt Lucy eine Nachricht statt vieler: was eingespielt wurde, was offen ist, Platten, Sicherungen, Zertifikate — und offene App-Updates zum Beantworten mit „ja“.`}),e[0]=o):o=e[0];let s;e[1]===n?s=e[2]:(s=()=>n.mutate(),e[1]=n,e[2]=s);let c=n.isPending?`Lucy schreibt …`:`Jetzt schicken`,l;e[3]!==n.isPending||e[4]!==s||e[5]!==c?(l=(0,U.jsx)(N,{size:`sm`,variant:`outline`,disabled:n.isPending,onClick:s,children:c}),e[3]=n.isPending,e[4]=s,e[5]=c,e[6]=l):l=e[6];let u;e[7]===t.data?u=e[8]:(u=t.data?`Nächster: ${M(new Date(t.data.naechster*1e3).toISOString()).toLowerCase()}`:``,e[7]=t.data,e[8]=u);let d;e[9]===a?d=e[10]:(d=a?` · zuletzt ${M(new Date(a.zeit*1e3).toISOString()).toLowerCase()}`:``,e[9]=a,e[10]=d);let f;e[11]!==u||e[12]!==d?(f=(0,U.jsxs)(`span`,{className:`text-xs text-text-3`,children:[u,d]}),e[11]=u,e[12]=d,e[13]=f):f=e[13];let p;e[14]!==r||e[15]!==a?(p=a&&(0,U.jsx)(`button`,{type:`button`,className:`text-xs text-cyan hover:underline`,onClick:()=>i(!r),children:r?`Letzten zuklappen`:`Letzten lesen`}),e[14]=r,e[15]=a,e[16]=p):p=e[16];let m;e[17]!==l||e[18]!==f||e[19]!==p?(m=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[l,f,p]}),e[17]=l,e[18]=f,e[19]=p,e[20]=m):m=e[20];let h;e[21]!==r||e[22]!==a?(h=r&&a&&(0,U.jsx)(`pre`,{className:`flaeche-innen m-0 max-h-96 overflow-y-auto rounded-2xl p-4 font-sans text-sm whitespace-pre-wrap text-text-2`,children:a.text}),e[21]=r,e[22]=a,e[23]=h):h=e[23];let g;return e[24]!==m||e[25]!==h?(g=(0,U.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[o,m,h]}),e[24]=m,e[25]=h,e[26]=g):g=e[26],g}var X=[`Montag`,`Dienstag`,`Mittwoch`,`Donnerstag`,`Freitag`,`Samstag`,`Sonntag`],oe=Array.from({length:48},(e,t)=>`${String(Math.floor(t/2)).padStart(2,`0`)}:${t%2?`30`:`00`}`),se=new Intl.DateTimeFormat(`de-DE`,{day:`2-digit`,month:`2-digit`,year:`numeric`,hour:`2-digit`,minute:`2-digit`,timeZone:`Europe/Berlin`});function Z(e){let t=e?new Date(e):null;return t&&!Number.isNaN(t.getTime())?se.format(t):`–`}function ce(e,t){let n=Number(t.slice(0,2)),r=n*60+179,i=e;r>=1440&&(r-=1440,i=e%7+1);let a=e=>String(e).padStart(2,`0`),o=`${a(n)}:00`,s=`${a(Math.floor(r/60))}:${a(r%60)}`;return i===e?`${X[e-1]} ${o}–${s}`:`${X[e-1]} ${o} – ${X[i-1]} ${s}`}function Q(e){let t=(0,V.c)(6),{titel:n,children:r}=e,i;t[0]===n?i=t[1]:(i=(0,U.jsx)(`h3`,{className:`etikett text-[11.5px] tracking-[0.16em] text-text-2`,children:n}),t[0]=n,t[1]=i);let a;return t[2]!==r||t[3]!==i||t[4]!==n?(a=(0,U.jsxs)(`section`,{"aria-label":n,className:`flex flex-col gap-3 border-t border-white/[0.06] pt-4 first:border-t-0 first:pt-0`,children:[i,r]}),t[2]=r,t[3]=i,t[4]=n,t[5]=a):a=t[5],a}function $(e){let t=(0,V.c)(23),{titel:n,text:r,farbe:i,id:o,children:s}=e,c=i===`box`?`var(--box)`:i===`homelab`?`var(--lab)`:null,l=i===`box`?`text-box-text`:i===`homelab`?`text-lab-text`:`text-foreground`,u=i===`box`?`[--rand:color-mix(in_srgb,var(--box)_28%,transparent)]`:i===`homelab`?`[--rand:color-mix(in_srgb,var(--lab)_28%,transparent)]`:``,d;t[0]===u?d=t[1]:(d=a(`flaeche relative flex min-w-0 flex-col gap-4 overflow-hidden rounded-3xl p-5 sm:p-6`,u),t[0]=u,t[1]=d);let f;t[2]===c?f=t[3]:(f=c&&(0,U.jsx)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute -top-40 -left-32 size-[400px] rounded-full`,style:{background:`radial-gradient(closest-side, color-mix(in srgb, ${c} 16%, transparent), transparent)`}}),t[2]=c,t[3]=f);let p;t[4]===l?p=t[5]:(p=a(`text-[19px] leading-tight font-semibold`,l),t[4]=l,t[5]=p);let m;t[6]!==p||t[7]!==n?(m=(0,U.jsx)(`h2`,{className:p,children:n}),t[6]=p,t[7]=n,t[8]=m):m=t[8];let h;t[9]===r?h=t[10]:(h=(0,U.jsx)(`p`,{className:`text-sm text-text-3`,children:r}),t[9]=r,t[10]=h);let g;t[11]!==m||t[12]!==h?(g=(0,U.jsxs)(`div`,{className:`relative flex flex-col gap-1`,children:[m,h]}),t[11]=m,t[12]=h,t[13]=g):g=t[13];let _;t[14]===s?_=t[15]:(_=(0,U.jsx)(`div`,{className:`relative flex min-w-0 flex-col gap-4`,children:s}),t[14]=s,t[15]=_);let v;return t[16]!==o||t[17]!==d||t[18]!==f||t[19]!==g||t[20]!==_||t[21]!==n?(v=(0,U.jsxs)(`section`,{id:o,"aria-label":n,className:d,children:[f,g,_]}),t[16]=o,t[17]=d,t[18]=f,t[19]=g,t[20]=_,t[21]=n,t[22]=v):v=t[22],v}function le(e){let t=(0,V.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,U.jsx)(`p`,{className:`text-sm text-bernstein`,children:n}),t[0]=n,t[1]=r),r}function ue(e){let t=(0,V.c)(3),{laedt:n,fehler:r}=e;if(n){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Wird gelesen …`}),t[0]=e):e=t[0],e}let i=r?`: ${r}`:`.`,a;return t[1]===i?a=t[2]:(a=(0,U.jsxs)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:[`Lässt sich gerade nicht lesen`,i]}),t[1]=i,t[2]=a),a}function de({offen:e}){let t=w(),n=d({queryKey:[`geheimnisse`],queryFn:()=>g(`/api/maintenance/geheimnisse`),enabled:e}),[r,i]=(0,H.useState)(``),[a,o]=(0,H.useState)(!1),[s,l]=(0,H.useState)(!1);async function u(e){if(!a){o(!0),l(!1);try{await c(`/api/maintenance/geheimnisse`,{schluessel:`hf_token`,wert:e}),p(`erfolg`,e?`Hugging-Face-Zugang gespeichert.`:`Hugging-Face-Zugang gelöscht.`),i(``),t.invalidateQueries({queryKey:[`geheimnisse`]})}catch(e){p(`fehler`,e.message)}finally{o(!1)}}}let f=n.data,m;return m=n.isPending?`Wird gelesen …`:f?f.hf_token_gesetzt?`Ist hinterlegt.`:`Fehlt.`:`Lässt sich gerade nicht lesen${n.error?`: ${n.error.message}`:`.`}`,(0,U.jsxs)(Q,{titel:`Hugging-Face-Zugang`,children:[(0,U.jsxs)(`p`,{className:`text-sm text-text-2`,"aria-live":`polite`,children:[(0,U.jsx)(`span`,{className:!f&&!n.isPending?`text-rot-text`:void 0,children:m}),` Nötig für gesperrte Modelle und schnellere Downloads.`,f?.hf_token_aus_env?` Er kommt aus der Dienst-Einstellung und lässt sich hier nicht löschen.`:``]}),f?.schreibbar===!1&&(0,U.jsx)(`p`,{className:`text-sm text-bernstein`,children:`Die Box kann den Zugang gerade nicht speichern: Ihre Ablage ist nicht beschreibbar.`}),(0,U.jsxs)(`form`,{className:`flex gap-2`,onSubmit:e=>{e.preventDefault(),r.trim()&&u(r.trim())},children:[(0,U.jsx)(`label`,{htmlFor:`hf-token`,className:`sr-only`,children:`Hugging-Face-Zugang`}),(0,U.jsx)(`input`,{id:`hf-token`,type:`password`,autoComplete:`off`,value:r,onChange:e=>i(e.target.value),placeholder:`hf_…`,className:`h-11 min-w-0 flex-1 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-cyan/60 focus:bg-white/[0.06]`}),(0,U.jsx)(N,{type:`submit`,disabled:!r.trim()||f?.schreibbar===!1||a,children:a?`Speichert …`:`Speichern`})]}),f?.hf_token_gesetzt&&!f.hf_token_aus_env&&(s?(0,U.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(N,{variant:`gefahr`,size:`sm`,disabled:a,onClick:()=>u(null),children:`Wirklich löschen?`}),(0,U.jsx)(N,{variant:`ghost`,size:`sm`,onClick:()=>l(!1),children:`Nein`})]}):(0,U.jsx)(N,{variant:`ghost`,size:`sm`,className:`self-start`,disabled:a,onClick:()=>l(!0),children:`Zugang löschen`}))]})}function fe(e){let t=(0,V.c)(24),{ziel:n,name:r}=e,i=T(),a=i.data,o=null;if(i.isPending){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,U.jsx)(`p`,{role:`status`,className:`text-sm text-text-2`,children:`Sendet …`}),t[0]=e):e=t[0],o=e}else if(a?.gesendet){let e=a.weg===`hermes`?`über Hermes`:`direkt an die Telegram-Bot-API`,n=a.kennung?`, Kennung ${a.kennung}`:``,r;t[1]!==e||t[2]!==n?(r=(0,U.jsxs)(`p`,{role:`status`,className:`text-sm text-gruen`,children:[`Gesendet `,e,n,`. Schau in Telegram nach.`]}),t[1]=e,t[2]=n,t[3]=r):r=t[3],o=r}else if(a){let e=a.grund??a.detail??`ohne Angabe eines Grundes.`,n;t[4]===e?n=t[5]:(n=(0,U.jsxs)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:[`Nicht gesendet: `,e]}),t[4]=e,t[5]=n),o=n}else if(i.error){let e;t[6]===i.error.message?e=t[7]:(e=(0,U.jsx)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:i.error.message}),t[6]=i.error.message,t[7]=e),o=e}let s;t[8]===r?s=t[9]:(s=(0,U.jsx)(`span`,{className:`text-[15px]`,children:r}),t[8]=r,t[9]=s);let c;t[10]!==i||t[11]!==n?(c=()=>i.mutate(n),t[10]=i,t[11]=n,t[12]=c):c=t[12];let l=`Testmeldung von ${r} senden`,u=i.isPending?`Sendet …`:`Test senden`,d;t[13]!==c||t[14]!==l||t[15]!==u||t[16]!==i.isPending?(d=(0,U.jsx)(N,{variant:`outline`,size:`sm`,disabled:i.isPending,onClick:c,"aria-label":l,children:u}),t[13]=c,t[14]=l,t[15]=u,t[16]=i.isPending,t[17]=d):d=t[17];let f;t[18]!==s||t[19]!==d?(f=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[s,d]}),t[18]=s,t[19]=d,t[20]=f):f=t[20];let p;return t[21]!==o||t[22]!==f?(p=(0,U.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[f,o]}),t[21]=o,t[22]=f,t[23]=p):p=t[23],p}function pe(){let e=(0,V.c)(10),t=o().data,n=t?.rolle??`box`,r=n===`box`?`homelab`:`box`,i=t?.instanz??(n===`box`?`Box-Wart`:`Homelab`),a;e[0]!==r||e[1]!==n||e[2]!==t||e[3]!==i?(a=[{ziel:n,name:i}],t?.partner.eingerichtet&&a.push({ziel:r,name:t.partner.name}),a.sort(he),e[0]=r,e[1]=n,e[2]=t,e[3]=i,e[4]=a):a=e[4];let s,c,l;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Dringende Hinweise gehen zusätzlich per Telegram raus, alles andere bleibt hier; was nachts anfällt, kommt um 07:00 als eine Morgenmeldung. Einfache Probleme wie einen abgestürzten Dienst behebt der Wächter selbst und schreibt es in den Verlauf.`}),c=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Fragt Lucy vorher, antwortest du in Telegram mit „ja“ und der Nummer oder tippst auf die Antworttaste unter dem Eingabefeld — das löst genau die gefragte Aktion aus. Sonntags um 07:30 kommt ihr Wochenbericht.`}),l=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Der Test schickt eine kurze Meldung über den echten Meldeweg, als dringend, damit sie auch nachts sofort kommt.`}),e[5]=s,e[6]=c,e[7]=l):(s=e[5],c=e[6],l=e[7]);let u;return e[8]===a?u=e[9]:(u=(0,U.jsxs)(Q,{titel:`Telegram`,children:[s,c,l,a.map(me)]}),e[8]=a,e[9]=u),u}function me(e){return(0,U.jsx)(fe,{ziel:e.ziel,name:e.name},e.ziel)}function he(e,t){return Number(e.ziel!==`box`)-Number(t.ziel!==`box`)}function ge(e){let t=(0,V.c)(87),{e:n,laedt:r,fehler:i}=e,a=b(),[o,s]=(0,H.useState)(null),[c,l]=(0,H.useState)(!1);if(!n){let e;return t[0]!==i||t[1]!==r?(e=(0,U.jsx)(Q,{titel:`Update-Zeitfenster`,children:(0,U.jsx)(ue,{laedt:r,fehler:i})}),t[0]=i,t[1]=r,t[2]=e):e=t[2],e}let u=n.update_fenster,d,f,p,m,h,g,_,v,y,x,S,C,w,T,E,D,O;if(t[3]!==n.schaltbar||t[4]!==o||t[5]!==u.naechster_lauf||t[6]!==u.neustart_fenster||t[7]!==u.tag||t[8]!==u.tag_name||t[9]!==u.timer_aktiv||t[10]!==u.uhrzeit||t[11]!==u.wirksam){O=o??{tag:u.tag,uhrzeit:u.uhrzeit},f=O.tag!==u.tag||O.uhrzeit!==u.uhrzeit;let e=oe.includes(O.uhrzeit)?oe:[...oe,O.uhrzeit].sort();d=Q,h=`Update-Zeitfenster`;let r;t[29]===u.naechster_lauf?r=t[30]:(r=u.naechster_lauf?` (nächster Lauf ${Z(u.naechster_lauf)})`:``,t[29]=u.naechster_lauf,t[30]=r),t[31]!==u.neustart_fenster||t[32]!==u.tag_name||t[33]!==u.uhrzeit||t[34]!==r?(g=(0,U.jsxs)(`p`,{className:`text-sm text-text-2`,children:[`Die Box aktualisiert sich jeden `,u.tag_name,` um `,u.uhrzeit,` Uhr`,r,`. Neu gestartet wird sie danach nur`,` `,u.neustart_fenster,`.`]}),t[31]=u.neustart_fenster,t[32]=u.tag_name,t[33]=u.uhrzeit,t[34]=r,t[35]=g):g=t[35],t[36]!==n.schaltbar||t[37]!==u.timer_aktiv?(_=n.schaltbar&&!u.timer_aktiv&&(0,U.jsx)(le,{children:`Der Update-Timer läuft gerade nicht; er übernimmt das Fenster beim nächsten Start.`}),t[36]=n.schaltbar,t[37]=u.timer_aktiv,t[38]=_):_=t[38],t[39]!==n.schaltbar||t[40]!==u.wirksam?(v=n.schaltbar&&!u.wirksam&&(0,U.jsx)(le,{children:`Der Timer läuft noch nach einem anderen Plan als eingestellt. Einmal speichern gleicht es an.`}),t[39]=n.schaltbar,t[40]=u.wirksam,t[41]=v):v=t[41],D=`flex flex-wrap items-end gap-2`;let i=O.tag,a;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(a=X.map(ve),t[42]=a):a=t[42],m=(0,U.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs text-text-3`,children:[`Tag`,(0,U.jsx)(`select`,{className:`h-11 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-cyan/60 focus:bg-white/[0.06]`,value:i,disabled:!n.schaltbar,"aria-label":`Wochentag`,onChange:e=>s({...O,tag:Number(e.target.value)}),children:a})]}),T=`flex flex-col gap-1 text-xs text-text-3`,E=`Uhrzeit`,p=`h-11 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-cyan/60 focus:bg-white/[0.06]`,y=O.uhrzeit,x=!n.schaltbar,S=`Uhrzeit`,C=e=>s({...O,uhrzeit:e.target.value}),w=e.map(_e),t[3]=n.schaltbar,t[4]=o,t[5]=u.naechster_lauf,t[6]=u.neustart_fenster,t[7]=u.tag,t[8]=u.tag_name,t[9]=u.timer_aktiv,t[10]=u.uhrzeit,t[11]=u.wirksam,t[12]=d,t[13]=f,t[14]=p,t[15]=m,t[16]=h,t[17]=g,t[18]=_,t[19]=v,t[20]=y,t[21]=x,t[22]=S,t[23]=C,t[24]=w,t[25]=T,t[26]=E,t[27]=D,t[28]=O}else d=t[12],f=t[13],p=t[14],m=t[15],h=t[16],g=t[17],_=t[18],v=t[19],y=t[20],x=t[21],S=t[22],C=t[23],w=t[24],T=t[25],E=t[26],D=t[27],O=t[28];let k;t[43]!==p||t[44]!==y||t[45]!==x||t[46]!==S||t[47]!==C||t[48]!==w?(k=(0,U.jsx)(`select`,{className:p,value:y,disabled:x,"aria-label":S,onChange:C,children:w}),t[43]=p,t[44]=y,t[45]=x,t[46]=S,t[47]=C,t[48]=w,t[49]=k):k=t[49];let A;t[50]!==k||t[51]!==T||t[52]!==E?(A=(0,U.jsxs)(`label`,{className:T,children:[E,k]}),t[50]=k,t[51]=T,t[52]=E,t[53]=A):A=t[53];let j=!n.schaltbar||a.isPending||!f&&u.wirksam,M;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(M=()=>l(!0),t[54]=M):M=t[54];let P=a.isPending?`Speichert …`:`Speichern`,F;t[55]!==j||t[56]!==P?(F=(0,U.jsx)(N,{disabled:j,onClick:M,children:P}),t[55]=j,t[56]=P,t[57]=F):F=t[57];let L;t[58]!==m||t[59]!==A||t[60]!==F||t[61]!==D?(L=(0,U.jsxs)(`div`,{className:D,children:[m,A,F]}),t[58]=m,t[59]=A,t[60]=F,t[61]=D,t[62]=L):L=t[62];let R=n.schaltbar?``:` Einstellen lässt es sich nur auf der Box.`,z;t[63]===R?z=t[64]:(z=(0,U.jsxs)(`p`,{className:`text-xs text-text-3`,children:[`Am besten nachts nach der Sicherung (03:30) und vor der Morgenmeldung (07:00).`,R]}),t[63]=R,t[64]=z);let B;t[65]!==O.tag||t[66]!==O.uhrzeit?(B=ce(O.tag,O.uhrzeit),t[65]=O.tag,t[66]=O.uhrzeit,t[67]=B):B=t[67];let W=`Der Update-Lauf startet ab jetzt jeden ${X[O.tag-1]} um ${O.uhrzeit} Uhr. Neu gestartet wird die Box nur ${B}. Ein Termin, der dadurch schon vorbei ist, wird nicht nachgeholt: Der erste Lauf ist der nächste reguläre.`,G;t[68]===Symbol.for(`react.memo_cache_sentinel`)?(G=()=>l(!1),t[68]=G):G=t[68];let K;t[69]!==c||t[70]!==a||t[71]!==O?(K=()=>{c&&(a.mutate(O,{onSuccess:()=>s(null)}),l(!1))},t[69]=c,t[70]=a,t[71]=O,t[72]=K):K=t[72];let q;t[73]!==c||t[74]!==a.isPending||t[75]!==W||t[76]!==K?(q=(0,U.jsx)(I,{offen:c,titel:`Update-Zeitfenster ändern?`,text:W,knopf:`Speichern`,gesperrt:a.isPending,onNein:G,onJa:K}),t[73]=c,t[74]=a.isPending,t[75]=W,t[76]=K,t[77]=q):q=t[77];let J;return t[78]!==d||t[79]!==h||t[80]!==g||t[81]!==_||t[82]!==v||t[83]!==L||t[84]!==z||t[85]!==q?(J=(0,U.jsxs)(d,{titel:h,children:[g,_,v,L,z,q]}),t[78]=d,t[79]=h,t[80]=g,t[81]=_,t[82]=v,t[83]=L,t[84]=z,t[85]=q,t[86]=J):J=t[86],J}function _e(e){return(0,U.jsx)(`option`,{value:e,children:e},e)}function ve(e,t){return(0,U.jsx)(`option`,{value:t+1,children:e},e)}function ye(e){let t=(0,V.c)(37),{e:n,laedt:r,fehler:i}=e,a=_(),[o,s]=(0,H.useState)(null);if(!n){let e;return t[0]!==i||t[1]!==r?(e=(0,U.jsx)(Q,{titel:`Modell-Radar`,children:(0,U.jsx)(ue,{laedt:r,fehler:i})}),t[0]=i,t[1]=r,t[2]=e):e=t[2],e}let c=n.radar,l=c.zustand===`an`||c.zustand===`unbekannt`&&c.an,u;t[3]===c.naechster_lauf?u=t[4]:(u=c.naechster_lauf?` (nächster Lauf ${Z(c.naechster_lauf)})`:``,t[3]=c.naechster_lauf,t[4]=u);let d=`An. Es sucht jede Nacht ab 00:30 nach besseren Modellen${u}.`,f=c.an?`Eingeschaltet.`:`Ausgeschaltet.`,p;t[5]!==d||t[6]!==f?(p={an:d,schlaeft:`Schläft. Es sucht und testet keine Modelle, bis du es wieder einschaltest.`,aus:`Gestoppt, steht aber noch im Autostart: Nach einem Neustart der Box liefe es wieder.`,unbekannt:f},t[5]=d,t[6]=f,t[7]=p):p=t[7];let m=p[c.zustand],h;t[8]===m?h=t[9]:(h=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:m}),t[8]=m,t[9]=h);let g;t[10]!==n.schaltbar||t[11]!==c.an||t[12]!==c.wirksam?(g=n.schaltbar&&!c.wirksam&&(0,U.jsxs)(le,{children:[`Eingestellt ist „`,c.an?`an`:`aus`,`“, systemd zeigt etwas anderes. Noch einmal schalten gleicht es an.`]}),t[10]=n.schaltbar,t[11]=c.an,t[12]=c.wirksam,t[13]=g):g=t[13];let v=l?`outline`:`default`,y=!n.schaltbar||a.isPending,b;t[14]===l?b=t[15]:(b=()=>s(!l),t[14]=l,t[15]=b);let x=a.isPending?`Schaltet …`:l?`Ausschalten`:`Einschalten`,S;t[16]!==b||t[17]!==x||t[18]!==v||t[19]!==y?(S=(0,U.jsx)(N,{variant:v,size:`sm`,className:`self-start`,disabled:y,onClick:b,children:x}),t[16]=b,t[17]=x,t[18]=v,t[19]=y,t[20]=S):S=t[20];let C=o!==null,w=o?`Modell-Radar einschalten?`:`Modell-Radar ausschalten?`,T=o?`Das Radar sucht ab heute Nacht um 00:30 wieder nach besseren Modellen und testet höchstens eines pro Woche. Ein verpasster Lauf wird nicht nachgeholt, tagsüber lädt es also nichts.`:`Das Radar sucht und testet dann keine neuen Modelle mehr, bis du es wieder einschaltest. Ein Nachttest, der gerade läuft, endet noch. Auch ein Deploy schaltet es nicht wieder ein.`,E=o?`Einschalten`:`Ausschalten`,D;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(D=()=>s(null),t[21]=D):D=t[21];let O;t[22]!==o||t[23]!==a?(O=()=>{o!==null&&(a.mutate(o),s(null))},t[22]=o,t[23]=a,t[24]=O):O=t[24];let k;t[25]!==a.isPending||t[26]!==C||t[27]!==w||t[28]!==T||t[29]!==E||t[30]!==O?(k=(0,U.jsx)(I,{offen:C,titel:w,text:T,knopf:E,gesperrt:a.isPending,onNein:D,onJa:O}),t[25]=a.isPending,t[26]=C,t[27]=w,t[28]=T,t[29]=E,t[30]=O,t[31]=k):k=t[31];let A;return t[32]!==S||t[33]!==k||t[34]!==h||t[35]!==g?(A=(0,U.jsxs)(Q,{titel:`Modell-Radar`,children:[h,g,S,k]}),t[32]=S,t[33]=k,t[34]=h,t[35]=g,t[36]=A):A=t[36],A}function be(e){let t=(0,V.c)(25),{name:n,stand:r,laedt:i,fehler:a}=e,o;if(i){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,U.jsx)(`span`,{className:`text-sm text-text-2`,children:`Wird gelesen …`}),t[0]=e):e=t[0],o=e}else if(a){let e;t[1]===a?e=t[2]:(e=(0,U.jsxs)(`span`,{className:`text-sm text-rot-text`,children:[`Nicht lesbar: `,a]}),t[1]=a,t[2]=e),o=e}else if(r?.commit){let e;t[4]===r.commit?e=t[5]:(e=(0,U.jsx)(`span`,{className:`ziffern text-foreground`,children:r.commit}),t[4]=r.commit,t[5]=e);let n=r.betreff?` · ${r.betreff}`:``,i;t[6]!==e||t[7]!==n?(i=(0,U.jsxs)(`span`,{className:`text-sm text-text-2`,children:[e,n]}),t[6]=e,t[7]=n,t[8]=i):i=t[8];let a;t[9]!==r.deploy_zeit||t[10]!==r.quelle?(a=r.quelle===`deploy`?`Live seit ${Z(r.deploy_zeit)}`:`Aus git gelesen, ohne Deploy`,t[9]=r.deploy_zeit,t[10]=r.quelle,t[11]=a):a=t[11];let s;t[12]===r.commit_datum?s=t[13]:(s=r.commit_datum?` · Commit vom ${Z(r.commit_datum)}`:``,t[12]=r.commit_datum,t[13]=s);let c;t[14]!==a||t[15]!==s?(c=(0,U.jsxs)(`span`,{className:`text-xs text-text-3`,children:[a,s]}),t[14]=a,t[15]=s,t[16]=c):c=t[16];let l;t[17]!==i||t[18]!==c?(l=(0,U.jsxs)(U.Fragment,{children:[i,c]}),t[17]=i,t[18]=c,t[19]=l):l=t[19],o=l}else{let e;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,U.jsx)(`span`,{className:`text-sm text-text-2`,children:`Unbekannt: keine Stand-Datei und kein git.`}),t[3]=e):e=t[3],o=e}let s;t[20]===n?s=t[21]:(s=(0,U.jsx)(`span`,{className:`text-[15px]`,children:n}),t[20]=n,t[21]=s);let c;return t[22]!==o||t[23]!==s?(c=(0,U.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[s,o]}),t[22]=o,t[23]=s,t[24]=c):c=t[24],c}function xe(e,t){return!e||!t?null:e.startsWith(t)||t.startsWith(e)}function Se(e){let t=(0,V.c)(21),{offen:n}=e,r=o().data,i=!!r?.partner.eingerichtet,[a,s]=k(n,i),c=a.data?.stand?.commit,l=s.data?.stand?.commit,u;t[0]!==c||t[1]!==l?(u=xe(c,l),t[0]=c,t[1]=l,t[2]=u):u=t[2];let d=u,f=a.data?.instanz??r?.instanz??`Diese Instanz`,p=a.data?.stand,m=a.error?.message,h;t[3]!==a.isPending||t[4]!==f||t[5]!==p||t[6]!==m?(h=(0,U.jsx)(be,{name:f,stand:p,laedt:a.isPending,fehler:m}),t[3]=a.isPending,t[4]=f,t[5]=p,t[6]=m,t[7]=h):h=t[7];let g;t[8]!==r?.partner||t[9]!==s.data?.instanz||t[10]!==s.data?.stand||t[11]!==s.error?.message||t[12]!==s.isPending||t[13]!==i?(g=i&&(0,U.jsx)(be,{name:s.data?.instanz??r?.partner.name??`Partner`,stand:s.data?.stand,laedt:s.isPending,fehler:s.error?.message}),t[8]=r?.partner,t[9]=s.data?.instanz,t[10]=s.data?.stand,t[11]=s.error?.message,t[12]=s.isPending,t[13]=i,t[14]=g):g=t[14];let _;t[15]===d?_=t[16]:(_=d===!1&&(0,U.jsx)(le,{children:`Die beiden Instanzen laufen mit verschiedenen Ständen. Der nächste Deploy der Box zieht den Homelab-Teil mit.`}),t[15]=d,t[16]=_);let v;return t[17]!==h||t[18]!==g||t[19]!==_?(v=(0,U.jsxs)(Q,{titel:`Instanzen`,children:[h,g,_]}),t[17]=h,t[18]=g,t[19]=_,t[20]=v):v=t[20],v}function Ce(e){let t=(0,V.c)(52),{h:n}=e,r=O(),i=D(),[a,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(null),d=n.arcane,f;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(f={hinterlegt:(0,U.jsx)(P,{art:`gruen`,children:`hinterlegt`}),umgebung:(0,U.jsx)(P,{art:`gruen`,children:`aus der Dienst-Einstellung`}),fehlt:(0,U.jsx)(P,{art:`bernstein`,children:`fehlt`})},t[0]=f):f=t[0];let p=f[d.schluessel],m;t[1]===d.url?m=t[2]:(m=d.url&&(0,U.jsxs)(`a`,{href:d.url,target:`_blank`,rel:`noopener`,className:`ml-auto inline-flex items-center gap-1 text-cyan hover:underline`,children:[`Arcane öffnen `,(0,U.jsx)(L,{className:`size-3.5`,"aria-hidden":!0})]}),t[1]=d.url,t[2]=m);let h;t[3]!==p||t[4]!==m?(h=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[`API-Schlüssel `,p,m]}),t[3]=p,t[4]=m,t[5]=h):h=t[5];let g;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Mit Schlüssel sieht der Orchestrator, welche Docker-Images neuer sind. Anlegen in Arcane unter Einstellungen → API-Schlüssel; Lesen reicht, solange Docker-Updates nur als Probelauf laufen.`}),t[6]=g):g=t[6];let _;t[7]!==d.schluessel||t[8]!==r||t[9]!==a?(_=d.schluessel!==`umgebung`&&(0,U.jsxs)(`form`,{className:`flex gap-2`,onSubmit:e=>{e.preventDefault(),a.trim()&&r.mutate(a.trim(),{onSuccess:()=>o(``)})},children:[(0,U.jsx)(`label`,{htmlFor:`arcane-schluessel`,className:`sr-only`,children:`Arcane-API-Schlüssel`}),(0,U.jsxs)(`span`,{className:`relative min-w-0 flex-1`,children:[(0,U.jsx)(B,{className:`pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-text-3`,"aria-hidden":!0}),(0,U.jsx)(`input`,{id:`arcane-schluessel`,type:`password`,autoComplete:`off`,value:a,onChange:e=>o(e.target.value),placeholder:d.schluessel===`hinterlegt`?`Neuen Schlüssel eintragen …`:`Schlüssel aus Arcane einfügen …`,className:`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] pr-3 pl-9 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`})]}),(0,U.jsx)(N,{type:`submit`,disabled:!a.trim()||r.isPending,children:r.isPending?`Prüft …`:`Prüfen und speichern`})]}),t[7]=d.schluessel,t[8]=r,t[9]=a,t[10]=_):_=t[10];let v;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Der Schlüssel wird vor dem Speichern an Arcane geprüft und nie wieder angezeigt. Er liegt nur im Homelab-Teil.`}),t[11]=v):v=t[11];let y;t[12]!==d.schluessel||t[13]!==s||t[14]!==r?(y=d.schluessel===`hinterlegt`&&(s?(0,U.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(N,{variant:`gefahr`,size:`sm`,disabled:r.isPending,onClick:()=>{r.mutate(null),c(!1)},children:`Wirklich entfernen?`}),(0,U.jsx)(N,{variant:`ghost`,size:`sm`,onClick:()=>c(!1),children:`Nein`})]}):(0,U.jsx)(N,{variant:`ghost`,size:`sm`,className:`self-start`,onClick:()=>c(!0),children:`Schlüssel entfernen`})),t[12]=d.schluessel,t[13]=s,t[14]=r,t[15]=y):y=t[15];let b;t[16]!==h||t[17]!==_||t[18]!==y?(b=(0,U.jsxs)(Q,{titel:`Arcane (Docker)`,children:[h,g,_,v,y]}),t[16]=h,t[17]=_,t[18]=y,t[19]=b):b=t[19];let x=d.echt?`Echt: „Jetzt updaten“ bei Arcane zieht neue Images und startet die Container neu.`:`Probelauf: Arcane zeigt nur, was es tun würde — kein Container wird angefasst.`,S=d.echt_quelle===`umgebung`?` Festgelegt in der Dienst-Einstellung (MC_ARCANE_ECHT).`:``,C;t[20]!==x||t[21]!==S?(C=(0,U.jsxs)(`p`,{className:`text-sm text-text-2`,children:[x,S]}),t[20]=x,t[21]=S,t[22]=C):C=t[22];let w=d.echt?`outline`:`default`,T=d.echt_quelle===`umgebung`||i.isPending||d.schluessel===`fehlt`,E;t[23]===d.echt?E=t[24]:(E=()=>u(!d.echt),t[23]=d.echt,t[24]=E);let k=i.isPending?`Schaltet …`:d.echt?`Zurück auf Probelauf`:`Echt schalten`,A;t[25]!==w||t[26]!==T||t[27]!==E||t[28]!==k?(A=(0,U.jsx)(N,{variant:w,size:`sm`,className:`self-start`,disabled:T,onClick:E,children:k}),t[25]=w,t[26]=T,t[27]=E,t[28]=k,t[29]=A):A=t[29];let j;t[30]===d.schluessel?j=t[31]:(j=d.schluessel===`fehlt`&&(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Erst den Schlüssel eintragen.`}),t[30]=d.schluessel,t[31]=j);let M=l!==null,F=l?`Docker-Updates echt ausführen?`:`Zurück auf Probelauf?`,R=l?`Ab jetzt zieht „Jetzt updaten“ bei Arcane neue Images und startet die betroffenen Container neu. Vorher wird ein Snapshot der VM angelegt, soweit möglich. Das lässt sich hier jederzeit zurückschalten.`:`Docker-Updates zeigen dann wieder nur, was Arcane tun würde.`,z=l?`Echt schalten`:`Probelauf`,W=!!l,G;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(G=()=>u(null),t[32]=G):G=t[32];let K;t[33]!==i||t[34]!==l?(K=()=>{l!==null&&(i.mutate(l),u(null))},t[33]=i,t[34]=l,t[35]=K):K=t[35];let q;t[36]!==i.isPending||t[37]!==M||t[38]!==F||t[39]!==R||t[40]!==z||t[41]!==W||t[42]!==K?(q=(0,U.jsx)(I,{offen:M,titel:F,text:R,knopf:z,gefahr:W,gesperrt:i.isPending,onNein:G,onJa:K}),t[36]=i.isPending,t[37]=M,t[38]=F,t[39]=R,t[40]=z,t[41]=W,t[42]=K,t[43]=q):q=t[43];let J;t[44]!==C||t[45]!==A||t[46]!==j||t[47]!==q?(J=(0,U.jsxs)(Q,{titel:`Docker-Updates`,children:[C,A,j,q]}),t[44]=C,t[45]=A,t[46]=j,t[47]=q,t[48]=J):J=t[48];let Y;return t[49]!==J||t[50]!==b?(Y=(0,U.jsxs)(U.Fragment,{children:[b,J]}),t[49]=J,t[50]=b,t[51]=Y):Y=t[51],Y}function we(e){let t=(0,V.c)(44),{h:n}=e,r=E(),[i,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(!1),d=n.adguard;if(!d)return null;let f;t[0]!==d.benutzer||t[1]!==d.zugang?(f=d.zugang===`hinterlegt`?(0,U.jsxs)(P,{art:`gruen`,children:[`hinterlegt`,d.benutzer?` · ${d.benutzer}`:``]}):(0,U.jsx)(P,{art:`grau`,children:`keiner`}),t[0]=d.benutzer,t[1]=d.zugang,t[2]=f):f=t[2];let p;t[3]===d.url?p=t[4]:(p=d.url&&(0,U.jsxs)(`a`,{href:d.url,target:`_blank`,rel:`noopener`,className:`ml-auto inline-flex items-center gap-1 text-cyan hover:underline`,children:[`AdGuard öffnen `,(0,U.jsx)(L,{className:`size-3.5`,"aria-hidden":!0})]}),t[3]=d.url,t[4]=p);let m;t[5]!==f||t[6]!==p?(m=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[`Zugang `,f,p]}),t[5]=f,t[6]=p,t[7]=m):m=t[7];let h;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Mit einem Zugang zeigt die Kachel von AdGuard, wie viele Anfragen es blockt. Er wird nur zum Lesen der Statistik benutzt — am besten ein eigener Benutzer dafür.`}),t[8]=h):h=t[8];let g;t[9]!==i||t[10]!==s||t[11]!==r?(g=e=>{e.preventDefault(),i.trim()&&s&&r.mutate({benutzer:i.trim(),passwort:s},{onSuccess:()=>{c(``),o(``)}})},t[9]=i,t[10]=s,t[11]=r,t[12]=g):g=t[12];let _;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,U.jsx)(`label`,{htmlFor:`adguard-benutzer`,className:`sr-only`,children:`AdGuard-Benutzer`}),t[13]=_):_=t[13];let v;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(v=e=>o(e.target.value),t[14]=v):v=t[14];let y;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(y=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-40`),t[15]=y):y=t[15];let b;t[16]===i?b=t[17]:(b=(0,U.jsx)(`input`,{id:`adguard-benutzer`,autoComplete:`off`,value:i,onChange:v,placeholder:`Benutzer`,className:y}),t[16]=i,t[17]=b);let x;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,U.jsx)(`label`,{htmlFor:`adguard-passwort`,className:`sr-only`,children:`AdGuard-Passwort`}),t[18]=x):x=t[18];let S;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(S=e=>c(e.target.value),t[19]=S):S=t[19];let C;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(C=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-40`),t[20]=C):C=t[20];let w;t[21]===s?w=t[22]:(w=(0,U.jsx)(`input`,{id:`adguard-passwort`,type:`password`,autoComplete:`new-password`,value:s,onChange:S,placeholder:`Passwort`,className:C}),t[21]=s,t[22]=w);let T;t[23]!==i||t[24]!==s||t[25]!==r.isPending?(T=!i.trim()||!s||r.isPending,t[23]=i,t[24]=s,t[25]=r.isPending,t[26]=T):T=t[26];let D=r.isPending?`Prüft …`:`Prüfen und speichern`,O;t[27]!==T||t[28]!==D?(O=(0,U.jsx)(N,{type:`submit`,disabled:T,children:D}),t[27]=T,t[28]=D,t[29]=O):O=t[29];let k;t[30]!==w||t[31]!==O||t[32]!==g||t[33]!==b?(k=(0,U.jsxs)(`form`,{className:`flex flex-wrap gap-2`,onSubmit:g,children:[_,b,x,w,O]}),t[30]=w,t[31]=O,t[32]=g,t[33]=b,t[34]=k):k=t[34];let A;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Vor dem Speichern fragt der Homelab-Teil AdGuard einmal damit. Das Passwort wird nie wieder angezeigt und liegt nur im Homelab-Teil.`}),t[35]=A):A=t[35];let j;t[36]!==d.zugang||t[37]!==l||t[38]!==r?(j=d.zugang===`hinterlegt`&&(l?(0,U.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(N,{variant:`gefahr`,size:`sm`,disabled:r.isPending,onClick:()=>{r.mutate(null),u(!1)},children:`Wirklich entfernen?`}),(0,U.jsx)(N,{variant:`ghost`,size:`sm`,onClick:()=>u(!1),children:`Nein`})]}):(0,U.jsx)(N,{variant:`ghost`,size:`sm`,className:`self-start`,onClick:()=>u(!0),children:`Zugang entfernen`})),t[36]=d.zugang,t[37]=l,t[38]=r,t[39]=j):j=t[39];let M;return t[40]!==k||t[41]!==j||t[42]!==m?(M=(0,U.jsxs)(Q,{titel:`AdGuard Home`,children:[m,h,k,A,j]}),t[40]=k,t[41]=j,t[42]=m,t[43]=M):M=t[43],M}function Te(e){let t=(0,V.c)(43),{h:n}=e,r=h(),[i,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(!1),d=n.nas_snmp;if(!d)return null;let f;t[0]===d.zugang?f=t[1]:(f=d.zugang===`hinterlegt`?(0,U.jsx)(P,{art:`gruen`,children:`hinterlegt`}):(0,U.jsx)(P,{art:`grau`,children:`keiner`}),t[0]=d.zugang,t[1]=f);let p;t[2]===d.adresse?p=t[3]:(p=d.adresse&&(0,U.jsxs)(`span`,{className:`text-text-3`,children:[`NAS `,d.adresse]}),t[2]=d.adresse,t[3]=p);let m;t[4]!==f||t[5]!==p?(m=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[`Zugang `,f,p]}),t[4]=f,t[5]=p,t[6]=m):m=t[6];let g;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Damit meldet der Orchestrator, wenn eine Platte im NAS kränkelt. Am QNAP: Systemsteuerung → Netzwerk- und Dateidienste → SNMP → „SNMP-Dienst aktivieren“, Version SNMP v1/v2, einen Zugangsnamen („Community“) wählen, der nicht „public“ heißt — und ihn hier eintragen.`}),t[7]=g):g=t[7];let _;t[8]!==s||t[9]!==i||t[10]!==r?(_=e=>{e.preventDefault(),i.trim()&&r.mutate({community:i.trim(),adresse:s.trim()},{onSuccess:()=>{o(``),c(``)}})},t[8]=s,t[9]=i,t[10]=r,t[11]=_):_=t[11];let v;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,U.jsx)(`label`,{htmlFor:`nas-community`,className:`sr-only`,children:`Zugangsname (Community)`}),t[12]=v):v=t[12];let y;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(y=e=>o(e.target.value),t[13]=y):y=t[13];let b;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(b=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-48`),t[14]=b):b=t[14];let x;t[15]===i?x=t[16]:(x=(0,U.jsx)(`input`,{id:`nas-community`,type:`password`,autoComplete:`new-password`,value:i,onChange:y,placeholder:`Zugangsname (Community)`,className:b}),t[15]=i,t[16]=x);let S;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,U.jsx)(`label`,{htmlFor:`nas-adresse`,className:`sr-only`,children:`Adresse des NAS`}),t[17]=S):S=t[17];let C;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(C=e=>c(e.target.value),t[18]=C):C=t[18];let w=d.adresse?`Adresse (${d.adresse})`:`Adresse des NAS`,T;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(T=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-40`),t[19]=T):T=t[19];let E;t[20]!==s||t[21]!==w?(E=(0,U.jsx)(`input`,{id:`nas-adresse`,autoComplete:`off`,value:s,onChange:C,placeholder:w,className:T}),t[20]=s,t[21]=w,t[22]=E):E=t[22];let D;t[23]!==i||t[24]!==r.isPending?(D=!i.trim()||r.isPending,t[23]=i,t[24]=r.isPending,t[25]=D):D=t[25];let O=r.isPending?`Prüft …`:`Verbindung testen und speichern`,k;t[26]!==D||t[27]!==O?(k=(0,U.jsx)(N,{type:`submit`,disabled:D,children:O}),t[26]=D,t[27]=O,t[28]=k):k=t[28];let A;t[29]!==E||t[30]!==k||t[31]!==_||t[32]!==x?(A=(0,U.jsxs)(`form`,{className:`flex flex-wrap gap-2`,onSubmit:_,children:[v,x,S,E,k]}),t[29]=E,t[30]=k,t[31]=_,t[32]=x,t[33]=A):A=t[33];let j;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Vor dem Speichern fragt der Homelab-Teil das NAS damit. Antwortet es nicht, wird nichts gespeichert. Der Zugangsname wird nie wieder angezeigt; die Adresse nur ändern, wenn sie von der angezeigten abweicht.`}),t[34]=j):j=t[34];let M;t[35]!==l||t[36]!==d.zugang||t[37]!==r?(M=d.zugang===`hinterlegt`&&(l?(0,U.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(N,{variant:`gefahr`,size:`sm`,disabled:r.isPending,onClick:()=>{r.mutate(null),u(!1)},children:`Wirklich entfernen?`}),(0,U.jsx)(N,{variant:`ghost`,size:`sm`,onClick:()=>u(!1),children:`Nein`})]}):(0,U.jsx)(N,{variant:`ghost`,size:`sm`,className:`self-start`,onClick:()=>u(!0),children:`Zugang entfernen`})),t[35]=l,t[36]=d.zugang,t[37]=r,t[38]=M):M=t[38];let F;return t[39]!==A||t[40]!==M||t[41]!==m?(F=(0,U.jsxs)(Q,{titel:`NAS-Platten (SNMP)`,children:[m,g,A,j,M]}),t[39]=A,t[40]=M,t[41]=m,t[42]=F):F=t[42],F}function Ee(){let e=(0,V.c)(23),[t,n]=(0,H.useState)(null),r=l(t!==null),i=s(),a=r.data?.zuletzt,o,c;e[0]!==t||e[1]!==a?(o=()=>{if(t===null)return;if(a&&a.zeit*1e3>=t){n(null);return}let e=window.setTimeout(()=>n(null),18e4);return()=>window.clearTimeout(e)},c=[t,a],e[0]=t,e[1]=a,e[2]=o,e[3]=c):(o=e[2],c=e[3]),(0,H.useEffect)(o,c);let u=a?.ergebnis===`fehler`?`rot`:a?.ergebnis===`gesichert`?`gruen`:`grau`,d;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Täglich um 02:30 wandern die Einstellungen von Proxmox, AdGuard, NPMplus, den Arcane-Projekten und der KI-Box in dein privates Gitea-Repo — Geheimnisse geschwärzt. Jede Änderung ist dort als Vorher-nachher zu sehen.`}),e[4]=d):d=e[4];let f;e[5]!==u||e[6]!==r.isPending||e[7]!==a?(f=a?(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[(0,U.jsx)(P,{art:u,children:a.ergebnis===`gesichert`?`gesichert`:a.ergebnis===`fehler`?`gescheitert`:`unverändert`}),(0,U.jsxs)(`span`,{children:[M(new Date(a.zeit*1e3).toISOString()).toLowerCase(),` · `,a.text]})]}):(0,U.jsx)(`p`,{className:`text-sm text-text-3`,children:r.isPending?`Wird gelesen …`:`Noch kein Lauf.`}),e[5]=u,e[6]=r.isPending,e[7]=a,e[8]=f):f=e[8];let p=i.isPending||t!==null,m;e[9]===i?m=e[10]:(m=()=>i.mutate(void 0,{onSuccess:()=>n(Date.now())}),e[9]=i,e[10]=m);let h=t===null?`Jetzt sichern`:`Sichert …`,g;e[11]!==p||e[12]!==m||e[13]!==h?(g=(0,U.jsx)(N,{size:`sm`,variant:`outline`,disabled:p,onClick:m,children:h}),e[11]=p,e[12]=m,e[13]=h,e[14]=g):g=e[14];let _;e[15]===r.data?_=e[16]:(_=r.data?.repo&&(0,U.jsxs)(`a`,{href:r.data.repo,target:`_blank`,rel:`noopener`,className:`inline-flex items-center gap-1 text-sm text-cyan hover:underline`,children:[`In Gitea ansehen `,(0,U.jsx)(L,{className:`size-3.5`,"aria-hidden":!0})]}),e[15]=r.data,e[16]=_);let v;e[17]!==g||e[18]!==_?(v=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[g,_]}),e[17]=g,e[18]=_,e[19]=v):v=e[19];let y;return e[20]!==f||e[21]!==v?(y=(0,U.jsxs)(Q,{titel:`Konfig-Sicherung`,children:[d,f,v]}),e[20]=f,e[21]=v,e[22]=y):y=e[22],y}function De(e){let t=(0,V.c)(21),{h:n}=e,r=n.ausfuehrer,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,U.jsx)(`dt`,{className:`text-text-3`,children:`Ausführer`}),t[0]=i):i=t[0];let a=r.verbunden?`text-gruen-text`:`text-rot-text`,o=r.verbunden?`verbunden`:`meldet sich nicht`,s;t[1]===r.zuletzt?s=t[2]:(s=r.zuletzt?` · zuletzt ${M(new Date(r.zuletzt*1e3).toISOString()).toLowerCase()}`:``,t[1]=r.zuletzt,t[2]=s);let c;t[3]!==a||t[4]!==o||t[5]!==s?(c=(0,U.jsxs)(`dd`,{className:a,children:[o,s]}),t[3]=a,t[4]=o,t[5]=s,t[6]=c):c=t[6];let l;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,U.jsx)(`dt`,{className:`text-text-3`,children:`Modus`}),t[7]=l):l=t[7];let u=r.nur_lesen?`nur lesen — Updates sind gesperrt`:`voll: Snapshots, Sicherungen und Updates`,d;t[8]===u?d=t[9]:(d=(0,U.jsx)(`dd`,{className:`text-text-2`,children:u}),t[8]=u,t[9]=d);let f;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,U.jsx)(`dt`,{className:`text-text-3`,children:`Sicherungen`}),t[10]=f):f=t[10];let p=r.sicherung_speicher?`auf „${r.sicherung_speicher}“ (wo kein Snapshot geht)`:`kein Speicher gefunden`,m;t[11]===p?m=t[12]:(m=(0,U.jsx)(`dd`,{className:`text-text-2`,children:p}),t[11]=p,t[12]=m);let h;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,U.jsx)(`dt`,{className:`text-text-3`,children:`Wartezeit`}),t[13]=h):h=t[13];let g=n.karenz_h>0?`${n.karenz_h} Stunden nach einer Änderung am Update-Skript einer App`:`aus`,_;t[14]===g?_=t[15]:(_=(0,U.jsx)(`dd`,{className:`text-text-2`,children:g}),t[14]=g,t[15]=_);let v;return t[16]!==m||t[17]!==_||t[18]!==c||t[19]!==d?(v=(0,U.jsx)(Q,{titel:`Ausführer und Updates`,children:(0,U.jsxs)(`dl`,{className:`grid grid-cols-[auto_minmax(0,1fr)] gap-x-4 gap-y-2 text-sm`,children:[i,c,l,d,f,m,h,_]})}),t[16]=m,t[17]=_,t[18]=c,t[19]=d,t[20]=v):v=t[20],v}function Oe(){let e=(0,V.c)(21),t=o().data,n=u().data,r=t?.rolle===`homelab`||!!(n?.eingerichtet&&n.erreichbar),i=y(r),a;if(!r){let t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,U.jsx)(`p`,{className:`text-sm text-text-2`,children:`Der Homelab-Teil antwortet gerade nicht.`}),e[0]=t):t=e[0],a=t}else if(i.data){let t,n,o;e[4]===i.data?(t=e[5],n=e[6],o=e[7]):(t=(0,U.jsx)(Ce,{h:i.data}),n=(0,U.jsx)(we,{h:i.data}),o=(0,U.jsx)(Te,{h:i.data}),e[4]=i.data,e[5]=t,e[6]=n,e[7]=o);let s;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,U.jsx)(Ee,{}),e[8]=s):s=e[8];let c;e[9]===r?c=e[10]:(c=(0,U.jsx)(Q,{titel:`Wartungsfenster und Regel je Gerät`,children:(0,U.jsx)(Y,{aktiv:r})}),e[9]=r,e[10]=c);let l;e[11]===i.data?l=e[12]:(l=(0,U.jsx)(De,{h:i.data}),e[11]=i.data,e[12]=l);let u;e[13]!==t||e[14]!==n||e[15]!==o||e[16]!==c||e[17]!==l?(u=(0,U.jsxs)(U.Fragment,{children:[t,n,o,s,c,l]}),e[13]=t,e[14]=n,e[15]=o,e[16]=c,e[17]=l,e[18]=u):u=e[18],a=u}else{let t=i.error?.message,n;e[1]!==i.isPending||e[2]!==t?(n=(0,U.jsx)(ue,{laedt:i.isPending,fehler:t}),e[1]=i.isPending,e[2]=t,e[3]=n):n=e[3],a=n}let s;return e[19]===a?s=e[20]:(s=(0,U.jsx)($,{titel:`Homelab`,farbe:`homelab`,text:`Arcane und Docker, AdGuard, der Ausführer auf dem Proxmox-Host, Rückwege.`,children:a}),e[19]=a,e[20]=s),s}function ke(){let e=(0,V.c)(4),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,U.jsx)(Q,{titel:`Wie selbstständig Lucy handelt`,children:(0,U.jsx)(re,{})}),e[0]=t):t=e[0];let n;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,U.jsx)(Q,{titel:`Offene Rückfragen`,children:(0,U.jsx)(F,{leerText:`Gerade wartet keine Rückfrage auf dich.`})}),e[1]=n):n=e[1];let r;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,U.jsx)(Q,{titel:`Zuletzt beantwortet`,children:(0,U.jsx)(R,{})}),e[2]=r):r=e[2];let i;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,U.jsxs)($,{id:`lucy`,titel:`Lucy`,text:`Was sie aus eigenem Antrieb darf, ihre Rückfragen an dich und der Wochenbericht.`,children:[t,n,r,(0,U.jsx)(Q,{titel:`Wochenbericht`,children:(0,U.jsx)(ae,{})})]}),e[3]=i):i=e[3],i}function Ae(){let e=(0,V.c)(20),t=S(!0),n=t.error?.message,r;e[0]!==t.data||e[1]!==t.isPending||e[2]!==n?(r={e:t.data,laedt:t.isPending,fehler:n},e[0]=t.data,e[1]=t.isPending,e[2]=n,e[3]=r):r=e[3];let i=r,a;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(a=[],e[4]=a):a=e[4],(0,H.useEffect)(je,a);let o,s;e[5]===i?(o=e[6],s=e[7]):(o=(0,U.jsx)(ge,{...i}),s=(0,U.jsx)(ye,{...i}),e[5]=i,e[6]=o,e[7]=s);let c;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,U.jsx)(de,{offen:!0}),e[8]=c):c=e[8];let l;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,U.jsxs)(Q,{titel:`Hermes`,children:[(0,U.jsxs)(`a`,{href:`/hermes-ui/`,target:`_blank`,rel:`noopener`,className:`flex h-11 items-center gap-2 self-start rounded-xl border border-white/12 bg-white/[0.04] px-4 text-[15px] font-semibold hover:border-white/20 hover:bg-white/[0.08]`,children:[(0,U.jsx)(L,{className:`size-4`,"aria-hidden":!0}),` Hermes-Dashboard öffnen`]}),(0,U.jsx)(`p`,{className:`text-xs text-text-3`,children:`Chat, Sitzungen und Cron-Jobs verwaltet Hermes selbst. Es fragt nach seiner eigenen Anmeldung.`})]}),e[9]=l):l=e[9];let u;e[10]!==o||e[11]!==s?(u=(0,U.jsxs)($,{titel:`KI-Box`,farbe:`box`,text:`Wann sie sich aktualisiert, das Modell-Radar und Zugänge.`,children:[o,s,c,l]}),e[10]=o,e[11]=s,e[12]=u):u=e[12];let d,f;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,U.jsx)(Oe,{}),f=(0,U.jsx)(ke,{}),e[13]=d,e[14]=f):(d=e[13],f=e[14]);let p;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,U.jsx)($,{titel:`Meldungen`,text:`Telegram, Morgenmeldung und was sofort kommt.`,children:(0,U.jsx)(pe,{})}),e[15]=p):p=e[15];let m;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,U.jsx)($,{titel:`Software-Stand`,text:`Welcher Stand auf beiden Instanzen läuft.`,children:(0,U.jsx)(Se,{offen:!0})}),e[16]=m):m=e[16];let h;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,U.jsxs)(`p`,{className:`text-xs text-text-3 xl:col-span-2`,children:[`Logos der Dienste: `,(0,U.jsx)(`a`,{href:`https://selfh.st/icons`,target:`_blank`,rel:`noopener`,className:`underline-offset-4 hover:underline`,children:`selfh.st/icons`}),`, Lizenz CC BY 4.0. Die Marken gehören ihren Inhabern und dienen hier nur dem Wiedererkennen.`]}),e[17]=h):h=e[17];let g;return e[18]===u?g=e[19]:(g=(0,U.jsxs)(`div`,{className:`grid gap-5 md:gap-6 xl:grid-cols-2`,children:[u,d,f,p,m,h]}),e[18]=u,e[19]=g),g}function je(){if(window.location.hash!==`#lucy`)return;let e=Ne;e();let t=[700,1800].map(t=>window.setTimeout(e,t));return()=>t.forEach(Me)}function Me(e){return window.clearTimeout(e)}function Ne(){return document.getElementById(`lucy`)?.scrollIntoView({block:`start`})}export{Ae as EinstellungenSeite}; |