Files
mission-control-v2/frontend/dist/assets/Befehlssuche-BtKs2VHg.js
T
HitonabiandClaude Opus 5.5 75c6037431 Später · 20 Konfig-Sicherung ins private Gitea-Repo, Geheimnisse geschwärzt
- 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>
2026-09-26 14:23:19 +02:00

1 line
5.8 KiB
JavaScript

import{a as e,c as t,i as n,r,t as i}from"./dist-aE7UmubC.js";import{A as a,K as o,v as s}from"./abfragen-CLTLeU-R.js";import{J as c,_ as l,b as u,bt as d,q as f,ut as p,v as m,y as h}from"./index-hnnYWPzT.js";var g=t(e(),1),_=r(),v={"proxmox-host":`host proxmox`,container:`lxc container ct`,vm:`vm qemu`},y={lxc:`container`,ct:`container`,container:`container`,vm:`vm`,qemu:`vm`,host:`proxmox-host`,pve:`proxmox-host`};function b(e){let t=c.map(e=>({id:`seite:${e.to}`,text:e.label,unter:f[e.ort],to:e.to,stichworte:e.to.replace(/\//g,` `)}));t.push({id:`lucy:freiheiten`,text:`Lucys Freiheiten`,unter:`Einstellungen → Lucy`,to:`/einstellungen`,hash:`lucy`,stichworte:`lucy autonomie selbst fragen`},{id:`lucy:rueckfragen`,text:`Rückfragen an dich`,unter:`Einstellungen → Lucy`,to:`/einstellungen`,hash:`lucy`,stichworte:`lucy ja nein telegram rueckfrage`},{id:`lucy:wochenbericht`,text:`Wochenbericht`,unter:`Einstellungen → Lucy`,to:`/einstellungen`,hash:`lucy`,stichworte:`lucy bericht sonntag`});for(let n of e){let e={geraet:{art:n.art,offen:n.offen},stichworte:`${v[n.art]??``} ${n.id}`};t.push({...e,id:`${n.id}:cockpit`,text:n.name,unter:`Gerät im Homelab-Cockpit`,to:`/homelab`,hash:`geraet-${n.id}`},{...e,id:`${n.id}:zeitleiste`,text:`${n.name} · Zeitleiste`,unter:`Was an diesem Gerät geschah`,to:`/homelab/protokoll`,hash:n.id},{...e,id:`${n.id}:monitoring`,text:`${n.name} · Monitoring`,unter:`CPU, Speicher, Platte, Netz`,to:`/homelab/monitoring`,hash:n.id}),n.art!==`proxmox-host`&&t.push({...e,id:`${n.id}:snapshot`,text:`${n.name} · Snapshots`,unter:`Snapshot anlegen, Rückweg testen`,to:`/homelab/snapshots`}),n.offen>0&&t.push({...e,id:`${n.id}:update`,text:`${n.name} · Update`,unter:`${n.offen} ${n.offen===1?`Update steht`:`Updates stehen`} an`,to:`/homelab/updates`})}return t}function x(e){let t=null,n=null,r=[];for(let i of e.toLowerCase().split(/\s+/).filter(Boolean)){let[e,a]=i.split(`:`,2);a!==void 0&&e===`typ`?t=y[a]??a:a!==void 0&&e===`update`?n=[`ja`,`j`,`1`,`true`].includes(a):r.push(i)}return{typ:t,update:n,woerter:r}}function S(e,t,n=12){let{typ:r,update:i,woerter:a}=x(t),o=e.filter(e=>{if((r||i!==null)&&!e.geraet||r&&e.geraet?.art!==r||i!==null&&e.geraet.offen>0!==i)return!1;let t=`${e.text} ${e.unter} ${e.stichworte??``}`.toLowerCase();return a.every(e=>t.includes(e))}),s=a[0],c=e=>(s&&e.text.toLowerCase().startsWith(s)?0:1)+(e.geraet?.5:0);return[...o].sort((e,t)=>c(e)-c(t)).slice(0,n)}var C=n();function w(e){let t=(0,_.c)(46),{onSchliessen:n}=e,r=d(),c=a(),f=o(),v=c.data?.rolle===`homelab`||!!(f.data?.eingerichtet&&f.data.erreichbar),y=s(v).data?.ziele,x;t[0]===y?x=t[1]:(x=y??[],t[0]=y,t[1]=x);let w;t[2]===x?w=t[3]:(w=b(x),t[2]=x,t[3]=w);let T=w,[E,D]=(0,g.useState)(``),[O,k]=(0,g.useState)(0),A;t[4]!==T||t[5]!==E?(A=S(T,E),t[4]=T,t[5]=E,t[6]=A):A=t[6];let j=A,M=Math.min(O,Math.max(0,j.length-1)),N;t[7]!==r||t[8]!==n||t[9]!==j?(N=function(e){let t=j[e];t&&(n(),r({to:t.to,hash:t.hash}))},t[7]=r,t[8]=n,t[9]=j,t[10]=N):N=t[10];let P=N,F;t[11]===n?F=t[12]:(F=e=>!e&&n(),t[11]=n,t[12]=F);let I,L;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,C.jsx)(u,{className:`sr-only`,children:`Suchen`}),L=(0,C.jsx)(h,{className:`sr-only`,children:`Geräte, Seiten und Aktionen finden. Filter: typ:lxc, typ:vm, typ:host, update:ja.`}),t[13]=I,t[14]=L):(I=t[13],L=t[14]);let R;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,C.jsx)(p,{className:`size-4 shrink-0 text-text-3`,"aria-hidden":!0}),t[15]=R):R=t[15];let z=j[M]?`befehl-${M}`:void 0,B;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(B=e=>{D(e.target.value),k(0)},t[16]=B):B=t[16];let V;t[17]!==M||t[18]!==P||t[19]!==j.length?(V=e=>{e.key===`ArrowDown`?(e.preventDefault(),k(Math.min(M+1,j.length-1))):e.key===`ArrowUp`?(e.preventDefault(),k(Math.max(M-1,0))):e.key===`Enter`&&(e.preventDefault(),P(M))},t[17]=M,t[18]=P,t[19]=j.length,t[20]=V):V=t[20];let H;t[21]!==E||t[22]!==V||t[23]!==z?(H=(0,C.jsx)(`input`,{autoFocus:!0,role:`combobox`,"aria-expanded":!0,"aria-controls":`befehle`,"aria-activedescendant":z,"aria-label":`Suchen`,value:E,placeholder:`Gerät, Seite oder Aktion — etwa „AdGuard Snapshot“ oder „typ:lxc update:ja“`,onChange:B,onKeyDown:V,className:`h-14 min-w-0 flex-1 bg-transparent text-[16px] outline-none placeholder:text-text-3`}),t[21]=E,t[22]=V,t[23]=z,t[24]=H):H=t[24];let U;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,C.jsx)(`kbd`,{className:`hidden rounded-md border border-white/10 px-1.5 py-0.5 text-[11px] text-text-3 sm:block`,children:`Esc`}),t[25]=U):U=t[25];let W;t[26]===H?W=t[27]:(W=(0,C.jsxs)(`div`,{className:`flex items-center gap-3 border-b border-white/[0.08] px-4`,children:[R,H,U]}),t[26]=H,t[27]=W);let G;t[28]===j.length?G=t[29]:(G=j.length===0&&(0,C.jsx)(`li`,{className:`px-3 py-6 text-center text-sm text-text-3`,children:`Nichts gefunden.`}),t[28]=j.length,t[29]=G);let K;if(t[30]!==M||t[31]!==P||t[32]!==j){let e;t[34]!==M||t[35]!==P?(e=(e,t)=>(0,C.jsxs)(`li`,{id:`befehl-${t}`,role:`option`,"aria-selected":t===M,onMouseEnter:()=>k(t),onClick:()=>P(t),className:i(`flex cursor-pointer flex-col rounded-xl px-3 py-2.5`,t===M&&`bg-white/[0.07]`),children:[(0,C.jsx)(`span`,{className:`text-[15px] font-medium`,children:e.text}),(0,C.jsx)(`span`,{className:`text-[13px] text-text-3`,children:e.unter})]},e.id),t[34]=M,t[35]=P,t[36]=e):e=t[36],K=j.map(e),t[30]=M,t[31]=P,t[32]=j,t[33]=K}else K=t[33];let q;t[37]!==G||t[38]!==K?(q=(0,C.jsxs)(`ul`,{id:`befehle`,role:`listbox`,"aria-label":`Treffer`,className:`m-0 max-h-[60vh] list-none overflow-y-auto p-2`,children:[G,K]}),t[37]=G,t[38]=K,t[39]=q):q=t[39];let J;t[40]!==W||t[41]!==q?(J=(0,C.jsxs)(m,{className:`top-[12vh] translate-y-0 gap-0 border-white/10 bg-[#0e121a] p-0 sm:max-w-xl`,showCloseButton:!1,children:[I,L,W,q]}),t[40]=W,t[41]=q,t[42]=J):J=t[42];let Y;return t[43]!==J||t[44]!==F?(Y=(0,C.jsx)(l,{open:!0,onOpenChange:F,children:J}),t[43]=J,t[44]=F,t[45]=Y):Y=t[45],Y}export{w as Befehlssuche};