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

LLM-Engine
llama-swap
Aktives Modell

System-Gesundheit

So ausgelastet ist dein Mini-PC gerade.

Schnellstart

Die häufigsten Aufgaben — ein Klick.

Dein Stack

Top-News

Alle →
',1);function td(e,t){Yn(t,!0);const a=q(()=>dr.value),r=q(()=>xi.value),i=q(()=>{var p;return((p=n(a))==null?void 0:p.models)||[]}),o=q(()=>{var p;return((p=n(a))==null?void 0:p.swap_ok)??!1}),d=q(()=>n(i).find(p=>["running","ready","loading","starting"].includes(p.state))),c=q(()=>n(a)?n(o)?n(r)&&n(r).ram.percent>=90?"Achtung: Speicher wird knapp.":"Alles läuft rund.":"LLM-Engine offline":"Verbinde…"),u=q(()=>n(a)?n(o)?n(r)&&n(r).ram.percent>=90?`Arbeitsspeicher bei ${Math.round(n(r).ram.percent)} % — eventuell Speicher freigeben.`:`${n(i).length} ${n(i).length===1?"Modell":"Modelle"} bereit · ${n(d)?`„${n(d).name}" geladen`:"keins geladen"} · keine Warnungen.`:"Der llama-swap-Dienst antwortet gerade nicht.":""),f=q(()=>()=>{var D;const p=(D=n(r))==null?void 0:D.gpu;return p&&p.vram.total+p.gtt.total>0?(p.vram.used+p.gtt.used)/(p.vram.total+p.gtt.total)*100:0}),_=p=>p==null?"":p<55?"kühl & gesund":p<72?"normal":"läuft heiß";let T=R(Bt([]));or(async()=>{try{g(T,((await fe("/api/news")).items||[]).slice(0,4),!0)}catch{}});async function h(){await bn({title:"Speicher freigeben?",body:"Alle aktuell geladenen Modelle werden aus dem Grafikspeicher geworfen. Sie laden beim nächsten Aufruf automatisch neu — es geht nichts verloren.",confirmLabel:"Speicher freigeben"})&&(await fe("/api/unload",{method:"POST"}),document.dispatchEvent(new Event("mc:refresh")))}function b(p){var D;(D=document.querySelector(`.nav-item[data-view="${p}"]`))==null||D.dispatchEvent(new MouseEvent("click"))}function A(p){return p!=null&&p.includes("Bild")?"img":p!=null&&p.includes("Code")?"code":"text"}function L(p){return p!=null&&p.includes("Bild")?"Bild":p!=null&&p.includes("Code")?"Code":"Text"}var S=ed(),B=ft(S),ye=s(B),ee=s(ye),ce=s(ee),_e=l(ee,2),N=s(_e),G=l(B,2),ie=s(G),ve=l(s(ie),2),me=s(ve),Me=l(ie,2),Ue=l(s(Me),2),E=s(Ue),Q=l(Ue,2),de=s(Q),Ae=l(Me,2);{var Y=p=>{const D=q(()=>{var wt;return n(r).gpu_temp??((wt=n(r).cpu)==null?void 0:wt.temp)??null}),se=q(()=>n(r).ram.total-n(r).ram.used);var j=Uo(),xe=ft(j),ge=l(s(xe),2),it=s(ge),Je=l(ge,2),dt=s(Je),Ve=l(xe,2),yt=l(s(Ve),2),Tt=s(yt),Rt=l(yt,2),Gt=s(Rt);O((wt,Ut,Ee,Be)=>{m(it,wt),lt(Je,1,`t-s ${n(D)!=null&&n(D)<72?"ok":""}`),m(dt,Ut),m(Tt,Ee),m(Gt,`von ${Be??""} GB`)},[()=>n(D)!=null?`${Math.round(n(D))}°`:"–",()=>_(n(D)),()=>Math.round(n(se)/1073741824),()=>Math.round(n(r).ram.total/1073741824)]),x(p,j)},be=p=>{var D=Ho();x(p,D)};V(Ae,p=>{n(r)?p(Y):p(be,-1)})}var Z=l(G,2),ze=s(Z),Ce=l(s(ze),4);{var He=p=>{const D=q(()=>n(f)());var se=Lr(),j=ft(se);Ge(j,17,()=>{var xe;return[["Prozessor (CPU)",((xe=n(r).cpu)==null?void 0:xe.percent)??0],["Arbeitsspeicher (RAM)",n(r).ram.percent],["Grafikspeicher (VRAM)",n(D)]]},Ke,(xe,ge)=>{var it=q(()=>Ya(n(ge),2));let Je=()=>n(it)[0],dt=()=>n(it)[1];const Ve=q(()=>Math.max(0,Math.min(100,dt()||0)));var yt=Vo(),Tt=s(yt),Rt=s(Tt),Gt=s(Rt),wt=l(Rt),Ut=s(wt),Ee=l(Tt,2),Be=s(Ee);O(($t,sn)=>{m(Gt,Je()),m(Ut,`${$t??""} %`),lt(Ee,1,`bar ${n(Ve)>=90?"bad":n(Ve)>=75?"warn":""}`),Bn(Be,`width:${sn??""}%`)},[()=>Math.round(n(Ve)),()=>Math.max(2,n(Ve))]),x(xe,yt)}),x(p,se)},Ie=p=>{var D=Wo();x(p,D)};V(Ce,p=>{n(r)?p(He):p(Ie,-1)})}var Re=l(ze,2),_t=l(s(Re),4),mt=s(_t);Ye(mt,()=>ea("search"),!0);var Kt=l(mt,4);Ye(Kt,()=>ea("chevron"),!0);var St=l(_t,2),Et=s(St);Ye(Et,()=>ea("refresh"),!0);var P=l(Et,4);Ye(P,()=>ea("chevron"),!0);var F=l(St,2),J=s(F);Ye(J,()=>ea("file"),!0);var re=l(J,4);Ye(re,()=>ea("chevron"),!0);var w=l(Z,2),C=s(w),I=s(C),te=l(s(I),2),$=s(te),H=l(I,2);{var ne=p=>{var D=Ui();Ge(D,21,()=>n(i),Ke,(se,j)=>{const xe=q(()=>n(j).state==="downloading"),ge=q(()=>["running","ready","loading","starting"].includes(n(j).state)),it=q(()=>n(j).state==="loading"||n(j).state==="starting"||n(xe)?"load":n(ge)?"on":""),Je=q(()=>n(xe)?`↓ Download${n(j).download_progress!=null?` ${Math.round(n(j).download_progress)}%`:""}`:n(ge)?n(j).state==="loading"?"lädt…":"geladen":"bereit");var dt=Qo(),Ve=s(dt),yt=l(Ve,2),Tt=s(yt),Rt=s(Tt),Gt=s(Rt),wt=l(Rt,2);{var Ut=ln=>{var xt=jo(),kn=s(xt);O((Pe,At)=>{lt(xt,1,`tag ${Pe??""}`),m(kn,At)},[()=>A(n(j).meta.caps),()=>L(n(j).meta.caps)]),x(ln,xt)};V(wt,ln=>{var xt,kn;(kn=(xt=n(j).meta)==null?void 0:xt.caps)!=null&&kn.length&&ln(Ut)})}var Ee=l(Tt,2);{var Be=ln=>{var xt=Jo(),kn=s(xt);O(()=>m(kn,n(j).meta.filename)),x(ln,xt)};V(Ee,ln=>{var xt;(xt=n(j).meta)!=null&&xt.filename&&ln(Be)})}var $t=l(yt,2),sn=s($t);O(()=>{lt(Ve,1,`li-dot ${n(it)??""}`),m(Gt,n(j).name),m(sn,n(Je))}),x(se,dt)}),x(p,D)},he=p=>{var D=Yo();x(p,D)};V(H,p=>{n(i).length?p(ne):p(he,-1)})}var Ne=l(C,2),Se=s(Ne),je=l(s(Se),2),rt=l(Se,2);{var bt=p=>{var D=Ui();Ge(D,21,()=>n(T),Ke,(se,j)=>{var xe=Zo(),ge=s(xe),it=s(ge),Je=s(it),dt=l(it,2),Ve=s(dt);O(()=>{zr(xe,"href",n(j).link),m(Je,n(j).title),m(Ve,n(j).source)}),x(se,xe)}),x(p,D)},Ze=p=>{var D=Xo();x(p,D)};V(rt,p=>{n(T).length?p(bt):p(Ze,-1)})}O(()=>{m(ce,n(c)),m(N,n(u)),lt(ve,1,`t-v ${n(o)?"ok":"bad"}`),m(me,n(o)?"Online":"Offline"),m(E,n(d)?n(d).name:"Keins"),m(de,n(d)?"im Grafikspeicher":"nichts geladen"),m($,n(i).length?n(i).length+" konfiguriert":"")}),z("click",_t,()=>b("cookbook")),z("click",St,h),z("click",F,()=>b("server")),z("click",je,()=>b("news")),z("keydown",je,p=>p.key==="Enter"&&b("news")),x(e,S),Zn()}_a(["click","keydown"]);var nd=M(""),ad=M('
'),rd=M('
Noch keine Modelle konfiguriert
Hol dir unter „Cookbook" ein passendes Modell.
'),id=M('
kein Modell hinterlegt
leere Rolleleer '),sd=M(' '),ld=M('
'),od=M(' '),dd=M('
API-Name:
'),cd=M('
ModellKannDetailsStatusPortAktionen
'),ud=M('
Empfohlen für deine Hardware

'),vd=M(''),fd=M(''),pd=M(''),hd=M('

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 gd(e,t){Yn(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=q(()=>{var w;return((w=dr.value)==null?void 0:w.models)||[]});function d(){document.dispatchEvent(new Event("mc:refresh"))}let c=R(""),u=R(""),f=R(""),_=R(!1);const T=q(()=>n(o).filter(w=>!w.incomplete));async function h(){var C;const w=n(c)||((C=n(T)[0])==null?void 0:C.name);if(!(!w||!n(u).trim())){g(_,!0),g(f,"(wecke Modell, kann beim Laden kurz dauern…)");try{const I=await fe("/api/chat",{method:"POST",body:JSON.stringify({model:w,message:n(u)})});g(f,I.reply,!0)}catch(I){g(f,"Fehler: "+I.message)}g(_,!1),d()}}const b=300;let A=R(!1),L=R(null),S=R(8192),B=R(!1);function ye(w){var C;g(L,n(o).find(I=>I.name===w),!0),n(L)&&(g(S,((C=n(L).meta)==null?void 0:C.ctx)||8192,!0),g(B,(n(L).ttl??b)>=99999),g(A,!0))}async function ee(){const w=n(B)?99999:b;try{await fe("/api/update_model",{method:"POST",body:JSON.stringify({alias:n(L).name,ctx:n(S),ttl:w})}),X("Gespeichert — aktiv beim nächsten Modell-Start."),g(A,!1),d()}catch(C){X(C.message,!0)}}let ce=R(!1),_e=R(""),N=R(""),G=R("");function ie(w){const C=n(o).find(I=>I.name===w);g(_e,w,!0),g(G,(C==null?void 0:C.role)||"",!0),g(N,""),g(ce,!0)}async function ve(w){try{await fe("/api/set_role",{method:"POST",body:JSON.stringify({alias:n(_e),role:w})}),X(w?`Rolle gesetzt: ${w}`:"Rolle entfernt."),g(ce,!1),d()}catch(C){X(C.message,!0)}}async function me(w){if(await bn({title:`„${w}" entladen?`,body:"Das Modell wird aus dem Grafikspeicher geworfen und lädt beim nächsten Aufruf automatisch neu.",confirmLabel:"Entladen"}))try{await fe("/api/unload?model="+encodeURIComponent(w),{method:"POST"}),X("Entladen: "+w),setTimeout(d,600)}catch(C){X(C.message,!0)}}async function Me(w){if(await bn({title:`„${w}" 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 C=await fe("/api/delete_model",{method:"POST",body:JSON.stringify({alias:w})});X(C.note||"Gelöscht: "+w),setTimeout(d,600)}catch(C){X(C.message,!0)}}function Ue(w){return w!=null&&w.length?w.map(C=>C==="Code"?'Code':C==="Bild"?'Bild':'Text').join(" "):"–"}function E(w){if(!w)return"–";const C=w.quant||"?",I=w.ctx?Math.round(w.ctx/1024)+"K":"?",te=w.size_bytes?(w.size_bytes/1024**3).toFixed(1)+" GB":"?";return`${C} · ${I} · ${te}`}function Q(w){var C;(C=navigator.clipboard)==null||C.writeText(w),X("Kopiert: "+w)}var de=hd(),Ae=l(ft(de),2),Y=l(s(Ae),6);Ge(Y,21,()=>n(T),Ke,(w,C)=>{var I=nd(),te=s(I),$={};O(()=>{m(te,n(C).name),$!==($=n(C).name)&&(I.value=(I.__value=n(C).name)??"")}),x(w,I)});var be=l(Y,4),Z=l(be,2),ze=s(Z),Ce=l(Z,2);{var He=w=>{var C=ad(),I=s(C);O(()=>m(I,n(f))),x(w,C)};V(Ce,w=>{n(f)&&w(He)})}var Ie=l(Ae,2),Re=s(Ie),_t=l(s(Re)),mt=s(_t),Kt=l(Re,4);{var St=w=>{var C=rd();x(w,C)},Et=w=>{var C=cd(),I=l(s(C));Ge(I,21,()=>n(o),Ke,(te,$)=>{var H=Lr(),ne=ft(H);{var he=Se=>{var je=id(),rt=s(je),bt=s(rt),Ze=l(rt,5),p=s(Ze),D=l(p,2);O(()=>m(bt,n($).name)),z("click",p,()=>{var se;X("Lade im Cookbook ein Modell und setze den Alias auf: "+n($).name),(se=document.querySelector(".nav-item[data-view='cookbook']"))==null||se.dispatchEvent(new MouseEvent("click"))}),z("click",D,()=>Me(n($).name)),x(Se,je)},Ne=Se=>{var je=dd(),rt=s(je),bt=s(rt),Ze=s(bt),p=l(Ze);{var D=Ee=>{var Be=sd(),$t=s(Be);O(()=>m($t,n($).role)),x(Ee,Be)};V(p,Ee=>{n($).role&&Ee(D)})}var se=l(bt,2);{var j=Ee=>{var Be=ld(),$t=s(Be);O(()=>m($t,n($).meta.filename)),x(Ee,Be)};V(se,Ee=>{var Be;(Be=n($).meta)!=null&&Be.filename&&Ee(j)})}var xe=l(se,2),ge=l(s(xe),2);Ge(ge,17,()=>{var Ee;return(Ee=n($).api_ids)!=null&&Ee.length?n($).api_ids:[n($).name]},Ke,(Ee,Be)=>{var $t=od(),sn=s($t);O(()=>m(sn,n(Be))),z("click",$t,()=>Q(n(Be))),x(Ee,$t)});var it=l(rt);Ye(it,()=>{var Ee;return Ue((Ee=n($).meta)==null?void 0:Ee.caps)},!0);var Je=l(it);Ye(Je,()=>E(n($).meta),!0);var dt=l(Je);Ye(dt,()=>Fo(n($).state,n($).download_progress),!0);var Ve=l(dt),yt=s(Ve),Tt=l(Ve),Rt=s(Tt),Gt=l(Rt,2),wt=l(Gt,2),Ut=l(wt,2);O(()=>{m(Ze,`${n($).name??""} `),m(yt,n($).port??"auto")}),z("click",Rt,()=>ie(n($).name)),z("click",Gt,()=>ye(n($).name)),z("click",wt,()=>me(n($).name)),z("click",Ut,()=>Me(n($).name)),x(Se,je)};V(ne,Se=>{n($).incomplete?Se(he):Se(Ne,-1)})}x(te,H)}),x(w,C)};V(Kt,w=>{n(o).length?w(Et,-1):w(St)})}var P=l(Ie,2);{var F=w=>{var C=vd(),I=s(C),te=s(I),$=l(te,4),H=s($),ne=l($,2),he=l(s(ne));Ye(he,()=>li(a));var Ne=l(ne,2),Se=l(Ne,2);{var je=j=>{var xe=ud(),ge=s(xe),it=l(s(ge),2),Je=s(it),dt=l(Je,2),Ve=l(ge,2);O((yt,Tt)=>{m(Je,`Optimal ~${yt??""}k → ~${n(L).meta.peak_ram_optimal_gb??""} GB Spitzenbedarf.`),m(dt,` Aktuell ~${Tt??""}k → ~${n(L).meta.peak_ram_gb??""} GB.`)},[()=>Math.round(n(L).meta.optimal_ctx/1024),()=>Math.round((n(L).meta.ctx||0)/1024)]),z("click",Ve,()=>g(S,n(L).meta.optimal_ctx,!0)),x(j,xe)};V(Se,j=>{var xe;(xe=n(L).meta)!=null&&xe.optimal_ctx&&j(je)})}var rt=l(Se,4),bt=l(s(rt),2),Ze=s(bt),p=l(Ze,2),D=s(p),se=l(rt,2);O(()=>{m(H,n(L).name),Bn(p,`color:${n(B)?"var(--accent)":"var(--mut)"}`),m(D,n(B)?"An (TTL = ∞)":"Aus (TTL = 5 min)")}),z("click",C,j=>{j.target.classList.contains("modal-overlay")&&g(A,!1)}),z("click",te,()=>g(A,!1)),Sn(Ne,()=>n(S),j=>g(S,j)),Do(Ze,()=>n(B),j=>g(B,j)),z("click",se,ee),x(w,C)};V(P,w=>{n(A)&&n(L)&&w(F)})}var J=l(P,2);{var re=w=>{var C=pd(),I=s(C),te=s(I),$=l(te,2),H=l(s($));Ye(H,()=>li(r));var ne=l($,2),he=s(ne),Ne=l(ne,4);Ge(Ne,21,()=>i,Ke,(Ze,p)=>{var D=fd(),se=s(D);O(()=>{lt(D,1,n(G)===n(p).id?"primary":"ghost"),zr(D,"title",n(p).desc),m(se,n(p).label)}),z("click",D,()=>ve(n(p).id)),x(Ze,D)});var Se=l(Ne,4),je=l(Se,2),rt=s(je),bt=l(rt,2);O(()=>m(he,n(_e))),z("click",C,Ze=>{Ze.target.classList.contains("modal-overlay")&&g(ce,!1)}),z("click",te,()=>g(ce,!1)),Sn(Se,()=>n(N),Ze=>g(N,Ze)),z("click",rt,()=>ve("")),z("click",bt,()=>ve(n(N).trim().toLowerCase())),x(w,C)};V(J,w=>{n(ce)&&w(re)})}O(()=>{Z.disabled=n(_),m(ze,n(_)?"…":"Senden"),m(mt,n(o).length?n(o).length+" konfiguriert":"")}),ja(Y,()=>n(c),w=>g(c,w)),Sn(be,()=>n(u),w=>g(u,w)),z("click",Z,h),x(e,de),Zn()}_a(["click"]);var _d=M('
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),md=M(''),bd=M('
Gerade nichts los.
Alles ruhig — keine laufenden Aufgaben.
'),yd=M(' '),wd=M(''),xd=M(''),kd=M('
'),Md=M('
'),Sd=M('
'),Ed=M('

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 Td(e,t){Yn(t,!0);const a=q(()=>ra.value),r=q(()=>ra.tracked),i=q(()=>xi.value);let o=Bt({cpu:[],ram:[],gpu:[]});mi(()=>{var de;if(!n(i))return;const E=n(i).gpu,Q=E&&E.vram.total+E.gtt.total>0?(E.vram.used+E.gtt.used)/(E.vram.total+E.gtt.total)*100:0;o.cpu=[...o.cpu,((de=n(i).cpu)==null?void 0:de.percent)??0].slice(-60),o.ram=[...o.ram,n(i).ram.percent].slice(-60),o.gpu=[...o.gpu,Q].slice(-60)});const d=q(()=>()=>{var Q;const E=(Q=n(i))==null?void 0:Q.gpu;return E&&E.vram.total+E.gtt.total>0?(E.vram.used+E.gtt.used)/(E.vram.total+E.gtt.total)*100:0}),c=q(()=>n(a).filter(E=>E.state!=="running"&&E.state!=="queued").length),u=q(()=>n(a).filter(E=>E.state==="failed").length);function f(E){if(E.state!=="running")return null;if(typeof E.progress=="number")return Math.min(100,E.progress);const de=((E.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return de?Math.min(100,parseFloat(de[1])):null}function _(E){return E==null||E<0?"":E>=90?`noch ~${Math.round(E/60)} min`:`noch ~${Math.max(1,Math.round(E))} s`}function T(E){return E==="done"?'fertig':E==="failed"?'fehler':E==="canceled"?'abgebrochen':'läuft…'}function h(E){return E==="done"?"on":E==="failed"||E==="canceled"?"":"load"}async function b(E){try{await fe(`/api/jobs/${E}/cancel`,{method:"POST"}),X("Abbruch angefordert…")}catch(Q){X(Q.message,!0)}}async function A(E){try{await fe(`/api/jobs/${E}`,{method:"DELETE"})}catch(Q){X(Q.message,!0)}}async function L(){try{const E=await fe("/api/jobs/clear",{method:"POST"});X(`${E.removed} Einträge entfernt.`)}catch(E){X(E.message,!0)}}function S(E,Q){return E.map(de=>`
`).join("")}var B=Ed(),ye=l(ft(B),2);{var ee=E=>{const Q=q(()=>n(d)());var de=_d(),Ae=ft(de),Y=s(Ae),be=l(s(Y),2),Z=s(be),ze=l(be,2),Ce=s(ze),He=l(Y,2),Ie=l(s(He),2),Re=s(Ie),_t=l(Ie,2),mt=s(_t),Kt=l(He,2),St=l(s(Kt),2),Et=s(St),P=l(St,2),F=s(P),J=l(Ae,2),re=l(s(J),4),w=s(re),C=l(s(w)),I=s(C),te=l(w,2),$=l(s(te),2),H=s($),ne=l(te,2),he=l(s(ne)),Ne=s(he),Se=l(ne,2),je=l(s(Se),2),rt=s(je),bt=l(re,2),Ze=s(bt),p=l(s(Ze));Ye(p,()=>S(o.cpu,"--accent"),!0);var D=l(Ze,2),se=l(s(D));Ye(se,()=>S(o.ram,"--purple"),!0);var j=l(D,2),xe=l(s(j));Ye(xe,()=>S(o.gpu,"--on"),!0),O((ge,it,Je,dt,Ve,yt,Tt,Rt,Gt,wt,Ut,Ee,Be)=>{m(Z,ge),m(Ce,it),m(Re,Je),m(mt,`${dt??""} / ${Ve??""}`),m(Et,yt),m(F,Tt),m(I,`${Rt??""} / ${Gt??""}`),m(H,wt),m(Ne,`${Ut??""} % belegt`),m(rt,`${Ee??""} / ${Be??""}`)},[()=>{var ge;return Math.round(((ge=n(i).cpu)==null?void 0:ge.percent)??0)},()=>{var ge;return((ge=n(i).cpu)==null?void 0:ge.temp)!=null?`${Math.round(n(i).cpu.temp)}° CPU-Temp`:"Auslastung"},()=>Math.round(n(i).ram.percent),()=>Xn(n(i).ram.used),()=>Xn(n(i).ram.total),()=>Math.round(n(Q)),()=>n(i).gpu_temp!=null?`${Math.round(n(i).gpu_temp)}° GPU-Temp`:"VRAM + GTT",()=>Xn(n(i).ram.used),()=>Xn(n(i).ram.total),()=>n(i).gpu?`${Xn(n(i).gpu.vram.used+n(i).gpu.gtt.used)} / ${Xn(n(i).gpu.vram.total+n(i).gpu.gtt.total)}`:"–",()=>{var ge;return Math.round(((ge=n(i).disk)==null?void 0:ge.percent)??0)},()=>n(i).gpu_temp!=null?Math.round(n(i).gpu_temp)+"°":"–",()=>{var ge;return((ge=n(i).cpu)==null?void 0:ge.temp)!=null?Math.round(n(i).cpu.temp)+"°":"–"}]),x(E,de)};V(ye,E=>{n(i)&&E(ee)})}var ce=l(ye,2),_e=s(ce),N=l(s(_e),2),G=s(N),ie=l(N,2);{var ve=E=>{var Q=md();z("click",Q,L),x(E,Q)};V(ie,E=>{n(c)&&E(ve)})}var me=l(_e,4);{var Me=E=>{var Q=bd();x(E,Q)},Ue=E=>{var Q=Lr(),de=ft(Q);Ge(de,17,()=>n(a),Ke,(Ae,Y)=>{const be=q(()=>f(n(Y))),Z=q(()=>n(Y).state==="running"?_(n(Y).eta_s):""),ze=q(()=>n(Y).state==="running"&&n(Y).rate_bps?Xn(n(Y).rate_bps)+"/s":""),Ce=q(()=>[n(Z),n(ze)].filter(Boolean).join(" · ")),He=q(()=>n(r).includes(n(Y).id));var Ie=Sd(),Re=s(Ie),_t=s(Re),mt=l(_t,2),Kt=s(mt),St=l(mt,2);{var Et=$=>{var H=yd(),ne=s(H);O(he=>m(ne,`${he??""} %${n(Ce)?` · ${n(Ce)}`:""}`),[()=>Math.round(n(be))]),x($,H)};V(St,$=>{n(be)!=null&&$(Et)})}var P=l(St,2);{var F=$=>{var H=wd();O(()=>Bn(H,`${n(be)==null?"margin-left:auto;":""}margin-right:2px;padding:2px 9px;font-size:12px`)),z("click",H,ne=>{ne.stopPropagation(),b(n(Y).id)}),x($,H)},J=$=>{var H=xd();z("click",H,ne=>{ne.stopPropagation(),A(n(Y).id)}),x($,H)};V(P,$=>{n(Y).state==="running"?$(F):$(J,-1)})}var re=l(P,2);Ye(re,()=>T(n(Y).state));var w=l(Re,2);{var C=$=>{var H=kd(),ne=s(H);O(()=>Bn(ne,`width:${n(be)??""}%`)),x($,H)};V(w,$=>{n(be)!=null&&n(Y).state==="running"&&$(C)})}var I=l(w,2);{var te=$=>{var H=Md(),ne=s(H);O(he=>m(ne,he),[()=>(n(Y).log||[]).join(` `)]),x($,H)};V(I,$=>{n(He)&&$(te)})}O($=>{lt(_t,1,`li-dot ${$??""}`),m(Kt,n(Y).label)},[()=>h(n(Y).state)]),z("click",Re,()=>ra.toggle(n(Y).id)),z("keydown",Re,$=>$.key==="Enter"&&ra.toggle(n(Y).id)),x(Ae,Ie)}),x(E,Q)};V(me,E=>{n(a).length?E(Ue,-1):E(Me)})}O(()=>m(G,n(a).length?n(u)?n(u)+" Fehler":n(a).length+" gesamt":"")),x(e,B),Zn()}_a(["click","keydown"]);var $d=M(' '),Ad=M(''),Cd=M('✓ fertig'),Ld=M('✗ fehlgeschlagen'),zd=M('abgebrochen'),Pd=M('läuft…'),Dd=M('
'),Od=M('

Aktueller Vorgang

'),Rd=M('

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 Bd(e,t){Yn(t,!0);const a=q(()=>dr.value),r=q(()=>ra.value);let i=null,o=R(`Verbinde… `),d=R("llama-swap"),c,u=R(null),f=R("");const _=new Set,T=q(()=>n(u)?n(r).find(p=>p.id===n(u)):null);mi(()=>{if(!n(T))return;const p=n(T),D=p.state==="done",se=p.state==="failed",j=p.state==="canceled";(D||se||j)&&!_.has(p.id)&&(_.add(p.id),X(D?`✓ ${n(f)} abgeschlossen.`:j?`${n(f)} abgebrochen.`:`✗ ${n(f)} fehlgeschlagen.`,se),D&&setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),800))});function h(p,D){g(u,p,!0),g(f,D,!0),ra.track(p)}or(()=>{b()}),Ro(()=>{i==null||i.close()});function b(){i==null||i.close();const p=n(d);g(o,`Verbinde mit ${p}… `);const D=location.protocol==="https:"?"wss:":"ws:";i=new WebSocket(`${D}//${location.host}/api/logs/${p}?token=${encodeURIComponent(Ws())}`),i.onmessage=se=>{g(o,n(o)+se.data),c&&(c.scrollTop=c.scrollHeight)},i.onclose=()=>{g(o,n(o)+` — Verbindung getrennt —`)},i.onerror=()=>i==null?void 0:i.close()}async function A(p,D,se){if(await bn({title:D,body:se,confirmLabel:"Neustarten"}))try{await fe(`/api/service/${p}/restart`,{method:"POST"}),X("Neustart ausgelöst: "+p),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),2e3)}catch(j){X(j.message,!0)}}async function L(){if(await bn({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 p=await fe("/api/self-update",{method:"POST"});X("Update läuft — Dashboard startet gleich neu."),h(p.job_id,"Mission Control Update")}catch(p){X(p.message,!0)}}async function S(){if(await bn({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 p=await fe("/api/update",{method:"POST"});X("LLM-Engine-Update läuft."),h(p.job_id,"LLM-Engine-Update")}catch(p){X(p.message,!0)}}async function B(){if(await bn({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 fe("/api/unload",{method:"POST"}),X("Grafikspeicher geleert."),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),600)}catch(p){X(p.message,!0)}}async function ye(){if(!await bn({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 p=await Ni({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(p)try{const D=await fe("/api/os-update",{method:"POST",body:JSON.stringify({password:p})});X("OS-Update gestartet."),h(D.job_id,"OS-Update")}catch(D){X(D.message,!0)}}async function ee(){if(!await bn({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 p=await Ni({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(p)try{await fe("/api/reboot",{method:"POST",body:JSON.stringify({password:p})}),X("Reboot ausgelöst — bis gleich.")}catch(D){X(D.message,!0)}}async function ce(){g(_e,"prüfe…");try{const p=await fe("/api/integration/test");g(_e,p.ok?`✓ Engine antwortet — ${p.models.length} Modell(e): ${p.models.join(", ")}`:`✗ keine Verbindung: ${p.error}`,!0),g(N,p.ok,!0)}catch(p){g(_e,"✗ "+p.message),g(N,!1)}}let _e=R(""),N=R(!1);const G=q(()=>{var p;return((p=n(a))==null?void 0:p.models)||[]}),ie=q(()=>n(G).find(p=>p.state==="running"||p.state==="loading"));function ve(p){if(!p||p.state!=="running")return null;if(typeof p.progress=="number")return Math.min(100,p.progress);const se=((p.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return se?Math.min(100,parseFloat(se[1])):null}var me=Rd(),Me=l(ft(me),2),Ue=s(Me),E=l(s(Ue),2),Q=s(E),de=l(Ue,4),Ae=s(de),Y=l(s(Ae)),be=s(Y),Z=l(Ae,2),ze=l(s(Z),2),Ce=s(ze),He=l(Z,2),Ie=l(s(He),2),Re=s(Ie),_t=l(de,2),mt=s(_t),Kt=l(mt,2);{var St=p=>{var D=$d(),se=s(D);O(()=>{Bn(D,`color:${n(N)?"#7ee29a":"#ff9b95"}`),m(se,n(_e))}),x(p,D)};V(Kt,p=>{n(_e)&&p(St)})}var Et=l(Me,2),P=l(s(Et),4),F=l(P,2),J=l(F,2),re=l(J,2),w=l(re,2),C=l(Et,2),I=l(s(C),4),te=l(I,2),$=l(C,2);{var H=p=>{const D=q(()=>n(T)),se=q(()=>n(D).state==="done"),j=q(()=>n(D).state==="failed"),xe=q(()=>n(D).state==="canceled"),ge=q(()=>n(se)||n(j)||n(xe)),it=q(()=>ve(n(D)));var Je=Od(),dt=s(Je),Ve=l(s(dt),2);{var yt=Pe=>{var At=Ad();z("click",At,async()=>{await bn({title:n(f)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&fe(`/api/jobs/${n(D).id}/cancel`,{method:"POST"})}),x(Pe,At)};V(Ve,Pe=>{n(ge)||Pe(yt)})}var Tt=l(Ve,2),Rt=s(Tt);{var Gt=Pe=>{var At=Cd();x(Pe,At)},wt=Pe=>{var At=Ld();x(Pe,At)},Ut=Pe=>{var At=zd();x(Pe,At)},Ee=Pe=>{var At=Pd();x(Pe,At)};V(Rt,Pe=>{n(se)?Pe(Gt):n(j)?Pe(wt,1):n(xe)?Pe(Ut,2):Pe(Ee,-1)})}var Be=l(dt,2),$t=s(Be),sn=l(Be,2);{var ln=Pe=>{var At=Dd(),Or=s(At);O(()=>Bn(Or,`width:${n(it)??""}%`)),x(Pe,At)};V(sn,Pe=>{n(it)!=null&&!n(ge)&&Pe(ln)})}var xt=l(sn,2),kn=s(xt);O(Pe=>{m($t,`${n(f)??""}${n(ge)?n(se)?" — erfolgreich.":n(xe)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),m(kn,Pe)},[()=>(n(D).log||[]).join(` `)]),x(p,Je)};V($,p=>{n(T)&&p(H)})}var ne=l($,2),he=s(ne),Ne=l(s(he),2),Se=s(Ne);Se.value=Se.__value="llama-swap";var je=l(Se);je.value=je.__value="mission-control";var rt=l(je);rt.value=rt.__value="system";var bt=l(he,4),Ze=s(bt);Oo(bt,p=>c=p,()=>c),O(p=>{var D,se,j;Bn(E,`margin-left:auto;${(D=n(a))!=null&&D.swap_ok?"background:rgba(63,185,80,.12);border-color:rgba(63,185,80,.25);color:#7ee29a":"background:rgba(248,81,73,.12);border-color:rgba(248,81,73,.3);color:#ff9b95"}`),m(Q,(se=n(a))!=null&&se.swap_ok?"● erreichbar":"● offline"),m(be,(((j=n(a))==null?void 0:j.swap_url)||"—")+"/v1"),m(Ce,n(ie)?n(ie).name+` (${n(ie).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),m(Re,p),m(Ze,n(o))},[()=>n(G).filter(p=>!p.incomplete).length||"keine"]),z("click",mt,ce),z("click",P,()=>A("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),z("click",F,()=>A("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),z("click",J,L),z("click",re,S),z("click",w,B),z("click",I,ye),z("click",te,ee),z("change",Ne,b),ja(Ne,()=>n(d),p=>g(d,p)),x(e,me),Zn()}_a(["click","change"]);var qd=M('
Lade Setups…
'),Id=M(' ×',1),Ur=M('
★ Beste Wahl für dein System
'),Nd=M('
Dein Setup
'),Fd=M(''),Kd=M('
'),Gd=M('
Frage Quellen ab…
'),Ud=M('
'),Hd=M('✓ installiert'),Vd=M(''),Wd=M('

'),jd=M('

'),Jd=M(''),Qd=M('

'),Yd=M('
'),Zd=M('
'),Xd=M('
'),ec=M(" "),tc=M('
'),nc=M('
Größter Spitzenbedarf: . Es läuft immer nur ein Modell gleichzeitig — das größte bestimmt, ob das Setup passt.
'),ac=M(''),rc=M('
Lade Dateien von HuggingFace…
'),Hi=M(""),ic=M('
Empfohlener Kontext für deine Hardware: übernehmen
'),sc=M('
Ressourcen-Check
'),lc=M('
',1),oc=M('
Keine GGUF-Dateien im Repo gefunden.
'),dc=M(''),cc=M('
'),uc=M(''),vc=M('

Cookbook

Modelle finden, installieren und eigene Setups zusammenstellen.

Use-Case-Setups

Fertige Modell-Bundles für deinen Anwendungsfall. Hardware-Ampel zeigt, ob es auf deinen PC passt.

Aktuell die besten Modelle für dein System

Profi-Suche (HuggingFace)

Direkt HuggingFace durchsuchen — oder eine Modell-URL einfügen für den direkten Sprung.
',1);function fc(e,t){Yn(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(y){const k=(y||"").toLowerCase();for(const U of d)if(U.kw.some(K=>k.includes(K)))return U.label;return"Allrounder"}function u(y=""){const k=y.toLowerCase();return/\d+x\d+(\.\d+)?b/.test(k)||new RegExp("(?{mt(),Kt()});async function mt(){g(L,!0);try{const y=await fe("/api/cookbook/recipes");g(b,y.recipes||[],!0),g(A,y.recommended_id||null,!0)}catch(y){X(y.message,!0)}g(L,!1)}async function Kt(y=!1){g(B,!0);try{const k=await fe("/api/cookbook/discover"+(y?"?force=true":""));g(S,k,!0),g(ye,k.stale,!0)}catch(k){X("Empfehlungen nicht ladbar: "+k.message,!0)}g(B,!1)}function St(y){y=y.trim();const k=y.match(/huggingface\.co\/([^\s/]+\/[^\s/?#]+)/i);return k?k[1]:/^[\w.-]+\/[\w.-]+$/.test(y)?y:null}async function Et(){const y=n(ee).trim(),k=St(y);let U=y;if(n(N)&&!k&&(U=U?U+" "+n(N):n(N)),!U&&!k){g(ce,[],!0);return}g(_e,!0),g(ie,[],!0),g(ve,-1);try{if(k)g(ce,[{id:k,author:k.split("/")[0],downloads:0}],!0);else{const K=`https://huggingface.co/api/models?search=${encodeURIComponent(U)}&filter=gguf&sort=${encodeURIComponent(n(G))}&direction=-1&limit=40`,le=await fetch(K);g(ce,await le.json(),!0)}n(ce).forEach((K,le)=>P(le,K.id))}catch(K){X(K.message,!0),g(ce,[],!0)}g(_e,!1)}async function P(y,k){var U;try{const K=await fe("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:k,ctx:8192})});if(!((U=K.files)!=null&&U.length)){n(ie)[y]=null,F();return}const le=K.files.find(Qe=>{var Xe;return(Xe=Qe.quant)==null?void 0:Xe.includes("Q4_K_M")})||K.files[0];n(ie)[y]=le.fit.level,F()}catch{n(ie)[y]=null,F()}}function F(){let y=-1,k=99;n(ie).forEach((U,K)=>{if(U==null)return;const le=i[U]??99;le=0&&k<=1?y:-1,!0)}function J(y){g(me,n(b).find(k=>k.id===y),!0)}async function re(y){const k=document.getElementById("cb-r-install-btn");k&&(k.disabled=!0,k.textContent="Starte…");try{const U=await fe("/api/cookbook/install-recipe",{method:"POST",body:JSON.stringify({recipe_id:y,hf_token:Qa()})});X(`${U.count} Downloads gestartet — siehe Aktivität.`),g(me,null),_t("activity")}catch(U){X(U.message,!0),k&&(k.disabled=!1,k.textContent="Installieren")}}async function w(y,k){var U,K;g(Me,!0),g(Ue,k,!0),g(E,y,!0),g(Ae,""),g(Y,8192),g(Q,null),g(Z,null),g(de,""),g(be,!0);try{if(g(Q,await fe("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:y,ctx:8192})}),!0),(K=(U=n(Q))==null?void 0:U.files)!=null&&K.length){const le=n(Q).files.find(Qe=>{var Xe;return(Xe=Qe.quant)==null?void 0:Xe.includes("Q4_K_M")})||n(Q).files[0];g(de,le.filename,!0),le.optimal_ctx&&n(Y)===8192&&g(Y,le.optimal_ctx,!0),C()}}catch(le){X(le.message,!0)}g(be,!1)}function C(){var y,k,U;!((k=(y=n(Q))==null?void 0:y.files)!=null&&k.length)||!n(de)||(g(Z,n(Q).files.find(K=>K.filename===n(de))||null,!0),(U=n(Z))!=null&&U.optimal_ctx&&n(Y)===8192&&g(Y,n(Z).optimal_ctx,!0))}async function I(){if(!n(E)||!n(de))return X("Bitte eine GGUF-Datei wählen.",!0);g(be,!0);try{const y=await fe("/api/download",{method:"POST",body:JSON.stringify({repo:n(E),file:n(de),hf_token:Qa()})});await fe("/api/register",{method:"POST",body:JSON.stringify({role:n(Ae),model_path:y.expected_path,ctx:n(Y)})}),X("Download gestartet — siehe Aktivität."),g(Me,!1),_t("activity")}catch(y){X("Fehler: "+y.message,!0)}g(be,!1)}async function te(y,k,U,K){K.disabled=!0,K.textContent="Starte…";try{await fe("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:y,role:k,params_b:U,quant:"Q4_K_M",hf_token:Qa()})}),X("Download gestartet — siehe Aktivität."),_t("activity")}catch(le){X(le.message,!0),K.disabled=!1,K.textContent="Installieren"}}function $(){g(Re,null),g(Ce,""),g(He,""),g(Ie,[{repo:"",role:"",quant:"Q4_K_M"}],!0),g(ze,!0)}function H(y){const k=n(b).find(U=>U.id===y);k&&(g(Re,y,!0),g(Ce,k.title,!0),g(He,k.desc||"",!0),g(Ie,k.models.map(U=>({repo:U.repo,role:U.role,quant:U.quant||"Q4_K_M"})),!0),g(ze,!0))}async function ne(){if(!n(Ce).trim())return X("Bitte einen Titel angeben.",!0);const y=n(Ie).filter(k=>k.repo.trim());if(!y.length)return X("Mindestens ein Modell (Repo) angeben.",!0);try{n(Re)?(await fe("/api/cookbook/user-recipe/"+encodeURIComponent(n(Re)),{method:"PUT",body:JSON.stringify({title:n(Ce),desc:n(He),models:y})}),X("Setup aktualisiert.")):(await fe("/api/cookbook/user-recipe",{method:"POST",body:JSON.stringify({title:n(Ce),desc:n(He),models:y})}),X("Setup gespeichert.")),g(ze,!1),mt()}catch(k){X(k.message,!0)}}async function he(y){const k=n(b).find(U=>U.id===y);if(await bn({title:`„${(k==null?void 0:k.title)||y}" löschen?`,body:"Dein eigenes Setup wird aus dem Cookbook entfernt. Bereits installierte Modelle bleiben unangetastet.",confirmLabel:"Löschen",danger:!0}))try{await fe("/api/cookbook/user-recipe/"+encodeURIComponent(y),{method:"DELETE"}),X("Setup gelöscht."),mt()}catch(U){X(U.message,!0)}}function Ne(y){if(!u(y))return"";const k=f(y);return`MoE${k?` · ~${k}B aktiv`:""}`}function Se(y){return y?`${Cn(y)}`:""}var je=vc(),rt=l(ft(je),2),bt=s(rt),Ze=l(s(bt),2),p=l(bt,4);{var D=y=>{var k=qd();x(y,k)},se=y=>{var k=Kd();Ge(k,21,()=>n(b),Ke,(U,K)=>{const le=q(()=>n(K).id===n(A));var Qe=Fd(),Xe=s(Qe);{var Zt=Oe=>{var tt=Id(),Xt=ft(tt),ct=l(Xt,2);z("click",Xt,ut=>{ut.stopPropagation(),H(n(K).id)}),z("keydown",Xt,ut=>{ut.key==="Enter"&&(ut.stopPropagation(),H(n(K).id))}),z("click",ct,ut=>{ut.stopPropagation(),he(n(K).id)}),z("keydown",ct,ut=>{ut.key==="Enter"&&(ut.stopPropagation(),he(n(K).id))}),x(Oe,tt)};V(Xe,Oe=>{n(K).user&&Oe(Zt)})}var Ht=l(Xe,2);{var Vt=Oe=>{var tt=Ur();x(Oe,tt)},Wt=Oe=>{var tt=Nd();x(Oe,tt)};V(Ht,Oe=>{n(le)?Oe(Vt):n(K).user&&Oe(Wt,1)})}var Le=l(Ht,2),ke=s(Le),qe=s(ke),Fe=s(qe),De=l(ke,2),pt=s(De),kt=l(Le,2),Ct=s(kt),Lt=l(kt,2),et=s(Lt);O((Oe,tt)=>{lt(Qe,1,`card-btn${n(le)?" cb-best":""}`),m(Fe,n(K).title),lt(De,1,`fit-badge ${Oe??""}`),m(pt,tt),m(Ct,n(K).desc),m(et,`${n(K).models.length??""} Modell${n(K).models.length>1?"e":""} im Setup`)},[()=>_(n(K).fit_level),()=>T(n(K).fit_level)]),z("click",Qe,()=>J(n(K).id)),x(U,Qe)}),x(y,k)};V(p,y=>{n(L)?y(D):y(se,-1)})}var j=l(rt,2),xe=s(j),ge=l(s(xe),2),it=s(ge),Je=l(ge,2),dt=s(Je),Ve=l(xe,2),yt=s(Ve),Tt=l(Ve,2);{var Rt=y=>{var k=Gd();x(y,k)},Gt=y=>{var k=Lr(),U=ft(k);Ge(U,17,()=>n(S).categories,Ke,(K,le)=>{var Qe=jd(),Xe=s(Qe),Zt=s(Xe),Ht=s(Zt),Vt=l(Xe,2);Ge(Vt,21,()=>n(le).models,Ke,(Wt,Le)=>{const ke=q(()=>n(le).recommended&&n(Le).repo===n(le).recommended);var qe=Wd(),Fe=s(qe);{var De=Mt=>{var It=Ur();x(Mt,It)};V(Fe,Mt=>{n(ke)&&Mt(De)})}var pt=l(Fe,2),kt=s(pt),Ct=s(kt),Lt=s(Ct),et=l(Ct,2),Oe=s(et),tt=l(kt,2),Xt=s(tt),ct=l(pt,2),ut=s(ct);Ye(ut,()=>Se(o[n(Le).role]||c(n(Le).repo)));var Mn=l(ut,2);Ye(Mn,()=>Ne(n(Le).repo));var In=l(ct,2),We=s(In),nt=l(In,2);Ge(nt,17,()=>n(Le).requirements||[],Ke,(Mt,It)=>{var Nn=Ud(),Rr=s(Nn);O(()=>m(Rr,`⚠ ${n(It)??""}`)),x(Mt,Nn)});var st=l(nt,4),vt=s(st);{var en=Mt=>{var It=Hd();O(()=>zr(It,"title",`bereits eingerichtet als ${n(Le).installed??""}`)),x(Mt,It)},qt=Mt=>{var It=Vd();z("click",It,Nn=>te(n(Le).repo,n(Le).role,n(Le).params_b,Nn.currentTarget)),x(Mt,It)};V(vt,Mt=>{n(Le).installed?Mt(en):Mt(qt,-1)})}O((Mt,It,Nn)=>{lt(qe,1,`card${n(ke)?" res-best":""}`),m(Lt,n(Le).name),m(Oe,`${n(Le).author??""} · ${n(Le).params_b??""}B`),lt(tt,1,`fit-badge ${Mt??""}`),m(Xt,n(Le).fit.text),m(We,`${It??""} · ⬇ ${Nn??""}`)},[()=>_(n(Le).fit.level),()=>h(n(Le).fit),()=>(n(Le).downloads||0).toLocaleString()]),x(Wt,qe)}),O(()=>m(Ht,n(le).title)),x(K,Qe)}),x(y,k)};V(Tt,y=>{var k;n(B)&&!n(S)?y(Rt):(k=n(S))!=null&&k.categories&&y(Gt,1)})}var wt=l(j,2),Ut=l(s(wt),4),Ee=s(Ut),Be=l(Ee,2),$t=s(Be);$t.value=$t.__value="downloads";var sn=l($t);sn.value=sn.__value="trending";var ln=l(sn);ln.value=ln.__value="created_at";var xt=l(Be,2),kn=s(xt),Pe=l(Ut,2);Ge(Pe,20,()=>["","coder","vision","reasoning","chat","agent"],Ke,(y,k)=>{var U=Jd(),K=s(U);O(()=>{lt(U,1,n(N)===k?"primary":"ghost"),m(K,k||"Alle")}),z("click",U,()=>{g(N,k,!0),Et()}),x(y,U)});var At=l(Pe,2);{var Or=y=>{var k=Yd();Ge(k,21,()=>n(ce),Ke,(U,K,le)=>{var Qe=Qd(),Xe=s(Qe);{var Zt=ct=>{var ut=Ur();x(ct,ut)};V(Xe,ct=>{le===n(ve)&&ct(Zt)})}var Ht=l(Xe,2),Vt=s(Ht),Wt=s(Vt),Le=s(Wt),ke=l(Wt,2),qe=s(ke),Fe=l(Vt,2),De=s(Fe),pt=l(Ht,2),kt=s(pt);Ye(kt,()=>Se(c(n(K).id)));var Ct=l(kt,2);Ye(Ct,()=>Ne(n(K).id));var Lt=l(pt,4),et=s(Lt),Oe=s(et),tt=l(et,2),Xt=s(tt);O((ct,ut,Mn,In,We)=>{lt(Qe,1,`card${le===n(ve)?" res-best":""}`),m(Le,ct),m(qe,n(K).author||""),lt(Fe,1,`fit-badge ${ut??""}`),m(De,Mn),m(Oe,In),m(Xt,`⬇ ${We??""}`)},[()=>n(K).id.split("/").pop(),()=>n(ie)[le]?_(n(ie)[le]):"warn",()=>n(ie)[le]?T(n(ie)[le]):"prüfe…",()=>n(ie)[le]?h({req_gb:0,tps:0}):"Hardware-Fit…",()=>(n(K).downloads||0).toLocaleString()]),z("click",Qe,()=>w(n(K).id,n(K).id.split("/").pop())),x(U,Qe)}),x(y,k)};V(At,y=>{n(ce).length&&y(Or)})}var ki=l(wt,2);{var Ys=y=>{const k=q(()=>n(me));var U=ac(),K=s(U),le=s(K),Qe=l(le,2),Xe=s(Qe),Zt=l(Qe,2),Ht=s(Zt),Vt=l(Zt,2);Ge(Vt,21,()=>n(k).models,Ke,(Fe,De)=>{var pt=tc(),kt=s(pt),Ct=s(kt),Lt=s(Ct),et=s(Lt),Oe=l(Lt,2),tt=s(Oe),Xt=l(Oe,2);Ye(Xt,()=>Ne(n(De).repo));var ct=l(Ct,2);{var ut=st=>{var vt=Zd(),en=s(vt);O(()=>m(en,n(De).why)),x(st,vt)};V(ct,st=>{n(De).why&&st(ut)})}var Mn=l(ct,2);{var In=st=>{var vt=Xd(),en=s(vt);O((qt,Mt,It)=>m(en,`~${qt??""} GB · ~${Mt??""} Tok/s · optimal ~${It??""}k Kontext`),[()=>(n(De).fit.req_gb??0).toFixed(1),()=>Math.round(n(De).fit.tps??0),()=>Math.round((n(De).optimal_ctx||8192)/1024)]),x(st,vt)};V(Mn,st=>{n(De).fit&&st(In)})}var We=l(kt,2);{var nt=st=>{var vt=ec(),en=s(vt);O(qt=>{lt(vt,1,`fit-badge ${qt??""}`),m(en,n(De).fit.text)},[()=>_(n(De).fit.level)]),x(st,vt)};V(We,st=>{n(De).fit&&st(nt)})}O(()=>{m(et,n(De).name),m(tt,n(De).role)}),x(Fe,pt)});var Wt=l(Vt,2);{var Le=Fe=>{const De=q(()=>Math.max(...n(k).models.map(Lt=>{var et;return((et=Lt.fit)==null?void 0:et.req_gb)??0})));var pt=nc(),kt=l(s(pt)),Ct=s(kt);O(Lt=>m(Ct,`~${Lt??""} GB`),[()=>n(De).toFixed(1)]),x(Fe,pt)};V(Wt,Fe=>{n(k).models.length&&n(k).models[0].fit&&Fe(Le)})}var ke=l(Wt,2),qe=s(ke);O(()=>{m(Xe,n(k).title),m(Ht,n(k).desc),lt(ke,1,`primary${n(k).fit_level==="too_tight"?" warn":""}`),m(qe,n(k).fit_level==="too_tight"?"Trotzdem installieren (zu groß)":"Komplettes Setup installieren")}),z("click",U,Fe=>{Fe.target.classList.contains("modal-overlay")&&g(me,null)}),z("click",le,()=>g(me,null)),z("click",ke,()=>re(n(k).id)),x(y,U)};V(ki,y=>{n(me)&&y(Ys)})}var Mi=l(ki,2);{var Zs=y=>{var k=dc(),U=s(k),K=s(U),le=l(K,2),Qe=s(le),Xe=l(le,2),Zt=s(Xe),Ht=l(Xe,2);{var Vt=ke=>{var qe=rc();x(ke,qe)},Wt=ke=>{var qe=lc(),Fe=l(ft(qe),2);Ge(Fe,21,()=>n(Q).files,Ke,(We,nt)=>{const st=q(()=>n(nt).fit.level==="perfect"?"●":n(nt).fit.level==="marginal"?"◐":"○");var vt=Hi(),en=s(vt),qt={};O(()=>{m(en,`${n(st)??""} ${n(nt).filename??""}`),qt!==(qt=n(nt).filename)&&(vt.value=(vt.__value=n(nt).filename)??"")}),x(We,vt)});var De=l(Fe,2),pt=s(De),kt=l(s(pt),2),Ct=l(pt,2),Lt=s(Ct),et=l(s(Lt));Ye(et,()=>li(a));var Oe=l(Lt,2),tt=l(De,2);{var Xt=We=>{var nt=ic(),st=l(s(nt)),vt=s(st),en=l(st,2);O(qt=>m(vt,`~${qt??""}k`),[()=>Math.round(n(Z).optimal_ctx/1024)]),z("click",en,qt=>{qt.preventDefault(),g(Y,n(Z).optimal_ctx,!0)}),x(We,nt)};V(tt,We=>{var nt;(nt=n(Z))!=null&&nt.optimal_ctx&&We(Xt)})}var ct=l(tt,2);{var ut=We=>{var nt=sc(),st=s(nt),vt=l(s(st),2),en=s(vt),qt=l(st,2),Mt=s(qt);O((It,Nn,Rr)=>{m(en,`~${It??""} GB · ~${Nn??""} Tok/s · ${(n(Z).quant||"GGUF")??""}`),lt(qt,1,`fit-badge ${Rr??""}`),m(Mt,n(Z).fit.text)},[()=>(n(Z).fit.req_gb??0).toFixed(1),()=>Math.round(n(Z).fit.tps??0),()=>_(n(Z).fit.level)]),x(We,nt)};V(ct,We=>{n(Z)&&We(ut)})}var Mn=l(ct,2),In=s(Mn);O(()=>{var We,nt;lt(Mn,1,`primary${((We=n(Z))==null?void 0:We.fit.level)==="too_tight"?" warn":""}`),Mn.disabled=n(be),m(In,n(be)?"Starte…":((nt=n(Z))==null?void 0:nt.fit.level)==="too_tight"?"Trotzdem holen (zu groß)":"Herunterladen & Einpflegen")}),z("change",Fe,C),ja(Fe,()=>n(de),We=>g(de,We)),Sn(kt,()=>n(Ae),We=>g(Ae,We)),Sn(Oe,()=>n(Y),We=>g(Y,We)),z("click",Mn,I),x(ke,qe)},Le=ke=>{var qe=oc();x(ke,qe)};V(Ht,ke=>{var qe,Fe;n(be)&&!n(Q)?ke(Vt):(Fe=(qe=n(Q))==null?void 0:qe.files)!=null&&Fe.length?ke(Wt,1):n(be)||ke(Le,2)})}O(()=>{m(Qe,n(Ue)),m(Zt,n(E))}),z("click",k,ke=>{ke.target.classList.contains("modal-overlay")&&g(Me,!1)}),z("click",K,()=>g(Me,!1)),x(y,k)};V(Mi,y=>{n(Me)&&y(Zs)})}var Xs=l(Mi,2);{var el=y=>{var k=uc(),U=s(k),K=s(U),le=l(K,2),Qe=s(le),Xe=l(le,6),Zt=l(Xe,4),Ht=l(Zt,4);Ge(Ht,17,()=>n(Ie),Ke,(ke,qe,Fe)=>{var De=cc(),pt=s(De),kt=l(pt,2),Ct=l(kt,2);Ge(Ct,20,()=>["Q4_K_M","Q5_K_M","Q6_K","Q8_0","Q3_K_M"],Ke,(et,Oe)=>{var tt=Hi(),Xt=s(tt),ct={};O(()=>{m(Xt,Oe),ct!==(ct=Oe)&&(tt.__value=Oe)}),x(et,tt)});var Lt=l(Ct,2);Sn(pt,()=>n(qe).repo,et=>n(qe).repo=et),Sn(kt,()=>n(qe).role,et=>n(qe).role=et),ja(Ct,()=>n(qe).quant,et=>n(qe).quant=et),z("click",Lt,()=>g(Ie,n(Ie).filter((et,Oe)=>Oe!==Fe),!0)),x(ke,De)});var Vt=l(Ht,2),Wt=l(Vt,4),Le=s(Wt);O(()=>{m(Qe,n(Re)?"Setup bearbeiten":"Eigenes Setup erstellen"),m(Le,n(Re)?"Änderungen speichern":"Setup speichern")}),z("click",k,ke=>{ke.target.classList.contains("modal-overlay")&&g(ze,!1)}),z("click",K,()=>g(ze,!1)),Sn(Xe,()=>n(Ce),ke=>g(Ce,ke)),Sn(Zt,()=>n(He),ke=>g(He,ke)),z("click",Vt,()=>g(Ie,[...n(Ie),{repo:"",role:"",quant:"Q4_K_M"}],!0)),z("click",Wt,ne),x(y,k)};V(Xs,y=>{n(ze)&&y(el)})}O(()=>{m(it,n(S)?"aktuell":""),Je.disabled=n(B),m(dt,n(B)?"Suche…":"Aktualisieren"),m(yt,`Täglich aktualisierte Top-Modelle je Kategorie — Hardware-Fit berechnet für dein System. ${n(ye)?"⚠ Cache veraltet.":""}`),xt.disabled=n(_e),m(kn,n(_e)?"Lade…":"Suchen")}),z("click",Ze,$),z("click",Je,()=>Kt(!0)),z("keydown",Ee,y=>y.key==="Enter"&&Et()),Sn(Ee,()=>n(ee),y=>g(ee,y)),ja(Be,()=>n(G),y=>g(G,y)),z("click",xt,Et),x(e,je),Zn()}_a(["click","keydown","change"]);var pc=M(`
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.
`),hc=M(' '),gc=M('
'),_c=M(' '),mc=M(''),bc=M('

2 · Modelle auswählen

Wähle, welche Modelle im Config-Snippet erscheinen sollen.
'),yc=M(''),wc=M('

Ö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),xc=M('

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),kc=M('

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

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

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

',1),Sc=M('

Bilder einbinden (Vision)

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

Verbinden

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

1 · Verbindung prüfen

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

Wie funktioniert das Auto-Swap?

3 · Tool wählen

Für welches Werkzeug brauchst du die Konfiguration?

4 · Config-Snippet

',1);function Tc(e,t){Yn(t,!0);const a=q(()=>dr.value),r=q(()=>{var P;return(((P=n(a))==null?void 0:P.models)||[]).filter(F=>!F.incomplete)}),i=q(f);let o=R("zed"),d=R(Bt([])),c=R(""),u=R(!1);function f(){return`http://${location.hostname}:8080/v1`}function _(P){return/^\d{1,3}(\.\d{1,3}){3}$/.test(P)}function T(){return location.protocol==="https:"||!_(location.hostname)}const h=q(()=>n(d).length?n(d):n(r).map(P=>P.name)),b=q(()=>n(h)[0]||"coder"),A=q(()=>{var P;return(P=n(r).find(F=>{var J,re;return(re=(J=F.meta)==null?void 0:J.caps)==null?void 0:re.includes("Bild")}))==null?void 0:P.name});function L(P,F){const re=(F.length?n(r).filter(w=>F.includes(w.name)):n(r).length?n(r):[{name:"coder",meta:{}}]).map(w=>{var te,$;const C=(((te=w.meta)==null?void 0:te.caps)||[]).some(H=>/Bild|Vision/i.test(H)),I=(($=w.meta)==null?void 0:$.ctx)||131072;return` { "name": "${w.name}", "display_name": "${w.name}", "max_tokens": ${I}${C?', "capabilities": { "tools": true, "images": true }':""} }`}).join(`, `);return`"language_models": { "openai_compatible": { "bosgame": { "api_url": "${P}", "available_models": [ ${re} ] } } }`}function S(P,F){const re=(F.length?n(r).filter(w=>F.includes(w.name)):n(r).length?n(r):[{name:"coder",meta:{}}]).map(w=>{var I;const C=((I=w.meta)==null?void 0:I.ctx)||131072;return` "${w.name}": { "name": "${w.name}", "contextWindowSize": ${C} }`}).join(`, `);return`"provider": { "llama-swap": { "npm": "@ai-sdk/openai-compatible", "name": "Bosgame (llama-swap)", "options": { "baseURL": "${P}", "apiKey": "local" }, "models": { ${re} } } }`}async function B(){g(c,"Teste…");try{const P=await fe("/api/integration/test");g(u,P.ok,!0),g(c,P.ok?`✓ Verbunden — ${P.models.length} Modell(e): ${P.models.join(", ")}`:`✗ Keine Verbindung: ${P.error}`,!0)}catch(P){g(u,!1),g(c,"✗ "+P.message)}}function ye(P){var J;const F=P.querySelector("code");F&&((J=navigator.clipboard)==null||J.writeText(F.textContent||""))}function ee(P){var F;(F=navigator.clipboard)==null||F.writeText(P.value)}var ce=Ec(),_e=l(ft(ce),2),N=l(s(_e),6),G=s(N),ie=l(G,2),ve=l(N,2);{var me=P=>{var F=pc();x(P,F)},Me=q(()=>T());V(ve,P=>{n(Me)&&P(me)})}var Ue=l(ve,2),E=s(Ue),Q=l(E,2);{var de=P=>{var F=hc(),J=s(F);O(()=>{Bn(F,`color:${n(u)?"#7ee29a":"#ff9b95"}`),m(J,n(c))}),x(P,F)};V(Q,P=>{n(c)&&P(de)})}var Ae=l(_e,2),Y=l(s(Ae),2);Ge(Y,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."]],Ke,(P,F)=>{var J=q(()=>Ya(F,3));let re=()=>n(J)[0],w=()=>n(J)[1],C=()=>n(J)[2];var I=gc(),te=s(I),$=s(te),H=l(te,2),ne=s(H),he=s(ne),Ne=l(ne,2),Se=s(Ne);O(()=>{m($,re()),m(he,w()),m(Se,C())}),x(P,I)});var be=l(Ae,2);{var Z=P=>{var F=bc(),J=s(F),re=l(s(J),2),w=s(re),C=l(J,4);Ge(C,21,()=>n(r),Ke,($,H)=>{const ne=q(()=>n(d).includes(n(H).name));var he=_c(),Ne=s(he);O(()=>{Bn(he,`cursor:pointer;${n(ne)?"background:rgba(45,212,191,.2);border-color:var(--accent);color:var(--accent)":""}`),m(Ne,n(H).name)}),z("click",he,()=>g(d,n(ne)?n(d).filter(Se=>Se!==n(H).name):[...n(d),n(H).name],!0)),z("keydown",he,Se=>Se.key==="Enter"&&g(d,n(ne)?n(d).filter(je=>je!==n(H).name):[...n(d),n(H).name],!0)),x($,he)});var I=l(C,2);{var te=$=>{var H=mc(),ne=s(H);z("click",ne,he=>{he.preventDefault(),g(d,[],!0)}),x($,H)};V(I,$=>{n(d).length&&$(te)})}O(()=>m(w,n(d).length?`${n(d).length} von ${n(r).length} ausgewählt`:"alle werden eingeschlossen")),x(P,F)};V(be,P=>{n(r).length&&P(Z)})}var ze=l(be,2),Ce=l(s(ze),4);Ge(Ce,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"]],Ke,(P,F)=>{var J=q(()=>Ya(F,3));let re=()=>n(J)[0],w=()=>n(J)[1],C=()=>n(J)[2];var I=yc(),te=s(I),$=s(te),H=l(te,2),ne=s(H);O(()=>{lt(I,1,`card-btn${n(o)===re()?" cb-best":""}`),m($,w()),m(ne,C())}),z("click",I,()=>g(o,re(),!0)),x(P,I)});var He=l(ze,2),Ie=l(s(He),2);{var Re=P=>{const F=q(()=>L(n(i),n(h)));var J=wc(),re=l(ft(J),4),w=s(re),C=l(w,2),I=s(C),te=s(I),$=l(re,4),H=l(s($)),ne=s(H);O(()=>{m(te,n(F)),m(ne,`bosgame / ${n(b)??""}`)}),z("click",w,he=>ye(he.currentTarget.parentElement)),x(P,J)},_t=P=>{const F=q(()=>S(n(i),n(h)));var J=xc(),re=l(ft(J),6),w=s(re),C=l(w,2),I=s(C),te=s(I),$=l(re,2),H=l(s($),3),ne=s(H);O(()=>{m(te,n(F)),m(ne,`llama-swap/${n(b)??""}`)}),z("click",w,he=>ye(he.currentTarget.parentElement)),x(P,J)},mt=P=>{var F=kc(),J=l(ft(F),4),re=s(J),w=l(re,2),C=l(J,4),I=s(C),te=l(I,2);O(()=>{ur(re,n(i)),ur(I,n(b))}),z("click",w,$=>ee($.currentTarget.previousElementSibling)),z("click",te,$=>ee($.currentTarget.previousElementSibling)),x(P,F)},Kt=P=>{var F=Mc(),J=l(ft(F),4),re=s(J),w=l(re,2),C=l(J,4),I=s(C),te=l(I,2);O(()=>ur(re,n(i))),z("click",w,$=>ee($.currentTarget.previousElementSibling)),z("click",te,$=>ee($.currentTarget.previousElementSibling)),x(P,F)};V(Ie,P=>{n(o)==="zed"?P(Re):n(o)==="opencode"?P(_t,1):n(o)==="cline"?P(mt,2):n(o)==="openwebui"&&P(Kt,3)})}var St=l(He,2);{var Et=P=>{const F=q(()=>`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 J=Sc(),re=s(J),w=l(s(re),2),C=s(w);Ye(C,()=>ea("check"));var I=l(C),te=l(re,4),$=s(te),H=l($,2),ne=s(H),he=s(ne);O(()=>{m(I,` „${n(A)??""}" bereit`),m(he,n(F))}),z("click",$,Ne=>ye(Ne.currentTarget.parentElement)),x(P,J)};V(St,P=>{n(A)&&P(Et)})}O(()=>ur(G,n(i))),z("click",ie,P=>{const F=P.currentTarget.previousElementSibling;ee(F)}),z("click",E,B),x(e,ce),Zn()}_a(["click","keydown"]);var $c=M('
'),Ac=M('

Für dich: Upgrades

Neuere Modelle, die ein installiertes ersetzen können.
'),Cc=M('
Lade News… (erstes Laden kann kurz dauern)
'),Lc=M('
'),zc=M('
Keine News geladen
Die Quellen sind gerade nicht erreichbar — später nochmal probieren.
'),Pc=M('für dich'),Dc=M('
'),Oc=M('
'),Rc=M('

News

Aktuelles aus der Local-LLM-Welt — aus kuratierten Quellen.
',1);function Bc(e,t){Yn(t,!0);let a=R(Bt([])),r=R(Bt([])),i=R(!0),o=R("");const d=N=>N==="perfect"?"ok":N==="marginal"?"warn":"bad";function c(N){const G=Math.max(0,Date.now()/1e3-N);return G<60?G+"s":G<3600?Math.floor(G/60)+"m":G<86400?Math.floor(G/3600)+"h":Math.floor(G/86400)+"d"}async function u(){g(i,!0),g(o,"");try{g(a,(await fe("/api/news")).items||[],!0)}catch(N){g(o,N.message||"Fehler beim Laden",!0)}finally{g(i,!1)}}async function f(){try{g(r,(await fe("/api/cookbook/upgrades")).upgrades||[],!0)}catch{g(r,[],!0)}}async function _(N,G){var ie;G.disabled=!0,G.textContent="Starte…";try{await fe("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:N.repo,role:N.role,params_b:N.params_b,quant:N.quant,hf_token:Qa()})}),(ie=document.querySelector(".nav-item[data-view='activity']"))==null||ie.dispatchEvent(new MouseEvent("click"))}catch(ve){G.disabled=!1,G.textContent="Installieren",alert("Fehler: "+ve.message)}}function T(){u(),f()}or(()=>{u(),f()});var h=Rc(),b=ft(h),A=l(s(b),2),L=l(b,2);{var S=N=>{var G=Ac(),ie=s(G),ve=l(s(ie),2),me=s(ve),Me=l(ie,4);Ge(Me,21,()=>n(r),Ke,(Ue,E)=>{var Q=$c(),de=s(Q),Ae=s(de),Y=s(Ae),be=s(Y),Z=l(Y,2),ze=s(Z),Ce=l(Ae,2),He=s(Ce),Ie=l(de,2);O(Re=>{m(be,n(E).name),lt(Z,1,`fit-badge ${Re??""}`),m(ze,n(E).fit.text),m(He,`Ersetzt dein „${n(E).old??""}". ${n(E).why??""}`)},[()=>d(n(E).fit.level)]),z("click",Ie,Re=>_(n(E),Re.currentTarget)),x(Ue,Q)}),O(()=>m(me,n(r).length)),x(N,G)};V(L,N=>{n(r).length&&N(S)})}var B=l(L,2);{var ye=N=>{var G=Cc();x(N,G)},ee=N=>{var G=Lc(),ie=s(G);O(()=>m(ie,n(o))),x(N,G)},ce=N=>{var G=zc();x(N,G)},_e=N=>{var G=Oc();Ge(G,21,()=>n(a),Ke,(ie,ve,me)=>{var Me=Dc();lt(Me,1,`news-card${me===0?" featured":""}`);var Ue=s(Me),E=s(Ue),Q=s(E),de=l(E,2);{var Ae=Ce=>{var He=Pc();x(Ce,He)};V(de,Ce=>{n(ve).relevant&&Ce(Ae)})}var Y=l(de,2),be=s(Y),Z=l(Ue,2),ze=s(Z);O(Ce=>{zr(Me,"href",n(ve).link),m(Q,n(ve).source),m(be,Ce),m(ze,n(ve).title)},[()=>n(ve).ts?c(n(ve).ts):""]),x(ie,Me)}),x(N,G)};V(B,N=>{n(i)?N(ye):n(o)?N(ee,1):n(a).length?N(_e,-1):N(ce,2)})}z("click",A,T),x(e,h),Zn()}_a(["click"]);const qc=[["Dein erster Workflow — in 3 Schritten",`
  1. Modell holen: Tab Cookbook → wähle deinen Anwendungsfall (z.B. „Coden") → Komplettes Setup installieren. Der Download läuft im Tab Aktivität.
  2. Verbinden: Tab Verbinden → Basis-URL kopieren → in deinem Tool (z.B. OpenCode) als „OpenAI-kompatibel" einfügen. Verbindung testen bestätigt, dass es läuft.
  3. Arbeiten: Im Tool das Modell (z.B. coder) wählen und loslegen. Das passende Modell wird automatisch geladen — du musst nichts starten.
`],["Wie leere ich den Kontext? Machen die Tools das selbst?",`

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

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

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

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

So gehst du vor:

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

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

Wann lohnt sich was?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

'),Kc=M('

Guide für Einsteiger

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

Tutorials & Workflows

Konzepte kurz erklärt

',1);function Gc(e){var t=Kc(),a=l(ft(t),4);Ge(a,21,()=>qc,Ke,(i,o,d)=>{var c=q(()=>Ya(n(o),2));let u=()=>n(c)[0],f=()=>n(c)[1];var _=Nc();_.open=d===0;var T=s(_),h=s(T),b=l(T,2);Ye(b,f,!0),O(()=>m(h,u())),x(i,_)});var r=l(a,4);Ge(r,21,()=>Ic,Ke,(i,o)=>{var d=q(()=>Ya(n(o),2));let c=()=>n(d)[0],u=()=>n(d)[1];var f=Fc(),_=s(f),T=s(_),h=l(_,2),b=s(h);O(()=>{m(T,c()),m(b,u())}),x(i,f)}),x(e,t)}let Vi={};function Uc(){const e=document.getElementById("top-active-text");e&&(e.classList.add("swap-flash"),setTimeout(()=>e.classList.remove("swap-flash"),900))}function Wi(e){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"),ji("Backend nicht erreichbar – läuft uvicorn?",!1);else{const i=(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 – ")+i);const o=(e.models||[]).find(c=>c.state==="running");r&&(r.innerHTML=o?`Geladen: ${o.name}`:"Kein Modell im VRAM"),e.swap_ok?jc():ji(`LLM-Engine nicht erreichbar unter ${i} – läuft der llama-swap Dienst?`,!0);const d={};for(const c of e.models||[])d[c.name]=c.state;for(const[c,u]of Object.entries(d)){const f=Vi[c];if(f&&f!==u&&(u==="running"||u==="loading")){Uc();break}}Vi=d}Hc(e),dr.set(e)}function Hc(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 Vc(e){ra.set(e||[])}function Wc(e){xi.set(e)}function ji(e,t){const a=document.getElementById("alert");a.className="alert"+(t?" warn":""),a.innerHTML=`${e}`,a.style.display="flex"}function jc(){const e=document.getElementById("alert");e&&(e.style.display="none")}const Jc=e=>{var t;return(t=document.querySelector(`.nav-item[data-view="${e}"]`))==null?void 0:t.click()};function Hr(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=()=>Jc(a),i}async function js(){try{const e=await fe("/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(Hr(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(Hr(e.engine>0?"Engine: Update":"Engine: aktuell",e.engine>0?"warn":"ok","server")),t.appendChild(Hr(e.models>0?`Modelle: ${e.models}`:"Modelle: aktuell",e.models>0?"warn":"ok","news"))}catch{}}async function Dr(){try{Wi(await fe("/api/status"))}catch{Wi(null)}}async function Js(){try{Vc(await fe("/api/jobs"))}catch{}}function Qs(){const e=window.location.protocol==="https:"?"wss:":"ws:",t=new WebSocket(`${e}//${window.location.host}/api/system/stream`);t.onmessage=a=>{try{Wc(JSON.parse(a.data))}catch{}},t.onclose=()=>{setTimeout(Qs,3e3)},t.onerror=()=>t.close()}var es;((es=document.getElementById("logo"))==null?void 0:es.innerHTML)!==void 0&&(document.getElementById("logo").innerHTML=Pr.logo);document.querySelectorAll("[data-ic]").forEach(e=>{e.innerHTML=Pr[e.dataset.ic||""]||""});const Qc=[["overview",td],["models",gd],["activity",Td],["server",Bd],["cookbook",fc],["connect",Tc],["news",Bc],["guides",Gc]];for(const[e,t]of Qc){const a=document.querySelector(`.view[data-view="${e}"]`);a&&yo(t,{target:a})}Ko("overview");const Vr=document.getElementById("token");Vr&&(Vr.value=Ws(),Vr.addEventListener("change",e=>{Bo(e.target.value),Dr()}));const Wr=document.getElementById("hf-token");Wr&&(Wr.value=Qa(),Wr.addEventListener("change",e=>Io(e.target.value)));const Ji=document.getElementById("nav-settings"),jr=document.getElementById("settings-modal"),Qi=document.getElementById("sm-close");Ji&&jr&&Qi&&(Ji.addEventListener("click",()=>jr.style.display="flex"),Qi.addEventListener("click",()=>jr.style.display="none"));function Yc(){const e=document.getElementById("clock");e&&(e.textContent=new Date().toTimeString().slice(0,5))}document.addEventListener("mc:refresh",Dr);Dr();Js();Qs();setInterval(Yc,1e3);setInterval(Dr,3e3);setInterval(Js,1500);js();setInterval(js,6e4);