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>
2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
import{c as e,f as t,i as n,s as r,t as i,u as a}from"./button-Dd8hfusv.js";import{A as o,D as s,E as c,O as l,T as u,_ as d,a as f,c as p,g as m,h,k as g,o as _,s as v,t as y}from"./index-e_N1YCsL.js";import{t as b}from"./Bestaetigen-VrcNpcBb.js";var x=r(),S=t(a(),1),C=e(),w=[{id:`os`,name:`Betriebssystem`},{id:`engine`,name:`Motor (llama.cpp)`},{id:`swap`,name:`llama-swap`},{id:`hermes`,name:`Hermes`}];function T(e){let t=(0,x.c)(45),{id:n,name:r,gelesen:a,hatUpdate:o,fest:c,onStart:l,onFreigeben:u,laeuftGerade:d}=e,{data:p,isPending:m}=s(n),h;t[0]!==p||t[1]!==n?(h=f(n,p),t[0]=p,t[1]=n,t[2]=h):h=t[2];let g=h,_=o?g.neu??`neu`:null,v;t[3]!==p?.count||t[4]!==p?.summary||t[5]!==a||t[6]!==o||t[7]!==n||t[8]!==m?(v=a?o?p?.summary?.trim()||(n===`os`&&p?.count?`Paketliste unten in den Details.`:m?`Wird gelesen …`:``):`Aktuell.`:`Wird gerade geprüft …`,t[3]=p?.count,t[4]=p?.summary,t[5]=a,t[6]=o,t[7]=n,t[8]=m,t[9]=v):v=t[9];let y=v,b;t[10]===_?b=t[11]:(b=_?(0,C.jsx)(`span`,{className:`text-cyan`,children:_}):(0,C.jsx)(`span`,{className:`text-text-3`,children:`–`}),t[10]=_,t[11]=b);let S=b,w;t[12]===r?w=t[13]:(w=(0,C.jsx)(`span`,{role:`rowheader`,className:`text-[15px] font-semibold`,children:r}),t[12]=r,t[13]=w);let T;t[14]!==_||t[15]!==S?(T=_&&(0,C.jsxs)(C.Fragment,{children:[` → `,S]}),t[14]=_,t[15]=S,t[16]=T):T=t[16];let E;t[17]!==T||t[18]!==g.laeuft?(E=(0,C.jsxs)(`span`,{role:`cell`,className:`ziffern text-right text-sm text-text-2 md:hidden`,children:[g.laeuft,T]}),t[17]=T,t[18]=g.laeuft,t[19]=E):E=t[19];let D;t[20]===g.laeuft?D=t[21]:(D=(0,C.jsx)(`span`,{role:`cell`,className:`ziffern hidden text-sm text-text-2 md:block`,children:g.laeuft}),t[20]=g.laeuft,t[21]=D);let O;t[22]===S?O=t[23]:(O=(0,C.jsx)(`span`,{role:`cell`,className:`ziffern hidden text-sm md:block`,children:S}),t[22]=S,t[23]=O);let k;t[24]!==c||t[25]!==r?(k=c&&(0,C.jsxs)(`span`,{className:`mb-1.5 block text-bernstein`,children:[`Festgehalten seit `,c.seit,` auf `,c.version,`: `,c.grund,`. Der Sonntags-Lauf überspringt `,r,`.`]}),t[24]=c,t[25]=r,t[26]=k):k=t[26];let A;t[27]===y?A=t[28]:(A=(0,C.jsx)(`span`,{className:`line-clamp-3 whitespace-pre-line`,children:y}),t[27]=y,t[28]=A);let j;t[29]!==A||t[30]!==k?(j=(0,C.jsxs)(`span`,{role:`cell`,className:`col-span-2 text-sm leading-relaxed text-text-2 md:col-span-1`,children:[k,A]}),t[29]=A,t[30]=k,t[31]=j):j=t[31];let M;t[32]!==c||t[33]!==o||t[34]!==d||t[35]!==u||t[36]!==l?(M=(c||o)&&(0,C.jsxs)(`span`,{role:`cell`,className:`col-span-2 flex flex-wrap gap-2 md:col-span-1 md:flex-col md:items-end`,children:[c&&(0,C.jsx)(i,{variant:`outline`,size:`sm`,onClick:u,children:`Freigeben`}),o&&(0,C.jsx)(i,{variant:`outline`,size:`sm`,onClick:l,disabled:d,children:`Aktualisieren`})]}),t[32]=c,t[33]=o,t[34]=d,t[35]=u,t[36]=l,t[37]=M):M=t[37];let N;return t[38]!==j||t[39]!==M||t[40]!==w||t[41]!==E||t[42]!==D||t[43]!==O?(N=(0,C.jsxs)(`div`,{role:`row`,className:`grid grid-cols-[minmax(0,1fr)_auto] items-baseline gap-x-4 gap-y-2 border-t border-linie py-3.5 md:grid-cols-[170px_100px_170px_minmax(0,1fr)_auto] md:items-start`,children:[w,E,D,O,j,M]}),t[38]=j,t[39]=M,t[40]=w,t[41]=E,t[42]=D,t[43]=O,t[44]=N):N=t[44],N}var E={rot:`rot`,gelb:`bernstein`,gruen:`gruen`,info:`cyan`,grau:`grau`},D={rot:`bg-rot`,gelb:`bg-bernstein`,gruen:`bg-gruen`,info:`bg-cyan`,grau:`bg-text-3`};function O(e){let t=(0,x.c)(19),{lauf:n}=e,r;t[0]===n.start?r=t[1]:(r=p(n.start),t[0]=n.start,t[1]=r);let i;t[2]===r?i=t[3]:(i=(0,C.jsx)(`span`,{className:`ziffern text-sm text-text-3`,children:r}),t[2]=r,t[3]=i);let a;t[4]===n.anlass?a=t[5]:(a=(0,C.jsx)(`span`,{className:`min-w-0 text-[15px]`,children:n.anlass}),t[4]=n.anlass,t[5]=a);let o=E[n.stufe],s;t[6]!==n.titel||t[7]!==o?(s=(0,C.jsx)(_,{art:o,children:n.titel}),t[6]=n.titel,t[7]=o,t[8]=s):s=t[8];let c;t[9]!==i||t[10]!==a||t[11]!==s?(c=(0,C.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 md:grid-cols-[112px_minmax(0,1fr)_auto]`,children:[i,a,s]}),t[9]=i,t[10]=a,t[11]=s,t[12]=c):c=t[12];let l;t[13]!==n.stufe||t[14]!==n.zeilen?(l=n.stufe!==`grau`&&n.zeilen.length>0&&(0,C.jsx)(`ul`,{className:`m-0 flex list-none flex-col gap-1 p-0 md:pl-[124px]`,children:n.zeilen.map(k)}),t[13]=n.stufe,t[14]=n.zeilen,t[15]=l):l=t[15];let u;return t[16]!==c||t[17]!==l?(u=(0,C.jsxs)(`li`,{className:`flex flex-col gap-2 border-t border-linie py-3`,children:[c,l]}),t[16]=c,t[17]=l,t[18]=u):u=t[18],u}function k(e){return(0,C.jsxs)(`li`,{className:`flex items-baseline gap-2 text-sm leading-snug text-text-2`,children:[(0,C.jsx)(`span`,{"aria-hidden":!0,className:n(`size-1.5 shrink-0 -translate-y-px rounded-full`,D[e.stufe])}),(0,C.jsxs)(`span`,{className:`min-w-0`,children:[(0,C.jsx)(`span`,{className:`text-foreground`,children:e.baustein}),` · `,e.text]})]},`${e.baustein}-${e.text}`)}function A(e){let t=(0,x.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,C.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,C.jsx)(_,{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,C.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,C.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,C.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 j(e){return e.mtime?p(new Date(e.mtime*1e3).toISOString()):e.snapshot}function M(){let e=(0,x.c)(60),t=c(),n=d(),r=g(),a=u(),s=l(),f=h(),p=m(),_=o(),[E,D]=(0,S.useState)(null),O;e[0]===t.data?.updates.bausteine?O=e[1]:(O=new Set(t.data?.updates.bausteine.map(re)??[]),e[0]=t.data?.updates.bausteine,e[1]=O);let k=O,A;e[2]===t.data?.updates.festgehalten?A=e[3]:(A=new Map((t.data?.updates.festgehalten??[]).map(ne)),e[2]=t.data?.updates.festgehalten,e[3]=A);let M=A,F;if(e[4]!==M||e[5]!==f||e[6]!==n.data?.jobs||e[7]!==k||e[8]!==t.data?.updates||e[9]!==t.isPending||e[10]!==s){let r=(n.data?.jobs??[]).filter(te),a=r.some(P),o;e[12]===s?o=e[13]:(o=()=>s.mutate(`pruefen`),e[12]=s,e[13]=o);let c;e[14]!==o||e[15]!==s.isPending?(c=(0,C.jsx)(i,{variant:`outline`,onClick:o,disabled:s.isPending,children:`Nach Neuem suchen`}),e[14]=o,e[15]=s.isPending,e[16]=c):c=e[16];let l;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(l=()=>D({art:`alle`}),e[17]=l):l=e[17];let u;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,C.jsx)(`p`,{className:`-mt-2 text-[15px] text-text-2`,children:`Jeden Sonntag um 04:30 automatisch. Vorher wird gesichert, danach geprüft.`}),e[18]=u):u=e[18],F=(0,C.jsxs)(y,{titel:`Updates`,rechts:(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2.5`,children:[c,(0,C.jsx)(i,{onClick:l,disabled:a||k.size===0,children:`Alles jetzt aktualisieren`})]}),children:[u,t.isPending?(0,C.jsx)(v,{text:`Updates werden gelesen …`}):(0,C.jsxs)(`div`,{role:`table`,"aria-label":`Bausteine und ihre Updates`,className:`flex flex-col`,children:[(0,C.jsxs)(`div`,{role:`row`,className:`schild hidden grid-cols-[170px_100px_170px_minmax(0,1fr)_auto] gap-x-4 pb-2 text-xs font-semibold text-text-3 md:grid`,children:[(0,C.jsx)(`span`,{role:`columnheader`,children:`Baustein`}),(0,C.jsx)(`span`,{role:`columnheader`,children:`Läuft`}),(0,C.jsx)(`span`,{role:`columnheader`,children:`Neu`}),(0,C.jsx)(`span`,{role:`columnheader`,children:`Was sich ändert`}),(0,C.jsx)(`span`,{role:`columnheader`,className:`sr-only`,children:`Aktion`})]}),w.map(e=>(0,C.jsx)(T,{id:e.id,name:e.name,gelesen:t.data?.updates.gelesen??!1,hatUpdate:k.has(e.id),fest:M.get(e.id),laeuftGerade:a,onStart:()=>s.mutate(e.id),onFreigeben:()=>f.mutate(e.id)},e.id))]}),r.length>0&&(0,C.jsxs)(`div`,{className:`flex flex-col gap-2.5`,children:[(0,C.jsx)(`h3`,{className:`schild text-sm text-text-3`,children:`Laufende und letzte Aufträge`}),r.slice(-3).reverse().map(ee)]})]}),e[4]=M,e[5]=f,e[6]=n.data?.jobs,e[7]=k,e[8]=t.data?.updates,e[9]=t.isPending,e[10]=s,e[11]=F}else F=e[11];let I;e[19]!==r.data||e[20]!==r.isPending?(I=(0,C.jsx)(y,{titel:`Verlauf`,children:r.data?.laeufe.length?(0,C.jsx)(`ol`,{className:`m-0 flex list-none flex-col p-0`,children:r.data.laeufe.map(N)}):(0,C.jsx)(`p`,{className:`text-[15px] text-text-2`,children:r.isPending?`Wird gelesen …`:`Noch keine Update-Läufe aufgezeichnet.`})}),e[19]=r.data,e[20]=r.isPending,e[21]=I):I=e[21];let L;e[22]===p?L=e[23]:(L=()=>p.mutate(void 0),e[22]=p,e[23]=L);let R;e[24]!==p.isPending||e[25]!==L?(R=(0,C.jsx)(i,{variant:`outline`,size:`sm`,onClick:L,disabled:p.isPending,children:`Jetzt sichern`}),e[24]=p.isPending,e[25]=L,e[26]=R):R=e[26];let z;e[27]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,C.jsx)(`p`,{className:`-mt-2 text-[15px] text-text-2`,children:`Täglich um 03:35, mit Kopie auf einem zweiten Gerät.`}),e[27]=z):z=e[27];let B;if(e[28]!==a.data?.available||e[29]!==a.data?.backups){let t;e[31]===a.data?.available?t=e[32]:(t=e=>(0,C.jsxs)(`li`,{className:`flex items-center justify-between gap-3 border-t border-linie py-2.5`,children:[(0,C.jsx)(`span`,{className:`ziffern text-sm`,children:j(e)}),(0,C.jsxs)(`span`,{className:`flex items-center gap-3`,children:[(0,C.jsxs)(`span`,{className:`ziffern text-xs text-text-3`,children:[e.size_mb.toLocaleString(`de-DE`),` MB`]}),(0,C.jsx)(i,{variant:`ghost`,size:`sm`,disabled:!a.data?.available,onClick:()=>D({art:`zurueck`,datei:e.file,zeit:j(e)}),children:`Zurückspielen`})]})]},e.file),e[31]=a.data?.available,e[32]=t),B=(a.data?.backups??[]).slice(0,5).map(t),e[28]=a.data?.available,e[29]=a.data?.backups,e[30]=B}else B=e[30];let V;e[33]===B?V=e[34]:(V=(0,C.jsx)(`ul`,{className:`m-0 flex list-none flex-col p-0`,children:B}),e[33]=B,e[34]=V);let H;e[35]!==R||e[36]!==V?(H=(0,C.jsxs)(y,{titel:`Sicherungen`,rechts:R,children:[z,V]}),e[35]=R,e[36]=V,e[37]=H):H=e[37];let U;e[38]!==I||e[39]!==H?(U=(0,C.jsxs)(`div`,{className:`grid gap-5 md:gap-6 lg:grid-cols-[minmax(0,1.4fr)_minmax(0,1fr)]`,children:[I,H]}),e[38]=I,e[39]=H,e[40]=U):U=e[40];let W=E?.art===`alle`,G;e[41]===Symbol.for(`react.memo_cache_sentinel`)?(G=()=>D(null),e[41]=G):G=e[41];let K;e[42]===s?K=e[43]:(K=()=>{s.mutate(`alle`),D(null)},e[42]=s,e[43]=K);let q;e[44]!==W||e[45]!==K?(q=(0,C.jsx)(b,{offen:W,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:G,onJa:K}),e[44]=W,e[45]=K,e[46]=q):q=e[46];let J=E?.art===`zurueck`,Y=`Die Einstellungen von Hermes und llama-swap werden auf den Stand von ${E?.art===`zurueck`?E.zeit:``} gesetzt. Vorher wird der jetzige Stand gesichert. Die Dienste starten danach neu.`,X;e[47]===Symbol.for(`react.memo_cache_sentinel`)?(X=()=>D(null),e[47]=X):X=e[47];let Z;e[48]!==E||e[49]!==_?(Z=()=>{E?.art===`zurueck`&&_.mutate(E.datei),D(null)},e[48]=E,e[49]=_,e[50]=Z):Z=e[50];let Q;e[51]!==J||e[52]!==Y||e[53]!==Z?(Q=(0,C.jsx)(b,{offen:J,gefahr:!0,titel:`Sicherung zurückspielen?`,text:Y,knopf:`Zurückspielen`,onNein:X,onJa:Z}),e[51]=J,e[52]=Y,e[53]=Z,e[54]=Q):Q=e[54];let $;return e[55]!==U||e[56]!==q||e[57]!==Q||e[58]!==F?($=(0,C.jsxs)(C.Fragment,{children:[F,U,q,Q]}),e[55]=U,e[56]=q,e[57]=Q,e[58]=F,e[59]=$):$=e[59],$}function N(e){return(0,C.jsx)(O,{lauf:e},e.start)}function ee(e){return(0,C.jsx)(A,{job:e},e.id)}function P(e){return e.state===`running`||e.state===`queued`}function te(e){return e.group===`maintenance`}function ne(e){return[e.baustein,e]}function re(e){return e.id}export{M as UpdatesSeite}; |