diff --git a/frontend/src/panels/ModelsPanel.svelte b/frontend/src/panels/ModelsPanel.svelte index d2077ce..2885ab1 100644 --- a/frontend/src/panels/ModelsPanel.svelte +++ b/frontend/src/panels/ModelsPanel.svelte @@ -94,13 +94,18 @@ } catch (e: any) { toast(e.message, true) } } - function capTags(caps: string[]) { - if (!caps?.length) return '–' - return caps.map((c: string) => - c === 'Code' ? 'Code' - : c === 'Bild' ? 'Bild' - : 'Text' - ).join(' ') + function capChips(cap: any) { + if (!cap) return '–' + const chips: string[] = [] + if (cap.coder) chips.push('Code') + if (cap.vision) chips.push('Bild') + if (cap.reasoning) chips.push('🧠 Reason') + if (cap.moe) chips.push(`🧩 MoE${cap.active_b ? ' ·' + cap.active_b + 'B' : ''}`) + if (cap.tools === 'yes') chips.push('🛠 Tools') + else if (cap.tools === 'likely') chips.push('🛠 Tools?') + if (cap.embedding) chips.push('🔢 Embed') + if (!cap.coder && !cap.vision && !cap.embedding) chips.unshift('Text') + return chips.length ? chips.join(' ') : '–' } function details(meta: any) { @@ -183,7 +188,7 @@ {/each} -
str: return f.read(ru64()).decode("utf-8", "replace") + + def rval(t: int): + if t == 8: return rstr() + if t == 0: return struct.unpack(" dict: + """Capability-Tag-Set fuer ein Modell. Alle Quellen optional — nutzt, was da ist.""" + low = (name or "").lower() + cmdl = (cmd or "").lower() + hf = hf or {} + + meta = _read_gguf_meta(gguf_path) if gguf_path else {} + arch = str(meta.get("architecture") or hf.get("architecture") or "").lower() + tags = [str(t).lower() for t in (hf.get("tags") or [])] + chat_tpl = str(hf.get("chat_template") or "") + + # --- MoE --- + expert_count = int(meta.get("expert_count") or 0) + moe = ( + expert_count > 1 + or any(a in arch for a in _MOE_ARCH) + or bool(re.search(r"\d+x\d+\.?\d*b", low)) # 8x7B + or bool(re.search(r"a\d+\.?\d*b", low)) # 30B-A3B + ) + active_b = extract_active_params_b(name) + + # --- Params / Kontext --- + pcount = int(meta.get("parameter_count") or 0) + params_b = round(pcount / 1e9, 1) if pcount else extract_params_b(name) + ctx = meta.get("context_length") + if not ctx: + m = re.search(r"-(?:c|-ctx-size)\s+(\d+)", cmdl) + ctx = int(m.group(1)) if m else None + + # --- Tools: yes (bestaetigt) | likely (Familie) | no --- + tool_confirmed = "--jinja" in cmdl or "tool_call" in chat_tpl or "" in chat_tpl + tool_family = any(fam in low for fam in _TOOL_FAMILIES) or "function-calling" in tags + tools = "yes" if tool_confirmed else ("likely" if tool_family else "no") + + vision = "--mmproj" in cmdl or "vl" in arch or "clip" in arch or any(k in low for k in _VISION_KW) + coder = any(k in low for k in _CODE_KW) + reasoning = any(k in low for k in _REASON_KW) or "reasoning" in tags + embedding = "bert" in arch or any(k in low for k in _EMBED_KW) + + return { + "moe": moe, + "active_b": active_b, + "tools": tools, # yes | likely | no + "vision": vision, + "coder": coder, + "reasoning": reasoning, + "embedding": embedding, + "ctx": ctx, + "params_b": params_b or None, + "arch": arch or None, + } diff --git a/routers/models.py b/routers/models.py index ea16e22..6082c80 100644 --- a/routers/models.py +++ b/routers/models.py @@ -20,6 +20,7 @@ from routers.cookbook import hf_file_size from llamaswap import (_swap_get, read_config, write_config, model_id_from_path, set_role_alias, ROLE_IDS) from hw_math import extract_params_b, max_ctx_for, estimate_memory_gb +from model_caps import capabilities import re import os import shutil @@ -90,6 +91,7 @@ def status(): size_bytes = None quant = "" filename = "" + path = "" m_path = re.search(r'-(?:m|-model)\s+([^\s]+)', cmd) if m_path: path = m_path.group(1).replace("'", "").replace('"', '') @@ -137,6 +139,10 @@ def status(): "optimal_ctx": (_oc := (max_ctx_for(_pb, quant or "Q4_K_M", ram_gb) if ram_gb else None)), "peak_ram_gb": round(estimate_memory_gb(_pb, quant or "Q4_K_M", ctx), 1), "peak_ram_optimal_gb": (round(estimate_memory_gb(_pb, quant or "Q4_K_M", _oc), 1) if _oc else None), + "capabilities": capabilities( + name=filename or name, cmd=cmd, + gguf_path=(path if (path and os.path.exists(path)) else ""), + ), } } # Laufende Download-Jobs erkennnen: Modell bekommt state "downloading" + Fortschritt. diff --git a/static/dist/main.js b/static/dist/main.js index cb922f5..ff2f4c8 100644 --- a/static/dist/main.js +++ b/static/dist/main.js @@ -1,4 +1,4 @@ -var ll=Object.defineProperty;var Dr=e=>{throw TypeError(e)};var ol=(e,n,a)=>n in e?ll(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a;var vn=(e,n,a)=>ol(e,typeof n!="symbol"?n+"":n,a),Ui=(e,n,a)=>n.has(e)||Dr("Cannot "+a);var m=(e,n,a)=>(Ui(e,n,"read from private field"),a?a.call(e):n.get(e)),qe=(e,n,a)=>n.has(e)?Dr("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,a),Ke=(e,n,a,s)=>(Ui(e,n,"write to private field"),s?s.call(e,a):n.set(e,a),a),lt=(e,n,a)=>(Ui(e,n,"access private method"),a);var yr=Array.isArray,dl=Array.prototype.indexOf,zi=Array.prototype.includes,Fi=Array.from,cl=Object.defineProperty,ai=Object.getOwnPropertyDescriptor,vl=Object.getOwnPropertyDescriptors,ul=Object.prototype,pl=Array.prototype,vs=Object.getPrototypeOf,Ir=Object.isExtensible;const fl=()=>{};function hl(e){for(var n=0;n {e=s,n=l});return{promise:a,resolve:e,reject:n}}function Hn(e,n){if(Array.isArray(e))return e;if(n===void 0||!(Symbol.iterator in e))return Array.from(e);const a=[];for(const s of e)if(a.push(s),a.length===n)break;return a}const tn=2,Na=4,Ki=8,ps=1<<24,Cn=16,zn=32,la=64,sr=128,kn=512,Jt=1024,Xt=2048,Kn=4096,an=8192,wn=16384,Ha=32768,lr=1<<25,qa=65536,$i=1<<17,gl=1<<18,Ja=1<<19,ml=1<<20,Bn=1<<25,Sa=65536,Pi=1<<21,Pa=1<<22,sa=1<<23,Da=Symbol("$state"),bl=Symbol(""),Si=Symbol("attributes"),or=Symbol("class"),dr=Symbol("style"),Ya=Symbol("text"),Mi=Symbol("form reset"),Ni=new class extends Error{constructor(){super(...arguments);vn(this,"name","StaleReactionError");vn(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var ls;const _l=!!((ls=globalThis.document)!=null&&ls.contentType)&&globalThis.document.contentType.includes("xml");function fs(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function yl(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function xl(e,n,a){throw new Error("https://svelte.dev/e/each_key_duplicate")}function kl(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function wl(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Sl(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Ml(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function El(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Al(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Cl(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Tl(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const zl=1,$l=2,hs=4,Pl=8,Dl=16,Il=1,Ll=2,Ht=Symbol("uninitialized"),gs="http://www.w3.org/1999/xhtml",Ol="http://www.w3.org/2000/svg",Bl="http://www.w3.org/1998/Math/MathML";function Rl(){console.warn("https://svelte.dev/e/derived_inert")}function Fl(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Kl(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function ms(e){return e===this.v}function Nl(e,n){return e!=e?n==n:e!==n||e!==null&&typeof e=="object"||typeof e=="function"}function bs(e){return!Nl(e,this.v)}let en=null;function Ga(e){en=e}function $n(e,n=!1,a){en={p:en,i:!1,c:null,e:null,s:e,x:null,r:Qe,l:null}}function Pn(e){var n=en,a=n.e;if(a!==null){n.e=null;for(var s of a)Ks(s)}return n.i=!0,en=n.p,{}}function _s(){return!0}let va=[];function ys(){var e=va;va=[],hl(e)}function ya(e){if(va.length===0&&!ri){var n=va;queueMicrotask(()=>{n===va&&ys()})}va.push(e)}function ql(){for(;va.length>0;)ys()}function xs(e){var n=Qe;if(n===null)return Ue.f|=sa,e;if((n.f&Ha)===0&&(n.f&Na)===0)throw e;ia(e,n)}function ia(e,n){if(!(n!==null&&(n.f&wn)!==0)){for(;n!==null;){if((n.f&sr)!==0){if((n.f&Ha)===0)throw e;try{n.b.error(e);return}catch(a){e=a}}n=n.parent}throw e}}const Gl=-7169;function Vt(e,n){e.f=e.f&Gl|n}function xr(e){(e.f&kn)!==0||e.deps===null?Vt(e,Jt):Vt(e,Kn)}function ks(e){if(e!==null)for(const n of e)(n.f&tn)===0||(n.f&Sa)===0||(n.f^=Sa,ks(n.deps))}function ws(e,n,a){(e.f&Xt)!==0?n.add(e):(e.f&Kn)!==0&&a.add(e),ks(e.deps),Vt(e,Jt)}function Vl(e){let n=0,a=Ea(0),s;return()=>{Cr()&&(t(a),qi(()=>(n===0&&(s=Qa(()=>e(()=>si(a)))),n+=1,()=>{ya(()=>{n-=1,n===0&&(s==null||s(),s=void 0,si(a))})})))}}var Wl=qa|Ja;function jl(e,n,a,s){new Ul(e,n,a,s)}var bn,_r,_n,ha,sn,yn,nn,pn,Vn,ga,na,Ia,ui,pi,Wn,Oi,Ft,Hl,Jl,Ql,cr,Ei,Ai,vr,ur;class Ul{constructor(n,a,s,l){qe(this,Ft);vn(this,"parent");vn(this,"is_pending",!1);vn(this,"transform_error");qe(this,bn);qe(this,_r,null);qe(this,_n);qe(this,ha);qe(this,sn);qe(this,yn,null);qe(this,nn,null);qe(this,pn,null);qe(this,Vn,null);qe(this,ga,0);qe(this,na,0);qe(this,Ia,!1);qe(this,ui,new Set);qe(this,pi,new Set);qe(this,Wn,null);qe(this,Oi,Vl(()=>(Ke(this,Wn,Ea(m(this,ga))),()=>{Ke(this,Wn,null)})));var o;Ke(this,bn,n),Ke(this,_n,a),Ke(this,ha,d=>{var c=Qe;c.b=this,c.f|=sr,s(d)}),this.parent=Qe.b,this.transform_error=l??((o=this.parent)==null?void 0:o.transform_error)??(d=>d),Ke(this,sn,Tr(()=>{lt(this,Ft,cr).call(this)},Wl))}defer_effect(n){ws(n,m(this,ui),m(this,pi))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!m(this,_n).pending}update_pending_count(n,a){lt(this,Ft,vr).call(this,n,a),Ke(this,ga,m(this,ga)+n),!(!m(this,Wn)||m(this,Ia))&&(Ke(this,Ia,!0),ya(()=>{Ke(this,Ia,!1),m(this,Wn)&&Va(m(this,Wn),m(this,ga))}))}get_effect_pending(){return m(this,Oi).call(this),t(m(this,Wn))}error(n){if(!m(this,_n).onerror&&!m(this,_n).failed)throw n;ye!=null&&ye.is_fork?(m(this,yn)&&ye.skip_effect(m(this,yn)),m(this,nn)&&ye.skip_effect(m(this,nn)),m(this,pn)&&ye.skip_effect(m(this,pn)),ye.oncommit(()=>{lt(this,Ft,ur).call(this,n)})):lt(this,Ft,ur).call(this,n)}}bn=new WeakMap,_r=new WeakMap,_n=new WeakMap,ha=new WeakMap,sn=new WeakMap,yn=new WeakMap,nn=new WeakMap,pn=new WeakMap,Vn=new WeakMap,ga=new WeakMap,na=new WeakMap,Ia=new WeakMap,ui=new WeakMap,pi=new WeakMap,Wn=new WeakMap,Oi=new WeakMap,Ft=new WeakSet,Hl=function(){try{Ke(this,yn,xn(()=>m(this,ha).call(this,m(this,bn))))}catch(n){this.error(n)}},Jl=function(n){const a=m(this,_n).failed;a&&Ke(this,pn,xn(()=>{a(m(this,bn),()=>n,()=>()=>{})}))},Ql=function(){const n=m(this,_n).pending;n&&(this.is_pending=!0,Ke(this,nn,xn(()=>n(m(this,bn)))),ya(()=>{var a=Ke(this,Vn,document.createDocumentFragment()),s=Qn();a.append(s),Ke(this,yn,lt(this,Ft,Ai).call(this,()=>xn(()=>m(this,ha).call(this,s)))),m(this,na)===0&&(m(this,bn).before(a),Ke(this,Vn,null),ka(m(this,nn),()=>{Ke(this,nn,null)}),lt(this,Ft,Ei).call(this,ye))}))},cr=function(){try{if(this.is_pending=this.has_pending_snippet(),Ke(this,na,0),Ke(this,ga,0),Ke(this,yn,xn(()=>{m(this,ha).call(this,m(this,bn))})),m(this,na)>0){var n=Ke(this,Vn,document.createDocumentFragment());$r(m(this,yn),n);const a=m(this,_n).pending;Ke(this,nn,xn(()=>a(m(this,bn))))}else lt(this,Ft,Ei).call(this,ye)}catch(a){this.error(a)}},Ei=function(n){this.is_pending=!1,n.transfer_effects(m(this,ui),m(this,pi))},Ai=function(n){var a=Qe,s=Ue,l=en;Nn(m(this,sn)),Sn(m(this,sn)),Ga(m(this,sn).ctx);try{return Ma.ensure(),n()}catch(o){return xs(o),null}finally{Nn(a),Sn(s),Ga(l)}},vr=function(n,a){var s;if(!this.has_pending_snippet()){this.parent&<(s=this.parent,Ft,vr).call(s,n,a);return}Ke(this,na,m(this,na)+n),m(this,na)===0&&(lt(this,Ft,Ei).call(this,a),m(this,nn)&&ka(m(this,nn),()=>{Ke(this,nn,null)}),m(this,Vn)&&(m(this,bn).before(m(this,Vn)),Ke(this,Vn,null)))},ur=function(n){m(this,yn)&&(cn(m(this,yn)),Ke(this,yn,null)),m(this,nn)&&(cn(m(this,nn)),Ke(this,nn,null)),m(this,pn)&&(cn(m(this,pn)),Ke(this,pn,null));var a=m(this,_n).onerror;let s=m(this,_n).failed;var l=!1,o=!1;const d=()=>{if(l){Kl();return}l=!0,o&&Tl(),m(this,pn)!==null&&ka(m(this,pn),()=>{Ke(this,pn,null)}),lt(this,Ft,Ai).call(this,()=>{lt(this,Ft,cr).call(this)})},c=v=>{try{o=!0,a==null||a(v,d),o=!1}catch(f){ia(f,m(this,sn)&&m(this,sn).parent)}s&&Ke(this,pn,lt(this,Ft,Ai).call(this,()=>{try{return xn(()=>{var f=Qe;f.b=this,f.f|=sr,s(m(this,bn),()=>v,()=>d)})}catch(f){return ia(f,m(this,sn).parent),null}}))};ya(()=>{var v;try{v=this.transform_error(n)}catch(f){ia(f,m(this,sn)&&m(this,sn).parent);return}v!==null&&typeof v=="object"&&typeof v.then=="function"?v.then(c,f=>ia(f,m(this,sn)&&m(this,sn).parent)):c(v)})};function Zl(e,n,a,s){const l=kr;var o=e.filter(y=>!y.settled),d=n.map(l);if(a.length===0&&o.length===0){s(d);return}var c=Qe,v=Yl(),f=o.length===1?o[0].promise:o.length>1?Promise.all(o.map(y=>y.promise)):null;function b(y){if((c.f&wn)===0){v();try{s([...d,...y])}catch(P){ia(P,c)}Di()}}var T=Ss();if(a.length===0){f.then(()=>b([])).finally(T);return}function _(){Promise.all(a.map(y=>Xl(y))).then(b).catch(y=>ia(y,c)).finally(T)}f?f.then(()=>{v(),_(),Di()}):_()}function Yl(){var e=Qe,n=Ue,a=en,s=ye;return function(o=!0){Nn(e),Sn(n),Ga(a),o&&(e.f&wn)===0&&(s==null||s.activate(),s==null||s.apply())}}function Di(e=!0){Nn(null),Sn(null),Ga(null),e&&(ye==null||ye.deactivate())}function Ss(){var e=Qe,n=e.b,a=ye,s=!!(n!=null&&n.is_rendered());return n==null||n.update_pending_count(1,a),a.increment(s,e),()=>{n==null||n.update_pending_count(-1,a),a.decrement(s,e)}}function kr(e){var n=tn|Xt;return Qe!==null&&(Qe.f|=Ja),{ctx:en,deps:null,effects:null,equals:ms,f:n,fn:e,reactions:null,rv:0,v:Ht,wv:0,parent:Qe,ac:null}}const Xa=Symbol("obsolete");function Xl(e,n,a){let s=Qe;s===null&&yl();var l=void 0,o=Ea(Ht),d=!Ue,c=new Set;return mo(()=>{var y,P;var v=Qe,f=us();l=f.promise;try{Promise.resolve(e()).then(f.resolve,O=>{O!==Ni&&f.reject(O)}).finally(Di)}catch(O){f.reject(O),Di()}var b=ye;if(d){if((v.f&Ha)!==0)var T=Ss();if((y=s.b)!=null&&y.is_rendered())(P=b.async_deriveds.get(v))==null||P.reject(Xa);else for(const O of c.values())O.reject(Xa);c.add(f),b.async_deriveds.set(v,f)}const _=(O,M=void 0)=>{T==null||T(),c.delete(f),M!==Xa&&(b.activate(),M?(o.f|=sa,Va(o,M)):((o.f&sa)!==0&&(o.f^=sa),Va(o,O)),b.deactivate())};f.promise.then(_,O=>_(null,O||"unknown"))}),Fs(()=>{for(const v of c)v.reject(Xa)}),new Promise(v=>{function f(b){function T(){b===l?v(o):f(l)}b.then(T,T)}f(l)})}function q(e){const n=kr(e);return Us(n),n}function eo(e){const n=kr(e);return n.equals=bs,n}function to(e){var n=e.effects;if(n!==null){e.effects=null;for(var a=0;a this.schedule(s)){var s=m(this,Ln).get(n);if(s){m(this,Ln).delete(n);for(var l of s.d)Vt(l,Xt),a(l);for(l of s.m)Vt(l,Kn),a(l)}m(this,Ka).add(n)}capture(n,a,s=!1){n.v!==Ht&&!this.previous.has(n)&&this.previous.set(n,n.v),(n.f&sa)===0&&(this.current.set(n,[a,s]),Yt==null||Yt.set(n,a)),this.is_fork||(n.v=a)}activate(){ye=this}deactivate(){ye=null,Yt=null}flush(){try{Ji=!0,ye=this,lt(this,vt,ei).call(this)}finally{Lr=0,pr=null,$a=null,Ci=null,Ji=!1,ye=null,Yt=null,xa.clear()}}discard(){var n;for(const a of m(this,Ba))a(this);m(this,Ba).clear();for(const a of this.async_deriveds.values())a.reject(Xa);lt(this,vt,ti).call(this),(n=m(this,Fa))==null||n.resolve()}register_created_effect(n){m(this,fi).push(n)}increment(n,a){if(Ke(this,Ra,m(this,Ra)+1),n){let s=m(this,jn).get(a)??0;m(this,jn).set(a,s+1)}}decrement(n,a){if(Ke(this,Ra,m(this,Ra)-1),n){let s=m(this,jn).get(a)??0;s===1?m(this,jn).delete(a):m(this,jn).set(a,s-1)}m(this,ba)||(Ke(this,ba,!0),ya(()=>{Ke(this,ba,!1),this.linked&&this.flush()}))}transfer_effects(n,a){for(const s of n)m(this,Un).add(s);for(const s of a)m(this,En).add(s);n.clear(),a.clear()}oncommit(n){m(this,Oa).add(n)}ondiscard(n){m(this,Ba).add(n)}settled(){return(m(this,Fa)??Ke(this,Fa,us())).promise}static ensure(){if(ye===null){const n=ye=new Bi;!Ji&&!ri&&ya(()=>{m(n,La)||n.flush()})}return ye}apply(){{Yt=null;return}}schedule(n){var l;if(pr=n,(l=n.b)!=null&&l.is_pending&&(n.f&(Na|Ki|ps))!==0&&(n.f&Ha)===0){n.b.defer_effect(n);return}for(var a=n;a.parent!==null;){a=a.parent;var s=a.f;if($a!==null&&a===Qe&&(Ue===null||(Ue.f&tn)===0))return;if((s&(la|zn))!==0){if((s&Jt)===0)return;a.f^=Jt}}m(this,ln).push(a)}};La=new WeakMap,aa=new WeakMap,ma=new WeakMap,Oa=new WeakMap,Ba=new WeakMap,Ra=new WeakMap,jn=new WeakMap,Fa=new WeakMap,ln=new WeakMap,fi=new WeakMap,Un=new WeakMap,En=new WeakMap,Ln=new WeakMap,Ka=new WeakMap,ba=new WeakMap,vt=new WeakSet,fr=function(){if(this.is_fork)return!0;for(const s of m(this,jn).keys()){for(var n=s,a=!1;n.parent!==null;){if(m(this,Ln).has(n)){a=!0;break}n=n.parent}if(!a)return!0}return!1},ei=function(){var v,f,b,T;Ke(this,La,!0),Lr++>1e3&&(lt(this,vt,ti).call(this),so());for(const _ of m(this,Un))m(this,En).delete(_),Vt(_,Xt),this.schedule(_);for(const _ of m(this,En))Vt(_,Kn),this.schedule(_);const n=m(this,ln);Ke(this,ln,[]),this.apply();var a=$a=[],s=[],l=Ci=[];for(const _ of n)try{lt(this,vt,hr).call(this,_,a,s)}catch(y){throw $s(_),lt(this,vt,fr).call(this)||this.discard(),y}if(ye=null,l.length>0){var o=Bi.ensure();for(const _ of l)o.schedule(_)}if($a=null,Ci=null,lt(this,vt,fr).call(this)){lt(this,vt,za).call(this,s),lt(this,vt,za).call(this,a);for(const[_,y]of m(this,Ln))zs(_,y);l.length>0&<(v=ye,vt,ei).call(v);return}const d=lt(this,vt,As).call(this);if(d){lt(this,vt,za).call(this,s),lt(this,vt,za).call(this,a),lt(f=d,vt,Cs).call(f,this);return}m(this,Un).clear(),m(this,En).clear();for(const _ of m(this,Oa))_(this);m(this,Oa).clear(),ii=this,Or(s),Or(a),ii=null,(b=m(this,Fa))==null||b.resolve();var c=ye;if(m(this,Ra)===0&&(m(this,ln).length===0||c!==null)&<(this,vt,ti).call(this),m(this,ln).length>0)if(c!==null){const _=c;m(_,ln).push(...m(this,ln).filter(y=>!m(_,ln).includes(y)))}else c=this;c!==null&<(T=c,vt,ei).call(T)},hr=function(n,a,s){n.f^=Jt;for(var l=n.first;l!==null;){var o=l.f,d=(o&(zn|la))!==0,c=d&&(o&Jt)!==0,v=c||(o&an)!==0||m(this,Ln).has(l);if(!v&&l.fn!==null){d?l.f^=Jt:(o&Na)!==0?a.push(l):_i(l)&&((o&Cn)!==0&&m(this,En).add(l),Wa(l));var f=l.first;if(f!==null){l=f;continue}}for(;l!==null;){var b=l.next;if(b!==null){l=b;break}l=l.parent}}},As=function(){for(var n=m(this,aa);n!==null;){if(!n.is_fork){for(const[a,[,s]]of this.current)if(n.current.has(a)&&!s)return n}n=m(n,aa)}return null},Cs=function(n){var s;for(const[l,o]of n.current)!this.previous.has(l)&&n.previous.has(l)&&this.previous.set(l,n.previous.get(l)),this.current.set(l,o);for(const[l,o]of n.async_deriveds){const d=this.async_deriveds.get(l);d&&o.promise.then(d.resolve).catch(d.reject)}n.async_deriveds.clear(),this.transfer_effects(m(n,Un),m(n,En));const a=l=>{var o=l.reactions;if(o!==null)for(const v of o){var d=v.f;if((d&tn)!==0)a(v);else{var c=v;d&(Pa|Cn)&&!this.async_deriveds.has(c)&&(m(this,En).delete(c),Vt(c,Xt),this.schedule(c))}}};for(const l of this.current.keys())a(l);this.oncommit(()=>n.discard()),lt(s=n,vt,ti).call(s),ye=this,lt(this,vt,ei).call(this)},za=function(n){for(var a=0;a !_.current.get(y)[1]);if(!(!m(_,La)||l.length===0)){var o=l.filter(y=>!this.current.has(y));if(o.length===0)n&&_.discard();else if(a.length>0){if(n)for(const y of m(this,Ka))_.unskip_effect(y,P=>{var O;(P.f&(Cn|Pa))!==0?_.schedule(P):lt(O=_,vt,za).call(O,[P])});_.activate();var d=new Set,c=new Map;for(var v of a)Ts(v,o,d,c);c=new Map;var f=[..._.current].filter(([y,P])=>{const O=this.current.get(y);return O?O[0]!==P[0]||O[1]!==P[1]:!0}).map(([y])=>y);if(f.length>0)for(const y of m(this,fi))(y.f&(wn|an|$i))===0&&Sr(y,f,c)&&((y.f&(Pa|Cn))!==0?(Vt(y,Xt),_.schedule(y)):m(_,Un).add(y));if(m(_,ln).length>0&&!m(_,ba)){_.apply();for(var b of m(_,ln))lt(T=_,vt,hr).call(T,b,[],[]);Ke(_,ln,[])}_.deactivate()}}}},ti=function(){if(this.linked){var n=m(this,aa),a=m(this,ma);n===null?Hi=a:Ke(n,ma,a),a===null?Ta=n:Ke(a,aa,n),this.linked=!1}};let Ma=Bi;function ro(e){var n=ri;ri=!0;try{for(var a;;){if(ql(),ye===null)return a;ye.flush()}}finally{ri=n}}function so(){try{Ml()}catch(e){ia(e,pr)}}let Mn=null;function Or(e){var n=e.length;if(n!==0){for(var a=0;a 0)){xa.clear();for(const l of Mn){if((l.f&(wn|an))!==0)continue;const o=[l];let d=l.parent;for(;d!==null;)Mn.has(d)&&(Mn.delete(d),o.push(d)),d=d.parent;for(let c=o.length-1;c>=0;c--){const v=o[c];(v.f&(wn|an))===0&&Wa(v)}}Mn.clear()}}Mn=null}}function Ts(e,n,a,s){if(!a.has(e)&&(a.add(e),e.reactions!==null))for(const l of e.reactions){const o=l.f;(o&tn)!==0?Ts(l,n,a,s):(o&(Pa|Cn))!==0&&(o&Xt)===0&&Sr(l,n,s)&&(Vt(l,Xt),Mr(l))}}function Sr(e,n,a){const s=a.get(e);if(s!==void 0)return s;if(e.deps!==null)for(const l of e.deps){if(zi.call(n,l))return!0;if((l.f&tn)!==0&&Sr(l,n,a))return a.set(l,!0),!0}return a.set(e,!1),!1}function Mr(e){ye.schedule(e)}function zs(e,n){if(!((e.f&zn)!==0&&(e.f&Jt)!==0)){(e.f&Xt)!==0?n.d.push(e):(e.f&Kn)!==0&&n.m.push(e),Vt(e,Jt);for(var a=e.first;a!==null;)zs(a,n),a=a.next}}function $s(e){Vt(e,Jt);for(var n=e.first;n!==null;)$s(n),n=n.next}let Ii=new Set;const xa=new Map;let Ps=!1;function Ea(e,n){var a={f:0,v:e,reactions:null,equals:ms,rv:0,wv:0};return a}function I(e,n){const a=Ea(e);return Us(a),a}function lo(e,n=!1,a=!0){const s=Ea(e);return n||(s.equals=bs),s}function u(e,n,a=!1){Ue!==null&&(!Tn||(Ue.f&$i)!==0)&&_s()&&(Ue.f&(tn|Cn|Pa|$i))!==0&&(Rn===null||!Rn.has(e))&&Cl();let s=a?jt(n):n;return Va(e,s,Ci)}function Va(e,n,a=null){if(!e.equals(n)){xa.set(e,oa?n:e.v);var s=Ma.ensure();if(s.capture(e,n),(e.f&tn)!==0){const l=e;(e.f&Xt)!==0&&wr(l),Yt===null&&xr(l)}e.wv=Js(),Ds(e,Xt,a),Qe!==null&&(Qe.f&Jt)!==0&&(Qe.f&(zn|la))===0&&(mn===null?_o([e]):mn.push(e)),!s.is_fork&&Ii.size>0&&!Ps&&oo()}return n}function oo(){Ps=!1;for(const e of Ii){(e.f&Jt)!==0&&Vt(e,Kn);let n;try{n=_i(e)}catch{n=!0}n&&Wa(e)}Ii.clear()}function si(e){u(e,e.v+1)}function Ds(e,n,a){var s=e.reactions;if(s!==null)for(var l=s.length,o=0;o {if(wa===o)return c();var v=Ue,f=wa;Sn(null),Nr(o);var b=c();return Sn(v),Nr(f),b};return s&&a.set("length",I(e.length)),new Proxy(e,{defineProperty(c,v,f){(!("value"in f)||f.configurable===!1||f.enumerable===!1||f.writable===!1)&&El();var b=a.get(v);return b===void 0?d(()=>{var T=I(f.value);return a.set(v,T),T}):u(b,f.value,!0),!0},deleteProperty(c,v){var f=a.get(v);if(f===void 0){if(v in c){const b=d(()=>I(Ht));a.set(v,b),si(l)}}else u(f,Ht),si(l);return!0},get(c,v,f){var y;if(v===Da)return e;var b=a.get(v),T=v in c;if(b===void 0&&(!T||(y=ai(c,v))!=null&&y.writable)&&(b=d(()=>{var P=jt(T?c[v]:Ht),O=I(P);return O}),a.set(v,b)),b!==void 0){var _=t(b);return _===Ht?void 0:_}return Reflect.get(c,v,f)},getOwnPropertyDescriptor(c,v){var f=Reflect.getOwnPropertyDescriptor(c,v);if(f&&"value"in f){var b=a.get(v);b&&(f.value=t(b))}else if(f===void 0){var T=a.get(v),_=T==null?void 0:T.v;if(T!==void 0&&_!==Ht)return{enumerable:!0,configurable:!0,value:_,writable:!0}}return f},has(c,v){var _;if(v===Da)return!0;var f=a.get(v),b=f!==void 0&&f.v!==Ht||Reflect.has(c,v);if(f!==void 0||Qe!==null&&(!b||(_=ai(c,v))!=null&&_.writable)){f===void 0&&(f=d(()=>{var y=b?jt(c[v]):Ht,P=I(y);return P}),a.set(v,f));var T=t(f);if(T===Ht)return!1}return b},set(c,v,f,b){var Ee;var T=a.get(v),_=v in c;if(s&&v==="length")for(var y=f;y I(Ht)),a.set(y+"",P))}if(T===void 0)(!_||(Ee=ai(c,v))!=null&&Ee.writable)&&(T=d(()=>I(void 0)),u(T,jt(f)),a.set(v,T));else{_=T.v!==Ht;var O=d(()=>jt(f));u(T,O)}var M=Reflect.getOwnPropertyDescriptor(c,v);if(M!=null&&M.set&&M.set.call(b,f),!_){if(s&&typeof v=="string"){var K=a.get("length"),Oe=Number(v);Number.isInteger(Oe)&&Oe>=K.v&&u(K,Oe+1)}si(l)}return!0},ownKeys(c){t(l);var v=Reflect.ownKeys(c).filter(T=>{var _=a.get(T);return _===void 0||_.v!==Ht});for(var[f,b]of a)b.v!==Ht&&!(f in c)&&v.push(f);return v},setPrototypeOf(){Al()}})}function Br(e){try{if(e!==null&&typeof e=="object"&&Da in e)return e[Da]}catch{}return e}function co(e,n){return Object.is(Br(e),Br(n))}var Rr,Is,Ls,Os;function vo(){if(Rr===void 0){Rr=window,Is=/Firefox/.test(navigator.userAgent);var e=Element.prototype,n=Node.prototype,a=Text.prototype;Ls=ai(n,"firstChild").get,Os=ai(n,"nextSibling").get,Ir(e)&&(e[or]=void 0,e[Si]=null,e[dr]=void 0,e.__e=void 0),Ir(a)&&(a[Ya]=void 0)}}function Qn(e=""){return document.createTextNode(e)}function ra(e){return Ls.call(e)}function mi(e){return Os.call(e)}function r(e,n){return ra(e)}function tt(e,n=!1){{var a=ra(e);return a instanceof Comment&&a.data===""?mi(a):a}}function i(e,n=1,a=!1){let s=e;for(;n--;)s=mi(s);return s}function uo(e){e.textContent=""}function Bs(){return!1}function Rs(e,n,a){return n==null||n===gs?a?document.createElement(e,{is:a}):document.createElement(e):a?document.createElementNS(n,e,{is:a}):document.createElementNS(n,e)}let Fr=!1;function po(){Fr||(Fr=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var n;if(!e.defaultPrevented)for(const a of e.target.elements)(n=a[Mi])==null||n.call(a)})},{capture:!0}))}function Er(e){var n=Ue,a=Qe;Sn(null),Nn(null);try{return e()}finally{Sn(n),Nn(a)}}function Ar(e,n,a,s=a){e.addEventListener(n,()=>Er(a));const l=e[Mi];l?e[Mi]=()=>{l(),s(!0)}:e[Mi]=()=>s(!0),po()}function fo(e){Qe===null&&(Ue===null&&Sl(),wl()),oa&&kl()}function ho(e,n){var a=n.last;a===null?n.last=n.first=e:(a.next=e,e.prev=a,n.last=e)}function Zn(e,n){var a=Qe;a!==null&&(a.f&an)!==0&&(e|=an);var s={ctx:en,deps:null,nodes:null,f:e|Xt|kn,first:null,fn:n,last:null,next:null,parent:a,b:a&&a.b,prev:null,teardown:null,wv:0,ac:null};ye==null||ye.register_created_effect(s);var l=s;if((e&Na)!==0)$a!==null?$a.push(s):Ma.ensure().schedule(s);else if(n!==null){try{Wa(s)}catch(d){throw cn(s),d}l.deps===null&&l.teardown===null&&l.nodes===null&&l.first===l.last&&(l.f&Ja)===0&&(l=l.first,(e&Cn)!==0&&(e&qa)!==0&&l!==null&&(l.f|=qa))}if(l!==null&&(l.parent=a,a!==null&&ho(l,a),Ue!==null&&(Ue.f&tn)!==0&&(e&la)===0)){var o=Ue;(o.effects??(o.effects=[])).push(l)}return s}function Cr(){return Ue!==null&&!Tn}function Fs(e){const n=Zn(Ki,null);return Vt(n,Jt),n.teardown=e,n}function bi(e){fo();var n=Qe.f,a=!Ue&&(n&zn)!==0&&en!==null&&!en.i;if(a){var s=en;(s.e??(s.e=[])).push(e)}else return Ks(e)}function Ks(e){return Zn(Na|ml,e)}function go(e){Ma.ensure();const n=Zn(la|Ja,e);return(a={})=>new Promise(s=>{a.outro?ka(n,()=>{cn(n),s(void 0)}):(cn(n),s(void 0))})}function Ns(e){return Zn(Na,e)}function mo(e){return Zn(Pa|Ja,e)}function qi(e,n=0){return Zn(Ki|n,e)}function z(e,n=[],a=[],s=[]){Zl(s,n,a,l=>{Zn(Ki,()=>{e(...l.map(t))})})}function Tr(e,n=0){var a=Zn(Cn|n,e);return a}function xn(e){return Zn(zn|Ja,e)}function qs(e){var n=e.teardown;if(n!==null){const a=oa,s=Ue;Kr(!0),Sn(null);try{n.call(null)}finally{Kr(a),Sn(s)}}}function zr(e,n=!1){var a=e.first;for(e.first=e.last=null;a!==null;){const l=a.ac;l!==null&&Er(()=>{l.abort(Ni)});var s=a.next;(a.f&la)!==0?a.parent=null:cn(a,n),a=s}}function bo(e){for(var n=e.first;n!==null;){var a=n.next;(n.f&zn)===0&&cn(n),n=a}}function cn(e,n=!0){var a=!1;(n||(e.f&gl)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Gs(e.nodes.start,e.nodes.end),a=!0),e.f|=lr,zr(e,n&&!a),ci(e,0);var s=e.nodes&&e.nodes.t;if(s!==null)for(const o of s)o.stop();qs(e),e.f^=lr,e.f|=wn;var l=e.parent;l!==null&&l.first!==null&&Vs(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Gs(e,n){for(;e!==null;){var a=e===n?null:mi(e);e.remove(),e=a}}function Vs(e){var n=e.parent,a=e.prev,s=e.next;a!==null&&(a.next=s),s!==null&&(s.prev=a),n!==null&&(n.first===e&&(n.first=s),n.last===e&&(n.last=a))}function ka(e,n,a=!0){var s=[];Ws(e,s,!0);var l=()=>{a&&cn(e),n&&n()},o=s.length;if(o>0){var d=()=>--o||l();for(var c of s)c.out(d)}else l()}function Ws(e,n,a){if((e.f&an)===0){e.f^=an;var s=e.nodes&&e.nodes.t;if(s!==null)for(const c of s)(c.is_global||a)&&n.push(c);for(var l=e.first;l!==null;){var o=l.next;if((l.f&la)===0){var d=(l.f&qa)!==0||(l.f&zn)!==0&&(e.f&Cn)!==0;Ws(l,n,d?a:!1)}l=o}}}function Li(e){js(e,!0)}function js(e,n){if((e.f&an)!==0){e.f^=an,(e.f&Jt)===0&&(Vt(e,Xt),Ma.ensure().schedule(e));for(var a=e.first;a!==null;){var s=a.next,l=(a.f&qa)!==0||(a.f&zn)!==0;js(a,l?n:!1),a=s}var o=e.nodes&&e.nodes.t;if(o!==null)for(const d of o)(d.is_global||n)&&d.in()}}function $r(e,n){if(e.nodes)for(var a=e.nodes.start,s=e.nodes.end;a!==null;){var l=a===s?null:mi(a);n.append(a),a=l}}let Ti=!1,oa=!1;function Kr(e){oa=e}let Ue=null,Tn=!1;function Sn(e){Ue=e}let Qe=null;function Nn(e){Qe=e}let Rn=null;function Us(e){Ue!==null&&(Rn??(Rn=new Set)).add(e)}let on=null,un=0,mn=null;function _o(e){mn=e}let Hs=1,ua=0,wa=ua;function Nr(e){wa=e}function Js(){return++Hs}function _i(e){var n=e.f;if((n&Xt)!==0)return!0;if(n&tn&&(e.f&=~Sa),(n&Kn)!==0){for(var a=e.deps,s=a.length,l=0;l e.wv)return!0}(n&kn)!==0&&Yt===null&&Vt(e,Jt)}return!1}function Qs(e,n,a=!0){var s=e.reactions;if(s!==null&&!(Rn!==null&&Rn.has(e)))for(var l=0;l{e.ac.abort(Ni)}),e.ac=null);try{e.f|=Pi;var b=e.fn,T=b();e.f|=Ha;var _=e.deps,y=ye==null?void 0:ye.is_fork;if(on!==null){var P;if(y||ci(e,un),_!==null&&un>0)for(_.length=un+on.length,P=0;P {throw K});throw _}}finally{e[pa]=n,delete e.currentTarget,Sn(b),Nn(T)}}}var os;const Qi=((os=globalThis==null?void 0:globalThis.window)==null?void 0:os.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function So(e){return(Qi==null?void 0:Qi.createHTML(e))??e}function Mo(e){var n=Rs("template");return n.innerHTML=So(e.replaceAll("","")),n.content}function ja(e,n){var a=Qe;a.nodes===null&&(a.nodes={start:e,end:n,a:null,t:null})}function g(e,n){var a=(n&Il)!==0,s=(n&Ll)!==0,l,o=!e.startsWith("");return()=>{l===void 0&&(l=Mo(o?e:""+e),a||(l=ra(l)));var d=s||Is?document.importNode(l,!0):l.cloneNode(!0);if(a){var c=ra(d),v=d.lastChild;ja(c,v)}else ja(d,d);return d}}function li(e=""){{var n=Qn(e+"");return ja(n,n),n}}function Ua(){var e=document.createDocumentFragment(),n=document.createComment(""),a=Qn();return e.append(n,a),ja(n,a),e}function p(e,n){e!==null&&e.before(n)}function h(e,n){var a=n==null?"":typeof n=="object"?`${n}`:n;a!==(e[Ya]??(e[Ya]=e.nodeValue))&&(e[Ya]=a,e.nodeValue=`${a}`)}function Eo(e,n){return Ao(e,n)}const wi=new Map;function Ao(e,{target:n,anchor:a,props:s={},events:l,context:o,intro:d=!0,transformError:c}){vo();var v=void 0,f=go(()=>{var b=a??n.appendChild(Qn());jl(b,{pending:()=>{}},y=>{$n({});var P=en;o&&(P.c=o),l&&(s.$$events=l),v=e(y,s)||{},Pn()},c);var T=new Set,_=y=>{for(var P=0;P {var M;for(var y of T)for(const K of[n,document]){var P=wi.get(K),O=P.get(y);--O==0?(K.removeEventListener(y,Gr),P.delete(y),P.size===0&&wi.delete(K)):P.set(y,O)}gr.delete(_),b!==a&&((M=b.parentNode)==null||M.removeChild(b))}});return Co.set(v,f),v}let Co=new WeakMap;var An,On,fn,_a,hi,gi,Ri;class To{constructor(n,a=!0){vn(this,"anchor");qe(this,An,new Map);qe(this,On,new Map);qe(this,fn,new Map);qe(this,_a,new Set);qe(this,hi,!0);qe(this,gi,n=>{if(m(this,An).has(n)){var a=m(this,An).get(n),s=m(this,On).get(a);if(s)Li(s),m(this,_a).delete(a);else{var l=m(this,fn).get(a);l&&(Li(l.effect),m(this,On).set(a,l.effect),m(this,fn).delete(a),l.fragment.lastChild.remove(),this.anchor.before(l.fragment),s=l.effect)}for(const[o,d]of m(this,An)){if(m(this,An).delete(o),o===n)break;const c=m(this,fn).get(d);c&&(cn(c.effect),m(this,fn).delete(d))}for(const[o,d]of m(this,On)){if(o===a||m(this,_a).has(o))continue;const c=()=>{if(Array.from(m(this,An).values()).includes(o)){var f=document.createDocumentFragment();$r(d,f),f.append(Qn()),m(this,fn).set(o,{effect:d,fragment:f})}else cn(d);m(this,_a).delete(o),m(this,On).delete(o)};m(this,hi)||!s?(m(this,_a).add(o),ka(d,c,!1)):c()}}});qe(this,Ri,n=>{m(this,An).delete(n);const a=Array.from(m(this,An).values());for(const[s,l]of m(this,fn))a.includes(s)||(cn(l.effect),m(this,fn).delete(s))});this.anchor=n,Ke(this,hi,a)}ensure(n,a){var s=ye,l=Bs();if(a&&!m(this,On).has(n)&&!m(this,fn).has(n))if(l){var o=document.createDocumentFragment(),d=Qn();o.append(d),m(this,fn).set(n,{effect:xn(()=>a(d)),fragment:o})}else m(this,On).set(n,xn(()=>a(this.anchor)));if(m(this,An).set(s,n),l){for(const[c,v]of m(this,On))c===n?s.unskip_effect(v):s.skip_effect(v);for(const[c,v]of m(this,fn))c===n?s.unskip_effect(v.effect):s.skip_effect(v.effect);s.oncommit(m(this,gi)),s.ondiscard(m(this,Ri))}else m(this,gi).call(this,s)}}An=new WeakMap,On=new WeakMap,fn=new WeakMap,_a=new WeakMap,hi=new WeakMap,gi=new WeakMap,Ri=new WeakMap;function L(e,n,a=!1){var s=new To(e),l=a?qa:0;function o(d,c){s.ensure(d,c)}Tr(()=>{var d=!1;n((c,v=0)=>{d=!0,o(v,c)}),d||o(-1,null)},l)}function Xe(e,n){return n}function zo(e,n,a){for(var s=[],l=n.length,o,d=n.length,c=0;c {if(o){if(o.pending.delete(T),o.done.add(T),o.pending.size===0){var _=e.outrogroups;mr(e,Fi(o.done)),_.delete(o),_.size===0&&(e.outrogroups=null)}}else d-=1},!1)}if(d===0){var v=s.length===0&&a!==null;if(v){var f=a,b=f.parentNode;uo(b),b.append(f),e.items.clear()}mr(e,n,!v)}else o={pending:new Set(n),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(o)}function mr(e,n,a=!0){var s;if(e.pending.size>0){s=new Set;for(const d of e.pending.values())for(const c of d)s.add(e.items.get(c).e)}for(var l=0;l {var Ee=a();return yr(Ee)?Ee:Ee==null?[]:Fi(Ee)}),_,y=new Map,P=!0;function O(Ee){(Oe.effect.f&wn)===0&&(Oe.pending.delete(Ee),Oe.fallback=b,$o(Oe,_,d,n,s),b!==null&&(_.length===0?(b.f&Bn)===0?Li(b):(b.f^=Bn,ni(b,null,d)):ka(b,()=>{b=null})))}function M(Ee){Oe.pending.delete(Ee)}var K=Tr(()=>{_=t(T);for(var Ee=_.length,Ce=new Set,Re=ye,te=Bs(),X=0;X o(d)):(b=xn(()=>o(Vr??(Vr=Qn()))),b.f|=Bn)),Ee>Ce.size&&xl(),!P)if(y.set(Re,Ce),te){for(const[Ze,ut]of c)Ce.has(Ze)||Re.skip_effect(ut.e);Re.oncommit(O),Re.ondiscard(M)}else O(Re);t(T)}),Oe={effect:K,items:c,pending:y,outrogroups:null,fallback:b};P=!1}function Za(e){for(;e!==null&&(e.f&zn)===0;)e=e.next;return e}function $o(e,n,a,s,l){var Ne,Ze,ut,D,ue,Ae,He,N,ve;var o=(s&Pl)!==0,d=n.length,c=e.items,v=Za(e.effect.first),f,b=null,T,_=[],y=[],P,O,M,K;if(o)for(K=0;K 0){var Be=(s&hs)!==0&&d===0?a:null;if(o){for(K=0;K {var pe,je;if(T!==void 0)for(M of T)(je=(pe=M.nodes)==null?void 0:pe.a)==null||je.apply()})}function Po(e,n,a,s,l,o,d,c){var v=(d&zl)!==0?(d&Dl)===0?lo(a,!1,!1):Ea(a):null,f=(d&$l)!==0?Ea(l):null;return{v,i:f,e:xn(()=>(o(n,v??a,f??l,c),()=>{e.delete(s)}))}}function ni(e,n,a){if(e.nodes)for(var s=e.nodes.start,l=e.nodes.end,o=n&&(n.f&Bn)===0?n.nodes.start:a;s!==null;){var d=mi(s);if(o.before(s),s===l)return;s=d}}function Xn(e,n,a){n===null?e.effect.first=a:n.next=a,a===null?e.effect.last=n:a.prev=n}function Ye(e,n,a=!1,s=!1,l=!1,o=!1){var d=e,c="";if(a)var v=e;z(()=>{var f=Qe;if(c!==(c=n()??"")){if(a){f.nodes=null,v.innerHTML=c,c!==""&&ja(ra(v),v.lastChild);return}if(f.nodes!==null&&(Gs(f.nodes.start,f.nodes.end),f.nodes=null),c!==""){var b=s?Ol:l?Bl:void 0,T=Rs(s?"svg":l?"math":"template",b);T.innerHTML=c;var _=s||l?T:T.content;if(ja(ra(_),_.lastChild),s||l)for(;ra(_);)d.before(ra(_));else d.before(_)}}})}function Do(e,n,a){var s=e==null?"":""+e;return n&&(s=s?s+" "+n:n),s===""?null:s}function Io(e,n){return e==null?null:String(e)}function Et(e,n,a,s,l,o){var d=e[or];if(d!==a||d===void 0){var c=Do(a,s);c==null?e.removeAttribute("class"):e.className=c,e[or]=a}return o}function At(e,n,a,s){var l=e[dr];if(l!==n){var o=Io(n);o==null?e.removeAttribute("style"):e.style.cssText=o,e[dr]=n}return s}function tl(e,n,a=!1){if(e.multiple){if(n==null)return;if(!yr(n))return Fl();for(var s of e.options)s.selected=n.includes(oi(s));return}for(s of e.options){var l=oi(s);if(co(l,n)){s.selected=!0;return}}(!a||n!==void 0)&&(e.selectedIndex=-1)}function Lo(e){var n=new MutationObserver(()=>{tl(e,e.__value)});n.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Fs(()=>{n.disconnect()})}function Jn(e,n,a=n){var s=new WeakSet,l=!0;Ar(e,"change",o=>{var d=o?"[selected]":":checked",c;if(e.multiple)c=[].map.call(e.querySelectorAll(d),oi);else{var v=e.querySelector(d)??e.querySelector("option:not([disabled])");c=v&&oi(v)}a(c),e.__value=c,ye!==null&&s.add(ye)}),Ns(()=>{var o=n();if(e===document.activeElement){var d=ye;if(s.has(d))return}if(tl(e,o,l),l&&o===void 0){var c=e.querySelector(":checked");c!==null&&(o=oi(c),a(o))}e.__value=o,l=!1}),Lo(e)}function oi(e){return"__value"in e?e.__value:e.value}const Oo=Symbol("is custom element"),Bo=Symbol("is html"),Ro=_l?"progress":"PROGRESS";function ea(e,n){var a=nl(e);a.value===(a.value=n??void 0)||e.value===n&&(n!==0||e.nodeName!==Ro)||(e.value=n??"")}function Aa(e,n,a,s){var l=nl(e);l[n]!==(l[n]=a)&&(n==="loading"&&(e[bl]=a),a==null?e.removeAttribute(n):typeof a!="string"&&Fo(e).includes(n)?e[n]=a:e.setAttribute(n,a))}function nl(e){return e[Si]??(e[Si]={[Oo]:e.nodeName.includes("-"),[Bo]:e.namespaceURI===gs})}var Wr=new Map;function Fo(e){var n=e.getAttribute("is")||e.nodeName,a=Wr.get(n);if(a)return a;Wr.set(n,a=[]);for(var s,l=e,o=Element.prototype;o!==l;){s=vl(l);for(var d in s)s[d].set&&d!=="innerHTML"&&d!=="textContent"&&d!=="innerText"&&a.push(d);l=vs(l)}return a}function dn(e,n,a=n){var s=new WeakSet;Ar(e,"input",async l=>{var o=l?e.defaultValue:e.value;if(o=Zi(e)?Yi(o):o,a(o),ye!==null&&s.add(ye),await xo(),o!==(o=n())){var d=e.selectionStart,c=e.selectionEnd,v=e.value.length;if(e.value=o??"",c!==null){var f=e.value.length;d===c&&c===v&&f>v?(e.selectionStart=f,e.selectionEnd=f):(e.selectionStart=d,e.selectionEnd=Math.min(c,f))}}}),Qa(n)==null&&e.value&&(a(Zi(e)?Yi(e.value):e.value),ye!==null&&s.add(ye)),qi(()=>{var l=n();if(e===document.activeElement){var o=ye;if(s.has(o))return}Zi(e)&&l===Yi(e.value)||e.type==="date"&&!l&&!e.value||l!==e.value&&(e.value=l??"")})}function Ko(e,n,a=n){Ar(e,"change",s=>{var l=s?e.defaultChecked:e.checked;a(l)}),Qa(n)==null&&a(e.checked),qi(()=>{var s=n();e.checked=!!s})}function Zi(e){var n=e.type;return n==="number"||n==="range"}function Yi(e){return e===""?null:+e}function Xi(e,n){return e===n||(e==null?void 0:e[Da])===n}function No(e={},n,a,s){var l=en.r,o=Qe;return Ns(()=>{var d,c;return qi(()=>{d=c,c=[],Qa(()=>{Xi(a(...c),e)||(n(e,...c),d&&Xi(a(...d),e)&&n(null,...d))})}),()=>{let v=o;for(;v!==l&&v.parent!==null&&v.parent.f&lr;)v=v.parent;const f=()=>{c&&Xi(a(...c),e)&&n(null,...c)},b=v.teardown;v.teardown=()=>{f(),b==null||b()}}}),e}function yi(e){en===null&&fs(),bi(()=>{const n=Qa(e);if(typeof n=="function")return n})}function qo(e){en===null&&fs(),yi(()=>()=>Qa(e))}let vi=localStorage.getItem("mc_token")||"";function al(){return vi}function Go(e){vi=(e||"").trim(),localStorage.setItem("mc_token",vi)}function Vo(){const e={"Content-Type":"application/json"};return vi&&(e["X-MC-Token"]=vi),e}function di(){return localStorage.getItem("mc_hf_token")||""}function Wo(e){localStorage.setItem("mc_hf_token",(e||"").trim())}async function we(e,n={}){const a=await fetch(e,{headers:Vo(),...n}),s=await a.json().catch(()=>({}));if(!a.ok)throw new Error(s.error||"HTTP "+a.status);return s}const jo=(e,n=document)=>n.querySelector(e),jr=(e,n=document)=>[...n.querySelectorAll(e)];function Fn(e){return String(e??"").replace(/[&<>]/g,n=>({"&":"&","<":"<",">":">"})[n])}let Ur;function ce(e,n=!1){const a=jo("#toast");a&&(a.textContent=e,a.className="toast show"+(n?" err":""),clearTimeout(Ur),Ur=setTimeout(()=>a.className="toast",3200))}function Uo(e,n){return e==="running"||e==="ready"?'geladen':e==="loading"||e==="starting"?'lädt…':e==="downloading"?`↓ Download${n!=null?` ${Math.round(n)}%`:""}`:'bereit'}const ct=e=>``,Gi={logo:ct(' '),grid:ct(' '),cpu:ct(' '),pulse:ct(' '),server:ct(' '),book:ct(' '),help:ct(' '),settings:ct(' '),swap:ct(' '),monitor:ct(' '),layers:ct(' '),alert:ct(' '),gauge:ct(' '),search:ct(' '),compass:ct(' '),code:ct(' '),eye:ct(' '),refresh:ct(' '),file:ct(' '),database:ct(' '),thermo:ct(' '),shield:ct(' '),info:ct(' '),chevron:ct(' '),bolt:ct(' '),x:ct(' '),check:ct(' '),download:ct(' '),clock:ct(' ')};function Ut(e){return Gi[e]||""}function br(e){return`${Gi.info}`}function ca(e){if(!e&&e!==0)return"–";const n=e/1024/1024/1024;return n>=1?n.toFixed(1)+" GB":Math.round(e/1024/1024)+" MB"}function hn({title:e,body:n,confirmLabel:a="Bestätigen",cancelLabel:s="Abbrechen",danger:l=!1}){return new Promise(o=>{const d=document.createElement("div");d.className="modal-overlay",d.innerHTML=` +var ll=Object.defineProperty;var Dr=e=>{throw TypeError(e)};var ol=(e,n,a)=>n in e?ll(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a;var vn=(e,n,a)=>ol(e,typeof n!="symbol"?n+"":n,a),Ui=(e,n,a)=>n.has(e)||Dr("Cannot "+a);var m=(e,n,a)=>(Ui(e,n,"read from private field"),a?a.call(e):n.get(e)),qe=(e,n,a)=>n.has(e)?Dr("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,a),Ke=(e,n,a,s)=>(Ui(e,n,"write to private field"),s?s.call(e,a):n.set(e,a),a),lt=(e,n,a)=>(Ui(e,n,"access private method"),a);var yr=Array.isArray,dl=Array.prototype.indexOf,zi=Array.prototype.includes,Fi=Array.from,cl=Object.defineProperty,ai=Object.getOwnPropertyDescriptor,vl=Object.getOwnPropertyDescriptors,ul=Object.prototype,pl=Array.prototype,vs=Object.getPrototypeOf,Ir=Object.isExtensible;const fl=()=>{};function hl(e){for(var n=0;n{e=s,n=l});return{promise:a,resolve:e,reject:n}}function Hn(e,n){if(Array.isArray(e))return e;if(n===void 0||!(Symbol.iterator in e))return Array.from(e);const a=[];for(const s of e)if(a.push(s),a.length===n)break;return a}const tn=2,Na=4,Ki=8,ps=1<<24,Cn=16,zn=32,la=64,sr=128,kn=512,Jt=1024,Xt=2048,Kn=4096,an=8192,wn=16384,Ha=32768,lr=1<<25,qa=65536,$i=1<<17,gl=1<<18,Ja=1<<19,ml=1<<20,Bn=1<<25,Sa=65536,Pi=1<<21,Pa=1<<22,sa=1<<23,Da=Symbol("$state"),bl=Symbol(""),Si=Symbol("attributes"),or=Symbol("class"),dr=Symbol("style"),Ya=Symbol("text"),Mi=Symbol("form reset"),Ni=new class extends Error{constructor(){super(...arguments);vn(this,"name","StaleReactionError");vn(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var ls;const _l=!!((ls=globalThis.document)!=null&&ls.contentType)&&globalThis.document.contentType.includes("xml");function fs(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function yl(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function xl(e,n,a){throw new Error("https://svelte.dev/e/each_key_duplicate")}function kl(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function wl(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Sl(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Ml(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function El(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Al(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Cl(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Tl(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const zl=1,$l=2,hs=4,Pl=8,Dl=16,Il=1,Ll=2,Ht=Symbol("uninitialized"),gs="http://www.w3.org/1999/xhtml",Ol="http://www.w3.org/2000/svg",Bl="http://www.w3.org/1998/Math/MathML";function Rl(){console.warn("https://svelte.dev/e/derived_inert")}function Fl(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Kl(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function ms(e){return e===this.v}function Nl(e,n){return e!=e?n==n:e!==n||e!==null&&typeof e=="object"||typeof e=="function"}function bs(e){return!Nl(e,this.v)}let en=null;function Ga(e){en=e}function $n(e,n=!1,a){en={p:en,i:!1,c:null,e:null,s:e,x:null,r:Qe,l:null}}function Pn(e){var n=en,a=n.e;if(a!==null){n.e=null;for(var s of a)Ks(s)}return n.i=!0,en=n.p,{}}function _s(){return!0}let va=[];function ys(){var e=va;va=[],hl(e)}function ya(e){if(va.length===0&&!ri){var n=va;queueMicrotask(()=>{n===va&&ys()})}va.push(e)}function ql(){for(;va.length>0;)ys()}function xs(e){var n=Qe;if(n===null)return Ue.f|=sa,e;if((n.f&Ha)===0&&(n.f&Na)===0)throw e;ia(e,n)}function ia(e,n){if(!(n!==null&&(n.f&wn)!==0)){for(;n!==null;){if((n.f&sr)!==0){if((n.f&Ha)===0)throw e;try{n.b.error(e);return}catch(a){e=a}}n=n.parent}throw e}}const Gl=-7169;function Vt(e,n){e.f=e.f&Gl|n}function xr(e){(e.f&kn)!==0||e.deps===null?Vt(e,Jt):Vt(e,Kn)}function ks(e){if(e!==null)for(const n of e)(n.f&tn)===0||(n.f&Sa)===0||(n.f^=Sa,ks(n.deps))}function ws(e,n,a){(e.f&Xt)!==0?n.add(e):(e.f&Kn)!==0&&a.add(e),ks(e.deps),Vt(e,Jt)}function Vl(e){let n=0,a=Ea(0),s;return()=>{Cr()&&(t(a),qi(()=>(n===0&&(s=Qa(()=>e(()=>si(a)))),n+=1,()=>{ya(()=>{n-=1,n===0&&(s==null||s(),s=void 0,si(a))})})))}}var Wl=qa|Ja;function jl(e,n,a,s){new Ul(e,n,a,s)}var bn,_r,_n,ha,sn,yn,nn,pn,Vn,ga,na,Ia,ui,pi,Wn,Oi,Ft,Hl,Jl,Ql,cr,Ei,Ai,vr,ur;class Ul{constructor(n,a,s,l){qe(this,Ft);vn(this,"parent");vn(this,"is_pending",!1);vn(this,"transform_error");qe(this,bn);qe(this,_r,null);qe(this,_n);qe(this,ha);qe(this,sn);qe(this,yn,null);qe(this,nn,null);qe(this,pn,null);qe(this,Vn,null);qe(this,ga,0);qe(this,na,0);qe(this,Ia,!1);qe(this,ui,new Set);qe(this,pi,new Set);qe(this,Wn,null);qe(this,Oi,Vl(()=>(Ke(this,Wn,Ea(m(this,ga))),()=>{Ke(this,Wn,null)})));var o;Ke(this,bn,n),Ke(this,_n,a),Ke(this,ha,d=>{var c=Qe;c.b=this,c.f|=sr,s(d)}),this.parent=Qe.b,this.transform_error=l??((o=this.parent)==null?void 0:o.transform_error)??(d=>d),Ke(this,sn,Tr(()=>{lt(this,Ft,cr).call(this)},Wl))}defer_effect(n){ws(n,m(this,ui),m(this,pi))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!m(this,_n).pending}update_pending_count(n,a){lt(this,Ft,vr).call(this,n,a),Ke(this,ga,m(this,ga)+n),!(!m(this,Wn)||m(this,Ia))&&(Ke(this,Ia,!0),ya(()=>{Ke(this,Ia,!1),m(this,Wn)&&Va(m(this,Wn),m(this,ga))}))}get_effect_pending(){return m(this,Oi).call(this),t(m(this,Wn))}error(n){if(!m(this,_n).onerror&&!m(this,_n).failed)throw n;ye!=null&&ye.is_fork?(m(this,yn)&&ye.skip_effect(m(this,yn)),m(this,nn)&&ye.skip_effect(m(this,nn)),m(this,pn)&&ye.skip_effect(m(this,pn)),ye.oncommit(()=>{lt(this,Ft,ur).call(this,n)})):lt(this,Ft,ur).call(this,n)}}bn=new WeakMap,_r=new WeakMap,_n=new WeakMap,ha=new WeakMap,sn=new WeakMap,yn=new WeakMap,nn=new WeakMap,pn=new WeakMap,Vn=new WeakMap,ga=new WeakMap,na=new WeakMap,Ia=new WeakMap,ui=new WeakMap,pi=new WeakMap,Wn=new WeakMap,Oi=new WeakMap,Ft=new WeakSet,Hl=function(){try{Ke(this,yn,xn(()=>m(this,ha).call(this,m(this,bn))))}catch(n){this.error(n)}},Jl=function(n){const a=m(this,_n).failed;a&&Ke(this,pn,xn(()=>{a(m(this,bn),()=>n,()=>()=>{})}))},Ql=function(){const n=m(this,_n).pending;n&&(this.is_pending=!0,Ke(this,nn,xn(()=>n(m(this,bn)))),ya(()=>{var a=Ke(this,Vn,document.createDocumentFragment()),s=Qn();a.append(s),Ke(this,yn,lt(this,Ft,Ai).call(this,()=>xn(()=>m(this,ha).call(this,s)))),m(this,na)===0&&(m(this,bn).before(a),Ke(this,Vn,null),ka(m(this,nn),()=>{Ke(this,nn,null)}),lt(this,Ft,Ei).call(this,ye))}))},cr=function(){try{if(this.is_pending=this.has_pending_snippet(),Ke(this,na,0),Ke(this,ga,0),Ke(this,yn,xn(()=>{m(this,ha).call(this,m(this,bn))})),m(this,na)>0){var n=Ke(this,Vn,document.createDocumentFragment());$r(m(this,yn),n);const a=m(this,_n).pending;Ke(this,nn,xn(()=>a(m(this,bn))))}else lt(this,Ft,Ei).call(this,ye)}catch(a){this.error(a)}},Ei=function(n){this.is_pending=!1,n.transfer_effects(m(this,ui),m(this,pi))},Ai=function(n){var a=Qe,s=Ue,l=en;Nn(m(this,sn)),Sn(m(this,sn)),Ga(m(this,sn).ctx);try{return Ma.ensure(),n()}catch(o){return xs(o),null}finally{Nn(a),Sn(s),Ga(l)}},vr=function(n,a){var s;if(!this.has_pending_snippet()){this.parent&<(s=this.parent,Ft,vr).call(s,n,a);return}Ke(this,na,m(this,na)+n),m(this,na)===0&&(lt(this,Ft,Ei).call(this,a),m(this,nn)&&ka(m(this,nn),()=>{Ke(this,nn,null)}),m(this,Vn)&&(m(this,bn).before(m(this,Vn)),Ke(this,Vn,null)))},ur=function(n){m(this,yn)&&(cn(m(this,yn)),Ke(this,yn,null)),m(this,nn)&&(cn(m(this,nn)),Ke(this,nn,null)),m(this,pn)&&(cn(m(this,pn)),Ke(this,pn,null));var a=m(this,_n).onerror;let s=m(this,_n).failed;var l=!1,o=!1;const d=()=>{if(l){Kl();return}l=!0,o&&Tl(),m(this,pn)!==null&&ka(m(this,pn),()=>{Ke(this,pn,null)}),lt(this,Ft,Ai).call(this,()=>{lt(this,Ft,cr).call(this)})},c=v=>{try{o=!0,a==null||a(v,d),o=!1}catch(f){ia(f,m(this,sn)&&m(this,sn).parent)}s&&Ke(this,pn,lt(this,Ft,Ai).call(this,()=>{try{return xn(()=>{var f=Qe;f.b=this,f.f|=sr,s(m(this,bn),()=>v,()=>d)})}catch(f){return ia(f,m(this,sn).parent),null}}))};ya(()=>{var v;try{v=this.transform_error(n)}catch(f){ia(f,m(this,sn)&&m(this,sn).parent);return}v!==null&&typeof v=="object"&&typeof v.then=="function"?v.then(c,f=>ia(f,m(this,sn)&&m(this,sn).parent)):c(v)})};function Zl(e,n,a,s){const l=kr;var o=e.filter(y=>!y.settled),d=n.map(l);if(a.length===0&&o.length===0){s(d);return}var c=Qe,v=Yl(),f=o.length===1?o[0].promise:o.length>1?Promise.all(o.map(y=>y.promise)):null;function b(y){if((c.f&wn)===0){v();try{s([...d,...y])}catch(D){ia(D,c)}Di()}}var T=Ss();if(a.length===0){f.then(()=>b([])).finally(T);return}function _(){Promise.all(a.map(y=>Xl(y))).then(b).catch(y=>ia(y,c)).finally(T)}f?f.then(()=>{v(),_(),Di()}):_()}function Yl(){var e=Qe,n=Ue,a=en,s=ye;return function(o=!0){Nn(e),Sn(n),Ga(a),o&&(e.f&wn)===0&&(s==null||s.activate(),s==null||s.apply())}}function Di(e=!0){Nn(null),Sn(null),Ga(null),e&&(ye==null||ye.deactivate())}function Ss(){var e=Qe,n=e.b,a=ye,s=!!(n!=null&&n.is_rendered());return n==null||n.update_pending_count(1,a),a.increment(s,e),()=>{n==null||n.update_pending_count(-1,a),a.decrement(s,e)}}function kr(e){var n=tn|Xt;return Qe!==null&&(Qe.f|=Ja),{ctx:en,deps:null,effects:null,equals:ms,f:n,fn:e,reactions:null,rv:0,v:Ht,wv:0,parent:Qe,ac:null}}const Xa=Symbol("obsolete");function Xl(e,n,a){let s=Qe;s===null&&yl();var l=void 0,o=Ea(Ht),d=!Ue,c=new Set;return mo(()=>{var y,D;var v=Qe,f=us();l=f.promise;try{Promise.resolve(e()).then(f.resolve,B=>{B!==Ni&&f.reject(B)}).finally(Di)}catch(B){f.reject(B),Di()}var b=ye;if(d){if((v.f&Ha)!==0)var T=Ss();if((y=s.b)!=null&&y.is_rendered())(D=b.async_deriveds.get(v))==null||D.reject(Xa);else for(const B of c.values())B.reject(Xa);c.add(f),b.async_deriveds.set(v,f)}const _=(B,M=void 0)=>{T==null||T(),c.delete(f),M!==Xa&&(b.activate(),M?(o.f|=sa,Va(o,M)):((o.f&sa)!==0&&(o.f^=sa),Va(o,B)),b.deactivate())};f.promise.then(_,B=>_(null,B||"unknown"))}),Fs(()=>{for(const v of c)v.reject(Xa)}),new Promise(v=>{function f(b){function T(){b===l?v(o):f(l)}b.then(T,T)}f(l)})}function q(e){const n=kr(e);return Us(n),n}function eo(e){const n=kr(e);return n.equals=bs,n}function to(e){var n=e.effects;if(n!==null){e.effects=null;for(var a=0;a this.schedule(s)){var s=m(this,Ln).get(n);if(s){m(this,Ln).delete(n);for(var l of s.d)Vt(l,Xt),a(l);for(l of s.m)Vt(l,Kn),a(l)}m(this,Ka).add(n)}capture(n,a,s=!1){n.v!==Ht&&!this.previous.has(n)&&this.previous.set(n,n.v),(n.f&sa)===0&&(this.current.set(n,[a,s]),Yt==null||Yt.set(n,a)),this.is_fork||(n.v=a)}activate(){ye=this}deactivate(){ye=null,Yt=null}flush(){try{Ji=!0,ye=this,lt(this,vt,ei).call(this)}finally{Lr=0,pr=null,$a=null,Ci=null,Ji=!1,ye=null,Yt=null,xa.clear()}}discard(){var n;for(const a of m(this,Ba))a(this);m(this,Ba).clear();for(const a of this.async_deriveds.values())a.reject(Xa);lt(this,vt,ti).call(this),(n=m(this,Fa))==null||n.resolve()}register_created_effect(n){m(this,fi).push(n)}increment(n,a){if(Ke(this,Ra,m(this,Ra)+1),n){let s=m(this,jn).get(a)??0;m(this,jn).set(a,s+1)}}decrement(n,a){if(Ke(this,Ra,m(this,Ra)-1),n){let s=m(this,jn).get(a)??0;s===1?m(this,jn).delete(a):m(this,jn).set(a,s-1)}m(this,ba)||(Ke(this,ba,!0),ya(()=>{Ke(this,ba,!1),this.linked&&this.flush()}))}transfer_effects(n,a){for(const s of n)m(this,Un).add(s);for(const s of a)m(this,En).add(s);n.clear(),a.clear()}oncommit(n){m(this,Oa).add(n)}ondiscard(n){m(this,Ba).add(n)}settled(){return(m(this,Fa)??Ke(this,Fa,us())).promise}static ensure(){if(ye===null){const n=ye=new Bi;!Ji&&!ri&&ya(()=>{m(n,La)||n.flush()})}return ye}apply(){{Yt=null;return}}schedule(n){var l;if(pr=n,(l=n.b)!=null&&l.is_pending&&(n.f&(Na|Ki|ps))!==0&&(n.f&Ha)===0){n.b.defer_effect(n);return}for(var a=n;a.parent!==null;){a=a.parent;var s=a.f;if($a!==null&&a===Qe&&(Ue===null||(Ue.f&tn)===0))return;if((s&(la|zn))!==0){if((s&Jt)===0)return;a.f^=Jt}}m(this,ln).push(a)}};La=new WeakMap,aa=new WeakMap,ma=new WeakMap,Oa=new WeakMap,Ba=new WeakMap,Ra=new WeakMap,jn=new WeakMap,Fa=new WeakMap,ln=new WeakMap,fi=new WeakMap,Un=new WeakMap,En=new WeakMap,Ln=new WeakMap,Ka=new WeakMap,ba=new WeakMap,vt=new WeakSet,fr=function(){if(this.is_fork)return!0;for(const s of m(this,jn).keys()){for(var n=s,a=!1;n.parent!==null;){if(m(this,Ln).has(n)){a=!0;break}n=n.parent}if(!a)return!0}return!1},ei=function(){var v,f,b,T;Ke(this,La,!0),Lr++>1e3&&(lt(this,vt,ti).call(this),so());for(const _ of m(this,Un))m(this,En).delete(_),Vt(_,Xt),this.schedule(_);for(const _ of m(this,En))Vt(_,Kn),this.schedule(_);const n=m(this,ln);Ke(this,ln,[]),this.apply();var a=$a=[],s=[],l=Ci=[];for(const _ of n)try{lt(this,vt,hr).call(this,_,a,s)}catch(y){throw $s(_),lt(this,vt,fr).call(this)||this.discard(),y}if(ye=null,l.length>0){var o=Bi.ensure();for(const _ of l)o.schedule(_)}if($a=null,Ci=null,lt(this,vt,fr).call(this)){lt(this,vt,za).call(this,s),lt(this,vt,za).call(this,a);for(const[_,y]of m(this,Ln))zs(_,y);l.length>0&<(v=ye,vt,ei).call(v);return}const d=lt(this,vt,As).call(this);if(d){lt(this,vt,za).call(this,s),lt(this,vt,za).call(this,a),lt(f=d,vt,Cs).call(f,this);return}m(this,Un).clear(),m(this,En).clear();for(const _ of m(this,Oa))_(this);m(this,Oa).clear(),ii=this,Or(s),Or(a),ii=null,(b=m(this,Fa))==null||b.resolve();var c=ye;if(m(this,Ra)===0&&(m(this,ln).length===0||c!==null)&<(this,vt,ti).call(this),m(this,ln).length>0)if(c!==null){const _=c;m(_,ln).push(...m(this,ln).filter(y=>!m(_,ln).includes(y)))}else c=this;c!==null&<(T=c,vt,ei).call(T)},hr=function(n,a,s){n.f^=Jt;for(var l=n.first;l!==null;){var o=l.f,d=(o&(zn|la))!==0,c=d&&(o&Jt)!==0,v=c||(o&an)!==0||m(this,Ln).has(l);if(!v&&l.fn!==null){d?l.f^=Jt:(o&Na)!==0?a.push(l):_i(l)&&((o&Cn)!==0&&m(this,En).add(l),Wa(l));var f=l.first;if(f!==null){l=f;continue}}for(;l!==null;){var b=l.next;if(b!==null){l=b;break}l=l.parent}}},As=function(){for(var n=m(this,aa);n!==null;){if(!n.is_fork){for(const[a,[,s]]of this.current)if(n.current.has(a)&&!s)return n}n=m(n,aa)}return null},Cs=function(n){var s;for(const[l,o]of n.current)!this.previous.has(l)&&n.previous.has(l)&&this.previous.set(l,n.previous.get(l)),this.current.set(l,o);for(const[l,o]of n.async_deriveds){const d=this.async_deriveds.get(l);d&&o.promise.then(d.resolve).catch(d.reject)}n.async_deriveds.clear(),this.transfer_effects(m(n,Un),m(n,En));const a=l=>{var o=l.reactions;if(o!==null)for(const v of o){var d=v.f;if((d&tn)!==0)a(v);else{var c=v;d&(Pa|Cn)&&!this.async_deriveds.has(c)&&(m(this,En).delete(c),Vt(c,Xt),this.schedule(c))}}};for(const l of this.current.keys())a(l);this.oncommit(()=>n.discard()),lt(s=n,vt,ti).call(s),ye=this,lt(this,vt,ei).call(this)},za=function(n){for(var a=0;a !_.current.get(y)[1]);if(!(!m(_,La)||l.length===0)){var o=l.filter(y=>!this.current.has(y));if(o.length===0)n&&_.discard();else if(a.length>0){if(n)for(const y of m(this,Ka))_.unskip_effect(y,D=>{var B;(D.f&(Cn|Pa))!==0?_.schedule(D):lt(B=_,vt,za).call(B,[D])});_.activate();var d=new Set,c=new Map;for(var v of a)Ts(v,o,d,c);c=new Map;var f=[..._.current].filter(([y,D])=>{const B=this.current.get(y);return B?B[0]!==D[0]||B[1]!==D[1]:!0}).map(([y])=>y);if(f.length>0)for(const y of m(this,fi))(y.f&(wn|an|$i))===0&&Sr(y,f,c)&&((y.f&(Pa|Cn))!==0?(Vt(y,Xt),_.schedule(y)):m(_,Un).add(y));if(m(_,ln).length>0&&!m(_,ba)){_.apply();for(var b of m(_,ln))lt(T=_,vt,hr).call(T,b,[],[]);Ke(_,ln,[])}_.deactivate()}}}},ti=function(){if(this.linked){var n=m(this,aa),a=m(this,ma);n===null?Hi=a:Ke(n,ma,a),a===null?Ta=n:Ke(a,aa,n),this.linked=!1}};let Ma=Bi;function ro(e){var n=ri;ri=!0;try{for(var a;;){if(ql(),ye===null)return a;ye.flush()}}finally{ri=n}}function so(){try{Ml()}catch(e){ia(e,pr)}}let Mn=null;function Or(e){var n=e.length;if(n!==0){for(var a=0;a 0)){xa.clear();for(const l of Mn){if((l.f&(wn|an))!==0)continue;const o=[l];let d=l.parent;for(;d!==null;)Mn.has(d)&&(Mn.delete(d),o.push(d)),d=d.parent;for(let c=o.length-1;c>=0;c--){const v=o[c];(v.f&(wn|an))===0&&Wa(v)}}Mn.clear()}}Mn=null}}function Ts(e,n,a,s){if(!a.has(e)&&(a.add(e),e.reactions!==null))for(const l of e.reactions){const o=l.f;(o&tn)!==0?Ts(l,n,a,s):(o&(Pa|Cn))!==0&&(o&Xt)===0&&Sr(l,n,s)&&(Vt(l,Xt),Mr(l))}}function Sr(e,n,a){const s=a.get(e);if(s!==void 0)return s;if(e.deps!==null)for(const l of e.deps){if(zi.call(n,l))return!0;if((l.f&tn)!==0&&Sr(l,n,a))return a.set(l,!0),!0}return a.set(e,!1),!1}function Mr(e){ye.schedule(e)}function zs(e,n){if(!((e.f&zn)!==0&&(e.f&Jt)!==0)){(e.f&Xt)!==0?n.d.push(e):(e.f&Kn)!==0&&n.m.push(e),Vt(e,Jt);for(var a=e.first;a!==null;)zs(a,n),a=a.next}}function $s(e){Vt(e,Jt);for(var n=e.first;n!==null;)$s(n),n=n.next}let Ii=new Set;const xa=new Map;let Ps=!1;function Ea(e,n){var a={f:0,v:e,reactions:null,equals:ms,rv:0,wv:0};return a}function L(e,n){const a=Ea(e);return Us(a),a}function lo(e,n=!1,a=!0){const s=Ea(e);return n||(s.equals=bs),s}function u(e,n,a=!1){Ue!==null&&(!Tn||(Ue.f&$i)!==0)&&_s()&&(Ue.f&(tn|Cn|Pa|$i))!==0&&(Rn===null||!Rn.has(e))&&Cl();let s=a?jt(n):n;return Va(e,s,Ci)}function Va(e,n,a=null){if(!e.equals(n)){xa.set(e,oa?n:e.v);var s=Ma.ensure();if(s.capture(e,n),(e.f&tn)!==0){const l=e;(e.f&Xt)!==0&&wr(l),Yt===null&&xr(l)}e.wv=Js(),Ds(e,Xt,a),Qe!==null&&(Qe.f&Jt)!==0&&(Qe.f&(zn|la))===0&&(mn===null?_o([e]):mn.push(e)),!s.is_fork&&Ii.size>0&&!Ps&&oo()}return n}function oo(){Ps=!1;for(const e of Ii){(e.f&Jt)!==0&&Vt(e,Kn);let n;try{n=_i(e)}catch{n=!0}n&&Wa(e)}Ii.clear()}function si(e){u(e,e.v+1)}function Ds(e,n,a){var s=e.reactions;if(s!==null)for(var l=s.length,o=0;o {if(wa===o)return c();var v=Ue,f=wa;Sn(null),Nr(o);var b=c();return Sn(v),Nr(f),b};return s&&a.set("length",L(e.length)),new Proxy(e,{defineProperty(c,v,f){(!("value"in f)||f.configurable===!1||f.enumerable===!1||f.writable===!1)&&El();var b=a.get(v);return b===void 0?d(()=>{var T=L(f.value);return a.set(v,T),T}):u(b,f.value,!0),!0},deleteProperty(c,v){var f=a.get(v);if(f===void 0){if(v in c){const b=d(()=>L(Ht));a.set(v,b),si(l)}}else u(f,Ht),si(l);return!0},get(c,v,f){var y;if(v===Da)return e;var b=a.get(v),T=v in c;if(b===void 0&&(!T||(y=ai(c,v))!=null&&y.writable)&&(b=d(()=>{var D=jt(T?c[v]:Ht),B=L(D);return B}),a.set(v,b)),b!==void 0){var _=t(b);return _===Ht?void 0:_}return Reflect.get(c,v,f)},getOwnPropertyDescriptor(c,v){var f=Reflect.getOwnPropertyDescriptor(c,v);if(f&&"value"in f){var b=a.get(v);b&&(f.value=t(b))}else if(f===void 0){var T=a.get(v),_=T==null?void 0:T.v;if(T!==void 0&&_!==Ht)return{enumerable:!0,configurable:!0,value:_,writable:!0}}return f},has(c,v){var _;if(v===Da)return!0;var f=a.get(v),b=f!==void 0&&f.v!==Ht||Reflect.has(c,v);if(f!==void 0||Qe!==null&&(!b||(_=ai(c,v))!=null&&_.writable)){f===void 0&&(f=d(()=>{var y=b?jt(c[v]):Ht,D=L(y);return D}),a.set(v,f));var T=t(f);if(T===Ht)return!1}return b},set(c,v,f,b){var Ee;var T=a.get(v),_=v in c;if(s&&v==="length")for(var y=f;y L(Ht)),a.set(y+"",D))}if(T===void 0)(!_||(Ee=ai(c,v))!=null&&Ee.writable)&&(T=d(()=>L(void 0)),u(T,jt(f)),a.set(v,T));else{_=T.v!==Ht;var B=d(()=>jt(f));u(T,B)}var M=Reflect.getOwnPropertyDescriptor(c,v);if(M!=null&&M.set&&M.set.call(b,f),!_){if(s&&typeof v=="string"){var K=a.get("length"),Oe=Number(v);Number.isInteger(Oe)&&Oe>=K.v&&u(K,Oe+1)}si(l)}return!0},ownKeys(c){t(l);var v=Reflect.ownKeys(c).filter(T=>{var _=a.get(T);return _===void 0||_.v!==Ht});for(var[f,b]of a)b.v!==Ht&&!(f in c)&&v.push(f);return v},setPrototypeOf(){Al()}})}function Br(e){try{if(e!==null&&typeof e=="object"&&Da in e)return e[Da]}catch{}return e}function co(e,n){return Object.is(Br(e),Br(n))}var Rr,Is,Ls,Os;function vo(){if(Rr===void 0){Rr=window,Is=/Firefox/.test(navigator.userAgent);var e=Element.prototype,n=Node.prototype,a=Text.prototype;Ls=ai(n,"firstChild").get,Os=ai(n,"nextSibling").get,Ir(e)&&(e[or]=void 0,e[Si]=null,e[dr]=void 0,e.__e=void 0),Ir(a)&&(a[Ya]=void 0)}}function Qn(e=""){return document.createTextNode(e)}function ra(e){return Ls.call(e)}function mi(e){return Os.call(e)}function r(e,n){return ra(e)}function tt(e,n=!1){{var a=ra(e);return a instanceof Comment&&a.data===""?mi(a):a}}function i(e,n=1,a=!1){let s=e;for(;n--;)s=mi(s);return s}function uo(e){e.textContent=""}function Bs(){return!1}function Rs(e,n,a){return n==null||n===gs?a?document.createElement(e,{is:a}):document.createElement(e):a?document.createElementNS(n,e,{is:a}):document.createElementNS(n,e)}let Fr=!1;function po(){Fr||(Fr=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var n;if(!e.defaultPrevented)for(const a of e.target.elements)(n=a[Mi])==null||n.call(a)})},{capture:!0}))}function Er(e){var n=Ue,a=Qe;Sn(null),Nn(null);try{return e()}finally{Sn(n),Nn(a)}}function Ar(e,n,a,s=a){e.addEventListener(n,()=>Er(a));const l=e[Mi];l?e[Mi]=()=>{l(),s(!0)}:e[Mi]=()=>s(!0),po()}function fo(e){Qe===null&&(Ue===null&&Sl(),wl()),oa&&kl()}function ho(e,n){var a=n.last;a===null?n.last=n.first=e:(a.next=e,e.prev=a,n.last=e)}function Zn(e,n){var a=Qe;a!==null&&(a.f&an)!==0&&(e|=an);var s={ctx:en,deps:null,nodes:null,f:e|Xt|kn,first:null,fn:n,last:null,next:null,parent:a,b:a&&a.b,prev:null,teardown:null,wv:0,ac:null};ye==null||ye.register_created_effect(s);var l=s;if((e&Na)!==0)$a!==null?$a.push(s):Ma.ensure().schedule(s);else if(n!==null){try{Wa(s)}catch(d){throw cn(s),d}l.deps===null&&l.teardown===null&&l.nodes===null&&l.first===l.last&&(l.f&Ja)===0&&(l=l.first,(e&Cn)!==0&&(e&qa)!==0&&l!==null&&(l.f|=qa))}if(l!==null&&(l.parent=a,a!==null&&ho(l,a),Ue!==null&&(Ue.f&tn)!==0&&(e&la)===0)){var o=Ue;(o.effects??(o.effects=[])).push(l)}return s}function Cr(){return Ue!==null&&!Tn}function Fs(e){const n=Zn(Ki,null);return Vt(n,Jt),n.teardown=e,n}function bi(e){fo();var n=Qe.f,a=!Ue&&(n&zn)!==0&&en!==null&&!en.i;if(a){var s=en;(s.e??(s.e=[])).push(e)}else return Ks(e)}function Ks(e){return Zn(Na|ml,e)}function go(e){Ma.ensure();const n=Zn(la|Ja,e);return(a={})=>new Promise(s=>{a.outro?ka(n,()=>{cn(n),s(void 0)}):(cn(n),s(void 0))})}function Ns(e){return Zn(Na,e)}function mo(e){return Zn(Pa|Ja,e)}function qi(e,n=0){return Zn(Ki|n,e)}function z(e,n=[],a=[],s=[]){Zl(s,n,a,l=>{Zn(Ki,()=>{e(...l.map(t))})})}function Tr(e,n=0){var a=Zn(Cn|n,e);return a}function xn(e){return Zn(zn|Ja,e)}function qs(e){var n=e.teardown;if(n!==null){const a=oa,s=Ue;Kr(!0),Sn(null);try{n.call(null)}finally{Kr(a),Sn(s)}}}function zr(e,n=!1){var a=e.first;for(e.first=e.last=null;a!==null;){const l=a.ac;l!==null&&Er(()=>{l.abort(Ni)});var s=a.next;(a.f&la)!==0?a.parent=null:cn(a,n),a=s}}function bo(e){for(var n=e.first;n!==null;){var a=n.next;(n.f&zn)===0&&cn(n),n=a}}function cn(e,n=!0){var a=!1;(n||(e.f&gl)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Gs(e.nodes.start,e.nodes.end),a=!0),e.f|=lr,zr(e,n&&!a),ci(e,0);var s=e.nodes&&e.nodes.t;if(s!==null)for(const o of s)o.stop();qs(e),e.f^=lr,e.f|=wn;var l=e.parent;l!==null&&l.first!==null&&Vs(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Gs(e,n){for(;e!==null;){var a=e===n?null:mi(e);e.remove(),e=a}}function Vs(e){var n=e.parent,a=e.prev,s=e.next;a!==null&&(a.next=s),s!==null&&(s.prev=a),n!==null&&(n.first===e&&(n.first=s),n.last===e&&(n.last=a))}function ka(e,n,a=!0){var s=[];Ws(e,s,!0);var l=()=>{a&&cn(e),n&&n()},o=s.length;if(o>0){var d=()=>--o||l();for(var c of s)c.out(d)}else l()}function Ws(e,n,a){if((e.f&an)===0){e.f^=an;var s=e.nodes&&e.nodes.t;if(s!==null)for(const c of s)(c.is_global||a)&&n.push(c);for(var l=e.first;l!==null;){var o=l.next;if((l.f&la)===0){var d=(l.f&qa)!==0||(l.f&zn)!==0&&(e.f&Cn)!==0;Ws(l,n,d?a:!1)}l=o}}}function Li(e){js(e,!0)}function js(e,n){if((e.f&an)!==0){e.f^=an,(e.f&Jt)===0&&(Vt(e,Xt),Ma.ensure().schedule(e));for(var a=e.first;a!==null;){var s=a.next,l=(a.f&qa)!==0||(a.f&zn)!==0;js(a,l?n:!1),a=s}var o=e.nodes&&e.nodes.t;if(o!==null)for(const d of o)(d.is_global||n)&&d.in()}}function $r(e,n){if(e.nodes)for(var a=e.nodes.start,s=e.nodes.end;a!==null;){var l=a===s?null:mi(a);n.append(a),a=l}}let Ti=!1,oa=!1;function Kr(e){oa=e}let Ue=null,Tn=!1;function Sn(e){Ue=e}let Qe=null;function Nn(e){Qe=e}let Rn=null;function Us(e){Ue!==null&&(Rn??(Rn=new Set)).add(e)}let on=null,un=0,mn=null;function _o(e){mn=e}let Hs=1,ua=0,wa=ua;function Nr(e){wa=e}function Js(){return++Hs}function _i(e){var n=e.f;if((n&Xt)!==0)return!0;if(n&tn&&(e.f&=~Sa),(n&Kn)!==0){for(var a=e.deps,s=a.length,l=0;l e.wv)return!0}(n&kn)!==0&&Yt===null&&Vt(e,Jt)}return!1}function Qs(e,n,a=!0){var s=e.reactions;if(s!==null&&!(Rn!==null&&Rn.has(e)))for(var l=0;l{e.ac.abort(Ni)}),e.ac=null);try{e.f|=Pi;var b=e.fn,T=b();e.f|=Ha;var _=e.deps,y=ye==null?void 0:ye.is_fork;if(on!==null){var D;if(y||ci(e,un),_!==null&&un>0)for(_.length=un+on.length,D=0;D {throw K});throw _}}finally{e[pa]=n,delete e.currentTarget,Sn(b),Nn(T)}}}var os;const Qi=((os=globalThis==null?void 0:globalThis.window)==null?void 0:os.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function So(e){return(Qi==null?void 0:Qi.createHTML(e))??e}function Mo(e){var n=Rs("template");return n.innerHTML=So(e.replaceAll("","")),n.content}function ja(e,n){var a=Qe;a.nodes===null&&(a.nodes={start:e,end:n,a:null,t:null})}function g(e,n){var a=(n&Il)!==0,s=(n&Ll)!==0,l,o=!e.startsWith("");return()=>{l===void 0&&(l=Mo(o?e:""+e),a||(l=ra(l)));var d=s||Is?document.importNode(l,!0):l.cloneNode(!0);if(a){var c=ra(d),v=d.lastChild;ja(c,v)}else ja(d,d);return d}}function li(e=""){{var n=Qn(e+"");return ja(n,n),n}}function Ua(){var e=document.createDocumentFragment(),n=document.createComment(""),a=Qn();return e.append(n,a),ja(n,a),e}function p(e,n){e!==null&&e.before(n)}function h(e,n){var a=n==null?"":typeof n=="object"?`${n}`:n;a!==(e[Ya]??(e[Ya]=e.nodeValue))&&(e[Ya]=a,e.nodeValue=`${a}`)}function Eo(e,n){return Ao(e,n)}const wi=new Map;function Ao(e,{target:n,anchor:a,props:s={},events:l,context:o,intro:d=!0,transformError:c}){vo();var v=void 0,f=go(()=>{var b=a??n.appendChild(Qn());jl(b,{pending:()=>{}},y=>{$n({});var D=en;o&&(D.c=o),l&&(s.$$events=l),v=e(y,s)||{},Pn()},c);var T=new Set,_=y=>{for(var D=0;D {var M;for(var y of T)for(const K of[n,document]){var D=wi.get(K),B=D.get(y);--B==0?(K.removeEventListener(y,Gr),D.delete(y),D.size===0&&wi.delete(K)):D.set(y,B)}gr.delete(_),b!==a&&((M=b.parentNode)==null||M.removeChild(b))}});return Co.set(v,f),v}let Co=new WeakMap;var An,On,fn,_a,hi,gi,Ri;class To{constructor(n,a=!0){vn(this,"anchor");qe(this,An,new Map);qe(this,On,new Map);qe(this,fn,new Map);qe(this,_a,new Set);qe(this,hi,!0);qe(this,gi,n=>{if(m(this,An).has(n)){var a=m(this,An).get(n),s=m(this,On).get(a);if(s)Li(s),m(this,_a).delete(a);else{var l=m(this,fn).get(a);l&&(Li(l.effect),m(this,On).set(a,l.effect),m(this,fn).delete(a),l.fragment.lastChild.remove(),this.anchor.before(l.fragment),s=l.effect)}for(const[o,d]of m(this,An)){if(m(this,An).delete(o),o===n)break;const c=m(this,fn).get(d);c&&(cn(c.effect),m(this,fn).delete(d))}for(const[o,d]of m(this,On)){if(o===a||m(this,_a).has(o))continue;const c=()=>{if(Array.from(m(this,An).values()).includes(o)){var f=document.createDocumentFragment();$r(d,f),f.append(Qn()),m(this,fn).set(o,{effect:d,fragment:f})}else cn(d);m(this,_a).delete(o),m(this,On).delete(o)};m(this,hi)||!s?(m(this,_a).add(o),ka(d,c,!1)):c()}}});qe(this,Ri,n=>{m(this,An).delete(n);const a=Array.from(m(this,An).values());for(const[s,l]of m(this,fn))a.includes(s)||(cn(l.effect),m(this,fn).delete(s))});this.anchor=n,Ke(this,hi,a)}ensure(n,a){var s=ye,l=Bs();if(a&&!m(this,On).has(n)&&!m(this,fn).has(n))if(l){var o=document.createDocumentFragment(),d=Qn();o.append(d),m(this,fn).set(n,{effect:xn(()=>a(d)),fragment:o})}else m(this,On).set(n,xn(()=>a(this.anchor)));if(m(this,An).set(s,n),l){for(const[c,v]of m(this,On))c===n?s.unskip_effect(v):s.skip_effect(v);for(const[c,v]of m(this,fn))c===n?s.unskip_effect(v.effect):s.skip_effect(v.effect);s.oncommit(m(this,gi)),s.ondiscard(m(this,Ri))}else m(this,gi).call(this,s)}}An=new WeakMap,On=new WeakMap,fn=new WeakMap,_a=new WeakMap,hi=new WeakMap,gi=new WeakMap,Ri=new WeakMap;function O(e,n,a=!1){var s=new To(e),l=a?qa:0;function o(d,c){s.ensure(d,c)}Tr(()=>{var d=!1;n((c,v=0)=>{d=!0,o(v,c)}),d||o(-1,null)},l)}function Xe(e,n){return n}function zo(e,n,a){for(var s=[],l=n.length,o,d=n.length,c=0;c {if(o){if(o.pending.delete(T),o.done.add(T),o.pending.size===0){var _=e.outrogroups;mr(e,Fi(o.done)),_.delete(o),_.size===0&&(e.outrogroups=null)}}else d-=1},!1)}if(d===0){var v=s.length===0&&a!==null;if(v){var f=a,b=f.parentNode;uo(b),b.append(f),e.items.clear()}mr(e,n,!v)}else o={pending:new Set(n),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(o)}function mr(e,n,a=!0){var s;if(e.pending.size>0){s=new Set;for(const d of e.pending.values())for(const c of d)s.add(e.items.get(c).e)}for(var l=0;l {var Ee=a();return yr(Ee)?Ee:Ee==null?[]:Fi(Ee)}),_,y=new Map,D=!0;function B(Ee){(Oe.effect.f&wn)===0&&(Oe.pending.delete(Ee),Oe.fallback=b,$o(Oe,_,d,n,s),b!==null&&(_.length===0?(b.f&Bn)===0?Li(b):(b.f^=Bn,ni(b,null,d)):ka(b,()=>{b=null})))}function M(Ee){Oe.pending.delete(Ee)}var K=Tr(()=>{_=t(T);for(var Ee=_.length,Ce=new Set,Re=ye,te=Bs(),X=0;X o(d)):(b=xn(()=>o(Vr??(Vr=Qn()))),b.f|=Bn)),Ee>Ce.size&&xl(),!D)if(y.set(Re,Ce),te){for(const[Ze,ut]of c)Ce.has(Ze)||Re.skip_effect(ut.e);Re.oncommit(B),Re.ondiscard(M)}else B(Re);t(T)}),Oe={effect:K,items:c,pending:y,outrogroups:null,fallback:b};D=!1}function Za(e){for(;e!==null&&(e.f&zn)===0;)e=e.next;return e}function $o(e,n,a,s,l){var Ne,Ze,ut,I,ue,Ae,He,N,ve;var o=(s&Pl)!==0,d=n.length,c=e.items,v=Za(e.effect.first),f,b=null,T,_=[],y=[],D,B,M,K;if(o)for(K=0;K 0){var Be=(s&hs)!==0&&d===0?a:null;if(o){for(K=0;K {var pe,je;if(T!==void 0)for(M of T)(je=(pe=M.nodes)==null?void 0:pe.a)==null||je.apply()})}function Po(e,n,a,s,l,o,d,c){var v=(d&zl)!==0?(d&Dl)===0?lo(a,!1,!1):Ea(a):null,f=(d&$l)!==0?Ea(l):null;return{v,i:f,e:xn(()=>(o(n,v??a,f??l,c),()=>{e.delete(s)}))}}function ni(e,n,a){if(e.nodes)for(var s=e.nodes.start,l=e.nodes.end,o=n&&(n.f&Bn)===0?n.nodes.start:a;s!==null;){var d=mi(s);if(o.before(s),s===l)return;s=d}}function Xn(e,n,a){n===null?e.effect.first=a:n.next=a,a===null?e.effect.last=n:a.prev=n}function Ye(e,n,a=!1,s=!1,l=!1,o=!1){var d=e,c="";if(a)var v=e;z(()=>{var f=Qe;if(c!==(c=n()??"")){if(a){f.nodes=null,v.innerHTML=c,c!==""&&ja(ra(v),v.lastChild);return}if(f.nodes!==null&&(Gs(f.nodes.start,f.nodes.end),f.nodes=null),c!==""){var b=s?Ol:l?Bl:void 0,T=Rs(s?"svg":l?"math":"template",b);T.innerHTML=c;var _=s||l?T:T.content;if(ja(ra(_),_.lastChild),s||l)for(;ra(_);)d.before(ra(_));else d.before(_)}}})}function Do(e,n,a){var s=e==null?"":""+e;return n&&(s=s?s+" "+n:n),s===""?null:s}function Io(e,n){return e==null?null:String(e)}function Et(e,n,a,s,l,o){var d=e[or];if(d!==a||d===void 0){var c=Do(a,s);c==null?e.removeAttribute("class"):e.className=c,e[or]=a}return o}function At(e,n,a,s){var l=e[dr];if(l!==n){var o=Io(n);o==null?e.removeAttribute("style"):e.style.cssText=o,e[dr]=n}return s}function tl(e,n,a=!1){if(e.multiple){if(n==null)return;if(!yr(n))return Fl();for(var s of e.options)s.selected=n.includes(oi(s));return}for(s of e.options){var l=oi(s);if(co(l,n)){s.selected=!0;return}}(!a||n!==void 0)&&(e.selectedIndex=-1)}function Lo(e){var n=new MutationObserver(()=>{tl(e,e.__value)});n.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Fs(()=>{n.disconnect()})}function Jn(e,n,a=n){var s=new WeakSet,l=!0;Ar(e,"change",o=>{var d=o?"[selected]":":checked",c;if(e.multiple)c=[].map.call(e.querySelectorAll(d),oi);else{var v=e.querySelector(d)??e.querySelector("option:not([disabled])");c=v&&oi(v)}a(c),e.__value=c,ye!==null&&s.add(ye)}),Ns(()=>{var o=n();if(e===document.activeElement){var d=ye;if(s.has(d))return}if(tl(e,o,l),l&&o===void 0){var c=e.querySelector(":checked");c!==null&&(o=oi(c),a(o))}e.__value=o,l=!1}),Lo(e)}function oi(e){return"__value"in e?e.__value:e.value}const Oo=Symbol("is custom element"),Bo=Symbol("is html"),Ro=_l?"progress":"PROGRESS";function ea(e,n){var a=nl(e);a.value===(a.value=n??void 0)||e.value===n&&(n!==0||e.nodeName!==Ro)||(e.value=n??"")}function Aa(e,n,a,s){var l=nl(e);l[n]!==(l[n]=a)&&(n==="loading"&&(e[bl]=a),a==null?e.removeAttribute(n):typeof a!="string"&&Fo(e).includes(n)?e[n]=a:e.setAttribute(n,a))}function nl(e){return e[Si]??(e[Si]={[Oo]:e.nodeName.includes("-"),[Bo]:e.namespaceURI===gs})}var Wr=new Map;function Fo(e){var n=e.getAttribute("is")||e.nodeName,a=Wr.get(n);if(a)return a;Wr.set(n,a=[]);for(var s,l=e,o=Element.prototype;o!==l;){s=vl(l);for(var d in s)s[d].set&&d!=="innerHTML"&&d!=="textContent"&&d!=="innerText"&&a.push(d);l=vs(l)}return a}function dn(e,n,a=n){var s=new WeakSet;Ar(e,"input",async l=>{var o=l?e.defaultValue:e.value;if(o=Zi(e)?Yi(o):o,a(o),ye!==null&&s.add(ye),await xo(),o!==(o=n())){var d=e.selectionStart,c=e.selectionEnd,v=e.value.length;if(e.value=o??"",c!==null){var f=e.value.length;d===c&&c===v&&f>v?(e.selectionStart=f,e.selectionEnd=f):(e.selectionStart=d,e.selectionEnd=Math.min(c,f))}}}),Qa(n)==null&&e.value&&(a(Zi(e)?Yi(e.value):e.value),ye!==null&&s.add(ye)),qi(()=>{var l=n();if(e===document.activeElement){var o=ye;if(s.has(o))return}Zi(e)&&l===Yi(e.value)||e.type==="date"&&!l&&!e.value||l!==e.value&&(e.value=l??"")})}function Ko(e,n,a=n){Ar(e,"change",s=>{var l=s?e.defaultChecked:e.checked;a(l)}),Qa(n)==null&&a(e.checked),qi(()=>{var s=n();e.checked=!!s})}function Zi(e){var n=e.type;return n==="number"||n==="range"}function Yi(e){return e===""?null:+e}function Xi(e,n){return e===n||(e==null?void 0:e[Da])===n}function No(e={},n,a,s){var l=en.r,o=Qe;return Ns(()=>{var d,c;return qi(()=>{d=c,c=[],Qa(()=>{Xi(a(...c),e)||(n(e,...c),d&&Xi(a(...d),e)&&n(null,...d))})}),()=>{let v=o;for(;v!==l&&v.parent!==null&&v.parent.f&lr;)v=v.parent;const f=()=>{c&&Xi(a(...c),e)&&n(null,...c)},b=v.teardown;v.teardown=()=>{f(),b==null||b()}}}),e}function yi(e){en===null&&fs(),bi(()=>{const n=Qa(e);if(typeof n=="function")return n})}function qo(e){en===null&&fs(),yi(()=>()=>Qa(e))}let vi=localStorage.getItem("mc_token")||"";function al(){return vi}function Go(e){vi=(e||"").trim(),localStorage.setItem("mc_token",vi)}function Vo(){const e={"Content-Type":"application/json"};return vi&&(e["X-MC-Token"]=vi),e}function di(){return localStorage.getItem("mc_hf_token")||""}function Wo(e){localStorage.setItem("mc_hf_token",(e||"").trim())}async function we(e,n={}){const a=await fetch(e,{headers:Vo(),...n}),s=await a.json().catch(()=>({}));if(!a.ok)throw new Error(s.error||"HTTP "+a.status);return s}const jo=(e,n=document)=>n.querySelector(e),jr=(e,n=document)=>[...n.querySelectorAll(e)];function Fn(e){return String(e??"").replace(/[&<>]/g,n=>({"&":"&","<":"<",">":">"})[n])}let Ur;function ce(e,n=!1){const a=jo("#toast");a&&(a.textContent=e,a.className="toast show"+(n?" err":""),clearTimeout(Ur),Ur=setTimeout(()=>a.className="toast",3200))}function Uo(e,n){return e==="running"||e==="ready"?'geladen':e==="loading"||e==="starting"?'lädt…':e==="downloading"?`↓ Download${n!=null?` ${Math.round(n)}%`:""}`:'bereit'}const ct=e=>``,Gi={logo:ct(' '),grid:ct(' '),cpu:ct(' '),pulse:ct(' '),server:ct(' '),book:ct(' '),help:ct(' '),settings:ct(' '),swap:ct(' '),monitor:ct(' '),layers:ct(' '),alert:ct(' '),gauge:ct(' '),search:ct(' '),compass:ct(' '),code:ct(' '),eye:ct(' '),refresh:ct(' '),file:ct(' '),database:ct(' '),thermo:ct(' '),shield:ct(' '),info:ct(' '),chevron:ct(' '),bolt:ct(' '),x:ct(' '),check:ct(' '),download:ct(' '),clock:ct(' ')};function Ut(e){return Gi[e]||""}function br(e){return`${Gi.info}`}function ca(e){if(!e&&e!==0)return"–";const n=e/1024/1024/1024;return n>=1?n.toFixed(1)+" GB":Math.round(e/1024/1024)+" MB"}function hn({title:e,body:n,confirmLabel:a="Bestätigen",cancelLabel:s="Abbrechen",danger:l=!1}){return new Promise(o=>{const d=document.createElement("div");d.className="modal-overlay",d.innerHTML=` `;const v=c.querySelector("input"),f=b=>{c.remove(),d(b)};c.addEventListener("click",b=>{if(b.target===c)return f(null);const T=b.target.closest("[data-x]");T&&f(T.getAttribute("data-x")==="1"?v.value||"":null)}),v.addEventListener("keydown",b=>{b.key==="Enter"&&f(v.value||""),b.key==="Escape"&&f(null)}),document.body.appendChild(c),v.focus()})}function Ho(e="overview"){const n=jr(".nav-item[data-view]:not(.disabled)"),a=jr(".view[data-view]"),s=new Set(a.map(o=>o.dataset.view));function l(o){s.has(o)||(o=e),a.forEach(d=>d.hidden=d.dataset.view!==o),n.forEach(d=>d.classList.toggle("active",d.dataset.view===o)),location.hash!=="#/"+o&&(location.hash="#/"+o)}return n.forEach(o=>o.addEventListener("click",d=>{d.preventDefault(),l(o.dataset.view)})),window.addEventListener("hashchange",()=>l(location.hash.replace("#/",""))),l(location.hash.replace("#/","")||e),{show:l}}let Hr=L(null);const xi={get value(){return t(Hr)},set(e){u(Hr,e,!0)}};let Jr=L(jt([])),ta=L(jt([]));const fa={get value(){return t(Jr)},set(e){u(Jr,e||[],!0)},get tracked(){return t(ta)},track(e){t(ta).includes(e)||u(ta,[...t(ta),e],!0)},toggle(e){u(ta,t(ta).includes(e)?t(ta).filter(n=>n!==e):[...t(ta),e],!0)}};let Qr=L(null);const Pr={get value(){return t(Qr)},set(e){u(Qr,e,!0)}},Jo="5";var ds;typeof window<"u"&&((ds=window.__svelte??(window.__svelte={})).v??(ds.v=new Set)).add(Jo);var Qo=g('— bereit für Anfragen'),Zo=g('${Fn(e)}
${n}
@@ -11,16 +11,16 @@ var ll=Object.defineProperty;var Dr=e=>{throw TypeError(e)};var ol=(e,n,a)=>n in`;const v=c.querySelector("input"),f=b=>{c.remove(),d(b)};c.addEventListener("click",b=>{if(b.target===c)return f(null);const T=b.target.closest("[data-x]");T&&f(T.getAttribute("data-x")==="1"?v.value||"":null)}),v.addEventListener("keydown",b=>{b.key==="Enter"&&f(v.value||""),b.key==="Escape"&&f(null)}),document.body.appendChild(c),v.focus()})}function Ho(e="overview"){const n=jr(".nav-item[data-view]:not(.disabled)"),a=jr(".view[data-view]"),s=new Set(a.map(o=>o.dataset.view));function l(o){s.has(o)||(o=e),a.forEach(d=>d.hidden=d.dataset.view!==o),n.forEach(d=>d.classList.toggle("active",d.dataset.view===o)),location.hash!=="#/"+o&&(location.hash="#/"+o)}return n.forEach(o=>o.addEventListener("click",d=>{d.preventDefault(),l(o.dataset.view)})),window.addEventListener("hashchange",()=>l(location.hash.replace("#/",""))),l(location.hash.replace("#/","")||e),{show:l}}let Hr=I(null);const xi={get value(){return t(Hr)},set(e){u(Hr,e,!0)}};let Jr=I(jt([])),ta=I(jt([]));const fa={get value(){return t(Jr)},set(e){u(Jr,e||[],!0)},get tracked(){return t(ta)},track(e){t(ta).includes(e)||u(ta,[...t(ta),e],!0)},toggle(e){u(ta,t(ta).includes(e)?t(ta).filter(n=>n!==e):[...t(ta),e],!0)}};let Qr=I(null);const Pr={get value(){return t(Qr)},set(e){u(Qr,e,!0)}},Jo="5";var ds;typeof window<"u"&&((ds=window.__svelte??(window.__svelte={})).v??(ds.v=new Set)).add(Jo);var Qo=g('— bereit für Anfragen'),Zo=g('-Temperatur (GPU)',1),Yo=g('Freier SpeicherGBTemperatur–messe…',1),Xo=g('Freier Speicher–messe…'),ed=g('Warte auf Messwerte…'),td=g('Noch kein Modell eingerichtet — starte hier:',1),nd=g('Die häufigsten Aufgaben — ein Klick.',1),ad=g('Bild'),id=g('Code'),rd=g('Text'),sd=g('∞ aktiv'),ld=g(''),od=g(''),Zr=g(''),dd=g(''),cd=g('Noch keine ModelleHol dir unter „Cookbook" ein Modell, das auf deine Hardware passt.'),vd=g('News gerade nicht ladbar.'),ud=g('
LLM-EngineAktives ModellSystem-Gesundheit
Auslastung in Echtzeit.Schnellstart
',1);function pd(e,n){$n(n,!0);const a=q(()=>xi.value),s=q(()=>Pr.value),l=q(()=>{var x;return((x=t(a))==null?void 0:x.models)||[]}),o=q(()=>{var x;return((x=t(a))==null?void 0:x.swap_ok)??!1}),d=["running","ready","loading","starting"],c=q(()=>t(l).find(x=>d.includes(x.state))),v=q(()=>t(l).filter(x=>!x.incomplete)),f=q(()=>t(a)?t(o)?t(s)&&t(s).ram.percent>=90?"Achtung: Speicher wird knapp.":"Alles läuft rund.":"LLM-Engine offline":"Verbinde…"),b=q(()=>t(a)?t(o)?t(s)&&t(s).ram.percent>=90?`Arbeitsspeicher bei ${Math.round(t(s).ram.percent)} % — eventuell Speicher freigeben.`:`${t(v).length} ${t(v).length===1?"Modell":"Modelle"} konfiguriert · ${t(c)?`„${t(c).name}" geladen`:"keines geladen"} · keine Warnungen.`:"Der llama-swap-Dienst antwortet gerade nicht.":""),T=q(()=>()=>{var H;const x=(H=t(s))==null?void 0:H.gpu;return x&&x.vram.total+x.gtt.total>0?(x.vram.used+x.gtt.used)/(x.vram.total+x.gtt.total)*100:0});let _=I(jt([])),y=I(null);yi(async()=>{try{u(_,((await we("/api/news")).items||[]).slice(0,4),!0)}catch{}});async function P(){await hn({title:"Speicher freigeben?",body:"Alle aktuell geladenen Modelle werden aus dem Grafikspeicher geworfen. Sie laden beim nächsten Aufruf automatisch neu.",confirmLabel:"Speicher freigeben"})&&(await we("/api/unload",{method:"POST"}),M())}async function O(x){u(y,x,!0);try{await we("/api/preload?model="+encodeURIComponent(x),{method:"POST"})}catch(H){ce("Laden fehlgeschlagen: "+(H.message||"Engine nicht erreichbar?"),!0)}u(y,null),M()}function M(){document.dispatchEvent(new Event("mc:refresh"))}function K(x){var H;(H=document.querySelector(`.nav-item[data-view="${x}"]`))==null||H.dispatchEvent(new MouseEvent("click"))}function Oe(x){return x>=90?"red":x>=75?"":"green"}function Ee(x){return x==null?"":x>=75?"red":x>=55?"":"green"}function Ce(x){return x>=90?"red":x>=70?"":"green"}var Re=ud(),te=tt(Re),X=r(te),be=r(X),Be=r(be),Ne=i(Be);{var Ze=x=>{var H=Qo();p(x,H)};L(Ne,x=>{t(o)&&!t(c)&&x(Ze)})}var ut=i(be,2),D=r(ut),ue=i(te,2),Ae=r(ue),He=r(Ae),N=i(r(He),2);Ye(N,()=>Ut("server"),!0);var ve=i(He,2),pe=r(ve),je=i(ve,2),Ve=r(je),nt=i(Ae,2),it=r(nt),et=i(r(it),2);Ye(et,()=>Ut("cpu"),!0);var bt=i(it,2),wt=r(bt),Ct=i(bt,2),Kt=r(Ct);{var Pt=x=>{var H=li();z(he=>h(H,`${he??""} · ${t(c).state??""}`),[()=>{var he;return(he=t(c).meta)!=null&&he.ctx?Math.round(t(c).meta.ctx/1024)+"k ctx":""}]),p(x,H)},Dt=x=>{var H=li("lädt bei erster Anfrage");p(x,H)};L(Kt,x=>{t(c)?x(Pt):x(Dt,-1)})}var Lt=i(nt,2);{var It=x=>{const H=q(()=>{var gn;return t(s).gpu_temp??((gn=t(s).cpu)==null?void 0:gn.temp)??null}),he=q(()=>Ee(t(H))),V=q(()=>t(s).ram.total-t(s).ram.used),xe=q(()=>100-t(s).ram.percent);var Ie=Zo(),Fe=tt(Ie),De=r(Fe),W=i(r(De));Ye(W,()=>Ut("thermo"),!0);var J=i(De,2),Q=r(J),R=i(J,2),ne=r(R),_e=i(Fe,2),ge=r(_e),fe=i(r(ge));Ye(fe,()=>Ut("database"),!0);var me=i(ge,2),_t=r(me),zt=i(me,2),Ot=r(zt);z((gn,da,k,w)=>{Et(Fe,1,`kpi ${t(he)??""}`),h(Q,gn),h(ne,t(H)==null?"messe…":t(H)<55?"kühl":t(H)<75?"normal":"⚠ heiß"),Et(_e,1,`kpi ${t(xe)<15?"red":t(xe)<30?"":"green"}`),h(_t,da),h(Ot,`von ${k??""} GB · ${w??""} % frei`)},[()=>t(H)!=null?`${Math.round(t(H))}°C`:"–",()=>Math.round(t(V)/1073741824),()=>Math.round(t(s).ram.total/1073741824),()=>Math.round(t(xe))]),p(x,Ie)},Tt=x=>{var H=Yo();p(x,H)};L(Lt,x=>{t(s)?x(It):x(Tt,-1)})}var F=i(ue,2),Y=r(F),$=i(r(Y),4);{var G=x=>{const H=q(()=>t(T)());var he=Ua(),V=tt(he);Je(V,17,()=>{var xe;return[["Prozessor (CPU)",((xe=t(s).cpu)==null?void 0:xe.percent)??0,""],["Arbeitsspeicher (RAM)",t(s).ram.percent,Oe(t(s).ram.percent)],["Grafikspeicher (VRAM)",t(H),Ce(t(H))]]},Xe,(xe,Ie)=>{var Fe=q(()=>Hn(t(Ie),3));let De=()=>t(Fe)[0],W=()=>t(Fe)[1];const J=q(()=>Math.max(0,Math.min(100,W()||0)));var Q=Xo(),R=r(Q),ne=r(R),_e=r(ne),ge=i(ne),fe=r(ge),me=i(R,2),_t=r(me);z((zt,Ot)=>{h(_e,De()),h(fe,`${zt??""} %`),Et(me,1,`bar ${t(J)>=90?"bad":t(J)>=75?"warn":""}`),At(_t,`width:${Ot??""}%`)},[()=>Math.round(t(J)),()=>Math.max(2,t(J))]),p(xe,Q)}),p(x,he)},E=x=>{var H=ed();p(x,H)};L($,x=>{t(s)?x(G):x(E,-1)})}var Z=i(Y,2),ke=i(r(Z),2);{var Pe=x=>{var H=td(),he=i(tt(H),2),V=r(he);Ye(V,()=>Ut("search"),!0);var xe=i(V,4);Ye(xe,()=>Ut("chevron"),!0);var Ie=i(he,2),Fe=r(Ie);Ye(Fe,()=>Ut("swap"),!0);var De=i(Fe,4);Ye(De,()=>Ut("chevron"),!0);var W=i(Ie,2),J=r(W);Ye(J,()=>Ut("file"),!0);var Q=i(J,4);Ye(Q,()=>Ut("chevron"),!0),S("click",he,()=>K("cookbook")),S("click",Ie,()=>K("connect")),S("click",W,()=>K("guides")),p(x,H)},C=x=>{var H=nd(),he=i(tt(H),2),V=r(he);Ye(V,()=>Ut("search"),!0);var xe=i(V,4);Ye(xe,()=>Ut("chevron"),!0);var Ie=i(he,2),Fe=r(Ie);Ye(Fe,()=>Ut("refresh"),!0);var De=i(Fe,4);Ye(De,()=>Ut("chevron"),!0);var W=i(Ie,2),J=r(W);Ye(J,()=>Ut("file"),!0);var Q=i(J,4);Ye(Q,()=>Ut("chevron"),!0);var R=i(W,2),ne=r(R);Ye(ne,()=>Ut("swap"),!0);var _e=i(ne,4);Ye(_e,()=>Ut("chevron"),!0),S("click",he,()=>K("cookbook")),S("click",Ie,P),S("click",W,()=>K("server")),S("click",R,()=>K("connect")),p(x,H)};L(ke,x=>{t(v).length?x(C,-1):x(Pe)})}var B=i(F,2),se=r(B),ie=r(se),ee=i(r(ie),2),Se=r(ee),de=i(ie,2);{var A=x=>{var H=Zr();Je(H,21,()=>t(v),Xe,(he,V)=>{const xe=q(()=>d.includes(t(V).state)),Ie=q(()=>t(V).state==="downloading"),Fe=q(()=>t(V).state==="loading"||t(V).state==="starting"||t(Ie)?"load":t(xe)?"on":""),De=q(()=>t(Ie)?`↓ ${t(V).download_progress!=null?Math.round(t(V).download_progress)+"%":"..."}`:t(V).state==="loading"||t(V).state==="starting"?"lädt…":t(xe)?"geladen ✓":"bereit");var W=od(),J=r(W),Q=i(J,2),R=r(Q),ne=r(R),_e=r(ne),ge=i(ne,2);{var fe=$e=>{var We=ad();p($e,We)},me=q(()=>{var $e,We;return(We=($e=t(V).meta)==null?void 0:$e.caps)==null?void 0:We.includes("Bild")}),_t=$e=>{var We=id();p($e,We)},zt=q(()=>{var $e,We;return(We=($e=t(V).meta)==null?void 0:$e.caps)==null?void 0:We.includes("Code")}),Ot=$e=>{var We=rd();p($e,We)};L(ge,$e=>{t(me)?$e(fe):t(zt)?$e(_t,1):$e(Ot,-1)})}var gn=i(ge,2);{var da=$e=>{var We=sd();p($e,We)};L(gn,$e=>{t(V).ttl>=99999&&$e(da)})}var k=i(R,2),w=r(k),re=i(Q,2),ae=r(re),Le=r(ae),ht=i(ae,2);{var yt=$e=>{var We=ld(),at=r(We);z(()=>{At(We,`padding:3px 9px;font-size:12px;opacity:${t(y)===t(V).name?".5":"1"}`),We.disabled=t(y)===t(V).name,h(at,t(y)===t(V).name?"…":"Laden")}),S("click",We,()=>O(t(V).name)),p($e,We)};L(ht,$e=>{!t(xe)&&!t(Ie)&&t(o)&&$e(yt)})}z(($e,We)=>{var at;Et(J,1,`li-dot ${t(Fe)??""}`),At(ne,t(xe)?"color:var(--accent)":""),h(_e,t(V).name),h(w,`${$e??""} - ${(at=t(V).meta)!=null&&at.quant?" · "+t(V).meta.quant:""} - ${We??""}`),At(ae,`white-space:nowrap;color:${t(xe)?"var(--on)":"var(--mut)"}`),h(Le,t(De))},[()=>{var $e;return($e=t(V).meta)!=null&&$e.ctx?Math.round(t(V).meta.ctx/1024)+"k ctx":""},()=>{var $e;return($e=t(V).meta)!=null&&$e.size_bytes?" · "+(t(V).meta.size_bytes/1073741824).toFixed(1)+" GB":""}]),p(he,W)}),p(x,H)},j=x=>{var H=dd(),he=i(r(H),4);S("click",he,()=>K("cookbook")),p(x,H)};L(de,x=>{t(v).length?x(A):x(j,-1)})}var oe=i(se,2),Me=r(oe),U=i(r(Me),2),le=i(Me,2);{var Te=x=>{var H=Zr();Je(H,21,()=>t(_),Xe,(he,V)=>{var xe=cd(),Ie=r(xe),Fe=r(Ie),De=r(Fe),W=i(Fe,2),J=r(W);z(()=>{Aa(xe,"href",t(V).link),h(De,t(V).title),h(J,`${t(V).source??""}${t(V).relevant?" · für dich":""}`)}),p(he,xe)}),p(x,H)},ze=x=>{var H=vd();p(x,H)};L(le,x=>{t(_).length?x(Te):x(ze,-1)})}z(x=>{h(Be,`${t(f)??""} `),h(D,t(b)),Et(Ae,1,`kpi ${t(o)?"green":"red"}`),h(pe,t(o)?"Online":"Offline"),h(Ve,x),Et(nt,1,`kpi ${t(c)?"blue":"muted"}`),h(wt,t(c)?t(c).name:"Keins"),h(Se,t(v).length?t(v).length+" konfiguriert":"")},[()=>{var x,H;return((H=(x=t(a))==null?void 0:x.swap_url)==null?void 0:H.replace(/^https?:\/\//,""))??"—"}]),S("click",U,()=>K("news")),S("keydown",U,x=>x.key==="Enter"&&K("news")),p(e,Re),Pn()}qn(["click","keydown"]);var fd=g(""),hd=g('Dein Stack
Top-News
'),gd=g(''),md=g('Noch keine Modelle konfiguriertHol dir unter „Cookbook" ein passendes Modell.'),bd=g(' '),_d=g(' kein Modell hinterlegt— leere Rolle leer — '),yd=g(''),xd=g(''),kd=g(' API-Name:'),wd=g('
Modell Kann Details Status Port Aktionen '),Sd=g(''),Md=g(''),Ed=g(''),Ad=g('Empfohlen für deine Hardware
Modelle
Deine konfigurierten Modelle — testen, Kontext anpassen oder aus dem Speicher werfen.Schnelltest
Schreib eine Nachricht — das gewählte Modell wird automatisch geweckt.',1);function Cd(e,n){$n(n,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr (längere Dateien/Chats), braucht aber mehr Speicher und wird etwas langsamer.",s="Die Rolle ist ein zusätzlicher, sprechender Name (z.B. coder). Du kannst in deinen Tools entweder den echten Modellnamen ODER die Rolle angeben — beides führt zum selben Modell.",l=[{id:"coder",label:"Coder",desc:"Programmieren & Code"},{id:"vision",label:"Vision",desc:"Bilder verstehen"},{id:"scout",label:"Scout",desc:"Schneller Allrounder"},{id:"reviewer",label:"Reviewer",desc:"Code/Texte prüfen"},{id:"manager",label:"Manager",desc:"Planen & koordinieren"}],o=q(()=>{var F;return((F=xi.value)==null?void 0:F.models)||[]});function d(){document.dispatchEvent(new Event("mc:refresh"))}let c=I(""),v=I(""),f=I(""),b=I(!1);const T=q(()=>t(o).filter(F=>!F.incomplete));async function _(){var Y;const F=t(c)||((Y=t(T)[0])==null?void 0:Y.name);if(!(!F||!t(v).trim())){u(b,!0),u(f,"(wecke Modell, kann beim Laden kurz dauern…)");try{const $=await we("/api/chat",{method:"POST",body:JSON.stringify({model:F,message:t(v)})});u(f,$.reply,!0)}catch($){u(f,"Fehler: "+$.message)}u(b,!1),d()}}const y=300;let P=I(!1),O=I(null),M=I(8192),K=I(!1);function Oe(F){var Y;u(O,t(o).find($=>$.name===F),!0),t(O)&&(u(M,((Y=t(O).meta)==null?void 0:Y.ctx)||8192,!0),u(K,(t(O).ttl??y)>=99999),u(P,!0))}async function Ee(){const F=t(K)?99999:y;try{await we("/api/update_model",{method:"POST",body:JSON.stringify({alias:t(O).name,ctx:t(M),ttl:F})}),ce("Gespeichert — aktiv beim nächsten Modell-Start."),u(P,!1),d()}catch(Y){ce(Y.message,!0)}}let Ce=I(!1),Re=I(""),te=I(""),X=I("");function be(F){const Y=t(o).find($=>$.name===F);u(Re,F,!0),u(X,(Y==null?void 0:Y.role)||"",!0),u(te,""),u(Ce,!0)}async function Be(F){try{await we("/api/set_role",{method:"POST",body:JSON.stringify({alias:t(Re),role:F})}),ce(F?`Rolle gesetzt: ${F}`:"Rolle entfernt."),u(Ce,!1),d()}catch(Y){ce(Y.message,!0)}}async function Ne(F){if(await hn({title:`„${F}" entladen?`,body:"Das Modell wird aus dem Grafikspeicher geworfen und lädt beim nächsten Aufruf automatisch neu.",confirmLabel:"Entladen"}))try{await we("/api/unload?model="+encodeURIComponent(F),{method:"POST"}),ce("Entladen: "+F),setTimeout(d,600)}catch(Y){ce(Y.message,!0)}}async function Ze(F){if(await hn({title:`„${F}" wirklich löschen?`,body:"Das Modell wird aus der Konfiguration ausgetragen und seine Dateien werden von der Festplatte gelöscht, um Speicher freizugeben. Das lässt sich nicht rückgängig machen — später brauchst du dafür einen neuen Download.",confirmLabel:"Endgültig löschen",danger:!0}))try{const Y=await we("/api/delete_model",{method:"POST",body:JSON.stringify({alias:F})});ce(Y.note||"Gelöscht: "+F),setTimeout(d,600)}catch(Y){ce(Y.message,!0)}}function ut(F){return F!=null&&F.length?F.map(Y=>Y==="Code"?'Code':Y==="Bild"?'Bild':'Text').join(" "):"–"}function D(F){if(!F)return"–";const Y=F.quant||"?",$=F.ctx?Math.round(F.ctx/1024)+"K":"?",G=F.size_bytes?(F.size_bytes/1024**3).toFixed(1)+" GB":"?";return`${Y} · ${$} · ${G}`}function ue(F){var Y;(Y=navigator.clipboard)==null||Y.writeText(F),ce("Kopiert: "+F)}var Ae=Ad(),He=i(tt(Ae),2),N=i(r(He),6);Je(N,21,()=>t(T),Xe,(F,Y)=>{var $=fd(),G=r($),E={};z(()=>{h(G,t(Y).name),E!==(E=t(Y).name)&&($.value=($.__value=t(Y).name)??"")}),p(F,$)});var ve=i(N,4),pe=i(ve,2),je=r(pe),Ve=i(pe,2);{var nt=F=>{var Y=hd(),$=r(Y);z(()=>h($,t(f))),p(F,Y)};L(Ve,F=>{t(f)&&F(nt)})}var it=i(He,2),et=r(it),bt=i(r(et)),wt=r(bt),Ct=i(et,4);{var Kt=F=>{var Y=gd();p(F,Y)},Pt=F=>{var Y=kd(),$=i(r(Y));Je($,21,()=>t(o),Xe,(G,E)=>{var Z=Ua(),ke=tt(Z);{var Pe=B=>{var se=md(),ie=r(se),ee=r(ie),Se=i(ie,5),de=r(Se),A=i(de,2);z(()=>h(ee,t(E).name)),S("click",de,()=>{var j;ce("Lade im Cookbook ein Modell und setze den Alias auf: "+t(E).name),(j=document.querySelector(".nav-item[data-view='cookbook']"))==null||j.dispatchEvent(new MouseEvent("click"))}),S("click",A,()=>Ze(t(E).name)),p(B,se)},C=B=>{var se=xd(),ie=r(se),ee=r(ie),Se=r(ee),de=i(Se);{var A=De=>{var W=bd(),J=r(W);z(()=>h(J,t(E).role)),p(De,W)};L(de,De=>{t(E).role&&De(A)})}var j=i(ee,2);{var oe=De=>{var W=_d(),J=r(W);z(()=>h(J,t(E).meta.filename)),p(De,W)};L(j,De=>{var W;(W=t(E).meta)!=null&&W.filename&&De(oe)})}var Me=i(j,2),U=i(r(Me),2);Je(U,17,()=>{var De;return(De=t(E).api_ids)!=null&&De.length?t(E).api_ids:[t(E).name]},Xe,(De,W)=>{var J=yd(),Q=r(J);z(()=>h(Q,t(W))),S("click",J,()=>ue(t(W))),p(De,J)});var le=i(ie);Ye(le,()=>{var De;return ut((De=t(E).meta)==null?void 0:De.caps)},!0);var Te=i(le);Ye(Te,()=>D(t(E).meta),!0);var ze=i(Te);Ye(ze,()=>Uo(t(E).state,t(E).download_progress),!0);var x=i(ze),H=r(x),he=i(x),V=r(he),xe=i(V,2),Ie=i(xe,2),Fe=i(Ie,2);z(()=>{h(Se,`${t(E).name??""} `),h(H,t(E).port??"auto")}),S("click",V,()=>be(t(E).name)),S("click",xe,()=>Oe(t(E).name)),S("click",Ie,()=>Ne(t(E).name)),S("click",Fe,()=>Ze(t(E).name)),p(B,se)};L(ke,B=>{t(E).incomplete?B(Pe):B(C,-1)})}p(G,Z)}),p(F,Y)};L(Ct,F=>{t(o).length?F(Pt,-1):F(Kt)})}var Dt=i(it,2);{var Lt=F=>{var Y=Sd(),$=r(Y),G=r($),E=i(G,4),Z=r(E),ke=i(E,2),Pe=i(r(ke));Ye(Pe,()=>br(a));var C=i(ke,2),B=i(C,2);{var se=oe=>{var Me=wd(),U=r(Me),le=i(r(U),2),Te=r(le),ze=i(Te,2),x=i(U,2);z((H,he)=>{h(Te,`Optimal ~${H??""}k → ~${t(O).meta.peak_ram_optimal_gb??""} GB Spitzenbedarf.`),h(ze,` Aktuell ~${he??""}k → ~${t(O).meta.peak_ram_gb??""} GB.`)},[()=>Math.round(t(O).meta.optimal_ctx/1024),()=>Math.round((t(O).meta.ctx||0)/1024)]),S("click",x,()=>u(M,t(O).meta.optimal_ctx,!0)),p(oe,Me)};L(B,oe=>{var Me;(Me=t(O).meta)!=null&&Me.optimal_ctx&&oe(se)})}var ie=i(B,4),ee=i(r(ie),2),Se=r(ee),de=i(Se,2),A=r(de),j=i(ie,2);z(()=>{h(Z,t(O).name),At(de,`color:${t(K)?"var(--accent)":"var(--mut)"}`),h(A,t(K)?"An (TTL = ∞)":"Aus (TTL = 5 min)")}),S("click",Y,oe=>{oe.target.classList.contains("modal-overlay")&&u(P,!1)}),S("click",G,()=>u(P,!1)),dn(C,()=>t(M),oe=>u(M,oe)),Ko(Se,()=>t(K),oe=>u(K,oe)),S("click",j,Ee),p(F,Y)};L(Dt,F=>{t(P)&&t(O)&&F(Lt)})}var It=i(Dt,2);{var Tt=F=>{var Y=Ed(),$=r(Y),G=r($),E=i(G,2),Z=i(r(E));Ye(Z,()=>br(s));var ke=i(E,2),Pe=r(ke),C=i(ke,4);Je(C,21,()=>l,Xe,(Se,de)=>{var A=Md(),j=r(A);z(()=>{Et(A,1,t(X)===t(de).id?"primary":"ghost"),Aa(A,"title",t(de).desc),h(j,t(de).label)}),S("click",A,()=>Be(t(de).id)),p(Se,A)});var B=i(C,4),se=i(B,2),ie=r(se),ee=i(ie,2);z(()=>h(Pe,t(Re))),S("click",Y,Se=>{Se.target.classList.contains("modal-overlay")&&u(Ce,!1)}),S("click",G,()=>u(Ce,!1)),dn(B,()=>t(te),Se=>u(te,Se)),S("click",ie,()=>Be("")),S("click",ee,()=>Be(t(te).trim().toLowerCase())),p(F,Y)};L(It,F=>{t(Ce)&&F(Tt)})}z(()=>{pe.disabled=t(b),h(je,t(b)?"…":"Senden"),h(wt,t(o).length?t(o).length+" konfiguriert":"")}),Jn(N,()=>t(c),F=>u(c,F)),dn(ve,()=>t(v),F=>u(v,F)),S("click",pe,_),p(e,Ae),Pn()}qn(["click"]);var Td=g('Modelle & Ports
Modelle laden automatisch, sobald eine Anfrage kommt — du musst nichts manuell starten.Prozessor (CPU)%Arbeitsspeicher%Grafikspeicher%',1),zd=g(''),$d=g('System-Metriken (Bosgame)
Live-Auslastung deines Mini-PCs, alle 0,5 Sekunden.Arbeitsspeicher (RAM)Grafikspeicher (VRAM + GTT)Speicherplatz (Disk)Temperatur (GPU / CPU)'),Pd=g(' '),Dd=g(''),Id=g(''),Ld=g(''),Od=g('Gerade nichts los.Alles ruhig — keine laufenden Aufgaben.'),Bd=g(''),Rd=g('Aktivität
Live-Auslastung und laufende Aufgaben (Downloads, Updates) mit Protokoll.',1);function Fd(e,n){$n(n,!0);const a=q(()=>fa.value),s=q(()=>fa.tracked),l=q(()=>Pr.value);let o=jt({cpu:[],ram:[],gpu:[]});bi(()=>{var Ae;if(!t(l))return;const D=t(l).gpu,ue=D&&D.vram.total+D.gtt.total>0?(D.vram.used+D.gtt.used)/(D.vram.total+D.gtt.total)*100:0;o.cpu=[...o.cpu,((Ae=t(l).cpu)==null?void 0:Ae.percent)??0].slice(-60),o.ram=[...o.ram,t(l).ram.percent].slice(-60),o.gpu=[...o.gpu,ue].slice(-60)});const d=q(()=>()=>{var ue;const D=(ue=t(l))==null?void 0:ue.gpu;return D&&D.vram.total+D.gtt.total>0?(D.vram.used+D.gtt.used)/(D.vram.total+D.gtt.total)*100:0}),c=q(()=>t(a).filter(D=>D.state!=="running"&&D.state!=="queued").length),v=q(()=>t(a).filter(D=>D.state==="failed").length);function f(D){if(D.state!=="running")return null;if(typeof D.progress=="number")return Math.min(100,D.progress);const Ae=((D.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return Ae?Math.min(100,parseFloat(Ae[1])):null}function b(D){return D==null||D<0?"":D>=90?`noch ~${Math.round(D/60)} min`:`noch ~${Math.max(1,Math.round(D))} s`}function T(D){return D==="done"?'fertig':D==="failed"?'fehler':D==="canceled"?'abgebrochen':'läuft…'}function _(D){return D==="done"?"on":D==="failed"||D==="canceled"?"":"load"}async function y(D){try{await we(`/api/jobs/${D}/cancel`,{method:"POST"}),ce("Abbruch angefordert…")}catch(ue){ce(ue.message,!0)}}async function P(D){try{await we(`/api/jobs/${D}`,{method:"DELETE"})}catch(ue){ce(ue.message,!0)}}async function O(){try{const D=await we("/api/jobs/clear",{method:"POST"});ce(`${D.removed} Einträge entfernt.`)}catch(D){ce(D.message,!0)}}function M(D,ue){return D.map(Ae=>``).join("")}var K=Rd(),Oe=i(tt(K),2);{var Ee=D=>{const ue=q(()=>t(d)());var Ae=Td(),He=tt(Ae),N=r(He),ve=i(r(N),2),pe=r(ve),je=i(ve,2),Ve=r(je),nt=i(N,2),it=i(r(nt),2),et=r(it),bt=i(it,2),wt=r(bt),Ct=i(nt,2),Kt=i(r(Ct),2),Pt=r(Kt),Dt=i(Kt,2),Lt=r(Dt),It=i(He,2),Tt=i(r(It),4),F=r(Tt),Y=i(r(F)),$=r(Y),G=i(F,2),E=i(r(G),2),Z=r(E),ke=i(G,2),Pe=i(r(ke)),C=r(Pe),B=i(ke,2),se=i(r(B),2),ie=r(se),ee=i(Tt,2),Se=r(ee),de=i(r(Se));Ye(de,()=>M(o.cpu,"--accent"),!0);var A=i(Se,2),j=i(r(A));Ye(j,()=>M(o.ram,"--purple"),!0);var oe=i(A,2),Me=i(r(oe));Ye(Me,()=>M(o.gpu,"--on"),!0),z((U,le,Te,ze,x,H,he,V,xe,Ie,Fe,De,W)=>{h(pe,U),h(Ve,le),h(et,Te),h(wt,`${ze??""} / ${x??""}`),h(Pt,H),h(Lt,he),h($,`${V??""} / ${xe??""}`),h(Z,Ie),h(C,`${Fe??""} % belegt`),h(ie,`${De??""} / ${W??""}`)},[()=>{var U;return Math.round(((U=t(l).cpu)==null?void 0:U.percent)??0)},()=>{var U;return((U=t(l).cpu)==null?void 0:U.temp)!=null?`${Math.round(t(l).cpu.temp)}° CPU-Temp`:"Auslastung"},()=>Math.round(t(l).ram.percent),()=>ca(t(l).ram.used),()=>ca(t(l).ram.total),()=>Math.round(t(ue)),()=>t(l).gpu_temp!=null?`${Math.round(t(l).gpu_temp)}° GPU-Temp`:"VRAM + GTT",()=>ca(t(l).ram.used),()=>ca(t(l).ram.total),()=>t(l).gpu?`${ca(t(l).gpu.vram.used+t(l).gpu.gtt.used)} / ${ca(t(l).gpu.vram.total+t(l).gpu.gtt.total)}`:"–",()=>{var U;return Math.round(((U=t(l).disk)==null?void 0:U.percent)??0)},()=>t(l).gpu_temp!=null?Math.round(t(l).gpu_temp)+"°":"–",()=>{var U;return((U=t(l).cpu)==null?void 0:U.temp)!=null?Math.round(t(l).cpu.temp)+"°":"–"}]),p(D,Ae)};L(Oe,D=>{t(l)&&D(Ee)})}var Ce=i(Oe,2),Re=r(Ce),te=i(r(Re),2),X=r(te),be=i(te,2);{var Be=D=>{var ue=zd();S("click",ue,O),p(D,ue)};L(be,D=>{t(c)&&D(Be)})}var Ne=i(Re,4);{var Ze=D=>{var ue=$d();p(D,ue)},ut=D=>{var ue=Ua(),Ae=tt(ue);Je(Ae,17,()=>t(a),Xe,(He,N)=>{const ve=q(()=>f(t(N))),pe=q(()=>t(N).state==="running"?b(t(N).eta_s):""),je=q(()=>t(N).state==="running"&&t(N).rate_bps?ca(t(N).rate_bps)+"/s":""),Ve=q(()=>[t(pe),t(je)].filter(Boolean).join(" · ")),nt=q(()=>t(s).includes(t(N).id));var it=Bd(),et=r(it),bt=r(et),wt=i(bt,2),Ct=r(wt),Kt=i(wt,2);{var Pt=E=>{var Z=Pd(),ke=r(Z);z(Pe=>h(ke,`${Pe??""} %${t(Ve)?` · ${t(Ve)}`:""}`),[()=>Math.round(t(ve))]),p(E,Z)};L(Kt,E=>{t(ve)!=null&&E(Pt)})}var Dt=i(Kt,2);{var Lt=E=>{var Z=Dd();z(()=>At(Z,`${t(ve)==null?"margin-left:auto;":""}margin-right:2px;padding:2px 9px;font-size:12px`)),S("click",Z,ke=>{ke.stopPropagation(),y(t(N).id)}),p(E,Z)},It=E=>{var Z=Id();S("click",Z,ke=>{ke.stopPropagation(),P(t(N).id)}),p(E,Z)};L(Dt,E=>{t(N).state==="running"?E(Lt):E(It,-1)})}var Tt=i(Dt,2);Ye(Tt,()=>T(t(N).state));var F=i(et,2);{var Y=E=>{var Z=Ld(),ke=r(Z);z(()=>At(ke,`width:${t(ve)??""}%`)),p(E,Z)};L(F,E=>{t(ve)!=null&&t(N).state==="running"&&E(Y)})}var $=i(F,2);{var G=E=>{var Z=Od(),ke=r(Z);z(Pe=>h(ke,Pe),[()=>(t(N).log||[]).join(` -`)]),p(E,Z)};L($,E=>{t(nt)&&E(G)})}z(E=>{Et(bt,1,`li-dot ${E??""}`),h(Ct,t(N).label)},[()=>_(t(N).state)]),S("click",et,()=>fa.toggle(t(N).id)),S("keydown",et,E=>E.key==="Enter"&&fa.toggle(t(N).id)),p(He,it)}),p(D,ue)};L(Ne,D=>{t(a).length?D(ut,-1):D(Ze)})}z(()=>h(X,t(a).length?t(v)?t(v)+" Fehler":t(a).length+" gesamt":"")),p(e,K),Pn()}qn(["click","keydown"]);var Kd=g(' '),Nd=g(''),qd=g('✓ fertig'),Gd=g('✗ fehlgeschlagen'),Vd=g('abgebrochen'),Wd=g('läuft…'),jd=g(''),Ud=g('Hintergrund-Aufgaben
Downloads & Updates erscheinen hier mit Live-Protokoll — zum Aufklappen klicken.'),Hd=g('Aktueller Vorgang
Server & Wartung
Dienste steuern, Updates einspielen und live mitlesen — ganz ohne SSH oder Terminal.LLM-Engine (llama-swap)
Das Herzstück: lädt bei jeder Anfrage automatisch das passende Modell.Adresse (für deine Tools)Aktuell geladenKonfigurierte ModelleDienste & Applikation
Diese Aktionen sind harmlos und passwortlos — es geht nichts dabei verloren.Betriebssystem (Bosgame)
Tiefe Eingriffe — das Dashboard fragt einmalig nach deinem sudo-Passwort.',1);function Jd(e,n){$n(n,!0);const a=q(()=>xi.value),s=q(()=>fa.value);let l=null,o=I(`Verbinde… -`),d=I("llama-swap"),c,v=I(null),f=I("");const b=new Set,T=q(()=>t(v)?t(s).find(A=>A.id===t(v)):null);bi(()=>{if(!t(T))return;const A=t(T),j=A.state==="done",oe=A.state==="failed",Me=A.state==="canceled";(j||oe||Me)&&!b.has(A.id)&&(b.add(A.id),ce(j?`✓ ${t(f)} abgeschlossen.`:Me?`${t(f)} abgebrochen.`:`✗ ${t(f)} fehlgeschlagen.`,oe),j&&setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),800))});function _(A,j){u(v,A,!0),u(f,j,!0),fa.track(A)}yi(()=>{y()}),qo(()=>{l==null||l.close()});function y(){l==null||l.close();const A=t(d);u(o,`Verbinde mit ${A}… -`);const j=location.protocol==="https:"?"wss:":"ws:";l=new WebSocket(`${j}//${location.host}/api/logs/${A}?token=${encodeURIComponent(al())}`),l.onmessage=oe=>{u(o,t(o)+oe.data),c&&(c.scrollTop=c.scrollHeight)},l.onclose=()=>{u(o,t(o)+` -— Verbindung getrennt —`)},l.onerror=()=>l==null?void 0:l.close()}async function P(A,j,oe){if(await hn({title:j,body:oe,confirmLabel:"Neustarten"}))try{await we(`/api/service/${A}/restart`,{method:"POST"}),ce("Neustart ausgelöst: "+A),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),2e3)}catch(Me){ce(Me.message,!0)}}async function O(){if(await hn({title:"Mission Control aktualisieren?",body:"Holt die neueste Dashboard-Version aus Gitea und startet automatisch neu. Die Seite trennt kurz und verbindet von selbst wieder (~10 Sek)."}))try{const A=await we("/api/self-update",{method:"POST"});ce("Update läuft — Dashboard startet gleich neu."),_(A.job_id,"Mission Control Update")}catch(A){ce(A.message,!0)}}async function M(){if(!await hn({title:"LLM-Engine aktualisieren?",body:"Lädt die neueste llama.cpp-ROCm-Version und installiert sie. Die Engine ist während des Updates kurz nicht erreichbar."}))return;const A=await er({title:"sudo-Passwort",body:"Für das Engine-Update wird einmalig dein sudo-Passwort gebraucht (für den Update-Befehl).",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Update starten"});if(A!==null)try{const j=await we("/api/update",{method:"POST",body:JSON.stringify({password:A})});ce("LLM-Engine-Update läuft."),_(j.job_id,"LLM-Engine-Update")}catch(j){ce(j.message,!0)}}async function K(){if(await hn({title:"Grafikspeicher leeren?",body:"Alle geladenen Modelle werden entladen. Sie laden beim nächsten Aufruf automatisch neu — es geht nichts verloren.",confirmLabel:"Leeren"}))try{await we("/api/unload",{method:"POST"}),ce("Grafikspeicher geleert."),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),600)}catch(A){ce(A.message,!0)}}async function Oe(){if(!await hn({title:"OS-Updates installieren?",body:"FührtLive-Konsole
Live mitlesen, was der Dienst gerade tut.apt update & upgradeaus. Das kann ein paar Minuten dauern; der Fortschritt erscheint in der Aktivität."}))return;const A=await er({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(A)try{const j=await we("/api/os-update",{method:"POST",body:JSON.stringify({password:A})});ce("OS-Update gestartet."),_(j.job_id,"OS-Update")}catch(j){ce(j.message,!0)}}async function Ee(){if(!await hn({title:"Server wirklich neu starten?",body:"Der ganze Bosgame startet physisch neu. Alles ist für ~1 Minute offline — auch dieses Dashboard.",confirmLabel:"Reboot",danger:!0}))return;const A=await er({title:"sudo-Passwort",body:"Für den Reboot wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Jetzt neustarten",danger:!0});if(A)try{await we("/api/reboot",{method:"POST",body:JSON.stringify({password:A})}),ce("Reboot ausgelöst — bis gleich.")}catch(j){ce(j.message,!0)}}async function Ce(){u(Re,"prüfe…");try{const A=await we("/api/integration/test");u(Re,A.ok?`✓ Engine antwortet — ${A.models.length} Modell(e): ${A.models.join(", ")}`:`✗ keine Verbindung: ${A.error}`,!0),u(te,A.ok,!0)}catch(A){u(Re,"✗ "+A.message),u(te,!1)}}let Re=I(""),te=I(!1);const X=q(()=>{var A;return((A=t(a))==null?void 0:A.models)||[]}),be=["running","ready","loading","starting"],Be=q(()=>t(X).find(A=>be.includes(A.state)));function Ne(A){if(!A||A.state!=="running")return null;if(typeof A.progress=="number")return Math.min(100,A.progress);const oe=((A.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return oe?Math.min(100,parseFloat(oe[1])):null}var Ze=Hd(),ut=i(tt(Ze),2),D=r(ut),ue=i(r(D),2),Ae=r(ue),He=i(D,4),N=r(He),ve=i(r(N)),pe=r(ve),je=i(N,2),Ve=i(r(je),2),nt=r(Ve),it=i(je,2),et=i(r(it),2),bt=r(et),wt=i(He,2),Ct=r(wt),Kt=i(Ct,2);{var Pt=A=>{var j=Kd(),oe=r(j);z(()=>{At(j,`color:${t(te)?"#7ee29a":"#ff9b95"}`),h(oe,t(Re))}),p(A,j)};L(Kt,A=>{t(Re)&&A(Pt)})}var Dt=i(ut,2),Lt=i(r(Dt),4),It=i(Lt,2),Tt=i(It,2),F=i(Tt,2),Y=i(F,2),$=i(Dt,2),G=i(r($),4),E=i(G,2),Z=i($,2);{var ke=A=>{const j=q(()=>t(T)),oe=q(()=>t(j).state==="done"),Me=q(()=>t(j).state==="failed"),U=q(()=>t(j).state==="canceled"),le=q(()=>t(oe)||t(Me)||t(U)),Te=q(()=>Ne(t(j)));var ze=Ud(),x=r(ze),H=i(r(x),2);{var he=fe=>{var me=Nd();S("click",me,async()=>{await hn({title:t(f)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&we(`/api/jobs/${t(j).id}/cancel`,{method:"POST"})}),p(fe,me)};L(H,fe=>{t(le)||fe(he)})}var V=i(H,2),xe=r(V);{var Ie=fe=>{var me=qd();p(fe,me)},Fe=fe=>{var me=Gd();p(fe,me)},De=fe=>{var me=Vd();p(fe,me)},W=fe=>{var me=Wd();p(fe,me)};L(xe,fe=>{t(oe)?fe(Ie):t(Me)?fe(Fe,1):t(U)?fe(De,2):fe(W,-1)})}var J=i(x,2),Q=r(J),R=i(J,2);{var ne=fe=>{var me=jd(),_t=r(me);z(()=>At(_t,`width:${t(Te)??""}%`)),p(fe,me)};L(R,fe=>{t(Te)!=null&&!t(le)&&fe(ne)})}var _e=i(R,2),ge=r(_e);z(fe=>{h(Q,`${t(f)??""}${t(le)?t(oe)?" — erfolgreich.":t(U)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),h(ge,fe)},[()=>(t(j).log||[]).join(` -`)]),p(A,ze)};L(Z,A=>{t(T)&&A(ke)})}var Pe=i(Z,2),C=r(Pe),B=i(r(C),2),se=r(B);se.value=se.__value="llama-swap";var ie=i(se);ie.value=ie.__value="mission-control";var ee=i(ie);ee.value=ee.__value="system";var Se=i(C,4),de=r(Se);No(Se,A=>c=A,()=>c),z(A=>{var j,oe,Me;At(ue,`margin-left:auto;${(j=t(a))!=null&&j.swap_ok?"background:rgba(63,185,80,.12);border-color:rgba(63,185,80,.25);color:#7ee29a":"background:rgba(248,81,73,.12);border-color:rgba(248,81,73,.3);color:#ff9b95"}`),h(Ae,(oe=t(a))!=null&&oe.swap_ok?"● erreichbar":"● offline"),h(pe,(((Me=t(a))==null?void 0:Me.swap_url)||"—")+"/v1"),h(nt,t(Be)?t(Be).name+` (${t(Be).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),h(bt,A),h(de,t(o))},[()=>t(X).filter(A=>!A.incomplete).length||"keine"]),S("click",Ct,Ce),S("click",Lt,()=>P("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),S("click",It,()=>P("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),S("click",Tt,O),S("click",F,M),S("click",Y,K),S("click",G,Oe),S("click",E,Ee),S("change",B,y),Jn(B,()=>t(d),A=>u(d,A)),p(e,Ze),Pn()}qn(["click","change"]);var Qd=g('Lade Setups…'),Zd=g('✎ ×',1),tr=g('★ Beste Wahl für dein System'),Yd=g('Dein Setup'),Xd=g(''),ec=g(''),tc=g('· ⚠ Cache veraltet'),nc=g(" ",1),ac=g('Frage Quellen ab…'),ic=g(''),rc=g('✓ installiert'),sc=g(''),lc=g(''),oc=g('
'),dc=g(''),cc=g('
'),vc=g(''),uc=g('
'),pc=g(''),fc=g(" "),hc=g(''),gc=g('Größter Spitzenbedarf: . Es läuft immer nur ein Modell gleichzeitig — das größte bestimmt, ob das Setup passt.'),mc=g('Alternative: — passt auf dein System.',1),bc=g('⚠ Dieses Setup übersteigt deinen verfügbaren Speicher.'),_c=g(''),yc=g('Lade Dateien von HuggingFace…'),Yr=g(""),xc=g('Empfohlener Kontext für deine Hardware: — übernehmen'),kc=g(''),wc=g(''),Sc=g('Ressourcen-Check⚠ Alle Varianten dieses Modells sind zu groß für deinen Speicher. Ein kleineres Modell aus den Empfehlungen wäre die bessere Wahl.'),Mc=g('',1),Ec=g('Keine GGUF-Dateien im Repo gefunden.'),Ac=g(''),Cc=g(''),Tc=g(''),zc=g('Cookbook
Modelle finden, installieren und eigene Setups zusammenstellen.1 · Anwendungsfall wählen & installieren
Hier starten: Fertige Modell-Bundles für deinen Anwendungsfall — ein Klick installiert alles. Die Hardware-Ampel zeigt vorab, ob das Setup auf deinen PC passt.Aktuell die besten Modelle für dein System
Top-Modelle je Kategorie von HuggingFace — Hardware-Fit wird live für dein System berechnet.',1);function $c(e,n){$n(n,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr, braucht aber mehr Speicher und wird etwas langsamer.",s="MoE (Mixture of Experts): viele Parameter fürs Wissen, aber pro Wort ist nur ein kleiner Teil aktiv → fast große-Modell-Qualität bei hohem Tempo. Ideal für deine APU.",l={perfect:0,marginal:1,too_tight:2},o={vision:"Bilder",coder:"Coden",reasoning:"Logik",agent:"Agenten & Tools",scout:"Allrounder",reviewer:"Review",manager:"Manager"},d=[{label:"Bilder",kw:["-vl-","-vl","vision","llava","multimodal","-mm-","pixtral"]},{label:"Coden",kw:["coder","-code-","code-","codestral","starcoder"]},{label:"Logik",kw:["-r1","deepseek-r1","reasoning","qwq","magistral","-think","thinking","-o1"]},{label:"Agenten & Tools",kw:["hermes","-tool","command-r","watt","-fc-","function"]}];function c(k){const w=(k||"").toLowerCase();for(const re of d)if(re.kw.some(ae=>w.includes(ae)))return re.label;return"Allrounder"}function v(k=""){const w=k.toLowerCase();return/\d+x\d+(\.\d+)?b/.test(w)||new RegExp("(?{wt(),Ct()});async function wt(){u(O,!0);try{const k=await we("/api/cookbook/recipes");u(y,k.recipes||[],!0),u(P,k.recommended_id||null,!0)}catch(k){ce(k.message,!0)}u(O,!1)}async function Ct(k=!1){u(K,!0);try{const w=await we("/api/cookbook/discover"+(k?"?force=true":""));u(M,w,!0),u(Oe,w.stale,!0)}catch(w){ce("Empfehlungen nicht ladbar: "+w.message,!0)}u(K,!1)}function Kt(k){k=k.trim();const w=k.match(/huggingface\.co\/([^\s/]+\/[^\s/?#]+)/i);return w?w[1]:/^[\w.-]+\/[\w.-]+$/.test(k)?k:null}async function Pt(){const k=t(Ee).trim(),w=Kt(k);let re=k;if(t(te)&&!w&&(re=re?re+" "+t(te):t(te)),!re&&!w){u(Ce,[],!0);return}u(Re,!0),u(be,[],!0),u(Be,-1);try{if(w)u(Ce,[{id:w,author:w.split("/")[0],downloads:0}],!0);else{const ae=`https://huggingface.co/api/models?search=${encodeURIComponent(re)}&filter=gguf&sort=${encodeURIComponent(t(X))}&direction=-1&limit=40`,Le=await fetch(ae);u(Ce,await Le.json(),!0)}t(Ce).forEach((ae,Le)=>Dt(Le,ae.id))}catch(ae){ce(ae.message,!0),u(Ce,[],!0)}u(Re,!1)}async function Dt(k,w){var re;try{const ae=await we("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:w,ctx:8192})});if(!((re=ae.files)!=null&&re.length)){t(be)[k]=null,Lt();return}const Le=ae.files.find(ht=>{var yt;return(yt=ht.quant)==null?void 0:yt.includes("Q4_K_M")})||ae.files[0];t(be)[k]=Le.fit.level,Lt()}catch{t(be)[k]=null,Lt()}}function Lt(){let k=-1,w=99;t(be).forEach((re,ae)=>{if(re==null)return;const Le=l[re]??99;LeProfi-Suche (HuggingFace)
Direkt HuggingFace durchsuchen — oder eine Modell-URL einfügen für den direkten Sprung.=0&&w<=1?k:-1,!0)}function It(k){u(Ne,t(y).find(w=>w.id===k),!0)}async function Tt(k){const w=document.getElementById("cb-r-install-btn");w&&(w.disabled=!0,w.textContent="Starte…");try{const re=await we("/api/cookbook/install-recipe",{method:"POST",body:JSON.stringify({recipe_id:k,hf_token:di()})});ce(`${re.count} Download${re.count!==1?"s":""} läuft — Modelle erscheinen danach automatisch im Modelle-Tab.`),u(Ne,null),bt("activity")}catch(re){ce(re.message,!0),w&&(w.disabled=!1,w.textContent="Installieren")}}async function F(k,w){var re,ae;u(Ze,!0),u(ut,w,!0),u(D,k,!0),u(He,""),u(N,8192),u(ue,null),u(pe,null),u(Ae,""),u(ve,!0);try{if(u(ue,await we("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:k,ctx:8192})}),!0),(ae=(re=t(ue))==null?void 0:re.files)!=null&&ae.length){const Le=t(ue).files.find(ht=>{var yt;return(yt=ht.quant)==null?void 0:yt.includes("Q4_K_M")})||t(ue).files[0];u(Ae,Le.filename,!0),Le.optimal_ctx&&t(N)===8192&&u(N,Le.optimal_ctx,!0),Y()}}catch(Le){ce(Le.message,!0)}u(ve,!1)}function Y(){var k,w,re;!((w=(k=t(ue))==null?void 0:k.files)!=null&&w.length)||!t(Ae)||(u(pe,t(ue).files.find(ae=>ae.filename===t(Ae))||null,!0),(re=t(pe))!=null&&re.optimal_ctx&&t(N)===8192&&u(N,t(pe).optimal_ctx,!0))}async function $(){var k,w;if(!t(D)||!t(Ae))return ce("Bitte eine GGUF-Datei wählen.",!0);u(ve,!0);try{const re=((k=t(ue))==null?void 0:k.params_b)??7,ae=((w=t(pe))==null?void 0:w.quant)??"Q4_K_M";await we("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:t(D),role:t(He),params_b:re,quant:ae,file:t(Ae),ctx:t(N),hf_token:di()})}),ce("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),u(Ze,!1),bt("activity")}catch(re){ce("Fehler: "+re.message,!0)}u(ve,!1)}async function G(k,w,re,ae){ae.disabled=!0,ae.textContent="Starte…";try{await we("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:k,role:w,params_b:re,quant:"Q4_K_M",hf_token:di()})}),ce("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),bt("activity")}catch(Le){ce(Le.message,!0),ae.disabled=!1,ae.textContent="Installieren"}}function E(){u(et,null),u(Ve,""),u(nt,""),u(it,[{repo:"",role:"",quant:"Q4_K_M"}],!0),u(je,!0)}function Z(k){const w=t(y).find(re=>re.id===k);w&&(u(et,k,!0),u(Ve,w.title,!0),u(nt,w.desc||"",!0),u(it,w.models.map(re=>({repo:re.repo,role:re.role,quant:re.quant||"Q4_K_M"})),!0),u(je,!0))}async function ke(){if(!t(Ve).trim())return ce("Bitte einen Titel angeben.",!0);const k=t(it).filter(w=>w.repo.trim());if(!k.length)return ce("Mindestens ein Modell (Repo) angeben.",!0);try{t(et)?(await we("/api/cookbook/user-recipe/"+encodeURIComponent(t(et)),{method:"PUT",body:JSON.stringify({title:t(Ve),desc:t(nt),models:k})}),ce("Setup aktualisiert.")):(await we("/api/cookbook/user-recipe",{method:"POST",body:JSON.stringify({title:t(Ve),desc:t(nt),models:k})}),ce("Setup gespeichert.")),u(je,!1),wt()}catch(w){ce(w.message,!0)}}async function Pe(k){const w=t(y).find(re=>re.id===k);if(await hn({title:`„${(w==null?void 0:w.title)||k}" löschen?`,body:"Dein eigenes Setup wird aus dem Cookbook entfernt. Bereits installierte Modelle bleiben unangetastet.",confirmLabel:"Löschen",danger:!0}))try{await we("/api/cookbook/user-recipe/"+encodeURIComponent(k),{method:"DELETE"}),ce("Setup gelöscht."),wt()}catch(re){ce(re.message,!0)}}function C(k){if(!v(k))return"";const w=f(k);return`MoE${w?` · ~${w}B aktiv`:""}`}function B(k){return k?`${Fn(k)}`:""}var se=zc(),ie=i(tt(se),2),ee=r(ie),Se=i(r(ee),2),de=i(ee,4);{var A=k=>{var w=Qd();p(k,w)},j=k=>{var w=ec();Je(w,21,()=>t(y),Xe,(re,ae)=>{const Le=q(()=>t(ae).id===t(P));var ht=Xd(),yt=r(ht);{var $e=Ge=>{var pt=Zd(),Zt=tt(pt),Gt=i(Zt,2);S("click",Zt,Bt=>{Bt.stopPropagation(),Z(t(ae).id)}),S("keydown",Zt,Bt=>{Bt.key==="Enter"&&(Bt.stopPropagation(),Z(t(ae).id))}),S("click",Gt,Bt=>{Bt.stopPropagation(),Pe(t(ae).id)}),S("keydown",Gt,Bt=>{Bt.key==="Enter"&&(Bt.stopPropagation(),Pe(t(ae).id))}),p(Ge,pt)};L(yt,Ge=>{t(ae).user&&Ge($e)})}var We=i(yt,2);{var at=Ge=>{var pt=tr();p(Ge,pt)},St=Ge=>{var pt=Yd();p(Ge,pt)};L(We,Ge=>{t(Le)?Ge(at):t(ae).user&&Ge(St,1)})}var rt=i(We,2),ot=r(rt),xt=r(ot),Nt=r(xt),rn=i(ot,2),Mt=r(rn),st=i(rt,2),qt=r(st),Qt=i(st,2),$t=r(Qt);z((Ge,pt)=>{Et(ht,1,`card-btn${t(Le)?" cb-best":""}`),h(Nt,t(ae).title),Et(rn,1,`fit-badge ${Ge??""}`),h(Mt,pt),h(qt,t(ae).desc),h($t,`${t(ae).models.length??""} Modell${t(ae).models.length>1?"e":""} im Setup`)},[()=>b(t(ae).fit_level),()=>T(t(ae).fit_level)]),S("click",ht,()=>It(t(ae).id)),p(re,ht)}),p(k,w)};L(de,k=>{t(O)?k(A):k(j,-1)})}var oe=i(ie,2),Me=r(oe),U=i(r(Me),2),le=r(U);{var Te=k=>{const w=q(()=>Math.round((Date.now()/1e3-t(M).updated)/60));var re=nc(),ae=tt(re);{var Le=at=>{var St=li();z(()=>h(St,`Quellen befragt vor ${t(w)??""} min`)),p(at,St)},ht=at=>{var St=li();z(rt=>h(St,`Quellen befragt vor ${rt??""} h`),[()=>Math.round(t(w)/60)]),p(at,St)},yt=at=>{var St=li();z(rt=>h(St,`Quellen befragt vor ${rt??""} Tg.`),[()=>Math.round(t(w)/1440)]),p(at,St)};L(ae,at=>{t(w)<60?at(Le):t(w)<1440?at(ht,1):at(yt,-1)})}var $e=i(ae,2);{var We=at=>{var St=tc();p(at,St)};L($e,at=>{t(Oe)&&at(We)})}p(k,re)};L(le,k=>{var w;(w=t(M))!=null&&w.updated&&k(Te)})}var ze=i(U,2),x=r(ze),H=i(Me,4);{var he=k=>{var w=ac();p(k,w)},V=k=>{var w=Ua(),re=tt(w);Je(re,17,()=>t(M).categories,Xe,(ae,Le)=>{var ht=oc(),yt=r(ht),$e=r(yt),We=r($e),at=i(yt,2);Je(at,21,()=>t(Le).models,Xe,(St,rt)=>{const ot=q(()=>t(Le).recommended&&t(rt).repo===t(Le).recommended);var xt=lc(),Nt=r(xt);{var rn=ft=>{var mt=tr();p(ft,mt)};L(Nt,ft=>{t(ot)&&ft(rn)})}var Mt=i(Nt,2),st=r(Mt),qt=r(st),Qt=r(qt),$t=i(qt,2),Ge=r($t),pt=i(st,2),Zt=r(pt),Gt=i(Mt,2),Bt=r(Gt);Ye(Bt,()=>B(o[t(rt).role]||c(t(rt).repo)));var Gn=i(Bt,2);Ye(Gn,()=>C(t(rt).repo));var Yn=i(Gt,2),Dn=r(Yn),Ca=i(Yn,2);Je(Ca,17,()=>t(rt).requirements||[],Xe,(ft,mt)=>{var Wt=ic(),In=r(Wt);z(()=>h(In,`⚠ ${t(mt)??""}`)),p(ft,Wt)});var kt=i(Ca,4),dt=r(kt);{var gt=ft=>{var mt=rc();z(()=>Aa(mt,"title",`bereits eingerichtet als ${t(rt).installed??""}`)),p(ft,mt)},Rt=ft=>{var mt=sc();S("click",mt,Wt=>G(t(rt).repo,t(rt).role,t(rt).params_b,Wt.currentTarget)),p(ft,mt)};L(dt,ft=>{t(rt).installed?ft(gt):ft(Rt,-1)})}z((ft,mt,Wt)=>{Et(xt,1,`card${t(ot)?" res-best":""}`),h(Qt,t(rt).name),h(Ge,`${t(rt).author??""} · ${t(rt).params_b??""}B`),Et(pt,1,`fit-badge ${ft??""}`),h(Zt,t(rt).fit.text),h(Dn,`${mt??""} · ⬇ ${Wt??""}`)},[()=>b(t(rt).fit.level),()=>_(t(rt).fit),()=>(t(rt).downloads||0).toLocaleString()]),p(St,xt)}),z(()=>h(We,t(Le).title)),p(ae,ht)}),p(k,w)};L(H,k=>{var w;t(K)&&!t(M)?k(he):(w=t(M))!=null&&w.categories&&k(V,1)})}var xe=i(oe,2),Ie=i(r(xe),4),Fe=r(Ie),De=i(Fe,2),W=r(De);W.value=W.__value="downloads";var J=i(W);J.value=J.__value="trending";var Q=i(J);Q.value=Q.__value="created_at";var R=i(De,2),ne=r(R),_e=i(Ie,2);Je(_e,20,()=>["","coder","vision","reasoning","chat","agent"],Xe,(k,w)=>{var re=dc(),ae=r(re);z(()=>{Et(re,1,t(te)===w?"primary":"ghost"),h(ae,w||"Alle")}),S("click",re,()=>{u(te,w,!0),Pt()}),p(k,re)});var ge=i(_e,2);{var fe=k=>{var w=vc();Je(w,21,()=>t(Ce),Xe,(re,ae,Le)=>{var ht=cc(),yt=r(ht);{var $e=Gt=>{var Bt=tr();p(Gt,Bt)};L(yt,Gt=>{Le===t(Be)&&Gt($e)})}var We=i(yt,2),at=r(We),St=r(at),rt=r(St),ot=i(St,2),xt=r(ot),Nt=i(at,2),rn=r(Nt),Mt=i(We,2),st=r(Mt);Ye(st,()=>B(c(t(ae).id)));var qt=i(st,2);Ye(qt,()=>C(t(ae).id));var Qt=i(Mt,4),$t=r(Qt),Ge=r($t),pt=i($t,2),Zt=r(pt);z((Gt,Bt,Gn,Yn,Dn)=>{Et(ht,1,`card${Le===t(Be)?" res-best":""}`),h(rt,Gt),h(xt,t(ae).author||""),Et(Nt,1,`fit-badge ${Bt??""}`),h(rn,Gn),h(Ge,Yn),h(Zt,`⬇ ${Dn??""}`)},[()=>t(ae).id.split("/").pop(),()=>t(be)[Le]?b(t(be)[Le]):"warn",()=>t(be)[Le]?T(t(be)[Le]):"prüfe…",()=>t(be)[Le]?_({req_gb:0,tps:0}):"Hardware-Fit…",()=>(t(ae).downloads||0).toLocaleString()]),S("click",ht,()=>F(t(ae).id,t(ae).id.split("/").pop())),p(re,ht)}),p(k,w)};L(ge,k=>{t(Ce).length&&k(fe)})}var me=i(xe,2);{var _t=k=>{const w=q(()=>t(Ne));var re=_c(),ae=r(re),Le=r(ae),ht=i(Le,2),yt=r(ht),$e=i(ht,2),We=r($e),at=i($e,2);Je(at,21,()=>t(w).models,Xe,(Mt,st)=>{var qt=hc(),Qt=r(qt),$t=r(Qt),Ge=r($t),pt=r(Ge),Zt=i(Ge,2),Gt=r(Zt),Bt=i(Zt,2);Ye(Bt,()=>C(t(st).repo));var Gn=i($t,2);{var Yn=gt=>{var Rt=uc(),ft=r(Rt);z(()=>h(ft,t(st).why)),p(gt,Rt)};L(Gn,gt=>{t(st).why&>(Yn)})}var Dn=i(Gn,2);{var Ca=gt=>{var Rt=pc(),ft=r(Rt);z((mt,Wt,In)=>h(ft,`~${mt??""} GB · ~${Wt??""} Tok/s · optimal ~${In??""}k Kontext`),[()=>(t(st).fit.req_gb??0).toFixed(1),()=>Math.round(t(st).fit.tps??0),()=>Math.round((t(st).optimal_ctx||8192)/1024)]),p(gt,Rt)};L(Dn,gt=>{t(st).fit&>(Ca)})}var kt=i(Qt,2);{var dt=gt=>{var Rt=fc(),ft=r(Rt);z(mt=>{Et(Rt,1,`fit-badge ${mt??""}`),h(ft,t(st).fit.text)},[()=>b(t(st).fit.level)]),p(gt,Rt)};L(kt,gt=>{t(st).fit&>(dt)})}z(()=>{h(pt,t(st).name),h(Gt,t(st).role)}),p(Mt,qt)});var St=i(at,2);{var rt=Mt=>{const st=q(()=>Math.max(...t(w).models.map(Ge=>{var pt;return((pt=Ge.fit)==null?void 0:pt.req_gb)??0})));var qt=gc(),Qt=i(r(qt)),$t=r(Qt);z(Ge=>h($t,`~${Ge??""} GB`),[()=>t(st).toFixed(1)]),p(Mt,qt)};L(St,Mt=>{t(w).models.length&&t(w).models[0].fit&&Mt(rt)})}var ot=i(St,2);{var xt=Mt=>{const st=q(()=>t(y).find(Ge=>!Ge.user&&Ge.fit_level!=="too_tight"&&Ge.id!==t(w).id));var qt=bc(),Qt=i(r(qt));{var $t=Ge=>{var pt=mc(),Zt=i(tt(pt)),Gt=r(Zt);z(()=>h(Gt,`„${t(st).title??""}" ansehen`)),S("click",Zt,Bt=>{Bt.preventDefault(),u(Ne,null),setTimeout(()=>It(t(st).id),50)}),p(Ge,pt)};L(Qt,Ge=>{t(st)&&Ge($t)})}p(Mt,qt)};L(ot,Mt=>{t(w).fit_level==="too_tight"&&Mt(xt)})}var Nt=i(ot,2),rn=r(Nt);z(()=>{h(yt,t(w).title),h(We,t(w).desc),Et(Nt,1,`primary${t(w).fit_level==="too_tight"?" warn":""}`),h(rn,t(w).fit_level==="too_tight"?"Trotzdem installieren (nicht empfohlen)":"Komplettes Setup installieren")}),S("click",re,Mt=>{Mt.target.classList.contains("modal-overlay")&&u(Ne,null)}),S("click",Le,()=>u(Ne,null)),S("click",Nt,()=>Tt(t(w).id)),p(k,re)};L(me,k=>{t(Ne)&&k(_t)})}var zt=i(me,2);{var Ot=k=>{var w=Ac(),re=r(w),ae=r(re),Le=i(ae,2),ht=r(Le),yt=i(Le,2),$e=r(yt),We=i(yt,2);{var at=ot=>{var xt=yc();p(ot,xt)},St=ot=>{var xt=Mc(),Nt=i(tt(xt),2);Je(Nt,21,()=>t(ue).files,Xe,(kt,dt)=>{const gt=q(()=>t(dt).fit.level==="perfect"?"●":t(dt).fit.level==="marginal"?"◐":"○");var Rt=Yr(),ft=r(Rt),mt={};z(()=>{h(ft,`${t(gt)??""} ${t(dt).filename??""}`),mt!==(mt=t(dt).filename)&&(Rt.value=(Rt.__value=t(dt).filename)??"")}),p(kt,Rt)});var rn=i(Nt,2),Mt=r(rn),st=i(r(Mt),2),qt=i(Mt,2),Qt=r(qt),$t=i(r(Qt));Ye($t,()=>br(a));var Ge=i(Qt,2),pt=i(rn,2);{var Zt=kt=>{var dt=xc(),gt=i(r(dt)),Rt=r(gt),ft=i(gt,2);z(mt=>h(Rt,`~${mt??""}k`),[()=>Math.round(t(pe).optimal_ctx/1024)]),S("click",ft,mt=>{mt.preventDefault(),u(N,t(pe).optimal_ctx,!0)}),p(kt,dt)};L(pt,kt=>{var dt;(dt=t(pe))!=null&&dt.optimal_ctx&&kt(Zt)})}var Gt=i(pt,2);{var Bt=kt=>{var dt=kc(),gt=r(dt),Rt=i(r(gt),2),ft=r(Rt),mt=i(gt,2),Wt=r(mt);z((In,ki,Wi)=>{h(ft,`~${In??""} GB · ~${ki??""} Tok/s · ${(t(pe).quant||"GGUF")??""}`),Et(mt,1,`fit-badge ${Wi??""}`),h(Wt,t(pe).fit.text)},[()=>(t(pe).fit.req_gb??0).toFixed(1),()=>Math.round(t(pe).fit.tps??0),()=>b(t(pe).fit.level)]),p(kt,dt)};L(Gt,kt=>{t(pe)&&kt(Bt)})}var Gn=i(Gt,2);{var Yn=kt=>{const dt=q(()=>t(ue).files.find(Wt=>Wt.fit.level!=="too_tight"&&Wt.filename!==t(Ae)));var gt=Ua(),Rt=tt(gt);{var ft=Wt=>{var In=wc(),ki=i(r(In)),Wi=r(ki);z(ji=>h(Wi,`${t(dt).filename??""} (${ji??""})`),[()=>T(t(dt).fit.level)]),S("click",ki,ji=>{ji.preventDefault(),u(Ae,t(dt).filename,!0),Y()}),p(Wt,In)},mt=Wt=>{var In=Sc();p(Wt,In)};L(Rt,Wt=>{t(dt)?Wt(ft):Wt(mt,-1)})}p(kt,gt)};L(Gn,kt=>{var dt,gt;((dt=t(pe))==null?void 0:dt.fit.level)==="too_tight"&&((gt=t(ue))!=null&>.files)&&kt(Yn)})}var Dn=i(Gn,2),Ca=r(Dn);z(()=>{var kt,dt;Et(Dn,1,`primary${((kt=t(pe))==null?void 0:kt.fit.level)==="too_tight"?" warn":""}`),Dn.disabled=t(ve),h(Ca,t(ve)?"Starte…":((dt=t(pe))==null?void 0:dt.fit.level)==="too_tight"?"Trotzdem holen (zu groß — nicht empfohlen)":"Herunterladen & Einpflegen")}),S("change",Nt,Y),Jn(Nt,()=>t(Ae),kt=>u(Ae,kt)),dn(st,()=>t(He),kt=>u(He,kt)),dn(Ge,()=>t(N),kt=>u(N,kt)),S("click",Dn,$),p(ot,xt)},rt=ot=>{var xt=Ec();p(ot,xt)};L(We,ot=>{var xt,Nt;t(ve)&&!t(ue)?ot(at):(Nt=(xt=t(ue))==null?void 0:xt.files)!=null&&Nt.length?ot(St,1):t(ve)||ot(rt,2)})}z(()=>{h(ht,t(ut)),h($e,t(D))}),S("click",w,ot=>{ot.target.classList.contains("modal-overlay")&&u(Ze,!1)}),S("click",ae,()=>u(Ze,!1)),p(k,w)};L(zt,k=>{t(Ze)&&k(Ot)})}var gn=i(zt,2);{var da=k=>{var w=Tc(),re=r(w),ae=r(re),Le=i(ae,2),ht=r(Le),yt=i(Le,6),$e=i(yt,4),We=i($e,4);Je(We,17,()=>t(it),Xe,(ot,xt,Nt)=>{var rn=Cc(),Mt=r(rn),st=i(Mt,2),qt=i(st,2);Je(qt,20,()=>["Q4_K_M","Q5_K_M","Q6_K","Q8_0","Q3_K_M"],Xe,($t,Ge)=>{var pt=Yr(),Zt=r(pt),Gt={};z(()=>{h(Zt,Ge),Gt!==(Gt=Ge)&&(pt.__value=Ge)}),p($t,pt)});var Qt=i(qt,2);dn(Mt,()=>t(xt).repo,$t=>t(xt).repo=$t),dn(st,()=>t(xt).role,$t=>t(xt).role=$t),Jn(qt,()=>t(xt).quant,$t=>t(xt).quant=$t),S("click",Qt,()=>u(it,t(it).filter(($t,Ge)=>Ge!==Nt),!0)),p(ot,rn)});var at=i(We,2),St=i(at,4),rt=r(St);z(()=>{h(ht,t(et)?"Setup bearbeiten":"Eigenes Setup erstellen"),h(rt,t(et)?"Änderungen speichern":"Setup speichern")}),S("click",w,ot=>{ot.target.classList.contains("modal-overlay")&&u(je,!1)}),S("click",ae,()=>u(je,!1)),dn(yt,()=>t(Ve),ot=>u(Ve,ot)),dn($e,()=>t(nt),ot=>u(nt,ot)),S("click",at,()=>u(it,[...t(it),{repo:"",role:"",quant:"Q4_K_M"}],!0)),S("click",St,ke),p(k,w)};L(gn,k=>{t(je)&&k(da)})}z(()=>{ze.disabled=t(K),h(x,t(K)?"Suche…":"Aktualisieren"),R.disabled=t(Re),h(ne,t(Re)?"Lade…":"Suchen")}),S("click",Se,E),S("click",ze,()=>Ct(!0)),S("keydown",Fe,k=>k.key==="Enter"&&Pt()),dn(Fe,()=>t(Ee),k=>u(Ee,k)),Jn(De,()=>t(X),k=>u(X,k)),S("click",R,Pt),p(e,se),Pn()}qn(["click","keydown","change"]);var Pc=g(` Du öffnest Mission Control über einen Proxy/Namen. Die Engine läuft auf Port 8080 ohne HTTPS direkt am Bosgame. +Temperatur (GPU)',1),Yo=g('Freier SpeicherGBTemperatur–messe…',1),Xo=g('Freier Speicher–messe…'),ed=g('Warte auf Messwerte…'),td=g('Noch kein Modell eingerichtet — starte hier:',1),nd=g('Die häufigsten Aufgaben — ein Klick.',1),ad=g('Bild'),id=g('Code'),rd=g('Text'),sd=g('∞ aktiv'),ld=g(''),od=g(''),Zr=g(''),dd=g(''),cd=g('Noch keine ModelleHol dir unter „Cookbook" ein Modell, das auf deine Hardware passt.'),vd=g('News gerade nicht ladbar.'),ud=g('
LLM-EngineAktives ModellSystem-Gesundheit
Auslastung in Echtzeit.Schnellstart
',1);function pd(e,n){$n(n,!0);const a=q(()=>xi.value),s=q(()=>Pr.value),l=q(()=>{var x;return((x=t(a))==null?void 0:x.models)||[]}),o=q(()=>{var x;return((x=t(a))==null?void 0:x.swap_ok)??!1}),d=["running","ready","loading","starting"],c=q(()=>t(l).find(x=>d.includes(x.state))),v=q(()=>t(l).filter(x=>!x.incomplete)),f=q(()=>t(a)?t(o)?t(s)&&t(s).ram.percent>=90?"Achtung: Speicher wird knapp.":"Alles läuft rund.":"LLM-Engine offline":"Verbinde…"),b=q(()=>t(a)?t(o)?t(s)&&t(s).ram.percent>=90?`Arbeitsspeicher bei ${Math.round(t(s).ram.percent)} % — eventuell Speicher freigeben.`:`${t(v).length} ${t(v).length===1?"Modell":"Modelle"} konfiguriert · ${t(c)?`„${t(c).name}" geladen`:"keines geladen"} · keine Warnungen.`:"Der llama-swap-Dienst antwortet gerade nicht.":""),T=q(()=>()=>{var J;const x=(J=t(s))==null?void 0:J.gpu;return x&&x.vram.total+x.gtt.total>0?(x.vram.used+x.gtt.used)/(x.vram.total+x.gtt.total)*100:0});let _=L(jt([])),y=L(null);yi(async()=>{try{u(_,((await we("/api/news")).items||[]).slice(0,4),!0)}catch{}});async function D(){await hn({title:"Speicher freigeben?",body:"Alle aktuell geladenen Modelle werden aus dem Grafikspeicher geworfen. Sie laden beim nächsten Aufruf automatisch neu.",confirmLabel:"Speicher freigeben"})&&(await we("/api/unload",{method:"POST"}),M())}async function B(x){u(y,x,!0);try{await we("/api/preload?model="+encodeURIComponent(x),{method:"POST"})}catch(J){ce("Laden fehlgeschlagen: "+(J.message||"Engine nicht erreichbar?"),!0)}u(y,null),M()}function M(){document.dispatchEvent(new Event("mc:refresh"))}function K(x){var J;(J=document.querySelector(`.nav-item[data-view="${x}"]`))==null||J.dispatchEvent(new MouseEvent("click"))}function Oe(x){return x>=90?"red":x>=75?"":"green"}function Ee(x){return x==null?"":x>=75?"red":x>=55?"":"green"}function Ce(x){return x>=90?"red":x>=70?"":"green"}var Re=ud(),te=tt(Re),X=r(te),be=r(X),Be=r(be),Ne=i(Be);{var Ze=x=>{var J=Qo();p(x,J)};O(Ne,x=>{t(o)&&!t(c)&&x(Ze)})}var ut=i(be,2),I=r(ut),ue=i(te,2),Ae=r(ue),He=r(Ae),N=i(r(He),2);Ye(N,()=>Ut("server"),!0);var ve=i(He,2),pe=r(ve),je=i(ve,2),Ve=r(je),nt=i(Ae,2),it=r(nt),et=i(r(it),2);Ye(et,()=>Ut("cpu"),!0);var bt=i(it,2),wt=r(bt),Ct=i(bt,2),Kt=r(Ct);{var Pt=x=>{var J=li();z(he=>h(J,`${he??""} · ${t(c).state??""}`),[()=>{var he;return(he=t(c).meta)!=null&&he.ctx?Math.round(t(c).meta.ctx/1024)+"k ctx":""}]),p(x,J)},Dt=x=>{var J=li("lädt bei erster Anfrage");p(x,J)};O(Kt,x=>{t(c)?x(Pt):x(Dt,-1)})}var Lt=i(nt,2);{var It=x=>{const J=q(()=>{var gn;return t(s).gpu_temp??((gn=t(s).cpu)==null?void 0:gn.temp)??null}),he=q(()=>Ee(t(J))),W=q(()=>t(s).ram.total-t(s).ram.used),xe=q(()=>100-t(s).ram.percent);var Ie=Zo(),Fe=tt(Ie),De=r(Fe),j=i(r(De));Ye(j,()=>Ut("thermo"),!0);var Q=i(De,2),Z=r(Q),F=i(Q,2),ne=r(F),_e=i(Fe,2),ge=r(_e),fe=i(r(ge));Ye(fe,()=>Ut("database"),!0);var me=i(ge,2),_t=r(me),zt=i(me,2),Ot=r(zt);z((gn,da,k,w)=>{Et(Fe,1,`kpi ${t(he)??""}`),h(Z,gn),h(ne,t(J)==null?"messe…":t(J)<55?"kühl":t(J)<75?"normal":"⚠ heiß"),Et(_e,1,`kpi ${t(xe)<15?"red":t(xe)<30?"":"green"}`),h(_t,da),h(Ot,`von ${k??""} GB · ${w??""} % frei`)},[()=>t(J)!=null?`${Math.round(t(J))}°C`:"–",()=>Math.round(t(W)/1073741824),()=>Math.round(t(s).ram.total/1073741824),()=>Math.round(t(xe))]),p(x,Ie)},Tt=x=>{var J=Yo();p(x,J)};O(Lt,x=>{t(s)?x(It):x(Tt,-1)})}var P=i(ue,2),V=r(P),$=i(r(V),4);{var G=x=>{const J=q(()=>t(T)());var he=Ua(),W=tt(he);Je(W,17,()=>{var xe;return[["Prozessor (CPU)",((xe=t(s).cpu)==null?void 0:xe.percent)??0,""],["Arbeitsspeicher (RAM)",t(s).ram.percent,Oe(t(s).ram.percent)],["Grafikspeicher (VRAM)",t(J),Ce(t(J))]]},Xe,(xe,Ie)=>{var Fe=q(()=>Hn(t(Ie),3));let De=()=>t(Fe)[0],j=()=>t(Fe)[1];const Q=q(()=>Math.max(0,Math.min(100,j()||0)));var Z=Xo(),F=r(Z),ne=r(F),_e=r(ne),ge=i(ne),fe=r(ge),me=i(F,2),_t=r(me);z((zt,Ot)=>{h(_e,De()),h(fe,`${zt??""} %`),Et(me,1,`bar ${t(Q)>=90?"bad":t(Q)>=75?"warn":""}`),At(_t,`width:${Ot??""}%`)},[()=>Math.round(t(Q)),()=>Math.max(2,t(Q))]),p(xe,Z)}),p(x,he)},E=x=>{var J=ed();p(x,J)};O($,x=>{t(s)?x(G):x(E,-1)})}var Y=i(V,2),ke=i(r(Y),2);{var Pe=x=>{var J=td(),he=i(tt(J),2),W=r(he);Ye(W,()=>Ut("search"),!0);var xe=i(W,4);Ye(xe,()=>Ut("chevron"),!0);var Ie=i(he,2),Fe=r(Ie);Ye(Fe,()=>Ut("swap"),!0);var De=i(Fe,4);Ye(De,()=>Ut("chevron"),!0);var j=i(Ie,2),Q=r(j);Ye(Q,()=>Ut("file"),!0);var Z=i(Q,4);Ye(Z,()=>Ut("chevron"),!0),S("click",he,()=>K("cookbook")),S("click",Ie,()=>K("connect")),S("click",j,()=>K("guides")),p(x,J)},C=x=>{var J=nd(),he=i(tt(J),2),W=r(he);Ye(W,()=>Ut("search"),!0);var xe=i(W,4);Ye(xe,()=>Ut("chevron"),!0);var Ie=i(he,2),Fe=r(Ie);Ye(Fe,()=>Ut("refresh"),!0);var De=i(Fe,4);Ye(De,()=>Ut("chevron"),!0);var j=i(Ie,2),Q=r(j);Ye(Q,()=>Ut("file"),!0);var Z=i(Q,4);Ye(Z,()=>Ut("chevron"),!0);var F=i(j,2),ne=r(F);Ye(ne,()=>Ut("swap"),!0);var _e=i(ne,4);Ye(_e,()=>Ut("chevron"),!0),S("click",he,()=>K("cookbook")),S("click",Ie,D),S("click",j,()=>K("server")),S("click",F,()=>K("connect")),p(x,J)};O(ke,x=>{t(v).length?x(C,-1):x(Pe)})}var R=i(P,2),se=r(R),ie=r(se),ee=i(r(ie),2),Se=r(ee),de=i(ie,2);{var A=x=>{var J=Zr();Je(J,21,()=>t(v),Xe,(he,W)=>{const xe=q(()=>d.includes(t(W).state)),Ie=q(()=>t(W).state==="downloading"),Fe=q(()=>t(W).state==="loading"||t(W).state==="starting"||t(Ie)?"load":t(xe)?"on":""),De=q(()=>t(Ie)?`↓ ${t(W).download_progress!=null?Math.round(t(W).download_progress)+"%":"..."}`:t(W).state==="loading"||t(W).state==="starting"?"lädt…":t(xe)?"geladen ✓":"bereit");var j=od(),Q=r(j),Z=i(Q,2),F=r(Z),ne=r(F),_e=r(ne),ge=i(ne,2);{var fe=$e=>{var We=ad();p($e,We)},me=q(()=>{var $e,We;return(We=($e=t(W).meta)==null?void 0:$e.caps)==null?void 0:We.includes("Bild")}),_t=$e=>{var We=id();p($e,We)},zt=q(()=>{var $e,We;return(We=($e=t(W).meta)==null?void 0:$e.caps)==null?void 0:We.includes("Code")}),Ot=$e=>{var We=rd();p($e,We)};O(ge,$e=>{t(me)?$e(fe):t(zt)?$e(_t,1):$e(Ot,-1)})}var gn=i(ge,2);{var da=$e=>{var We=sd();p($e,We)};O(gn,$e=>{t(W).ttl>=99999&&$e(da)})}var k=i(F,2),w=r(k),re=i(Z,2),ae=r(re),Le=r(ae),ht=i(ae,2);{var yt=$e=>{var We=ld(),at=r(We);z(()=>{At(We,`padding:3px 9px;font-size:12px;opacity:${t(y)===t(W).name?".5":"1"}`),We.disabled=t(y)===t(W).name,h(at,t(y)===t(W).name?"…":"Laden")}),S("click",We,()=>B(t(W).name)),p($e,We)};O(ht,$e=>{!t(xe)&&!t(Ie)&&t(o)&&$e(yt)})}z(($e,We)=>{var at;Et(Q,1,`li-dot ${t(Fe)??""}`),At(ne,t(xe)?"color:var(--accent)":""),h(_e,t(W).name),h(w,`${$e??""} + ${(at=t(W).meta)!=null&&at.quant?" · "+t(W).meta.quant:""} + ${We??""}`),At(ae,`white-space:nowrap;color:${t(xe)?"var(--on)":"var(--mut)"}`),h(Le,t(De))},[()=>{var $e;return($e=t(W).meta)!=null&&$e.ctx?Math.round(t(W).meta.ctx/1024)+"k ctx":""},()=>{var $e;return($e=t(W).meta)!=null&&$e.size_bytes?" · "+(t(W).meta.size_bytes/1073741824).toFixed(1)+" GB":""}]),p(he,j)}),p(x,J)},U=x=>{var J=dd(),he=i(r(J),4);S("click",he,()=>K("cookbook")),p(x,J)};O(de,x=>{t(v).length?x(A):x(U,-1)})}var oe=i(se,2),Me=r(oe),H=i(r(Me),2),le=i(Me,2);{var Te=x=>{var J=Zr();Je(J,21,()=>t(_),Xe,(he,W)=>{var xe=cd(),Ie=r(xe),Fe=r(Ie),De=r(Fe),j=i(Fe,2),Q=r(j);z(()=>{Aa(xe,"href",t(W).link),h(De,t(W).title),h(Q,`${t(W).source??""}${t(W).relevant?" · für dich":""}`)}),p(he,xe)}),p(x,J)},ze=x=>{var J=vd();p(x,J)};O(le,x=>{t(_).length?x(Te):x(ze,-1)})}z(x=>{h(Be,`${t(f)??""} `),h(I,t(b)),Et(Ae,1,`kpi ${t(o)?"green":"red"}`),h(pe,t(o)?"Online":"Offline"),h(Ve,x),Et(nt,1,`kpi ${t(c)?"blue":"muted"}`),h(wt,t(c)?t(c).name:"Keins"),h(Se,t(v).length?t(v).length+" konfiguriert":"")},[()=>{var x,J;return((J=(x=t(a))==null?void 0:x.swap_url)==null?void 0:J.replace(/^https?:\/\//,""))??"—"}]),S("click",H,()=>K("news")),S("keydown",H,x=>x.key==="Enter"&&K("news")),p(e,Re),Pn()}qn(["click","keydown"]);var fd=g(""),hd=g('Dein Stack
Top-News
'),gd=g(''),md=g('Noch keine Modelle konfiguriertHol dir unter „Cookbook" ein passendes Modell.'),bd=g(' '),_d=g(' kein Modell hinterlegt— leere Rolle leer — '),yd=g(''),xd=g(''),kd=g(' API-Name:'),wd=g('
Modell Kann Details Status Port Aktionen '),Sd=g(''),Md=g(''),Ed=g(''),Ad=g('Empfohlen für deine Hardware
Modelle
Deine konfigurierten Modelle — testen, Kontext anpassen oder aus dem Speicher werfen.Schnelltest
Schreib eine Nachricht — das gewählte Modell wird automatisch geweckt.',1);function Cd(e,n){$n(n,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr (längere Dateien/Chats), braucht aber mehr Speicher und wird etwas langsamer.",s="Die Rolle ist ein zusätzlicher, sprechender Name (z.B. coder). Du kannst in deinen Tools entweder den echten Modellnamen ODER die Rolle angeben — beides führt zum selben Modell.",l=[{id:"coder",label:"Coder",desc:"Programmieren & Code"},{id:"vision",label:"Vision",desc:"Bilder verstehen"},{id:"scout",label:"Scout",desc:"Schneller Allrounder"},{id:"reviewer",label:"Reviewer",desc:"Code/Texte prüfen"},{id:"manager",label:"Manager",desc:"Planen & koordinieren"}],o=q(()=>{var P;return((P=xi.value)==null?void 0:P.models)||[]});function d(){document.dispatchEvent(new Event("mc:refresh"))}let c=L(""),v=L(""),f=L(""),b=L(!1);const T=q(()=>t(o).filter(P=>!P.incomplete));async function _(){var V;const P=t(c)||((V=t(T)[0])==null?void 0:V.name);if(!(!P||!t(v).trim())){u(b,!0),u(f,"(wecke Modell, kann beim Laden kurz dauern…)");try{const $=await we("/api/chat",{method:"POST",body:JSON.stringify({model:P,message:t(v)})});u(f,$.reply,!0)}catch($){u(f,"Fehler: "+$.message)}u(b,!1),d()}}const y=300;let D=L(!1),B=L(null),M=L(8192),K=L(!1);function Oe(P){var V;u(B,t(o).find($=>$.name===P),!0),t(B)&&(u(M,((V=t(B).meta)==null?void 0:V.ctx)||8192,!0),u(K,(t(B).ttl??y)>=99999),u(D,!0))}async function Ee(){const P=t(K)?99999:y;try{await we("/api/update_model",{method:"POST",body:JSON.stringify({alias:t(B).name,ctx:t(M),ttl:P})}),ce("Gespeichert — aktiv beim nächsten Modell-Start."),u(D,!1),d()}catch(V){ce(V.message,!0)}}let Ce=L(!1),Re=L(""),te=L(""),X=L("");function be(P){const V=t(o).find($=>$.name===P);u(Re,P,!0),u(X,(V==null?void 0:V.role)||"",!0),u(te,""),u(Ce,!0)}async function Be(P){try{await we("/api/set_role",{method:"POST",body:JSON.stringify({alias:t(Re),role:P})}),ce(P?`Rolle gesetzt: ${P}`:"Rolle entfernt."),u(Ce,!1),d()}catch(V){ce(V.message,!0)}}async function Ne(P){if(await hn({title:`„${P}" entladen?`,body:"Das Modell wird aus dem Grafikspeicher geworfen und lädt beim nächsten Aufruf automatisch neu.",confirmLabel:"Entladen"}))try{await we("/api/unload?model="+encodeURIComponent(P),{method:"POST"}),ce("Entladen: "+P),setTimeout(d,600)}catch(V){ce(V.message,!0)}}async function Ze(P){if(await hn({title:`„${P}" wirklich löschen?`,body:"Das Modell wird aus der Konfiguration ausgetragen und seine Dateien werden von der Festplatte gelöscht, um Speicher freizugeben. Das lässt sich nicht rückgängig machen — später brauchst du dafür einen neuen Download.",confirmLabel:"Endgültig löschen",danger:!0}))try{const V=await we("/api/delete_model",{method:"POST",body:JSON.stringify({alias:P})});ce(V.note||"Gelöscht: "+P),setTimeout(d,600)}catch(V){ce(V.message,!0)}}function ut(P){if(!P)return"–";const V=[];return P.coder&&V.push('Code'),P.vision&&V.push('Bild'),P.reasoning&&V.push('🧠 Reason'),P.moe&&V.push(`🧩 MoE${P.active_b?" ·"+P.active_b+"B":""}`),P.tools==="yes"?V.push('🛠 Tools'):P.tools==="likely"&&V.push('🛠 Tools?'),P.embedding&&V.push('🔢 Embed'),!P.coder&&!P.vision&&!P.embedding&&V.unshift('Text'),V.length?V.join(" "):"–"}function I(P){if(!P)return"–";const V=P.quant||"?",$=P.ctx?Math.round(P.ctx/1024)+"K":"?",G=P.size_bytes?(P.size_bytes/1024**3).toFixed(1)+" GB":"?";return`${V} · ${$} · ${G}`}function ue(P){var V;(V=navigator.clipboard)==null||V.writeText(P),ce("Kopiert: "+P)}var Ae=Ad(),He=i(tt(Ae),2),N=i(r(He),6);Je(N,21,()=>t(T),Xe,(P,V)=>{var $=fd(),G=r($),E={};z(()=>{h(G,t(V).name),E!==(E=t(V).name)&&($.value=($.__value=t(V).name)??"")}),p(P,$)});var ve=i(N,4),pe=i(ve,2),je=r(pe),Ve=i(pe,2);{var nt=P=>{var V=hd(),$=r(V);z(()=>h($,t(f))),p(P,V)};O(Ve,P=>{t(f)&&P(nt)})}var it=i(He,2),et=r(it),bt=i(r(et)),wt=r(bt),Ct=i(et,4);{var Kt=P=>{var V=gd();p(P,V)},Pt=P=>{var V=kd(),$=i(r(V));Je($,21,()=>t(o),Xe,(G,E)=>{var Y=Ua(),ke=tt(Y);{var Pe=R=>{var se=md(),ie=r(se),ee=r(ie),Se=i(ie,5),de=r(Se),A=i(de,2);z(()=>h(ee,t(E).name)),S("click",de,()=>{var U;ce("Lade im Cookbook ein Modell und setze den Alias auf: "+t(E).name),(U=document.querySelector(".nav-item[data-view='cookbook']"))==null||U.dispatchEvent(new MouseEvent("click"))}),S("click",A,()=>Ze(t(E).name)),p(R,se)},C=R=>{var se=xd(),ie=r(se),ee=r(ie),Se=r(ee),de=i(Se);{var A=De=>{var j=bd(),Q=r(j);z(()=>h(Q,t(E).role)),p(De,j)};O(de,De=>{t(E).role&&De(A)})}var U=i(ee,2);{var oe=De=>{var j=_d(),Q=r(j);z(()=>h(Q,t(E).meta.filename)),p(De,j)};O(U,De=>{var j;(j=t(E).meta)!=null&&j.filename&&De(oe)})}var Me=i(U,2),H=i(r(Me),2);Je(H,17,()=>{var De;return(De=t(E).api_ids)!=null&&De.length?t(E).api_ids:[t(E).name]},Xe,(De,j)=>{var Q=yd(),Z=r(Q);z(()=>h(Z,t(j))),S("click",Q,()=>ue(t(j))),p(De,Q)});var le=i(ie);Ye(le,()=>{var De;return ut((De=t(E).meta)==null?void 0:De.capabilities)},!0);var Te=i(le);Ye(Te,()=>I(t(E).meta),!0);var ze=i(Te);Ye(ze,()=>Uo(t(E).state,t(E).download_progress),!0);var x=i(ze),J=r(x),he=i(x),W=r(he),xe=i(W,2),Ie=i(xe,2),Fe=i(Ie,2);z(()=>{h(Se,`${t(E).name??""} `),h(J,t(E).port??"auto")}),S("click",W,()=>be(t(E).name)),S("click",xe,()=>Oe(t(E).name)),S("click",Ie,()=>Ne(t(E).name)),S("click",Fe,()=>Ze(t(E).name)),p(R,se)};O(ke,R=>{t(E).incomplete?R(Pe):R(C,-1)})}p(G,Y)}),p(P,V)};O(Ct,P=>{t(o).length?P(Pt,-1):P(Kt)})}var Dt=i(it,2);{var Lt=P=>{var V=Sd(),$=r(V),G=r($),E=i(G,4),Y=r(E),ke=i(E,2),Pe=i(r(ke));Ye(Pe,()=>br(a));var C=i(ke,2),R=i(C,2);{var se=oe=>{var Me=wd(),H=r(Me),le=i(r(H),2),Te=r(le),ze=i(Te,2),x=i(H,2);z((J,he)=>{h(Te,`Optimal ~${J??""}k → ~${t(B).meta.peak_ram_optimal_gb??""} GB Spitzenbedarf.`),h(ze,` Aktuell ~${he??""}k → ~${t(B).meta.peak_ram_gb??""} GB.`)},[()=>Math.round(t(B).meta.optimal_ctx/1024),()=>Math.round((t(B).meta.ctx||0)/1024)]),S("click",x,()=>u(M,t(B).meta.optimal_ctx,!0)),p(oe,Me)};O(R,oe=>{var Me;(Me=t(B).meta)!=null&&Me.optimal_ctx&&oe(se)})}var ie=i(R,4),ee=i(r(ie),2),Se=r(ee),de=i(Se,2),A=r(de),U=i(ie,2);z(()=>{h(Y,t(B).name),At(de,`color:${t(K)?"var(--accent)":"var(--mut)"}`),h(A,t(K)?"An (TTL = ∞)":"Aus (TTL = 5 min)")}),S("click",V,oe=>{oe.target.classList.contains("modal-overlay")&&u(D,!1)}),S("click",G,()=>u(D,!1)),dn(C,()=>t(M),oe=>u(M,oe)),Ko(Se,()=>t(K),oe=>u(K,oe)),S("click",U,Ee),p(P,V)};O(Dt,P=>{t(D)&&t(B)&&P(Lt)})}var It=i(Dt,2);{var Tt=P=>{var V=Ed(),$=r(V),G=r($),E=i(G,2),Y=i(r(E));Ye(Y,()=>br(s));var ke=i(E,2),Pe=r(ke),C=i(ke,4);Je(C,21,()=>l,Xe,(Se,de)=>{var A=Md(),U=r(A);z(()=>{Et(A,1,t(X)===t(de).id?"primary":"ghost"),Aa(A,"title",t(de).desc),h(U,t(de).label)}),S("click",A,()=>Be(t(de).id)),p(Se,A)});var R=i(C,4),se=i(R,2),ie=r(se),ee=i(ie,2);z(()=>h(Pe,t(Re))),S("click",V,Se=>{Se.target.classList.contains("modal-overlay")&&u(Ce,!1)}),S("click",G,()=>u(Ce,!1)),dn(R,()=>t(te),Se=>u(te,Se)),S("click",ie,()=>Be("")),S("click",ee,()=>Be(t(te).trim().toLowerCase())),p(P,V)};O(It,P=>{t(Ce)&&P(Tt)})}z(()=>{pe.disabled=t(b),h(je,t(b)?"…":"Senden"),h(wt,t(o).length?t(o).length+" konfiguriert":"")}),Jn(N,()=>t(c),P=>u(c,P)),dn(ve,()=>t(v),P=>u(v,P)),S("click",pe,_),p(e,Ae),Pn()}qn(["click"]);var Td=g('Modelle & Ports
Modelle laden automatisch, sobald eine Anfrage kommt — du musst nichts manuell starten.Prozessor (CPU)%Arbeitsspeicher%Grafikspeicher%',1),zd=g(''),$d=g('System-Metriken (Bosgame)
Live-Auslastung deines Mini-PCs, alle 0,5 Sekunden.Arbeitsspeicher (RAM)Grafikspeicher (VRAM + GTT)Speicherplatz (Disk)Temperatur (GPU / CPU)'),Pd=g(' '),Dd=g(''),Id=g(''),Ld=g(''),Od=g('Gerade nichts los.Alles ruhig — keine laufenden Aufgaben.'),Bd=g(''),Rd=g('Aktivität
Live-Auslastung und laufende Aufgaben (Downloads, Updates) mit Protokoll.',1);function Fd(e,n){$n(n,!0);const a=q(()=>fa.value),s=q(()=>fa.tracked),l=q(()=>Pr.value);let o=jt({cpu:[],ram:[],gpu:[]});bi(()=>{var Ae;if(!t(l))return;const I=t(l).gpu,ue=I&&I.vram.total+I.gtt.total>0?(I.vram.used+I.gtt.used)/(I.vram.total+I.gtt.total)*100:0;o.cpu=[...o.cpu,((Ae=t(l).cpu)==null?void 0:Ae.percent)??0].slice(-60),o.ram=[...o.ram,t(l).ram.percent].slice(-60),o.gpu=[...o.gpu,ue].slice(-60)});const d=q(()=>()=>{var ue;const I=(ue=t(l))==null?void 0:ue.gpu;return I&&I.vram.total+I.gtt.total>0?(I.vram.used+I.gtt.used)/(I.vram.total+I.gtt.total)*100:0}),c=q(()=>t(a).filter(I=>I.state!=="running"&&I.state!=="queued").length),v=q(()=>t(a).filter(I=>I.state==="failed").length);function f(I){if(I.state!=="running")return null;if(typeof I.progress=="number")return Math.min(100,I.progress);const Ae=((I.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return Ae?Math.min(100,parseFloat(Ae[1])):null}function b(I){return I==null||I<0?"":I>=90?`noch ~${Math.round(I/60)} min`:`noch ~${Math.max(1,Math.round(I))} s`}function T(I){return I==="done"?'fertig':I==="failed"?'fehler':I==="canceled"?'abgebrochen':'läuft…'}function _(I){return I==="done"?"on":I==="failed"||I==="canceled"?"":"load"}async function y(I){try{await we(`/api/jobs/${I}/cancel`,{method:"POST"}),ce("Abbruch angefordert…")}catch(ue){ce(ue.message,!0)}}async function D(I){try{await we(`/api/jobs/${I}`,{method:"DELETE"})}catch(ue){ce(ue.message,!0)}}async function B(){try{const I=await we("/api/jobs/clear",{method:"POST"});ce(`${I.removed} Einträge entfernt.`)}catch(I){ce(I.message,!0)}}function M(I,ue){return I.map(Ae=>``).join("")}var K=Rd(),Oe=i(tt(K),2);{var Ee=I=>{const ue=q(()=>t(d)());var Ae=Td(),He=tt(Ae),N=r(He),ve=i(r(N),2),pe=r(ve),je=i(ve,2),Ve=r(je),nt=i(N,2),it=i(r(nt),2),et=r(it),bt=i(it,2),wt=r(bt),Ct=i(nt,2),Kt=i(r(Ct),2),Pt=r(Kt),Dt=i(Kt,2),Lt=r(Dt),It=i(He,2),Tt=i(r(It),4),P=r(Tt),V=i(r(P)),$=r(V),G=i(P,2),E=i(r(G),2),Y=r(E),ke=i(G,2),Pe=i(r(ke)),C=r(Pe),R=i(ke,2),se=i(r(R),2),ie=r(se),ee=i(Tt,2),Se=r(ee),de=i(r(Se));Ye(de,()=>M(o.cpu,"--accent"),!0);var A=i(Se,2),U=i(r(A));Ye(U,()=>M(o.ram,"--purple"),!0);var oe=i(A,2),Me=i(r(oe));Ye(Me,()=>M(o.gpu,"--on"),!0),z((H,le,Te,ze,x,J,he,W,xe,Ie,Fe,De,j)=>{h(pe,H),h(Ve,le),h(et,Te),h(wt,`${ze??""} / ${x??""}`),h(Pt,J),h(Lt,he),h($,`${W??""} / ${xe??""}`),h(Y,Ie),h(C,`${Fe??""} % belegt`),h(ie,`${De??""} / ${j??""}`)},[()=>{var H;return Math.round(((H=t(l).cpu)==null?void 0:H.percent)??0)},()=>{var H;return((H=t(l).cpu)==null?void 0:H.temp)!=null?`${Math.round(t(l).cpu.temp)}° CPU-Temp`:"Auslastung"},()=>Math.round(t(l).ram.percent),()=>ca(t(l).ram.used),()=>ca(t(l).ram.total),()=>Math.round(t(ue)),()=>t(l).gpu_temp!=null?`${Math.round(t(l).gpu_temp)}° GPU-Temp`:"VRAM + GTT",()=>ca(t(l).ram.used),()=>ca(t(l).ram.total),()=>t(l).gpu?`${ca(t(l).gpu.vram.used+t(l).gpu.gtt.used)} / ${ca(t(l).gpu.vram.total+t(l).gpu.gtt.total)}`:"–",()=>{var H;return Math.round(((H=t(l).disk)==null?void 0:H.percent)??0)},()=>t(l).gpu_temp!=null?Math.round(t(l).gpu_temp)+"°":"–",()=>{var H;return((H=t(l).cpu)==null?void 0:H.temp)!=null?Math.round(t(l).cpu.temp)+"°":"–"}]),p(I,Ae)};O(Oe,I=>{t(l)&&I(Ee)})}var Ce=i(Oe,2),Re=r(Ce),te=i(r(Re),2),X=r(te),be=i(te,2);{var Be=I=>{var ue=zd();S("click",ue,B),p(I,ue)};O(be,I=>{t(c)&&I(Be)})}var Ne=i(Re,4);{var Ze=I=>{var ue=$d();p(I,ue)},ut=I=>{var ue=Ua(),Ae=tt(ue);Je(Ae,17,()=>t(a),Xe,(He,N)=>{const ve=q(()=>f(t(N))),pe=q(()=>t(N).state==="running"?b(t(N).eta_s):""),je=q(()=>t(N).state==="running"&&t(N).rate_bps?ca(t(N).rate_bps)+"/s":""),Ve=q(()=>[t(pe),t(je)].filter(Boolean).join(" · ")),nt=q(()=>t(s).includes(t(N).id));var it=Bd(),et=r(it),bt=r(et),wt=i(bt,2),Ct=r(wt),Kt=i(wt,2);{var Pt=E=>{var Y=Pd(),ke=r(Y);z(Pe=>h(ke,`${Pe??""} %${t(Ve)?` · ${t(Ve)}`:""}`),[()=>Math.round(t(ve))]),p(E,Y)};O(Kt,E=>{t(ve)!=null&&E(Pt)})}var Dt=i(Kt,2);{var Lt=E=>{var Y=Dd();z(()=>At(Y,`${t(ve)==null?"margin-left:auto;":""}margin-right:2px;padding:2px 9px;font-size:12px`)),S("click",Y,ke=>{ke.stopPropagation(),y(t(N).id)}),p(E,Y)},It=E=>{var Y=Id();S("click",Y,ke=>{ke.stopPropagation(),D(t(N).id)}),p(E,Y)};O(Dt,E=>{t(N).state==="running"?E(Lt):E(It,-1)})}var Tt=i(Dt,2);Ye(Tt,()=>T(t(N).state));var P=i(et,2);{var V=E=>{var Y=Ld(),ke=r(Y);z(()=>At(ke,`width:${t(ve)??""}%`)),p(E,Y)};O(P,E=>{t(ve)!=null&&t(N).state==="running"&&E(V)})}var $=i(P,2);{var G=E=>{var Y=Od(),ke=r(Y);z(Pe=>h(ke,Pe),[()=>(t(N).log||[]).join(` +`)]),p(E,Y)};O($,E=>{t(nt)&&E(G)})}z(E=>{Et(bt,1,`li-dot ${E??""}`),h(Ct,t(N).label)},[()=>_(t(N).state)]),S("click",et,()=>fa.toggle(t(N).id)),S("keydown",et,E=>E.key==="Enter"&&fa.toggle(t(N).id)),p(He,it)}),p(I,ue)};O(Ne,I=>{t(a).length?I(ut,-1):I(Ze)})}z(()=>h(X,t(a).length?t(v)?t(v)+" Fehler":t(a).length+" gesamt":"")),p(e,K),Pn()}qn(["click","keydown"]);var Kd=g(' '),Nd=g(''),qd=g('✓ fertig'),Gd=g('✗ fehlgeschlagen'),Vd=g('abgebrochen'),Wd=g('läuft…'),jd=g(''),Ud=g('Hintergrund-Aufgaben
Downloads & Updates erscheinen hier mit Live-Protokoll — zum Aufklappen klicken.'),Hd=g('Aktueller Vorgang
Server & Wartung
Dienste steuern, Updates einspielen und live mitlesen — ganz ohne SSH oder Terminal.LLM-Engine (llama-swap)
Das Herzstück: lädt bei jeder Anfrage automatisch das passende Modell.Adresse (für deine Tools)Aktuell geladenKonfigurierte ModelleDienste & Applikation
Diese Aktionen sind harmlos und passwortlos — es geht nichts dabei verloren.Betriebssystem (Bosgame)
Tiefe Eingriffe — das Dashboard fragt einmalig nach deinem sudo-Passwort.',1);function Jd(e,n){$n(n,!0);const a=q(()=>xi.value),s=q(()=>fa.value);let l=null,o=L(`Verbinde… +`),d=L("llama-swap"),c,v=L(null),f=L("");const b=new Set,T=q(()=>t(v)?t(s).find(A=>A.id===t(v)):null);bi(()=>{if(!t(T))return;const A=t(T),U=A.state==="done",oe=A.state==="failed",Me=A.state==="canceled";(U||oe||Me)&&!b.has(A.id)&&(b.add(A.id),ce(U?`✓ ${t(f)} abgeschlossen.`:Me?`${t(f)} abgebrochen.`:`✗ ${t(f)} fehlgeschlagen.`,oe),U&&setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),800))});function _(A,U){u(v,A,!0),u(f,U,!0),fa.track(A)}yi(()=>{y()}),qo(()=>{l==null||l.close()});function y(){l==null||l.close();const A=t(d);u(o,`Verbinde mit ${A}… +`);const U=location.protocol==="https:"?"wss:":"ws:";l=new WebSocket(`${U}//${location.host}/api/logs/${A}?token=${encodeURIComponent(al())}`),l.onmessage=oe=>{u(o,t(o)+oe.data),c&&(c.scrollTop=c.scrollHeight)},l.onclose=()=>{u(o,t(o)+` +— Verbindung getrennt —`)},l.onerror=()=>l==null?void 0:l.close()}async function D(A,U,oe){if(await hn({title:U,body:oe,confirmLabel:"Neustarten"}))try{await we(`/api/service/${A}/restart`,{method:"POST"}),ce("Neustart ausgelöst: "+A),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),2e3)}catch(Me){ce(Me.message,!0)}}async function B(){if(await hn({title:"Mission Control aktualisieren?",body:"Holt die neueste Dashboard-Version aus Gitea und startet automatisch neu. Die Seite trennt kurz und verbindet von selbst wieder (~10 Sek)."}))try{const A=await we("/api/self-update",{method:"POST"});ce("Update läuft — Dashboard startet gleich neu."),_(A.job_id,"Mission Control Update")}catch(A){ce(A.message,!0)}}async function M(){if(!await hn({title:"LLM-Engine aktualisieren?",body:"Lädt die neueste llama.cpp-ROCm-Version und installiert sie. Die Engine ist während des Updates kurz nicht erreichbar."}))return;const A=await er({title:"sudo-Passwort",body:"Für das Engine-Update wird einmalig dein sudo-Passwort gebraucht (für den Update-Befehl).",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Update starten"});if(A!==null)try{const U=await we("/api/update",{method:"POST",body:JSON.stringify({password:A})});ce("LLM-Engine-Update läuft."),_(U.job_id,"LLM-Engine-Update")}catch(U){ce(U.message,!0)}}async function K(){if(await hn({title:"Grafikspeicher leeren?",body:"Alle geladenen Modelle werden entladen. Sie laden beim nächsten Aufruf automatisch neu — es geht nichts verloren.",confirmLabel:"Leeren"}))try{await we("/api/unload",{method:"POST"}),ce("Grafikspeicher geleert."),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),600)}catch(A){ce(A.message,!0)}}async function Oe(){if(!await hn({title:"OS-Updates installieren?",body:"FührtLive-Konsole
Live mitlesen, was der Dienst gerade tut.apt update & upgradeaus. Das kann ein paar Minuten dauern; der Fortschritt erscheint in der Aktivität."}))return;const A=await er({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(A)try{const U=await we("/api/os-update",{method:"POST",body:JSON.stringify({password:A})});ce("OS-Update gestartet."),_(U.job_id,"OS-Update")}catch(U){ce(U.message,!0)}}async function Ee(){if(!await hn({title:"Server wirklich neu starten?",body:"Der ganze Bosgame startet physisch neu. Alles ist für ~1 Minute offline — auch dieses Dashboard.",confirmLabel:"Reboot",danger:!0}))return;const A=await er({title:"sudo-Passwort",body:"Für den Reboot wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Jetzt neustarten",danger:!0});if(A)try{await we("/api/reboot",{method:"POST",body:JSON.stringify({password:A})}),ce("Reboot ausgelöst — bis gleich.")}catch(U){ce(U.message,!0)}}async function Ce(){u(Re,"prüfe…");try{const A=await we("/api/integration/test");u(Re,A.ok?`✓ Engine antwortet — ${A.models.length} Modell(e): ${A.models.join(", ")}`:`✗ keine Verbindung: ${A.error}`,!0),u(te,A.ok,!0)}catch(A){u(Re,"✗ "+A.message),u(te,!1)}}let Re=L(""),te=L(!1);const X=q(()=>{var A;return((A=t(a))==null?void 0:A.models)||[]}),be=["running","ready","loading","starting"],Be=q(()=>t(X).find(A=>be.includes(A.state)));function Ne(A){if(!A||A.state!=="running")return null;if(typeof A.progress=="number")return Math.min(100,A.progress);const oe=((A.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return oe?Math.min(100,parseFloat(oe[1])):null}var Ze=Hd(),ut=i(tt(Ze),2),I=r(ut),ue=i(r(I),2),Ae=r(ue),He=i(I,4),N=r(He),ve=i(r(N)),pe=r(ve),je=i(N,2),Ve=i(r(je),2),nt=r(Ve),it=i(je,2),et=i(r(it),2),bt=r(et),wt=i(He,2),Ct=r(wt),Kt=i(Ct,2);{var Pt=A=>{var U=Kd(),oe=r(U);z(()=>{At(U,`color:${t(te)?"#7ee29a":"#ff9b95"}`),h(oe,t(Re))}),p(A,U)};O(Kt,A=>{t(Re)&&A(Pt)})}var Dt=i(ut,2),Lt=i(r(Dt),4),It=i(Lt,2),Tt=i(It,2),P=i(Tt,2),V=i(P,2),$=i(Dt,2),G=i(r($),4),E=i(G,2),Y=i($,2);{var ke=A=>{const U=q(()=>t(T)),oe=q(()=>t(U).state==="done"),Me=q(()=>t(U).state==="failed"),H=q(()=>t(U).state==="canceled"),le=q(()=>t(oe)||t(Me)||t(H)),Te=q(()=>Ne(t(U)));var ze=Ud(),x=r(ze),J=i(r(x),2);{var he=fe=>{var me=Nd();S("click",me,async()=>{await hn({title:t(f)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&we(`/api/jobs/${t(U).id}/cancel`,{method:"POST"})}),p(fe,me)};O(J,fe=>{t(le)||fe(he)})}var W=i(J,2),xe=r(W);{var Ie=fe=>{var me=qd();p(fe,me)},Fe=fe=>{var me=Gd();p(fe,me)},De=fe=>{var me=Vd();p(fe,me)},j=fe=>{var me=Wd();p(fe,me)};O(xe,fe=>{t(oe)?fe(Ie):t(Me)?fe(Fe,1):t(H)?fe(De,2):fe(j,-1)})}var Q=i(x,2),Z=r(Q),F=i(Q,2);{var ne=fe=>{var me=jd(),_t=r(me);z(()=>At(_t,`width:${t(Te)??""}%`)),p(fe,me)};O(F,fe=>{t(Te)!=null&&!t(le)&&fe(ne)})}var _e=i(F,2),ge=r(_e);z(fe=>{h(Z,`${t(f)??""}${t(le)?t(oe)?" — erfolgreich.":t(H)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),h(ge,fe)},[()=>(t(U).log||[]).join(` +`)]),p(A,ze)};O(Y,A=>{t(T)&&A(ke)})}var Pe=i(Y,2),C=r(Pe),R=i(r(C),2),se=r(R);se.value=se.__value="llama-swap";var ie=i(se);ie.value=ie.__value="mission-control";var ee=i(ie);ee.value=ee.__value="system";var Se=i(C,4),de=r(Se);No(Se,A=>c=A,()=>c),z(A=>{var U,oe,Me;At(ue,`margin-left:auto;${(U=t(a))!=null&&U.swap_ok?"background:rgba(63,185,80,.12);border-color:rgba(63,185,80,.25);color:#7ee29a":"background:rgba(248,81,73,.12);border-color:rgba(248,81,73,.3);color:#ff9b95"}`),h(Ae,(oe=t(a))!=null&&oe.swap_ok?"● erreichbar":"● offline"),h(pe,(((Me=t(a))==null?void 0:Me.swap_url)||"—")+"/v1"),h(nt,t(Be)?t(Be).name+` (${t(Be).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),h(bt,A),h(de,t(o))},[()=>t(X).filter(A=>!A.incomplete).length||"keine"]),S("click",Ct,Ce),S("click",Lt,()=>D("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),S("click",It,()=>D("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),S("click",Tt,B),S("click",P,M),S("click",V,K),S("click",G,Oe),S("click",E,Ee),S("change",R,y),Jn(R,()=>t(d),A=>u(d,A)),p(e,Ze),Pn()}qn(["click","change"]);var Qd=g('Lade Setups…'),Zd=g('✎ ×',1),tr=g('★ Beste Wahl für dein System'),Yd=g('Dein Setup'),Xd=g(''),ec=g(''),tc=g('· ⚠ Cache veraltet'),nc=g(" ",1),ac=g('Frage Quellen ab…'),ic=g(''),rc=g('✓ installiert'),sc=g(''),lc=g(''),oc=g('
'),dc=g(''),cc=g('
'),vc=g(''),uc=g('
'),pc=g(''),fc=g(" "),hc=g(''),gc=g('Größter Spitzenbedarf: . Es läuft immer nur ein Modell gleichzeitig — das größte bestimmt, ob das Setup passt.'),mc=g('Alternative: — passt auf dein System.',1),bc=g('⚠ Dieses Setup übersteigt deinen verfügbaren Speicher.'),_c=g(''),yc=g('Lade Dateien von HuggingFace…'),Yr=g(""),xc=g('Empfohlener Kontext für deine Hardware: — übernehmen'),kc=g(''),wc=g(''),Sc=g('Ressourcen-Check⚠ Alle Varianten dieses Modells sind zu groß für deinen Speicher. Ein kleineres Modell aus den Empfehlungen wäre die bessere Wahl.'),Mc=g('',1),Ec=g('Keine GGUF-Dateien im Repo gefunden.'),Ac=g(''),Cc=g(''),Tc=g(''),zc=g('Cookbook
Modelle finden, installieren und eigene Setups zusammenstellen.1 · Anwendungsfall wählen & installieren
Hier starten: Fertige Modell-Bundles für deinen Anwendungsfall — ein Klick installiert alles. Die Hardware-Ampel zeigt vorab, ob das Setup auf deinen PC passt.Aktuell die besten Modelle für dein System
Top-Modelle je Kategorie von HuggingFace — Hardware-Fit wird live für dein System berechnet.',1);function $c(e,n){$n(n,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr, braucht aber mehr Speicher und wird etwas langsamer.",s="MoE (Mixture of Experts): viele Parameter fürs Wissen, aber pro Wort ist nur ein kleiner Teil aktiv → fast große-Modell-Qualität bei hohem Tempo. Ideal für deine APU.",l={perfect:0,marginal:1,too_tight:2},o={vision:"Bilder",coder:"Coden",reasoning:"Logik",agent:"Agenten & Tools",scout:"Allrounder",reviewer:"Review",manager:"Manager"},d=[{label:"Bilder",kw:["-vl-","-vl","vision","llava","multimodal","-mm-","pixtral"]},{label:"Coden",kw:["coder","-code-","code-","codestral","starcoder"]},{label:"Logik",kw:["-r1","deepseek-r1","reasoning","qwq","magistral","-think","thinking","-o1"]},{label:"Agenten & Tools",kw:["hermes","-tool","command-r","watt","-fc-","function"]}];function c(k){const w=(k||"").toLowerCase();for(const re of d)if(re.kw.some(ae=>w.includes(ae)))return re.label;return"Allrounder"}function v(k=""){const w=k.toLowerCase();return/\d+x\d+(\.\d+)?b/.test(w)||new RegExp("(?{wt(),Ct()});async function wt(){u(B,!0);try{const k=await we("/api/cookbook/recipes");u(y,k.recipes||[],!0),u(D,k.recommended_id||null,!0)}catch(k){ce(k.message,!0)}u(B,!1)}async function Ct(k=!1){u(K,!0);try{const w=await we("/api/cookbook/discover"+(k?"?force=true":""));u(M,w,!0),u(Oe,w.stale,!0)}catch(w){ce("Empfehlungen nicht ladbar: "+w.message,!0)}u(K,!1)}function Kt(k){k=k.trim();const w=k.match(/huggingface\.co\/([^\s/]+\/[^\s/?#]+)/i);return w?w[1]:/^[\w.-]+\/[\w.-]+$/.test(k)?k:null}async function Pt(){const k=t(Ee).trim(),w=Kt(k);let re=k;if(t(te)&&!w&&(re=re?re+" "+t(te):t(te)),!re&&!w){u(Ce,[],!0);return}u(Re,!0),u(be,[],!0),u(Be,-1);try{if(w)u(Ce,[{id:w,author:w.split("/")[0],downloads:0}],!0);else{const ae=`https://huggingface.co/api/models?search=${encodeURIComponent(re)}&filter=gguf&sort=${encodeURIComponent(t(X))}&direction=-1&limit=40`,Le=await fetch(ae);u(Ce,await Le.json(),!0)}t(Ce).forEach((ae,Le)=>Dt(Le,ae.id))}catch(ae){ce(ae.message,!0),u(Ce,[],!0)}u(Re,!1)}async function Dt(k,w){var re;try{const ae=await we("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:w,ctx:8192})});if(!((re=ae.files)!=null&&re.length)){t(be)[k]=null,Lt();return}const Le=ae.files.find(ht=>{var yt;return(yt=ht.quant)==null?void 0:yt.includes("Q4_K_M")})||ae.files[0];t(be)[k]=Le.fit.level,Lt()}catch{t(be)[k]=null,Lt()}}function Lt(){let k=-1,w=99;t(be).forEach((re,ae)=>{if(re==null)return;const Le=l[re]??99;LeProfi-Suche (HuggingFace)
Direkt HuggingFace durchsuchen — oder eine Modell-URL einfügen für den direkten Sprung.=0&&w<=1?k:-1,!0)}function It(k){u(Ne,t(y).find(w=>w.id===k),!0)}async function Tt(k){const w=document.getElementById("cb-r-install-btn");w&&(w.disabled=!0,w.textContent="Starte…");try{const re=await we("/api/cookbook/install-recipe",{method:"POST",body:JSON.stringify({recipe_id:k,hf_token:di()})});ce(`${re.count} Download${re.count!==1?"s":""} läuft — Modelle erscheinen danach automatisch im Modelle-Tab.`),u(Ne,null),bt("activity")}catch(re){ce(re.message,!0),w&&(w.disabled=!1,w.textContent="Installieren")}}async function P(k,w){var re,ae;u(Ze,!0),u(ut,w,!0),u(I,k,!0),u(He,""),u(N,8192),u(ue,null),u(pe,null),u(Ae,""),u(ve,!0);try{if(u(ue,await we("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:k,ctx:8192})}),!0),(ae=(re=t(ue))==null?void 0:re.files)!=null&&ae.length){const Le=t(ue).files.find(ht=>{var yt;return(yt=ht.quant)==null?void 0:yt.includes("Q4_K_M")})||t(ue).files[0];u(Ae,Le.filename,!0),Le.optimal_ctx&&t(N)===8192&&u(N,Le.optimal_ctx,!0),V()}}catch(Le){ce(Le.message,!0)}u(ve,!1)}function V(){var k,w,re;!((w=(k=t(ue))==null?void 0:k.files)!=null&&w.length)||!t(Ae)||(u(pe,t(ue).files.find(ae=>ae.filename===t(Ae))||null,!0),(re=t(pe))!=null&&re.optimal_ctx&&t(N)===8192&&u(N,t(pe).optimal_ctx,!0))}async function $(){var k,w;if(!t(I)||!t(Ae))return ce("Bitte eine GGUF-Datei wählen.",!0);u(ve,!0);try{const re=((k=t(ue))==null?void 0:k.params_b)??7,ae=((w=t(pe))==null?void 0:w.quant)??"Q4_K_M";await we("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:t(I),role:t(He),params_b:re,quant:ae,file:t(Ae),ctx:t(N),hf_token:di()})}),ce("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),u(Ze,!1),bt("activity")}catch(re){ce("Fehler: "+re.message,!0)}u(ve,!1)}async function G(k,w,re,ae){ae.disabled=!0,ae.textContent="Starte…";try{await we("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:k,role:w,params_b:re,quant:"Q4_K_M",hf_token:di()})}),ce("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),bt("activity")}catch(Le){ce(Le.message,!0),ae.disabled=!1,ae.textContent="Installieren"}}function E(){u(et,null),u(Ve,""),u(nt,""),u(it,[{repo:"",role:"",quant:"Q4_K_M"}],!0),u(je,!0)}function Y(k){const w=t(y).find(re=>re.id===k);w&&(u(et,k,!0),u(Ve,w.title,!0),u(nt,w.desc||"",!0),u(it,w.models.map(re=>({repo:re.repo,role:re.role,quant:re.quant||"Q4_K_M"})),!0),u(je,!0))}async function ke(){if(!t(Ve).trim())return ce("Bitte einen Titel angeben.",!0);const k=t(it).filter(w=>w.repo.trim());if(!k.length)return ce("Mindestens ein Modell (Repo) angeben.",!0);try{t(et)?(await we("/api/cookbook/user-recipe/"+encodeURIComponent(t(et)),{method:"PUT",body:JSON.stringify({title:t(Ve),desc:t(nt),models:k})}),ce("Setup aktualisiert.")):(await we("/api/cookbook/user-recipe",{method:"POST",body:JSON.stringify({title:t(Ve),desc:t(nt),models:k})}),ce("Setup gespeichert.")),u(je,!1),wt()}catch(w){ce(w.message,!0)}}async function Pe(k){const w=t(y).find(re=>re.id===k);if(await hn({title:`„${(w==null?void 0:w.title)||k}" löschen?`,body:"Dein eigenes Setup wird aus dem Cookbook entfernt. Bereits installierte Modelle bleiben unangetastet.",confirmLabel:"Löschen",danger:!0}))try{await we("/api/cookbook/user-recipe/"+encodeURIComponent(k),{method:"DELETE"}),ce("Setup gelöscht."),wt()}catch(re){ce(re.message,!0)}}function C(k){if(!v(k))return"";const w=f(k);return`MoE${w?` · ~${w}B aktiv`:""}`}function R(k){return k?`${Fn(k)}`:""}var se=zc(),ie=i(tt(se),2),ee=r(ie),Se=i(r(ee),2),de=i(ee,4);{var A=k=>{var w=Qd();p(k,w)},U=k=>{var w=ec();Je(w,21,()=>t(y),Xe,(re,ae)=>{const Le=q(()=>t(ae).id===t(D));var ht=Xd(),yt=r(ht);{var $e=Ge=>{var pt=Zd(),Zt=tt(pt),Gt=i(Zt,2);S("click",Zt,Bt=>{Bt.stopPropagation(),Y(t(ae).id)}),S("keydown",Zt,Bt=>{Bt.key==="Enter"&&(Bt.stopPropagation(),Y(t(ae).id))}),S("click",Gt,Bt=>{Bt.stopPropagation(),Pe(t(ae).id)}),S("keydown",Gt,Bt=>{Bt.key==="Enter"&&(Bt.stopPropagation(),Pe(t(ae).id))}),p(Ge,pt)};O(yt,Ge=>{t(ae).user&&Ge($e)})}var We=i(yt,2);{var at=Ge=>{var pt=tr();p(Ge,pt)},St=Ge=>{var pt=Yd();p(Ge,pt)};O(We,Ge=>{t(Le)?Ge(at):t(ae).user&&Ge(St,1)})}var rt=i(We,2),ot=r(rt),xt=r(ot),Nt=r(xt),rn=i(ot,2),Mt=r(rn),st=i(rt,2),qt=r(st),Qt=i(st,2),$t=r(Qt);z((Ge,pt)=>{Et(ht,1,`card-btn${t(Le)?" cb-best":""}`),h(Nt,t(ae).title),Et(rn,1,`fit-badge ${Ge??""}`),h(Mt,pt),h(qt,t(ae).desc),h($t,`${t(ae).models.length??""} Modell${t(ae).models.length>1?"e":""} im Setup`)},[()=>b(t(ae).fit_level),()=>T(t(ae).fit_level)]),S("click",ht,()=>It(t(ae).id)),p(re,ht)}),p(k,w)};O(de,k=>{t(B)?k(A):k(U,-1)})}var oe=i(ie,2),Me=r(oe),H=i(r(Me),2),le=r(H);{var Te=k=>{const w=q(()=>Math.round((Date.now()/1e3-t(M).updated)/60));var re=nc(),ae=tt(re);{var Le=at=>{var St=li();z(()=>h(St,`Quellen befragt vor ${t(w)??""} min`)),p(at,St)},ht=at=>{var St=li();z(rt=>h(St,`Quellen befragt vor ${rt??""} h`),[()=>Math.round(t(w)/60)]),p(at,St)},yt=at=>{var St=li();z(rt=>h(St,`Quellen befragt vor ${rt??""} Tg.`),[()=>Math.round(t(w)/1440)]),p(at,St)};O(ae,at=>{t(w)<60?at(Le):t(w)<1440?at(ht,1):at(yt,-1)})}var $e=i(ae,2);{var We=at=>{var St=tc();p(at,St)};O($e,at=>{t(Oe)&&at(We)})}p(k,re)};O(le,k=>{var w;(w=t(M))!=null&&w.updated&&k(Te)})}var ze=i(H,2),x=r(ze),J=i(Me,4);{var he=k=>{var w=ac();p(k,w)},W=k=>{var w=Ua(),re=tt(w);Je(re,17,()=>t(M).categories,Xe,(ae,Le)=>{var ht=oc(),yt=r(ht),$e=r(yt),We=r($e),at=i(yt,2);Je(at,21,()=>t(Le).models,Xe,(St,rt)=>{const ot=q(()=>t(Le).recommended&&t(rt).repo===t(Le).recommended);var xt=lc(),Nt=r(xt);{var rn=ft=>{var mt=tr();p(ft,mt)};O(Nt,ft=>{t(ot)&&ft(rn)})}var Mt=i(Nt,2),st=r(Mt),qt=r(st),Qt=r(qt),$t=i(qt,2),Ge=r($t),pt=i(st,2),Zt=r(pt),Gt=i(Mt,2),Bt=r(Gt);Ye(Bt,()=>R(o[t(rt).role]||c(t(rt).repo)));var Gn=i(Bt,2);Ye(Gn,()=>C(t(rt).repo));var Yn=i(Gt,2),Dn=r(Yn),Ca=i(Yn,2);Je(Ca,17,()=>t(rt).requirements||[],Xe,(ft,mt)=>{var Wt=ic(),In=r(Wt);z(()=>h(In,`⚠ ${t(mt)??""}`)),p(ft,Wt)});var kt=i(Ca,4),dt=r(kt);{var gt=ft=>{var mt=rc();z(()=>Aa(mt,"title",`bereits eingerichtet als ${t(rt).installed??""}`)),p(ft,mt)},Rt=ft=>{var mt=sc();S("click",mt,Wt=>G(t(rt).repo,t(rt).role,t(rt).params_b,Wt.currentTarget)),p(ft,mt)};O(dt,ft=>{t(rt).installed?ft(gt):ft(Rt,-1)})}z((ft,mt,Wt)=>{Et(xt,1,`card${t(ot)?" res-best":""}`),h(Qt,t(rt).name),h(Ge,`${t(rt).author??""} · ${t(rt).params_b??""}B`),Et(pt,1,`fit-badge ${ft??""}`),h(Zt,t(rt).fit.text),h(Dn,`${mt??""} · ⬇ ${Wt??""}`)},[()=>b(t(rt).fit.level),()=>_(t(rt).fit),()=>(t(rt).downloads||0).toLocaleString()]),p(St,xt)}),z(()=>h(We,t(Le).title)),p(ae,ht)}),p(k,w)};O(J,k=>{var w;t(K)&&!t(M)?k(he):(w=t(M))!=null&&w.categories&&k(W,1)})}var xe=i(oe,2),Ie=i(r(xe),4),Fe=r(Ie),De=i(Fe,2),j=r(De);j.value=j.__value="downloads";var Q=i(j);Q.value=Q.__value="trending";var Z=i(Q);Z.value=Z.__value="created_at";var F=i(De,2),ne=r(F),_e=i(Ie,2);Je(_e,20,()=>["","coder","vision","reasoning","chat","agent"],Xe,(k,w)=>{var re=dc(),ae=r(re);z(()=>{Et(re,1,t(te)===w?"primary":"ghost"),h(ae,w||"Alle")}),S("click",re,()=>{u(te,w,!0),Pt()}),p(k,re)});var ge=i(_e,2);{var fe=k=>{var w=vc();Je(w,21,()=>t(Ce),Xe,(re,ae,Le)=>{var ht=cc(),yt=r(ht);{var $e=Gt=>{var Bt=tr();p(Gt,Bt)};O(yt,Gt=>{Le===t(Be)&&Gt($e)})}var We=i(yt,2),at=r(We),St=r(at),rt=r(St),ot=i(St,2),xt=r(ot),Nt=i(at,2),rn=r(Nt),Mt=i(We,2),st=r(Mt);Ye(st,()=>R(c(t(ae).id)));var qt=i(st,2);Ye(qt,()=>C(t(ae).id));var Qt=i(Mt,4),$t=r(Qt),Ge=r($t),pt=i($t,2),Zt=r(pt);z((Gt,Bt,Gn,Yn,Dn)=>{Et(ht,1,`card${Le===t(Be)?" res-best":""}`),h(rt,Gt),h(xt,t(ae).author||""),Et(Nt,1,`fit-badge ${Bt??""}`),h(rn,Gn),h(Ge,Yn),h(Zt,`⬇ ${Dn??""}`)},[()=>t(ae).id.split("/").pop(),()=>t(be)[Le]?b(t(be)[Le]):"warn",()=>t(be)[Le]?T(t(be)[Le]):"prüfe…",()=>t(be)[Le]?_({req_gb:0,tps:0}):"Hardware-Fit…",()=>(t(ae).downloads||0).toLocaleString()]),S("click",ht,()=>P(t(ae).id,t(ae).id.split("/").pop())),p(re,ht)}),p(k,w)};O(ge,k=>{t(Ce).length&&k(fe)})}var me=i(xe,2);{var _t=k=>{const w=q(()=>t(Ne));var re=_c(),ae=r(re),Le=r(ae),ht=i(Le,2),yt=r(ht),$e=i(ht,2),We=r($e),at=i($e,2);Je(at,21,()=>t(w).models,Xe,(Mt,st)=>{var qt=hc(),Qt=r(qt),$t=r(Qt),Ge=r($t),pt=r(Ge),Zt=i(Ge,2),Gt=r(Zt),Bt=i(Zt,2);Ye(Bt,()=>C(t(st).repo));var Gn=i($t,2);{var Yn=gt=>{var Rt=uc(),ft=r(Rt);z(()=>h(ft,t(st).why)),p(gt,Rt)};O(Gn,gt=>{t(st).why&>(Yn)})}var Dn=i(Gn,2);{var Ca=gt=>{var Rt=pc(),ft=r(Rt);z((mt,Wt,In)=>h(ft,`~${mt??""} GB · ~${Wt??""} Tok/s · optimal ~${In??""}k Kontext`),[()=>(t(st).fit.req_gb??0).toFixed(1),()=>Math.round(t(st).fit.tps??0),()=>Math.round((t(st).optimal_ctx||8192)/1024)]),p(gt,Rt)};O(Dn,gt=>{t(st).fit&>(Ca)})}var kt=i(Qt,2);{var dt=gt=>{var Rt=fc(),ft=r(Rt);z(mt=>{Et(Rt,1,`fit-badge ${mt??""}`),h(ft,t(st).fit.text)},[()=>b(t(st).fit.level)]),p(gt,Rt)};O(kt,gt=>{t(st).fit&>(dt)})}z(()=>{h(pt,t(st).name),h(Gt,t(st).role)}),p(Mt,qt)});var St=i(at,2);{var rt=Mt=>{const st=q(()=>Math.max(...t(w).models.map(Ge=>{var pt;return((pt=Ge.fit)==null?void 0:pt.req_gb)??0})));var qt=gc(),Qt=i(r(qt)),$t=r(Qt);z(Ge=>h($t,`~${Ge??""} GB`),[()=>t(st).toFixed(1)]),p(Mt,qt)};O(St,Mt=>{t(w).models.length&&t(w).models[0].fit&&Mt(rt)})}var ot=i(St,2);{var xt=Mt=>{const st=q(()=>t(y).find(Ge=>!Ge.user&&Ge.fit_level!=="too_tight"&&Ge.id!==t(w).id));var qt=bc(),Qt=i(r(qt));{var $t=Ge=>{var pt=mc(),Zt=i(tt(pt)),Gt=r(Zt);z(()=>h(Gt,`„${t(st).title??""}" ansehen`)),S("click",Zt,Bt=>{Bt.preventDefault(),u(Ne,null),setTimeout(()=>It(t(st).id),50)}),p(Ge,pt)};O(Qt,Ge=>{t(st)&&Ge($t)})}p(Mt,qt)};O(ot,Mt=>{t(w).fit_level==="too_tight"&&Mt(xt)})}var Nt=i(ot,2),rn=r(Nt);z(()=>{h(yt,t(w).title),h(We,t(w).desc),Et(Nt,1,`primary${t(w).fit_level==="too_tight"?" warn":""}`),h(rn,t(w).fit_level==="too_tight"?"Trotzdem installieren (nicht empfohlen)":"Komplettes Setup installieren")}),S("click",re,Mt=>{Mt.target.classList.contains("modal-overlay")&&u(Ne,null)}),S("click",Le,()=>u(Ne,null)),S("click",Nt,()=>Tt(t(w).id)),p(k,re)};O(me,k=>{t(Ne)&&k(_t)})}var zt=i(me,2);{var Ot=k=>{var w=Ac(),re=r(w),ae=r(re),Le=i(ae,2),ht=r(Le),yt=i(Le,2),$e=r(yt),We=i(yt,2);{var at=ot=>{var xt=yc();p(ot,xt)},St=ot=>{var xt=Mc(),Nt=i(tt(xt),2);Je(Nt,21,()=>t(ue).files,Xe,(kt,dt)=>{const gt=q(()=>t(dt).fit.level==="perfect"?"●":t(dt).fit.level==="marginal"?"◐":"○");var Rt=Yr(),ft=r(Rt),mt={};z(()=>{h(ft,`${t(gt)??""} ${t(dt).filename??""}`),mt!==(mt=t(dt).filename)&&(Rt.value=(Rt.__value=t(dt).filename)??"")}),p(kt,Rt)});var rn=i(Nt,2),Mt=r(rn),st=i(r(Mt),2),qt=i(Mt,2),Qt=r(qt),$t=i(r(Qt));Ye($t,()=>br(a));var Ge=i(Qt,2),pt=i(rn,2);{var Zt=kt=>{var dt=xc(),gt=i(r(dt)),Rt=r(gt),ft=i(gt,2);z(mt=>h(Rt,`~${mt??""}k`),[()=>Math.round(t(pe).optimal_ctx/1024)]),S("click",ft,mt=>{mt.preventDefault(),u(N,t(pe).optimal_ctx,!0)}),p(kt,dt)};O(pt,kt=>{var dt;(dt=t(pe))!=null&&dt.optimal_ctx&&kt(Zt)})}var Gt=i(pt,2);{var Bt=kt=>{var dt=kc(),gt=r(dt),Rt=i(r(gt),2),ft=r(Rt),mt=i(gt,2),Wt=r(mt);z((In,ki,Wi)=>{h(ft,`~${In??""} GB · ~${ki??""} Tok/s · ${(t(pe).quant||"GGUF")??""}`),Et(mt,1,`fit-badge ${Wi??""}`),h(Wt,t(pe).fit.text)},[()=>(t(pe).fit.req_gb??0).toFixed(1),()=>Math.round(t(pe).fit.tps??0),()=>b(t(pe).fit.level)]),p(kt,dt)};O(Gt,kt=>{t(pe)&&kt(Bt)})}var Gn=i(Gt,2);{var Yn=kt=>{const dt=q(()=>t(ue).files.find(Wt=>Wt.fit.level!=="too_tight"&&Wt.filename!==t(Ae)));var gt=Ua(),Rt=tt(gt);{var ft=Wt=>{var In=wc(),ki=i(r(In)),Wi=r(ki);z(ji=>h(Wi,`${t(dt).filename??""} (${ji??""})`),[()=>T(t(dt).fit.level)]),S("click",ki,ji=>{ji.preventDefault(),u(Ae,t(dt).filename,!0),V()}),p(Wt,In)},mt=Wt=>{var In=Sc();p(Wt,In)};O(Rt,Wt=>{t(dt)?Wt(ft):Wt(mt,-1)})}p(kt,gt)};O(Gn,kt=>{var dt,gt;((dt=t(pe))==null?void 0:dt.fit.level)==="too_tight"&&((gt=t(ue))!=null&>.files)&&kt(Yn)})}var Dn=i(Gn,2),Ca=r(Dn);z(()=>{var kt,dt;Et(Dn,1,`primary${((kt=t(pe))==null?void 0:kt.fit.level)==="too_tight"?" warn":""}`),Dn.disabled=t(ve),h(Ca,t(ve)?"Starte…":((dt=t(pe))==null?void 0:dt.fit.level)==="too_tight"?"Trotzdem holen (zu groß — nicht empfohlen)":"Herunterladen & Einpflegen")}),S("change",Nt,V),Jn(Nt,()=>t(Ae),kt=>u(Ae,kt)),dn(st,()=>t(He),kt=>u(He,kt)),dn(Ge,()=>t(N),kt=>u(N,kt)),S("click",Dn,$),p(ot,xt)},rt=ot=>{var xt=Ec();p(ot,xt)};O(We,ot=>{var xt,Nt;t(ve)&&!t(ue)?ot(at):(Nt=(xt=t(ue))==null?void 0:xt.files)!=null&&Nt.length?ot(St,1):t(ve)||ot(rt,2)})}z(()=>{h(ht,t(ut)),h($e,t(I))}),S("click",w,ot=>{ot.target.classList.contains("modal-overlay")&&u(Ze,!1)}),S("click",ae,()=>u(Ze,!1)),p(k,w)};O(zt,k=>{t(Ze)&&k(Ot)})}var gn=i(zt,2);{var da=k=>{var w=Tc(),re=r(w),ae=r(re),Le=i(ae,2),ht=r(Le),yt=i(Le,6),$e=i(yt,4),We=i($e,4);Je(We,17,()=>t(it),Xe,(ot,xt,Nt)=>{var rn=Cc(),Mt=r(rn),st=i(Mt,2),qt=i(st,2);Je(qt,20,()=>["Q4_K_M","Q5_K_M","Q6_K","Q8_0","Q3_K_M"],Xe,($t,Ge)=>{var pt=Yr(),Zt=r(pt),Gt={};z(()=>{h(Zt,Ge),Gt!==(Gt=Ge)&&(pt.__value=Ge)}),p($t,pt)});var Qt=i(qt,2);dn(Mt,()=>t(xt).repo,$t=>t(xt).repo=$t),dn(st,()=>t(xt).role,$t=>t(xt).role=$t),Jn(qt,()=>t(xt).quant,$t=>t(xt).quant=$t),S("click",Qt,()=>u(it,t(it).filter(($t,Ge)=>Ge!==Nt),!0)),p(ot,rn)});var at=i(We,2),St=i(at,4),rt=r(St);z(()=>{h(ht,t(et)?"Setup bearbeiten":"Eigenes Setup erstellen"),h(rt,t(et)?"Änderungen speichern":"Setup speichern")}),S("click",w,ot=>{ot.target.classList.contains("modal-overlay")&&u(je,!1)}),S("click",ae,()=>u(je,!1)),dn(yt,()=>t(Ve),ot=>u(Ve,ot)),dn($e,()=>t(nt),ot=>u(nt,ot)),S("click",at,()=>u(it,[...t(it),{repo:"",role:"",quant:"Q4_K_M"}],!0)),S("click",St,ke),p(k,w)};O(gn,k=>{t(je)&&k(da)})}z(()=>{ze.disabled=t(K),h(x,t(K)?"Suche…":"Aktualisieren"),F.disabled=t(Re),h(ne,t(Re)?"Lade…":"Suchen")}),S("click",Se,E),S("click",ze,()=>Ct(!0)),S("keydown",Fe,k=>k.key==="Enter"&&Pt()),dn(Fe,()=>t(Ee),k=>u(Ee,k)),Jn(De,()=>t(X),k=>u(X,k)),S("click",F,Pt),p(e,se),Pn()}qn(["click","keydown","change"]);var Pc=g(` Du öffnest Mission Control über einen Proxy/Namen. Die Engine läuft auf Port 8080 ohne HTTPS direkt am Bosgame. Trag in deinen Tools die LAN-IP ein:`),Dc=g(' '),Ic=g('http://192.168.178.151:8080/v1— nicht den Proxy-Namen.'),Lc=g(' '),Oc=g(''),Xr=g(''),Bc=g('Jan AI ist eine Desktop-App — kein Browser, kein Server, kein Admin-Panel. Einfach installieren und loslegen.
Jan AI öffnen → linke Leiste → Remote-Modelle → + Modell hinzufügen:
API-Key: ein beliebiger Wert (z.B.local). Jan AI fragt danach beim Einrichten.Jan AI herunterladen: jan.ai — kostenlos, open source, Windows/macOS/Linux.',1),Rc=g('Datei anlegen oder öffnen:
~/.continue/config.jsonFalls bereits eineconfig.jsonvorhanden: nur den"models"-Eintrag ergänzen, nicht die ganze Datei ersetzen.Danach Continue in VS Code neu starten → im Chat-Panel das Modell wählen.
Continue: continue.dev — kostenlose VS Code / JetBrains Extension. Hinweis: 2026 von Cursor akquiriert — aktuell weiter aktiv und kostenlos.',1),Fc=g('Antigravity (Googles agentic IDE, VS Code-basiert) unterstützt OpenAI-kompatible Endpoints direkt:
Settings → Models → Custom Endpoint → + hinzufügen:
API-Key: ein beliebiger Wert (z.B.local). Danach das Modell in der Model-Liste auswählen.Antigravity herunterladen: antigravityide.net — kostenlose Einzelperson-Tier, VS Code-basiert.',1),Kc=g('Öffne die Zed-Settings mit
Cmd/Strg + ,und füge diesen Block in deine bestehendesettings.jsonein. Falls bereits ein"bosgame"-Eintrag existiert: vorher löschen.Nur diesen Block einfügen, nicht die ganze Datei ersetzen — sonst gehen andere Einstellungen verloren.API-Key: Öffne den Agent-Panel → Anbieter bosgame → trag irgendeinen Wert ein (z.B.
local).Danach im Agent-Panel das Modell auswählen.Zed herunterladen: zed.dev — kostenlos, native Performance, Windows/macOS/Linux.',1),Nc=g('Datei anlegen oder öffnen (OpenCode Desktop nutzt .jsonc — JSON mit Kommentaren):
Windows:
%USERPROFILE%\\.config\\opencode\\opencode.jsoncDen"providers"-Block in die bestehendeopencode.jsonceinfügen (nicht die ganze Datei ersetzen). Falls bereits ein"llama-swap"-Eintrag existiert: vorher löschen.Danach in OpenCode
/models→ wählen.OpenCode Desktop: opencode.ai',1),qc=g('In Cline/Cursor den Provider „OpenAI Compatible" wählen:
API-Key: ein beliebiger Wert (z.B.local).Cline für VS Code: VS Code Marketplace · für JetBrains: JetBrains Marketplace',1),Gc=g('Settings → Admin Panel → Connections → neue OpenAI-Verbindung:
',1),Vc=g(''),Wc=g('Bilder einbinden (Vision)
Mit Vision-Modellen kannst du Screenshots oder Fehlerbilder direkt mitschicken.2 · Modelle auswählen
Wähle, welche Modelle im Config-Snippet erscheinen sollen.3 · Tool wählen
Für welches Werkzeug brauchst du die Konfiguration?ChatCoding-Assistenten',1),jc=g('4 · Config-Snippet
'),Uc=g(''),Hc=g('2 · Erst ein Modell installieren
Noch kein Modell eingerichtetBevor du ein Tool verbinden kannst, braucht die Engine mindestens ein Modell. Das Config-Snippet wird dann automatisch mit deinen echten Modellnamen befüllt.In Cline: MCP-Einstellungen öffnen (Stecker-Icon in der Cline-Sidebar) → „Add MCP Server" → diesen Block einfügen.
In Claude Code: Block in
~/.claude/settings.jsonunter"mcpServers"einfügen.Einmalig auf dem Windows-PC:',1),Jc=g('pip install mcp httpxausführen — danachmcp_memory.pyaus dem Repo-Ordner erreichbar machen (Pfad im Snippet anpassen).Block in
~/.config/opencode/opencode.jsonunter"mcpServers"einfügen.Einmalig:',1),Qc=g('pip install mcp httpx— und Pfad zumcp_memory.pyim Snippet anpassen.Block in die MCP-Config des jeweiligen Tools einfügen. Der Bosgame-Pfad
'),Zc=g(`/opt/mission-control/mcp_memory.pyist bereits korrekt — kein weiteres Setup nötig.Verbinden
Schritt für Schritt: KI-Modelle in deine Tools einbinden — getestet, erklärt, mit Copy-Paste-Config.1 · Verbindung prüfen
Stelle sicher, dass die LLM-Engine erreichbar ist, bevor du Tools konfigurierst.Wie funktioniert das Auto-Swap?
`,1);function Yc(e,n){$n(n,!0);const a=q(()=>xi.value),s=q(()=>{var C;return(((C=t(a))==null?void 0:C.models)||[]).filter(B=>!B.incomplete)});let l=I("zed"),o=I(jt([])),d=I(""),c=I(!1),v=I("cline"),f=I(jt(localStorage.getItem("mc_ip_override")||""));function b(C){return/^\d{1,3}(\.\d{1,3}){3}$/.test(C)}function T(){return location.protocol==="https:"||!b(location.hostname)}function _(){return`http://${t(f).trim()||location.hostname}:8080/v1`}const y=q(_);function P(){const C=t(f).trim();C?localStorage.setItem("mc_ip_override",C):localStorage.removeItem("mc_ip_override")}const O=q(()=>Be(t(v))),M=q(()=>t(o).length?t(o):t(s).map(C=>C.name)),K=q(()=>t(M)[0]||"coder"),Oe=q(()=>{var C;return(C=t(s).find(B=>{var se,ie;return(ie=(se=B.meta)==null?void 0:se.caps)==null?void 0:ie.includes("Bild")}))==null?void 0:C.name});function Ee(C,B){const ie=(B.length?t(s).filter(ee=>B.includes(ee.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ee=>{var A,j;const Se=(((A=ee.meta)==null?void 0:A.caps)||[]).some(oe=>/Bild|Vision/i.test(oe)),de=((j=ee.meta)==null?void 0:j.ctx)||131072;return` { "name": "${ee.name}", "display_name": "${ee.name}", "max_tokens": ${de}${Se?', "capabilities": { "tools": true, "images": true }':""} }`}).join(`, + über Sessions hinweg merken — geteilt über alle Tools, verwaltet im Gedächtnis-Tab.Gedächtnis-MCP
Neu in v7Damit Cline, OpenCode und Claude Code sich Projektfakten, Entscheidungen und Präferenzen - über Sessions hinweg merken — geteilt über alle Tools, verwaltet im Gedächtnis-Tab.`,1);function Yc(e,n){$n(n,!0);const a=q(()=>xi.value),s=q(()=>{var C;return(((C=t(a))==null?void 0:C.models)||[]).filter(R=>!R.incomplete)});let l=L("zed"),o=L(jt([])),d=L(""),c=L(!1),v=L("cline"),f=L(jt(localStorage.getItem("mc_ip_override")||""));function b(C){return/^\d{1,3}(\.\d{1,3}){3}$/.test(C)}function T(){return location.protocol==="https:"||!b(location.hostname)}function _(){return`http://${t(f).trim()||location.hostname}:8080/v1`}const y=q(_);function D(){const C=t(f).trim();C?localStorage.setItem("mc_ip_override",C):localStorage.removeItem("mc_ip_override")}const B=q(()=>Be(t(v))),M=q(()=>t(o).length?t(o):t(s).map(C=>C.name)),K=q(()=>t(M)[0]||"coder"),Oe=q(()=>{var C;return(C=t(s).find(R=>{var se,ie;return(ie=(se=R.meta)==null?void 0:se.caps)==null?void 0:ie.includes("Bild")}))==null?void 0:C.name});function Ee(C,R){const ie=(R.length?t(s).filter(ee=>R.includes(ee.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ee=>{var A,U;const Se=(((A=ee.meta)==null?void 0:A.caps)||[]).some(oe=>/Bild|Vision/i.test(oe)),de=((U=ee.meta)==null?void 0:U.ctx)||131072;return` { "name": "${ee.name}", "display_name": "${ee.name}", "max_tokens": ${de}${Se?', "capabilities": { "tools": true, "images": true }':""} }`}).join(`, `);return`"language_models": { "openai_compatible": { "bosgame": { @@ -30,7 +30,7 @@ ${ie} ] } } -}`}function Ce(C,B){const ie=(B.length?t(s).filter(ee=>B.includes(ee.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ee=>{var de;const Se=((de=ee.meta)==null?void 0:de.ctx)||131072;return` "${ee.name}": { "name": "${ee.name}", "contextWindowSize": ${Se} }`}).join(`, +}`}function Ce(C,R){const ie=(R.length?t(s).filter(ee=>R.includes(ee.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ee=>{var de;const Se=((de=ee.meta)==null?void 0:de.ctx)||131072;return` "${ee.name}": { "name": "${ee.name}", "contextWindowSize": ${Se} }`}).join(`, `);return`"providers": { "llama-swap": { "npm": "@ai-sdk/openai-compatible", @@ -43,9 +43,9 @@ ${ie} ${ie} } } -}`}function Re(C,B){return`{ +}`}function Re(C,R){return`{ "models": [ -${(B.length?t(s).filter(ee=>B.includes(ee.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ee=>` { +${(R.length?t(s).filter(ee=>R.includes(ee.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ee=>` { "title": "llama-swap / ${ee.name}", "provider": "openai", "model": "${ee.name}", @@ -54,7 +54,7 @@ ${(B.length?t(s).filter(ee=>B.includes(ee.name)):t(s).length?t(s):[{name:"coder" }`).join(`, `)} ] -}`}async function te(){u(d,"Teste…");try{const C=await we("/api/integration/test");u(c,C.ok,!0),u(d,C.ok?`✓ Verbunden — ${C.models.length} Modell(e): ${C.models.join(", ")}`:`✗ Keine Verbindung: ${C.error}`,!0)}catch(C){u(c,!1),u(d,"✗ "+C.message)}}function X(C){var se;const B=C.querySelector("code");B&&((se=navigator.clipboard)==null||se.writeText(B.textContent||""))}function be(C){var B;(B=navigator.clipboard)==null||B.writeText(C.value)}function Be(C){return`{ +}`}async function te(){u(d,"Teste…");try{const C=await we("/api/integration/test");u(c,C.ok,!0),u(d,C.ok?`✓ Verbunden — ${C.models.length} Modell(e): ${C.models.join(", ")}`:`✗ Keine Verbindung: ${C.error}`,!0)}catch(C){u(c,!1),u(d,"✗ "+C.message)}}function X(C){var se;const R=C.querySelector("code");R&&((se=navigator.clipboard)==null||se.writeText(R.textContent||""))}function be(C){var R;(R=navigator.clipboard)==null||R.writeText(C.value)}function Be(C){return`{ "mcpServers": { "mission-control-memory": { "command": "${C==="bosgame"?"/opt/mission-control/.venv/bin/python":"python"}", @@ -64,12 +64,12 @@ ${(B.length?t(s).filter(ee=>B.includes(ee.name)):t(s).length?t(s):[{name:"coder" } } } -}`}var Ne=Zc(),Ze=i(tt(Ne),2),ut=i(r(Ze),6),D=r(ut),ue=i(D,2),Ae=i(ut,2),He=r(Ae),N=i(Ae,2);{var ve=C=>{var B=Pc();p(C,B)},pe=q(()=>T());L(N,C=>{t(pe)&&C(ve)})}var je=i(N,2),Ve=r(je),nt=i(Ve,2);{var it=C=>{var B=Dc(),se=r(B);z(()=>{At(B,`color:${t(c)?"#7ee29a":"#ff9b95"}`),h(se,t(d))}),p(C,B)};L(nt,C=>{t(d)&&C(it)})}var et=i(Ze,2),bt=i(r(et),2);Je(bt,20,()=>[["⚡","Kein manuelles Starten nötig",'Wenn du in Zed oder OpenCode „coder" auswählst und eine Anfrage sendest, lädt llama-swap das Modell automatisch — in ca. 2–5 Sekunden.'],["🔄","Modelle wechseln sich automatisch ab","Rufst du ein anderes Modell auf, entlädt llama-swap das aktuelle (nach TTL-Ablauf) und lädt das neue. Es läuft immer nur eines gleichzeitig."],["🧠","Zwei Modelle gleichzeitig aktiv halten","Du hast 124 GB RAM — genug für z.B. Scout 8B (~5 GB) dauerhaft geladen + ein größeres Modell das swappt. Dafür beim Scout im Modelle-Tab → Konfigurieren die TTL auf 99999 setzen."]],Xe,(C,B)=>{var se=q(()=>Hn(B,3));let ie=()=>t(se)[0],ee=()=>t(se)[1],Se=()=>t(se)[2];var de=Ic(),A=r(de),j=r(A),oe=i(A,2),Me=r(oe),U=r(Me),le=i(Me,2),Te=r(le);z(()=>{h(j,ie()),h(U,ee()),h(Te,Se())}),p(C,de)});var wt=i(et,2);{var Ct=C=>{var B=Wc(),se=tt(B),ie=r(se),ee=i(r(ie),2),Se=r(ee),de=i(ie,4);Je(de,21,()=>t(s),Xe,(W,J)=>{const Q=q(()=>t(o).includes(t(J).name));var R=Lc(),ne=r(R);z(()=>{At(R,`cursor:pointer;${t(Q)?"background:rgba(45,212,191,.2);border-color:var(--accent);color:var(--accent)":""}`),h(ne,t(J).name)}),S("click",R,()=>u(o,t(Q)?t(o).filter(_e=>_e!==t(J).name):[...t(o),t(J).name],!0)),S("keydown",R,_e=>_e.key==="Enter"&&u(o,t(Q)?t(o).filter(ge=>ge!==t(J).name):[...t(o),t(J).name],!0)),p(W,R)});var A=i(de,2);{var j=W=>{var J=Oc(),Q=r(J);S("click",Q,R=>{R.preventDefault(),u(o,[],!0)}),p(W,J)};L(A,W=>{t(o).length&&W(j)})}var oe=i(se,2),Me=i(r(oe),6);Je(Me,20,()=>[["janai","Jan AI","Einfachstes Chat-Interface — Desktop-App, kein Setup"],["openwebui","OpenWebUI","Browser-Chat für Teams — mehr Features, mehr Setup"]],Xe,(W,J)=>{var Q=q(()=>Hn(J,3));let R=()=>t(Q)[0],ne=()=>t(Q)[1],_e=()=>t(Q)[2];var ge=Xr(),fe=r(ge),me=r(fe),_t=i(fe,2),zt=r(_t);z(()=>{Et(ge,1,`card-btn${t(l)===R()?" cb-best":""}`),h(me,ne()),h(zt,_e())}),S("click",ge,()=>u(l,R(),!0)),p(W,ge)});var U=i(Me,4);Je(U,20,()=>[["continue","Continue","VS Code/JetBrains — Hilfe ohne Agent-Overhead"],["cline","Cline","VS Code/JetBrains/Zed — voller Coding-Agent"],["antigravity","Antigravity","Googles agentic IDE — VS Code-basiert"],["opencode","OpenCode","Terminal-Agent — autonom, mächtig"],["zed","Zed","Schneller nativer Editor mit KI-Panel"]],Xe,(W,J)=>{var Q=q(()=>Hn(J,3));let R=()=>t(Q)[0],ne=()=>t(Q)[1],_e=()=>t(Q)[2];var ge=Xr(),fe=r(ge),me=r(fe),_t=i(fe,2),zt=r(_t);z(()=>{Et(ge,1,`card-btn${t(l)===R()?" cb-best":""}`),h(me,ne()),h(zt,_e())}),S("click",ge,()=>u(l,R(),!0)),p(W,ge)});var le=i(oe,2),Te=i(r(le),2);{var ze=W=>{var J=Bc(),Q=i(tt(J),6),R=r(Q),ne=i(R,2),_e=i(Q,4),ge=r(_e),fe=i(ge,2);z(()=>{ea(R,t(y)),ea(ge,t(K))}),S("click",ne,me=>be(me.currentTarget.previousElementSibling)),S("click",fe,me=>be(me.currentTarget.previousElementSibling)),p(W,J)},x=W=>{const J=q(()=>Re(t(y),t(M)));var Q=Rc(),R=i(tt(Q),4),ne=r(R),_e=i(ne,2),ge=r(_e),fe=r(ge),me=i(R,2),_t=i(r(me)),zt=r(_t);z(()=>{h(fe,t(J)),h(zt,`llama-swap / ${t(K)??""}`)}),S("click",ne,Ot=>X(Ot.currentTarget.parentElement)),p(W,Q)},H=W=>{var J=Fc(),Q=i(tt(J),6),R=r(Q),ne=i(R,2),_e=i(Q,4),ge=r(_e),fe=i(ge,2),me=i(_e,2),_t=i(r(me),3),zt=r(_t);z(()=>{ea(R,t(y)),ea(ge,t(K)),h(zt,t(K))}),S("click",ne,Ot=>be(Ot.currentTarget.previousElementSibling)),S("click",fe,Ot=>be(Ot.currentTarget.previousElementSibling)),p(W,J)},he=W=>{const J=q(()=>Ee(t(y),t(M)));var Q=Kc(),R=i(tt(Q),4),ne=r(R),_e=i(ne,2),ge=r(_e),fe=r(ge),me=i(R,4),_t=i(r(me)),zt=r(_t);z(()=>{h(fe,t(J)),h(zt,`bosgame / ${t(K)??""}`)}),S("click",ne,Ot=>X(Ot.currentTarget.parentElement)),p(W,Q)},V=W=>{const J=q(()=>Ce(t(y),t(M)));var Q=Nc(),R=i(tt(Q),6),ne=r(R),_e=i(ne,2),ge=r(_e),fe=r(ge),me=i(R,2),_t=i(r(me),3),zt=r(_t);z(()=>{h(fe,t(J)),h(zt,`llama-swap/${t(K)??""}`)}),S("click",ne,Ot=>X(Ot.currentTarget.parentElement)),p(W,Q)},xe=W=>{var J=qc(),Q=i(tt(J),4),R=r(Q),ne=i(R,2),_e=i(Q,4),ge=r(_e),fe=i(ge,2);z(()=>{ea(R,t(y)),ea(ge,t(K))}),S("click",ne,me=>be(me.currentTarget.previousElementSibling)),S("click",fe,me=>be(me.currentTarget.previousElementSibling)),p(W,J)},Ie=W=>{var J=Gc(),Q=i(tt(J),4),R=r(Q),ne=i(R,2),_e=i(Q,4),ge=r(_e),fe=i(ge,2);z(()=>ea(R,t(y))),S("click",ne,me=>be(me.currentTarget.previousElementSibling)),S("click",fe,me=>be(me.currentTarget.previousElementSibling)),p(W,J)};L(Te,W=>{t(l)==="janai"?W(ze):t(l)==="continue"?W(x,1):t(l)==="antigravity"?W(H,2):t(l)==="zed"?W(he,3):t(l)==="opencode"?W(V,4):t(l)==="cline"?W(xe,5):t(l)==="openwebui"&&W(Ie,6)})}var Fe=i(le,2);{var De=W=>{const J=q(()=>`curl ${t(y)}/chat/completions \\ +}`}var Ne=Zc(),Ze=i(tt(Ne),2),ut=i(r(Ze),6),I=r(ut),ue=i(I,2),Ae=i(ut,2),He=r(Ae),N=i(Ae,2);{var ve=C=>{var R=Pc();p(C,R)},pe=q(()=>T());O(N,C=>{t(pe)&&C(ve)})}var je=i(N,2),Ve=r(je),nt=i(Ve,2);{var it=C=>{var R=Dc(),se=r(R);z(()=>{At(R,`color:${t(c)?"#7ee29a":"#ff9b95"}`),h(se,t(d))}),p(C,R)};O(nt,C=>{t(d)&&C(it)})}var et=i(Ze,2),bt=i(r(et),2);Je(bt,20,()=>[["⚡","Kein manuelles Starten nötig",'Wenn du in Zed oder OpenCode „coder" auswählst und eine Anfrage sendest, lädt llama-swap das Modell automatisch — in ca. 2–5 Sekunden.'],["🔄","Modelle wechseln sich automatisch ab","Rufst du ein anderes Modell auf, entlädt llama-swap das aktuelle (nach TTL-Ablauf) und lädt das neue. Es läuft immer nur eines gleichzeitig."],["🧠","Zwei Modelle gleichzeitig aktiv halten","Du hast 124 GB RAM — genug für z.B. Scout 8B (~5 GB) dauerhaft geladen + ein größeres Modell das swappt. Dafür beim Scout im Modelle-Tab → Konfigurieren die TTL auf 99999 setzen."]],Xe,(C,R)=>{var se=q(()=>Hn(R,3));let ie=()=>t(se)[0],ee=()=>t(se)[1],Se=()=>t(se)[2];var de=Ic(),A=r(de),U=r(A),oe=i(A,2),Me=r(oe),H=r(Me),le=i(Me,2),Te=r(le);z(()=>{h(U,ie()),h(H,ee()),h(Te,Se())}),p(C,de)});var wt=i(et,2);{var Ct=C=>{var R=Wc(),se=tt(R),ie=r(se),ee=i(r(ie),2),Se=r(ee),de=i(ie,4);Je(de,21,()=>t(s),Xe,(j,Q)=>{const Z=q(()=>t(o).includes(t(Q).name));var F=Lc(),ne=r(F);z(()=>{At(F,`cursor:pointer;${t(Z)?"background:rgba(45,212,191,.2);border-color:var(--accent);color:var(--accent)":""}`),h(ne,t(Q).name)}),S("click",F,()=>u(o,t(Z)?t(o).filter(_e=>_e!==t(Q).name):[...t(o),t(Q).name],!0)),S("keydown",F,_e=>_e.key==="Enter"&&u(o,t(Z)?t(o).filter(ge=>ge!==t(Q).name):[...t(o),t(Q).name],!0)),p(j,F)});var A=i(de,2);{var U=j=>{var Q=Oc(),Z=r(Q);S("click",Z,F=>{F.preventDefault(),u(o,[],!0)}),p(j,Q)};O(A,j=>{t(o).length&&j(U)})}var oe=i(se,2),Me=i(r(oe),6);Je(Me,20,()=>[["janai","Jan AI","Einfachstes Chat-Interface — Desktop-App, kein Setup"],["openwebui","OpenWebUI","Browser-Chat für Teams — mehr Features, mehr Setup"]],Xe,(j,Q)=>{var Z=q(()=>Hn(Q,3));let F=()=>t(Z)[0],ne=()=>t(Z)[1],_e=()=>t(Z)[2];var ge=Xr(),fe=r(ge),me=r(fe),_t=i(fe,2),zt=r(_t);z(()=>{Et(ge,1,`card-btn${t(l)===F()?" cb-best":""}`),h(me,ne()),h(zt,_e())}),S("click",ge,()=>u(l,F(),!0)),p(j,ge)});var H=i(Me,4);Je(H,20,()=>[["continue","Continue","VS Code/JetBrains — Hilfe ohne Agent-Overhead"],["cline","Cline","VS Code/JetBrains/Zed — voller Coding-Agent"],["antigravity","Antigravity","Googles agentic IDE — VS Code-basiert"],["opencode","OpenCode","Terminal-Agent — autonom, mächtig"],["zed","Zed","Schneller nativer Editor mit KI-Panel"]],Xe,(j,Q)=>{var Z=q(()=>Hn(Q,3));let F=()=>t(Z)[0],ne=()=>t(Z)[1],_e=()=>t(Z)[2];var ge=Xr(),fe=r(ge),me=r(fe),_t=i(fe,2),zt=r(_t);z(()=>{Et(ge,1,`card-btn${t(l)===F()?" cb-best":""}`),h(me,ne()),h(zt,_e())}),S("click",ge,()=>u(l,F(),!0)),p(j,ge)});var le=i(oe,2),Te=i(r(le),2);{var ze=j=>{var Q=Bc(),Z=i(tt(Q),6),F=r(Z),ne=i(F,2),_e=i(Z,4),ge=r(_e),fe=i(ge,2);z(()=>{ea(F,t(y)),ea(ge,t(K))}),S("click",ne,me=>be(me.currentTarget.previousElementSibling)),S("click",fe,me=>be(me.currentTarget.previousElementSibling)),p(j,Q)},x=j=>{const Q=q(()=>Re(t(y),t(M)));var Z=Rc(),F=i(tt(Z),4),ne=r(F),_e=i(ne,2),ge=r(_e),fe=r(ge),me=i(F,2),_t=i(r(me)),zt=r(_t);z(()=>{h(fe,t(Q)),h(zt,`llama-swap / ${t(K)??""}`)}),S("click",ne,Ot=>X(Ot.currentTarget.parentElement)),p(j,Z)},J=j=>{var Q=Fc(),Z=i(tt(Q),6),F=r(Z),ne=i(F,2),_e=i(Z,4),ge=r(_e),fe=i(ge,2),me=i(_e,2),_t=i(r(me),3),zt=r(_t);z(()=>{ea(F,t(y)),ea(ge,t(K)),h(zt,t(K))}),S("click",ne,Ot=>be(Ot.currentTarget.previousElementSibling)),S("click",fe,Ot=>be(Ot.currentTarget.previousElementSibling)),p(j,Q)},he=j=>{const Q=q(()=>Ee(t(y),t(M)));var Z=Kc(),F=i(tt(Z),4),ne=r(F),_e=i(ne,2),ge=r(_e),fe=r(ge),me=i(F,4),_t=i(r(me)),zt=r(_t);z(()=>{h(fe,t(Q)),h(zt,`bosgame / ${t(K)??""}`)}),S("click",ne,Ot=>X(Ot.currentTarget.parentElement)),p(j,Z)},W=j=>{const Q=q(()=>Ce(t(y),t(M)));var Z=Nc(),F=i(tt(Z),6),ne=r(F),_e=i(ne,2),ge=r(_e),fe=r(ge),me=i(F,2),_t=i(r(me),3),zt=r(_t);z(()=>{h(fe,t(Q)),h(zt,`llama-swap/${t(K)??""}`)}),S("click",ne,Ot=>X(Ot.currentTarget.parentElement)),p(j,Z)},xe=j=>{var Q=qc(),Z=i(tt(Q),4),F=r(Z),ne=i(F,2),_e=i(Z,4),ge=r(_e),fe=i(ge,2);z(()=>{ea(F,t(y)),ea(ge,t(K))}),S("click",ne,me=>be(me.currentTarget.previousElementSibling)),S("click",fe,me=>be(me.currentTarget.previousElementSibling)),p(j,Q)},Ie=j=>{var Q=Gc(),Z=i(tt(Q),4),F=r(Z),ne=i(F,2),_e=i(Z,4),ge=r(_e),fe=i(ge,2);z(()=>ea(F,t(y))),S("click",ne,me=>be(me.currentTarget.previousElementSibling)),S("click",fe,me=>be(me.currentTarget.previousElementSibling)),p(j,Q)};O(Te,j=>{t(l)==="janai"?j(ze):t(l)==="continue"?j(x,1):t(l)==="antigravity"?j(J,2):t(l)==="zed"?j(he,3):t(l)==="opencode"?j(W,4):t(l)==="cline"?j(xe,5):t(l)==="openwebui"&&j(Ie,6)})}var Fe=i(le,2);{var De=j=>{const Q=q(()=>`curl ${t(y)}/chat/completions \\ -H "Content-Type: application/json" \\ -d '{ "model": "${t(Oe)}", "messages": [{"role":"user","content":[{"type":"text","text":"Was ist auf dem Bild falsch?"},{"type":"image_url","image_url":{"url":"data:image/png;base64,"}}]}] -}'`);var Q=Vc(),R=r(Q),ne=i(r(R),2),_e=r(ne);Ye(_e,()=>Ut("check"));var ge=i(_e),fe=i(R,4),me=r(fe),_t=i(me,2),zt=r(_t),Ot=r(zt);z(()=>{h(ge,` „${t(Oe)??""}" bereit`),h(Ot,t(J))}),S("click",me,gn=>X(gn.currentTarget.parentElement)),p(W,Q)};L(Fe,W=>{t(Oe)&&W(De)})}z(()=>h(Se,t(o).length?`${t(o).length} von ${t(s).length} ausgewählt`:"alle werden eingeschlossen")),p(C,B)},Kt=C=>{var B=jc(),se=i(r(B),2),ie=i(r(se),4);S("click",ie,()=>{var ee;return(ee=document.querySelector(".nav-item[data-view='cookbook']"))==null?void 0:ee.dispatchEvent(new MouseEvent("click"))}),p(C,B)};L(wt,C=>{t(s).length?C(Ct):C(Kt,-1)})}var Pt=i(wt,2),Dt=i(r(Pt),2),Lt=i(r(Dt)),It=i(Dt,2);Je(It,20,()=>[["cline","Cline / Claude Code","Windows — Tools auf dem Entwicklungs-PC"],["opencode","OpenCode","Windows — Terminal-Agent"],["bosgame","Direkt am Bosgame","Wenn das Tool am Server läuft"]],Xe,(C,B)=>{var se=q(()=>Hn(B,3));let ie=()=>t(se)[0],ee=()=>t(se)[1],Se=()=>t(se)[2];var de=Uc(),A=r(de),j=r(A),oe=i(A,2),Me=r(oe);z(()=>{Et(de,1,`card-btn${t(v)===ie()?" cb-best":""}`),h(j,ee()),h(Me,Se())}),S("click",de,()=>u(v,ie(),!0)),p(C,de)});var Tt=i(It,2),F=r(Tt),Y=i(F,2),$=r(Y),G=r($),E=i(Tt,2);{var Z=C=>{var B=Hc();p(C,B)},ke=C=>{var B=Jc();p(C,B)},Pe=C=>{var B=Qc();p(C,B)};L(E,C=>{t(v)==="cline"?C(Z):t(v)==="opencode"?C(ke,1):C(Pe,-1)})}z(()=>{ea(D,t(y)),h(G,t(O))}),S("click",ue,C=>{const B=C.currentTarget.previousElementSibling;be(B)}),S("input",He,P),dn(He,()=>t(f),C=>u(f,C)),S("click",Ve,te),S("click",Lt,C=>{var B;C.preventDefault(),(B=document.querySelector(".nav-item[data-view='memory']"))==null||B.click()}),S("click",F,C=>X(C.currentTarget.parentElement)),p(e,Ne),Pn()}qn(["click","input","keydown"]);var Xc=g(' '),ev=g(''),tv=g('Für dich: Upgrades
Neuere Modelle, die ein installiertes ersetzen können.Lade News… (erstes Laden kann kurz dauern)'),nv=g(''),av=g(''),iv=g('für dich'),rv=g('Keine News geladenDie Quellen sind gerade nicht erreichbar — später nochmal probieren.'),sv=g(''),lv=g('',1);function ov(e,n){$n(n,!0);let a=I(jt([])),s=I(jt([])),l=I(!0),o=I("");const d=te=>te==="perfect"?"ok":te==="marginal"?"warn":"bad";function c(te){const X=Math.max(0,Date.now()/1e3-te);return X<60?X+"s":X<3600?Math.floor(X/60)+"m":X<86400?Math.floor(X/3600)+"h":Math.floor(X/86400)+"d"}async function v(){u(l,!0),u(o,"");try{u(a,(await we("/api/news")).items||[],!0)}catch(te){u(o,te.message||"Fehler beim Laden",!0)}finally{u(l,!1)}}async function f(){try{u(s,(await we("/api/cookbook/upgrades")).upgrades||[],!0)}catch{u(s,[],!0)}}async function b(te,X){var be;X.disabled=!0,X.textContent="Starte…";try{await we("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:te.repo,role:te.role,params_b:te.params_b,quant:te.quant,hf_token:di()})}),(be=document.querySelector(".nav-item[data-view='activity']"))==null||be.dispatchEvent(new MouseEvent("click"))}catch(Be){X.disabled=!1,X.textContent="Installieren",alert("Fehler: "+Be.message)}}function T(){v(),f()}yi(()=>{v(),f()});var _=lv(),y=tt(_),P=i(r(y),2),O=i(y,2);{var M=te=>{var X=ev(),be=r(X),Be=i(r(be),2),Ne=r(Be),Ze=i(be,4);Je(Ze,21,()=>t(s),Xe,(ut,D)=>{var ue=Xc(),Ae=r(ue),He=r(Ae),N=r(He),ve=r(N),pe=i(N,2),je=r(pe),Ve=i(He,2),nt=r(Ve),it=i(Ae,2);z(et=>{h(ve,t(D).name),Et(pe,1,`fit-badge ${et??""}`),h(je,t(D).fit.text),h(nt,`Ersetzt dein „${t(D).old??""}". ${t(D).why??""}`)},[()=>d(t(D).fit.level)]),S("click",it,et=>b(t(D),et.currentTarget)),p(ut,ue)}),z(()=>h(Ne,t(s).length)),p(te,X)};L(O,te=>{t(s).length&&te(M)})}var K=i(O,2);{var Oe=te=>{var X=tv();p(te,X)},Ee=te=>{var X=nv(),be=r(X);z(()=>h(be,t(o))),p(te,X)},Ce=te=>{var X=av();p(te,X)},Re=te=>{var X=sv();Je(X,21,()=>t(a),Xe,(be,Be,Ne)=>{var Ze=rv();Et(Ze,1,`news-card${Ne===0?" featured":""}`);var ut=r(Ze),D=r(ut),ue=r(D),Ae=i(D,2);{var He=Ve=>{var nt=iv();p(Ve,nt)};L(Ae,Ve=>{t(Be).relevant&&Ve(He)})}var N=i(Ae,2),ve=r(N),pe=i(ut,2),je=r(pe);z(Ve=>{Aa(Ze,"href",t(Be).link),h(ue,t(Be).source),h(ve,Ve),h(je,t(Be).title)},[()=>t(Be).ts?c(t(Be).ts):""]),p(be,Ze)}),p(te,X)};L(K,te=>{t(l)?te(Oe):t(o)?te(Ee,1):t(a).length?te(Re,-1):te(Ce,2)})}S("click",P,T),p(e,_),Pn()}qn(["click"]);const es=[{label:"Einstieg",tutorials:[["Dein erster Workflow — in 3 Schritten",` +}'`);var Z=Vc(),F=r(Z),ne=i(r(F),2),_e=r(ne);Ye(_e,()=>Ut("check"));var ge=i(_e),fe=i(F,4),me=r(fe),_t=i(me,2),zt=r(_t),Ot=r(zt);z(()=>{h(ge,` „${t(Oe)??""}" bereit`),h(Ot,t(Q))}),S("click",me,gn=>X(gn.currentTarget.parentElement)),p(j,Z)};O(Fe,j=>{t(Oe)&&j(De)})}z(()=>h(Se,t(o).length?`${t(o).length} von ${t(s).length} ausgewählt`:"alle werden eingeschlossen")),p(C,R)},Kt=C=>{var R=jc(),se=i(r(R),2),ie=i(r(se),4);S("click",ie,()=>{var ee;return(ee=document.querySelector(".nav-item[data-view='cookbook']"))==null?void 0:ee.dispatchEvent(new MouseEvent("click"))}),p(C,R)};O(wt,C=>{t(s).length?C(Ct):C(Kt,-1)})}var Pt=i(wt,2),Dt=i(r(Pt),2),Lt=i(r(Dt)),It=i(Dt,2);Je(It,20,()=>[["cline","Cline / Claude Code","Windows — Tools auf dem Entwicklungs-PC"],["opencode","OpenCode","Windows — Terminal-Agent"],["bosgame","Direkt am Bosgame","Wenn das Tool am Server läuft"]],Xe,(C,R)=>{var se=q(()=>Hn(R,3));let ie=()=>t(se)[0],ee=()=>t(se)[1],Se=()=>t(se)[2];var de=Uc(),A=r(de),U=r(A),oe=i(A,2),Me=r(oe);z(()=>{Et(de,1,`card-btn${t(v)===ie()?" cb-best":""}`),h(U,ee()),h(Me,Se())}),S("click",de,()=>u(v,ie(),!0)),p(C,de)});var Tt=i(It,2),P=r(Tt),V=i(P,2),$=r(V),G=r($),E=i(Tt,2);{var Y=C=>{var R=Hc();p(C,R)},ke=C=>{var R=Jc();p(C,R)},Pe=C=>{var R=Qc();p(C,R)};O(E,C=>{t(v)==="cline"?C(Y):t(v)==="opencode"?C(ke,1):C(Pe,-1)})}z(()=>{ea(I,t(y)),h(G,t(B))}),S("click",ue,C=>{const R=C.currentTarget.previousElementSibling;be(R)}),S("input",He,D),dn(He,()=>t(f),C=>u(f,C)),S("click",Ve,te),S("click",Lt,C=>{var R;C.preventDefault(),(R=document.querySelector(".nav-item[data-view='memory']"))==null||R.click()}),S("click",P,C=>X(C.currentTarget.parentElement)),p(e,Ne),Pn()}qn(["click","input","keydown"]);var Xc=g('News
Aktuelles aus der Local-LLM-Welt — aus kuratierten Quellen.'),ev=g(''),tv=g('Für dich: Upgrades
Neuere Modelle, die ein installiertes ersetzen können.Lade News… (erstes Laden kann kurz dauern)'),nv=g(''),av=g(''),iv=g('für dich'),rv=g('Keine News geladenDie Quellen sind gerade nicht erreichbar — später nochmal probieren.'),sv=g(''),lv=g('',1);function ov(e,n){$n(n,!0);let a=L(jt([])),s=L(jt([])),l=L(!0),o=L("");const d=te=>te==="perfect"?"ok":te==="marginal"?"warn":"bad";function c(te){const X=Math.max(0,Date.now()/1e3-te);return X<60?X+"s":X<3600?Math.floor(X/60)+"m":X<86400?Math.floor(X/3600)+"h":Math.floor(X/86400)+"d"}async function v(){u(l,!0),u(o,"");try{u(a,(await we("/api/news")).items||[],!0)}catch(te){u(o,te.message||"Fehler beim Laden",!0)}finally{u(l,!1)}}async function f(){try{u(s,(await we("/api/cookbook/upgrades")).upgrades||[],!0)}catch{u(s,[],!0)}}async function b(te,X){var be;X.disabled=!0,X.textContent="Starte…";try{await we("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:te.repo,role:te.role,params_b:te.params_b,quant:te.quant,hf_token:di()})}),(be=document.querySelector(".nav-item[data-view='activity']"))==null||be.dispatchEvent(new MouseEvent("click"))}catch(Be){X.disabled=!1,X.textContent="Installieren",alert("Fehler: "+Be.message)}}function T(){v(),f()}yi(()=>{v(),f()});var _=lv(),y=tt(_),D=i(r(y),2),B=i(y,2);{var M=te=>{var X=ev(),be=r(X),Be=i(r(be),2),Ne=r(Be),Ze=i(be,4);Je(Ze,21,()=>t(s),Xe,(ut,I)=>{var ue=Xc(),Ae=r(ue),He=r(Ae),N=r(He),ve=r(N),pe=i(N,2),je=r(pe),Ve=i(He,2),nt=r(Ve),it=i(Ae,2);z(et=>{h(ve,t(I).name),Et(pe,1,`fit-badge ${et??""}`),h(je,t(I).fit.text),h(nt,`Ersetzt dein „${t(I).old??""}". ${t(I).why??""}`)},[()=>d(t(I).fit.level)]),S("click",it,et=>b(t(I),et.currentTarget)),p(ut,ue)}),z(()=>h(Ne,t(s).length)),p(te,X)};O(B,te=>{t(s).length&&te(M)})}var K=i(B,2);{var Oe=te=>{var X=tv();p(te,X)},Ee=te=>{var X=nv(),be=r(X);z(()=>h(be,t(o))),p(te,X)},Ce=te=>{var X=av();p(te,X)},Re=te=>{var X=sv();Je(X,21,()=>t(a),Xe,(be,Be,Ne)=>{var Ze=rv();Et(Ze,1,`news-card${Ne===0?" featured":""}`);var ut=r(Ze),I=r(ut),ue=r(I),Ae=i(I,2);{var He=Ve=>{var nt=iv();p(Ve,nt)};O(Ae,Ve=>{t(Be).relevant&&Ve(He)})}var N=i(Ae,2),ve=r(N),pe=i(ut,2),je=r(pe);z(Ve=>{Aa(Ze,"href",t(Be).link),h(ue,t(Be).source),h(ve,Ve),h(je,t(Be).title)},[()=>t(Be).ts?c(t(Be).ts):""]),p(be,Ze)}),p(te,X)};O(K,te=>{t(l)?te(Oe):t(o)?te(Ee,1):t(a).length?te(Re,-1):te(Ce,2)})}S("click",D,T),p(e,_),Pn()}qn(["click"]);const es=[{label:"Einstieg",tutorials:[["Dein erster Workflow — in 3 Schritten",`News
Aktuelles aus der Local-LLM-Welt — aus kuratierten Quellen.
- Modell holen: Tab Cookbook → Anwendungsfall wählen (z.B. „Coden & Programmieren") → Komplettes Setup installieren. Der Download läuft im Tab Aktivität — einfach warten bis der Job grün wird.
@@ -649,17 +649,17 @@ src/Strg+Shift+R (Hard Reload). Wenn das nicht hilft: Tab Server → Mission Control → Neu starten.- `]]}],dv=[["LLM / Modell","Die KI selbst — versteht und schreibt Text (wie ChatGPT, nur lokal auf deinem PC). Ein Modell ist eine konkrete Datei, oft auf etwas spezialisiert (Code, Bilder, Chat)."],["GGUF","Das lokal lauffähige Dateiformat. llama-swap lädt nur GGUF — Repos ohne GGUF kann die Engine nicht nutzen."],["Quantisierung (Q4_K_M)","Verkleinert ein Modell (16-Bit → 4-Bit), damit es in den Speicher passt — bei kaum Qualitätsverlust. Q4_K_M ist der bewährte Sweetspot. Für Coding/Reasoning: Q8_0 (nahezu verlustfrei). Wenn Q4_K_M 1 GB zu groß ist: IQ4_XS als Alternative (ähnliche Qualität, etwas kleiner)."],["Kontextfenster","Das Kurzzeitgedächtnis: wie viel Text sich das Modell gleichzeitig merken kann. Größer = mehr Überblick, mehr Speicher, etwas langsamer."],["Token","Die kleinste Einheit die ein Modell verarbeitet — meist 3–4 Zeichen oder ein kurzes Wort. 1 000 Tokens ≈ 750 Wörter. Kontextfenster, Geschwindigkeit und Kosten werden in Tokens gemessen."],["Auto-Swap","llama-swap lädt/entlädt Modelle automatisch — immer nur eins gleichzeitig. Du managst nichts."],["TTL (Time to Live)","Wie lange ein Modell nach der letzten Anfrage im RAM bleibt bevor es entladen wird. Standard: 5 Minuten. ∞ = bleibt dauerhaft geladen (sinnvoll für den Scout)."],["Agent","Ein Programm (OpenCode, Cline, Continue), das das Modell in einer Handlungsschleife laufen lässt — Dateien lesen/ändern, Befehle ausführen, planen, bis die Aufgabe erledigt ist."],["MCP","Model Context Protocol — der Stecker, über den ein Agent zusätzliche Werkzeuge bekommt (Web, Datenbank, GitHub …). MCP = neue Fähigkeiten."],["Skills / Rules","Kurze Textdatei (AGENTS.md, .clinerules …) mit Anweisungen wie der Agent in deinem Projekt arbeiten soll — einmal geschrieben, immer befolgt. Seit 2026 plattformübergreifender Standard: AGENTS.md wird von über 10 Tools nativ gelesen."],["Memory Bank","Clines Konzept für dauerhaften Projekt-Kontext: projectbrief.md (Ziel & Scope), activeContext.md (aktueller Fokus), progress.md (Stand). Wird zu Beginn jeder Aufgabe automatisch gelesen — ähnlich wie AGENTS.md, aber aufgeteilt nach Zweck."],["System-Prompt","Eine unsichtbare Anweisung die vor deiner Nachricht steht und das Verhalten des Modells grundlegend prägt (Sprache, Ton, Rolle). Skills nutzen oft den System-Prompt."],["Vision","Modelle mit Vision-Fähigkeit können Bilder verstehen — Screenshots, Diagramme, Fehlerfotos. Erkennbar am mmproj-Projektor der mitgeladen wird."]];var cv=g(''),vv=g(""),uv=g('
'),pv=g('
'),fv=g('Guide
Schritt für Schritt erklärt — von der ersten Einrichtung bis zu echten Agenten-Workflows.',1);function hv(e,n){$n(n,!0);let a=I(0);function s(f){var b;u(a,f,!0),(b=document.getElementById(`guide-group-${f}`))==null||b.scrollIntoView({behavior:"smooth",block:"start"})}var l=fv(),o=i(tt(l),2),d=i(r(o),2);Je(d,21,()=>dv,Xe,(f,b)=>{var T=q(()=>Hn(t(b),2));let _=()=>t(T)[0],y=()=>t(T)[1];var P=cv(),O=r(P),M=r(O),K=i(O,2),Oe=r(K);z(()=>{h(M,_()),h(Oe,y())}),p(f,P)});var c=i(o,2);Je(c,21,()=>es,Xe,(f,b,T)=>{var _=vv(),y=r(_);z(()=>{Et(_,1,`guide-tab${t(a)===T?" active":""}`,"svelte-112sh7i"),h(y,t(b).label)}),S("click",_,()=>s(T)),p(f,_)});var v=i(c,2);Je(v,17,()=>es,Xe,(f,b,T)=>{var _=pv();Aa(_,"id",`guide-group-${T}`);var y=r(_),P=r(y),O=i(y,2);Je(O,17,()=>t(b).tutorials,Xe,(M,K,Oe)=>{var Ee=q(()=>Hn(t(K),2));let Ce=()=>t(Ee)[0],Re=()=>t(Ee)[1];var te=uv();te.open=T===0&&Oe===0;var X=r(te),be=r(X),Be=i(X,2);Ye(Be,Re,!0),z(()=>h(be,Ce())),p(M,te)}),z(()=>h(P,t(b).label)),p(f,_)}),p(e,l),Pn()}qn(["click"]);var gv=g('Begriffe kurz erklärt
'),mv=g(''),bv=g('Import aus Claude / Gemini / ChatGPT
Füge Erkenntnisse aus anderen KI-Sessions ein — jede Zeile wird ein eigener Eintrag.'),_v=g(' '),yv=g('Neuer Eintrag
Strg+Enter zum Speichern'),xv=g(''),kv=g('Lade…'),wv=g('',1),Sv=g(''),Mv=g(""),Ev=g(''),Av=g(`Gedächtnis
Fakten, Entscheidungen und Kontext — geteilt von allen KI-Tools via MCP.Filter:Wie KI-Tools dieses Gedächtnis nutzen
Cline, OpenCode und Claude Code greifen über den Memory MCP-Server auf diese Einträge zu. +`]]}],dv=[["LLM / Modell","Die KI selbst — versteht und schreibt Text (wie ChatGPT, nur lokal auf deinem PC). Ein Modell ist eine konkrete Datei, oft auf etwas spezialisiert (Code, Bilder, Chat)."],["GGUF","Das lokal lauffähige Dateiformat. llama-swap lädt nur GGUF — Repos ohne GGUF kann die Engine nicht nutzen."],["Quantisierung (Q4_K_M)","Verkleinert ein Modell (16-Bit → 4-Bit), damit es in den Speicher passt — bei kaum Qualitätsverlust. Q4_K_M ist der bewährte Sweetspot. Für Coding/Reasoning: Q8_0 (nahezu verlustfrei). Wenn Q4_K_M 1 GB zu groß ist: IQ4_XS als Alternative (ähnliche Qualität, etwas kleiner)."],["Kontextfenster","Das Kurzzeitgedächtnis: wie viel Text sich das Modell gleichzeitig merken kann. Größer = mehr Überblick, mehr Speicher, etwas langsamer."],["Token","Die kleinste Einheit die ein Modell verarbeitet — meist 3–4 Zeichen oder ein kurzes Wort. 1 000 Tokens ≈ 750 Wörter. Kontextfenster, Geschwindigkeit und Kosten werden in Tokens gemessen."],["Auto-Swap","llama-swap lädt/entlädt Modelle automatisch — immer nur eins gleichzeitig. Du managst nichts."],["TTL (Time to Live)","Wie lange ein Modell nach der letzten Anfrage im RAM bleibt bevor es entladen wird. Standard: 5 Minuten. ∞ = bleibt dauerhaft geladen (sinnvoll für den Scout)."],["Agent","Ein Programm (OpenCode, Cline, Continue), das das Modell in einer Handlungsschleife laufen lässt — Dateien lesen/ändern, Befehle ausführen, planen, bis die Aufgabe erledigt ist."],["MCP","Model Context Protocol — der Stecker, über den ein Agent zusätzliche Werkzeuge bekommt (Web, Datenbank, GitHub …). MCP = neue Fähigkeiten."],["Skills / Rules","Kurze Textdatei (AGENTS.md, .clinerules …) mit Anweisungen wie der Agent in deinem Projekt arbeiten soll — einmal geschrieben, immer befolgt. Seit 2026 plattformübergreifender Standard: AGENTS.md wird von über 10 Tools nativ gelesen."],["Memory Bank","Clines Konzept für dauerhaften Projekt-Kontext: projectbrief.md (Ziel & Scope), activeContext.md (aktueller Fokus), progress.md (Stand). Wird zu Beginn jeder Aufgabe automatisch gelesen — ähnlich wie AGENTS.md, aber aufgeteilt nach Zweck."],["System-Prompt","Eine unsichtbare Anweisung die vor deiner Nachricht steht und das Verhalten des Modells grundlegend prägt (Sprache, Ton, Rolle). Skills nutzen oft den System-Prompt."],["Vision","Modelle mit Vision-Fähigkeit können Bilder verstehen — Screenshots, Diagramme, Fehlerfotos. Erkennbar am mmproj-Projektor der mitgeladen wird."]];var cv=g(''),vv=g(""),uv=g('
'),pv=g('
'),fv=g('Guide
Schritt für Schritt erklärt — von der ersten Einrichtung bis zu echten Agenten-Workflows.',1);function hv(e,n){$n(n,!0);let a=L(0);function s(f){var b;u(a,f,!0),(b=document.getElementById(`guide-group-${f}`))==null||b.scrollIntoView({behavior:"smooth",block:"start"})}var l=fv(),o=i(tt(l),2),d=i(r(o),2);Je(d,21,()=>dv,Xe,(f,b)=>{var T=q(()=>Hn(t(b),2));let _=()=>t(T)[0],y=()=>t(T)[1];var D=cv(),B=r(D),M=r(B),K=i(B,2),Oe=r(K);z(()=>{h(M,_()),h(Oe,y())}),p(f,D)});var c=i(o,2);Je(c,21,()=>es,Xe,(f,b,T)=>{var _=vv(),y=r(_);z(()=>{Et(_,1,`guide-tab${t(a)===T?" active":""}`,"svelte-112sh7i"),h(y,t(b).label)}),S("click",_,()=>s(T)),p(f,_)});var v=i(c,2);Je(v,17,()=>es,Xe,(f,b,T)=>{var _=pv();Aa(_,"id",`guide-group-${T}`);var y=r(_),D=r(y),B=i(y,2);Je(B,17,()=>t(b).tutorials,Xe,(M,K,Oe)=>{var Ee=q(()=>Hn(t(K),2));let Ce=()=>t(Ee)[0],Re=()=>t(Ee)[1];var te=uv();te.open=T===0&&Oe===0;var X=r(te),be=r(X),Be=i(X,2);Ye(Be,Re,!0),z(()=>h(be,Ce())),p(M,te)}),z(()=>h(D,t(b).label)),p(f,_)}),p(e,l),Pn()}qn(["click"]);var gv=g('Begriffe kurz erklärt
'),mv=g(''),bv=g('Import aus Claude / Gemini / ChatGPT
Füge Erkenntnisse aus anderen KI-Sessions ein — jede Zeile wird ein eigener Eintrag.'),_v=g(' '),yv=g('Neuer Eintrag
Strg+Enter zum Speichern'),xv=g(''),kv=g('Lade…'),wv=g('',1),Sv=g(''),Mv=g(""),Ev=g(''),Av=g(`Gedächtnis
Fakten, Entscheidungen und Kontext — geteilt von allen KI-Tools via MCP.Filter:`,1);function Cv(e,n){$n(n,!0);let a=I(jt([])),s=I(!0),l=I("all"),o=I(!1),d=I(""),c=I("stable"),v=I(null),f=I(""),b=I("stable"),T=I(!1),_=I(""),y=I("stable"),P=I("import"),O=I(!1);const M=q(()=>t(_).split(` -`).map($=>$.trim()).filter($=>$.length>0)),K=q(()=>t(l)==="all"?t(a):t(a).filter($=>$.category===t(l))),Oe={user:{label:"Über mich",color:"#a78bfa"},instruction:{label:"Verhalten",color:"#fb923c"},stable:{label:"Stabil",color:"var(--accent)"},versioned:{label:"Versioniert",color:"#f59e0b"},ephemeral:{label:"Temporär",color:"var(--mut)"}};function Ee($){const G=Math.floor((Date.now()-new Date($).getTime())/1e3);return G<60?"gerade eben":G<3600?`vor ${Math.floor(G/60)} Min`:G<86400?`vor ${Math.floor(G/3600)} Std`:`vor ${Math.floor(G/86400)} Tagen`}function Ce($){return t(a).filter(G=>G.category===$).length}async function Re(){try{u(a,await we("/api/memory"),!0)}catch($){ce("Laden fehlgeschlagen: "+$.message,!0)}finally{u(s,!1)}}async function te(){if(t(d).trim())try{const $=await we("/api/memory",{method:"POST",body:JSON.stringify({content:t(d).trim(),category:t(c),source:"manual"})});u(a,[$,...t(a)],!0),u(d,""),u(c,"stable"),u(o,!1),ce("Gespeichert")}catch($){ce("Fehler: "+$.message,!0)}}async function X($){try{const G=await we(`/api/memory/${$.id}`,{method:"PUT",body:JSON.stringify({content:t(f),category:t(b)})});u(a,t(a).map(E=>E.id===$.id?G:E),!0),u(v,null),ce("Aktualisiert")}catch(G){ce("Fehler: "+G.message,!0)}}async function be($){if(await hn({title:"Eintrag löschen?",body:`„${$.content.length>80?$.content.slice(0,80)+"…":$.content}" wird dauerhaft entfernt.`,danger:!0}))try{await we(`/api/memory/${$.id}`,{method:"DELETE"}),u(a,t(a).filter(E=>E.id!==$.id),!0),ce("Gelöscht")}catch(E){ce("Fehler: "+E.message,!0)}}function Be($){u(v,$.id,!0),u(f,$.content,!0),u(b,$.category,!0)}let Ne=I(!1);async function Ze(){u(Ne,!0);try{const $=await we("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!1})});if($.duplicate_count===0){ce("Keine Dubletten gefunden 🎉");return}if(!await hn({title:`${$.duplicate_count} Dubletten entfernen?`,body:`${$.duplicate_count} doppelte Einträge werden gelöscht; die ${$.groups.length} vollständigeren bleiben erhalten. Nur exakte/enthaltene/sehr ähnliche Einträge derselben Kategorie.`,danger:!0}))return;const E=await we("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!0})});ce(`${E.removed} Dubletten entfernt`),await Re()}catch($){ce("Fehler: "+$.message,!0)}finally{u(Ne,!1)}}async function ut(){if(t(M).length===0)return;u(O,!0);let $=0;for(const G of t(M))try{const E=await we("/api/memory",{method:"POST",body:JSON.stringify({content:G,category:t(y),source:t(P)})});u(a,[E,...t(a)],!0),$++}catch{}u(O,!1),u(T,!1),u(_,""),ce(`${$} von ${t(M).length} Einträgen importiert`)}bi(()=>{Re()});var D=Av(),ue=tt(D),Ae=i(r(ue),2),He=r(Ae),N=r(He),ve=i(He,2),pe=r(ve),je=i(ve,2),Ve=r(je),nt=i(ue,2);{var it=$=>{var G=mv(),E=i(r(G),6);Aa(E,"placeholder",`Tobi arbeitet am liebsten abends. + deine Präferenzen und frühere Entscheidungen. Den Setup-Guide findest du unter Verbinden → Gedächtnis-MCP.Wie KI-Tools dieses Gedächtnis nutzen
Cline, OpenCode und Claude Code greifen über den Memory MCP-Server auf diese Einträge zu. Beim Start einer Session lädt der Agent automatisch alle Einträge — er kennt dann deinen Stack, - deine Präferenzen und frühere Entscheidungen. Den Setup-Guide findest du unter Verbinden → Gedächtnis-MCP.Über mich = wer du bist, Präferenzen · Verhalten = Regeln für alle KI-Tools · Stabil = Projektfakten · Versioniert = Tech-Versionen · Temporär = 7 Tage, dann wegÜber mich = wer du bist, Präferenzen · Verhalten = Regeln für alle KI-Tools · Stabil = Projektfakten · Versioniert = Tech-Versionen · Temporär = 7 Tage, dann weg`,1);function Cv(e,n){$n(n,!0);let a=L(jt([])),s=L(!0),l=L("all"),o=L(!1),d=L(""),c=L("stable"),v=L(null),f=L(""),b=L("stable"),T=L(!1),_=L(""),y=L("stable"),D=L("import"),B=L(!1);const M=q(()=>t(_).split(` +`).map($=>$.trim()).filter($=>$.length>0)),K=q(()=>t(l)==="all"?t(a):t(a).filter($=>$.category===t(l))),Oe={user:{label:"Über mich",color:"#a78bfa"},instruction:{label:"Verhalten",color:"#fb923c"},stable:{label:"Stabil",color:"var(--accent)"},versioned:{label:"Versioniert",color:"#f59e0b"},ephemeral:{label:"Temporär",color:"var(--mut)"}};function Ee($){const G=Math.floor((Date.now()-new Date($).getTime())/1e3);return G<60?"gerade eben":G<3600?`vor ${Math.floor(G/60)} Min`:G<86400?`vor ${Math.floor(G/3600)} Std`:`vor ${Math.floor(G/86400)} Tagen`}function Ce($){return t(a).filter(G=>G.category===$).length}async function Re(){try{u(a,await we("/api/memory"),!0)}catch($){ce("Laden fehlgeschlagen: "+$.message,!0)}finally{u(s,!1)}}async function te(){if(t(d).trim())try{const $=await we("/api/memory",{method:"POST",body:JSON.stringify({content:t(d).trim(),category:t(c),source:"manual"})});u(a,[$,...t(a)],!0),u(d,""),u(c,"stable"),u(o,!1),ce("Gespeichert")}catch($){ce("Fehler: "+$.message,!0)}}async function X($){try{const G=await we(`/api/memory/${$.id}`,{method:"PUT",body:JSON.stringify({content:t(f),category:t(b)})});u(a,t(a).map(E=>E.id===$.id?G:E),!0),u(v,null),ce("Aktualisiert")}catch(G){ce("Fehler: "+G.message,!0)}}async function be($){if(await hn({title:"Eintrag löschen?",body:`„${$.content.length>80?$.content.slice(0,80)+"…":$.content}" wird dauerhaft entfernt.`,danger:!0}))try{await we(`/api/memory/${$.id}`,{method:"DELETE"}),u(a,t(a).filter(E=>E.id!==$.id),!0),ce("Gelöscht")}catch(E){ce("Fehler: "+E.message,!0)}}function Be($){u(v,$.id,!0),u(f,$.content,!0),u(b,$.category,!0)}let Ne=L(!1);async function Ze(){u(Ne,!0);try{const $=await we("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!1})});if($.duplicate_count===0){ce("Keine Dubletten gefunden 🎉");return}if(!await hn({title:`${$.duplicate_count} Dubletten entfernen?`,body:`${$.duplicate_count} doppelte Einträge werden gelöscht; die ${$.groups.length} vollständigeren bleiben erhalten. Nur exakte/enthaltene/sehr ähnliche Einträge derselben Kategorie.`,danger:!0}))return;const E=await we("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!0})});ce(`${E.removed} Dubletten entfernt`),await Re()}catch($){ce("Fehler: "+$.message,!0)}finally{u(Ne,!1)}}async function ut(){if(t(M).length===0)return;u(B,!0);let $=0;for(const G of t(M))try{const E=await we("/api/memory",{method:"POST",body:JSON.stringify({content:G,category:t(y),source:t(D)})});u(a,[E,...t(a)],!0),$++}catch{}u(B,!1),u(T,!1),u(_,""),ce(`${$} von ${t(M).length} Einträgen importiert`)}bi(()=>{Re()});var I=Av(),ue=tt(I),Ae=i(r(ue),2),He=r(Ae),N=r(He),ve=i(He,2),pe=r(ve),je=i(ve,2),Ve=r(je),nt=i(ue,2);{var it=$=>{var G=mv(),E=i(r(G),6);Aa(E,"placeholder",`Tobi arbeitet am liebsten abends. Projektsprache: Deutsch. Bosgame M5 läuft mit Ubuntu 26.04. -...`);var Z=i(E,2),ke=r(Z),Pe=i(r(ke),2),C=r(Pe);C.value=C.__value="user";var B=i(C);B.value=B.__value="instruction";var se=i(B);se.value=se.__value="stable";var ie=i(se);ie.value=ie.__value="versioned";var ee=i(ie);ee.value=ee.__value="ephemeral";var Se=i(ke,2),de=i(r(Se),2),A=r(de);A.value=A.__value="import";var j=i(A);j.value=j.__value="claude";var oe=i(j);oe.value=oe.__value="gemini";var Me=i(oe);Me.value=Me.__value="chatgpt";var U=i(Me);U.value=U.__value="manual";var le=i(Z,2);{var Te=V=>{var xe=gv(),Ie=r(xe);z(()=>h(Ie,`${t(M).length??""} Eintrag/Einträge erkannt`)),p(V,xe)};L(le,V=>{t(M).length>0&&V(Te)})}var ze=i(le,2),x=r(ze),H=r(x),he=i(x,2);z(()=>{x.disabled=t(M).length===0||t(O),h(H,t(O)?"Importiere…":`${t(M).length} Einträge speichern`)}),dn(E,()=>t(_),V=>u(_,V)),Jn(Pe,()=>t(y),V=>u(y,V)),Jn(de,()=>t(P),V=>u(P,V)),S("click",x,ut),S("click",he,()=>{u(T,!1),u(_,"")}),p($,G)};L(nt,$=>{t(T)&&$(it)})}var et=i(nt,2);{var bt=$=>{var G=bv(),E=i(r(G),4),Z=i(E,4),ke=r(Z);ke.value=ke.__value="user";var Pe=i(ke);Pe.value=Pe.__value="instruction";var C=i(Pe);C.value=C.__value="stable";var B=i(C);B.value=B.__value="versioned";var se=i(B);se.value=se.__value="ephemeral";var ie=i(Z,2),ee=r(ie),Se=i(ee,2);z(de=>ee.disabled=de,[()=>!t(d).trim()]),S("keydown",E,de=>{de.key==="Enter"&&(de.ctrlKey||de.metaKey)&&te()}),dn(E,()=>t(d),de=>u(d,de)),Jn(Z,()=>t(c),de=>u(c,de)),S("click",ee,te),S("click",Se,()=>{u(o,!1),u(d,"")}),p($,G)};L(et,$=>{t(o)&&$(bt)})}var wt=i(et,2),Ct=r(wt),Kt=i(r(Ct),2);Je(Kt,17,()=>[["all","Alle","",t(a).length],["user","Über mich","#a78bfa",Ce("user")],["instruction","Verhalten","#fb923c",Ce("instruction")],["stable","Stabil","var(--accent)",Ce("stable")],["versioned","Versioniert","#f59e0b",Ce("versioned")],["ephemeral","Temporär","var(--mut)",Ce("ephemeral")]],Xe,($,G)=>{var E=q(()=>Hn(t(G),4));let Z=()=>t(E)[0],ke=()=>t(E)[1],Pe=()=>t(E)[2],C=()=>t(E)[3];var B=_v(),se=r(B),ie=i(se),ee=r(ie);z(()=>{At(B,`cursor:pointer;${t(l)===Z()?`background:rgba(45,212,191,.12);border-color:${Pe()||"var(--accent)"};color:${Pe()||"var(--accent)"}`:""}`),h(se,`${ke()??""} `),h(ee,C())}),S("click",B,()=>u(l,Z(),!0)),S("keydown",B,Se=>Se.key==="Enter"&&u(l,Z(),!0)),p($,B)});var Pt=i(wt,2);{var Dt=$=>{var G=yv();p($,G)},Lt=$=>{var G=kv(),E=r(G),Z=r(E),ke=r(Z),Pe=i(Z,2),C=r(Pe),B=i(Pe,2);{var se=ie=>{var ee=xv();S("click",ee,()=>u(o,!0)),p(ie,ee)};L(B,ie=>{t(a).length===0&&ie(se)})}z(()=>{h(ke,t(a).length===0?"Noch keine Einträge":"Keine Treffer"),h(C,t(a).length===0?'Klicke „+ Eintrag" um manuell etwas zu speichern, oder verbinde ein KI-Tool via MCP.':"Andere Kategorie wählen oder Eintrag anlegen.")}),p($,G)},It=$=>{var G=Ev();Je(G,23,()=>t(K),E=>E.id,(E,Z,ke)=>{var Pe=Mv(),C=r(Pe);{var B=ie=>{var ee=wv(),Se=tt(ee),de=i(Se,2),A=r(de);A.value=A.__value="user";var j=i(A);j.value=j.__value="instruction";var oe=i(j);oe.value=oe.__value="stable";var Me=i(oe);Me.value=Me.__value="versioned";var U=i(Me);U.value=U.__value="ephemeral";var le=i(de,2),Te=r(le),ze=i(Te,2);dn(Se,()=>t(f),x=>u(f,x)),Jn(de,()=>t(b),x=>u(b,x)),S("click",Te,()=>X(t(Z))),S("click",ze,()=>u(v,null)),p(ie,ee)},se=ie=>{var ee=Sv(),Se=r(ee),de=r(Se),A=r(de),j=i(de,2),oe=r(j),Me=r(oe),U=i(oe,2),le=r(U),Te=i(U,2),ze=r(Te),x=i(Se,2),H=r(x),he=i(H,2);z(V=>{var xe,Ie,Fe;h(A,t(Z).content),At(oe,`border-color:${(((xe=Oe[t(Z).category])==null?void 0:xe.color)||"var(--mut)")??""};color:${(((Ie=Oe[t(Z).category])==null?void 0:Ie.color)||"var(--mut)")??""}`),h(Me,((Fe=Oe[t(Z).category])==null?void 0:Fe.label)||t(Z).category),h(le,t(Z).source),h(ze,V)},[()=>Ee(t(Z).updated_at)]),S("click",H,()=>Be(t(Z))),S("click",he,()=>be(t(Z))),p(ie,ee)};L(C,ie=>{t(v)===t(Z).id?ie(B):ie(se,-1)})}z(()=>At(Pe,`padding:14px 16px;${t(ke){t(s)?$(Dt):t(K).length===0?$(Lt,1):$(It,-1)})}var Tt=i(Pt,2),F=i(r(Tt),2),Y=i(r(F),3);z(()=>{He.disabled=t(Ne),h(N,t(Ne)?"…":"🧹 Aufräumen"),h(pe,t(T)?"Abbrechen":"⇩ Import"),h(Ve,t(o)?"Abbrechen":"+ Eintrag")}),S("click",He,Ze),S("click",ve,()=>{u(T,!t(T)),u(o,!1),u(_,"")}),S("click",je,()=>{u(o,!t(o)),u(T,!1),u(d,"")}),S("click",Y,$=>{var G;$.preventDefault(),(G=document.querySelector(".nav-item[data-view='connect']"))==null||G.click()}),p(e,D),Pn()}qn(["click","keydown"]);var ts=g(' '),Tv=g(' Sessions'),zv=g(' Nachrichten'),$v=g(' Tool-Calls'),Pv=g(' Tokens'),Dv=g(' aktiv'),Iv=g(' '),Lv=g('Meistgenutzte Tools',1),Ov=g(''),Bv=g('Aktivität (letzte 30 Tage)- '),Rv=g('
'),Fv=g('
'),Kv=g(''),Nv=g(`Was Hermes über dich gelernt hat (automatisches Profil)Keine geplanten Jobs. Hermes kann selbst welche anlegen — sag ihm z. B. +...`);var Y=i(E,2),ke=r(Y),Pe=i(r(ke),2),C=r(Pe);C.value=C.__value="user";var R=i(C);R.value=R.__value="instruction";var se=i(R);se.value=se.__value="stable";var ie=i(se);ie.value=ie.__value="versioned";var ee=i(ie);ee.value=ee.__value="ephemeral";var Se=i(ke,2),de=i(r(Se),2),A=r(de);A.value=A.__value="import";var U=i(A);U.value=U.__value="claude";var oe=i(U);oe.value=oe.__value="gemini";var Me=i(oe);Me.value=Me.__value="chatgpt";var H=i(Me);H.value=H.__value="manual";var le=i(Y,2);{var Te=W=>{var xe=gv(),Ie=r(xe);z(()=>h(Ie,`${t(M).length??""} Eintrag/Einträge erkannt`)),p(W,xe)};O(le,W=>{t(M).length>0&&W(Te)})}var ze=i(le,2),x=r(ze),J=r(x),he=i(x,2);z(()=>{x.disabled=t(M).length===0||t(B),h(J,t(B)?"Importiere…":`${t(M).length} Einträge speichern`)}),dn(E,()=>t(_),W=>u(_,W)),Jn(Pe,()=>t(y),W=>u(y,W)),Jn(de,()=>t(D),W=>u(D,W)),S("click",x,ut),S("click",he,()=>{u(T,!1),u(_,"")}),p($,G)};O(nt,$=>{t(T)&&$(it)})}var et=i(nt,2);{var bt=$=>{var G=bv(),E=i(r(G),4),Y=i(E,4),ke=r(Y);ke.value=ke.__value="user";var Pe=i(ke);Pe.value=Pe.__value="instruction";var C=i(Pe);C.value=C.__value="stable";var R=i(C);R.value=R.__value="versioned";var se=i(R);se.value=se.__value="ephemeral";var ie=i(Y,2),ee=r(ie),Se=i(ee,2);z(de=>ee.disabled=de,[()=>!t(d).trim()]),S("keydown",E,de=>{de.key==="Enter"&&(de.ctrlKey||de.metaKey)&&te()}),dn(E,()=>t(d),de=>u(d,de)),Jn(Y,()=>t(c),de=>u(c,de)),S("click",ee,te),S("click",Se,()=>{u(o,!1),u(d,"")}),p($,G)};O(et,$=>{t(o)&&$(bt)})}var wt=i(et,2),Ct=r(wt),Kt=i(r(Ct),2);Je(Kt,17,()=>[["all","Alle","",t(a).length],["user","Über mich","#a78bfa",Ce("user")],["instruction","Verhalten","#fb923c",Ce("instruction")],["stable","Stabil","var(--accent)",Ce("stable")],["versioned","Versioniert","#f59e0b",Ce("versioned")],["ephemeral","Temporär","var(--mut)",Ce("ephemeral")]],Xe,($,G)=>{var E=q(()=>Hn(t(G),4));let Y=()=>t(E)[0],ke=()=>t(E)[1],Pe=()=>t(E)[2],C=()=>t(E)[3];var R=_v(),se=r(R),ie=i(se),ee=r(ie);z(()=>{At(R,`cursor:pointer;${t(l)===Y()?`background:rgba(45,212,191,.12);border-color:${Pe()||"var(--accent)"};color:${Pe()||"var(--accent)"}`:""}`),h(se,`${ke()??""} `),h(ee,C())}),S("click",R,()=>u(l,Y(),!0)),S("keydown",R,Se=>Se.key==="Enter"&&u(l,Y(),!0)),p($,R)});var Pt=i(wt,2);{var Dt=$=>{var G=yv();p($,G)},Lt=$=>{var G=kv(),E=r(G),Y=r(E),ke=r(Y),Pe=i(Y,2),C=r(Pe),R=i(Pe,2);{var se=ie=>{var ee=xv();S("click",ee,()=>u(o,!0)),p(ie,ee)};O(R,ie=>{t(a).length===0&&ie(se)})}z(()=>{h(ke,t(a).length===0?"Noch keine Einträge":"Keine Treffer"),h(C,t(a).length===0?'Klicke „+ Eintrag" um manuell etwas zu speichern, oder verbinde ein KI-Tool via MCP.':"Andere Kategorie wählen oder Eintrag anlegen.")}),p($,G)},It=$=>{var G=Ev();Je(G,23,()=>t(K),E=>E.id,(E,Y,ke)=>{var Pe=Mv(),C=r(Pe);{var R=ie=>{var ee=wv(),Se=tt(ee),de=i(Se,2),A=r(de);A.value=A.__value="user";var U=i(A);U.value=U.__value="instruction";var oe=i(U);oe.value=oe.__value="stable";var Me=i(oe);Me.value=Me.__value="versioned";var H=i(Me);H.value=H.__value="ephemeral";var le=i(de,2),Te=r(le),ze=i(Te,2);dn(Se,()=>t(f),x=>u(f,x)),Jn(de,()=>t(b),x=>u(b,x)),S("click",Te,()=>X(t(Y))),S("click",ze,()=>u(v,null)),p(ie,ee)},se=ie=>{var ee=Sv(),Se=r(ee),de=r(Se),A=r(de),U=i(de,2),oe=r(U),Me=r(oe),H=i(oe,2),le=r(H),Te=i(H,2),ze=r(Te),x=i(Se,2),J=r(x),he=i(J,2);z(W=>{var xe,Ie,Fe;h(A,t(Y).content),At(oe,`border-color:${(((xe=Oe[t(Y).category])==null?void 0:xe.color)||"var(--mut)")??""};color:${(((Ie=Oe[t(Y).category])==null?void 0:Ie.color)||"var(--mut)")??""}`),h(Me,((Fe=Oe[t(Y).category])==null?void 0:Fe.label)||t(Y).category),h(le,t(Y).source),h(ze,W)},[()=>Ee(t(Y).updated_at)]),S("click",J,()=>Be(t(Y))),S("click",he,()=>be(t(Y))),p(ie,ee)};O(C,ie=>{t(v)===t(Y).id?ie(R):ie(se,-1)})}z(()=>At(Pe,`padding:14px 16px;${t(ke)`),ru=g('{t(s)?$(Dt):t(K).length===0?$(Lt,1):$(It,-1)})}var Tt=i(Pt,2),P=i(r(Tt),2),V=i(r(P),3);z(()=>{He.disabled=t(Ne),h(N,t(Ne)?"…":"🧹 Aufräumen"),h(pe,t(T)?"Abbrechen":"⇩ Import"),h(Ve,t(o)?"Abbrechen":"+ Eintrag")}),S("click",He,Ze),S("click",ve,()=>{u(T,!t(T)),u(o,!1),u(_,"")}),S("click",je,()=>{u(o,!t(o)),u(T,!1),u(d,"")}),S("click",V,$=>{var G;$.preventDefault(),(G=document.querySelector(".nav-item[data-view='connect']"))==null||G.click()}),p(e,I),Pn()}qn(["click","keydown"]);var ts=g(' '),Tv=g(' Sessions'),zv=g(' Nachrichten'),$v=g(' Tool-Calls'),Pv=g(' Tokens'),Dv=g(' aktiv'),Iv=g(' '),Lv=g('Meistgenutzte Tools',1),Ov=g(''),Bv=g('Aktivität (letzte 30 Tage)- '),Rv=g('
'),Fv=g('
'),Kv=g(''),Nv=g(`Was Hermes über dich gelernt hat (automatisches Profil)Keine geplanten Jobs. Hermes kann selbst welche anlegen — sag ihm z. B. „Erinnere mich jeden Morgen um 9 Uhr an die offenen Modell-Upgrades".`),qv=g(' '),Gv=g(``),Vv=g(''),Wv=g('Keine Skills geladen (oder Agent offline).'),jv=g(' '),Uv=g(' '),Hv=g(''),Jv=g(''),Qv=g(''),Zv=g('Agent-Cockpit
StatusHermes-Gateway-Dienst (:8642) auf dem BosgameGeplante AufgabenSkills'),Yv=g('pip install faster-whisper'),Xv=g(''),eu=g('4. Bosgame-Key eintragen (in Windows PowerShell):SSH-Key nicht gefunden — bitte auf dem Bosgame generieren:'),tu=g('ssh-keygen -t ed25519 -C "hermes-agent@bosgame" -f ~/.ssh/id_ed25519_hermes_agent -N ""'),nu=g('Einrichtung (einmalig, ~3 Minuten):1. PowerShell als Admin — OpenSSH Server installieren:Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.02. Dienst starten und dauerhaft aktivieren:3. SSH-Ordner erstellen:5. Windows-IP in Mission Control Env-Var setzen:HERMES_WINDOWS_HOST=192.168.178.XXX'),au=g(''),iu=g(`Hermes Setup-Wizard
Whisper (Sprache → Text)faster-whisper muss auf dem Bosgame installiert seinPiper TTS (Text → Sprache)Piper-Binary + deutsche StimmeWindows SSH-VerbindungDamit Hermes Dateien auf deinem Windows-PC ändern kann`),ru=g('Hermes-Agent offlineDer Hermes-Gateway (:8642) bzw. das Dashboard (:9119) ist nicht erreichbar. - Status im Cockpit prüfen oder den Dienst neu starten.',1);function su(e,n){$n(n,!0);let a=I(null),s=I(!1),l=I(!1),o=I(!1),d=I(null),c=I(jt([])),v=I(jt([])),f=I(null),b=I(null),T=I("");async function _(){try{u(a,await we("/api/hermes/status"),!0)}catch{u(a,null)}}async function y(){try{const N=await we("/api/hermes/pubkey");u(T,N.pubkey,!0)}catch{u(T,"")}}async function P(){u(o,!0);try{const[N,ve,pe,je,Ve]=await Promise.all([we("/api/hermes/agent"),we("/api/hermes/cron"),we("/api/hermes/skills"),we("/api/hermes/learned"),we("/api/hermes/insights")]);u(d,N,!0),u(c,ve.jobs||[],!0),u(v,pe.skills||[],!0),u(f,je,!0),u(b,Ve,!0)}catch{u(d,null)}u(o,!1)}let O=q(()=>[...t(v)].sort((N,ve)=>(ve.use_count||0)-(N.use_count||0)||(N.name||"").localeCompare(ve.name||""))),M=q(()=>t(v).filter(N=>(N.status||"").includes("enabled")).length);function K(){var N;(N=navigator.clipboard)==null||N.writeText(t(T)),ce("SSH-Key kopiert")}bi(()=>{_()});var Oe=ru(),Ee=tt(Oe),Ce=i(r(Ee),2),Re=r(Ce),te=r(Re),X=i(Re,2),be=i(X,2),Be=i(Ee,2);{var Ne=N=>{var ve=Qv(),pe=r(ve),je=i(r(pe),2),Ve=r(je),nt=i(pe,2),it=r(nt),et=i(r(it),2),bt=r(et),wt=r(bt),Ct=i(bt,2),Kt=r(Ct),Pt=i(Ct,2);{var Dt=U=>{var le=ts(),Te=r(le);z(()=>h(Te,`Ticker vor ${t(d).heartbeat_age_s??""}s`)),p(U,le)};L(Pt,U=>{var le;((le=t(d))==null?void 0:le.heartbeat_age_s)!=null&&U(Dt)})}var Lt=i(Pt,2);{var It=U=>{var le=ts(),Te=r(le);z(ze=>{Aa(le,"title",t(d).version),h(Te,ze)},[()=>t(d).version.split(" · ")[0]]),p(U,le)};L(Lt,U=>{var le;(le=t(d))!=null&&le.version&&U(It)})}var Tt=i(nt,2);{var F=U=>{var le=Ov(),Te=i(r(le),2),ze=r(Te);{var x=R=>{var ne=Tv(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).sessions)),p(R,ne)};L(ze,R=>{t(b).sessions&&R(x)})}var H=i(ze,2);{var he=R=>{var ne=zv(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).messages)),p(R,ne)};L(H,R=>{t(b).messages&&R(he)})}var V=i(H,2);{var xe=R=>{var ne=$v(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).tool_calls)),p(R,ne)};L(V,R=>{t(b).tool_calls&&R(xe)})}var Ie=i(V,2);{var Fe=R=>{var ne=Pv(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).total_tokens)),p(R,ne)};L(Ie,R=>{t(b).total_tokens&&R(Fe)})}var De=i(Ie,2);{var W=R=>{var ne=Dv(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).active_time)),p(R,ne)};L(De,R=>{t(b).active_time&&R(W)})}var J=i(Te,2);{var Q=R=>{var ne=Lv(),_e=i(tt(ne),2);Je(_e,21,()=>t(b).top_tools.slice(0,6),Xe,(ge,fe)=>{var me=Iv(),_t=r(me),zt=r(_t),Ot=i(_t,2),gn=r(Ot),da=i(Ot,2),k=r(da);z(()=>{h(zt,t(fe).name),At(gn,`display:block;height:100%;width:${t(fe).pct??""}%;background:var(--accent)`),h(k,`${t(fe).calls??""}× · ${t(fe).pct??""}%`)}),p(ge,me)}),p(R,ne)};L(J,R=>{var ne;(ne=t(b).top_tools)!=null&&ne.length&&R(Q)})}p(U,le)};L(Tt,U=>{t(b)&&(t(b).sessions||t(b).total_tokens)&&U(F)})}var Y=i(Tt,2);{var $=U=>{var le=Kv(),Te=i(r(le),2);{var ze=he=>{var V=Rv();Je(V,21,()=>t(f).user_facts,Xe,(xe,Ie)=>{var Fe=Bv(),De=r(Fe);z(()=>h(De,t(Ie))),p(xe,Fe)}),p(he,V)};L(Te,he=>{var V;(V=t(f).user_facts)!=null&&V.length&&he(ze)})}var x=i(Te,2);{var H=he=>{var V=Fv(),xe=r(V);z(()=>h(xe,t(f).memory)),p(he,V)};L(x,he=>{t(f).memory&&he(H)})}p(U,le)};L(Y,U=>{var le,Te,ze;((Te=(le=t(f))==null?void 0:le.user_facts)!=null&&Te.length||(ze=t(f))!=null&&ze.memory)&&U($)})}var G=i(Y,2),E=r(G),Z=r(E),ke=i(r(Z)),Pe=r(ke),C=i(E,2);{var B=U=>{var le=Nv();p(U,le)},se=U=>{var le=Vv();Je(le,21,()=>t(c),Xe,(Te,ze)=>{var x=Gv();Je(x,21,()=>Object.entries(t(ze)),Xe,(H,he)=>{var V=q(()=>Hn(t(he),2));let xe=()=>t(V)[0],Ie=()=>t(V)[1];var Fe=Ua(),De=tt(Fe);{var W=J=>{var Q=qv(),R=r(Q),ne=r(R),_e=i(R);z(()=>{h(ne,`${xe()??""}:`),h(_e,` ${Ie()??""}`)}),p(J,Q)};L(De,J=>{Ie()&&J(W)})}p(H,Fe)}),p(Te,x)}),p(U,le)};L(C,U=>{t(c).length===0?U(B):U(se,-1)})}var ie=i(G,2),ee=r(ie),Se=r(ee),de=i(r(Se)),A=r(de),j=i(ee,2);{var oe=U=>{var le=Wv();p(U,le)},Me=U=>{var le=Jv();Je(le,21,()=>t(O),Xe,(Te,ze)=>{var x=Hv(),H=r(x),he=i(H,2),V=r(he),xe=i(he,2);{var Ie=Q=>{var R=jv(),ne=r(R);z(()=>h(ne,t(ze).category)),p(Q,R)};L(xe,Q=>{t(ze).category&&Q(Ie)})}var Fe=i(xe,4);{var De=Q=>{var R=Uv(),ne=r(R);z(()=>h(ne,`${t(ze).use_count??""}× genutzt`)),p(Q,R)};L(Fe,Q=>{t(ze).use_count>0&&Q(De)})}var W=i(Fe,2),J=r(W);z((Q,R)=>{At(x,`display:flex;align-items:center;gap:8px;font-size:12.5px;padding:4px 8px; - border-radius:6px;${Q??""}`),At(H,`width:7px;height:7px;border-radius:50%;flex-shrink:0; - background:${R??""}`),h(V,t(ze).name),h(J,t(ze).source)},[()=>(t(ze).status||"").includes("enabled")?"":"opacity:.45",()=>(t(ze).status||"").includes("enabled")?"var(--accent)":"var(--mut)"]),p(Te,x)}),p(U,le)};L(j,U=>{t(v).length===0?U(oe):U(Me,-1)})}z(()=>{var U,le,Te,ze;h(Ve,t(o)?"…":"↻ Aktualisieren"),At(bt,`font-size:11px;${((U=t(d))==null?void 0:U.gateway_state)==="running"?"color:#7ee29a;border-color:rgba(126,226,154,.4)":"color:#ff9b95;border-color:rgba(255,155,149,.4)"}`),h(wt,`● ${((le=t(d))==null?void 0:le.gateway_state)??"offline"??""}`),At(Ct,`font-size:11px;${(Te=t(d))!=null&&Te.cron_running?"color:var(--accent);border-color:var(--accent)":"color:var(--mut)"}`),h(Kt,`⏱ Scheduler ${(ze=t(d))!=null&&ze.cron_running?"läuft":"inaktiv"}`),h(Pe,`(${t(c).length??""})`),h(A,`(${t(M)??""} aktiv von ${t(v).length??""})`)}),S("click",je,P),p(N,ve)};L(Be,N=>{t(l)&&N(Ne)})}var Ze=i(Be,2);{var ut=N=>{var ve=nu(),pe=i(r(ve),2),je=r(pe),Ve=i(r(je),2),nt=r(Ve),it=i(je,2);{var et=G=>{var E=Zv();p(G,E)};L(it,G=>{var E;((E=t(a))==null?void 0:E.whisper)==="not_installed"&&G(et)})}var bt=i(pe,2),wt=r(bt),Ct=i(r(wt),2),Kt=r(Ct),Pt=i(wt,2);{var Dt=G=>{var E=Yv(),Z=r(E),ke=r(Z);z(Pe=>h(ke,Pe),[()=>["# 1. Piper Binary (Linux x86_64)","mkdir -p /opt/mission-control/piper/voices","cd /tmp && wget -q https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_x86_64.tar.gz","tar -xzf piper_linux_x86_64.tar.gz -C /opt/mission-control/piper/ --strip-components=1","","# 2. Deutsche Stimme — Kerstin (weiblich, ~25 MB)","wget -q -O /opt/mission-control/piper/voices/de_DE-kerstin-low.onnx \\",' "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx"',"wget -q -O /opt/mission-control/piper/voices/de_DE-kerstin-low.onnx.json \\",' "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx.json"'].join(` -`)]),p(G,E)};L(Pt,G=>{var E;((E=t(a))==null?void 0:E.piper)!=="ready"&&G(Dt)})}var Lt=i(bt,2),It=r(Lt),Tt=i(r(It),2),F=r(Tt),Y=i(It,2);{var $=G=>{var E=tu(),Z=i(r(E),4),ke=i(r(Z),2),Pe=r(ke);Pe.textContent=`Start-Service sshd -Set-Service -Name sshd -StartupType Automatic`;var C=i(Z,2),B=i(r(C),2),se=r(B);se.textContent='New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\\.ssh"';var ie=i(C,2);{var ee=A=>{var j=Xv(),oe=i(r(j),2),Me=r(oe),U=i(Me,2),le=r(U),Te=r(le);z(()=>h(Te,'echo "'+t(T)+'" >> "$env:USERPROFILE\\.ssh\\authorized_keys"')),S("click",Me,K),p(A,j)},Se=A=>{var j=eu();p(A,j)};L(ie,A=>{t(T)?A(ee):A(Se,-1)})}var de=i(ie,4);S("click",de,()=>{_(),ce("Status aktualisiert")}),p(G,E)};L(Y,G=>{var E;(E=t(a))!=null&&E.ssh_ok||G($)})}z(()=>{var G,E,Z,ke,Pe,C;At(Ve,`font-size:11px;${((G=t(a))==null?void 0:G.whisper)!=="not_installed"?"color:#7ee29a":"color:#ff9b95"}`),h(nt,((E=t(a))==null?void 0:E.whisper)!=="not_installed"?"✓ OK":"✗ fehlt"),At(Ct,`font-size:11px;${((Z=t(a))==null?void 0:Z.piper)==="ready"?"color:#7ee29a":"color:#ff9b95"}`),h(Kt,((ke=t(a))==null?void 0:ke.piper)==="ready"?"✓ OK":"✗ fehlt"),At(Tt,`font-size:11px;${(Pe=t(a))!=null&&Pe.ssh_ok?"color:#7ee29a":"color:var(--mut)"}`),h(F,(C=t(a))!=null&&C.ssh_ok?"✓ verbunden":"optional")}),p(N,ve)};L(Ze,N=>{t(s)&&N(ut)})}var D=i(Ze,2),ue=r(D);{var Ae=N=>{var ve=au();p(N,ve)},He=N=>{var ve=iu();p(N,ve)};L(ue,N=>{var ve;((ve=t(a))==null?void 0:ve.hermes)==="ready"?N(Ae):N(He,-1)})}z(()=>{var N,ve;At(Re,`font-size:11px;${((N=t(a))==null?void 0:N.hermes)==="ready"?"color:#7ee29a;border-color:rgba(126,226,154,.4)":"color:#ff9b95;border-color:rgba(255,155,149,.4)"}`),h(te,`● Agent: ${((ve=t(a))==null?void 0:ve.hermes)==="ready"?"online":"offline"}`),At(X,`padding:4px 10px;font-size:12px;${t(l)?"border-color:var(--accent);color:var(--accent)":""}`)}),S("click",X,()=>{u(l,!t(l)),t(l)&&P()}),S("click",be,()=>{u(s,!t(s)),t(s)&&(_(),y())}),p(e,Oe),Pn()}qn(["click"]);let ns={};function lu(){const e=document.getElementById("top-active-text");e&&(e.classList.add("swap-flash"),setTimeout(()=>e.classList.remove("swap-flash"),900))}function as(e){var l;const n=document.getElementById("swdot"),a=document.getElementById("swlabel"),s=document.getElementById("top-active-text");if(!e)n&&(n.className="dot off"),a&&(a.textContent="Backend nicht erreichbar"),s&&(s.textContent="Backend offline"),is("Backend nicht erreichbar – läuft uvicorn?",!1);else{const o=(e.swap_url||"").replace(/^https?:\/\//,"");n&&(n.className="dot "+(e.swap_ok?"on":"off")),a&&(a.textContent=(e.swap_ok?"LLM-Engine: Online – ":"LLM-Engine: Offline – ")+o);const d=["running","ready","loading","starting"],c=(e.models||[]).find(f=>d.includes(f.state));if(s)if(c){const f=(l=c.meta)!=null&&l.ctx?` · ${Math.round(c.meta.ctx/1024)}k ctx`:"",b=c.state==="loading"||c.state==="starting"?' lädt…':"";s.innerHTML=`${c.name}${f}${b}`}else s.innerHTML='Kein Modell im VRAM';e.swap_ok?vu():is(`LLM-Engine nicht erreichbar unter ${o} – läuft der llama-swap Dienst?`,!0);const v={};for(const f of e.models||[])v[f.name]=f.state;for(const[f,b]of Object.entries(v)){const T=ns[f];if(T&&T!==b&&(b==="running"||b==="loading")){lu();break}}ns=v}ou(e),xi.set(e)}function ou(e){const n=document.getElementById("sec-chip"),a=document.getElementById("sec-chip-tx");!n||!a||(n.classList.toggle("ok",!!(e!=null&&e.secured)),a.textContent=e!=null&&e.secured?"Geschützt · Heimnetz":"Nur im Heimnetz (offen)")}function du(e){fa.set(e||[])}function cu(e){Pr.set(e)}function is(e,n){const a=document.getElementById("alert");a.className="alert"+(n?" warn":""),a.innerHTML=`${e}`,a.style.display="flex"}function vu(){const e=document.getElementById("alert");e&&(e.style.display="none")}const uu=e=>{var n;return(n=document.querySelector(`.nav-item[data-view="${e}"]`))==null?void 0:n.click()};function nr(e,n,a,s){const l=document.createElement("span");return l.className="upd-badge"+(n?" "+n:""),l.textContent=e,s&&(l.title=s),l.onclick=()=>uu(a),l}async function il(){try{const e=await we("/api/updates"),n=document.getElementById("update-badges");if(!n)return;const a=e.apt_cache_age_h,s=a!=null&&a>24,l=a!=null?` · apt-Cache: vor ${a}h`:"";n.innerHTML="",n.appendChild(nr(e.os>0?`OS: ${e.os} Updates`:s?"OS: ?":"OS: aktuell",e.os>0||s?"warn":"ok","server",e.os>0?`${e.os} Pakete${l}`:s?`apt-Cache veraltet (${a}h)`:`Keine Updates${l}`)),n.appendChild(nr(e.engine>0?"Engine: Update":"Engine: aktuell",e.engine>0?"warn":"ok","server")),n.appendChild(nr(e.models>0?`Modelle: ${e.models}`:"Modelle: aktuell",e.models>0?"warn":"ok","news"))}catch{}}async function Vi(){try{as(await we("/api/status"))}catch{as(null)}}async function rl(){try{du(await we("/api/jobs"))}catch{}}function sl(){const e=window.location.protocol==="https:"?"wss:":"ws:",n=new WebSocket(`${e}//${window.location.host}/api/system/stream`);n.onmessage=a=>{try{cu(JSON.parse(a.data))}catch{}},n.onclose=()=>{setTimeout(sl,3e3)},n.onerror=()=>n.close()}var cs;((cs=document.getElementById("logo"))==null?void 0:cs.innerHTML)!==void 0&&(document.getElementById("logo").innerHTML=Gi.logo);document.querySelectorAll("[data-ic]").forEach(e=>{e.innerHTML=Gi[e.dataset.ic||""]||""});const pu=[["overview",pd],["models",Cd],["activity",Fd],["server",Jd],["cookbook",$c],["connect",Yc],["news",ov],["guides",hv],["memory",Cv],["hermes",su]];for(const[e,n]of pu){const a=document.querySelector(`.view[data-view="${e}"]`);a&&Eo(n,{target:a})}Ho("overview");const ar=document.getElementById("token");ar&&(ar.value=al(),ar.addEventListener("change",e=>{Go(e.target.value),Vi()}));const ir=document.getElementById("hf-token");ir&&(ir.value=di(),ir.addEventListener("change",e=>Wo(e.target.value)));const rs=document.getElementById("nav-settings"),rr=document.getElementById("settings-modal"),ss=document.getElementById("sm-close");rs&&rr&&ss&&(rs.addEventListener("click",()=>rr.style.display="flex"),ss.addEventListener("click",()=>rr.style.display="none"));function fu(){const e=document.getElementById("clock");e&&(e.textContent=new Date().toTimeString().slice(0,5))}document.addEventListener("mc:refresh",Vi);Vi();rl();sl();setInterval(fu,1e3);setInterval(Vi,3e3);setInterval(rl,1500);il();setInterval(il,6e4); + Status im Cockpit prüfen oder den Dienst neu starten.Hermes
',1);function su(e,n){$n(n,!0);let a=L(null),s=L(!1),l=L(!1),o=L(!1),d=L(null),c=L(jt([])),v=L(jt([])),f=L(null),b=L(null),T=L("");async function _(){try{u(a,await we("/api/hermes/status"),!0)}catch{u(a,null)}}async function y(){try{const N=await we("/api/hermes/pubkey");u(T,N.pubkey,!0)}catch{u(T,"")}}async function D(){u(o,!0);try{const[N,ve,pe,je,Ve]=await Promise.all([we("/api/hermes/agent"),we("/api/hermes/cron"),we("/api/hermes/skills"),we("/api/hermes/learned"),we("/api/hermes/insights")]);u(d,N,!0),u(c,ve.jobs||[],!0),u(v,pe.skills||[],!0),u(f,je,!0),u(b,Ve,!0)}catch{u(d,null)}u(o,!1)}let B=q(()=>[...t(v)].sort((N,ve)=>(ve.use_count||0)-(N.use_count||0)||(N.name||"").localeCompare(ve.name||""))),M=q(()=>t(v).filter(N=>(N.status||"").includes("enabled")).length);function K(){var N;(N=navigator.clipboard)==null||N.writeText(t(T)),ce("SSH-Key kopiert")}bi(()=>{_()});var Oe=ru(),Ee=tt(Oe),Ce=i(r(Ee),2),Re=r(Ce),te=r(Re),X=i(Re,2),be=i(X,2),Be=i(Ee,2);{var Ne=N=>{var ve=Qv(),pe=r(ve),je=i(r(pe),2),Ve=r(je),nt=i(pe,2),it=r(nt),et=i(r(it),2),bt=r(et),wt=r(bt),Ct=i(bt,2),Kt=r(Ct),Pt=i(Ct,2);{var Dt=H=>{var le=ts(),Te=r(le);z(()=>h(Te,`Ticker vor ${t(d).heartbeat_age_s??""}s`)),p(H,le)};O(Pt,H=>{var le;((le=t(d))==null?void 0:le.heartbeat_age_s)!=null&&H(Dt)})}var Lt=i(Pt,2);{var It=H=>{var le=ts(),Te=r(le);z(ze=>{Aa(le,"title",t(d).version),h(Te,ze)},[()=>t(d).version.split(" · ")[0]]),p(H,le)};O(Lt,H=>{var le;(le=t(d))!=null&&le.version&&H(It)})}var Tt=i(nt,2);{var P=H=>{var le=Ov(),Te=i(r(le),2),ze=r(Te);{var x=F=>{var ne=Tv(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).sessions)),p(F,ne)};O(ze,F=>{t(b).sessions&&F(x)})}var J=i(ze,2);{var he=F=>{var ne=zv(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).messages)),p(F,ne)};O(J,F=>{t(b).messages&&F(he)})}var W=i(J,2);{var xe=F=>{var ne=$v(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).tool_calls)),p(F,ne)};O(W,F=>{t(b).tool_calls&&F(xe)})}var Ie=i(W,2);{var Fe=F=>{var ne=Pv(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).total_tokens)),p(F,ne)};O(Ie,F=>{t(b).total_tokens&&F(Fe)})}var De=i(Ie,2);{var j=F=>{var ne=Dv(),_e=r(ne),ge=r(_e);z(()=>h(ge,t(b).active_time)),p(F,ne)};O(De,F=>{t(b).active_time&&F(j)})}var Q=i(Te,2);{var Z=F=>{var ne=Lv(),_e=i(tt(ne),2);Je(_e,21,()=>t(b).top_tools.slice(0,6),Xe,(ge,fe)=>{var me=Iv(),_t=r(me),zt=r(_t),Ot=i(_t,2),gn=r(Ot),da=i(Ot,2),k=r(da);z(()=>{h(zt,t(fe).name),At(gn,`display:block;height:100%;width:${t(fe).pct??""}%;background:var(--accent)`),h(k,`${t(fe).calls??""}× · ${t(fe).pct??""}%`)}),p(ge,me)}),p(F,ne)};O(Q,F=>{var ne;(ne=t(b).top_tools)!=null&&ne.length&&F(Z)})}p(H,le)};O(Tt,H=>{t(b)&&(t(b).sessions||t(b).total_tokens)&&H(P)})}var V=i(Tt,2);{var $=H=>{var le=Kv(),Te=i(r(le),2);{var ze=he=>{var W=Rv();Je(W,21,()=>t(f).user_facts,Xe,(xe,Ie)=>{var Fe=Bv(),De=r(Fe);z(()=>h(De,t(Ie))),p(xe,Fe)}),p(he,W)};O(Te,he=>{var W;(W=t(f).user_facts)!=null&&W.length&&he(ze)})}var x=i(Te,2);{var J=he=>{var W=Fv(),xe=r(W);z(()=>h(xe,t(f).memory)),p(he,W)};O(x,he=>{t(f).memory&&he(J)})}p(H,le)};O(V,H=>{var le,Te,ze;((Te=(le=t(f))==null?void 0:le.user_facts)!=null&&Te.length||(ze=t(f))!=null&&ze.memory)&&H($)})}var G=i(V,2),E=r(G),Y=r(E),ke=i(r(Y)),Pe=r(ke),C=i(E,2);{var R=H=>{var le=Nv();p(H,le)},se=H=>{var le=Vv();Je(le,21,()=>t(c),Xe,(Te,ze)=>{var x=Gv();Je(x,21,()=>Object.entries(t(ze)),Xe,(J,he)=>{var W=q(()=>Hn(t(he),2));let xe=()=>t(W)[0],Ie=()=>t(W)[1];var Fe=Ua(),De=tt(Fe);{var j=Q=>{var Z=qv(),F=r(Z),ne=r(F),_e=i(F);z(()=>{h(ne,`${xe()??""}:`),h(_e,` ${Ie()??""}`)}),p(Q,Z)};O(De,Q=>{Ie()&&Q(j)})}p(J,Fe)}),p(Te,x)}),p(H,le)};O(C,H=>{t(c).length===0?H(R):H(se,-1)})}var ie=i(G,2),ee=r(ie),Se=r(ee),de=i(r(Se)),A=r(de),U=i(ee,2);{var oe=H=>{var le=Wv();p(H,le)},Me=H=>{var le=Jv();Je(le,21,()=>t(B),Xe,(Te,ze)=>{var x=Hv(),J=r(x),he=i(J,2),W=r(he),xe=i(he,2);{var Ie=Z=>{var F=jv(),ne=r(F);z(()=>h(ne,t(ze).category)),p(Z,F)};O(xe,Z=>{t(ze).category&&Z(Ie)})}var Fe=i(xe,4);{var De=Z=>{var F=Uv(),ne=r(F);z(()=>h(ne,`${t(ze).use_count??""}× genutzt`)),p(Z,F)};O(Fe,Z=>{t(ze).use_count>0&&Z(De)})}var j=i(Fe,2),Q=r(j);z((Z,F)=>{At(x,`display:flex;align-items:center;gap:8px;font-size:12.5px;padding:4px 8px; + border-radius:6px;${Z??""}`),At(J,`width:7px;height:7px;border-radius:50%;flex-shrink:0; + background:${F??""}`),h(W,t(ze).name),h(Q,t(ze).source)},[()=>(t(ze).status||"").includes("enabled")?"":"opacity:.45",()=>(t(ze).status||"").includes("enabled")?"var(--accent)":"var(--mut)"]),p(Te,x)}),p(H,le)};O(U,H=>{t(v).length===0?H(oe):H(Me,-1)})}z(()=>{var H,le,Te,ze;h(Ve,t(o)?"…":"↻ Aktualisieren"),At(bt,`font-size:11px;${((H=t(d))==null?void 0:H.gateway_state)==="running"?"color:#7ee29a;border-color:rgba(126,226,154,.4)":"color:#ff9b95;border-color:rgba(255,155,149,.4)"}`),h(wt,`● ${((le=t(d))==null?void 0:le.gateway_state)??"offline"??""}`),At(Ct,`font-size:11px;${(Te=t(d))!=null&&Te.cron_running?"color:var(--accent);border-color:var(--accent)":"color:var(--mut)"}`),h(Kt,`⏱ Scheduler ${(ze=t(d))!=null&&ze.cron_running?"läuft":"inaktiv"}`),h(Pe,`(${t(c).length??""})`),h(A,`(${t(M)??""} aktiv von ${t(v).length??""})`)}),S("click",je,D),p(N,ve)};O(Be,N=>{t(l)&&N(Ne)})}var Ze=i(Be,2);{var ut=N=>{var ve=nu(),pe=i(r(ve),2),je=r(pe),Ve=i(r(je),2),nt=r(Ve),it=i(je,2);{var et=G=>{var E=Zv();p(G,E)};O(it,G=>{var E;((E=t(a))==null?void 0:E.whisper)==="not_installed"&&G(et)})}var bt=i(pe,2),wt=r(bt),Ct=i(r(wt),2),Kt=r(Ct),Pt=i(wt,2);{var Dt=G=>{var E=Yv(),Y=r(E),ke=r(Y);z(Pe=>h(ke,Pe),[()=>["# 1. Piper Binary (Linux x86_64)","mkdir -p /opt/mission-control/piper/voices","cd /tmp && wget -q https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_x86_64.tar.gz","tar -xzf piper_linux_x86_64.tar.gz -C /opt/mission-control/piper/ --strip-components=1","","# 2. Deutsche Stimme — Kerstin (weiblich, ~25 MB)","wget -q -O /opt/mission-control/piper/voices/de_DE-kerstin-low.onnx \\",' "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx"',"wget -q -O /opt/mission-control/piper/voices/de_DE-kerstin-low.onnx.json \\",' "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx.json"'].join(` +`)]),p(G,E)};O(Pt,G=>{var E;((E=t(a))==null?void 0:E.piper)!=="ready"&&G(Dt)})}var Lt=i(bt,2),It=r(Lt),Tt=i(r(It),2),P=r(Tt),V=i(It,2);{var $=G=>{var E=tu(),Y=i(r(E),4),ke=i(r(Y),2),Pe=r(ke);Pe.textContent=`Start-Service sshd +Set-Service -Name sshd -StartupType Automatic`;var C=i(Y,2),R=i(r(C),2),se=r(R);se.textContent='New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\\.ssh"';var ie=i(C,2);{var ee=A=>{var U=Xv(),oe=i(r(U),2),Me=r(oe),H=i(Me,2),le=r(H),Te=r(le);z(()=>h(Te,'echo "'+t(T)+'" >> "$env:USERPROFILE\\.ssh\\authorized_keys"')),S("click",Me,K),p(A,U)},Se=A=>{var U=eu();p(A,U)};O(ie,A=>{t(T)?A(ee):A(Se,-1)})}var de=i(ie,4);S("click",de,()=>{_(),ce("Status aktualisiert")}),p(G,E)};O(V,G=>{var E;(E=t(a))!=null&&E.ssh_ok||G($)})}z(()=>{var G,E,Y,ke,Pe,C;At(Ve,`font-size:11px;${((G=t(a))==null?void 0:G.whisper)!=="not_installed"?"color:#7ee29a":"color:#ff9b95"}`),h(nt,((E=t(a))==null?void 0:E.whisper)!=="not_installed"?"✓ OK":"✗ fehlt"),At(Ct,`font-size:11px;${((Y=t(a))==null?void 0:Y.piper)==="ready"?"color:#7ee29a":"color:#ff9b95"}`),h(Kt,((ke=t(a))==null?void 0:ke.piper)==="ready"?"✓ OK":"✗ fehlt"),At(Tt,`font-size:11px;${(Pe=t(a))!=null&&Pe.ssh_ok?"color:#7ee29a":"color:var(--mut)"}`),h(P,(C=t(a))!=null&&C.ssh_ok?"✓ verbunden":"optional")}),p(N,ve)};O(Ze,N=>{t(s)&&N(ut)})}var I=i(Ze,2),ue=r(I);{var Ae=N=>{var ve=au();p(N,ve)},He=N=>{var ve=iu();p(N,ve)};O(ue,N=>{var ve;((ve=t(a))==null?void 0:ve.hermes)==="ready"?N(Ae):N(He,-1)})}z(()=>{var N,ve;At(Re,`font-size:11px;${((N=t(a))==null?void 0:N.hermes)==="ready"?"color:#7ee29a;border-color:rgba(126,226,154,.4)":"color:#ff9b95;border-color:rgba(255,155,149,.4)"}`),h(te,`● Agent: ${((ve=t(a))==null?void 0:ve.hermes)==="ready"?"online":"offline"}`),At(X,`padding:4px 10px;font-size:12px;${t(l)?"border-color:var(--accent);color:var(--accent)":""}`)}),S("click",X,()=>{u(l,!t(l)),t(l)&&D()}),S("click",be,()=>{u(s,!t(s)),t(s)&&(_(),y())}),p(e,Oe),Pn()}qn(["click"]);let ns={};function lu(){const e=document.getElementById("top-active-text");e&&(e.classList.add("swap-flash"),setTimeout(()=>e.classList.remove("swap-flash"),900))}function as(e){var l;const n=document.getElementById("swdot"),a=document.getElementById("swlabel"),s=document.getElementById("top-active-text");if(!e)n&&(n.className="dot off"),a&&(a.textContent="Backend nicht erreichbar"),s&&(s.textContent="Backend offline"),is("Backend nicht erreichbar – läuft uvicorn?",!1);else{const o=(e.swap_url||"").replace(/^https?:\/\//,"");n&&(n.className="dot "+(e.swap_ok?"on":"off")),a&&(a.textContent=(e.swap_ok?"LLM-Engine: Online – ":"LLM-Engine: Offline – ")+o);const d=["running","ready","loading","starting"],c=(e.models||[]).find(f=>d.includes(f.state));if(s)if(c){const f=(l=c.meta)!=null&&l.ctx?` · ${Math.round(c.meta.ctx/1024)}k ctx`:"",b=c.state==="loading"||c.state==="starting"?' lädt…':"";s.innerHTML=`${c.name}${f}${b}`}else s.innerHTML='Kein Modell im VRAM';e.swap_ok?vu():is(`LLM-Engine nicht erreichbar unter ${o} – läuft der llama-swap Dienst?`,!0);const v={};for(const f of e.models||[])v[f.name]=f.state;for(const[f,b]of Object.entries(v)){const T=ns[f];if(T&&T!==b&&(b==="running"||b==="loading")){lu();break}}ns=v}ou(e),xi.set(e)}function ou(e){const n=document.getElementById("sec-chip"),a=document.getElementById("sec-chip-tx");!n||!a||(n.classList.toggle("ok",!!(e!=null&&e.secured)),a.textContent=e!=null&&e.secured?"Geschützt · Heimnetz":"Nur im Heimnetz (offen)")}function du(e){fa.set(e||[])}function cu(e){Pr.set(e)}function is(e,n){const a=document.getElementById("alert");a.className="alert"+(n?" warn":""),a.innerHTML=`${e}`,a.style.display="flex"}function vu(){const e=document.getElementById("alert");e&&(e.style.display="none")}const uu=e=>{var n;return(n=document.querySelector(`.nav-item[data-view="${e}"]`))==null?void 0:n.click()};function nr(e,n,a,s){const l=document.createElement("span");return l.className="upd-badge"+(n?" "+n:""),l.textContent=e,s&&(l.title=s),l.onclick=()=>uu(a),l}async function il(){try{const e=await we("/api/updates"),n=document.getElementById("update-badges");if(!n)return;const a=e.apt_cache_age_h,s=a!=null&&a>24,l=a!=null?` · apt-Cache: vor ${a}h`:"";n.innerHTML="",n.appendChild(nr(e.os>0?`OS: ${e.os} Updates`:s?"OS: ?":"OS: aktuell",e.os>0||s?"warn":"ok","server",e.os>0?`${e.os} Pakete${l}`:s?`apt-Cache veraltet (${a}h)`:`Keine Updates${l}`)),n.appendChild(nr(e.engine>0?"Engine: Update":"Engine: aktuell",e.engine>0?"warn":"ok","server")),n.appendChild(nr(e.models>0?`Modelle: ${e.models}`:"Modelle: aktuell",e.models>0?"warn":"ok","news"))}catch{}}async function Vi(){try{as(await we("/api/status"))}catch{as(null)}}async function rl(){try{du(await we("/api/jobs"))}catch{}}function sl(){const e=window.location.protocol==="https:"?"wss:":"ws:",n=new WebSocket(`${e}//${window.location.host}/api/system/stream`);n.onmessage=a=>{try{cu(JSON.parse(a.data))}catch{}},n.onclose=()=>{setTimeout(sl,3e3)},n.onerror=()=>n.close()}var cs;((cs=document.getElementById("logo"))==null?void 0:cs.innerHTML)!==void 0&&(document.getElementById("logo").innerHTML=Gi.logo);document.querySelectorAll("[data-ic]").forEach(e=>{e.innerHTML=Gi[e.dataset.ic||""]||""});const pu=[["overview",pd],["models",Cd],["activity",Fd],["server",Jd],["cookbook",$c],["connect",Yc],["news",ov],["guides",hv],["memory",Cv],["hermes",su]];for(const[e,n]of pu){const a=document.querySelector(`.view[data-view="${e}"]`);a&&Eo(n,{target:a})}Ho("overview");const ar=document.getElementById("token");ar&&(ar.value=al(),ar.addEventListener("change",e=>{Go(e.target.value),Vi()}));const ir=document.getElementById("hf-token");ir&&(ir.value=di(),ir.addEventListener("change",e=>Wo(e.target.value)));const rs=document.getElementById("nav-settings"),rr=document.getElementById("settings-modal"),ss=document.getElementById("sm-close");rs&&rr&&ss&&(rs.addEventListener("click",()=>rr.style.display="flex"),ss.addEventListener("click",()=>rr.style.display="none"));function fu(){const e=document.getElementById("clock");e&&(e.textContent=new Date().toTimeString().slice(0,5))}document.addEventListener("mc:refresh",Vi);Vi();rl();sl();setInterval(fu,1e3);setInterval(Vi,3e3);setInterval(rl,1500);il();setInterval(il,6e4);Hermes