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

LLM-Engine
Aktives Modell

System-Gesundheit

Auslastung in Echtzeit.

Schnellstart

Dein Stack

Top-News

Alle →
',1);function cd(e,t){na(t,!0);const a=O(()=>br.value),r=O(()=>Li.value),i=O(()=>{var M;return((M=n(a))==null?void 0:M.models)||[]}),o=O(()=>{var M;return((M=n(a))==null?void 0:M.swap_ok)??!1}),d=["running","ready","loading","starting"],c=O(()=>n(i).find(M=>d.includes(M.state))),u=O(()=>n(i).filter(M=>!M.incomplete)),v=O(()=>n(a)?n(o)?n(r)&&n(r).ram.percent>=90?"Achtung: Speicher wird knapp.":"Alles läuft rund.":"LLM-Engine offline":"Verbinde…"),g=O(()=>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=O(()=>()=>{var G;const M=(G=n(r))==null?void 0:G.gpu;return M&&M.vram.total+M.gtt.total>0?(M.vram.used+M.gtt.used)/(M.vram.total+M.gtt.total)*100:0});let p=R(Ut([])),x=R(null);mr(async()=>{try{h(p,((await Se("/api/news")).items||[]).slice(0,4),!0)}catch{}});async function A(){await xn({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 Se("/api/unload",{method:"POST"}),k())}async function L(M){h(x,M,!0);try{await Se("/api/preload?model="+encodeURIComponent(M),{method:"POST"})}catch(G){ee("Laden fehlgeschlagen: "+(G.message||"Engine nicht erreichbar?"),!0)}h(x,null),k()}function k(){document.dispatchEvent(new Event("mc:refresh"))}function P(M){var G;(G=document.querySelector(`.nav-item[data-view="${M}"]`))==null||G.dispatchEvent(new MouseEvent("click"))}function ye(M){return M>=90?"red":M>=75?"":"green"}function te(M){return M==null?"":M>=75?"red":M>=55?"":"green"}function ue(M){return M>=90?"red":M>=70?"":"green"}var Te=dd(),K=ct(Te),V=l(K),fe=l(V),he=l(fe),Pe=s(he);{var Ve=M=>{var G=Wo();m(M,G)};I(Pe,M=>{n(o)&&!n(c)&&M(Ve)})}var mt=s(fe,2),T=l(mt),W=s(K,2),re=l(W),Ue=l(re),Q=s(l(Ue),2);Le(Q,()=>Pt("server"),!0);var ze=s(Ue,2),Y=l(ze),rt=s(ze,2),D=l(rt),U=s(re,2),ie=l(U),ge=s(l(ie),2);Le(ge,()=>Pt("cpu"),!0);var Ae=s(ie,2),bt=l(Ae),pt=s(Ae,2),kt=l(pt);{var Ct=M=>{var G=nr();z(Oe=>b(G,`${Oe??""} · ${n(c).state??""}`),[()=>{var Oe;return(Oe=n(c).meta)!=null&&Oe.ctx?Math.round(n(c).meta.ctx/1024)+"k ctx":""}]),m(M,G)},Mt=M=>{var G=nr("lädt bei erster Anfrage");m(M,G)};I(kt,M=>{n(c)?M(Ct):M(Mt,-1)})}var Lt=s(U,2);{var Ot=M=>{const G=O(()=>{var Un;return n(r).gpu_temp??((Un=n(r).cpu)==null?void 0:Un.temp)??null}),Oe=O(()=>te(n(G))),ne=O(()=>n(r).ram.total-n(r).ram.used),Be=O(()=>100-n(r).ram.percent);var Ze=jo(),et=ct(Ze),Me=l(et),$e=s(l(Me));Le($e,()=>Pt("thermo"),!0);var Re=s(Me,2),Rt=l(Re),Bt=s(Re,2),Wt=l(Bt),an=s(et,2),bn=l(an),Ke=s(l(bn));Le(Ke,()=>Pt("database"),!0);var ht=s(bn,2),Rn=l(ht),Vn=s(ht,2),ra=l(Vn);z((Un,Ua,w,_)=>{yt(et,1,`kpi ${n(Oe)??""}`),b(Rt,Un),b(Wt,n(G)==null?"messe…":n(G)<55?"kühl":n(G)<75?"normal":"⚠ heiß"),yt(an,1,`kpi ${n(Be)<15?"red":n(Be)<30?"":"green"}`),b(Rn,Ua),b(ra,`von ${w??""} GB · ${_??""} % frei`)},[()=>n(G)!=null?`${Math.round(n(G))}°C`:"–",()=>Math.round(n(ne)/1073741824),()=>Math.round(n(r).ram.total/1073741824),()=>Math.round(n(Be))]),m(M,Ze)},qt=M=>{var G=Jo();m(M,G)};I(Lt,M=>{n(r)?M(Ot):M(qt,-1)})}var $=s(W,2),N=l($),Ce=s(l(N),4);{var ut=M=>{const G=O(()=>n(E)());var Oe=or(),ne=ct(Oe);dt(ne,17,()=>{var Be;return[["Prozessor (CPU)",((Be=n(r).cpu)==null?void 0:Be.percent)??0,""],["Arbeitsspeicher (RAM)",n(r).ram.percent,ye(n(r).ram.percent)],["Grafikspeicher (VRAM)",n(G),ue(n(G))]]},ot,(Be,Ze)=>{var et=O(()=>sr(n(Ze),3));let Me=()=>n(et)[0],$e=()=>n(et)[1];const Re=O(()=>Math.max(0,Math.min(100,$e()||0)));var Rt=Qo(),Bt=l(Rt),Wt=l(Bt),an=l(Wt),bn=s(Wt),Ke=l(bn),ht=s(Bt,2),Rn=l(ht);z((Vn,ra)=>{b(an,Me()),b(Ke,`${Vn??""} %`),yt(ht,1,`bar ${n(Re)>=90?"bad":n(Re)>=75?"warn":""}`),pn(Rn,`width:${ra??""}%`)},[()=>Math.round(n(Re)),()=>Math.max(2,n(Re))]),m(Be,Rt)}),m(M,Oe)},F=M=>{var G=Zo();m(M,G)};I(Ce,M=>{n(r)?M(ut):M(F,-1)})}var De=s(N,2),J=s(l(De),2);{var de=M=>{var G=Yo(),Oe=s(ct(G),2),ne=l(Oe);Le(ne,()=>Pt("search"),!0);var Be=s(ne,4);Le(Be,()=>Pt("chevron"),!0);var Ze=s(Oe,2),et=l(Ze);Le(et,()=>Pt("swap"),!0);var Me=s(et,4);Le(Me,()=>Pt("chevron"),!0);var $e=s(Ze,2),Re=l($e);Le(Re,()=>Pt("file"),!0);var Rt=s(Re,4);Le(Rt,()=>Pt("chevron"),!0),C("click",Oe,()=>P("cookbook")),C("click",Ze,()=>P("connect")),C("click",$e,()=>P("guides")),m(M,G)},se=M=>{var G=Xo(),Oe=s(ct(G),2),ne=l(Oe);Le(ne,()=>Pt("search"),!0);var Be=s(ne,4);Le(Be,()=>Pt("chevron"),!0);var Ze=s(Oe,2),et=l(Ze);Le(et,()=>Pt("refresh"),!0);var Me=s(et,4);Le(Me,()=>Pt("chevron"),!0);var $e=s(Ze,2),Re=l($e);Le(Re,()=>Pt("file"),!0);var Rt=s(Re,4);Le(Rt,()=>Pt("chevron"),!0);var Bt=s($e,2),Wt=l(Bt);Le(Wt,()=>Pt("swap"),!0);var an=s(Wt,4);Le(an,()=>Pt("chevron"),!0),C("click",Oe,()=>P("cookbook")),C("click",Ze,A),C("click",$e,()=>P("server")),C("click",Bt,()=>P("connect")),m(M,G)};I(J,M=>{n(u).length?M(se,-1):M(de)})}var Z=s($,2),be=l(Z),ve=l(be),xe=s(l(ve),2),ke=l(xe),_e=s(ve,2);{var S=M=>{var G=Zi();dt(G,21,()=>n(u),ot,(Oe,ne)=>{const Be=O(()=>d.includes(n(ne).state)),Ze=O(()=>n(ne).state==="downloading"),et=O(()=>n(ne).state==="loading"||n(ne).state==="starting"||n(Ze)?"load":n(Be)?"on":""),Me=O(()=>n(Ze)?`↓ ${n(ne).download_progress!=null?Math.round(n(ne).download_progress)+"%":"..."}`:n(ne).state==="loading"||n(ne).state==="starting"?"lädt…":n(Be)?"geladen ✓":"bereit");var $e=id(),Re=l($e),Rt=s(Re,2),Bt=l(Rt),Wt=l(Bt),an=l(Wt),bn=s(Wt,2);{var Ke=X=>{var me=ed();m(X,me)},ht=O(()=>{var X,me;return(me=(X=n(ne).meta)==null?void 0:X.caps)==null?void 0:me.includes("Bild")}),Rn=X=>{var me=td();m(X,me)},Vn=O(()=>{var X,me;return(me=(X=n(ne).meta)==null?void 0:X.caps)==null?void 0:me.includes("Code")}),ra=X=>{var me=nd();m(X,me)};I(bn,X=>{n(ht)?X(Ke):n(Vn)?X(Rn,1):X(ra,-1)})}var Un=s(bn,2);{var Ua=X=>{var me=ad();m(X,me)};I(Un,X=>{n(ne).ttl>=99999&&X(Ua)})}var w=s(Bt,2),_=l(w),B=s(Rt,2),q=l(B),ae=l(q),tt=s(q,2);{var it=X=>{var me=rd(),qe=l(me);z(()=>{pn(me,`padding:3px 9px;font-size:12px;opacity:${n(x)===n(ne).name?".5":"1"}`),me.disabled=n(x)===n(ne).name,b(qe,n(x)===n(ne).name?"…":"Laden")}),C("click",me,()=>L(n(ne).name)),m(X,me)};I(tt,X=>{!n(Be)&&!n(Ze)&&n(o)&&X(it)})}z((X,me)=>{var qe;yt(Re,1,`li-dot ${n(et)??""}`),pn(Wt,n(Be)?"color:var(--accent)":""),b(an,n(ne).name),b(_,`${X??""} ${(qe=n(ne).meta)!=null&&qe.quant?" · "+n(ne).meta.quant:""} ${me??""}`),pn(q,`white-space:nowrap;color:${n(Be)?"var(--on)":"var(--mut)"}`),b(ae,n(Me))},[()=>{var X;return(X=n(ne).meta)!=null&&X.ctx?Math.round(n(ne).meta.ctx/1024)+"k ctx":""},()=>{var X;return(X=n(ne).meta)!=null&&X.size_bytes?" · "+(n(ne).meta.size_bytes/1073741824).toFixed(1)+" GB":""}]),m(Oe,$e)}),m(M,G)},H=M=>{var G=sd(),Oe=s(l(G),4);C("click",Oe,()=>P("cookbook")),m(M,G)};I(_e,M=>{n(u).length?M(S):M(H,-1)})}var le=s(be,2),Je=l(le),Qe=s(l(Je),2),Qt=s(Je,2);{var Zt=M=>{var G=Zi();dt(G,21,()=>n(p),ot,(Oe,ne)=>{var Be=ld(),Ze=l(Be),et=l(Ze),Me=l(et),$e=s(et,2),Re=l($e);z(()=>{Nr(Be,"href",n(ne).link),b(Me,n(ne).title),b(Re,`${n(ne).source??""}${n(ne).relevant?" · für dich":""}`)}),m(Oe,Be)}),m(M,G)},Ht=M=>{var G=od();m(M,G)};I(Qt,M=>{n(p).length?M(Zt):M(Ht,-1)})}z(M=>{b(he,`${n(v)??""} `),b(T,n(g)),yt(re,1,`kpi ${n(o)?"green":"red"}`),b(Y,n(o)?"Online":"Offline"),b(D,M),yt(U,1,`kpi ${n(c)?"blue":"muted"}`),b(bt,n(c)?n(c).name:"Keins"),b(ke,n(u).length?n(u).length+" konfiguriert":"")},[()=>{var M,G;return((G=(M=n(a))==null?void 0:M.swap_url)==null?void 0:G.replace(/^https?:\/\//,""))??"—"}]),C("click",Qe,()=>P("news")),C("keydown",Qe,M=>M.key==="Enter"&&P("news")),m(e,Te),aa()}xa(["click","keydown"]);var ud=y(""),vd=y('
'),fd=y('
Noch keine Modelle konfiguriert
Hol dir unter „Cookbook" ein passendes Modell.
'),pd=y('
kein Modell hinterlegt
leere Rolleleer '),hd=y(' '),gd=y('
'),md=y(' '),bd=y('
API-Name:
'),_d=y('
ModellKannDetailsStatusPortAktionen
'),wd=y('
Empfohlen für deine Hardware

'),yd=y(''),xd=y(''),kd=y(''),Md=y('

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 Sd(e,t){na(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=O(()=>{var $;return(($=br.value)==null?void 0:$.models)||[]});function d(){document.dispatchEvent(new Event("mc:refresh"))}let c=R(""),u=R(""),v=R(""),g=R(!1);const E=O(()=>n(o).filter($=>!$.incomplete));async function p(){var N;const $=n(c)||((N=n(E)[0])==null?void 0:N.name);if(!(!$||!n(u).trim())){h(g,!0),h(v,"(wecke Modell, kann beim Laden kurz dauern…)");try{const Ce=await Se("/api/chat",{method:"POST",body:JSON.stringify({model:$,message:n(u)})});h(v,Ce.reply,!0)}catch(Ce){h(v,"Fehler: "+Ce.message)}h(g,!1),d()}}const x=300;let A=R(!1),L=R(null),k=R(8192),P=R(!1);function ye($){var N;h(L,n(o).find(Ce=>Ce.name===$),!0),n(L)&&(h(k,((N=n(L).meta)==null?void 0:N.ctx)||8192,!0),h(P,(n(L).ttl??x)>=99999),h(A,!0))}async function te(){const $=n(P)?99999:x;try{await Se("/api/update_model",{method:"POST",body:JSON.stringify({alias:n(L).name,ctx:n(k),ttl:$})}),ee("Gespeichert — aktiv beim nächsten Modell-Start."),h(A,!1),d()}catch(N){ee(N.message,!0)}}let ue=R(!1),Te=R(""),K=R(""),V=R("");function fe($){const N=n(o).find(Ce=>Ce.name===$);h(Te,$,!0),h(V,(N==null?void 0:N.role)||"",!0),h(K,""),h(ue,!0)}async function he($){try{await Se("/api/set_role",{method:"POST",body:JSON.stringify({alias:n(Te),role:$})}),ee($?`Rolle gesetzt: ${$}`:"Rolle entfernt."),h(ue,!1),d()}catch(N){ee(N.message,!0)}}async function Pe($){if(await xn({title:`„${$}" entladen?`,body:"Das Modell wird aus dem Grafikspeicher geworfen und lädt beim nächsten Aufruf automatisch neu.",confirmLabel:"Entladen"}))try{await Se("/api/unload?model="+encodeURIComponent($),{method:"POST"}),ee("Entladen: "+$),setTimeout(d,600)}catch(N){ee(N.message,!0)}}async function Ve($){if(await xn({title:`„${$}" 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 N=await Se("/api/delete_model",{method:"POST",body:JSON.stringify({alias:$})});ee(N.note||"Gelöscht: "+$),setTimeout(d,600)}catch(N){ee(N.message,!0)}}function mt($){return $!=null&&$.length?$.map(N=>N==="Code"?'Code':N==="Bild"?'Bild':'Text').join(" "):"–"}function T($){if(!$)return"–";const N=$.quant||"?",Ce=$.ctx?Math.round($.ctx/1024)+"K":"?",ut=$.size_bytes?($.size_bytes/1024**3).toFixed(1)+" GB":"?";return`${N} · ${Ce} · ${ut}`}function W($){var N;(N=navigator.clipboard)==null||N.writeText($),ee("Kopiert: "+$)}var re=Md(),Ue=s(ct(re),2),Q=s(l(Ue),6);dt(Q,21,()=>n(E),ot,($,N)=>{var Ce=ud(),ut=l(Ce),F={};z(()=>{b(ut,n(N).name),F!==(F=n(N).name)&&(Ce.value=(Ce.__value=n(N).name)??"")}),m($,Ce)});var ze=s(Q,4),Y=s(ze,2),rt=l(Y),D=s(Y,2);{var U=$=>{var N=vd(),Ce=l(N);z(()=>b(Ce,n(v))),m($,N)};I(D,$=>{n(v)&&$(U)})}var ie=s(Ue,2),ge=l(ie),Ae=s(l(ge)),bt=l(Ae),pt=s(ge,4);{var kt=$=>{var N=fd();m($,N)},Ct=$=>{var N=_d(),Ce=s(l(N));dt(Ce,21,()=>n(o),ot,(ut,F)=>{var De=or(),J=ct(De);{var de=Z=>{var be=pd(),ve=l(be),xe=l(ve),ke=s(ve,5),_e=l(ke),S=s(_e,2);z(()=>b(xe,n(F).name)),C("click",_e,()=>{var H;ee("Lade im Cookbook ein Modell und setze den Alias auf: "+n(F).name),(H=document.querySelector(".nav-item[data-view='cookbook']"))==null||H.dispatchEvent(new MouseEvent("click"))}),C("click",S,()=>Ve(n(F).name)),m(Z,be)},se=Z=>{var be=bd(),ve=l(be),xe=l(ve),ke=l(xe),_e=s(ke);{var S=Me=>{var $e=hd(),Re=l($e);z(()=>b(Re,n(F).role)),m(Me,$e)};I(_e,Me=>{n(F).role&&Me(S)})}var H=s(xe,2);{var le=Me=>{var $e=gd(),Re=l($e);z(()=>b(Re,n(F).meta.filename)),m(Me,$e)};I(H,Me=>{var $e;($e=n(F).meta)!=null&&$e.filename&&Me(le)})}var Je=s(H,2),Qe=s(l(Je),2);dt(Qe,17,()=>{var Me;return(Me=n(F).api_ids)!=null&&Me.length?n(F).api_ids:[n(F).name]},ot,(Me,$e)=>{var Re=md(),Rt=l(Re);z(()=>b(Rt,n($e))),C("click",Re,()=>W(n($e))),m(Me,Re)});var Qt=s(ve);Le(Qt,()=>{var Me;return mt((Me=n(F).meta)==null?void 0:Me.caps)},!0);var Zt=s(Qt);Le(Zt,()=>T(n(F).meta),!0);var Ht=s(Zt);Le(Ht,()=>Vo(n(F).state,n(F).download_progress),!0);var M=s(Ht),G=l(M),Oe=s(M),ne=l(Oe),Be=s(ne,2),Ze=s(Be,2),et=s(Ze,2);z(()=>{b(ke,`${n(F).name??""} `),b(G,n(F).port??"auto")}),C("click",ne,()=>fe(n(F).name)),C("click",Be,()=>ye(n(F).name)),C("click",Ze,()=>Pe(n(F).name)),C("click",et,()=>Ve(n(F).name)),m(Z,be)};I(J,Z=>{n(F).incomplete?Z(de):Z(se,-1)})}m(ut,De)}),m($,N)};I(pt,$=>{n(o).length?$(Ct,-1):$(kt)})}var Mt=s(ie,2);{var Lt=$=>{var N=yd(),Ce=l(N),ut=l(Ce),F=s(ut,4),De=l(F),J=s(F,2),de=s(l(J));Le(de,()=>gi(a));var se=s(J,2),Z=s(se,2);{var be=le=>{var Je=wd(),Qe=l(Je),Qt=s(l(Qe),2),Zt=l(Qt),Ht=s(Zt,2),M=s(Qe,2);z((G,Oe)=>{b(Zt,`Optimal ~${G??""}k → ~${n(L).meta.peak_ram_optimal_gb??""} GB Spitzenbedarf.`),b(Ht,` Aktuell ~${Oe??""}k → ~${n(L).meta.peak_ram_gb??""} GB.`)},[()=>Math.round(n(L).meta.optimal_ctx/1024),()=>Math.round((n(L).meta.ctx||0)/1024)]),C("click",M,()=>h(k,n(L).meta.optimal_ctx,!0)),m(le,Je)};I(Z,le=>{var Je;(Je=n(L).meta)!=null&&Je.optimal_ctx&&le(be)})}var ve=s(Z,4),xe=s(l(ve),2),ke=l(xe),_e=s(ke,2),S=l(_e),H=s(ve,2);z(()=>{b(De,n(L).name),pn(_e,`color:${n(P)?"var(--accent)":"var(--mut)"}`),b(S,n(P)?"An (TTL = ∞)":"Aus (TTL = 5 min)")}),C("click",N,le=>{le.target.classList.contains("modal-overlay")&&h(A,!1)}),C("click",ut,()=>h(A,!1)),An(se,()=>n(k),le=>h(k,le)),qo(ke,()=>n(P),le=>h(P,le)),C("click",H,te),m($,N)};I(Mt,$=>{n(A)&&n(L)&&$(Lt)})}var Ot=s(Mt,2);{var qt=$=>{var N=kd(),Ce=l(N),ut=l(Ce),F=s(ut,2),De=s(l(F));Le(De,()=>gi(r));var J=s(F,2),de=l(J),se=s(J,4);dt(se,21,()=>i,ot,(ke,_e)=>{var S=xd(),H=l(S);z(()=>{yt(S,1,n(V)===n(_e).id?"primary":"ghost"),Nr(S,"title",n(_e).desc),b(H,n(_e).label)}),C("click",S,()=>he(n(_e).id)),m(ke,S)});var Z=s(se,4),be=s(Z,2),ve=l(be),xe=s(ve,2);z(()=>b(de,n(Te))),C("click",N,ke=>{ke.target.classList.contains("modal-overlay")&&h(ue,!1)}),C("click",ut,()=>h(ue,!1)),An(Z,()=>n(K),ke=>h(K,ke)),C("click",ve,()=>he("")),C("click",xe,()=>he(n(K).trim().toLowerCase())),m($,N)};I(Ot,$=>{n(ue)&&$(qt)})}z(()=>{Y.disabled=n(g),b(rt,n(g)?"…":"Senden"),b(bt,n(o).length?n(o).length+" konfiguriert":"")}),ar(Q,()=>n(c),$=>h(c,$)),An(ze,()=>n(u),$=>h(u,$)),C("click",Y,p),m(e,re),aa()}xa(["click"]);var Ed=y('
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),Td=y(''),Ad=y('
Gerade nichts los.
Alles ruhig — keine laufenden Aufgaben.
'),Cd=y(' '),$d=y(''),Ld=y(''),Pd=y('
'),zd=y('
'),Dd=y('
'),Od=y('

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 Rd(e,t){na(t,!0);const a=O(()=>da.value),r=O(()=>da.tracked),i=O(()=>Li.value);let o=Ut({cpu:[],ram:[],gpu:[]});Ti(()=>{var re;if(!n(i))return;const T=n(i).gpu,W=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,((re=n(i).cpu)==null?void 0:re.percent)??0].slice(-60),o.ram=[...o.ram,n(i).ram.percent].slice(-60),o.gpu=[...o.gpu,W].slice(-60)});const d=O(()=>()=>{var W;const T=(W=n(i))==null?void 0:W.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=O(()=>n(a).filter(T=>T.state!=="running"&&T.state!=="queued").length),u=O(()=>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 re=((T.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return re?Math.min(100,parseFloat(re[1])):null}function g(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 x(T){try{await Se(`/api/jobs/${T}/cancel`,{method:"POST"}),ee("Abbruch angefordert…")}catch(W){ee(W.message,!0)}}async function A(T){try{await Se(`/api/jobs/${T}`,{method:"DELETE"})}catch(W){ee(W.message,!0)}}async function L(){try{const T=await Se("/api/jobs/clear",{method:"POST"});ee(`${T.removed} Einträge entfernt.`)}catch(T){ee(T.message,!0)}}function k(T,W){return T.map(re=>`
`).join("")}var P=Od(),ye=s(ct(P),2);{var te=T=>{const W=O(()=>n(d)());var re=Ed(),Ue=ct(re),Q=l(Ue),ze=s(l(Q),2),Y=l(ze),rt=s(ze,2),D=l(rt),U=s(Q,2),ie=s(l(U),2),ge=l(ie),Ae=s(ie,2),bt=l(Ae),pt=s(U,2),kt=s(l(pt),2),Ct=l(kt),Mt=s(kt,2),Lt=l(Mt),Ot=s(Ue,2),qt=s(l(Ot),4),$=l(qt),N=s(l($)),Ce=l(N),ut=s($,2),F=s(l(ut),2),De=l(F),J=s(ut,2),de=s(l(J)),se=l(de),Z=s(J,2),be=s(l(Z),2),ve=l(be),xe=s(qt,2),ke=l(xe),_e=s(l(ke));Le(_e,()=>k(o.cpu,"--accent"),!0);var S=s(ke,2),H=s(l(S));Le(H,()=>k(o.ram,"--purple"),!0);var le=s(S,2),Je=s(l(le));Le(Je,()=>k(o.gpu,"--on"),!0),z((Qe,Qt,Zt,Ht,M,G,Oe,ne,Be,Ze,et,Me,$e)=>{b(Y,Qe),b(D,Qt),b(ge,Zt),b(bt,`${Ht??""} / ${M??""}`),b(Ct,G),b(Lt,Oe),b(Ce,`${ne??""} / ${Be??""}`),b(De,Ze),b(se,`${et??""} % belegt`),b(ve,`${Me??""} / ${$e??""}`)},[()=>{var Qe;return Math.round(((Qe=n(i).cpu)==null?void 0:Qe.percent)??0)},()=>{var Qe;return((Qe=n(i).cpu)==null?void 0:Qe.temp)!=null?`${Math.round(n(i).cpu.temp)}° CPU-Temp`:"Auslastung"},()=>Math.round(n(i).ram.percent),()=>ia(n(i).ram.used),()=>ia(n(i).ram.total),()=>Math.round(n(W)),()=>n(i).gpu_temp!=null?`${Math.round(n(i).gpu_temp)}° GPU-Temp`:"VRAM + GTT",()=>ia(n(i).ram.used),()=>ia(n(i).ram.total),()=>n(i).gpu?`${ia(n(i).gpu.vram.used+n(i).gpu.gtt.used)} / ${ia(n(i).gpu.vram.total+n(i).gpu.gtt.total)}`:"–",()=>{var Qe;return Math.round(((Qe=n(i).disk)==null?void 0:Qe.percent)??0)},()=>n(i).gpu_temp!=null?Math.round(n(i).gpu_temp)+"°":"–",()=>{var Qe;return((Qe=n(i).cpu)==null?void 0:Qe.temp)!=null?Math.round(n(i).cpu.temp)+"°":"–"}]),m(T,re)};I(ye,T=>{n(i)&&T(te)})}var ue=s(ye,2),Te=l(ue),K=s(l(Te),2),V=l(K),fe=s(K,2);{var he=T=>{var W=Td();C("click",W,L),m(T,W)};I(fe,T=>{n(c)&&T(he)})}var Pe=s(Te,4);{var Ve=T=>{var W=Ad();m(T,W)},mt=T=>{var W=or(),re=ct(W);dt(re,17,()=>n(a),ot,(Ue,Q)=>{const ze=O(()=>v(n(Q))),Y=O(()=>n(Q).state==="running"?g(n(Q).eta_s):""),rt=O(()=>n(Q).state==="running"&&n(Q).rate_bps?ia(n(Q).rate_bps)+"/s":""),D=O(()=>[n(Y),n(rt)].filter(Boolean).join(" · ")),U=O(()=>n(r).includes(n(Q).id));var ie=Dd(),ge=l(ie),Ae=l(ge),bt=s(Ae,2),pt=l(bt),kt=s(bt,2);{var Ct=F=>{var De=Cd(),J=l(De);z(de=>b(J,`${de??""} %${n(D)?` · ${n(D)}`:""}`),[()=>Math.round(n(ze))]),m(F,De)};I(kt,F=>{n(ze)!=null&&F(Ct)})}var Mt=s(kt,2);{var Lt=F=>{var De=$d();z(()=>pn(De,`${n(ze)==null?"margin-left:auto;":""}margin-right:2px;padding:2px 9px;font-size:12px`)),C("click",De,J=>{J.stopPropagation(),x(n(Q).id)}),m(F,De)},Ot=F=>{var De=Ld();C("click",De,J=>{J.stopPropagation(),A(n(Q).id)}),m(F,De)};I(Mt,F=>{n(Q).state==="running"?F(Lt):F(Ot,-1)})}var qt=s(Mt,2);Le(qt,()=>E(n(Q).state));var $=s(ge,2);{var N=F=>{var De=Pd(),J=l(De);z(()=>pn(J,`width:${n(ze)??""}%`)),m(F,De)};I($,F=>{n(ze)!=null&&n(Q).state==="running"&&F(N)})}var Ce=s($,2);{var ut=F=>{var De=zd(),J=l(De);z(de=>b(J,de),[()=>(n(Q).log||[]).join(` `)]),m(F,De)};I(Ce,F=>{n(U)&&F(ut)})}z(F=>{yt(Ae,1,`li-dot ${F??""}`),b(pt,n(Q).label)},[()=>p(n(Q).state)]),C("click",ge,()=>da.toggle(n(Q).id)),C("keydown",ge,F=>F.key==="Enter"&&da.toggle(n(Q).id)),m(Ue,ie)}),m(T,W)};I(Pe,T=>{n(a).length?T(mt,-1):T(Ve)})}z(()=>b(V,n(a).length?n(u)?n(u)+" Fehler":n(a).length+" gesamt":"")),m(e,P),aa()}xa(["click","keydown"]);var qd=y(' '),Bd=y(''),Id=y('✓ fertig'),Fd=y('✗ fehlgeschlagen'),Nd=y('abgebrochen'),Kd=y('läuft…'),Gd=y('
'),Vd=y('

Aktueller Vorgang

'),Ud=y('

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 Hd(e,t){na(t,!0);const a=O(()=>br.value),r=O(()=>da.value);let i=null,o=R(`Verbinde… `),d=R("llama-swap"),c,u=R(null),v=R("");const g=new Set,E=O(()=>n(u)?n(r).find(S=>S.id===n(u)):null);Ti(()=>{if(!n(E))return;const S=n(E),H=S.state==="done",le=S.state==="failed",Je=S.state==="canceled";(H||le||Je)&&!g.has(S.id)&&(g.add(S.id),ee(H?`✓ ${n(v)} abgeschlossen.`:Je?`${n(v)} abgebrochen.`:`✗ ${n(v)} fehlgeschlagen.`,le),H&&setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),800))});function p(S,H){h(u,S,!0),h(v,H,!0),da.track(S)}mr(()=>{x()}),Io(()=>{i==null||i.close()});function x(){i==null||i.close();const S=n(d);h(o,`Verbinde mit ${S}… `);const H=location.protocol==="https:"?"wss:":"ws:";i=new WebSocket(`${H}//${location.host}/api/logs/${S}?token=${encodeURIComponent(el())}`),i.onmessage=le=>{h(o,n(o)+le.data),c&&(c.scrollTop=c.scrollHeight)},i.onclose=()=>{h(o,n(o)+` — Verbindung getrennt —`)},i.onerror=()=>i==null?void 0:i.close()}async function A(S,H,le){if(await xn({title:H,body:le,confirmLabel:"Neustarten"}))try{await Se(`/api/service/${S}/restart`,{method:"POST"}),ee("Neustart ausgelöst: "+S),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),2e3)}catch(Je){ee(Je.message,!0)}}async function L(){if(await xn({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 S=await Se("/api/self-update",{method:"POST"});ee("Update läuft — Dashboard startet gleich neu."),p(S.job_id,"Mission Control Update")}catch(S){ee(S.message,!0)}}async function k(){if(await xn({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 S=await Se("/api/update",{method:"POST"});ee("LLM-Engine-Update läuft."),p(S.job_id,"LLM-Engine-Update")}catch(S){ee(S.message,!0)}}async function P(){if(await xn({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 Se("/api/unload",{method:"POST"}),ee("Grafikspeicher geleert."),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),600)}catch(S){ee(S.message,!0)}}async function ye(){if(!await xn({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 S=await Wi({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(S)try{const H=await Se("/api/os-update",{method:"POST",body:JSON.stringify({password:S})});ee("OS-Update gestartet."),p(H.job_id,"OS-Update")}catch(H){ee(H.message,!0)}}async function te(){if(!await xn({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 S=await Wi({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(S)try{await Se("/api/reboot",{method:"POST",body:JSON.stringify({password:S})}),ee("Reboot ausgelöst — bis gleich.")}catch(H){ee(H.message,!0)}}async function ue(){h(Te,"prüfe…");try{const S=await Se("/api/integration/test");h(Te,S.ok?`✓ Engine antwortet — ${S.models.length} Modell(e): ${S.models.join(", ")}`:`✗ keine Verbindung: ${S.error}`,!0),h(K,S.ok,!0)}catch(S){h(Te,"✗ "+S.message),h(K,!1)}}let Te=R(""),K=R(!1);const V=O(()=>{var S;return((S=n(a))==null?void 0:S.models)||[]}),fe=["running","ready","loading","starting"],he=O(()=>n(V).find(S=>fe.includes(S.state)));function Pe(S){if(!S||S.state!=="running")return null;if(typeof S.progress=="number")return Math.min(100,S.progress);const le=((S.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return le?Math.min(100,parseFloat(le[1])):null}var Ve=Ud(),mt=s(ct(Ve),2),T=l(mt),W=s(l(T),2),re=l(W),Ue=s(T,4),Q=l(Ue),ze=s(l(Q)),Y=l(ze),rt=s(Q,2),D=s(l(rt),2),U=l(D),ie=s(rt,2),ge=s(l(ie),2),Ae=l(ge),bt=s(Ue,2),pt=l(bt),kt=s(pt,2);{var Ct=S=>{var H=qd(),le=l(H);z(()=>{pn(H,`color:${n(K)?"#7ee29a":"#ff9b95"}`),b(le,n(Te))}),m(S,H)};I(kt,S=>{n(Te)&&S(Ct)})}var Mt=s(mt,2),Lt=s(l(Mt),4),Ot=s(Lt,2),qt=s(Ot,2),$=s(qt,2),N=s($,2),Ce=s(Mt,2),ut=s(l(Ce),4),F=s(ut,2),De=s(Ce,2);{var J=S=>{const H=O(()=>n(E)),le=O(()=>n(H).state==="done"),Je=O(()=>n(H).state==="failed"),Qe=O(()=>n(H).state==="canceled"),Qt=O(()=>n(le)||n(Je)||n(Qe)),Zt=O(()=>Pe(n(H)));var Ht=Vd(),M=l(Ht),G=s(l(M),2);{var Oe=Ke=>{var ht=Bd();C("click",ht,async()=>{await xn({title:n(v)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&Se(`/api/jobs/${n(H).id}/cancel`,{method:"POST"})}),m(Ke,ht)};I(G,Ke=>{n(Qt)||Ke(Oe)})}var ne=s(G,2),Be=l(ne);{var Ze=Ke=>{var ht=Id();m(Ke,ht)},et=Ke=>{var ht=Fd();m(Ke,ht)},Me=Ke=>{var ht=Nd();m(Ke,ht)},$e=Ke=>{var ht=Kd();m(Ke,ht)};I(Be,Ke=>{n(le)?Ke(Ze):n(Je)?Ke(et,1):n(Qe)?Ke(Me,2):Ke($e,-1)})}var Re=s(M,2),Rt=l(Re),Bt=s(Re,2);{var Wt=Ke=>{var ht=Gd(),Rn=l(ht);z(()=>pn(Rn,`width:${n(Zt)??""}%`)),m(Ke,ht)};I(Bt,Ke=>{n(Zt)!=null&&!n(Qt)&&Ke(Wt)})}var an=s(Bt,2),bn=l(an);z(Ke=>{b(Rt,`${n(v)??""}${n(Qt)?n(le)?" — erfolgreich.":n(Qe)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),b(bn,Ke)},[()=>(n(H).log||[]).join(` `)]),m(S,Ht)};I(De,S=>{n(E)&&S(J)})}var de=s(De,2),se=l(de),Z=s(l(se),2),be=l(Z);be.value=be.__value="llama-swap";var ve=s(be);ve.value=ve.__value="mission-control";var xe=s(ve);xe.value=xe.__value="system";var ke=s(se,4),_e=l(ke);Bo(ke,S=>c=S,()=>c),z(S=>{var H,le,Je;pn(W,`margin-left:auto;${(H=n(a))!=null&&H.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"}`),b(re,(le=n(a))!=null&&le.swap_ok?"● erreichbar":"● offline"),b(Y,(((Je=n(a))==null?void 0:Je.swap_url)||"—")+"/v1"),b(U,n(he)?n(he).name+` (${n(he).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),b(Ae,S),b(_e,n(o))},[()=>n(V).filter(S=>!S.incomplete).length||"keine"]),C("click",pt,ue),C("click",Lt,()=>A("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),C("click",Ot,()=>A("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),C("click",qt,L),C("click",$,k),C("click",N,P),C("click",ut,ye),C("click",F,te),C("change",Z,x),ar(Z,()=>n(d),S=>h(d,S)),m(e,Ve),aa()}xa(["click","change"]);var Wd=y('
Lade Setups…
'),jd=y(' ×',1),Xr=y('
★ Beste Wahl für dein System
'),Jd=y('
Dein Setup
'),Qd=y(''),Zd=y('
'),Yd=y('· ⚠ Cache veraltet'),Xd=y(" ",1),ec=y('
Frage Quellen ab…
'),tc=y('
'),nc=y('✓ installiert'),ac=y(''),rc=y('

'),ic=y('

'),sc=y(''),lc=y('

'),oc=y('
'),dc=y('
'),cc=y('
'),uc=y(" "),vc=y('
'),fc=y('
Größter Spitzenbedarf: . Es läuft immer nur ein Modell gleichzeitig — das größte bestimmt, ob das Setup passt.
'),pc=y('Alternative: — passt auf dein System.',1),hc=y('
⚠ Dieses Setup übersteigt deinen verfügbaren Speicher.
'),gc=y(''),mc=y('
Lade Dateien von HuggingFace…
'),Yi=y(""),bc=y('
Empfohlener Kontext für deine Hardware: übernehmen
'),_c=y('
Ressourcen-Check
'),wc=y('
⚠ Diese Datei ist zu groß für deinen Speicher. Kleinere Alternative: — einfach auswählen.
'),yc=y('
⚠ Alle Varianten dieses Modells sind zu groß für deinen Speicher. Ein kleineres Modell aus den Empfehlungen wäre die bessere Wahl.
'),xc=y('
',1),kc=y('
Keine GGUF-Dateien im Repo gefunden.
'),Mc=y(''),Sc=y('
'),Ec=y(''),Tc=y('

Cookbook

Modelle finden, installieren und eigene Setups zusammenstellen.

1 · Anwendungsfall wählen & installieren

Hier starten: Fertige Modell-Bundles für deinen Anwendungsfall — ein Klick installiert alles. Die Hardware-Ampel zeigt vorab, ob das Setup auf deinen PC passt.

Aktuell die besten Modelle für dein System

Top-Modelle je Kategorie von HuggingFace — Hardware-Fit wird live für dein System berechnet.

Profi-Suche (HuggingFace)

Direkt HuggingFace durchsuchen — oder eine Modell-URL einfügen für den direkten Sprung.
',1);function Ac(e,t){na(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(w){const _=(w||"").toLowerCase();for(const B of d)if(B.kw.some(q=>_.includes(q)))return B.label;return"Allrounder"}function u(w=""){const _=w.toLowerCase();return/\d+x\d+(\.\d+)?b/.test(_)||new RegExp("(?{bt(),pt()});async function bt(){h(L,!0);try{const w=await Se("/api/cookbook/recipes");h(x,w.recipes||[],!0),h(A,w.recommended_id||null,!0)}catch(w){ee(w.message,!0)}h(L,!1)}async function pt(w=!1){h(P,!0);try{const _=await Se("/api/cookbook/discover"+(w?"?force=true":""));h(k,_,!0),h(ye,_.stale,!0)}catch(_){ee("Empfehlungen nicht ladbar: "+_.message,!0)}h(P,!1)}function kt(w){w=w.trim();const _=w.match(/huggingface\.co\/([^\s/]+\/[^\s/?#]+)/i);return _?_[1]:/^[\w.-]+\/[\w.-]+$/.test(w)?w:null}async function Ct(){const w=n(te).trim(),_=kt(w);let B=w;if(n(K)&&!_&&(B=B?B+" "+n(K):n(K)),!B&&!_){h(ue,[],!0);return}h(Te,!0),h(fe,[],!0),h(he,-1);try{if(_)h(ue,[{id:_,author:_.split("/")[0],downloads:0}],!0);else{const q=`https://huggingface.co/api/models?search=${encodeURIComponent(B)}&filter=gguf&sort=${encodeURIComponent(n(V))}&direction=-1&limit=40`,ae=await fetch(q);h(ue,await ae.json(),!0)}n(ue).forEach((q,ae)=>Mt(ae,q.id))}catch(q){ee(q.message,!0),h(ue,[],!0)}h(Te,!1)}async function Mt(w,_){var B;try{const q=await Se("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:_,ctx:8192})});if(!((B=q.files)!=null&&B.length)){n(fe)[w]=null,Lt();return}const ae=q.files.find(tt=>{var it;return(it=tt.quant)==null?void 0:it.includes("Q4_K_M")})||q.files[0];n(fe)[w]=ae.fit.level,Lt()}catch{n(fe)[w]=null,Lt()}}function Lt(){let w=-1,_=99;n(fe).forEach((B,q)=>{if(B==null)return;const ae=i[B]??99;ae<_&&(_=ae,w=q)}),h(he,w>=0&&_<=1?w:-1,!0)}function Ot(w){h(Pe,n(x).find(_=>_.id===w),!0)}async function qt(w){const _=document.getElementById("cb-r-install-btn");_&&(_.disabled=!0,_.textContent="Starte…");try{const B=await Se("/api/cookbook/install-recipe",{method:"POST",body:JSON.stringify({recipe_id:w,hf_token:ir()})});ee(`${B.count} Download${B.count!==1?"s":""} läuft — Modelle erscheinen danach automatisch im Modelle-Tab.`),h(Pe,null),Ae("activity")}catch(B){ee(B.message,!0),_&&(_.disabled=!1,_.textContent="Installieren")}}async function $(w,_){var B,q;h(Ve,!0),h(mt,_,!0),h(T,w,!0),h(Ue,""),h(Q,8192),h(W,null),h(Y,null),h(re,""),h(ze,!0);try{if(h(W,await Se("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:w,ctx:8192})}),!0),(q=(B=n(W))==null?void 0:B.files)!=null&&q.length){const ae=n(W).files.find(tt=>{var it;return(it=tt.quant)==null?void 0:it.includes("Q4_K_M")})||n(W).files[0];h(re,ae.filename,!0),ae.optimal_ctx&&n(Q)===8192&&h(Q,ae.optimal_ctx,!0),N()}}catch(ae){ee(ae.message,!0)}h(ze,!1)}function N(){var w,_,B;!((_=(w=n(W))==null?void 0:w.files)!=null&&_.length)||!n(re)||(h(Y,n(W).files.find(q=>q.filename===n(re))||null,!0),(B=n(Y))!=null&&B.optimal_ctx&&n(Q)===8192&&h(Q,n(Y).optimal_ctx,!0))}async function Ce(){var w,_;if(!n(T)||!n(re))return ee("Bitte eine GGUF-Datei wählen.",!0);h(ze,!0);try{const B=((w=n(W))==null?void 0:w.params_b)??7,q=((_=n(Y))==null?void 0:_.quant)??"Q4_K_M";await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:n(T),role:n(Ue),params_b:B,quant:q,file:n(re),ctx:n(Q),hf_token:ir()})}),ee("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),h(Ve,!1),Ae("activity")}catch(B){ee("Fehler: "+B.message,!0)}h(ze,!1)}async function ut(w,_,B,q){q.disabled=!0,q.textContent="Starte…";try{await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:w,role:_,params_b:B,quant:"Q4_K_M",hf_token:ir()})}),ee("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),Ae("activity")}catch(ae){ee(ae.message,!0),q.disabled=!1,q.textContent="Installieren"}}function F(){h(ge,null),h(D,""),h(U,""),h(ie,[{repo:"",role:"",quant:"Q4_K_M"}],!0),h(rt,!0)}function De(w){const _=n(x).find(B=>B.id===w);_&&(h(ge,w,!0),h(D,_.title,!0),h(U,_.desc||"",!0),h(ie,_.models.map(B=>({repo:B.repo,role:B.role,quant:B.quant||"Q4_K_M"})),!0),h(rt,!0))}async function J(){if(!n(D).trim())return ee("Bitte einen Titel angeben.",!0);const w=n(ie).filter(_=>_.repo.trim());if(!w.length)return ee("Mindestens ein Modell (Repo) angeben.",!0);try{n(ge)?(await Se("/api/cookbook/user-recipe/"+encodeURIComponent(n(ge)),{method:"PUT",body:JSON.stringify({title:n(D),desc:n(U),models:w})}),ee("Setup aktualisiert.")):(await Se("/api/cookbook/user-recipe",{method:"POST",body:JSON.stringify({title:n(D),desc:n(U),models:w})}),ee("Setup gespeichert.")),h(rt,!1),bt()}catch(_){ee(_.message,!0)}}async function de(w){const _=n(x).find(B=>B.id===w);if(await xn({title:`„${(_==null?void 0:_.title)||w}" löschen?`,body:"Dein eigenes Setup wird aus dem Cookbook entfernt. Bereits installierte Modelle bleiben unangetastet.",confirmLabel:"Löschen",danger:!0}))try{await Se("/api/cookbook/user-recipe/"+encodeURIComponent(w),{method:"DELETE"}),ee("Setup gelöscht."),bt()}catch(B){ee(B.message,!0)}}function se(w){if(!u(w))return"";const _=v(w);return`MoE${_?` · ~${_}B aktiv`:""}`}function Z(w){return w?`${zn(w)}`:""}var be=Tc(),ve=s(ct(be),2),xe=l(ve),ke=s(l(xe),2),_e=s(xe,4);{var S=w=>{var _=Wd();m(w,_)},H=w=>{var _=Zd();dt(_,21,()=>n(x),ot,(B,q)=>{const ae=O(()=>n(q).id===n(A));var tt=Qd(),it=l(tt);{var X=pe=>{var Ye=jd(),Ft=ct(Ye),Tt=s(Ft,2);C("click",Ft,_t=>{_t.stopPropagation(),De(n(q).id)}),C("keydown",Ft,_t=>{_t.key==="Enter"&&(_t.stopPropagation(),De(n(q).id))}),C("click",Tt,_t=>{_t.stopPropagation(),de(n(q).id)}),C("keydown",Tt,_t=>{_t.key==="Enter"&&(_t.stopPropagation(),de(n(q).id))}),m(pe,Ye)};I(it,pe=>{n(q).user&&pe(X)})}var me=s(it,2);{var qe=pe=>{var Ye=Xr();m(pe,Ye)},vt=pe=>{var Ye=Jd();m(pe,Ye)};I(me,pe=>{n(ae)?pe(qe):n(q).user&&pe(vt,1)})}var Ie=s(me,2),Ge=l(Ie),st=l(Ge),St=l(st),Yt=s(Ge,2),ft=l(Yt),Fe=s(Ie,2),Et=l(Fe),It=s(Fe,2),gt=l(It);z((pe,Ye)=>{yt(tt,1,`card-btn${n(ae)?" cb-best":""}`),b(St,n(q).title),yt(Yt,1,`fit-badge ${pe??""}`),b(ft,Ye),b(Et,n(q).desc),b(gt,`${n(q).models.length??""} Modell${n(q).models.length>1?"e":""} im Setup`)},[()=>g(n(q).fit_level),()=>E(n(q).fit_level)]),C("click",tt,()=>Ot(n(q).id)),m(B,tt)}),m(w,_)};I(_e,w=>{n(L)?w(S):w(H,-1)})}var le=s(ve,2),Je=l(le),Qe=s(l(Je),2),Qt=l(Qe);{var Zt=w=>{const _=O(()=>Math.round((Date.now()/1e3-n(k).updated)/60));var B=Xd(),q=ct(B);{var ae=qe=>{var vt=nr();z(()=>b(vt,`Quellen befragt vor ${n(_)??""} min`)),m(qe,vt)},tt=qe=>{var vt=nr();z(Ie=>b(vt,`Quellen befragt vor ${Ie??""} h`),[()=>Math.round(n(_)/60)]),m(qe,vt)},it=qe=>{var vt=nr();z(Ie=>b(vt,`Quellen befragt vor ${Ie??""} Tg.`),[()=>Math.round(n(_)/1440)]),m(qe,vt)};I(q,qe=>{n(_)<60?qe(ae):n(_)<1440?qe(tt,1):qe(it,-1)})}var X=s(q,2);{var me=qe=>{var vt=Yd();m(qe,vt)};I(X,qe=>{n(ye)&&qe(me)})}m(w,B)};I(Qt,w=>{var _;(_=n(k))!=null&&_.updated&&w(Zt)})}var Ht=s(Qe,2),M=l(Ht),G=s(Je,4);{var Oe=w=>{var _=ec();m(w,_)},ne=w=>{var _=or(),B=ct(_);dt(B,17,()=>n(k).categories,ot,(q,ae)=>{var tt=ic(),it=l(tt),X=l(it),me=l(X),qe=s(it,2);dt(qe,21,()=>n(ae).models,ot,(vt,Ie)=>{const Ge=O(()=>n(ae).recommended&&n(Ie).repo===n(ae).recommended);var st=rc(),St=l(st);{var Yt=Xe=>{var at=Xr();m(Xe,at)};I(St,Xe=>{n(Ge)&&Xe(Yt)})}var ft=s(St,2),Fe=l(ft),Et=l(Fe),It=l(Et),gt=s(Et,2),pe=l(gt),Ye=s(Fe,2),Ft=l(Ye),Tt=s(ft,2),_t=l(Tt);Le(_t,()=>Z(o[n(Ie).role]||c(n(Ie).repo)));var qn=s(_t,2);Le(qn,()=>se(n(Ie).repo));var Hn=s(Tt,2),En=l(Hn),ka=s(Hn,2);dt(ka,17,()=>n(Ie).requirements||[],ot,(Xe,at)=>{var $t=tc(),Tn=l($t);z(()=>b(Tn,`⚠ ${n(at)??""}`)),m(Xe,$t)});var lt=s(ka,4),He=l(lt);{var nt=Xe=>{var at=nc();z(()=>Nr(at,"title",`bereits eingerichtet als ${n(Ie).installed??""}`)),m(Xe,at)},wt=Xe=>{var at=ac();C("click",at,$t=>ut(n(Ie).repo,n(Ie).role,n(Ie).params_b,$t.currentTarget)),m(Xe,at)};I(He,Xe=>{n(Ie).installed?Xe(nt):Xe(wt,-1)})}z((Xe,at,$t)=>{yt(st,1,`card${n(Ge)?" res-best":""}`),b(It,n(Ie).name),b(pe,`${n(Ie).author??""} · ${n(Ie).params_b??""}B`),yt(Ye,1,`fit-badge ${Xe??""}`),b(Ft,n(Ie).fit.text),b(En,`${at??""} · ⬇ ${$t??""}`)},[()=>g(n(Ie).fit.level),()=>p(n(Ie).fit),()=>(n(Ie).downloads||0).toLocaleString()]),m(vt,st)}),z(()=>b(me,n(ae).title)),m(q,tt)}),m(w,_)};I(G,w=>{var _;n(P)&&!n(k)?w(Oe):(_=n(k))!=null&&_.categories&&w(ne,1)})}var Be=s(le,2),Ze=s(l(Be),4),et=l(Ze),Me=s(et,2),$e=l(Me);$e.value=$e.__value="downloads";var Re=s($e);Re.value=Re.__value="trending";var Rt=s(Re);Rt.value=Rt.__value="created_at";var Bt=s(Me,2),Wt=l(Bt),an=s(Ze,2);dt(an,20,()=>["","coder","vision","reasoning","chat","agent"],ot,(w,_)=>{var B=sc(),q=l(B);z(()=>{yt(B,1,n(K)===_?"primary":"ghost"),b(q,_||"Alle")}),C("click",B,()=>{h(K,_,!0),Ct()}),m(w,B)});var bn=s(an,2);{var Ke=w=>{var _=oc();dt(_,21,()=>n(ue),ot,(B,q,ae)=>{var tt=lc(),it=l(tt);{var X=Tt=>{var _t=Xr();m(Tt,_t)};I(it,Tt=>{ae===n(he)&&Tt(X)})}var me=s(it,2),qe=l(me),vt=l(qe),Ie=l(vt),Ge=s(vt,2),st=l(Ge),St=s(qe,2),Yt=l(St),ft=s(me,2),Fe=l(ft);Le(Fe,()=>Z(c(n(q).id)));var Et=s(Fe,2);Le(Et,()=>se(n(q).id));var It=s(ft,4),gt=l(It),pe=l(gt),Ye=s(gt,2),Ft=l(Ye);z((Tt,_t,qn,Hn,En)=>{yt(tt,1,`card${ae===n(he)?" res-best":""}`),b(Ie,Tt),b(st,n(q).author||""),yt(St,1,`fit-badge ${_t??""}`),b(Yt,qn),b(pe,Hn),b(Ft,`⬇ ${En??""}`)},[()=>n(q).id.split("/").pop(),()=>n(fe)[ae]?g(n(fe)[ae]):"warn",()=>n(fe)[ae]?E(n(fe)[ae]):"prüfe…",()=>n(fe)[ae]?p({req_gb:0,tps:0}):"Hardware-Fit…",()=>(n(q).downloads||0).toLocaleString()]),C("click",tt,()=>$(n(q).id,n(q).id.split("/").pop())),m(B,tt)}),m(w,_)};I(bn,w=>{n(ue).length&&w(Ke)})}var ht=s(Be,2);{var Rn=w=>{const _=O(()=>n(Pe));var B=gc(),q=l(B),ae=l(q),tt=s(ae,2),it=l(tt),X=s(tt,2),me=l(X),qe=s(X,2);dt(qe,21,()=>n(_).models,ot,(ft,Fe)=>{var Et=vc(),It=l(Et),gt=l(It),pe=l(gt),Ye=l(pe),Ft=s(pe,2),Tt=l(Ft),_t=s(Ft,2);Le(_t,()=>se(n(Fe).repo));var qn=s(gt,2);{var Hn=nt=>{var wt=dc(),Xe=l(wt);z(()=>b(Xe,n(Fe).why)),m(nt,wt)};I(qn,nt=>{n(Fe).why&&nt(Hn)})}var En=s(qn,2);{var ka=nt=>{var wt=cc(),Xe=l(wt);z((at,$t,Tn)=>b(Xe,`~${at??""} GB · ~${$t??""} Tok/s · optimal ~${Tn??""}k Kontext`),[()=>(n(Fe).fit.req_gb??0).toFixed(1),()=>Math.round(n(Fe).fit.tps??0),()=>Math.round((n(Fe).optimal_ctx||8192)/1024)]),m(nt,wt)};I(En,nt=>{n(Fe).fit&&nt(ka)})}var lt=s(It,2);{var He=nt=>{var wt=uc(),Xe=l(wt);z(at=>{yt(wt,1,`fit-badge ${at??""}`),b(Xe,n(Fe).fit.text)},[()=>g(n(Fe).fit.level)]),m(nt,wt)};I(lt,nt=>{n(Fe).fit&&nt(He)})}z(()=>{b(Ye,n(Fe).name),b(Tt,n(Fe).role)}),m(ft,Et)});var vt=s(qe,2);{var Ie=ft=>{const Fe=O(()=>Math.max(...n(_).models.map(pe=>{var Ye;return((Ye=pe.fit)==null?void 0:Ye.req_gb)??0})));var Et=fc(),It=s(l(Et)),gt=l(It);z(pe=>b(gt,`~${pe??""} GB`),[()=>n(Fe).toFixed(1)]),m(ft,Et)};I(vt,ft=>{n(_).models.length&&n(_).models[0].fit&&ft(Ie)})}var Ge=s(vt,2);{var st=ft=>{const Fe=O(()=>n(x).find(pe=>!pe.user&&pe.fit_level!=="too_tight"&&pe.id!==n(_).id));var Et=hc(),It=s(l(Et));{var gt=pe=>{var Ye=pc(),Ft=s(ct(Ye)),Tt=l(Ft);z(()=>b(Tt,`„${n(Fe).title??""}" ansehen`)),C("click",Ft,_t=>{_t.preventDefault(),h(Pe,null),setTimeout(()=>Ot(n(Fe).id),50)}),m(pe,Ye)};I(It,pe=>{n(Fe)&&pe(gt)})}m(ft,Et)};I(Ge,ft=>{n(_).fit_level==="too_tight"&&ft(st)})}var St=s(Ge,2),Yt=l(St);z(()=>{b(it,n(_).title),b(me,n(_).desc),yt(St,1,`primary${n(_).fit_level==="too_tight"?" warn":""}`),b(Yt,n(_).fit_level==="too_tight"?"Trotzdem installieren (nicht empfohlen)":"Komplettes Setup installieren")}),C("click",B,ft=>{ft.target.classList.contains("modal-overlay")&&h(Pe,null)}),C("click",ae,()=>h(Pe,null)),C("click",St,()=>qt(n(_).id)),m(w,B)};I(ht,w=>{n(Pe)&&w(Rn)})}var Vn=s(ht,2);{var ra=w=>{var _=Mc(),B=l(_),q=l(B),ae=s(q,2),tt=l(ae),it=s(ae,2),X=l(it),me=s(it,2);{var qe=Ge=>{var st=mc();m(Ge,st)},vt=Ge=>{var st=xc(),St=s(ct(st),2);dt(St,21,()=>n(W).files,ot,(lt,He)=>{const nt=O(()=>n(He).fit.level==="perfect"?"●":n(He).fit.level==="marginal"?"◐":"○");var wt=Yi(),Xe=l(wt),at={};z(()=>{b(Xe,`${n(nt)??""} ${n(He).filename??""}`),at!==(at=n(He).filename)&&(wt.value=(wt.__value=n(He).filename)??"")}),m(lt,wt)});var Yt=s(St,2),ft=l(Yt),Fe=s(l(ft),2),Et=s(ft,2),It=l(Et),gt=s(l(It));Le(gt,()=>gi(a));var pe=s(It,2),Ye=s(Yt,2);{var Ft=lt=>{var He=bc(),nt=s(l(He)),wt=l(nt),Xe=s(nt,2);z(at=>b(wt,`~${at??""}k`),[()=>Math.round(n(Y).optimal_ctx/1024)]),C("click",Xe,at=>{at.preventDefault(),h(Q,n(Y).optimal_ctx,!0)}),m(lt,He)};I(Ye,lt=>{var He;(He=n(Y))!=null&&He.optimal_ctx&<(Ft)})}var Tt=s(Ye,2);{var _t=lt=>{var He=_c(),nt=l(He),wt=s(l(nt),2),Xe=l(wt),at=s(nt,2),$t=l(at);z((Tn,_r,Vr)=>{b(Xe,`~${Tn??""} GB · ~${_r??""} Tok/s · ${(n(Y).quant||"GGUF")??""}`),yt(at,1,`fit-badge ${Vr??""}`),b($t,n(Y).fit.text)},[()=>(n(Y).fit.req_gb??0).toFixed(1),()=>Math.round(n(Y).fit.tps??0),()=>g(n(Y).fit.level)]),m(lt,He)};I(Tt,lt=>{n(Y)&<(_t)})}var qn=s(Tt,2);{var Hn=lt=>{const He=O(()=>n(W).files.find($t=>$t.fit.level!=="too_tight"&&$t.filename!==n(re)));var nt=or(),wt=ct(nt);{var Xe=$t=>{var Tn=wc(),_r=s(l(Tn)),Vr=l(_r);z(Ur=>b(Vr,`${n(He).filename??""} (${Ur??""})`),[()=>E(n(He).fit.level)]),C("click",_r,Ur=>{Ur.preventDefault(),h(re,n(He).filename,!0),N()}),m($t,Tn)},at=$t=>{var Tn=yc();m($t,Tn)};I(wt,$t=>{n(He)?$t(Xe):$t(at,-1)})}m(lt,nt)};I(qn,lt=>{var He,nt;((He=n(Y))==null?void 0:He.fit.level)==="too_tight"&&((nt=n(W))!=null&&nt.files)&<(Hn)})}var En=s(qn,2),ka=l(En);z(()=>{var lt,He;yt(En,1,`primary${((lt=n(Y))==null?void 0:lt.fit.level)==="too_tight"?" warn":""}`),En.disabled=n(ze),b(ka,n(ze)?"Starte…":((He=n(Y))==null?void 0:He.fit.level)==="too_tight"?"Trotzdem holen (zu groß — nicht empfohlen)":"Herunterladen & Einpflegen")}),C("change",St,N),ar(St,()=>n(re),lt=>h(re,lt)),An(Fe,()=>n(Ue),lt=>h(Ue,lt)),An(pe,()=>n(Q),lt=>h(Q,lt)),C("click",En,Ce),m(Ge,st)},Ie=Ge=>{var st=kc();m(Ge,st)};I(me,Ge=>{var st,St;n(ze)&&!n(W)?Ge(qe):(St=(st=n(W))==null?void 0:st.files)!=null&&St.length?Ge(vt,1):n(ze)||Ge(Ie,2)})}z(()=>{b(tt,n(mt)),b(X,n(T))}),C("click",_,Ge=>{Ge.target.classList.contains("modal-overlay")&&h(Ve,!1)}),C("click",q,()=>h(Ve,!1)),m(w,_)};I(Vn,w=>{n(Ve)&&w(ra)})}var Un=s(Vn,2);{var Ua=w=>{var _=Ec(),B=l(_),q=l(B),ae=s(q,2),tt=l(ae),it=s(ae,6),X=s(it,4),me=s(X,4);dt(me,17,()=>n(ie),ot,(Ge,st,St)=>{var Yt=Sc(),ft=l(Yt),Fe=s(ft,2),Et=s(Fe,2);dt(Et,20,()=>["Q4_K_M","Q5_K_M","Q6_K","Q8_0","Q3_K_M"],ot,(gt,pe)=>{var Ye=Yi(),Ft=l(Ye),Tt={};z(()=>{b(Ft,pe),Tt!==(Tt=pe)&&(Ye.__value=pe)}),m(gt,Ye)});var It=s(Et,2);An(ft,()=>n(st).repo,gt=>n(st).repo=gt),An(Fe,()=>n(st).role,gt=>n(st).role=gt),ar(Et,()=>n(st).quant,gt=>n(st).quant=gt),C("click",It,()=>h(ie,n(ie).filter((gt,pe)=>pe!==St),!0)),m(Ge,Yt)});var qe=s(me,2),vt=s(qe,4),Ie=l(vt);z(()=>{b(tt,n(ge)?"Setup bearbeiten":"Eigenes Setup erstellen"),b(Ie,n(ge)?"Änderungen speichern":"Setup speichern")}),C("click",_,Ge=>{Ge.target.classList.contains("modal-overlay")&&h(rt,!1)}),C("click",q,()=>h(rt,!1)),An(it,()=>n(D),Ge=>h(D,Ge)),An(X,()=>n(U),Ge=>h(U,Ge)),C("click",qe,()=>h(ie,[...n(ie),{repo:"",role:"",quant:"Q4_K_M"}],!0)),C("click",vt,J),m(w,_)};I(Un,w=>{n(rt)&&w(Ua)})}z(()=>{Ht.disabled=n(P),b(M,n(P)?"Suche…":"Aktualisieren"),Bt.disabled=n(Te),b(Wt,n(Te)?"Lade…":"Suchen")}),C("click",ke,F),C("click",Ht,()=>pt(!0)),C("keydown",et,w=>w.key==="Enter"&&Ct()),An(et,()=>n(te),w=>h(te,w)),ar(Me,()=>n(V),w=>h(V,w)),C("click",Bt,Ct),m(e,be),aa()}xa(["click","keydown","change"]);var Cc=y(`
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.
`),$c=y(' '),Lc=y('
'),Pc=y(' '),zc=y(''),Dc=y(''),Oc=y('

Ö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),Rc=y('

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),qc=y('

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

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

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

',1),Ic=y('

Bilder einbinden (Vision)

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

2 · Modelle auswählen

Wähle, welche Modelle im Config-Snippet erscheinen sollen.

3 · Tool wählen

Für welches Werkzeug brauchst du die Konfiguration?

4 · Config-Snippet

',1),Nc=y('

2 · Erst ein Modell installieren

Noch kein Modell eingerichtet
Bevor du ein Tool verbinden kannst, braucht die Engine mindestens ein Modell. Das Config-Snippet wird dann automatisch mit deinen echten Modellnamen befüllt.
'),Kc=y('

Verbinden

Schritt für Schritt: KI-Modelle in deine Tools einbinden — getestet, erklärt, mit Copy-Paste-Config.

1 · Verbindung prüfen

Stelle sicher, dass die LLM-Engine erreichbar ist, bevor du Tools konfigurierst.

Wie funktioniert das Auto-Swap?

',1);function Gc(e,t){na(t,!0);const a=O(()=>br.value),r=O(()=>{var D;return(((D=n(a))==null?void 0:D.models)||[]).filter(U=>!U.incomplete)}),i=O(v);let o=R("zed"),d=R(Ut([])),c=R(""),u=R(!1);function v(){return`http://${location.hostname}:8080/v1`}function g(D){return/^\d{1,3}(\.\d{1,3}){3}$/.test(D)}function E(){return location.protocol==="https:"||!g(location.hostname)}const p=O(()=>n(d).length?n(d):n(r).map(D=>D.name)),x=O(()=>n(p)[0]||"coder"),A=O(()=>{var D;return(D=n(r).find(U=>{var ie,ge;return(ge=(ie=U.meta)==null?void 0:ie.caps)==null?void 0:ge.includes("Bild")}))==null?void 0:D.name});function L(D,U){const ge=(U.length?n(r).filter(Ae=>U.includes(Ae.name)):n(r).length?n(r):[{name:"coder",meta:{}}]).map(Ae=>{var kt,Ct;const bt=(((kt=Ae.meta)==null?void 0:kt.caps)||[]).some(Mt=>/Bild|Vision/i.test(Mt)),pt=((Ct=Ae.meta)==null?void 0:Ct.ctx)||131072;return` { "name": "${Ae.name}", "display_name": "${Ae.name}", "max_tokens": ${pt}${bt?', "capabilities": { "tools": true, "images": true }':""} }`}).join(`, `);return`"language_models": { "openai_compatible": { "bosgame": { "api_url": "${D}", "available_models": [ ${ge} ] } } }`}function k(D,U){const ge=(U.length?n(r).filter(Ae=>U.includes(Ae.name)):n(r).length?n(r):[{name:"coder",meta:{}}]).map(Ae=>{var pt;const bt=((pt=Ae.meta)==null?void 0:pt.ctx)||131072;return` "${Ae.name}": { "name": "${Ae.name}", "contextWindowSize": ${bt} }`}).join(`, `);return`"provider": { "llama-swap": { "npm": "@ai-sdk/openai-compatible", "name": "Bosgame (llama-swap)", "options": { "baseURL": "${D}", "apiKey": "local" }, "models": { ${ge} } } }`}async function P(){h(c,"Teste…");try{const D=await Se("/api/integration/test");h(u,D.ok,!0),h(c,D.ok?`✓ Verbunden — ${D.models.length} Modell(e): ${D.models.join(", ")}`:`✗ Keine Verbindung: ${D.error}`,!0)}catch(D){h(u,!1),h(c,"✗ "+D.message)}}function ye(D){var ie;const U=D.querySelector("code");U&&((ie=navigator.clipboard)==null||ie.writeText(U.textContent||""))}function te(D){var U;(U=navigator.clipboard)==null||U.writeText(D.value)}var ue=Kc(),Te=s(ct(ue),2),K=s(l(Te),6),V=l(K),fe=s(V,2),he=s(K,2);{var Pe=D=>{var U=Cc();m(D,U)},Ve=O(()=>E());I(he,D=>{n(Ve)&&D(Pe)})}var mt=s(he,2),T=l(mt),W=s(T,2);{var re=D=>{var U=$c(),ie=l(U);z(()=>{pn(U,`color:${n(u)?"#7ee29a":"#ff9b95"}`),b(ie,n(c))}),m(D,U)};I(W,D=>{n(c)&&D(re)})}var Ue=s(Te,2),Q=s(l(Ue),2);dt(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."]],ot,(D,U)=>{var ie=O(()=>sr(U,3));let ge=()=>n(ie)[0],Ae=()=>n(ie)[1],bt=()=>n(ie)[2];var pt=Lc(),kt=l(pt),Ct=l(kt),Mt=s(kt,2),Lt=l(Mt),Ot=l(Lt),qt=s(Lt,2),$=l(qt);z(()=>{b(Ct,ge()),b(Ot,Ae()),b($,bt())}),m(D,pt)});var ze=s(Ue,2);{var Y=D=>{var U=Fc(),ie=ct(U),ge=l(ie),Ae=s(l(ge),2),bt=l(Ae),pt=s(ge,4);dt(pt,21,()=>n(r),ot,(J,de)=>{const se=O(()=>n(d).includes(n(de).name));var Z=Pc(),be=l(Z);z(()=>{pn(Z,`cursor:pointer;${n(se)?"background:rgba(45,212,191,.2);border-color:var(--accent);color:var(--accent)":""}`),b(be,n(de).name)}),C("click",Z,()=>h(d,n(se)?n(d).filter(ve=>ve!==n(de).name):[...n(d),n(de).name],!0)),C("keydown",Z,ve=>ve.key==="Enter"&&h(d,n(se)?n(d).filter(xe=>xe!==n(de).name):[...n(d),n(de).name],!0)),m(J,Z)});var kt=s(pt,2);{var Ct=J=>{var de=zc(),se=l(de);C("click",se,Z=>{Z.preventDefault(),h(d,[],!0)}),m(J,de)};I(kt,J=>{n(d).length&&J(Ct)})}var Mt=s(ie,2),Lt=s(l(Mt),4);dt(Lt,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"]],ot,(J,de)=>{var se=O(()=>sr(de,3));let Z=()=>n(se)[0],be=()=>n(se)[1],ve=()=>n(se)[2];var xe=Dc(),ke=l(xe),_e=l(ke),S=s(ke,2),H=l(S);z(()=>{yt(xe,1,`card-btn${n(o)===Z()?" cb-best":""}`),b(_e,be()),b(H,ve())}),C("click",xe,()=>h(o,Z(),!0)),m(J,xe)});var Ot=s(Mt,2),qt=s(l(Ot),2);{var $=J=>{const de=O(()=>L(n(i),n(p)));var se=Oc(),Z=s(ct(se),4),be=l(Z),ve=s(be,2),xe=l(ve),ke=l(xe),_e=s(Z,4),S=s(l(_e)),H=l(S);z(()=>{b(ke,n(de)),b(H,`bosgame / ${n(x)??""}`)}),C("click",be,le=>ye(le.currentTarget.parentElement)),m(J,se)},N=J=>{const de=O(()=>k(n(i),n(p)));var se=Rc(),Z=s(ct(se),6),be=l(Z),ve=s(be,2),xe=l(ve),ke=l(xe),_e=s(Z,2),S=s(l(_e),3),H=l(S);z(()=>{b(ke,n(de)),b(H,`llama-swap/${n(x)??""}`)}),C("click",be,le=>ye(le.currentTarget.parentElement)),m(J,se)},Ce=J=>{var de=qc(),se=s(ct(de),4),Z=l(se),be=s(Z,2),ve=s(se,4),xe=l(ve),ke=s(xe,2);z(()=>{yr(Z,n(i)),yr(xe,n(x))}),C("click",be,_e=>te(_e.currentTarget.previousElementSibling)),C("click",ke,_e=>te(_e.currentTarget.previousElementSibling)),m(J,de)},ut=J=>{var de=Bc(),se=s(ct(de),4),Z=l(se),be=s(Z,2),ve=s(se,4),xe=l(ve),ke=s(xe,2);z(()=>yr(Z,n(i))),C("click",be,_e=>te(_e.currentTarget.previousElementSibling)),C("click",ke,_e=>te(_e.currentTarget.previousElementSibling)),m(J,de)};I(qt,J=>{n(o)==="zed"?J($):n(o)==="opencode"?J(N,1):n(o)==="cline"?J(Ce,2):n(o)==="openwebui"&&J(ut,3)})}var F=s(Ot,2);{var De=J=>{const de=O(()=>`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 se=Ic(),Z=l(se),be=s(l(Z),2),ve=l(be);Le(ve,()=>Pt("check"));var xe=s(ve),ke=s(Z,4),_e=l(ke),S=s(_e,2),H=l(S),le=l(H);z(()=>{b(xe,` „${n(A)??""}" bereit`),b(le,n(de))}),C("click",_e,Je=>ye(Je.currentTarget.parentElement)),m(J,se)};I(F,J=>{n(A)&&J(De)})}z(()=>b(bt,n(d).length?`${n(d).length} von ${n(r).length} ausgewählt`:"alle werden eingeschlossen")),m(D,U)},rt=D=>{var U=Nc(),ie=s(l(U),2),ge=s(l(ie),4);C("click",ge,()=>{var Ae;return(Ae=document.querySelector(".nav-item[data-view='cookbook']"))==null?void 0:Ae.dispatchEvent(new MouseEvent("click"))}),m(D,U)};I(ze,D=>{n(r).length?D(Y):D(rt,-1)})}z(()=>yr(V,n(i))),C("click",fe,D=>{const U=D.currentTarget.previousElementSibling;te(U)}),C("click",T,P),m(e,ue),aa()}xa(["click","keydown"]);var Vc=y('
'),Uc=y('

Für dich: Upgrades

Neuere Modelle, die ein installiertes ersetzen können.
'),Hc=y('
Lade News… (erstes Laden kann kurz dauern)
'),Wc=y('
'),jc=y('
Keine News geladen
Die Quellen sind gerade nicht erreichbar — später nochmal probieren.
'),Jc=y('für dich'),Qc=y('
'),Zc=y('
'),Yc=y('

News

Aktuelles aus der Local-LLM-Welt — aus kuratierten Quellen.
',1);function Xc(e,t){na(t,!0);let a=R(Ut([])),r=R(Ut([])),i=R(!0),o=R("");const d=K=>K==="perfect"?"ok":K==="marginal"?"warn":"bad";function c(K){const V=Math.max(0,Date.now()/1e3-K);return V<60?V+"s":V<3600?Math.floor(V/60)+"m":V<86400?Math.floor(V/3600)+"h":Math.floor(V/86400)+"d"}async function u(){h(i,!0),h(o,"");try{h(a,(await Se("/api/news")).items||[],!0)}catch(K){h(o,K.message||"Fehler beim Laden",!0)}finally{h(i,!1)}}async function v(){try{h(r,(await Se("/api/cookbook/upgrades")).upgrades||[],!0)}catch{h(r,[],!0)}}async function g(K,V){var fe;V.disabled=!0,V.textContent="Starte…";try{await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:K.repo,role:K.role,params_b:K.params_b,quant:K.quant,hf_token:ir()})}),(fe=document.querySelector(".nav-item[data-view='activity']"))==null||fe.dispatchEvent(new MouseEvent("click"))}catch(he){V.disabled=!1,V.textContent="Installieren",alert("Fehler: "+he.message)}}function E(){u(),v()}mr(()=>{u(),v()});var p=Yc(),x=ct(p),A=s(l(x),2),L=s(x,2);{var k=K=>{var V=Uc(),fe=l(V),he=s(l(fe),2),Pe=l(he),Ve=s(fe,4);dt(Ve,21,()=>n(r),ot,(mt,T)=>{var W=Vc(),re=l(W),Ue=l(re),Q=l(Ue),ze=l(Q),Y=s(Q,2),rt=l(Y),D=s(Ue,2),U=l(D),ie=s(re,2);z(ge=>{b(ze,n(T).name),yt(Y,1,`fit-badge ${ge??""}`),b(rt,n(T).fit.text),b(U,`Ersetzt dein „${n(T).old??""}". ${n(T).why??""}`)},[()=>d(n(T).fit.level)]),C("click",ie,ge=>g(n(T),ge.currentTarget)),m(mt,W)}),z(()=>b(Pe,n(r).length)),m(K,V)};I(L,K=>{n(r).length&&K(k)})}var P=s(L,2);{var ye=K=>{var V=Hc();m(K,V)},te=K=>{var V=Wc(),fe=l(V);z(()=>b(fe,n(o))),m(K,V)},ue=K=>{var V=jc();m(K,V)},Te=K=>{var V=Zc();dt(V,21,()=>n(a),ot,(fe,he,Pe)=>{var Ve=Qc();yt(Ve,1,`news-card${Pe===0?" featured":""}`);var mt=l(Ve),T=l(mt),W=l(T),re=s(T,2);{var Ue=D=>{var U=Jc();m(D,U)};I(re,D=>{n(he).relevant&&D(Ue)})}var Q=s(re,2),ze=l(Q),Y=s(mt,2),rt=l(Y);z(D=>{Nr(Ve,"href",n(he).link),b(W,n(he).source),b(ze,D),b(rt,n(he).title)},[()=>n(he).ts?c(n(he).ts):""]),m(fe,Ve)}),m(K,V)};I(P,K=>{n(i)?K(ye):n(o)?K(te,1):n(a).length?K(Te,-1):K(ue,2)})}C("click",A,E),m(e,p),aa()}xa(["click"]);const eu=[{label:"Einstieg",tutorials:[["Dein erster Workflow — in 3 Schritten",`
  1. Modell holen: Tab Cookbook → Anwendungsfall wählen (z.B. „Coden & Programmieren") → Komplettes Setup installieren. Der Download läuft im Tab Aktivität — einfach warten bis der Job grün wird.
  2. Verbinden: Tab Verbinden → Tool wählen → Config-Snippet kopieren und einfügen. Verbindung testen bestätigt, dass alles klappt.
  3. Arbeiten: Im Tool das gewünschte Modell auswählen und loslegen. Das Modell wird automatisch geladen — du musst nichts manuell starten.

Nicht sicher welches Tool du nehmen sollst? Lies den Abschnitt „Welches Tool ist das richtige für mich?" weiter unten.

`],["Kontext — das Kurzzeitgedächtnis des Modells",`

Der Kontext ist wie ein Blatt Papier: alles was du mit dem Modell besprochen hast, steht darauf. Wird es voll, fallen die ältesten Nachrichten raus.

Was du meist nicht tun musst: Tools wie OpenCode, Cline und OpenWebUI verwalten das Kontextfenster automatisch. Ein neuer Chat = leeres Blatt.

Wenn der Kontext volläuft (Fehler „context length exceeded" oder das Modell vergisst den Anfang):

  1. Neuen Chat starten — der einfachste Reset.
  2. Vorher: „Fasse kurz zusammen was wir bisher erreicht haben" — dann diesen Stand in den neuen Chat einfügen.
  3. Kontext vergrößern: Tab ModelleKonfigurieren → Empfehlung für deine Hardware übernehmen.

Wichtig: „Grafikspeicher leeren" (Tab Server) ist etwas anderes — das wirft das Modell aus dem Speicher, nicht den Gesprächsverlauf.

`],["Auto-Swap — Modelle laden sich von selbst",`

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 und Entladen passiert unsichtbar im Hintergrund.

Warum dauert die erste Antwort manchmal 5–15 Sekunden?
Das Modell wird gerade geladen — danach geht es normal weiter. Die Topbar zeigt „[Modellname] lädt…" während das passiert.

Scout immer sofort verfügbar halten: Tab Modelle → Konfigurieren → Immer aktiv halten aktivieren (TTL = ∞). Das Modell bleibt dann dauerhaft im RAM und antwortet ohne Wartezeit — ideal für den kleinen, schnellen Allrounder.

`]]},{label:"Tools einrichten",tutorials:[["Welches Tool ist das richtige für mich?",`

Die Antwort hängt davon ab, was du hauptsächlich tun willst:

Ich will einfach chatten, Texte schreiben, Fragen stellen
OpenWebUI — klassische Chat-Oberfläche im Browser. Kein Programmieren, kein Setup. Ideal als Einstieg.
Ich programmiere und will KI in VS Code
Cline — KI-Assistent direkt im Editor. Zeigt dir jeden Schritt und fragt vor Änderungen.
Ich will, dass die KI eigenständig ganze Features baut
OpenCode — autonomer Coding-Agent im Terminal oder als Desktop-App. Liest Dateien, schreibt Code, führt Befehle aus.
Ich will einen schnellen Editor mit eingebautem KI-Panel
Zed — nativer Editor mit direktem Modell-Zugriff. Schnell, minimalistisch, für Leute die Gewicht auf Performance legen.

Faustregel: Fang mit OpenWebUI an. Wenn du merkst dass du dieselben Aufgaben immer wieder beschreibst und dann manuell umsetzt — wechsle zu OpenCode oder Cline.

`],["OpenCode verbinden und die ersten Schritte",`

OpenCode ist installiert? Dann in vier Schritten verbinden:

  1. Config-Snippet holen: Tab VerbindenOpenCode auswählen → Snippet kopieren und in ~/.config/opencode/opencode.json einfügen.
  2. OpenCode starten: Terminal öffnen, opencode eintippen — immer im Projektordner starten, damit der Agent deine Dateien sieht.
  3. Modell wählen: /models eintippen → llama-swap/coder auswählen.
  4. Erste Aufgabe geben — z.B.: „Lies die Datei README.md und erkläre mir kurz was dieses Projekt macht."

Nützliche Befehle während der Arbeit:

  • /model — Modell mitten im Gespräch wechseln (z.B. auf scout für kurze Fragen)
  • /compact — Kontext komprimieren wenn er voll wird
  • /clear — frischer Start, leerer Kontext

Bevor OpenCode eine Datei ändert, fragt es nach — mit y bestätigen oder n ablehnen.

`],["Cline in VS Code verbinden und nutzen",`

Cline ist installiert (VS Code Extension)? So richtest du es ein:

  1. Das Cline-Panel in VS Code öffnen (Roboter-Icon in der linken Leiste).
  2. Provider „OpenAI Compatible" wählen.
  3. Tab VerbindenCline / Cursor → Basis-URL und Modell-ID kopieren und eintragen.
  4. API-Key: irgendeinen beliebigen Text eingeben (z.B. local) — wird nicht geprüft.

Plan-Modus vs. Act-Modus:

  • Plan: Cline erklärt erst seinen Plan — du kannst ihn korrigieren bevor er handelt. Ideal für Anfänger.
  • Act: Cline handelt sofort, fragt aber vor jeder Dateiänderung um Erlaubnis. Schneller.

Unterschied zu OpenCode: Cline arbeitet direkt in VS Code — du siehst Änderungen sofort im Editor. OpenCode ist besser für große, autonome Aufgaben; Cline für Aufgaben die du Schritt für Schritt begleiten willst.

`],["OpenWebUI — chatten ohne Vorkenntnisse",`

OpenWebUI ist installiert? Verbinden in 3 Schritten:

  1. OpenWebUI im Browser öffnen → Admin PanelConnections.
  2. + OpenAI-Verbindung hinzufügen → Basis-URL aus Tab Verbinden (Abschnitt OpenWebUI) kopieren.
  3. API-Key: dummy-key (egal was hier steht). Speichern.

Danach oben das Modell wählen (coder, scout oder vision) und loslegen — genau wie bei ChatGPT, nur lokal und privat.

Bilder analysieren: Mit einem Vision-Modell (z.B. qwen3-vl) einfach ein Bild per Drag & Drop ins Chat-Fenster ziehen — das Modell beschreibt und analysiert es.

Gut für: Texte schreiben, übersetzen, zusammenfassen, erklären lassen, Brainstorming — alles ohne Programmierkenntnisse.

`]]},{label:"Agenten meistern",tutorials:[["Was ein Agent tut — und was er nicht kann",`

Ein nacktes Modell antwortet auf Text — das war's. Ein Agent ist das Programm drumherum, das das Modell in eine Handlungsschleife bringt:

Planen → Werkzeug nutzen → Ergebnis prüfen → nächsten Schritt planen → …

Konkret: Datei lesen → Code verstehen → Änderung schreiben → Test ausführen → Fehler beheben — ohne dass du jeden Schritt anstoßen musst.

Was Agenten gut können:

  • Features über mehrere Dateien implementieren
  • Bugs finden und in ihrem Kontext beheben
  • Code refactoren, Dokumentation schreiben, Tests ergänzen
  • Recherchieren und das Ergebnis direkt umsetzen (mit MCP)

Was Agenten schlecht können:

  • Kreative Richtungsentscheidungen ohne klare Vorgabe treffen
  • Sehr komplexe, undokumentierte Systeme ohne Kontext verstehen
  • Fehler in externer Hardware oder fremden APIs beheben

Faustregel: Je klarer die Aufgabe, desto besser das Ergebnis. Unklarer Auftrag → unklares Ergebnis.

`],["Einen Agenten richtig briefen",`

Der Unterschied zwischen „es passiert nichts Sinnvolles" und „es funktioniert auf Anhieb" ist meistens die Qualität des Auftrags.

Schlecht → Gut:

„Mach meine App besser."
„Die Login-Seite in src/pages/Login.tsx zeigt bei falschem Passwort gar keinen Fehler an. Füge unter dem Passwortfeld eine rote Fehlermeldung ein wenn die API 401 zurückgibt."
„Erkläre mir Python."
„Ich bin Anfänger. Erkläre mir in 5 Schritten wie ich eine CSV-Datei in Python einlese und die Summe einer Spalte berechne — mit echtem Code-Beispiel."
„Mach das schneller."
„Die Funktion loadUsers() in src/api/users.ts braucht 3 Sekunden. Die Daten kommen vom Backend. Prüfe ob Caching helfen würde und schlage eine konkrete Lösung vor."

Die 3 Zutaten für einen guten Auftrag:

  1. WO: Welche Datei / welcher Ordner / welches Feature
  2. WAS: Was ist das genaue Problem oder Ziel
  3. WIE: Welches Ergebnis erwartest du

Trick: Wenn du nicht sicher bist ob der Auftrag klar genug ist, frag den Agenten: „Hast du alles was du brauchst, oder fehlt dir etwas?"

`],["MCP — deinem Agenten echte Werkzeuge geben",`

MCP (Model Context Protocol) ist ein einheitlicher „Stecker", über den ein Agent zusätzliche Werkzeuge bekommt. Ohne MCP kann er nur Text lesen und schreiben. Mit MCP kann er z.B.:

  • Im Web suchen (Brave Search, Tavily)
  • GitHub Issues lesen und kommentieren
  • Deine Datenbank abfragen
  • Screenshots machen, E-Mails lesen, Kalender verwalten

Wie MCPs eingebunden werden (Beispiel für OpenCode):

In der Konfigurationsdatei (~/.config/opencode/opencode.json) einen "mcp"-Block hinzufügen:

{
  "mcp": {
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"],
      "env": { "BRAVE_API_KEY": "dein-key" }
    }
  }
}

Danach OpenCode neu starten — der Agent nutzt das Werkzeug automatisch wenn er es braucht.

Empfohlene MCPs für den Einstieg:

  • brave-search / tavily — im Web suchen und recherchieren
  • github — Repos, Issues und Pull Requests lesen
  • filesystem — sichere Dateizugriffe außerhalb des Projektordners

Wo MCPs finden?mcp.run, smithery.ai, oder direkt: „Welche MCPs gibt es für [dein Werkzeug]?" im Chat fragen.

Merksatz: Fehlt dem Agenten eine Fähigkeit → MCP. Soll er etwas nur besser machen → Skill (nächster Abschnitt).

`],["Skills & Rules — Agenten Gewohnheiten beibringen",`

Skills (auch Rules, AGENTS.md oder Instructions genannt) sind kurze Texte, die dem Agenten beibringen wie er in deinem Projekt arbeiten soll — immer, ohne dass du es jedes Mal neu sagen musst.

Beispiel — eine einfache AGENTS.md:

Schreib alle Variablen in camelCase.
Kommentare immer auf Deutsch.
Tests immer mit describe/it-Blöcken (Jest).
Importiere nichts was nicht schon in package.json steht.
Bevor du Dateien änderst: erkläre kurz was du vorhast.

Der Agent liest das vor jeder Aufgabe und hält sich daran.

Wo die Datei ablegen:

OpenCode
AGENTS.md im Projektordner (pro Projekt)
~/.config/opencode/AGENTS.md (global, gilt überall)
Cline
.clinerules im Projektordner
~/.clinerules (global)
Zed
Zed Settings → Assistant → System Prompt

Fertige Skills finden:

  • cursor.directory — vorgefertigte Rules für React, Vue, Python, etc.
  • Einfach fragen: „Schreib mir eine AGENTS.md für ein React + TypeScript Projekt mit Tailwind."
`]]},{label:"Wenn etwas nicht klappt",tutorials:[["Häufige Probleme & Lösungen",`
🔴 Engine offline, rotes Licht in der Topbar
Tab Server → LLM-Engine-Karte → Neustart. Warte 10–15 Sekunden — danach sollte die Verbindung wieder grün sein.
⏳ Modell lädt länger als 5 Minuten
Tab Aktivität prüfen: läuft ein Download-Job? Der muss erst abgeschlossen sein bevor das Modell ladbar ist. Bei Fehler → Job-Zeile aufklappen, Log lesen.
💬 „context length exceeded" Fehler im Tool
Neuen Chat starten. Vorher: „Fasse kurz zusammen was wir erreicht haben" eingeben und diesen Text in den neuen Chat mitnehmen.
🌐 Modell antwortet immer auf Englisch
Am Anfang der Unterhaltung schreiben: „Antworte immer auf Deutsch." Für dauerhaft: eine AGENTS.md / .clinerules mit dieser Anweisung anlegen (siehe Abschnitt Skills & Rules).
🔌 Tool findet keine Modelle / Verbindung schlägt fehl
Tab VerbindenVerbindung testen. Wenn Fehler: läuft llama-swap? (Tab Server). URL korrekt? Muss http:// (nicht https) sein, Port 8080. Über Proxy? → LAN-IP direkt nutzen: http://192.168.178.151:8080/v1
⬇ Download schlägt fehl / bricht ab
Tab Aktivität → Job-Zeile aufklappen → Log lesen. Häufigste Ursache: HuggingFace braucht einen Token für dieses Modell (gated model). → Einstellungen (Zahnrad-Icon oben) → HuggingFace-Token eintragen.
🔄 Seite lädt / Dashboard hängt komplett
Strg+Shift+R (Hard Reload). Wenn das nicht hilft: Tab Server → Mission Control → Neu starten.
`]]}],tu=[["LLM / Modell","Die KI selbst — versteht und schreibt Text (wie ChatGPT, nur lokal auf deinem PC). Ein Modell ist eine konkrete Datei, oft auf etwas spezialisiert (Code, Bilder, Chat)."],["GGUF","Das lokal lauffähige Dateiformat. llama-swap lädt nur GGUF — Repos ohne GGUF kann die Engine nicht nutzen."],["Quantisierung (Q4_K_M)","Verkleinert ein Modell (16-Bit → 4-Bit), damit es in den Speicher passt — bei kaum Qualitätsverlust. Q4_K_M ist der bewährte Sweetspot aus Qualität und Geschwindigkeit."],["Kontextfenster","Das Kurzzeitgedächtnis: wie viel Text sich das Modell gleichzeitig merken kann. Größer = mehr Überblick, mehr Speicher, etwas langsamer."],["Token","Die kleinste Einheit die ein Modell verarbeitet — meist 3–4 Zeichen oder ein kurzes Wort. 1 000 Tokens ≈ 750 Wörter. Kontextfenster, Geschwindigkeit und Kosten werden in Tokens gemessen."],["Auto-Swap","llama-swap lädt/entlädt Modelle automatisch — immer nur eins gleichzeitig. Du managst nichts."],["TTL (Time to Live)","Wie lange ein Modell nach der letzten Anfrage im RAM bleibt bevor es entladen wird. Standard: 5 Minuten. ∞ = bleibt dauerhaft geladen (sinnvoll für den Scout)."],["Agent","Ein Programm (OpenCode, Cline, Continue), das das Modell in einer Handlungsschleife laufen lässt — Dateien lesen/ändern, Befehle ausführen, planen, bis die Aufgabe erledigt ist."],["MCP","Model Context Protocol — der Stecker, über den ein Agent zusätzliche Werkzeuge bekommt (Web, Datenbank, GitHub …). MCP = neue Fähigkeiten."],["Skills / Rules","Kurze Textdatei (AGENTS.md, .clinerules …) mit Anweisungen wie der Agent in deinem Projekt arbeiten soll — einmal geschrieben, immer befolgt."],["System-Prompt","Eine unsichtbare Anweisung die vor deiner Nachricht steht und das Verhalten des Modells grundlegend prägt (Sprache, Ton, Rolle). Skills nutzen oft den System-Prompt."],["Vision","Modelle mit Vision-Fähigkeit können Bilder verstehen — Screenshots, Diagramme, Fehlerfotos. Erkennbar am mmproj-Projektor der mitgeladen wird."]];var nu=y('
'),au=y('
'),ru=y('

'),iu=y('

Guide

Schritt für Schritt erklärt — von der ersten Einrichtung bis zu echten Agenten-Workflows.

Begriffe kurz erklärt

',1);function su(e){var t=iu(),a=s(ct(t),2);dt(a,17,()=>eu,ot,(i,o,d)=>{var c=au(),u=l(c),v=l(u),g=s(u,2);dt(g,17,()=>n(o).tutorials,ot,(E,p,x)=>{var A=O(()=>sr(n(p),2));let L=()=>n(A)[0],k=()=>n(A)[1];var P=nu();P.open=d===0&&x===0;var ye=l(P),te=l(ye),ue=s(ye,2);Le(ue,k,!0),z(()=>b(te,L())),m(E,P)}),z(()=>b(v,n(o).label)),m(i,c)});var r=s(a,4);dt(r,21,()=>tu,ot,(i,o)=>{var d=O(()=>sr(n(o),2));let c=()=>n(d)[0],u=()=>n(d)[1];var v=ru(),g=l(v),E=l(g),p=s(g,2),x=l(p);z(()=>{b(E,c()),b(x,u())}),m(i,v)}),m(e,t)}let Xi={};function lu(){const e=document.getElementById("top-active-text");e&&(e.classList.add("swap-flash"),setTimeout(()=>e.classList.remove("swap-flash"),900))}function es(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"),ts("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`:"",g=c.state==="loading"||c.state==="starting"?' lädt…':"";r.innerHTML=`${c.name}${v}${g}`}else r.innerHTML='Kein Modell im VRAM';e.swap_ok?uu():ts(`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,g]of Object.entries(u)){const E=Xi[v];if(E&&E!==g&&(g==="running"||g==="loading")){lu();break}}Xi=u}ou(e),br.set(e)}function ou(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 du(e){da.set(e||[])}function cu(e){Li.set(e)}function ts(e,t){const a=document.getElementById("alert");a.className="alert"+(t?" warn":""),a.innerHTML=`${e}`,a.style.display="flex"}function uu(){const e=document.getElementById("alert");e&&(e.style.display="none")}const vu=e=>{var t;return(t=document.querySelector(`.nav-item[data-view="${e}"]`))==null?void 0:t.click()};function ei(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=()=>vu(a),i}async function tl(){try{const e=await Se("/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(ei(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(ei(e.engine>0?"Engine: Update":"Engine: aktuell",e.engine>0?"warn":"ok","server")),t.appendChild(ei(e.models>0?`Modelle: ${e.models}`:"Modelle: aktuell",e.models>0?"warn":"ok","news"))}catch{}}async function Gr(){try{es(await Se("/api/status"))}catch{es(null)}}async function nl(){try{du(await Se("/api/jobs"))}catch{}}function al(){const e=window.location.protocol==="https:"?"wss:":"ws:",t=new WebSocket(`${e}//${window.location.host}/api/system/stream`);t.onmessage=a=>{try{cu(JSON.parse(a.data))}catch{}},t.onclose=()=>{setTimeout(al,3e3)},t.onerror=()=>t.close()}var ls;((ls=document.getElementById("logo"))==null?void 0:ls.innerHTML)!==void 0&&(document.getElementById("logo").innerHTML=Kr.logo);document.querySelectorAll("[data-ic]").forEach(e=>{e.innerHTML=Kr[e.dataset.ic||""]||""});const fu=[["overview",cd],["models",Sd],["activity",Rd],["server",Hd],["cookbook",Ac],["connect",Gc],["news",Xc],["guides",su]];for(const[e,t]of fu){const a=document.querySelector(`.view[data-view="${e}"]`);a&&ko(t,{target:a})}Uo("overview");const ti=document.getElementById("token");ti&&(ti.value=el(),ti.addEventListener("change",e=>{Fo(e.target.value),Gr()}));const ni=document.getElementById("hf-token");ni&&(ni.value=ir(),ni.addEventListener("change",e=>Ko(e.target.value)));const ns=document.getElementById("nav-settings"),ai=document.getElementById("settings-modal"),as=document.getElementById("sm-close");ns&&ai&&as&&(ns.addEventListener("click",()=>ai.style.display="flex"),as.addEventListener("click",()=>ai.style.display="none"));function pu(){const e=document.getElementById("clock");e&&(e.textContent=new Date().toTimeString().slice(0,5))}document.addEventListener("mc:refresh",Gr);Gr();nl();al();setInterval(pu,1e3);setInterval(Gr,3e3);setInterval(nl,1500);tl();setInterval(tl,6e4);