From f536f454ba3db0a5673af3292be76f2986e1de52 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Mon, 22 Jun 2026 22:25:52 +0200 Subject: [PATCH] fix(connect): OpenCode contextWindowSize nutzt echten Modell-Kontext MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit openCodeBlock() baut jetzt Modell-Objekte statt nur ID-Strings, damit m.meta.ctx ausgelesen werden kann. contextWindowSize wird korrekt auf den konfigurierten Kontext gesetzt (Standard: 131072 = 128k). Vorher: { "name": "coder" } (kein Kontexthinweis → AI-SDK-Default) Nachher: { "name": "coder", "contextWindowSize": 131072 } Identisches Problem wie bei Zed max_tokens (war 32768 hardcoded). Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/panels/ConnectPanel.svelte | 10 ++++++++-- static/dist/main.js | 20 ++++++++++---------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/frontend/src/panels/ConnectPanel.svelte b/frontend/src/panels/ConnectPanel.svelte index 1f67604..4d4885c 100644 --- a/frontend/src/panels/ConnectPanel.svelte +++ b/frontend/src/panels/ConnectPanel.svelte @@ -33,8 +33,14 @@ } function openCodeBlock(url: string, ids: string[]) { - const list = ids.length ? ids : (allModels.length ? allModels.map((m: any) => m.name) : ['coder']) - const modelMap = list.map((id: string) => ` "${id}": { "name": "${id}" }`).join(',\n') + // Modell-Objekte mit Meta (für ctx) statt nur IDs + const ms = ids.length + ? allModels.filter((m: any) => ids.includes(m.name)) + : (allModels.length ? allModels : [{ name: 'coder', meta: {} }]) + const modelMap = ms.map((m: any) => { + const ctx = m.meta?.ctx || 131072 // konfigurierten Kontext übergeben (Standard: 128k) + return ` "${m.name}": { "name": "${m.name}", "contextWindowSize": ${ctx} }` + }).join(',\n') return `"provider": {\n "llama-swap": {\n "npm": "@ai-sdk/openai-compatible",\n "name": "Bosgame (llama-swap)",\n "options": {\n "baseURL": "${url}",\n "apiKey": "local"\n },\n "models": {\n${modelMap}\n }\n }\n}` } diff --git a/static/dist/main.js b/static/dist/main.js index 6a07cea..a886e11 100644 --- a/static/dist/main.js +++ b/static/dist/main.js @@ -1,4 +1,4 @@ -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,C=>{C!==Ar&&f.reject(C)}).finally(wr)}catch(C){f.reject(C),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 C of c.values())C.reject(Na);c.add(f),_.async_deriveds.set(u,f)}const h=(C,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,C)),_.deactivate())};f.promise.then(h,C=>h(null,C||"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 C;(A.f&(yn|wa))!==0?h.schedule(A):we(C=h,$e,ba).call(C,[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 C=this.current.get(b);return C?C[0]!==A[0]||C[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),C=R(A);return C}),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 C=d(()=>Bt(f));g(T,C)}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 w(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),C=A.get(b);--C==0?(B.removeEventListener(b,Oi),A.delete(b),A.size===0&&cr.delete(B)):A.set(b,C)}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 C(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,I=Ts(),K=0;Ko(d)):(_=vn(()=>o(Ri??(Ri=jn()))),_.f|=$n)),ee>ce.size&&hl(),!A)if(b.set(_e,ce),I){for(const[Me,Ue]of c)ce.has(Me)||_e.skip_effect(Ue.e);_e.oncommit(C),_e.ondiscard(S)}else C(_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,C,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 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 C(){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(I,p.ok,!0)}catch(p){g(_e,"✗ "+p.message),g(I,!1)}}let _e=R(""),I=R(!1);const K=q(()=>{var p;return((p=n(a))==null?void 0:p.models)||[]}),ie=q(()=>n(K).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(I)?"#7ee29a":"#ff9b95"}`),m(se,n(_e))}),w(p,D)};V(Kt,p=>{n(_e)&&p(St)})}var Et=l(Me,2),P=l(s(Et),4),N=l(P,2),J=l(N,2),re=l(J,2),x=l(re,2),L=l(Et,2),G=l(s(L),4),te=l(G,2),$=l(L,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"})}),w(Pe,At)};V(Ve,Pe=>{n(ge)||Pe(yt)})}var Tt=l(Ve,2),Rt=s(Tt);{var Gt=Pe=>{var At=Cd();w(Pe,At)},wt=Pe=>{var At=Ld();w(Pe,At)},Ut=Pe=>{var At=zd();w(Pe,At)},Ee=Pe=>{var At=Pd();w(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)??""}%`)),w(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(` -`)]),w(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(K).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",N,()=>A("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),z("click",J,C),z("click",re,S),z("click",x,B),z("click",G,ye),z("click",te,ee),z("change",Ne,b),ja(Ne,()=>n(d),p=>g(d,p)),w(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(F=>k.includes(F)))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(C,!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(C,!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(I)&&!k&&(U=U?U+" "+n(I):n(I)),!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 F=`https://huggingface.co/api/models?search=${encodeURIComponent(U)}&filter=gguf&sort=${encodeURIComponent(n(K))}&direction=-1&limit=40`,le=await fetch(F);g(ce,await le.json(),!0)}n(ce).forEach((F,le)=>P(le,F.id))}catch(F){X(F.message,!0),g(ce,[],!0)}g(_e,!1)}async function P(y,k){var U;try{const F=await fe("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:k,ctx:8192})});if(!((U=F.files)!=null&&U.length)){n(ie)[y]=null,N();return}const le=F.files.find(Qe=>{var Xe;return(Xe=Qe.quant)==null?void 0:Xe.includes("Q4_K_M")})||F.files[0];n(ie)[y]=le.fit.level,N()}catch{n(ie)[y]=null,N()}}function N(){let y=-1,k=99;n(ie).forEach((U,F)=>{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 x(y,k){var U,F;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),(F=(U=n(Q))==null?void 0:U.files)!=null&&F.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),L()}}catch(le){X(le.message,!0)}g(be,!1)}function L(){var y,k,U;!((k=(y=n(Q))==null?void 0:y.files)!=null&&k.length)||!n(de)||(g(Z,n(Q).files.find(F=>F.filename===n(de))||null,!0),(U=n(Z))!=null&&U.optimal_ctx&&n(Y)===8192&&g(Y,n(Z).optimal_ctx,!0))}async function G(){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,F){F.disabled=!0,F.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),F.disabled=!1,F.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();w(y,k)},se=y=>{var k=Kd();Ge(k,21,()=>n(b),Ke,(U,F)=>{const le=q(()=>n(F).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(F).id)}),z("keydown",Xt,ut=>{ut.key==="Enter"&&(ut.stopPropagation(),H(n(F).id))}),z("click",ct,ut=>{ut.stopPropagation(),he(n(F).id)}),z("keydown",ct,ut=>{ut.key==="Enter"&&(ut.stopPropagation(),he(n(F).id))}),w(Oe,tt)};V(Xe,Oe=>{n(F).user&&Oe(Zt)})}var Ht=l(Xe,2);{var Vt=Oe=>{var tt=Ur();w(Oe,tt)},Wt=Oe=>{var tt=Nd();w(Oe,tt)};V(Ht,Oe=>{n(le)?Oe(Vt):n(F).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(F).title),lt(De,1,`fit-badge ${Oe??""}`),m(pt,tt),m(Ct,n(F).desc),m(et,`${n(F).models.length??""} Modell${n(F).models.length>1?"e":""} im Setup`)},[()=>_(n(F).fit_level),()=>T(n(F).fit_level)]),z("click",Qe,()=>J(n(F).id)),w(U,Qe)}),w(y,k)};V(p,y=>{n(C)?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();w(y,k)},Gt=y=>{var k=Lr(),U=ft(k);Ge(U,17,()=>n(S).categories,Ke,(F,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();w(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)??""}`)),w(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??""}`)),w(Mt,It)},qt=Mt=>{var It=Vd();z("click",It,Nn=>te(n(Le).repo,n(Le).role,n(Le).params_b,Nn.currentTarget)),w(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()]),w(Wt,qe)}),O(()=>m(Ht,n(le).title)),w(F,Qe)}),w(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(),F=s(U);O(()=>{lt(U,1,n(I)===k?"primary":"ghost"),m(F,k||"Alle")}),z("click",U,()=>{g(I,k,!0),Et()}),w(y,U)});var At=l(Pe,2);{var Or=y=>{var k=Yd();Ge(k,21,()=>n(ce),Ke,(U,F,le)=>{var Qe=Qd(),Xe=s(Qe);{var Zt=ct=>{var ut=Ur();w(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(F).id)));var Ct=l(kt,2);Ye(Ct,()=>Ne(n(F).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(F).author||""),lt(Fe,1,`fit-badge ${ut??""}`),m(De,Mn),m(Oe,In),m(Xt,`⬇ ${We??""}`)},[()=>n(F).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(F).downloads||0).toLocaleString()]),z("click",Qe,()=>x(n(F).id,n(F).id.split("/").pop())),w(U,Qe)}),w(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(),F=s(U),le=s(F),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)),w(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)]),w(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)]),w(st,vt)};V(We,st=>{n(De).fit&&st(nt)})}O(()=>{m(et,n(De).name),m(tt,n(De).role)}),w(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)]),w(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)),w(y,U)};V(ki,y=>{n(me)&&y(Ys)})}var Mi=l(ki,2);{var Zs=y=>{var k=dc(),U=s(k),F=s(U),le=l(F,2),Qe=s(le),Xe=l(le,2),Zt=s(Xe),Ht=l(Xe,2);{var Vt=ke=>{var qe=rc();w(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)??"")}),w(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)}),w(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)]),w(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,L),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,G),w(ke,qe)},Le=ke=>{var qe=oc();w(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",F,()=>g(Me,!1)),w(y,k)};V(Mi,y=>{n(Me)&&y(Zs)})}var Xs=l(Mi,2);{var el=y=>{var k=uc(),U=s(k),F=s(U),le=l(F,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)}),w(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)),w(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",F,()=>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),w(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(K),y=>g(K,y)),z("click",xt,Et),w(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(N=>!N.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(N=>{var J,re;return(re=(J=N.meta)==null?void 0:J.caps)==null?void 0:re.includes("Bild")}))==null?void 0:P.name});function C(P,N){const re=(N.length?n(r).filter(x=>N.includes(x.name)):n(r).length?n(r):[{name:"coder",meta:{}}]).map(x=>{var te,$;const L=(((te=x.meta)==null?void 0:te.caps)||[]).some(H=>/Bild|Vision/i.test(H)),G=(($=x.meta)==null?void 0:$.ctx)||131072;return` { "name": "${x.name}", "display_name": "${x.name}", "max_tokens": ${G}${L?', "capabilities": { "tools": true, "images": true }':""} }`}).join(`, +— 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": { @@ -27,7 +27,7 @@ ${re} ] } } -}`}function S(P,N){const re=(N.length?N:n(r).length?n(r).map(x=>x.name):["coder"]).map(x=>` "${x}": { "name": "${x}" }`).join(`, +}`}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", @@ -40,12 +40,12 @@ ${re} ${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 N=P.querySelector("code");N&&((J=navigator.clipboard)==null||J.writeText(N.textContent||""))}function ee(P){var N;(N=navigator.clipboard)==null||N.writeText(P.value)}var ce=Ec(),_e=l(ft(ce),2),I=l(s(_e),6),K=s(I),ie=l(K,2),ve=l(I,2);{var me=P=>{var N=pc();w(P,N)},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 N=hc(),J=s(N);O(()=>{Bn(N,`color:${n(u)?"#7ee29a":"#ff9b95"}`),m(J,n(c))}),w(P,N)};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,N)=>{var J=q(()=>Ya(N,3));let re=()=>n(J)[0],x=()=>n(J)[1],L=()=>n(J)[2];var G=gc(),te=s(G),$=s(te),H=l(te,2),ne=s(H),he=s(ne),Ne=l(ne,2),Se=s(Ne);O(()=>{m($,re()),m(he,x()),m(Se,L())}),w(P,G)});var be=l(Ae,2);{var Z=P=>{var N=bc(),J=s(N),re=l(s(J),2),x=s(re),L=l(J,4);Ge(L,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)),w($,he)});var G=l(L,2);{var te=$=>{var H=mc(),ne=s(H);z("click",ne,he=>{he.preventDefault(),g(d,[],!0)}),w($,H)};V(G,$=>{n(d).length&&$(te)})}O(()=>m(x,n(d).length?`${n(d).length} von ${n(r).length} ausgewählt`:"alle werden eingeschlossen")),w(P,N)};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,N)=>{var J=q(()=>Ya(N,3));let re=()=>n(J)[0],x=()=>n(J)[1],L=()=>n(J)[2];var G=yc(),te=s(G),$=s(te),H=l(te,2),ne=s(H);O(()=>{lt(G,1,`card-btn${n(o)===re()?" cb-best":""}`),m($,x()),m(ne,L())}),z("click",G,()=>g(o,re(),!0)),w(P,G)});var He=l(ze,2),Ie=l(s(He),2);{var Re=P=>{const N=q(()=>C(n(i),n(h)));var J=wc(),re=l(ft(J),4),x=s(re),L=l(x,2),G=s(L),te=s(G),$=l(re,4),H=l(s($)),ne=s(H);O(()=>{m(te,n(N)),m(ne,`bosgame / ${n(b)??""}`)}),z("click",x,he=>ye(he.currentTarget.parentElement)),w(P,J)},_t=P=>{const N=q(()=>S(n(i),n(h)));var J=xc(),re=l(ft(J),6),x=s(re),L=l(x,2),G=s(L),te=s(G),$=l(re,2),H=l(s($),3),ne=s(H);O(()=>{m(te,n(N)),m(ne,`llama-swap/${n(b)??""}`)}),z("click",x,he=>ye(he.currentTarget.parentElement)),w(P,J)},mt=P=>{var N=kc(),J=l(ft(N),4),re=s(J),x=l(re,2),L=l(J,4),G=s(L),te=l(G,2);O(()=>{ur(re,n(i)),ur(G,n(b))}),z("click",x,$=>ee($.currentTarget.previousElementSibling)),z("click",te,$=>ee($.currentTarget.previousElementSibling)),w(P,N)},Kt=P=>{var N=Mc(),J=l(ft(N),4),re=s(J),x=l(re,2),L=l(J,4),G=s(L),te=l(G,2);O(()=>ur(re,n(i))),z("click",x,$=>ee($.currentTarget.previousElementSibling)),z("click",te,$=>ee($.currentTarget.previousElementSibling)),w(P,N)};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 N=q(()=>`curl ${n(i)}/chat/completions \\ +}`}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),x=l(s(re),2),L=s(x);Ye(L,()=>ea("check"));var G=l(L),te=l(re,4),$=s(te),H=l($,2),ne=s(H),he=s(ne);O(()=>{m(G,` „${n(A)??""}" bereit`),m(he,n(N))}),z("click",$,Ne=>ye(Ne.currentTarget.parentElement)),w(P,J)};V(St,P=>{n(A)&&P(Et)})}O(()=>ur(K,n(i))),z("click",ie,P=>{const N=P.currentTarget.previousElementSibling;ee(N)}),z("click",E,B),w(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=I=>I==="perfect"?"ok":I==="marginal"?"warn":"bad";function c(I){const K=Math.max(0,Date.now()/1e3-I);return K<60?K+"s":K<3600?Math.floor(K/60)+"m":K<86400?Math.floor(K/3600)+"h":Math.floor(K/86400)+"d"}async function u(){g(i,!0),g(o,"");try{g(a,(await fe("/api/news")).items||[],!0)}catch(I){g(o,I.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 _(I,K){var ie;K.disabled=!0,K.textContent="Starte…";try{await fe("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:I.repo,role:I.role,params_b:I.params_b,quant:I.quant,hf_token:Qa()})}),(ie=document.querySelector(".nav-item[data-view='activity']"))==null||ie.dispatchEvent(new MouseEvent("click"))}catch(ve){K.disabled=!1,K.textContent="Installieren",alert("Fehler: "+ve.message)}}function T(){u(),f()}or(()=>{u(),f()});var h=Rc(),b=ft(h),A=l(s(b),2),C=l(b,2);{var S=I=>{var K=Ac(),ie=s(K),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)),w(Ue,Q)}),O(()=>m(me,n(r).length)),w(I,K)};V(C,I=>{n(r).length&&I(S)})}var B=l(C,2);{var ye=I=>{var K=Cc();w(I,K)},ee=I=>{var K=Lc(),ie=s(K);O(()=>m(ie,n(o))),w(I,K)},ce=I=>{var K=zc();w(I,K)},_e=I=>{var K=Oc();Ge(K,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();w(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):""]),w(ie,Me)}),w(I,K)};V(B,I=>{n(i)?I(ye):n(o)?I(ee,1):n(a).length?I(_e,-1):I(ce,2)})}z("click",A,T),w(e,h),Zn()}_a(["click"]);const qc=[["Dein erster Workflow — in 3 Schritten",` +}'`);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. @@ -109,4 +109,4 @@ ${re}
  3. OpenWebUI: Klassische Chat-Oberfläche für Fragen/Texte.
  4. 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())),w(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())}),w(i,f)}),w(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); + (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);