var tl=Object.defineProperty;var Ai=e=>{throw TypeError(e)};var nl=(e,t,a)=>t in e?tl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var en=(e,t,a)=>nl(e,typeof t!="symbol"?t+"":t,a),Gr=(e,t,a)=>t.has(e)||Ai("Cannot "+a);var f=(e,t,a)=>(Gr(e,t,"read from private field"),a?a.call(e):t.get(e)),de=(e,t,a)=>t.has(e)?Ai("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,a),se=(e,t,a,r)=>(Gr(e,t,"write to private field"),r?r.call(e,a):t.set(e,a),a),$e=(e,t,a)=>(Gr(e,t,"access private method"),a);var hi=Array.isArray,al=Array.prototype.indexOf,Sr=Array.prototype.includes,Dr=Array.from,rl=Object.defineProperty,Ya=Object.getOwnPropertyDescriptor,il=Object.getOwnPropertyDescriptors,sl=Object.prototype,ll=Array.prototype,is=Object.getPrototypeOf,Ci=Object.isExtensible;const ol=()=>{};function dl(e){for(var t=0;t{e=r,t=i});return{promise:a,resolve:e,reject:t}}function ir(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);const a=[];for(const r of e)if(a.push(r),a.length===t)break;return a}const zt=2,Ra=4,Or=8,ls=1<<24,Sn=16,Tn=32,na=64,ti=128,gn=512,St=1024,Ct=2048,qn=4096,Ut=8192,_n=16384,Ka=32768,ni=1<<25,qa=65536,Er=1<<17,cl=1<<18,Ga=1<<19,ul=1<<20,Dn=1<<25,ya=65536,Tr=1<<21,Ta=1<<22,ta=1<<23,$a=Symbol("$state"),vl=Symbol(""),br=Symbol("attributes"),ai=Symbol("class"),ri=Symbol("style"),Va=Symbol("text"),yr=Symbol("form reset"),Rr=new class extends Error{constructor(){super(...arguments);en(this,"name","StaleReactionError");en(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var ts;const fl=!!((ts=globalThis.document)!=null&&ts.contentType)&&globalThis.document.contentType.includes("xml");function os(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function pl(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function hl(e,t,a){throw new Error("https://svelte.dev/e/each_key_duplicate")}function gl(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function _l(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function ml(e){throw new Error("https://svelte.dev/e/effect_orphan")}function bl(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function yl(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function wl(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function xl(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function kl(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Ml=1,Sl=2,ds=4,El=8,Tl=16,$l=1,Al=2,Mt=Symbol("uninitialized"),cs="http://www.w3.org/1999/xhtml",Cl="http://www.w3.org/2000/svg",Ll="http://www.w3.org/1998/Math/MathML";function zl(){console.warn("https://svelte.dev/e/derived_inert")}function Pl(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Dl(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function us(e){return e===this.v}function Ol(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function vs(e){return!Ol(e,this.v)}let Lt=null;function Ba(e){Lt=e}function ra(e,t=!1,a){Lt={p:Lt,i:!1,c:null,e:null,s:e,x:null,r:me,l:null}}function ia(e){var t=Lt,a=t.e;if(a!==null){t.e=null;for(var r of a)Ds(r)}return t.i=!0,Lt=t.p,{}}function fs(){return!0}let la=[];function ps(){var e=la;la=[],dl(e)}function ga(e){if(la.length===0&&!Xa){var t=la;queueMicrotask(()=>{t===la&&ps()})}la.push(e)}function Rl(){for(;la.length>0;)ps()}function hs(e){var t=me;if(t===null)return he.f|=ta,e;if((t.f&Ka)===0&&(t.f&Ra)===0)throw e;Xn(e,t)}function Xn(e,t){if(!(t!==null&&(t.f&_n)!==0)){for(;t!==null;){if((t.f&ti)!==0){if((t.f&Ka)===0)throw e;try{t.b.error(e);return}catch(a){e=a}}t=t.parent}throw e}}const ql=-7169;function gt(e,t){e.f=e.f&ql|t}function gi(e){(e.f&gn)!==0||e.deps===null?gt(e,St):gt(e,qn)}function gs(e){if(e!==null)for(const t of e)(t.f&zt)===0||(t.f&ya)===0||(t.f^=ya,gs(t.deps))}function _s(e,t,a){(e.f&Ct)!==0?t.add(e):(e.f&qn)!==0&&a.add(e),gs(e.deps),gt(e,St)}function Bl(e){let t=0,a=xa(0),r;return()=>{ki()&&(n(a),qr(()=>(t===0&&(r=Ua(()=>e(()=>er(a)))),t+=1,()=>{ga(()=>{t-=1,t===0&&(r==null||r(),r=void 0,er(a))})})))}}var Il=qa|Ga;function Nl(e,t,a,r){new Fl(e,t,a,r)}var un,pi,vn,ua,Wt,fn,Gt,an,Fn,va,Yn,Aa,or,dr,Kn,Lr,ft,Kl,Gl,Ul,ii,wr,xr,si,li;class Fl{constructor(t,a,r,i){de(this,ft);en(this,"parent");en(this,"is_pending",!1);en(this,"transform_error");de(this,un);de(this,pi,null);de(this,vn);de(this,ua);de(this,Wt);de(this,fn,null);de(this,Gt,null);de(this,an,null);de(this,Fn,null);de(this,va,0);de(this,Yn,0);de(this,Aa,!1);de(this,or,new Set);de(this,dr,new Set);de(this,Kn,null);de(this,Lr,Bl(()=>(se(this,Kn,xa(f(this,va))),()=>{se(this,Kn,null)})));var o;se(this,un,t),se(this,vn,a),se(this,ua,d=>{var c=me;c.b=this,c.f|=ti,r(d)}),this.parent=me.b,this.transform_error=i??((o=this.parent)==null?void 0:o.transform_error)??(d=>d),se(this,Wt,Si(()=>{$e(this,ft,ii).call(this)},Il))}defer_effect(t){_s(t,f(this,or),f(this,dr))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!f(this,vn).pending}update_pending_count(t,a){$e(this,ft,si).call(this,t,a),se(this,va,f(this,va)+t),!(!f(this,Kn)||f(this,Aa))&&(se(this,Aa,!0),ga(()=>{se(this,Aa,!1),f(this,Kn)&&Ia(f(this,Kn),f(this,va))}))}get_effect_pending(){return f(this,Lr).call(this),n(f(this,Kn))}error(t){if(!f(this,vn).onerror&&!f(this,vn).failed)throw t;W!=null&&W.is_fork?(f(this,fn)&&W.skip_effect(f(this,fn)),f(this,Gt)&&W.skip_effect(f(this,Gt)),f(this,an)&&W.skip_effect(f(this,an)),W.oncommit(()=>{$e(this,ft,li).call(this,t)})):$e(this,ft,li).call(this,t)}}un=new WeakMap,pi=new WeakMap,vn=new WeakMap,ua=new WeakMap,Wt=new WeakMap,fn=new WeakMap,Gt=new WeakMap,an=new WeakMap,Fn=new WeakMap,va=new WeakMap,Yn=new WeakMap,Aa=new WeakMap,or=new WeakMap,dr=new WeakMap,Kn=new WeakMap,Lr=new WeakMap,ft=new WeakSet,Kl=function(){try{se(this,fn,pn(()=>f(this,ua).call(this,f(this,un))))}catch(t){this.error(t)}},Gl=function(t){const a=f(this,vn).failed;a&&se(this,an,pn(()=>{a(f(this,un),()=>t,()=>()=>{})}))},Ul=function(){const t=f(this,vn).pending;t&&(this.is_pending=!0,se(this,Gt,pn(()=>t(f(this,un)))),ga(()=>{var a=se(this,Fn,document.createDocumentFragment()),r=Hn();a.append(r),se(this,fn,$e(this,ft,xr).call(this,()=>pn(()=>f(this,ua).call(this,r)))),f(this,Yn)===0&&(f(this,un).before(a),se(this,Fn,null),ma(f(this,Gt),()=>{se(this,Gt,null)}),$e(this,ft,wr).call(this,W))}))},ii=function(){try{if(this.is_pending=this.has_pending_snippet(),se(this,Yn,0),se(this,va,0),se(this,fn,pn(()=>{f(this,ua).call(this,f(this,un))})),f(this,Yn)>0){var t=se(this,Fn,document.createDocumentFragment());Ti(f(this,fn),t);const a=f(this,vn).pending;se(this,Gt,pn(()=>a(f(this,un))))}else $e(this,ft,wr).call(this,W)}catch(a){this.error(a)}},wr=function(t){this.is_pending=!1,t.transfer_effects(f(this,or),f(this,dr))},xr=function(t){var a=me,r=he,i=Lt;Bn(f(this,Wt)),mn(f(this,Wt)),Ba(f(this,Wt).ctx);try{return wa.ensure(),t()}catch(o){return hs(o),null}finally{Bn(a),mn(r),Ba(i)}},si=function(t,a){var r;if(!this.has_pending_snippet()){this.parent&&$e(r=this.parent,ft,si).call(r,t,a);return}se(this,Yn,f(this,Yn)+t),f(this,Yn)===0&&($e(this,ft,wr).call(this,a),f(this,Gt)&&ma(f(this,Gt),()=>{se(this,Gt,null)}),f(this,Fn)&&(f(this,un).before(f(this,Fn)),se(this,Fn,null)))},li=function(t){f(this,fn)&&(Qt(f(this,fn)),se(this,fn,null)),f(this,Gt)&&(Qt(f(this,Gt)),se(this,Gt,null)),f(this,an)&&(Qt(f(this,an)),se(this,an,null));var a=f(this,vn).onerror;let r=f(this,vn).failed;var i=!1,o=!1;const d=()=>{if(i){Dl();return}i=!0,o&&kl(),f(this,an)!==null&&ma(f(this,an),()=>{se(this,an,null)}),$e(this,ft,xr).call(this,()=>{$e(this,ft,ii).call(this)})},c=u=>{try{o=!0,a==null||a(u,d),o=!1}catch(v){Xn(v,f(this,Wt)&&f(this,Wt).parent)}r&&se(this,an,$e(this,ft,xr).call(this,()=>{try{return pn(()=>{var v=me;v.b=this,v.f|=ti,r(f(this,un),()=>u,()=>d)})}catch(v){return Xn(v,f(this,Wt).parent),null}}))};ga(()=>{var u;try{u=this.transform_error(t)}catch(v){Xn(v,f(this,Wt)&&f(this,Wt).parent);return}u!==null&&typeof u=="object"&&typeof u.then=="function"?u.then(c,v=>Xn(v,f(this,Wt)&&f(this,Wt).parent)):c(u)})};function Hl(e,t,a,r){const i=_i;var o=e.filter(w=>!w.settled),d=t.map(i);if(a.length===0&&o.length===0){r(d);return}var c=me,u=Vl(),v=o.length===1?o[0].promise:o.length>1?Promise.all(o.map(w=>w.promise)):null;function h(w){if((c.f&_n)===0){u();try{r([...d,...w])}catch(A){Xn(A,c)}$r()}}var E=ms();if(a.length===0){v.then(()=>h([])).finally(E);return}function p(){Promise.all(a.map(w=>Wl(w))).then(h).catch(w=>Xn(w,c)).finally(E)}v?v.then(()=>{u(),p(),$r()}):p()}function Vl(){var e=me,t=he,a=Lt,r=W;return function(o=!0){Bn(e),mn(t),Ba(a),o&&(e.f&_n)===0&&(r==null||r.activate(),r==null||r.apply())}}function $r(e=!0){Bn(null),mn(null),Ba(null),e&&(W==null||W.deactivate())}function ms(){var e=me,t=e.b,a=W,r=!!(t!=null&&t.is_rendered());return t==null||t.update_pending_count(1,a),a.increment(r,e),()=>{t==null||t.update_pending_count(-1,a),a.decrement(r,e)}}function _i(e){var t=zt|Ct;return me!==null&&(me.f|=Ga),{ctx:Lt,deps:null,effects:null,equals:us,f:t,fn:e,reactions:null,rv:0,v:Mt,wv:0,parent:me,ac:null}}const Wa=Symbol("obsolete");function Wl(e,t,a){let r=me;r===null&&pl();var i=void 0,o=xa(Mt),d=!he,c=new Set;return uo(()=>{var w,A;var u=me,v=ss();i=v.promise;try{Promise.resolve(e()).then(v.resolve,L=>{L!==Rr&&v.reject(L)}).finally($r)}catch(L){v.reject(L),$r()}var h=W;if(d){if((u.f&Ka)!==0)var E=ms();if((w=r.b)!=null&&w.is_rendered())(A=h.async_deriveds.get(u))==null||A.reject(Wa);else for(const L of c.values())L.reject(Wa);c.add(v),h.async_deriveds.set(u,v)}const p=(L,M=void 0)=>{E==null||E(),c.delete(v),M!==Wa&&(h.activate(),M?(o.f|=ta,Ia(o,M)):((o.f&ta)!==0&&(o.f^=ta),Ia(o,L)),h.deactivate())};v.promise.then(p,L=>p(null,L||"unknown"))}),Ps(()=>{for(const u of c)u.reject(Wa)}),new Promise(u=>{function v(h){function E(){h===i?u(o):v(i)}h.then(E,E)}v(i)})}function I(e){const t=_i(e);return Fs(t),t}function jl(e){const t=_i(e);return t.equals=vs,t}function Jl(e){var t=e.effects;if(t!==null){e.effects=null;for(var a=0;athis.schedule(r)){var r=f(this,zn).get(t);if(r){f(this,zn).delete(t);for(var i of r.d)gt(i,Ct),a(i);for(i of r.m)gt(i,qn),a(i)}f(this,Oa).add(t)}capture(t,a,r=!1){t.v!==Mt&&!this.previous.has(t)&&this.previous.set(t,t.v),(t.f&ta)===0&&(this.current.set(t,[a,r]),At==null||At.set(t,a)),this.is_fork||(t.v=a)}activate(){W=this}deactivate(){W=null,At=null}flush(){try{Hr=!0,W=this,$e(this,Be,ja).call(this)}finally{Li=0,oi=null,Ea=null,kr=null,Hr=!1,W=null,At=null,_a.clear()}}discard(){var t;for(const a of f(this,za))a(this);f(this,za).clear();for(const a of this.async_deriveds.values())a.reject(Wa);$e(this,Be,Ja).call(this),(t=f(this,Da))==null||t.resolve()}register_created_effect(t){f(this,cr).push(t)}increment(t,a){if(se(this,Pa,f(this,Pa)+1),t){let r=f(this,Gn).get(a)??0;f(this,Gn).set(a,r+1)}}decrement(t,a){if(se(this,Pa,f(this,Pa)-1),t){let r=f(this,Gn).get(a)??0;r===1?f(this,Gn).delete(a):f(this,Gn).set(a,r-1)}f(this,pa)||(se(this,pa,!0),ga(()=>{se(this,pa,!1),this.linked&&this.flush()}))}transfer_effects(t,a){for(const r of t)f(this,Un).add(r);for(const r of a)f(this,xn).add(r);t.clear(),a.clear()}oncommit(t){f(this,La).add(t)}ondiscard(t){f(this,za).add(t)}settled(){return(f(this,Da)??se(this,Da,ss())).promise}static ensure(){if(W===null){const t=W=new zr;!Hr&&!Xa&&ga(()=>{f(t,Ca)||t.flush()})}return W}apply(){{At=null;return}}schedule(t){var i;if(oi=t,(i=t.b)!=null&&i.is_pending&&(t.f&(Ra|Or|ls))!==0&&(t.f&Ka)===0){t.b.defer_effect(t);return}for(var a=t;a.parent!==null;){a=a.parent;var r=a.f;if(Ea!==null&&a===me&&(he===null||(he.f&zt)===0))return;if((r&(na|Tn))!==0){if((r&St)===0)return;a.f^=St}}f(this,jt).push(a)}};Ca=new WeakMap,Zn=new WeakMap,fa=new WeakMap,La=new WeakMap,za=new WeakMap,Pa=new WeakMap,Gn=new WeakMap,Da=new WeakMap,jt=new WeakMap,cr=new WeakMap,Un=new WeakMap,xn=new WeakMap,zn=new WeakMap,Oa=new WeakMap,pa=new WeakMap,Be=new WeakSet,di=function(){if(this.is_fork)return!0;for(const r of f(this,Gn).keys()){for(var t=r,a=!1;t.parent!==null;){if(f(this,zn).has(t)){a=!0;break}t=t.parent}if(!a)return!0}return!1},ja=function(){var u,v,h,E;se(this,Ca,!0),Li++>1e3&&($e(this,Be,Ja).call(this),eo());for(const p of f(this,Un))f(this,xn).delete(p),gt(p,Ct),this.schedule(p);for(const p of f(this,xn))gt(p,qn),this.schedule(p);const t=f(this,jt);se(this,jt,[]),this.apply();var a=Ea=[],r=[],i=kr=[];for(const p of t)try{$e(this,Be,ci).call(this,p,a,r)}catch(w){throw Ss(p),$e(this,Be,di).call(this)||this.discard(),w}if(W=null,i.length>0){var o=zr.ensure();for(const p of i)o.schedule(p)}if(Ea=null,kr=null,$e(this,Be,di).call(this)){$e(this,Be,Sa).call(this,r),$e(this,Be,Sa).call(this,a);for(const[p,w]of f(this,zn))Ms(p,w);i.length>0&&$e(u=W,Be,ja).call(u);return}const d=$e(this,Be,ws).call(this);if(d){$e(this,Be,Sa).call(this,r),$e(this,Be,Sa).call(this,a),$e(v=d,Be,xs).call(v,this);return}f(this,Un).clear(),f(this,xn).clear();for(const p of f(this,La))p(this);f(this,La).clear(),Za=this,zi(r),zi(a),Za=null,(h=f(this,Da))==null||h.resolve();var c=W;if(f(this,Pa)===0&&(f(this,jt).length===0||c!==null)&&$e(this,Be,Ja).call(this),f(this,jt).length>0)if(c!==null){const p=c;f(p,jt).push(...f(this,jt).filter(w=>!f(p,jt).includes(w)))}else c=this;c!==null&&$e(E=c,Be,ja).call(E)},ci=function(t,a,r){t.f^=St;for(var i=t.first;i!==null;){var o=i.f,d=(o&(Tn|na))!==0,c=d&&(o&St)!==0,u=c||(o&Ut)!==0||f(this,zn).has(i);if(!u&&i.fn!==null){d?i.f^=St:(o&Ra)!==0?a.push(i):pr(i)&&((o&Sn)!==0&&f(this,xn).add(i),Na(i));var v=i.first;if(v!==null){i=v;continue}}for(;i!==null;){var h=i.next;if(h!==null){i=h;break}i=i.parent}}},ws=function(){for(var t=f(this,Zn);t!==null;){if(!t.is_fork){for(const[a,[,r]]of this.current)if(t.current.has(a)&&!r)return t}t=f(t,Zn)}return null},xs=function(t){var r;for(const[i,o]of t.current)!this.previous.has(i)&&t.previous.has(i)&&this.previous.set(i,t.previous.get(i)),this.current.set(i,o);for(const[i,o]of t.async_deriveds){const d=this.async_deriveds.get(i);d&&o.promise.then(d.resolve).catch(d.reject)}t.async_deriveds.clear(),this.transfer_effects(f(t,Un),f(t,xn));const a=i=>{var o=i.reactions;if(o!==null)for(const u of o){var d=u.f;if((d&zt)!==0)a(u);else{var c=u;d&(Ta|Sn)&&!this.async_deriveds.has(c)&&(f(this,xn).delete(c),gt(c,Ct),this.schedule(c))}}};for(const i of this.current.keys())a(i);this.oncommit(()=>t.discard()),$e(r=t,Be,Ja).call(r),W=this,$e(this,Be,ja).call(this)},Sa=function(t){for(var a=0;a!p.current.get(w)[1]);if(!(!f(p,Ca)||i.length===0)){var o=i.filter(w=>!this.current.has(w));if(o.length===0)t&&p.discard();else if(a.length>0){if(t)for(const w of f(this,Oa))p.unskip_effect(w,A=>{var L;(A.f&(Sn|Ta))!==0?p.schedule(A):$e(L=p,Be,Sa).call(L,[A])});p.activate();var d=new Set,c=new Map;for(var u of a)ks(u,o,d,c);c=new Map;var v=[...p.current].filter(([w,A])=>{const L=this.current.get(w);return L?L[0]!==A[0]||L[1]!==A[1]:!0}).map(([w])=>w);if(v.length>0)for(const w of f(this,cr))(w.f&(_n|Ut|Er))===0&&bi(w,v,c)&&((w.f&(Ta|Sn))!==0?(gt(w,Ct),p.schedule(w)):f(p,Un).add(w));if(f(p,jt).length>0&&!f(p,pa)){p.apply();for(var h of f(p,jt))$e(E=p,Be,ci).call(E,h,[],[]);se(p,jt,[])}p.deactivate()}}}},Ja=function(){if(this.linked){var t=f(this,Zn),a=f(this,fa);t===null?Ur=a:se(t,fa,a),a===null?Ma=t:se(a,Zn,t),this.linked=!1}};let wa=zr;function Xl(e){var t=Xa;Xa=!0;try{for(var a;;){if(Rl(),W===null)return a;W.flush()}}finally{Xa=t}}function eo(){try{bl()}catch(e){Xn(e,oi)}}let wn=null;function zi(e){var t=e.length;if(t!==0){for(var a=0;a0)){_a.clear();for(const i of wn){if((i.f&(_n|Ut))!==0)continue;const o=[i];let d=i.parent;for(;d!==null;)wn.has(d)&&(wn.delete(d),o.push(d)),d=d.parent;for(let c=o.length-1;c>=0;c--){const u=o[c];(u.f&(_n|Ut))===0&&Na(u)}}wn.clear()}}wn=null}}function ks(e,t,a,r){if(!a.has(e)&&(a.add(e),e.reactions!==null))for(const i of e.reactions){const o=i.f;(o&zt)!==0?ks(i,t,a,r):(o&(Ta|Sn))!==0&&(o&Ct)===0&&bi(i,t,r)&&(gt(i,Ct),yi(i))}}function bi(e,t,a){const r=a.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const i of e.deps){if(Sr.call(t,i))return!0;if((i.f&zt)!==0&&bi(i,t,a))return a.set(i,!0),!0}return a.set(e,!1),!1}function yi(e){W.schedule(e)}function Ms(e,t){if(!((e.f&Tn)!==0&&(e.f&St)!==0)){(e.f&Ct)!==0?t.d.push(e):(e.f&qn)!==0&&t.m.push(e),gt(e,St);for(var a=e.first;a!==null;)Ms(a,t),a=a.next}}function Ss(e){gt(e,St);for(var t=e.first;t!==null;)Ss(t),t=t.next}let Ar=new Set;const _a=new Map;let Es=!1;function xa(e,t){var a={f:0,v:e,reactions:null,equals:us,rv:0,wv:0};return a}function B(e,t){const a=xa(e);return Fs(a),a}function to(e,t=!1,a=!0){const r=xa(e);return t||(r.equals=vs),r}function g(e,t,a=!1){he!==null&&(!En||(he.f&Er)!==0)&&fs()&&(he.f&(zt|Sn|Ta|Er))!==0&&(On===null||!On.has(e))&&xl();let r=a?Dt(t):t;return Ia(e,r,kr)}function Ia(e,t,a=null){if(!e.equals(t)){_a.set(e,aa?t:e.v);var r=wa.ensure();if(r.capture(e,t),(e.f&zt)!==0){const i=e;(e.f&Ct)!==0&&mi(i),At===null&&gi(i)}e.wv=Gs(),Ts(e,Ct,a),me!==null&&(me.f&St)!==0&&(me.f&(Tn|na))===0&&(cn===null?fo([e]):cn.push(e)),!r.is_fork&&Ar.size>0&&!Es&&no()}return t}function no(){Es=!1;for(const e of Ar){(e.f&St)!==0&>(e,qn);let t;try{t=pr(e)}catch{t=!0}t&&Na(e)}Ar.clear()}function er(e){g(e,e.v+1)}function Ts(e,t,a){var r=e.reactions;if(r!==null)for(var i=r.length,o=0;o{if(ba===o)return c();var u=he,v=ba;mn(null),qi(o);var h=c();return mn(u),qi(v),h};return r&&a.set("length",B(e.length)),new Proxy(e,{defineProperty(c,u,v){(!("value"in v)||v.configurable===!1||v.enumerable===!1||v.writable===!1)&&yl();var h=a.get(u);return h===void 0?d(()=>{var E=B(v.value);return a.set(u,E),E}):g(h,v.value,!0),!0},deleteProperty(c,u){var v=a.get(u);if(v===void 0){if(u in c){const h=d(()=>B(Mt));a.set(u,h),er(i)}}else g(v,Mt),er(i);return!0},get(c,u,v){var w;if(u===$a)return e;var h=a.get(u),E=u in c;if(h===void 0&&(!E||(w=Ya(c,u))!=null&&w.writable)&&(h=d(()=>{var A=Dt(E?c[u]:Mt),L=B(A);return L}),a.set(u,h)),h!==void 0){var p=n(h);return p===Mt?void 0:p}return Reflect.get(c,u,v)},getOwnPropertyDescriptor(c,u){var v=Reflect.getOwnPropertyDescriptor(c,u);if(v&&"value"in v){var h=a.get(u);h&&(v.value=n(h))}else if(v===void 0){var E=a.get(u),p=E==null?void 0:E.v;if(E!==void 0&&p!==Mt)return{enumerable:!0,configurable:!0,value:p,writable:!0}}return v},has(c,u){var p;if(u===$a)return!0;var v=a.get(u),h=v!==void 0&&v.v!==Mt||Reflect.has(c,u);if(v!==void 0||me!==null&&(!h||(p=Ya(c,u))!=null&&p.writable)){v===void 0&&(v=d(()=>{var w=h?Dt(c[u]):Mt,A=B(w);return A}),a.set(u,v));var E=n(v);if(E===Mt)return!1}return h},set(c,u,v,h){var re;var E=a.get(u),p=u in c;if(r&&u==="length")for(var w=v;wB(Mt)),a.set(w+"",A))}if(E===void 0)(!p||(re=Ya(c,u))!=null&&re.writable)&&(E=d(()=>B(void 0)),g(E,Dt(v)),a.set(u,E));else{p=E.v!==Mt;var L=d(()=>Dt(v));g(E,L)}var M=Reflect.getOwnPropertyDescriptor(c,u);if(M!=null&&M.set&&M.set.call(h,v),!p){if(r&&typeof u=="string"){var R=a.get("length"),Se=Number(u);Number.isInteger(Se)&&Se>=R.v&&g(R,Se+1)}er(i)}return!0},ownKeys(c){n(i);var u=Reflect.ownKeys(c).filter(E=>{var p=a.get(E);return p===void 0||p.v!==Mt});for(var[v,h]of a)h.v!==Mt&&!(v in c)&&u.push(v);return u},setPrototypeOf(){wl()}})}function Pi(e){try{if(e!==null&&typeof e=="object"&&$a in e)return e[$a]}catch{}return e}function ao(e,t){return Object.is(Pi(e),Pi(t))}var Di,$s,As,Cs;function ro(){if(Di===void 0){Di=window,$s=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,a=Text.prototype;As=Ya(t,"firstChild").get,Cs=Ya(t,"nextSibling").get,Ci(e)&&(e[ai]=void 0,e[br]=null,e[ri]=void 0,e.__e=void 0),Ci(a)&&(a[Va]=void 0)}}function Hn(e=""){return document.createTextNode(e)}function ea(e){return As.call(e)}function fr(e){return Cs.call(e)}function l(e,t){return ea(e)}function _t(e,t=!1){{var a=ea(e);return a instanceof Comment&&a.data===""?fr(a):a}}function s(e,t=1,a=!1){let r=e;for(;t--;)r=fr(r);return r}function io(e){e.textContent=""}function Ls(){return!1}function zs(e,t,a){return t==null||t===cs?a?document.createElement(e,{is:a}):document.createElement(e):a?document.createElementNS(t,e,{is:a}):document.createElementNS(t,e)}let Oi=!1;function so(){Oi||(Oi=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const a of e.target.elements)(t=a[yr])==null||t.call(a)})},{capture:!0}))}function wi(e){var t=he,a=me;mn(null),Bn(null);try{return e()}finally{mn(t),Bn(a)}}function xi(e,t,a,r=a){e.addEventListener(t,()=>wi(a));const i=e[yr];i?e[yr]=()=>{i(),r(!0)}:e[yr]=()=>r(!0),so()}function lo(e){me===null&&(he===null&&ml(),_l()),aa&&gl()}function oo(e,t){var a=t.last;a===null?t.last=t.first=e:(a.next=e,e.prev=a,t.last=e)}function Vn(e,t){var a=me;a!==null&&(a.f&Ut)!==0&&(e|=Ut);var r={ctx:Lt,deps:null,nodes:null,f:e|Ct|gn,first:null,fn:t,last:null,next:null,parent:a,b:a&&a.b,prev:null,teardown:null,wv:0,ac:null};W==null||W.register_created_effect(r);var i=r;if((e&Ra)!==0)Ea!==null?Ea.push(r):wa.ensure().schedule(r);else if(t!==null){try{Na(r)}catch(d){throw Qt(r),d}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&(i.f&Ga)===0&&(i=i.first,(e&Sn)!==0&&(e&qa)!==0&&i!==null&&(i.f|=qa))}if(i!==null&&(i.parent=a,a!==null&&oo(i,a),he!==null&&(he.f&zt)!==0&&(e&na)===0)){var o=he;(o.effects??(o.effects=[])).push(i)}return r}function ki(){return he!==null&&!En}function Ps(e){const t=Vn(Or,null);return gt(t,St),t.teardown=e,t}function Mi(e){lo();var t=me.f,a=!he&&(t&Tn)!==0&&Lt!==null&&!Lt.i;if(a){var r=Lt;(r.e??(r.e=[])).push(e)}else return Ds(e)}function Ds(e){return Vn(Ra|ul,e)}function co(e){wa.ensure();const t=Vn(na|Ga,e);return(a={})=>new Promise(r=>{a.outro?ma(t,()=>{Qt(t),r(void 0)}):(Qt(t),r(void 0))})}function Os(e){return Vn(Ra,e)}function uo(e){return Vn(Ta|Ga,e)}function qr(e,t=0){return Vn(Or|t,e)}function O(e,t=[],a=[],r=[]){Hl(r,t,a,i=>{Vn(Or,()=>{e(...i.map(n))})})}function Si(e,t=0){var a=Vn(Sn|t,e);return a}function pn(e){return Vn(Tn|Ga,e)}function Rs(e){var t=e.teardown;if(t!==null){const a=aa,r=he;Ri(!0),mn(null);try{t.call(null)}finally{Ri(a),mn(r)}}}function Ei(e,t=!1){var a=e.first;for(e.first=e.last=null;a!==null;){const i=a.ac;i!==null&&wi(()=>{i.abort(Rr)});var r=a.next;(a.f&na)!==0?a.parent=null:Qt(a,t),a=r}}function vo(e){for(var t=e.first;t!==null;){var a=t.next;(t.f&Tn)===0&&Qt(t),t=a}}function Qt(e,t=!0){var a=!1;(t||(e.f&cl)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(qs(e.nodes.start,e.nodes.end),a=!0),e.f|=ni,Ei(e,t&&!a),sr(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(const o of r)o.stop();Rs(e),e.f^=ni,e.f|=_n;var i=e.parent;i!==null&&i.first!==null&&Bs(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function qs(e,t){for(;e!==null;){var a=e===t?null:fr(e);e.remove(),e=a}}function Bs(e){var t=e.parent,a=e.prev,r=e.next;a!==null&&(a.next=r),r!==null&&(r.prev=a),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=a))}function ma(e,t,a=!0){var r=[];Is(e,r,!0);var i=()=>{a&&Qt(e),t&&t()},o=r.length;if(o>0){var d=()=>--o||i();for(var c of r)c.out(d)}else i()}function Is(e,t,a){if((e.f&Ut)===0){e.f^=Ut;var r=e.nodes&&e.nodes.t;if(r!==null)for(const c of r)(c.is_global||a)&&t.push(c);for(var i=e.first;i!==null;){var o=i.next;if((i.f&na)===0){var d=(i.f&qa)!==0||(i.f&Tn)!==0&&(e.f&Sn)!==0;Is(i,t,d?a:!1)}i=o}}}function Cr(e){Ns(e,!0)}function Ns(e,t){if((e.f&Ut)!==0){e.f^=Ut,(e.f&St)===0&&(gt(e,Ct),wa.ensure().schedule(e));for(var a=e.first;a!==null;){var r=a.next,i=(a.f&qa)!==0||(a.f&Tn)!==0;Ns(a,i?t:!1),a=r}var o=e.nodes&&e.nodes.t;if(o!==null)for(const d of o)(d.is_global||t)&&d.in()}}function Ti(e,t){if(e.nodes)for(var a=e.nodes.start,r=e.nodes.end;a!==null;){var i=a===r?null:fr(a);t.append(a),a=i}}let Mr=!1,aa=!1;function Ri(e){aa=e}let he=null,En=!1;function mn(e){he=e}let me=null;function Bn(e){me=e}let On=null;function Fs(e){he!==null&&(On??(On=new Set)).add(e)}let Jt=null,nn=0,cn=null;function fo(e){cn=e}let Ks=1,oa=0,ba=oa;function qi(e){ba=e}function Gs(){return++Ks}function pr(e){var t=e.f;if((t&Ct)!==0)return!0;if(t&zt&&(e.f&=~ya),(t&qn)!==0){for(var a=e.deps,r=a.length,i=0;ie.wv)return!0}(t&gn)!==0&&At===null&>(e,St)}return!1}function Us(e,t,a=!0){var r=e.reactions;if(r!==null&&!(On!==null&&On.has(e)))for(var i=0;i{e.ac.abort(Rr)}),e.ac=null);try{e.f|=Tr;var h=e.fn,E=h();e.f|=Ka;var p=e.deps,w=W==null?void 0:W.is_fork;if(Jt!==null){var A;if(w||sr(e,nn),p!==null&&nn>0)for(p.length=nn+Jt.length,A=0;A{throw R});throw p}}finally{e[da]=t,delete e.currentTarget,mn(h),Bn(E)}}}var ns;const Vr=((ns=globalThis==null?void 0:globalThis.window)==null?void 0:ns.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function mo(e){return(Vr==null?void 0:Vr.createHTML(e))??e}function bo(e){var t=zs("template");return t.innerHTML=mo(e.replaceAll("","")),t.content}function Fa(e,t){var a=me;a.nodes===null&&(a.nodes={start:e,end:t,a:null,t:null})}function k(e,t){var a=(t&$l)!==0,r=(t&Al)!==0,i,o=!e.startsWith("");return()=>{i===void 0&&(i=bo(o?e:""+e),a||(i=ea(i)));var d=r||$s?document.importNode(i,!0):i.cloneNode(!0);if(a){var c=ea(d),u=d.lastChild;Fa(c,u)}else Fa(d,d);return d}}function tr(e=""){{var t=Hn(e+"");return Fa(t,t),t}}function Br(){var e=document.createDocumentFragment(),t=document.createComment(""),a=Hn();return e.append(t,a),Fa(t,a),e}function b(e,t){e!==null&&e.before(t)}function m(e,t){var a=t==null?"":typeof t=="object"?`${t}`:t;a!==(e[Va]??(e[Va]=e.nodeValue))&&(e[Va]=a,e.nodeValue=`${a}`)}function yo(e,t){return wo(e,t)}const _r=new Map;function wo(e,{target:t,anchor:a,props:r={},events:i,context:o,intro:d=!0,transformError:c}){ro();var u=void 0,v=co(()=>{var h=a??t.appendChild(Hn());Nl(h,{pending:()=>{}},w=>{ra({});var A=Lt;o&&(A.c=o),i&&(r.$$events=i),u=e(w,r)||{},ia()},c);var E=new Set,p=w=>{for(var A=0;A{var M;for(var w of E)for(const R of[t,document]){var A=_r.get(R),L=A.get(w);--L==0?(R.removeEventListener(w,Ii),A.delete(w),A.size===0&&_r.delete(R)):A.set(w,L)}ui.delete(p),h!==a&&((M=h.parentNode)==null||M.removeChild(h))}});return xo.set(u,v),u}let xo=new WeakMap;var kn,Pn,rn,ha,ur,vr,Pr;class ko{constructor(t,a=!0){en(this,"anchor");de(this,kn,new Map);de(this,Pn,new Map);de(this,rn,new Map);de(this,ha,new Set);de(this,ur,!0);de(this,vr,t=>{if(f(this,kn).has(t)){var a=f(this,kn).get(t),r=f(this,Pn).get(a);if(r)Cr(r),f(this,ha).delete(a);else{var i=f(this,rn).get(a);i&&(Cr(i.effect),f(this,Pn).set(a,i.effect),f(this,rn).delete(a),i.fragment.lastChild.remove(),this.anchor.before(i.fragment),r=i.effect)}for(const[o,d]of f(this,kn)){if(f(this,kn).delete(o),o===t)break;const c=f(this,rn).get(d);c&&(Qt(c.effect),f(this,rn).delete(d))}for(const[o,d]of f(this,Pn)){if(o===a||f(this,ha).has(o))continue;const c=()=>{if(Array.from(f(this,kn).values()).includes(o)){var v=document.createDocumentFragment();Ti(d,v),v.append(Hn()),f(this,rn).set(o,{effect:d,fragment:v})}else Qt(d);f(this,ha).delete(o),f(this,Pn).delete(o)};f(this,ur)||!r?(f(this,ha).add(o),ma(d,c,!1)):c()}}});de(this,Pr,t=>{f(this,kn).delete(t);const a=Array.from(f(this,kn).values());for(const[r,i]of f(this,rn))a.includes(r)||(Qt(i.effect),f(this,rn).delete(r))});this.anchor=t,se(this,ur,a)}ensure(t,a){var r=W,i=Ls();if(a&&!f(this,Pn).has(t)&&!f(this,rn).has(t))if(i){var o=document.createDocumentFragment(),d=Hn();o.append(d),f(this,rn).set(t,{effect:pn(()=>a(d)),fragment:o})}else f(this,Pn).set(t,pn(()=>a(this.anchor)));if(f(this,kn).set(r,t),i){for(const[c,u]of f(this,Pn))c===t?r.unskip_effect(u):r.skip_effect(u);for(const[c,u]of f(this,rn))c===t?r.unskip_effect(u.effect):r.skip_effect(u.effect);r.oncommit(f(this,vr)),r.ondiscard(f(this,Pr))}else f(this,vr).call(this,r)}}kn=new WeakMap,Pn=new WeakMap,rn=new WeakMap,ha=new WeakMap,ur=new WeakMap,vr=new WeakMap,Pr=new WeakMap;function G(e,t,a=!1){var r=new ko(e),i=a?qa:0;function o(d,c){r.ensure(d,c)}Si(()=>{var d=!1;t((c,u=0)=>{d=!0,o(u,c)}),d||o(-1,null)},i)}function Ye(e,t){return t}function Mo(e,t,a){for(var r=[],i=t.length,o,d=t.length,c=0;c{if(o){if(o.pending.delete(E),o.done.add(E),o.pending.size===0){var p=e.outrogroups;vi(e,Dr(o.done)),p.delete(o),p.size===0&&(e.outrogroups=null)}}else d-=1},!1)}if(d===0){var u=r.length===0&&a!==null;if(u){var v=a,h=v.parentNode;io(h),h.append(v),e.items.clear()}vi(e,t,!u)}else o={pending:new Set(t),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(o)}function vi(e,t,a=!0){var r;if(e.pending.size>0){r=new Set;for(const d of e.pending.values())for(const c of d)r.add(e.items.get(c).e)}for(var i=0;i{var re=a();return hi(re)?re:re==null?[]:Dr(re)}),p,w=new Map,A=!0;function L(re){(Se.effect.f&_n)===0&&(Se.pending.delete(re),Se.fallback=h,So(Se,p,d,t,r),h!==null&&(p.length===0?(h.f&Dn)===0?Cr(h):(h.f^=Dn,Qa(h,null,d)):ma(h,()=>{h=null})))}function M(re){Se.pending.delete(re)}var R=Si(()=>{p=n(E);for(var re=p.length,ve=new Set,be=W,F=Ls(),H=0;Ho(d)):(h=pn(()=>o(Ni??(Ni=Hn()))),h.f|=Dn)),re>ve.size&&hl(),!A)if(w.set(be,ve),F){for(const[ze,nt]of c)ve.has(ze)||be.skip_effect(nt.e);be.oncommit(L),be.ondiscard(M)}else L(be);n(E)}),Se={effect:R,items:c,pending:w,outrogroups:null,fallback:h};A=!1}function Ha(e){for(;e!==null&&(e.f&Tn)===0;)e=e.next;return e}function So(e,t,a,r,i){var Ee,ze,nt,T,J,oe,Pe,Q,ye;var o=(r&El)!==0,d=t.length,c=e.items,u=Ha(e.effect.first),v,h=null,E,p=[],w=[],A,L,M,R;if(o)for(R=0;R0){var fe=(r&ds)!==0&&d===0?a:null;if(o){for(R=0;R{var ne,Ke;if(E!==void 0)for(M of E)(Ke=(ne=M.nodes)==null?void 0:ne.a)==null||Ke.apply()})}function Eo(e,t,a,r,i,o,d,c){var u=(d&Ml)!==0?(d&Tl)===0?to(a,!1,!1):xa(a):null,v=(d&Sl)!==0?xa(i):null;return{v:u,i:v,e:pn(()=>(o(t,u??a,v??i,c),()=>{e.delete(r)}))}}function Qa(e,t,a){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,o=t&&(t.f&Dn)===0?t.nodes.start:a;r!==null;){var d=fr(r);if(o.before(r),r===i)return;r=d}}function Jn(e,t,a){t===null?e.effect.first=a:t.next=a,a===null?e.effect.last=t:a.prev=t}function qe(e,t,a=!1,r=!1,i=!1,o=!1){var d=e,c="";if(a)var u=e;O(()=>{var v=me;if(c!==(c=t()??"")){if(a){v.nodes=null,u.innerHTML=c,c!==""&&Fa(ea(u),u.lastChild);return}if(v.nodes!==null&&(qs(v.nodes.start,v.nodes.end),v.nodes=null),c!==""){var h=r?Cl:i?Ll:void 0,E=zs(r?"svg":i?"math":"template",h);E.innerHTML=c;var p=r||i?E:E.content;if(Fa(ea(p),p.lastChild),r||i)for(;ea(p);)d.before(ea(p));else d.before(p)}}})}function To(e,t,a){var r=e==null?"":""+e;return r===""?null:r}function $o(e,t){return e==null?null:String(e)}function vt(e,t,a,r,i,o){var d=e[ai];if(d!==a||d===void 0){var c=To(a);c==null?e.removeAttribute("class"):e.className=c,e[ai]=a}return o}function hn(e,t,a,r){var i=e[ri];if(i!==t){var o=$o(t);o==null?e.removeAttribute("style"):e.style.cssText=o,e[ri]=t}return r}function Js(e,t,a=!1){if(e.multiple){if(t==null)return;if(!hi(t))return Pl();for(var r of e.options)r.selected=t.includes(ar(r));return}for(r of e.options){var i=ar(r);if(ao(i,t)){r.selected=!0;return}}(!a||t!==void 0)&&(e.selectedIndex=-1)}function Ao(e){var t=new MutationObserver(()=>{Js(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Ps(()=>{t.disconnect()})}function nr(e,t,a=t){var r=new WeakSet,i=!0;xi(e,"change",o=>{var d=o?"[selected]":":checked",c;if(e.multiple)c=[].map.call(e.querySelectorAll(d),ar);else{var u=e.querySelector(d)??e.querySelector("option:not([disabled])");c=u&&ar(u)}a(c),e.__value=c,W!==null&&r.add(W)}),Os(()=>{var o=t();if(e===document.activeElement){var d=W;if(r.has(d))return}if(Js(e,o,i),i&&o===void 0){var c=e.querySelector(":checked");c!==null&&(o=ar(c),a(o))}e.__value=o,i=!1}),Ao(e)}function ar(e){return"__value"in e?e.__value:e.value}const Co=Symbol("is custom element"),Lo=Symbol("is html"),zo=fl?"progress":"PROGRESS";function mr(e,t){var a=Qs(e);a.value===(a.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==zo)||(e.value=t??"")}function Ir(e,t,a,r){var i=Qs(e);i[t]!==(i[t]=a)&&(t==="loading"&&(e[vl]=a),a==null?e.removeAttribute(t):typeof a!="string"&&Po(e).includes(t)?e[t]=a:e.setAttribute(t,a))}function Qs(e){return e[br]??(e[br]={[Co]:e.nodeName.includes("-"),[Lo]:e.namespaceURI===cs})}var Fi=new Map;function Po(e){var t=e.getAttribute("is")||e.nodeName,a=Fi.get(t);if(a)return a;Fi.set(t,a=[]);for(var r,i=e,o=Element.prototype;o!==i;){r=il(i);for(var d in r)r[d].set&&d!=="innerHTML"&&d!=="textContent"&&d!=="innerText"&&a.push(d);i=is(i)}return a}function Ln(e,t,a=t){var r=new WeakSet;xi(e,"input",async i=>{var o=i?e.defaultValue:e.value;if(o=Wr(e)?jr(o):o,a(o),W!==null&&r.add(W),await ho(),o!==(o=t())){var d=e.selectionStart,c=e.selectionEnd,u=e.value.length;if(e.value=o??"",c!==null){var v=e.value.length;d===c&&c===u&&v>u?(e.selectionStart=v,e.selectionEnd=v):(e.selectionStart=d,e.selectionEnd=Math.min(c,v))}}}),Ua(t)==null&&e.value&&(a(Wr(e)?jr(e.value):e.value),W!==null&&r.add(W)),qr(()=>{var i=t();if(e===document.activeElement){var o=W;if(r.has(o))return}Wr(e)&&i===jr(e.value)||e.type==="date"&&!i&&!e.value||i!==e.value&&(e.value=i??"")})}function Do(e,t,a=t){xi(e,"change",r=>{var i=r?e.defaultChecked:e.checked;a(i)}),Ua(t)==null&&a(e.checked),qr(()=>{var r=t();e.checked=!!r})}function Wr(e){var t=e.type;return t==="number"||t==="range"}function jr(e){return e===""?null:+e}function Jr(e,t){return e===t||(e==null?void 0:e[$a])===t}function Oo(e={},t,a,r){var i=Lt.r,o=me;return Os(()=>{var d,c;return qr(()=>{d=c,c=[],Ua(()=>{Jr(a(...c),e)||(t(e,...c),d&&Jr(a(...d),e)&&t(null,...d))})}),()=>{let u=o;for(;u!==i&&u.parent!==null&&u.parent.f∋)u=u.parent;const v=()=>{c&&Jr(a(...c),e)&&t(null,...c)},h=u.teardown;u.teardown=()=>{v(),h==null||h()}}}),e}function hr(e){Lt===null&&os(),Mi(()=>{const t=Ua(e);if(typeof t=="function")return t})}function Ro(e){Lt===null&&os(),hr(()=>()=>Ua(e))}let lr=localStorage.getItem("mc_token")||"";function Ys(){return lr}function qo(e){lr=(e||"").trim(),localStorage.setItem("mc_token",lr)}function Bo(){const e={"Content-Type":"application/json"};return lr&&(e["X-MC-Token"]=lr),e}function rr(){return localStorage.getItem("mc_hf_token")||""}function Io(e){localStorage.setItem("mc_hf_token",(e||"").trim())}async function ge(e,t={}){const a=await fetch(e,{headers:Bo(),...t}),r=await a.json().catch(()=>({}));if(!a.ok)throw new Error(r.error||"HTTP "+a.status);return r}const No=(e,t=document)=>t.querySelector(e),Ki=(e,t=document)=>[...t.querySelectorAll(e)];function Rn(e){return String(e??"").replace(/[&<>]/g,t=>({"&":"&","<":"<",">":">"})[t])}let Gi;function te(e,t=!1){const a=No("#toast");a&&(a.textContent=e,a.className="toast show"+(t?" err":""),clearTimeout(Gi),Gi=setTimeout(()=>a.className="toast",3200))}function Fo(e,t){return e==="running"||e==="ready"?'geladen':e==="loading"||e==="starting"?'lädt…':e==="downloading"?`↓ Download${t!=null?` ${Math.round(t)}%`:""}`:'bereit'}const Re=e=>`${e}`,Nr={logo:Re(''),grid:Re(''),cpu:Re(''),pulse:Re(''),server:Re(''),book:Re(''),help:Re(''),settings:Re(''),swap:Re(''),monitor:Re(''),layers:Re(''),alert:Re(''),gauge:Re(''),search:Re(''),compass:Re(''),code:Re(''),eye:Re(''),refresh:Re(''),file:Re(''),database:Re(''),thermo:Re(''),shield:Re(''),info:Re(''),chevron:Re(''),bolt:Re(''),x:Re(''),check:Re(''),download:Re(''),clock:Re('')};function tn(e){return Nr[e]||""}function fi(e){return`${Nr.info}`}function sa(e){if(!e&&e!==0)return"–";const t=e/1024/1024/1024;return t>=1?t.toFixed(1)+" GB":Math.round(e/1024/1024)+" MB"}function Mn({title:e,body:t,confirmLabel:a="Bestätigen",cancelLabel:r="Abbrechen",danger:i=!1}){return new Promise(o=>{const d=document.createElement("div");d.className="modal-overlay",d.innerHTML=``;const c=u=>{d.remove(),o(u)};d.addEventListener("click",u=>{if(u.target===d)return c(!1);const v=u.target.closest("[data-x]");v&&c(v.getAttribute("data-x")==="1")}),document.body.appendChild(d),d.querySelector('[data-x="1"]').focus()})}function Ui({title:e,body:t="",placeholder:a="",password:r=!1,confirmLabel:i="Weiter",danger:o=!1}){return new Promise(d=>{const c=document.createElement("div");c.className="modal-overlay",c.innerHTML=``;const u=c.querySelector("input"),v=h=>{c.remove(),d(h)};c.addEventListener("click",h=>{if(h.target===c)return v(null);const E=h.target.closest("[data-x]");E&&v(E.getAttribute("data-x")==="1"?u.value||"":null)}),u.addEventListener("keydown",h=>{h.key==="Enter"&&v(u.value||""),h.key==="Escape"&&v(null)}),document.body.appendChild(c),u.focus()})}function Ko(e="overview"){const t=Ki(".nav-item[data-view]:not(.disabled)"),a=Ki(".view[data-view]"),r=new Set(a.map(o=>o.dataset.view));function i(o){r.has(o)||(o=e),a.forEach(d=>d.hidden=d.dataset.view!==o),t.forEach(d=>d.classList.toggle("active",d.dataset.view===o)),location.hash!=="#/"+o&&(location.hash="#/"+o)}return t.forEach(o=>o.addEventListener("click",d=>{d.preventDefault(),i(o.dataset.view)})),window.addEventListener("hashchange",()=>i(location.hash.replace("#/",""))),i(location.hash.replace("#/","")||e),{show:i}}let Hi=B(null);const gr={get value(){return n(Hi)},set(e){g(Hi,e,!0)}};let Vi=B(Dt([])),Qn=B(Dt([]));const ca={get value(){return n(Vi)},set(e){g(Vi,e||[],!0)},get tracked(){return n(Qn)},track(e){n(Qn).includes(e)||g(Qn,[...n(Qn),e],!0)},toggle(e){g(Qn,n(Qn).includes(e)?n(Qn).filter(t=>t!==e):[...n(Qn),e],!0)}};let Wi=B(null);const $i={get value(){return n(Wi)},set(e){g(Wi,e,!0)}},Go="5";var as;typeof window<"u"&&((as=window.__svelte??(window.__svelte={})).v??(as.v=new Set)).add(Go);var Uo=k('— bereit für Anfragen'),Ho=k('
Temperatur (GPU)
Freier Speicher
GB
',1),Vo=k('
Temperatur
messe…
Freier Speicher
messe…
',1),Wo=k('
'),jo=k('
Warte auf Messwerte…
'),Jo=k('Bild'),Qo=k('Code'),Yo=k('Text'),Zo=k('∞ aktiv'),Xo=k(''),ed=k('
'),ji=k('
'),td=k('
Noch keine Modelle
Hol dir unter „Cookbook" ein Modell, das auf deine Hardware passt.
'),nd=k('
'),ad=k('
News gerade nicht ladbar.
'),rd=k('

LLM-Engine
Aktives Modell

System-Gesundheit

Auslastung in Echtzeit.

Schnellstart

Die häufigsten Aufgaben — ein Klick.

Dein Stack

Top-News

Alle →
',1);function id(e,t){ra(t,!0);const a=I(()=>gr.value),r=I(()=>$i.value),i=I(()=>{var S;return((S=n(a))==null?void 0:S.models)||[]}),o=I(()=>{var S;return((S=n(a))==null?void 0:S.swap_ok)??!1}),d=["running","ready","loading","starting"],c=I(()=>n(i).find(S=>d.includes(S.state))),u=I(()=>n(i).filter(S=>!S.incomplete)),v=I(()=>n(a)?n(o)?n(r)&&n(r).ram.percent>=90?"Achtung: Speicher wird knapp.":"Alles läuft rund.":"LLM-Engine offline":"Verbinde…"),h=I(()=>n(a)?n(o)?n(r)&&n(r).ram.percent>=90?`Arbeitsspeicher bei ${Math.round(n(r).ram.percent)} % — eventuell Speicher freigeben.`:`${n(u).length} ${n(u).length===1?"Modell":"Modelle"} konfiguriert · ${n(c)?`„${n(c).name}" geladen`:"keines geladen"} · keine Warnungen.`:"Der llama-swap-Dienst antwortet gerade nicht.":""),E=I(()=>()=>{var ee;const S=(ee=n(r))==null?void 0:ee.gpu;return S&&S.vram.total+S.gtt.total>0?(S.vram.used+S.gtt.used)/(S.vram.total+S.gtt.total)*100:0});let p=B(Dt([])),w=B(null);hr(async()=>{try{g(p,((await ge("/api/news")).items||[]).slice(0,4),!0)}catch{}});async function A(){await Mn({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 ge("/api/unload",{method:"POST"}),M())}async function L(S){g(w,S,!0);try{await ge("/api/preload?model="+encodeURIComponent(S),{method:"POST"})}catch{}g(w,null),M()}function M(){document.dispatchEvent(new Event("mc:refresh"))}function R(S){var ee;(ee=document.querySelector(`.nav-item[data-view="${S}"]`))==null||ee.dispatchEvent(new MouseEvent("click"))}function Se(S){return S>=90?"red":S>=75?"":"green"}function re(S){return S==null?"":S>=75?"red":S>=55?"":"green"}function ve(S){return S>=90?"red":S>=70?"":"green"}var be=rd(),F=_t(be),H=l(F),ue=l(H),fe=l(ue),Ee=s(fe);{var ze=S=>{var ee=Uo();b(S,ee)};G(Ee,S=>{n(o)&&!n(c)&&S(ze)})}var nt=s(ue,2),T=l(nt),J=s(F,2),oe=l(J),Pe=l(oe),Q=s(l(Pe),2);qe(Q,()=>tn("server"),!0);var ye=s(Pe,2),ne=l(ye),Ke=s(ye,2),Ie=l(Ke),He=s(oe,2),Ve=l(He),We=s(l(Ve),2);qe(We,()=>tn("cpu"),!0);var Tt=s(Ve,2),Pt=l(Tt),Ot=s(Tt,2),Rt=l(Ot);{var qt=S=>{var ee=tr();O(st=>m(ee,`${st??""} · ${n(c).state??""}`),[()=>{var st;return(st=n(c).meta)!=null&&st.ctx?Math.round(n(c).meta.ctx/1024)+"k ctx":""}]),b(S,ee)},D=S=>{var ee=tr("lädt bei erster Anfrage");b(S,ee)};G(Rt,S=>{n(c)?S(qt):S(D,-1)})}var U=s(He,2);{var Z=S=>{const ee=I(()=>{var lt;return n(r).gpu_temp??((lt=n(r).cpu)==null?void 0:lt.temp)??null}),st=I(()=>re(n(ee))),xe=I(()=>n(r).ram.total-n(r).ram.used),rt=I(()=>100-n(r).ram.percent);var Vt=Ho(),_e=_t(Vt),Qe=l(_e),dn=s(l(Qe));qe(dn,()=>tn("thermo"),!0);var Nt=s(Qe,2),In=l(Nt),Nn=s(Nt,2),An=l(Nn),_=s(_e,2),y=l(_),N=s(l(y));qe(N,()=>tn("database"),!0);var q=s(y,2),Y=l(q),Ce=s(q,2),Le=l(Ce);O((lt,yt,Te,De)=>{vt(_e,1,`kpi ${n(st)??""}`),m(In,lt),m(An,n(ee)==null?"messe…":n(ee)<55?"kühl":n(ee)<75?"normal":"⚠ heiß"),vt(_,1,`kpi ${n(rt)<15?"red":n(rt)<30?"":"green"}`),m(Y,yt),m(Le,`von ${Te??""} GB · ${De??""} % frei`)},[()=>n(ee)!=null?`${Math.round(n(ee))}°C`:"–",()=>Math.round(n(xe)/1073741824),()=>Math.round(n(r).ram.total/1073741824),()=>Math.round(n(rt))]),b(S,Vt)},le=S=>{var ee=Vo();b(S,ee)};G(U,S=>{n(r)?S(Z):S(le,-1)})}var x=s(J,2),z=l(x),K=s(l(z),4);{var ie=S=>{const ee=I(()=>n(E)());var st=Br(),xe=_t(st);Ze(xe,17,()=>{var rt;return[["Prozessor (CPU)",((rt=n(r).cpu)==null?void 0:rt.percent)??0,""],["Arbeitsspeicher (RAM)",n(r).ram.percent,Se(n(r).ram.percent)],["Grafikspeicher (VRAM)",n(ee),ve(n(ee))]]},Ye,(rt,Vt)=>{var _e=I(()=>ir(n(Vt),3));let Qe=()=>n(_e)[0],dn=()=>n(_e)[1];const Nt=I(()=>Math.max(0,Math.min(100,dn()||0)));var In=Wo(),Nn=l(In),An=l(Nn),_=l(An),y=s(An),N=l(y),q=s(Nn,2),Y=l(q);O((Ce,Le)=>{m(_,Qe()),m(N,`${Ce??""} %`),vt(q,1,`bar ${n(Nt)>=90?"bad":n(Nt)>=75?"warn":""}`),hn(Y,`width:${Le??""}%`)},[()=>Math.round(n(Nt)),()=>Math.max(2,n(Nt))]),b(rt,In)}),b(S,st)},$=S=>{var ee=jo();b(S,ee)};G(K,S=>{n(r)?S(ie):S($,-1)})}var V=s(z,2),ae=s(l(V),4),we=l(ae);qe(we,()=>tn("search"),!0);var Xe=s(we,4);qe(Xe,()=>tn("chevron"),!0);var Ae=s(ae,2),at=l(Ae);qe(at,()=>tn("refresh"),!0);var it=s(at,4);qe(it,()=>tn("chevron"),!0);var mt=s(Ae,2),et=l(mt);qe(et,()=>tn("file"),!0);var bt=s(et,4);qe(bt,()=>tn("chevron"),!0);var C=s(mt,2),X=l(C);qe(X,()=>tn("swap"),!0);var pe=s(X,4);qe(pe,()=>tn("chevron"),!0);var je=s(x,2),Ne=l(je),Bt=l(Ne),Ht=s(l(Bt),2),It=l(Ht),Yt=s(Bt,2);{var sn=S=>{var ee=ji();Ze(ee,21,()=>n(u),Ye,(st,xe)=>{const rt=I(()=>d.includes(n(xe).state)),Vt=I(()=>n(xe).state==="downloading"),_e=I(()=>n(xe).state==="loading"||n(xe).state==="starting"||n(Vt)?"load":n(rt)?"on":""),Qe=I(()=>n(Vt)?`↓ ${n(xe).download_progress!=null?Math.round(n(xe).download_progress)+"%":"..."}`:n(xe).state==="loading"||n(xe).state==="starting"?"lädt…":n(rt)?"geladen ✓":"bereit");var dn=ed(),Nt=l(dn),In=s(Nt,2),Nn=l(In),An=l(Nn),_=l(An),y=s(An,2);{var N=j=>{var ce=Jo();b(j,ce)},q=I(()=>{var j,ce;return(ce=(j=n(xe).meta)==null?void 0:j.caps)==null?void 0:ce.includes("Bild")}),Y=j=>{var ce=Qo();b(j,ce)},Ce=I(()=>{var j,ce;return(ce=(j=n(xe).meta)==null?void 0:j.caps)==null?void 0:ce.includes("Code")}),Le=j=>{var ce=Yo();b(j,ce)};G(y,j=>{n(q)?j(N):n(Ce)?j(Y,1):j(Le,-1)})}var lt=s(y,2);{var yt=j=>{var ce=Zo();b(j,ce)};G(lt,j=>{n(xe).ttl>=99999&&j(yt)})}var Te=s(Nn,2),De=l(Te),Me=s(In,2),ke=l(Me),Fe=l(ke),Ge=s(ke,2);{var Oe=j=>{var ce=Xo(),ot=l(ce);O(()=>{hn(ce,`padding:3px 9px;font-size:12px;opacity:${n(w)===n(xe).name?".5":"1"}`),ce.disabled=n(w)===n(xe).name,m(ot,n(w)===n(xe).name?"…":"Laden")}),P("click",ce,()=>L(n(xe).name)),b(j,ce)};G(Ge,j=>{!n(rt)&&!n(Vt)&&n(o)&&j(Oe)})}O((j,ce)=>{var ot;vt(Nt,1,`li-dot ${n(_e)??""}`),hn(An,n(rt)?"color:var(--accent)":""),m(_,n(xe).name),m(De,`${j??""} ${(ot=n(xe).meta)!=null&&ot.quant?" · "+n(xe).meta.quant:""} ${ce??""}`),hn(ke,`white-space:nowrap;color:${n(rt)?"var(--on)":"var(--mut)"}`),m(Fe,n(Qe))},[()=>{var j;return(j=n(xe).meta)!=null&&j.ctx?Math.round(n(xe).meta.ctx/1024)+"k ctx":""},()=>{var j;return(j=n(xe).meta)!=null&&j.size_bytes?" · "+(n(xe).meta.size_bytes/1073741824).toFixed(1)+" GB":""}]),b(st,dn)}),b(S,ee)},bn=S=>{var ee=td(),st=s(l(ee),4);P("click",st,()=>R("cookbook")),b(S,ee)};G(Yt,S=>{n(u).length?S(sn):S(bn,-1)})}var $n=s(Ne,2),ln=l($n),on=s(l(ln),2),yn=s(ln,2);{var Je=S=>{var ee=ji();Ze(ee,21,()=>n(p),Ye,(st,xe)=>{var rt=nd(),Vt=l(rt),_e=l(Vt),Qe=l(_e),dn=s(_e,2),Nt=l(dn);O(()=>{Ir(rt,"href",n(xe).link),m(Qe,n(xe).title),m(Nt,`${n(xe).source??""}${n(xe).relevant?" · für dich":""}`)}),b(st,rt)}),b(S,ee)},pt=S=>{var ee=ad();b(S,ee)};G(yn,S=>{n(p).length?S(Je):S(pt,-1)})}O(S=>{m(fe,`${n(v)??""} `),m(T,n(h)),vt(oe,1,`kpi ${n(o)?"green":"red"}`),m(ne,n(o)?"Online":"Offline"),m(Ie,S),vt(He,1,`kpi ${n(c)?"blue":"muted"}`),m(Pt,n(c)?n(c).name:"Keins"),m(It,n(u).length?n(u).length+" konfiguriert":"")},[()=>{var S,ee;return((ee=(S=n(a))==null?void 0:S.swap_url)==null?void 0:ee.replace(/^https?:\/\//,""))??"—"}]),P("click",ae,()=>R("cookbook")),P("click",Ae,A),P("click",mt,()=>R("server")),P("click",C,()=>R("connect")),P("click",on,()=>R("news")),P("keydown",on,S=>S.key==="Enter"&&R("news")),b(e,be),ia()}ka(["click","keydown"]);var sd=k(""),ld=k('
'),od=k('
Noch keine Modelle konfiguriert
Hol dir unter „Cookbook" ein passendes Modell.
'),dd=k('
kein Modell hinterlegt
leere Rolleleer '),cd=k(' '),ud=k('
'),vd=k(' '),fd=k('
API-Name:
'),pd=k('
ModellKannDetailsStatusPortAktionen
'),hd=k('
Empfohlen für deine Hardware

'),gd=k(''),_d=k(''),md=k(''),bd=k('

Modelle

Deine konfigurierten Modelle — testen, Kontext anpassen oder aus dem Speicher werfen.

Schnelltest

Schreib eine Nachricht — das gewählte Modell wird automatisch geweckt.

Modelle & Ports

Modelle laden automatisch, sobald eine Anfrage kommt — du musst nichts manuell starten.
',1);function yd(e,t){ra(t,!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.",r="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.",i=[{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=I(()=>{var x;return((x=gr.value)==null?void 0:x.models)||[]});function d(){document.dispatchEvent(new Event("mc:refresh"))}let c=B(""),u=B(""),v=B(""),h=B(!1);const E=I(()=>n(o).filter(x=>!x.incomplete));async function p(){var z;const x=n(c)||((z=n(E)[0])==null?void 0:z.name);if(!(!x||!n(u).trim())){g(h,!0),g(v,"(wecke Modell, kann beim Laden kurz dauern…)");try{const K=await ge("/api/chat",{method:"POST",body:JSON.stringify({model:x,message:n(u)})});g(v,K.reply,!0)}catch(K){g(v,"Fehler: "+K.message)}g(h,!1),d()}}const w=300;let A=B(!1),L=B(null),M=B(8192),R=B(!1);function Se(x){var z;g(L,n(o).find(K=>K.name===x),!0),n(L)&&(g(M,((z=n(L).meta)==null?void 0:z.ctx)||8192,!0),g(R,(n(L).ttl??w)>=99999),g(A,!0))}async function re(){const x=n(R)?99999:w;try{await ge("/api/update_model",{method:"POST",body:JSON.stringify({alias:n(L).name,ctx:n(M),ttl:x})}),te("Gespeichert — aktiv beim nächsten Modell-Start."),g(A,!1),d()}catch(z){te(z.message,!0)}}let ve=B(!1),be=B(""),F=B(""),H=B("");function ue(x){const z=n(o).find(K=>K.name===x);g(be,x,!0),g(H,(z==null?void 0:z.role)||"",!0),g(F,""),g(ve,!0)}async function fe(x){try{await ge("/api/set_role",{method:"POST",body:JSON.stringify({alias:n(be),role:x})}),te(x?`Rolle gesetzt: ${x}`:"Rolle entfernt."),g(ve,!1),d()}catch(z){te(z.message,!0)}}async function Ee(x){if(await Mn({title:`„${x}" entladen?`,body:"Das Modell wird aus dem Grafikspeicher geworfen und lädt beim nächsten Aufruf automatisch neu.",confirmLabel:"Entladen"}))try{await ge("/api/unload?model="+encodeURIComponent(x),{method:"POST"}),te("Entladen: "+x),setTimeout(d,600)}catch(z){te(z.message,!0)}}async function ze(x){if(await Mn({title:`„${x}" 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 z=await ge("/api/delete_model",{method:"POST",body:JSON.stringify({alias:x})});te(z.note||"Gelöscht: "+x),setTimeout(d,600)}catch(z){te(z.message,!0)}}function nt(x){return x!=null&&x.length?x.map(z=>z==="Code"?'Code':z==="Bild"?'Bild':'Text').join(" "):"–"}function T(x){if(!x)return"–";const z=x.quant||"?",K=x.ctx?Math.round(x.ctx/1024)+"K":"?",ie=x.size_bytes?(x.size_bytes/1024**3).toFixed(1)+" GB":"?";return`${z} · ${K} · ${ie}`}function J(x){var z;(z=navigator.clipboard)==null||z.writeText(x),te("Kopiert: "+x)}var oe=bd(),Pe=s(_t(oe),2),Q=s(l(Pe),6);Ze(Q,21,()=>n(E),Ye,(x,z)=>{var K=sd(),ie=l(K),$={};O(()=>{m(ie,n(z).name),$!==($=n(z).name)&&(K.value=(K.__value=n(z).name)??"")}),b(x,K)});var ye=s(Q,4),ne=s(ye,2),Ke=l(ne),Ie=s(ne,2);{var He=x=>{var z=ld(),K=l(z);O(()=>m(K,n(v))),b(x,z)};G(Ie,x=>{n(v)&&x(He)})}var Ve=s(Pe,2),We=l(Ve),Tt=s(l(We)),Pt=l(Tt),Ot=s(We,4);{var Rt=x=>{var z=od();b(x,z)},qt=x=>{var z=pd(),K=s(l(z));Ze(K,21,()=>n(o),Ye,(ie,$)=>{var V=Br(),ae=_t(V);{var we=Ae=>{var at=dd(),it=l(at),mt=l(it),et=s(it,5),bt=l(et),C=s(bt,2);O(()=>m(mt,n($).name)),P("click",bt,()=>{var X;te("Lade im Cookbook ein Modell und setze den Alias auf: "+n($).name),(X=document.querySelector(".nav-item[data-view='cookbook']"))==null||X.dispatchEvent(new MouseEvent("click"))}),P("click",C,()=>ze(n($).name)),b(Ae,at)},Xe=Ae=>{var at=fd(),it=l(at),mt=l(it),et=l(mt),bt=s(et);{var C=Je=>{var pt=cd(),S=l(pt);O(()=>m(S,n($).role)),b(Je,pt)};G(bt,Je=>{n($).role&&Je(C)})}var X=s(mt,2);{var pe=Je=>{var pt=ud(),S=l(pt);O(()=>m(S,n($).meta.filename)),b(Je,pt)};G(X,Je=>{var pt;(pt=n($).meta)!=null&&pt.filename&&Je(pe)})}var je=s(X,2),Ne=s(l(je),2);Ze(Ne,17,()=>{var Je;return(Je=n($).api_ids)!=null&&Je.length?n($).api_ids:[n($).name]},Ye,(Je,pt)=>{var S=vd(),ee=l(S);O(()=>m(ee,n(pt))),P("click",S,()=>J(n(pt))),b(Je,S)});var Bt=s(it);qe(Bt,()=>{var Je;return nt((Je=n($).meta)==null?void 0:Je.caps)},!0);var Ht=s(Bt);qe(Ht,()=>T(n($).meta),!0);var It=s(Ht);qe(It,()=>Fo(n($).state,n($).download_progress),!0);var Yt=s(It),sn=l(Yt),bn=s(Yt),$n=l(bn),ln=s($n,2),on=s(ln,2),yn=s(on,2);O(()=>{m(et,`${n($).name??""} `),m(sn,n($).port??"auto")}),P("click",$n,()=>ue(n($).name)),P("click",ln,()=>Se(n($).name)),P("click",on,()=>Ee(n($).name)),P("click",yn,()=>ze(n($).name)),b(Ae,at)};G(ae,Ae=>{n($).incomplete?Ae(we):Ae(Xe,-1)})}b(ie,V)}),b(x,z)};G(Ot,x=>{n(o).length?x(qt,-1):x(Rt)})}var D=s(Ve,2);{var U=x=>{var z=gd(),K=l(z),ie=l(K),$=s(ie,4),V=l($),ae=s($,2),we=s(l(ae));qe(we,()=>fi(a));var Xe=s(ae,2),Ae=s(Xe,2);{var at=pe=>{var je=hd(),Ne=l(je),Bt=s(l(Ne),2),Ht=l(Bt),It=s(Ht,2),Yt=s(Ne,2);O((sn,bn)=>{m(Ht,`Optimal ~${sn??""}k → ~${n(L).meta.peak_ram_optimal_gb??""} GB Spitzenbedarf.`),m(It,` Aktuell ~${bn??""}k → ~${n(L).meta.peak_ram_gb??""} GB.`)},[()=>Math.round(n(L).meta.optimal_ctx/1024),()=>Math.round((n(L).meta.ctx||0)/1024)]),P("click",Yt,()=>g(M,n(L).meta.optimal_ctx,!0)),b(pe,je)};G(Ae,pe=>{var je;(je=n(L).meta)!=null&&je.optimal_ctx&&pe(at)})}var it=s(Ae,4),mt=s(l(it),2),et=l(mt),bt=s(et,2),C=l(bt),X=s(it,2);O(()=>{m(V,n(L).name),hn(bt,`color:${n(R)?"var(--accent)":"var(--mut)"}`),m(C,n(R)?"An (TTL = ∞)":"Aus (TTL = 5 min)")}),P("click",z,pe=>{pe.target.classList.contains("modal-overlay")&&g(A,!1)}),P("click",ie,()=>g(A,!1)),Ln(Xe,()=>n(M),pe=>g(M,pe)),Do(et,()=>n(R),pe=>g(R,pe)),P("click",X,re),b(x,z)};G(D,x=>{n(A)&&n(L)&&x(U)})}var Z=s(D,2);{var le=x=>{var z=md(),K=l(z),ie=l(K),$=s(ie,2),V=s(l($));qe(V,()=>fi(r));var ae=s($,2),we=l(ae),Xe=s(ae,4);Ze(Xe,21,()=>i,Ye,(et,bt)=>{var C=_d(),X=l(C);O(()=>{vt(C,1,n(H)===n(bt).id?"primary":"ghost"),Ir(C,"title",n(bt).desc),m(X,n(bt).label)}),P("click",C,()=>fe(n(bt).id)),b(et,C)});var Ae=s(Xe,4),at=s(Ae,2),it=l(at),mt=s(it,2);O(()=>m(we,n(be))),P("click",z,et=>{et.target.classList.contains("modal-overlay")&&g(ve,!1)}),P("click",ie,()=>g(ve,!1)),Ln(Ae,()=>n(F),et=>g(F,et)),P("click",it,()=>fe("")),P("click",mt,()=>fe(n(F).trim().toLowerCase())),b(x,z)};G(Z,x=>{n(ve)&&x(le)})}O(()=>{ne.disabled=n(h),m(Ke,n(h)?"…":"Senden"),m(Pt,n(o).length?n(o).length+" konfiguriert":"")}),nr(Q,()=>n(c),x=>g(c,x)),Ln(ye,()=>n(u),x=>g(u,x)),P("click",ne,p),b(e,oe),ia()}ka(["click"]);var wd=k('
Prozessor (CPU)
%
Arbeitsspeicher
%
Grafikspeicher
%

System-Metriken (Bosgame)

Live-Auslastung deines Mini-PCs, alle 0,5 Sekunden.
Arbeitsspeicher (RAM)
Grafikspeicher (VRAM + GTT)
Speicherplatz (Disk)
Temperatur (GPU / CPU)
CPU-Verlauf
RAM-Verlauf
VRAM-Verlauf
',1),xd=k(''),kd=k('
Gerade nichts los.
Alles ruhig — keine laufenden Aufgaben.
'),Md=k(' '),Sd=k(''),Ed=k(''),Td=k('
'),$d=k('
'),Ad=k('
'),Cd=k('

Aktivität

Live-Auslastung und laufende Aufgaben (Downloads, Updates) mit Protokoll.

Hintergrund-Aufgaben

Downloads & Updates erscheinen hier mit Live-Protokoll — zum Aufklappen klicken.
',1);function Ld(e,t){ra(t,!0);const a=I(()=>ca.value),r=I(()=>ca.tracked),i=I(()=>$i.value);let o=Dt({cpu:[],ram:[],gpu:[]});Mi(()=>{var oe;if(!n(i))return;const T=n(i).gpu,J=T&&T.vram.total+T.gtt.total>0?(T.vram.used+T.gtt.used)/(T.vram.total+T.gtt.total)*100:0;o.cpu=[...o.cpu,((oe=n(i).cpu)==null?void 0:oe.percent)??0].slice(-60),o.ram=[...o.ram,n(i).ram.percent].slice(-60),o.gpu=[...o.gpu,J].slice(-60)});const d=I(()=>()=>{var J;const T=(J=n(i))==null?void 0:J.gpu;return T&&T.vram.total+T.gtt.total>0?(T.vram.used+T.gtt.used)/(T.vram.total+T.gtt.total)*100:0}),c=I(()=>n(a).filter(T=>T.state!=="running"&&T.state!=="queued").length),u=I(()=>n(a).filter(T=>T.state==="failed").length);function v(T){if(T.state!=="running")return null;if(typeof T.progress=="number")return Math.min(100,T.progress);const oe=((T.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return oe?Math.min(100,parseFloat(oe[1])):null}function h(T){return T==null||T<0?"":T>=90?`noch ~${Math.round(T/60)} min`:`noch ~${Math.max(1,Math.round(T))} s`}function E(T){return T==="done"?'fertig':T==="failed"?'fehler':T==="canceled"?'abgebrochen':'läuft…'}function p(T){return T==="done"?"on":T==="failed"||T==="canceled"?"":"load"}async function w(T){try{await ge(`/api/jobs/${T}/cancel`,{method:"POST"}),te("Abbruch angefordert…")}catch(J){te(J.message,!0)}}async function A(T){try{await ge(`/api/jobs/${T}`,{method:"DELETE"})}catch(J){te(J.message,!0)}}async function L(){try{const T=await ge("/api/jobs/clear",{method:"POST"});te(`${T.removed} Einträge entfernt.`)}catch(T){te(T.message,!0)}}function M(T,J){return T.map(oe=>`
`).join("")}var R=Cd(),Se=s(_t(R),2);{var re=T=>{const J=I(()=>n(d)());var oe=wd(),Pe=_t(oe),Q=l(Pe),ye=s(l(Q),2),ne=l(ye),Ke=s(ye,2),Ie=l(Ke),He=s(Q,2),Ve=s(l(He),2),We=l(Ve),Tt=s(Ve,2),Pt=l(Tt),Ot=s(He,2),Rt=s(l(Ot),2),qt=l(Rt),D=s(Rt,2),U=l(D),Z=s(Pe,2),le=s(l(Z),4),x=l(le),z=s(l(x)),K=l(z),ie=s(x,2),$=s(l(ie),2),V=l($),ae=s(ie,2),we=s(l(ae)),Xe=l(we),Ae=s(ae,2),at=s(l(Ae),2),it=l(at),mt=s(le,2),et=l(mt),bt=s(l(et));qe(bt,()=>M(o.cpu,"--accent"),!0);var C=s(et,2),X=s(l(C));qe(X,()=>M(o.ram,"--purple"),!0);var pe=s(C,2),je=s(l(pe));qe(je,()=>M(o.gpu,"--on"),!0),O((Ne,Bt,Ht,It,Yt,sn,bn,$n,ln,on,yn,Je,pt)=>{m(ne,Ne),m(Ie,Bt),m(We,Ht),m(Pt,`${It??""} / ${Yt??""}`),m(qt,sn),m(U,bn),m(K,`${$n??""} / ${ln??""}`),m(V,on),m(Xe,`${yn??""} % belegt`),m(it,`${Je??""} / ${pt??""}`)},[()=>{var Ne;return Math.round(((Ne=n(i).cpu)==null?void 0:Ne.percent)??0)},()=>{var Ne;return((Ne=n(i).cpu)==null?void 0:Ne.temp)!=null?`${Math.round(n(i).cpu.temp)}° CPU-Temp`:"Auslastung"},()=>Math.round(n(i).ram.percent),()=>sa(n(i).ram.used),()=>sa(n(i).ram.total),()=>Math.round(n(J)),()=>n(i).gpu_temp!=null?`${Math.round(n(i).gpu_temp)}° GPU-Temp`:"VRAM + GTT",()=>sa(n(i).ram.used),()=>sa(n(i).ram.total),()=>n(i).gpu?`${sa(n(i).gpu.vram.used+n(i).gpu.gtt.used)} / ${sa(n(i).gpu.vram.total+n(i).gpu.gtt.total)}`:"–",()=>{var Ne;return Math.round(((Ne=n(i).disk)==null?void 0:Ne.percent)??0)},()=>n(i).gpu_temp!=null?Math.round(n(i).gpu_temp)+"°":"–",()=>{var Ne;return((Ne=n(i).cpu)==null?void 0:Ne.temp)!=null?Math.round(n(i).cpu.temp)+"°":"–"}]),b(T,oe)};G(Se,T=>{n(i)&&T(re)})}var ve=s(Se,2),be=l(ve),F=s(l(be),2),H=l(F),ue=s(F,2);{var fe=T=>{var J=xd();P("click",J,L),b(T,J)};G(ue,T=>{n(c)&&T(fe)})}var Ee=s(be,4);{var ze=T=>{var J=kd();b(T,J)},nt=T=>{var J=Br(),oe=_t(J);Ze(oe,17,()=>n(a),Ye,(Pe,Q)=>{const ye=I(()=>v(n(Q))),ne=I(()=>n(Q).state==="running"?h(n(Q).eta_s):""),Ke=I(()=>n(Q).state==="running"&&n(Q).rate_bps?sa(n(Q).rate_bps)+"/s":""),Ie=I(()=>[n(ne),n(Ke)].filter(Boolean).join(" · ")),He=I(()=>n(r).includes(n(Q).id));var Ve=Ad(),We=l(Ve),Tt=l(We),Pt=s(Tt,2),Ot=l(Pt),Rt=s(Pt,2);{var qt=$=>{var V=Md(),ae=l(V);O(we=>m(ae,`${we??""} %${n(Ie)?` · ${n(Ie)}`:""}`),[()=>Math.round(n(ye))]),b($,V)};G(Rt,$=>{n(ye)!=null&&$(qt)})}var D=s(Rt,2);{var U=$=>{var V=Sd();O(()=>hn(V,`${n(ye)==null?"margin-left:auto;":""}margin-right:2px;padding:2px 9px;font-size:12px`)),P("click",V,ae=>{ae.stopPropagation(),w(n(Q).id)}),b($,V)},Z=$=>{var V=Ed();P("click",V,ae=>{ae.stopPropagation(),A(n(Q).id)}),b($,V)};G(D,$=>{n(Q).state==="running"?$(U):$(Z,-1)})}var le=s(D,2);qe(le,()=>E(n(Q).state));var x=s(We,2);{var z=$=>{var V=Td(),ae=l(V);O(()=>hn(ae,`width:${n(ye)??""}%`)),b($,V)};G(x,$=>{n(ye)!=null&&n(Q).state==="running"&&$(z)})}var K=s(x,2);{var ie=$=>{var V=$d(),ae=l(V);O(we=>m(ae,we),[()=>(n(Q).log||[]).join(` `)]),b($,V)};G(K,$=>{n(He)&&$(ie)})}O($=>{vt(Tt,1,`li-dot ${$??""}`),m(Ot,n(Q).label)},[()=>p(n(Q).state)]),P("click",We,()=>ca.toggle(n(Q).id)),P("keydown",We,$=>$.key==="Enter"&&ca.toggle(n(Q).id)),b(Pe,Ve)}),b(T,J)};G(Ee,T=>{n(a).length?T(nt,-1):T(ze)})}O(()=>m(H,n(a).length?n(u)?n(u)+" Fehler":n(a).length+" gesamt":"")),b(e,R),ia()}ka(["click","keydown"]);var zd=k(' '),Pd=k(''),Dd=k('✓ fertig'),Od=k('✗ fehlgeschlagen'),Rd=k('abgebrochen'),qd=k('läuft…'),Bd=k('
'),Id=k('

Aktueller Vorgang

'),Nd=k('

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 geladen
Konfigurierte Modelle

Dienste & Applikation

Diese Aktionen sind harmlos und passwortlos — es geht nichts dabei verloren.

Betriebssystem (Bosgame)

Tiefe Eingriffe — das Dashboard fragt einmalig nach deinem sudo-Passwort.

Live-Konsole

Live mitlesen, was der Dienst gerade tut.
',1);function Fd(e,t){ra(t,!0);const a=I(()=>gr.value),r=I(()=>ca.value);let i=null,o=B(`Verbinde… `),d=B("llama-swap"),c,u=B(null),v=B("");const h=new Set,E=I(()=>n(u)?n(r).find(C=>C.id===n(u)):null);Mi(()=>{if(!n(E))return;const C=n(E),X=C.state==="done",pe=C.state==="failed",je=C.state==="canceled";(X||pe||je)&&!h.has(C.id)&&(h.add(C.id),te(X?`✓ ${n(v)} abgeschlossen.`:je?`${n(v)} abgebrochen.`:`✗ ${n(v)} fehlgeschlagen.`,pe),X&&setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),800))});function p(C,X){g(u,C,!0),g(v,X,!0),ca.track(C)}hr(()=>{w()}),Ro(()=>{i==null||i.close()});function w(){i==null||i.close();const C=n(d);g(o,`Verbinde mit ${C}… `);const X=location.protocol==="https:"?"wss:":"ws:";i=new WebSocket(`${X}//${location.host}/api/logs/${C}?token=${encodeURIComponent(Ys())}`),i.onmessage=pe=>{g(o,n(o)+pe.data),c&&(c.scrollTop=c.scrollHeight)},i.onclose=()=>{g(o,n(o)+` — Verbindung getrennt —`)},i.onerror=()=>i==null?void 0:i.close()}async function A(C,X,pe){if(await Mn({title:X,body:pe,confirmLabel:"Neustarten"}))try{await ge(`/api/service/${C}/restart`,{method:"POST"}),te("Neustart ausgelöst: "+C),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),2e3)}catch(je){te(je.message,!0)}}async function L(){if(await Mn({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 C=await ge("/api/self-update",{method:"POST"});te("Update läuft — Dashboard startet gleich neu."),p(C.job_id,"Mission Control Update")}catch(C){te(C.message,!0)}}async function M(){if(await Mn({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."}))try{const C=await ge("/api/update",{method:"POST"});te("LLM-Engine-Update läuft."),p(C.job_id,"LLM-Engine-Update")}catch(C){te(C.message,!0)}}async function R(){if(await Mn({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 ge("/api/unload",{method:"POST"}),te("Grafikspeicher geleert."),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),600)}catch(C){te(C.message,!0)}}async function Se(){if(!await Mn({title:"OS-Updates installieren?",body:"Führt apt update & upgrade aus. Das kann ein paar Minuten dauern; der Fortschritt erscheint in der Aktivität."}))return;const C=await Ui({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(C)try{const X=await ge("/api/os-update",{method:"POST",body:JSON.stringify({password:C})});te("OS-Update gestartet."),p(X.job_id,"OS-Update")}catch(X){te(X.message,!0)}}async function re(){if(!await Mn({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 C=await Ui({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(C)try{await ge("/api/reboot",{method:"POST",body:JSON.stringify({password:C})}),te("Reboot ausgelöst — bis gleich.")}catch(X){te(X.message,!0)}}async function ve(){g(be,"prüfe…");try{const C=await ge("/api/integration/test");g(be,C.ok?`✓ Engine antwortet — ${C.models.length} Modell(e): ${C.models.join(", ")}`:`✗ keine Verbindung: ${C.error}`,!0),g(F,C.ok,!0)}catch(C){g(be,"✗ "+C.message),g(F,!1)}}let be=B(""),F=B(!1);const H=I(()=>{var C;return((C=n(a))==null?void 0:C.models)||[]}),ue=["running","ready","loading","starting"],fe=I(()=>n(H).find(C=>ue.includes(C.state)));function Ee(C){if(!C||C.state!=="running")return null;if(typeof C.progress=="number")return Math.min(100,C.progress);const pe=((C.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return pe?Math.min(100,parseFloat(pe[1])):null}var ze=Nd(),nt=s(_t(ze),2),T=l(nt),J=s(l(T),2),oe=l(J),Pe=s(T,4),Q=l(Pe),ye=s(l(Q)),ne=l(ye),Ke=s(Q,2),Ie=s(l(Ke),2),He=l(Ie),Ve=s(Ke,2),We=s(l(Ve),2),Tt=l(We),Pt=s(Pe,2),Ot=l(Pt),Rt=s(Ot,2);{var qt=C=>{var X=zd(),pe=l(X);O(()=>{hn(X,`color:${n(F)?"#7ee29a":"#ff9b95"}`),m(pe,n(be))}),b(C,X)};G(Rt,C=>{n(be)&&C(qt)})}var D=s(nt,2),U=s(l(D),4),Z=s(U,2),le=s(Z,2),x=s(le,2),z=s(x,2),K=s(D,2),ie=s(l(K),4),$=s(ie,2),V=s(K,2);{var ae=C=>{const X=I(()=>n(E)),pe=I(()=>n(X).state==="done"),je=I(()=>n(X).state==="failed"),Ne=I(()=>n(X).state==="canceled"),Bt=I(()=>n(pe)||n(je)||n(Ne)),Ht=I(()=>Ee(n(X)));var It=Id(),Yt=l(It),sn=s(l(Yt),2);{var bn=_e=>{var Qe=Pd();P("click",Qe,async()=>{await Mn({title:n(v)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&ge(`/api/jobs/${n(X).id}/cancel`,{method:"POST"})}),b(_e,Qe)};G(sn,_e=>{n(Bt)||_e(bn)})}var $n=s(sn,2),ln=l($n);{var on=_e=>{var Qe=Dd();b(_e,Qe)},yn=_e=>{var Qe=Od();b(_e,Qe)},Je=_e=>{var Qe=Rd();b(_e,Qe)},pt=_e=>{var Qe=qd();b(_e,Qe)};G(ln,_e=>{n(pe)?_e(on):n(je)?_e(yn,1):n(Ne)?_e(Je,2):_e(pt,-1)})}var S=s(Yt,2),ee=l(S),st=s(S,2);{var xe=_e=>{var Qe=Bd(),dn=l(Qe);O(()=>hn(dn,`width:${n(Ht)??""}%`)),b(_e,Qe)};G(st,_e=>{n(Ht)!=null&&!n(Bt)&&_e(xe)})}var rt=s(st,2),Vt=l(rt);O(_e=>{m(ee,`${n(v)??""}${n(Bt)?n(pe)?" — erfolgreich.":n(Ne)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),m(Vt,_e)},[()=>(n(X).log||[]).join(` `)]),b(C,It)};G(V,C=>{n(E)&&C(ae)})}var we=s(V,2),Xe=l(we),Ae=s(l(Xe),2),at=l(Ae);at.value=at.__value="llama-swap";var it=s(at);it.value=it.__value="mission-control";var mt=s(it);mt.value=mt.__value="system";var et=s(Xe,4),bt=l(et);Oo(et,C=>c=C,()=>c),O(C=>{var X,pe,je;hn(J,`margin-left:auto;${(X=n(a))!=null&&X.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"}`),m(oe,(pe=n(a))!=null&&pe.swap_ok?"● erreichbar":"● offline"),m(ne,(((je=n(a))==null?void 0:je.swap_url)||"—")+"/v1"),m(He,n(fe)?n(fe).name+` (${n(fe).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),m(Tt,C),m(bt,n(o))},[()=>n(H).filter(C=>!C.incomplete).length||"keine"]),P("click",Ot,ve),P("click",U,()=>A("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),P("click",Z,()=>A("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),P("click",le,L),P("click",x,M),P("click",z,R),P("click",ie,Se),P("click",$,re),P("change",Ae,w),nr(Ae,()=>n(d),C=>g(d,C)),b(e,ze),ia()}ka(["click","change"]);var Kd=k('
Lade Setups…
'),Gd=k(' ×',1),Qr=k('
★ Beste Wahl für dein System
'),Ud=k('
Dein Setup
'),Hd=k(''),Vd=k('
'),Wd=k('· ⚠ Cache veraltet'),jd=k(" ",1),Jd=k('
Frage Quellen ab…
'),Qd=k('
'),Yd=k('✓ installiert'),Zd=k(''),Xd=k('

'),ec=k('

'),tc=k(''),nc=k('

'),ac=k('
'),rc=k('
'),ic=k('
'),sc=k(" "),lc=k('
'),oc=k('
Größter Spitzenbedarf: . Es läuft immer nur ein Modell gleichzeitig — das größte bestimmt, ob das Setup passt.
'),dc=k(''),cc=k('
Lade Dateien von HuggingFace…
'),Ji=k(""),uc=k('
Empfohlener Kontext für deine Hardware: übernehmen
'),vc=k('
Ressourcen-Check
'),fc=k('
',1),pc=k('
Keine GGUF-Dateien im Repo gefunden.
'),hc=k(''),gc=k('
'),_c=k(''),mc=k('

Cookbook

Modelle finden, installieren und eigene Setups zusammenstellen.

Use-Case-Setups

Fertige Modell-Bundles für deinen Anwendungsfall. Hardware-Ampel zeigt, ob es 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.

Profi-Suche (HuggingFace)

Direkt HuggingFace durchsuchen — oder eine Modell-URL einfügen für den direkten Sprung.
',1);function bc(e,t){ra(t,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr, braucht aber mehr Speicher und wird etwas langsamer.",r="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.",i={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(_){const y=(_||"").toLowerCase();for(const N of d)if(N.kw.some(q=>y.includes(q)))return N.label;return"Allrounder"}function u(_=""){const y=_.toLowerCase();return/\d+x\d+(\.\d+)?b/.test(y)||new RegExp("(?{Pt(),Ot()});async function Pt(){g(L,!0);try{const _=await ge("/api/cookbook/recipes");g(w,_.recipes||[],!0),g(A,_.recommended_id||null,!0)}catch(_){te(_.message,!0)}g(L,!1)}async function Ot(_=!1){g(R,!0);try{const y=await ge("/api/cookbook/discover"+(_?"?force=true":""));g(M,y,!0),g(Se,y.stale,!0)}catch(y){te("Empfehlungen nicht ladbar: "+y.message,!0)}g(R,!1)}function Rt(_){_=_.trim();const y=_.match(/huggingface\.co\/([^\s/]+\/[^\s/?#]+)/i);return y?y[1]:/^[\w.-]+\/[\w.-]+$/.test(_)?_:null}async function qt(){const _=n(re).trim(),y=Rt(_);let N=_;if(n(F)&&!y&&(N=N?N+" "+n(F):n(F)),!N&&!y){g(ve,[],!0);return}g(be,!0),g(ue,[],!0),g(fe,-1);try{if(y)g(ve,[{id:y,author:y.split("/")[0],downloads:0}],!0);else{const q=`https://huggingface.co/api/models?search=${encodeURIComponent(N)}&filter=gguf&sort=${encodeURIComponent(n(H))}&direction=-1&limit=40`,Y=await fetch(q);g(ve,await Y.json(),!0)}n(ve).forEach((q,Y)=>D(Y,q.id))}catch(q){te(q.message,!0),g(ve,[],!0)}g(be,!1)}async function D(_,y){var N;try{const q=await ge("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:y,ctx:8192})});if(!((N=q.files)!=null&&N.length)){n(ue)[_]=null,U();return}const Y=q.files.find(Ce=>{var Le;return(Le=Ce.quant)==null?void 0:Le.includes("Q4_K_M")})||q.files[0];n(ue)[_]=Y.fit.level,U()}catch{n(ue)[_]=null,U()}}function U(){let _=-1,y=99;n(ue).forEach((N,q)=>{if(N==null)return;const Y=i[N]??99;Y=0&&y<=1?_:-1,!0)}function Z(_){g(Ee,n(w).find(y=>y.id===_),!0)}async function le(_){const y=document.getElementById("cb-r-install-btn");y&&(y.disabled=!0,y.textContent="Starte…");try{const N=await ge("/api/cookbook/install-recipe",{method:"POST",body:JSON.stringify({recipe_id:_,hf_token:rr()})});te(`${N.count} Downloads gestartet — siehe Aktivität.`),g(Ee,null),Tt("activity")}catch(N){te(N.message,!0),y&&(y.disabled=!1,y.textContent="Installieren")}}async function x(_,y){var N,q;g(ze,!0),g(nt,y,!0),g(T,_,!0),g(Pe,""),g(Q,8192),g(J,null),g(ne,null),g(oe,""),g(ye,!0);try{if(g(J,await ge("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:_,ctx:8192})}),!0),(q=(N=n(J))==null?void 0:N.files)!=null&&q.length){const Y=n(J).files.find(Ce=>{var Le;return(Le=Ce.quant)==null?void 0:Le.includes("Q4_K_M")})||n(J).files[0];g(oe,Y.filename,!0),Y.optimal_ctx&&n(Q)===8192&&g(Q,Y.optimal_ctx,!0),z()}}catch(Y){te(Y.message,!0)}g(ye,!1)}function z(){var _,y,N;!((y=(_=n(J))==null?void 0:_.files)!=null&&y.length)||!n(oe)||(g(ne,n(J).files.find(q=>q.filename===n(oe))||null,!0),(N=n(ne))!=null&&N.optimal_ctx&&n(Q)===8192&&g(Q,n(ne).optimal_ctx,!0))}async function K(){if(!n(T)||!n(oe))return te("Bitte eine GGUF-Datei wählen.",!0);g(ye,!0);try{const _=await ge("/api/download",{method:"POST",body:JSON.stringify({repo:n(T),file:n(oe),hf_token:rr()})});await ge("/api/register",{method:"POST",body:JSON.stringify({role:n(Pe),model_path:_.expected_path,ctx:n(Q)})}),te("Download gestartet — siehe Aktivität."),g(ze,!1),Tt("activity")}catch(_){te("Fehler: "+_.message,!0)}g(ye,!1)}async function ie(_,y,N,q){q.disabled=!0,q.textContent="Starte…";try{await ge("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:_,role:y,params_b:N,quant:"Q4_K_M",hf_token:rr()})}),te("Download gestartet — siehe Aktivität."),Tt("activity")}catch(Y){te(Y.message,!0),q.disabled=!1,q.textContent="Installieren"}}function $(){g(We,null),g(Ie,""),g(He,""),g(Ve,[{repo:"",role:"",quant:"Q4_K_M"}],!0),g(Ke,!0)}function V(_){const y=n(w).find(N=>N.id===_);y&&(g(We,_,!0),g(Ie,y.title,!0),g(He,y.desc||"",!0),g(Ve,y.models.map(N=>({repo:N.repo,role:N.role,quant:N.quant||"Q4_K_M"})),!0),g(Ke,!0))}async function ae(){if(!n(Ie).trim())return te("Bitte einen Titel angeben.",!0);const _=n(Ve).filter(y=>y.repo.trim());if(!_.length)return te("Mindestens ein Modell (Repo) angeben.",!0);try{n(We)?(await ge("/api/cookbook/user-recipe/"+encodeURIComponent(n(We)),{method:"PUT",body:JSON.stringify({title:n(Ie),desc:n(He),models:_})}),te("Setup aktualisiert.")):(await ge("/api/cookbook/user-recipe",{method:"POST",body:JSON.stringify({title:n(Ie),desc:n(He),models:_})}),te("Setup gespeichert.")),g(Ke,!1),Pt()}catch(y){te(y.message,!0)}}async function we(_){const y=n(w).find(N=>N.id===_);if(await Mn({title:`„${(y==null?void 0:y.title)||_}" löschen?`,body:"Dein eigenes Setup wird aus dem Cookbook entfernt. Bereits installierte Modelle bleiben unangetastet.",confirmLabel:"Löschen",danger:!0}))try{await ge("/api/cookbook/user-recipe/"+encodeURIComponent(_),{method:"DELETE"}),te("Setup gelöscht."),Pt()}catch(N){te(N.message,!0)}}function Xe(_){if(!u(_))return"";const y=v(_);return`MoE${y?` · ~${y}B aktiv`:""}`}function Ae(_){return _?`${Rn(_)}`:""}var at=mc(),it=s(_t(at),2),mt=l(it),et=s(l(mt),2),bt=s(mt,4);{var C=_=>{var y=Kd();b(_,y)},X=_=>{var y=Vd();Ze(y,21,()=>n(w),Ye,(N,q)=>{const Y=I(()=>n(q).id===n(A));var Ce=Hd(),Le=l(Ce);{var lt=Ue=>{var ct=Gd(),Zt=_t(ct),wt=s(Zt,2);P("click",Zt,xt=>{xt.stopPropagation(),V(n(q).id)}),P("keydown",Zt,xt=>{xt.key==="Enter"&&(xt.stopPropagation(),V(n(q).id))}),P("click",wt,xt=>{xt.stopPropagation(),we(n(q).id)}),P("keydown",wt,xt=>{xt.key==="Enter"&&(xt.stopPropagation(),we(n(q).id))}),b(Ue,ct)};G(Le,Ue=>{n(q).user&&Ue(lt)})}var yt=s(Le,2);{var Te=Ue=>{var ct=Qr();b(Ue,ct)},De=Ue=>{var ct=Ud();b(Ue,ct)};G(yt,Ue=>{n(Y)?Ue(Te):n(q).user&&Ue(De,1)})}var Me=s(yt,2),ke=l(Me),Fe=l(ke),Ge=l(Fe),Oe=s(ke,2),j=l(Oe),ce=s(Me,2),ot=l(ce),$t=s(ce,2),dt=l($t);O((Ue,ct)=>{vt(Ce,1,`card-btn${n(Y)?" cb-best":""}`),m(Ge,n(q).title),vt(Oe,1,`fit-badge ${Ue??""}`),m(j,ct),m(ot,n(q).desc),m(dt,`${n(q).models.length??""} Modell${n(q).models.length>1?"e":""} im Setup`)},[()=>h(n(q).fit_level),()=>E(n(q).fit_level)]),P("click",Ce,()=>Z(n(q).id)),b(N,Ce)}),b(_,y)};G(bt,_=>{n(L)?_(C):_(X,-1)})}var pe=s(it,2),je=l(pe),Ne=s(l(je),2),Bt=l(Ne);{var Ht=_=>{const y=I(()=>Math.round((Date.now()/1e3-n(M).updated)/60));var N=jd(),q=_t(N);{var Y=Te=>{var De=tr();O(()=>m(De,`Quellen befragt vor ${n(y)??""} min`)),b(Te,De)},Ce=Te=>{var De=tr();O(Me=>m(De,`Quellen befragt vor ${Me??""} h`),[()=>Math.round(n(y)/60)]),b(Te,De)},Le=Te=>{var De=tr();O(Me=>m(De,`Quellen befragt vor ${Me??""} Tg.`),[()=>Math.round(n(y)/1440)]),b(Te,De)};G(q,Te=>{n(y)<60?Te(Y):n(y)<1440?Te(Ce,1):Te(Le,-1)})}var lt=s(q,2);{var yt=Te=>{var De=Wd();b(Te,De)};G(lt,Te=>{n(Se)&&Te(yt)})}b(_,N)};G(Bt,_=>{var y;(y=n(M))!=null&&y.updated&&_(Ht)})}var It=s(Ne,2),Yt=l(It),sn=s(je,4);{var bn=_=>{var y=Jd();b(_,y)},$n=_=>{var y=Br(),N=_t(y);Ze(N,17,()=>n(M).categories,Ye,(q,Y)=>{var Ce=ec(),Le=l(Ce),lt=l(Le),yt=l(lt),Te=s(Le,2);Ze(Te,21,()=>n(Y).models,Ye,(De,Me)=>{const ke=I(()=>n(Y).recommended&&n(Me).repo===n(Y).recommended);var Fe=Xd(),Ge=l(Fe);{var Oe=Et=>{var Kt=Qr();b(Et,Kt)};G(Ge,Et=>{n(ke)&&Et(Oe)})}var j=s(Ge,2),ce=l(j),ot=l(ce),$t=l(ot),dt=s(ot,2),Ue=l(dt),ct=s(ce,2),Zt=l(ct),wt=s(j,2),xt=l(wt);qe(xt,()=>Ae(o[n(Me).role]||c(n(Me).repo)));var Cn=s(xt,2);qe(Cn,()=>Xe(n(Me).repo));var Wn=s(wt,2),tt=l(Wn),ut=s(Wn,2);Ze(ut,17,()=>n(Me).requirements||[],Ye,(Et,Kt)=>{var jn=Qd(),Kr=l(jn);O(()=>m(Kr,`⚠ ${n(Kt)??""}`)),b(Et,jn)});var ht=s(ut,4),kt=l(ht);{var Xt=Et=>{var Kt=Yd();O(()=>Ir(Kt,"title",`bereits eingerichtet als ${n(Me).installed??""}`)),b(Et,Kt)},Ft=Et=>{var Kt=Zd();P("click",Kt,jn=>ie(n(Me).repo,n(Me).role,n(Me).params_b,jn.currentTarget)),b(Et,Kt)};G(kt,Et=>{n(Me).installed?Et(Xt):Et(Ft,-1)})}O((Et,Kt,jn)=>{vt(Fe,1,`card${n(ke)?" res-best":""}`),m($t,n(Me).name),m(Ue,`${n(Me).author??""} · ${n(Me).params_b??""}B`),vt(ct,1,`fit-badge ${Et??""}`),m(Zt,n(Me).fit.text),m(tt,`${Kt??""} · ⬇ ${jn??""}`)},[()=>h(n(Me).fit.level),()=>p(n(Me).fit),()=>(n(Me).downloads||0).toLocaleString()]),b(De,Fe)}),O(()=>m(yt,n(Y).title)),b(q,Ce)}),b(_,y)};G(sn,_=>{var y;n(R)&&!n(M)?_(bn):(y=n(M))!=null&&y.categories&&_($n,1)})}var ln=s(pe,2),on=s(l(ln),4),yn=l(on),Je=s(yn,2),pt=l(Je);pt.value=pt.__value="downloads";var S=s(pt);S.value=S.__value="trending";var ee=s(S);ee.value=ee.__value="created_at";var st=s(Je,2),xe=l(st),rt=s(on,2);Ze(rt,20,()=>["","coder","vision","reasoning","chat","agent"],Ye,(_,y)=>{var N=tc(),q=l(N);O(()=>{vt(N,1,n(F)===y?"primary":"ghost"),m(q,y||"Alle")}),P("click",N,()=>{g(F,y,!0),qt()}),b(_,N)});var Vt=s(rt,2);{var _e=_=>{var y=ac();Ze(y,21,()=>n(ve),Ye,(N,q,Y)=>{var Ce=nc(),Le=l(Ce);{var lt=wt=>{var xt=Qr();b(wt,xt)};G(Le,wt=>{Y===n(fe)&&wt(lt)})}var yt=s(Le,2),Te=l(yt),De=l(Te),Me=l(De),ke=s(De,2),Fe=l(ke),Ge=s(Te,2),Oe=l(Ge),j=s(yt,2),ce=l(j);qe(ce,()=>Ae(c(n(q).id)));var ot=s(ce,2);qe(ot,()=>Xe(n(q).id));var $t=s(j,4),dt=l($t),Ue=l(dt),ct=s(dt,2),Zt=l(ct);O((wt,xt,Cn,Wn,tt)=>{vt(Ce,1,`card${Y===n(fe)?" res-best":""}`),m(Me,wt),m(Fe,n(q).author||""),vt(Ge,1,`fit-badge ${xt??""}`),m(Oe,Cn),m(Ue,Wn),m(Zt,`⬇ ${tt??""}`)},[()=>n(q).id.split("/").pop(),()=>n(ue)[Y]?h(n(ue)[Y]):"warn",()=>n(ue)[Y]?E(n(ue)[Y]):"prüfe…",()=>n(ue)[Y]?p({req_gb:0,tps:0}):"Hardware-Fit…",()=>(n(q).downloads||0).toLocaleString()]),P("click",Ce,()=>x(n(q).id,n(q).id.split("/").pop())),b(N,Ce)}),b(_,y)};G(Vt,_=>{n(ve).length&&_(_e)})}var Qe=s(ln,2);{var dn=_=>{const y=I(()=>n(Ee));var N=dc(),q=l(N),Y=l(q),Ce=s(Y,2),Le=l(Ce),lt=s(Ce,2),yt=l(lt),Te=s(lt,2);Ze(Te,21,()=>n(y).models,Ye,(Ge,Oe)=>{var j=lc(),ce=l(j),ot=l(ce),$t=l(ot),dt=l($t),Ue=s($t,2),ct=l(Ue),Zt=s(Ue,2);qe(Zt,()=>Xe(n(Oe).repo));var wt=s(ot,2);{var xt=ht=>{var kt=rc(),Xt=l(kt);O(()=>m(Xt,n(Oe).why)),b(ht,kt)};G(wt,ht=>{n(Oe).why&&ht(xt)})}var Cn=s(wt,2);{var Wn=ht=>{var kt=ic(),Xt=l(kt);O((Ft,Et,Kt)=>m(Xt,`~${Ft??""} GB · ~${Et??""} Tok/s · optimal ~${Kt??""}k Kontext`),[()=>(n(Oe).fit.req_gb??0).toFixed(1),()=>Math.round(n(Oe).fit.tps??0),()=>Math.round((n(Oe).optimal_ctx||8192)/1024)]),b(ht,kt)};G(Cn,ht=>{n(Oe).fit&&ht(Wn)})}var tt=s(ce,2);{var ut=ht=>{var kt=sc(),Xt=l(kt);O(Ft=>{vt(kt,1,`fit-badge ${Ft??""}`),m(Xt,n(Oe).fit.text)},[()=>h(n(Oe).fit.level)]),b(ht,kt)};G(tt,ht=>{n(Oe).fit&&ht(ut)})}O(()=>{m(dt,n(Oe).name),m(ct,n(Oe).role)}),b(Ge,j)});var De=s(Te,2);{var Me=Ge=>{const Oe=I(()=>Math.max(...n(y).models.map($t=>{var dt;return((dt=$t.fit)==null?void 0:dt.req_gb)??0})));var j=oc(),ce=s(l(j)),ot=l(ce);O($t=>m(ot,`~${$t??""} GB`),[()=>n(Oe).toFixed(1)]),b(Ge,j)};G(De,Ge=>{n(y).models.length&&n(y).models[0].fit&&Ge(Me)})}var ke=s(De,2),Fe=l(ke);O(()=>{m(Le,n(y).title),m(yt,n(y).desc),vt(ke,1,`primary${n(y).fit_level==="too_tight"?" warn":""}`),m(Fe,n(y).fit_level==="too_tight"?"Trotzdem installieren (zu groß)":"Komplettes Setup installieren")}),P("click",N,Ge=>{Ge.target.classList.contains("modal-overlay")&&g(Ee,null)}),P("click",Y,()=>g(Ee,null)),P("click",ke,()=>le(n(y).id)),b(_,N)};G(Qe,_=>{n(Ee)&&_(dn)})}var Nt=s(Qe,2);{var In=_=>{var y=hc(),N=l(y),q=l(N),Y=s(q,2),Ce=l(Y),Le=s(Y,2),lt=l(Le),yt=s(Le,2);{var Te=ke=>{var Fe=cc();b(ke,Fe)},De=ke=>{var Fe=fc(),Ge=s(_t(Fe),2);Ze(Ge,21,()=>n(J).files,Ye,(tt,ut)=>{const ht=I(()=>n(ut).fit.level==="perfect"?"●":n(ut).fit.level==="marginal"?"◐":"○");var kt=Ji(),Xt=l(kt),Ft={};O(()=>{m(Xt,`${n(ht)??""} ${n(ut).filename??""}`),Ft!==(Ft=n(ut).filename)&&(kt.value=(kt.__value=n(ut).filename)??"")}),b(tt,kt)});var Oe=s(Ge,2),j=l(Oe),ce=s(l(j),2),ot=s(j,2),$t=l(ot),dt=s(l($t));qe(dt,()=>fi(a));var Ue=s($t,2),ct=s(Oe,2);{var Zt=tt=>{var ut=uc(),ht=s(l(ut)),kt=l(ht),Xt=s(ht,2);O(Ft=>m(kt,`~${Ft??""}k`),[()=>Math.round(n(ne).optimal_ctx/1024)]),P("click",Xt,Ft=>{Ft.preventDefault(),g(Q,n(ne).optimal_ctx,!0)}),b(tt,ut)};G(ct,tt=>{var ut;(ut=n(ne))!=null&&ut.optimal_ctx&&tt(Zt)})}var wt=s(ct,2);{var xt=tt=>{var ut=vc(),ht=l(ut),kt=s(l(ht),2),Xt=l(kt),Ft=s(ht,2),Et=l(Ft);O((Kt,jn,Kr)=>{m(Xt,`~${Kt??""} GB · ~${jn??""} Tok/s · ${(n(ne).quant||"GGUF")??""}`),vt(Ft,1,`fit-badge ${Kr??""}`),m(Et,n(ne).fit.text)},[()=>(n(ne).fit.req_gb??0).toFixed(1),()=>Math.round(n(ne).fit.tps??0),()=>h(n(ne).fit.level)]),b(tt,ut)};G(wt,tt=>{n(ne)&&tt(xt)})}var Cn=s(wt,2),Wn=l(Cn);O(()=>{var tt,ut;vt(Cn,1,`primary${((tt=n(ne))==null?void 0:tt.fit.level)==="too_tight"?" warn":""}`),Cn.disabled=n(ye),m(Wn,n(ye)?"Starte…":((ut=n(ne))==null?void 0:ut.fit.level)==="too_tight"?"Trotzdem holen (zu groß)":"Herunterladen & Einpflegen")}),P("change",Ge,z),nr(Ge,()=>n(oe),tt=>g(oe,tt)),Ln(ce,()=>n(Pe),tt=>g(Pe,tt)),Ln(Ue,()=>n(Q),tt=>g(Q,tt)),P("click",Cn,K),b(ke,Fe)},Me=ke=>{var Fe=pc();b(ke,Fe)};G(yt,ke=>{var Fe,Ge;n(ye)&&!n(J)?ke(Te):(Ge=(Fe=n(J))==null?void 0:Fe.files)!=null&&Ge.length?ke(De,1):n(ye)||ke(Me,2)})}O(()=>{m(Ce,n(nt)),m(lt,n(T))}),P("click",y,ke=>{ke.target.classList.contains("modal-overlay")&&g(ze,!1)}),P("click",q,()=>g(ze,!1)),b(_,y)};G(Nt,_=>{n(ze)&&_(In)})}var Nn=s(Nt,2);{var An=_=>{var y=_c(),N=l(y),q=l(N),Y=s(q,2),Ce=l(Y),Le=s(Y,6),lt=s(Le,4),yt=s(lt,4);Ze(yt,17,()=>n(Ve),Ye,(ke,Fe,Ge)=>{var Oe=gc(),j=l(Oe),ce=s(j,2),ot=s(ce,2);Ze(ot,20,()=>["Q4_K_M","Q5_K_M","Q6_K","Q8_0","Q3_K_M"],Ye,(dt,Ue)=>{var ct=Ji(),Zt=l(ct),wt={};O(()=>{m(Zt,Ue),wt!==(wt=Ue)&&(ct.__value=Ue)}),b(dt,ct)});var $t=s(ot,2);Ln(j,()=>n(Fe).repo,dt=>n(Fe).repo=dt),Ln(ce,()=>n(Fe).role,dt=>n(Fe).role=dt),nr(ot,()=>n(Fe).quant,dt=>n(Fe).quant=dt),P("click",$t,()=>g(Ve,n(Ve).filter((dt,Ue)=>Ue!==Ge),!0)),b(ke,Oe)});var Te=s(yt,2),De=s(Te,4),Me=l(De);O(()=>{m(Ce,n(We)?"Setup bearbeiten":"Eigenes Setup erstellen"),m(Me,n(We)?"Änderungen speichern":"Setup speichern")}),P("click",y,ke=>{ke.target.classList.contains("modal-overlay")&&g(Ke,!1)}),P("click",q,()=>g(Ke,!1)),Ln(Le,()=>n(Ie),ke=>g(Ie,ke)),Ln(lt,()=>n(He),ke=>g(He,ke)),P("click",Te,()=>g(Ve,[...n(Ve),{repo:"",role:"",quant:"Q4_K_M"}],!0)),P("click",De,ae),b(_,y)};G(Nn,_=>{n(Ke)&&_(An)})}O(()=>{It.disabled=n(R),m(Yt,n(R)?"Suche…":"Aktualisieren"),st.disabled=n(be),m(xe,n(be)?"Lade…":"Suchen")}),P("click",et,$),P("click",It,()=>Ot(!0)),P("keydown",yn,_=>_.key==="Enter"&&qt()),Ln(yn,()=>n(re),_=>g(re,_)),nr(Je,()=>n(H),_=>g(H,_)),P("click",st,qt),b(e,at),ia()}ka(["click","keydown","change"]);var yc=k(`
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: http://192.168.178.151:8080/v1 — nicht den Proxy-Namen.
`),wc=k(' '),xc=k('
'),kc=k(' '),Mc=k(''),Sc=k('

2 · Modelle auswählen

Wähle, welche Modelle im Config-Snippet erscheinen sollen.
'),Ec=k(''),Tc=k('

Öffne die Zed-Settings mit Cmd/Strg + , und füge diesen Block in deine bestehende settings.json ein. 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.
',1),$c=k('

Datei anlegen oder öffnen:

Windows: %USERPROFILE%\\.config\\opencode\\opencode.json

Nur den "provider"-Block einfügen. Falls bereits ein "llama-swap"-Eintrag vorhanden: vorher löschen, sonst erscheinen Modelle doppelt.

Danach in OpenCode /models wählen.

',1),Ac=k('

In Cline/Cursor den Provider „OpenAI Compatible" wählen:

API-Key: ein beliebiger Wert (z.B. local).
',1),Cc=k('

Settings → Admin Panel → Connections → neue OpenAI-Verbindung:

',1),Lc=k('

Bilder einbinden (Vision)

Mit Vision-Modellen kannst du Screenshots oder Fehlerbilder direkt mitschicken.
'),zc=k('

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?

3 · Tool wählen

Für welches Werkzeug brauchst du die Konfiguration?

4 · Config-Snippet

',1);function Pc(e,t){ra(t,!0);const a=I(()=>gr.value),r=I(()=>{var D;return(((D=n(a))==null?void 0:D.models)||[]).filter(U=>!U.incomplete)}),i=I(v);let o=B("zed"),d=B(Dt([])),c=B(""),u=B(!1);function v(){return`http://${location.hostname}:8080/v1`}function h(D){return/^\d{1,3}(\.\d{1,3}){3}$/.test(D)}function E(){return location.protocol==="https:"||!h(location.hostname)}const p=I(()=>n(d).length?n(d):n(r).map(D=>D.name)),w=I(()=>n(p)[0]||"coder"),A=I(()=>{var D;return(D=n(r).find(U=>{var Z,le;return(le=(Z=U.meta)==null?void 0:Z.caps)==null?void 0:le.includes("Bild")}))==null?void 0:D.name});function L(D,U){const le=(U.length?n(r).filter(x=>U.includes(x.name)):n(r).length?n(r):[{name:"coder",meta:{}}]).map(x=>{var ie,$;const z=(((ie=x.meta)==null?void 0:ie.caps)||[]).some(V=>/Bild|Vision/i.test(V)),K=(($=x.meta)==null?void 0:$.ctx)||131072;return` { "name": "${x.name}", "display_name": "${x.name}", "max_tokens": ${K}${z?', "capabilities": { "tools": true, "images": true }':""} }`}).join(`, `);return`"language_models": { "openai_compatible": { "bosgame": { "api_url": "${D}", "available_models": [ ${le} ] } } }`}function M(D,U){const le=(U.length?n(r).filter(x=>U.includes(x.name)):n(r).length?n(r):[{name:"coder",meta:{}}]).map(x=>{var K;const z=((K=x.meta)==null?void 0:K.ctx)||131072;return` "${x.name}": { "name": "${x.name}", "contextWindowSize": ${z} }`}).join(`, `);return`"provider": { "llama-swap": { "npm": "@ai-sdk/openai-compatible", "name": "Bosgame (llama-swap)", "options": { "baseURL": "${D}", "apiKey": "local" }, "models": { ${le} } } }`}async function R(){g(c,"Teste…");try{const D=await ge("/api/integration/test");g(u,D.ok,!0),g(c,D.ok?`✓ Verbunden — ${D.models.length} Modell(e): ${D.models.join(", ")}`:`✗ Keine Verbindung: ${D.error}`,!0)}catch(D){g(u,!1),g(c,"✗ "+D.message)}}function Se(D){var Z;const U=D.querySelector("code");U&&((Z=navigator.clipboard)==null||Z.writeText(U.textContent||""))}function re(D){var U;(U=navigator.clipboard)==null||U.writeText(D.value)}var ve=zc(),be=s(_t(ve),2),F=s(l(be),6),H=l(F),ue=s(H,2),fe=s(F,2);{var Ee=D=>{var U=yc();b(D,U)},ze=I(()=>E());G(fe,D=>{n(ze)&&D(Ee)})}var nt=s(fe,2),T=l(nt),J=s(T,2);{var oe=D=>{var U=wc(),Z=l(U);O(()=>{hn(U,`color:${n(u)?"#7ee29a":"#ff9b95"}`),m(Z,n(c))}),b(D,U)};G(J,D=>{n(c)&&D(oe)})}var Pe=s(be,2),Q=s(l(Pe),2);Ze(Q,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."]],Ye,(D,U)=>{var Z=I(()=>ir(U,3));let le=()=>n(Z)[0],x=()=>n(Z)[1],z=()=>n(Z)[2];var K=xc(),ie=l(K),$=l(ie),V=s(ie,2),ae=l(V),we=l(ae),Xe=s(ae,2),Ae=l(Xe);O(()=>{m($,le()),m(we,x()),m(Ae,z())}),b(D,K)});var ye=s(Pe,2);{var ne=D=>{var U=Sc(),Z=l(U),le=s(l(Z),2),x=l(le),z=s(Z,4);Ze(z,21,()=>n(r),Ye,($,V)=>{const ae=I(()=>n(d).includes(n(V).name));var we=kc(),Xe=l(we);O(()=>{hn(we,`cursor:pointer;${n(ae)?"background:rgba(45,212,191,.2);border-color:var(--accent);color:var(--accent)":""}`),m(Xe,n(V).name)}),P("click",we,()=>g(d,n(ae)?n(d).filter(Ae=>Ae!==n(V).name):[...n(d),n(V).name],!0)),P("keydown",we,Ae=>Ae.key==="Enter"&&g(d,n(ae)?n(d).filter(at=>at!==n(V).name):[...n(d),n(V).name],!0)),b($,we)});var K=s(z,2);{var ie=$=>{var V=Mc(),ae=l(V);P("click",ae,we=>{we.preventDefault(),g(d,[],!0)}),b($,V)};G(K,$=>{n(d).length&&$(ie)})}O(()=>m(x,n(d).length?`${n(d).length} von ${n(r).length} ausgewählt`:"alle werden eingeschlossen")),b(D,U)};G(ye,D=>{n(r).length&&D(ne)})}var Ke=s(ye,2),Ie=s(l(Ke),4);Ze(Ie,20,()=>[["zed","Zed","Schneller nativer Editor — Empfohlen"],["opencode","OpenCode","Open-Source Coding-Agent (Terminal/Desktop)"],["cline","Cline / Cursor","VS Code Extension, Bring-Your-Own-Key"],["openwebui","OpenWebUI","Browser-Chat-Interface"]],Ye,(D,U)=>{var Z=I(()=>ir(U,3));let le=()=>n(Z)[0],x=()=>n(Z)[1],z=()=>n(Z)[2];var K=Ec(),ie=l(K),$=l(ie),V=s(ie,2),ae=l(V);O(()=>{vt(K,1,`card-btn${n(o)===le()?" cb-best":""}`),m($,x()),m(ae,z())}),P("click",K,()=>g(o,le(),!0)),b(D,K)});var He=s(Ke,2),Ve=s(l(He),2);{var We=D=>{const U=I(()=>L(n(i),n(p)));var Z=Tc(),le=s(_t(Z),4),x=l(le),z=s(x,2),K=l(z),ie=l(K),$=s(le,4),V=s(l($)),ae=l(V);O(()=>{m(ie,n(U)),m(ae,`bosgame / ${n(w)??""}`)}),P("click",x,we=>Se(we.currentTarget.parentElement)),b(D,Z)},Tt=D=>{const U=I(()=>M(n(i),n(p)));var Z=$c(),le=s(_t(Z),6),x=l(le),z=s(x,2),K=l(z),ie=l(K),$=s(le,2),V=s(l($),3),ae=l(V);O(()=>{m(ie,n(U)),m(ae,`llama-swap/${n(w)??""}`)}),P("click",x,we=>Se(we.currentTarget.parentElement)),b(D,Z)},Pt=D=>{var U=Ac(),Z=s(_t(U),4),le=l(Z),x=s(le,2),z=s(Z,4),K=l(z),ie=s(K,2);O(()=>{mr(le,n(i)),mr(K,n(w))}),P("click",x,$=>re($.currentTarget.previousElementSibling)),P("click",ie,$=>re($.currentTarget.previousElementSibling)),b(D,U)},Ot=D=>{var U=Cc(),Z=s(_t(U),4),le=l(Z),x=s(le,2),z=s(Z,4),K=l(z),ie=s(K,2);O(()=>mr(le,n(i))),P("click",x,$=>re($.currentTarget.previousElementSibling)),P("click",ie,$=>re($.currentTarget.previousElementSibling)),b(D,U)};G(Ve,D=>{n(o)==="zed"?D(We):n(o)==="opencode"?D(Tt,1):n(o)==="cline"?D(Pt,2):n(o)==="openwebui"&&D(Ot,3)})}var Rt=s(He,2);{var qt=D=>{const U=I(()=>`curl ${n(i)}/chat/completions \\ -H "Content-Type: application/json" \\ -d '{ "model": "${n(A)}", "messages": [{"role":"user","content":[{"type":"text","text":"Was ist auf dem Bild falsch?"},{"type":"image_url","image_url":{"url":"data:image/png;base64,"}}]}] }'`);var Z=Lc(),le=l(Z),x=s(l(le),2),z=l(x);qe(z,()=>tn("check"));var K=s(z),ie=s(le,4),$=l(ie),V=s($,2),ae=l(V),we=l(ae);O(()=>{m(K,` „${n(A)??""}" bereit`),m(we,n(U))}),P("click",$,Xe=>Se(Xe.currentTarget.parentElement)),b(D,Z)};G(Rt,D=>{n(A)&&D(qt)})}O(()=>mr(H,n(i))),P("click",ue,D=>{const U=D.currentTarget.previousElementSibling;re(U)}),P("click",T,R),b(e,ve),ia()}ka(["click","keydown"]);var Dc=k('
'),Oc=k('

Für dich: Upgrades

Neuere Modelle, die ein installiertes ersetzen können.
'),Rc=k('
Lade News… (erstes Laden kann kurz dauern)
'),qc=k('
'),Bc=k('
Keine News geladen
Die Quellen sind gerade nicht erreichbar — später nochmal probieren.
'),Ic=k('für dich'),Nc=k('
'),Fc=k('
'),Kc=k('

News

Aktuelles aus der Local-LLM-Welt — aus kuratierten Quellen.
',1);function Gc(e,t){ra(t,!0);let a=B(Dt([])),r=B(Dt([])),i=B(!0),o=B("");const d=F=>F==="perfect"?"ok":F==="marginal"?"warn":"bad";function c(F){const H=Math.max(0,Date.now()/1e3-F);return H<60?H+"s":H<3600?Math.floor(H/60)+"m":H<86400?Math.floor(H/3600)+"h":Math.floor(H/86400)+"d"}async function u(){g(i,!0),g(o,"");try{g(a,(await ge("/api/news")).items||[],!0)}catch(F){g(o,F.message||"Fehler beim Laden",!0)}finally{g(i,!1)}}async function v(){try{g(r,(await ge("/api/cookbook/upgrades")).upgrades||[],!0)}catch{g(r,[],!0)}}async function h(F,H){var ue;H.disabled=!0,H.textContent="Starte…";try{await ge("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:F.repo,role:F.role,params_b:F.params_b,quant:F.quant,hf_token:rr()})}),(ue=document.querySelector(".nav-item[data-view='activity']"))==null||ue.dispatchEvent(new MouseEvent("click"))}catch(fe){H.disabled=!1,H.textContent="Installieren",alert("Fehler: "+fe.message)}}function E(){u(),v()}hr(()=>{u(),v()});var p=Kc(),w=_t(p),A=s(l(w),2),L=s(w,2);{var M=F=>{var H=Oc(),ue=l(H),fe=s(l(ue),2),Ee=l(fe),ze=s(ue,4);Ze(ze,21,()=>n(r),Ye,(nt,T)=>{var J=Dc(),oe=l(J),Pe=l(oe),Q=l(Pe),ye=l(Q),ne=s(Q,2),Ke=l(ne),Ie=s(Pe,2),He=l(Ie),Ve=s(oe,2);O(We=>{m(ye,n(T).name),vt(ne,1,`fit-badge ${We??""}`),m(Ke,n(T).fit.text),m(He,`Ersetzt dein „${n(T).old??""}". ${n(T).why??""}`)},[()=>d(n(T).fit.level)]),P("click",Ve,We=>h(n(T),We.currentTarget)),b(nt,J)}),O(()=>m(Ee,n(r).length)),b(F,H)};G(L,F=>{n(r).length&&F(M)})}var R=s(L,2);{var Se=F=>{var H=Rc();b(F,H)},re=F=>{var H=qc(),ue=l(H);O(()=>m(ue,n(o))),b(F,H)},ve=F=>{var H=Bc();b(F,H)},be=F=>{var H=Fc();Ze(H,21,()=>n(a),Ye,(ue,fe,Ee)=>{var ze=Nc();vt(ze,1,`news-card${Ee===0?" featured":""}`);var nt=l(ze),T=l(nt),J=l(T),oe=s(T,2);{var Pe=Ie=>{var He=Ic();b(Ie,He)};G(oe,Ie=>{n(fe).relevant&&Ie(Pe)})}var Q=s(oe,2),ye=l(Q),ne=s(nt,2),Ke=l(ne);O(Ie=>{Ir(ze,"href",n(fe).link),m(J,n(fe).source),m(ye,Ie),m(Ke,n(fe).title)},[()=>n(fe).ts?c(n(fe).ts):""]),b(ue,ze)}),b(F,H)};G(R,F=>{n(i)?F(Se):n(o)?F(re,1):n(a).length?F(be,-1):F(ve,2)})}P("click",A,E),b(e,p),ia()}ka(["click"]);const Uc=[["Dein erster Workflow — in 3 Schritten",`
  1. Modell holen: Tab Cookbook → wähle deinen Anwendungsfall (z.B. „Coden") → Komplettes Setup installieren. Der Download läuft im Tab Aktivität.
  2. Verbinden: Tab Verbinden → Basis-URL kopieren → in deinem Tool (z.B. OpenCode) als „OpenAI-kompatibel" einfügen. Verbindung testen bestätigt, dass es läuft.
  3. Arbeiten: Im Tool das Modell (z.B. coder) wählen und loslegen. Das passende Modell wird automatisch geladen — du musst nichts starten.
`],["Wie leere ich den Kontext? Machen die Tools das selbst?",`

Kurz: meistens ja, automatisch. Der Kontext (das „Gedächtnis") gilt pro Unterhaltung. Startest du im Tool einen neuen Chat / eine neue Session, ist der Kontext wieder leer — das Tool verwaltet das Fenster für dich.

Du musst nur selten eingreifen: wird ein Gespräch sehr lang, fang einen neuen an. Wichtig: „Grafikspeicher leeren" (Tab Server) ist etwas anderes — das wirft das Modell aus dem Speicher, nicht den Gesprächsverlauf.

`],["Was passiert, wenn der Kontext volläuft?",`

Ist das Kontextfenster voll, passiert je nach Tool eins von dreien: das Modell vergisst den Anfang (älteste Nachrichten fallen raus), das Tool kürzt automatisch, oder du bekommst einen Fehler wie „context length exceeded".

So gehst du vor:

  1. Neuen Chat starten — der einfachste Reset, Kontext ist wieder leer.
  2. Zusammenfassen lassen: „Fasse unseren Stand kurz zusammen", dann im neuen Chat einfügen.
  3. Kontext vergrößern: Tab ModelleKonfigurieren → wir zeigen das Optimum für deine Hardware (mehr Kontext = mehr Speicherbedarf).
`],["Was ist ein Agent — und wann brauche ich einen?",`

Ein nacktes Modell schreibt nur Text zurück. Ein Agent ist ein Programm drumherum, das das Modell handeln lässt: Dateien lesen und ändern, Befehle ausführen, im Web suchen — Schritt für Schritt in einer Schleife, bis die Aufgabe erledigt ist.

Wann lohnt sich was?

  • Fragen, Texte, Erklärungen, Brainstorming → kein Agent nötig, eine Chat-Oberfläche wie OpenWebUI reicht völlig.
  • Coden über mehrere Dateien, Befehle ausführen, recherchieren + umsetzenAgent (OpenCode, Cline, Continue).

Gut zu wissen: Diese Agenten laufen lokal auf deinem PC — du brauchst keinen Cloud-Dienst.

`],["Was sind Skills — und wie installiere ich sie?",`

Ein Skill ist verpacktes Können: eine kurze Anleitung, die dem Agenten beibringt, eine wiederkehrende Aufgabe jedes Mal so zu erledigen, wie du es willst.

Skill vs. MCP: MCP gibt dem Agenten neue Werkzeuge. Skills geben ihm Know-how. Kurz: Werkzeuge = MCP, Anleitungen = Skills.

Installieren: meist nur eine Datei ablegen — kein Build, kein Neustart:

  1. Pro Projekt: in den Projektordner (z.B. AGENTS.md, .clinerules/).
  2. Global: in den Konfig-Ordner des Tools — gilt überall.
`],["MCP — deinem Agenten echte Werkzeuge geben",`

MCP (Model Context Protocol) ist ein einheitlicher „Stecker", über den ein Agent zusätzliche Werkzeuge bekommt: das Web durchsuchen, Dateien lesen, eine Datenbank abfragen.

Du fügst in deinem Agenten einen „MCP-Server" hinzu (eine Zeile in der Konfiguration je Werkzeug). Danach entscheidet der Agent selbst, wann er das Werkzeug einsetzt.

  • Faustregel: Fehlt dem Agenten eine Fähigkeit → MCP. Soll er etwas nur besser machen → Skill.
`],["Auto-Swap — wie das Laden funktioniert",`

llama-swap lädt automatisch das Modell, das gerade angefragt wird, und entlädt es nach einer Leerlaufzeit wieder. Es läuft immer nur eines gleichzeitig.

Du richtest beliebig viele Modelle ein und wählst im Tool das passende — das Laden/Entladen passiert im Hintergrund, ohne dass du etwas tun musst.

`],["Die empfohlenen Tools optimal nutzen",`
  • OpenCode: Autonomes Coden im Terminal/Editor — ideal für „bau mir Feature X".
  • Cline: Dasselbe als VS-Code-Erweiterung, mit Bestätigung vor jeder Aktion.
  • OpenWebUI: Klassische Chat-Oberfläche für Fragen/Texte.

Tipp: starkes Modell (coder) für schwere Aufgaben, schnelles (scout) für einfache — du wählst es einfach im Tool aus.

`]],Hc=[["LLM / Modell","Die KI selbst — versteht und schreibt Text (wie ChatGPT, nur lokal auf deinem PC). Ein Modell ist eine konkrete Datei davon, oft auf etwas spezialisiert (Code, Bilder, Chat)."],["GGUF","Das lokal lauffähige Dateiformat. Unsere Engine lädt nur GGUF — Repos ohne GGUF kann sie 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 beliebte Sweetspot."],["Kontextfenster","Das Kurzzeitgedächtnis: wie viel Text sich das Modell gleichzeitig merkt. Größer = mehr Überblick, mehr Speicher, etwas langsamer."],["Auto-Swap","llama-swap lädt/entlädt Modelle automatisch — immer nur eins gleichzeitig. Du managst nichts."],["Agent","Ein Programm (OpenCode, Cline, Continue), das das Modell handeln lässt — Dateien lesen/ändern, Befehle ausführen, planen, im Loop bis die Aufgabe erledigt ist."],["MCP","Model Context Protocol — der Anschluss, über den ein Agent zusätzliche Werkzeuge bekommt (Web, Dateien, Datenbank). MCP = Werkzeuge."],["Skills","Verpackte Anleitung für wiederkehrende Aufgaben — der Agent liest sie und macht es jedes Mal wie du willst. Skills = Anleitungen."],["Rules / Commands","Die konkrete Form von Skills je Tool: AGENTS.md (OpenCode), .clinerules (Cline), Rules/Prompts (Continue)."]];var Vc=k('
'),Wc=k('

'),jc=k('

Guide für Einsteiger

Praktische Workflows + die Local-LLM-Welt in Klartext — ohne Vorwissen.

Tutorials & Workflows

Konzepte kurz erklärt

',1);function Jc(e){var t=jc(),a=s(_t(t),4);Ze(a,21,()=>Uc,Ye,(i,o,d)=>{var c=I(()=>ir(n(o),2));let u=()=>n(c)[0],v=()=>n(c)[1];var h=Vc();h.open=d===0;var E=l(h),p=l(E),w=s(E,2);qe(w,v,!0),O(()=>m(p,u())),b(i,h)});var r=s(a,4);Ze(r,21,()=>Hc,Ye,(i,o)=>{var d=I(()=>ir(n(o),2));let c=()=>n(d)[0],u=()=>n(d)[1];var v=Wc(),h=l(v),E=l(h),p=s(h,2),w=l(p);O(()=>{m(E,c()),m(w,u())}),b(i,v)}),b(e,t)}let Qi={};function Qc(){const e=document.getElementById("top-active-text");e&&(e.classList.add("swap-flash"),setTimeout(()=>e.classList.remove("swap-flash"),900))}function Yi(e){var i;const t=document.getElementById("swdot"),a=document.getElementById("swlabel"),r=document.getElementById("top-active-text");if(!e)t&&(t.className="dot off"),a&&(a.textContent="Backend nicht erreichbar"),r&&(r.textContent="Backend offline"),Zi("Backend nicht erreichbar – läuft uvicorn?",!1);else{const o=(e.swap_url||"").replace(/^https?:\/\//,"");t&&(t.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(v=>d.includes(v.state));if(r)if(c){const v=(i=c.meta)!=null&&i.ctx?` · ${Math.round(c.meta.ctx/1024)}k ctx`:"",h=c.state==="loading"||c.state==="starting"?' lädt…':"";r.innerHTML=`${c.name}${v}${h}`}else r.innerHTML='Kein Modell im VRAM';e.swap_ok?eu():Zi(`LLM-Engine nicht erreichbar unter ${o} – läuft der llama-swap Dienst?`,!0);const u={};for(const v of e.models||[])u[v.name]=v.state;for(const[v,h]of Object.entries(u)){const E=Qi[v];if(E&&E!==h&&(h==="running"||h==="loading")){Qc();break}}Qi=u}Yc(e),gr.set(e)}function Yc(e){const t=document.getElementById("sec-chip"),a=document.getElementById("sec-chip-tx");!t||!a||(t.classList.toggle("ok",!!(e!=null&&e.secured)),a.textContent=e!=null&&e.secured?"Geschützt · Heimnetz":"Nur im Heimnetz (offen)")}function Zc(e){ca.set(e||[])}function Xc(e){$i.set(e)}function Zi(e,t){const a=document.getElementById("alert");a.className="alert"+(t?" warn":""),a.innerHTML=`${e}`,a.style.display="flex"}function eu(){const e=document.getElementById("alert");e&&(e.style.display="none")}const tu=e=>{var t;return(t=document.querySelector(`.nav-item[data-view="${e}"]`))==null?void 0:t.click()};function Yr(e,t,a,r){const i=document.createElement("span");return i.className="upd-badge"+(t?" "+t:""),i.textContent=e,r&&(i.title=r),i.onclick=()=>tu(a),i}async function Zs(){try{const e=await ge("/api/updates"),t=document.getElementById("update-badges");if(!t)return;const a=e.apt_cache_age_h,r=a!=null&&a>24,i=a!=null?` · apt-Cache: vor ${a}h`:"";t.innerHTML="",t.appendChild(Yr(e.os>0?`OS: ${e.os} Updates`:r?"OS: ?":"OS: aktuell",e.os>0||r?"warn":"ok","server",e.os>0?`${e.os} Pakete${i}`:r?`apt-Cache veraltet (${a}h)`:`Keine Updates${i}`)),t.appendChild(Yr(e.engine>0?"Engine: Update":"Engine: aktuell",e.engine>0?"warn":"ok","server")),t.appendChild(Yr(e.models>0?`Modelle: ${e.models}`:"Modelle: aktuell",e.models>0?"warn":"ok","news"))}catch{}}async function Fr(){try{Yi(await ge("/api/status"))}catch{Yi(null)}}async function Xs(){try{Zc(await ge("/api/jobs"))}catch{}}function el(){const e=window.location.protocol==="https:"?"wss:":"ws:",t=new WebSocket(`${e}//${window.location.host}/api/system/stream`);t.onmessage=a=>{try{Xc(JSON.parse(a.data))}catch{}},t.onclose=()=>{setTimeout(el,3e3)},t.onerror=()=>t.close()}var rs;((rs=document.getElementById("logo"))==null?void 0:rs.innerHTML)!==void 0&&(document.getElementById("logo").innerHTML=Nr.logo);document.querySelectorAll("[data-ic]").forEach(e=>{e.innerHTML=Nr[e.dataset.ic||""]||""});const nu=[["overview",id],["models",yd],["activity",Ld],["server",Fd],["cookbook",bc],["connect",Pc],["news",Gc],["guides",Jc]];for(const[e,t]of nu){const a=document.querySelector(`.view[data-view="${e}"]`);a&&yo(t,{target:a})}Ko("overview");const Zr=document.getElementById("token");Zr&&(Zr.value=Ys(),Zr.addEventListener("change",e=>{qo(e.target.value),Fr()}));const Xr=document.getElementById("hf-token");Xr&&(Xr.value=rr(),Xr.addEventListener("change",e=>Io(e.target.value)));const Xi=document.getElementById("nav-settings"),ei=document.getElementById("settings-modal"),es=document.getElementById("sm-close");Xi&&ei&&es&&(Xi.addEventListener("click",()=>ei.style.display="flex"),es.addEventListener("click",()=>ei.style.display="none"));function au(){const e=document.getElementById("clock");e&&(e.textContent=new Date().toTimeString().slice(0,5))}document.addEventListener("mc:refresh",Fr);Fr();Xs();el();setInterval(au,1e3);setInterval(Fr,3e3);setInterval(Xs,1500);Zs();setInterval(Zs,6e4);