Files
mission-control-v2/frontend/dist/assets/Updates-BTknqAf2.js
T
HitonabiandClaude Opus 5.5 f3af2adec3
Ampel / ampel (push) Failing after 21s
fix(boxwart): unbekannte /api-Pfade sind 404, Waechter nennt die echte Fehlerursache
- Der SPA-Rueckfall lieferte fuer unbekannte /api-Pfade die Startseite (HTML, 200). Im
  ersten Probelauf stuerzte der Start daran ab (/api/radar gab es noch nicht). Jetzt 404;
  api() behandelt Nicht-JSON als Fehler, der Router zeigt eine deutsche Fehleranzeige.
- Waechter: Skriptmeldungen ("! ...", fehlgeschlagen) gehen vor systemd-Rahmenzeilen wie
  "Failed to start ..." - die sagen nur, dass es scheiterte, nicht warum.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 21:44:11 +02:00

2 lines
14 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{a as e,c as t,f as n,i as r,s as i,t as a,u as o}from"./button-Dd8hfusv.js";import{a as s,i as c,n as l,o as u,r as d,s as f,t as p}from"./dist-CgRgLCFz.js";import{C as m,S as h,T as g,a as _,b as v,d as y,f as b,i as x,o as S,r as C,t as w,w as T,x as E}from"./index-BPkKGp97.js";var D=i(),O=n(o(),1),k=t();function A(e){let t=(0,D.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,k.jsx)(p,{"data-slot":`dialog`,...n}),t[2]=n,t[3]=r),r}function j(e){let t=(0,D.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,k.jsx)(u,{"data-slot":`dialog-portal`,...n}),t[2]=n,t[3]=r),r}function M(e){let t=(0,D.c)(8),n,i;t[0]===e?(n=t[1],i=t[2]):({className:n,...i}=e,t[0]=e,t[1]=n,t[2]=i);let a;t[3]===n?a=t[4]:(a=r(`fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,n),t[3]=n,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,k.jsx)(s,{"data-slot":`dialog-overlay`,className:a,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function N(t){let n=(0,D.c)(15),i,o,s,c;n[0]===t?(i=n[1],o=n[2],s=n[3],c=n[4]):({className:o,children:i,showCloseButton:c,...s}=t,n[0]=t,n[1]=i,n[2]=o,n[3]=s,n[4]=c);let u=c===void 0||c,f;n[5]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,k.jsx)(M,{}),n[5]=f):f=n[5];let p;n[6]===o?p=n[7]:(p=r(`fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,o),n[6]=o,n[7]=p);let m;n[8]===u?m=n[9]:(m=u&&(0,k.jsx)(l,{"data-slot":`dialog-close`,asChild:!0,children:(0,k.jsxs)(a,{variant:`ghost`,className:`absolute top-2 right-2`,size:`icon-sm`,children:[(0,k.jsx)(e,{}),(0,k.jsx)(`span`,{className:`sr-only`,children:`Schließen`})]})}),n[8]=u,n[9]=m);let h;return n[10]!==i||n[11]!==s||n[12]!==p||n[13]!==m?(h=(0,k.jsxs)(j,{children:[f,(0,k.jsxs)(d,{"data-slot":`dialog-content`,className:p,...s,children:[i,m]})]}),n[10]=i,n[11]=s,n[12]=p,n[13]=m,n[14]=h):h=n[14],h}function P(e){let t=(0,D.c)(8),n,i;t[0]===e?(n=t[1],i=t[2]):({className:n,...i}=e,t[0]=e,t[1]=n,t[2]=i);let a;t[3]===n?a=t[4]:(a=r(`flex flex-col gap-2`,n),t[3]=n,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,k.jsx)(`div`,{"data-slot":`dialog-header`,className:a,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function F(e){let t=(0,D.c)(14),n,i,o,s;t[0]===e?(n=t[1],i=t[2],o=t[3],s=t[4]):({className:i,showCloseButton:s,children:n,...o}=e,t[0]=e,t[1]=n,t[2]=i,t[3]=o,t[4]=s);let c=s!==void 0&&s,u;t[5]===i?u=t[6]:(u=r(`-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end`,i),t[5]=i,t[6]=u);let d;t[7]===c?d=t[8]:(d=c&&(0,k.jsx)(l,{asChild:!0,children:(0,k.jsx)(a,{variant:`outline`,children:`Schließen`})}),t[7]=c,t[8]=d);let f;return t[9]!==n||t[10]!==o||t[11]!==u||t[12]!==d?(f=(0,k.jsxs)(`div`,{"data-slot":`dialog-footer`,className:u,...o,children:[n,d]}),t[9]=n,t[10]=o,t[11]=u,t[12]=d,t[13]=f):f=t[13],f}function I(e){let t=(0,D.c)(8),n,i;t[0]===e?(n=t[1],i=t[2]):({className:n,...i}=e,t[0]=e,t[1]=n,t[2]=i);let a;t[3]===n?a=t[4]:(a=r(`font-heading text-base leading-none font-medium`,n),t[3]=n,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,k.jsx)(f,{"data-slot":`dialog-title`,className:a,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function L(e){let t=(0,D.c)(8),n,i;t[0]===e?(n=t[1],i=t[2]):({className:n,...i}=e,t[0]=e,t[1]=n,t[2]=i);let a;t[3]===n?a=t[4]:(a=r(`text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,n),t[3]=n,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,k.jsx)(c,{"data-slot":`dialog-description`,className:a,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function R(e){let t=(0,D.c)(26),{offen:n,titel:r,text:i,knopf:o,gefahr:s,onJa:c,onNein:l,children:u}=e,d;t[0]===l?d=t[1]:(d=e=>!e&&l(),t[0]=l,t[1]=d);let f;t[2]===r?f=t[3]:(f=(0,k.jsx)(I,{className:`schild text-xl`,children:r}),t[2]=r,t[3]=f);let p;t[4]===i?p=t[5]:(p=(0,k.jsx)(L,{className:`text-[15px] leading-relaxed text-text-2`,children:i}),t[4]=i,t[5]=p);let m;t[6]!==f||t[7]!==p?(m=(0,k.jsxs)(P,{children:[f,p]}),t[6]=f,t[7]=p,t[8]=m):m=t[8];let h;t[9]===l?h=t[10]:(h=(0,k.jsx)(a,{variant:`outline`,onClick:l,children:`Abbrechen`}),t[9]=l,t[10]=h);let g=s?`gefahr`:`default`,_;t[11]!==o||t[12]!==c||t[13]!==g?(_=(0,k.jsx)(a,{variant:g,onClick:c,children:o}),t[11]=o,t[12]=c,t[13]=g,t[14]=_):_=t[14];let v;t[15]!==h||t[16]!==_?(v=(0,k.jsxs)(F,{className:`gap-2 sm:gap-2`,children:[h,_]}),t[15]=h,t[16]=_,t[17]=v):v=t[17];let y;t[18]!==u||t[19]!==m||t[20]!==v?(y=(0,k.jsxs)(N,{className:`border-linie bg-panel sm:max-w-lg`,children:[m,u,v]}),t[18]=u,t[19]=m,t[20]=v,t[21]=y):y=t[21];let b;return t[22]!==n||t[23]!==d||t[24]!==y?(b=(0,k.jsx)(A,{open:n,onOpenChange:d,children:y}),t[22]=n,t[23]=d,t[24]=y,t[25]=b):b=t[25],b}var z=[{id:`os`,name:`Betriebssystem`},{id:`engine`,name:`Motor (llama.cpp)`},{id:`swap`,name:`llama-swap`},{id:`hermes`,name:`Hermes`}];function B(e){let t=(0,D.c)(29),{id:n,name:r,hatUpdate:i,onStart:o,laeuftGerade:s}=e,{data:c,isPending:l}=h(n),u;t[0]!==c||t[1]!==n?(u=C(n,c),t[0]=c,t[1]=n,t[2]=u):u=t[2];let d=u,f=i?d.neu??`neu`:null,p;t[3]!==c?.count||t[4]!==c?.summary||t[5]!==i||t[6]!==n||t[7]!==l?(p=i?c?.summary?.trim()||(n===`os`&&c?.count?`Paketliste unten in den Details.`:l?`Wird gelesen …`:``):`Aktuell.`,t[3]=c?.count,t[4]=c?.summary,t[5]=i,t[6]=n,t[7]=l,t[8]=p):p=t[8];let m=p,g;t[9]===r?g=t[10]:(g=(0,k.jsx)(`th`,{scope:`row`,className:`py-3.5 pr-4 text-left font-sans text-[15px] font-semibold`,children:r}),t[9]=r,t[10]=g);let _;t[11]===d.laeuft?_=t[12]:(_=(0,k.jsx)(`td`,{className:`ziffern py-3.5 pr-4 text-sm text-text-2`,children:d.laeuft}),t[11]=d.laeuft,t[12]=_);let v;t[13]===f?v=t[14]:(v=(0,k.jsx)(`td`,{className:`ziffern py-3.5 pr-4 text-sm`,children:f?(0,k.jsx)(`span`,{className:`text-cyan`,children:f}):(0,k.jsx)(`span`,{className:`text-text-3`,children:``})}),t[13]=f,t[14]=v);let y;t[15]===m?y=t[16]:(y=(0,k.jsx)(`td`,{className:`py-3.5 pr-4 text-sm leading-relaxed text-text-2`,children:(0,k.jsx)(`span`,{className:`line-clamp-3 whitespace-pre-line`,children:m})}),t[15]=m,t[16]=y);let b;t[17]!==i||t[18]!==s||t[19]!==o?(b=i&&(0,k.jsx)(a,{variant:`outline`,size:`sm`,onClick:o,disabled:s,children:`Aktualisieren`}),t[17]=i,t[18]=s,t[19]=o,t[20]=b):b=t[20];let x;t[21]===b?x=t[22]:(x=(0,k.jsx)(`td`,{className:`py-2.5 text-right`,children:b}),t[21]=b,t[22]=x);let S;return t[23]!==g||t[24]!==_||t[25]!==v||t[26]!==y||t[27]!==x?(S=(0,k.jsxs)(`tr`,{className:`border-t border-linie align-top`,children:[g,_,v,y,x]}),t[23]=g,t[24]=_,t[25]=v,t[26]=y,t[27]=x,t[28]=S):S=t[28],S}function V(e){let t=(0,D.c)(13),{job:n}=e,r=n.state===`done`?`gruen`:n.state===`failed`?`rot`:`cyan`,i=n.state===`done`?`Fertig`:n.state===`failed`?`Fehler`:n.state===`queued`?`Wartet`:`Läuft`,a;t[0]===n.label?a=t[1]:(a=(0,k.jsx)(`span`,{className:`text-[15px] font-semibold`,children:n.label}),t[0]=n.label,t[1]=a);let o;t[2]!==r||t[3]!==i?(o=(0,k.jsx)(x,{art:r,children:i}),t[2]=r,t[3]=i,t[4]=o):o=t[4];let s;t[5]!==a||t[6]!==o?(s=(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[a,o]}),t[5]=a,t[6]=o,t[7]=s):s=t[7];let c;t[8]===n.log?c=t[9]:(c=n.log&&n.log.length>0&&(0,k.jsx)(`pre`,{className:`ziffern max-h-40 overflow-auto rounded-md bg-[#0b0d0f] p-2 text-xs whitespace-pre-wrap text-text-2`,children:n.log.slice(-8).join(`
`)}),t[8]=n.log,t[9]=c);let l;return t[10]!==s||t[11]!==c?(l=(0,k.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-xl border border-linie bg-erhaben/50 p-3`,children:[s,c]}),t[10]=s,t[11]=c,t[12]=l):l=t[12],l}function H(e){return e.mtime?S(new Date(e.mtime*1e3).toISOString()):e.snapshot}function U(){let e=(0,D.c)(55),t=E(),n=b(),r=T(),i=v(),o=m(),s=y(),c=g(),[l,u]=(0,O.useState)(null),d;e[0]===t.data?.updates.bausteine?d=e[1]:(d=new Set(t.data?.updates.bausteine.map(J)??[]),e[0]=t.data?.updates.bausteine,e[1]=d);let f=d,p;if(e[2]!==n.data?.jobs||e[3]!==f||e[4]!==t.isPending||e[5]!==o){let r=(n.data?.jobs??[]).filter(q),i=r.some(K),s;e[7]===o?s=e[8]:(s=()=>o.mutate(`pruefen`),e[7]=o,e[8]=s);let c;e[9]!==s||e[10]!==o.isPending?(c=(0,k.jsx)(a,{variant:`outline`,onClick:s,disabled:o.isPending,children:`Nach Neuem suchen`}),e[9]=s,e[10]=o.isPending,e[11]=c):c=e[11];let l;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(l=()=>u({art:`alle`}),e[12]=l):l=e[12];let d;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,k.jsx)(`p`,{className:`-mt-2 text-[15px] text-text-2`,children:`Jeden Sonntag um 04:30 automatisch. Vorher wird gesichert, danach geprüft.`}),e[13]=d):d=e[13],p=(0,k.jsxs)(w,{titel:`Updates`,rechts:(0,k.jsxs)(`div`,{className:`flex flex-wrap gap-2.5`,children:[c,(0,k.jsx)(a,{onClick:l,disabled:i||f.size===0,children:`Alles jetzt aktualisieren`})]}),children:[d,t.isPending?(0,k.jsx)(_,{text:`Updates werden gelesen …`}):(0,k.jsx)(`div`,{className:`overflow-x-auto`,children:(0,k.jsxs)(`table`,{className:`w-full min-w-[680px] border-collapse`,children:[(0,k.jsx)(`thead`,{children:(0,k.jsxs)(`tr`,{className:`schild text-left text-xs text-text-3`,children:[(0,k.jsx)(`th`,{scope:`col`,className:`pb-2 font-semibold`,children:`Baustein`}),(0,k.jsx)(`th`,{scope:`col`,className:`pb-2 font-semibold`,children:`Läuft`}),(0,k.jsx)(`th`,{scope:`col`,className:`pb-2 font-semibold`,children:`Neu`}),(0,k.jsx)(`th`,{scope:`col`,className:`pb-2 font-semibold`,children:`Was sich ändert`}),(0,k.jsx)(`th`,{scope:`col`,className:`pb-2 text-right font-semibold`,children:(0,k.jsx)(`span`,{className:`sr-only`,children:`Aktion`})})]})}),(0,k.jsx)(`tbody`,{children:z.map(e=>(0,k.jsx)(B,{id:e.id,name:e.name,hatUpdate:f.has(e.id),laeuftGerade:i,onStart:()=>o.mutate(e.id)},e.id))})]})}),r.length>0&&(0,k.jsxs)(`div`,{className:`flex flex-col gap-2.5`,children:[(0,k.jsx)(`h3`,{className:`schild text-sm text-text-3`,children:`Laufende und letzte Aufträge`}),r.slice(-3).reverse().map(G)]})]}),e[2]=n.data?.jobs,e[3]=f,e[4]=t.isPending,e[5]=o,e[6]=p}else p=e[6];let h;e[14]!==r.data||e[15]!==r.isPending?(h=(0,k.jsx)(w,{titel:`Verlauf`,children:r.data?.laeufe.length?(0,k.jsx)(`ol`,{className:`m-0 flex list-none flex-col p-0`,children:r.data.laeufe.map(W)}):(0,k.jsx)(`p`,{className:`text-[15px] text-text-2`,children:r.isPending?`Wird gelesen …`:`Noch keine Update-Läufe aufgezeichnet.`})}),e[14]=r.data,e[15]=r.isPending,e[16]=h):h=e[16];let x;e[17]===s?x=e[18]:(x=()=>s.mutate(void 0),e[17]=s,e[18]=x);let S;e[19]!==s.isPending||e[20]!==x?(S=(0,k.jsx)(a,{variant:`outline`,size:`sm`,onClick:x,disabled:s.isPending,children:`Jetzt sichern`}),e[19]=s.isPending,e[20]=x,e[21]=S):S=e[21];let C;e[22]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,k.jsx)(`p`,{className:`-mt-2 text-[15px] text-text-2`,children:`Täglich um 03:35, mit Kopie auf einem zweiten Gerät.`}),e[22]=C):C=e[22];let A;if(e[23]!==i.data?.available||e[24]!==i.data?.backups){let t;e[26]===i.data?.available?t=e[27]:(t=e=>(0,k.jsxs)(`li`,{className:`flex items-center justify-between gap-3 border-t border-linie py-2.5`,children:[(0,k.jsx)(`span`,{className:`ziffern text-sm`,children:H(e)}),(0,k.jsxs)(`span`,{className:`flex items-center gap-3`,children:[(0,k.jsxs)(`span`,{className:`ziffern text-xs text-text-3`,children:[e.size_mb.toLocaleString(`de-DE`),` MB`]}),(0,k.jsx)(a,{variant:`ghost`,size:`sm`,disabled:!i.data?.available,onClick:()=>u({art:`zurueck`,datei:e.file,zeit:H(e)}),children:`Zurückspielen`})]})]},e.file),e[26]=i.data?.available,e[27]=t),A=(i.data?.backups??[]).slice(0,5).map(t),e[23]=i.data?.available,e[24]=i.data?.backups,e[25]=A}else A=e[25];let j;e[28]===A?j=e[29]:(j=(0,k.jsx)(`ul`,{className:`m-0 flex list-none flex-col p-0`,children:A}),e[28]=A,e[29]=j);let M;e[30]!==S||e[31]!==j?(M=(0,k.jsxs)(w,{titel:`Sicherungen`,rechts:S,children:[C,j]}),e[30]=S,e[31]=j,e[32]=M):M=e[32];let N;e[33]!==h||e[34]!==M?(N=(0,k.jsxs)(`div`,{className:`grid gap-5 md:gap-6 lg:grid-cols-[minmax(0,1.4fr)_minmax(0,1fr)]`,children:[h,M]}),e[33]=h,e[34]=M,e[35]=N):N=e[35];let P=l?.art===`alle`,F;e[36]===Symbol.for(`react.memo_cache_sentinel`)?(F=()=>u(null),e[36]=F):F=e[36];let I;e[37]===o?I=e[38]:(I=()=>{o.mutate(`alle`),u(null)},e[37]=o,e[38]=I);let L;e[39]!==P||e[40]!==I?(L=(0,k.jsx)(R,{offen:P,titel:`Alles jetzt aktualisieren?`,text:`Betriebssystem, Motor, llama-swap und Hermes werden nacheinander aktualisiert. Vorher wird gesichert, danach geprüft. Lucy ist dabei ein paar Minuten nicht erreichbar.`,knopf:`Aktualisieren`,onNein:F,onJa:I}),e[39]=P,e[40]=I,e[41]=L):L=e[41];let V=l?.art===`zurueck`,U=`Die Einstellungen von Hermes und llama-swap werden auf den Stand von ${l?.art===`zurueck`?l.zeit:``} gesetzt. Vorher wird der jetzige Stand gesichert. Die Dienste starten danach neu.`,Y;e[42]===Symbol.for(`react.memo_cache_sentinel`)?(Y=()=>u(null),e[42]=Y):Y=e[42];let X;e[43]!==l||e[44]!==c?(X=()=>{l?.art===`zurueck`&&c.mutate(l.datei),u(null)},e[43]=l,e[44]=c,e[45]=X):X=e[45];let Z;e[46]!==V||e[47]!==U||e[48]!==X?(Z=(0,k.jsx)(R,{offen:V,gefahr:!0,titel:`Sicherung zurückspielen?`,text:U,knopf:`Zurückspielen`,onNein:Y,onJa:X}),e[46]=V,e[47]=U,e[48]=X,e[49]=Z):Z=e[49];let Q;return e[50]!==p||e[51]!==L||e[52]!==Z||e[53]!==N?(Q=(0,k.jsxs)(k.Fragment,{children:[p,N,L,Z]}),e[50]=p,e[51]=L,e[52]=Z,e[53]=N,e[54]=Q):Q=e[54],Q}function W(e){let t=e.status===`completed`,n=t?`gruen`:e.status===`failed`?`rot`:`cyan`;return(0,k.jsxs)(`li`,{className:`grid grid-cols-[112px_minmax(0,1fr)_auto] items-start gap-3 border-t border-linie py-3`,children:[(0,k.jsx)(`span`,{className:`ziffern text-sm text-text-3`,children:e.start?S(e.start):``}),(0,k.jsxs)(`span`,{className:`min-w-0 text-[15px]`,children:[e.job,e.fehler&&(0,k.jsx)(`span`,{className:`block text-sm text-rot-text`,children:e.fehler})]}),(0,k.jsx)(x,{art:n,children:t?`Durchgelaufen`:e.status===`failed`?`Fehlgeschlagen`:`Läuft`})]},`${e.start}-${e.job}`)}function G(e){return(0,k.jsx)(V,{job:e},e.id)}function K(e){return e.state===`running`||e.state===`queued`}function q(e){return e.group===`maintenance`}function J(e){return e.id}export{U as UpdatesSeite};