From 084f92c6611193237a5b29dceb2a0a41af2fc49f Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Wed, 24 Jun 2026 18:30:50 +0200 Subject: [PATCH] =?UTF-8?q?feat(v9):=20Cookbook=203.0=20=E2=80=94=20Segmen?= =?UTF-8?q?ted-Tabs=20(Setups=20|=20Modelle=20finden)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Entschlackt die überladene Seite: statt 3 gestapelter Sektionen zwei Tabs. "Fertige Setups" = (jetzt auto-aktuelle) Bundles; "Modelle finden" bündelt Discover + Profi-Suche (Facetten) unter einem Tab. Nur eine Ansicht zur Zeit. Co-Authored-By: Claude Opus 4.8 --- frontend/src/panels/CookbookPanel.svelte | 17 ++++- static/dist/main.js | 90 ++++++++++++------------ 2 files changed, 61 insertions(+), 46 deletions(-) diff --git a/frontend/src/panels/CookbookPanel.svelte b/frontend/src/panels/CookbookPanel.svelte index c0965ba..c5db400 100644 --- a/frontend/src/panels/CookbookPanel.svelte +++ b/frontend/src/panels/CookbookPanel.svelte @@ -82,6 +82,9 @@ const sys = $derived(systemStore.value) + // ---- Tabs (Cookbook 3.0: entschlackt — eine Ansicht zur Zeit) ---- + let cookTab = $state<'setups' | 'find'>('setups') + // ---- Recipes ---- let recipes = $state([]) let recommended = $state(null) @@ -311,9 +314,18 @@

Cookbook

Modelle finden, installieren und eigene Setups zusammenstellen.
+ +
+ + +
+ +{#if cookTab === 'setups'}
-

1 · Anwendungsfall wählen & installieren

+

Fertige Setups — automatisch aktuell für deine Hardware

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

LLM-Engine
Aktives Modell

System-Gesundheit

Auslastung in Echtzeit.

Schnellstart

Dein Stack

Top-News

Alle →
',1);function bd(e,n){Dn(n,!0);const a=V(()=>Si.value),s=V(()=>Br.value),l=V(()=>{var x;return((x=t(a))==null?void 0:x.models)||[]}),o=V(()=>{var x;return((x=t(a))==null?void 0:x.swap_ok)??!1}),d=["running","ready","loading","starting"],v=V(()=>t(l).find(x=>d.includes(x.state))),c=V(()=>t(l).filter(x=>!x.incomplete)),f=V(()=>t(a)?t(o)?t(s)&&t(s).ram.percent>=90?"Achtung: Speicher wird knapp.":"Alles läuft rund.":"LLM-Engine offline":"Verbinde…"),b=V(()=>t(a)?t(o)?t(s)&&t(s).ram.percent>=90?`Arbeitsspeicher bei ${Math.round(t(s).ram.percent)} % — eventuell Speicher freigeben.`:`${t(c).length} ${t(c).length===1?"Modell":"Modelle"} konfiguriert · ${t(v)?`„${t(v).name}" geladen`:"keines geladen"} · keine Warnungen.`:"Der llama-swap-Dienst antwortet gerade nicht.":""),C=V(()=>()=>{var Z;const x=(Z=t(s))==null?void 0:Z.gpu;return x&&x.vram.total+x.gtt.total>0?(x.vram.used+x.gtt.used)/(x.vram.total+x.gtt.total)*100:0});let _=R(Rt([])),y=R(null);wi(async()=>{try{u(_,((await Se("/api/news")).items||[]).slice(0,4),!0)}catch{}});async function D(){await hn({title:"Speicher freigeben?",body:"Alle aktuell geladenen Modelle werden aus dem Grafikspeicher geworfen. Sie laden beim nächsten Aufruf automatisch neu.",confirmLabel:"Speicher freigeben"})&&(await Se("/api/unload",{method:"POST"}),A())}async function F(x){u(y,x,!0);try{await Se("/api/preload?model="+encodeURIComponent(x),{method:"POST"})}catch(Z){ve("Laden fehlgeschlagen: "+(Z.message||"Engine nicht erreichbar?"),!0)}u(y,null),A()}function A(){document.dispatchEvent(new Event("mc:refresh"))}function N(x){var Z;(Z=document.querySelector(`.nav-item[data-view="${x}"]`))==null||Z.dispatchEvent(new MouseEvent("click"))}function De(x){return x>=90?"red":x>=75?"":"green"}function Ee(x){return x==null?"":x>=75?"red":x>=55?"":"green"}function Ce(x){return x>=90?"red":x>=70?"":"green"}var Ie=md(),re=tt(Ie),ne=r(re),_e=r(ne),Le=r(_e),He=i(Le);{var Ne=x=>{var Z=td();p(x,Z)};B(He,x=>{t(o)&&!t(v)&&x(Ne)})}var ot=i(_e,2),I=r(ot),ye=i(re,2),qe=r(ye),Qe=r(qe),G=i(r(Qe),2);nt(G,()=>qt("server"),!0);var oe=i(Qe,2),Oe=r(oe),Ge=i(oe,2),je=r(Ge),Be=i(qe,2),dt=r(Be),Xe=i(r(dt),2);nt(Xe,()=>qt("cpu"),!0);var pt=i(dt,2),ct=r(pt),mt=i(pt,2),Ct=r(mt);{var Tt=x=>{var Z=ci();$(he=>h(Z,`${he??""} · ${t(v).state??""}`),[()=>{var he;return(he=t(v).meta)!=null&&he.ctx?Math.round(t(v).meta.ctx/1024)+"k ctx":""}]),p(x,Z)},Mt=x=>{var Z=ci("lädt bei erster Anfrage");p(x,Z)};B(Ct,x=>{t(v)?x(Tt):x(Mt,-1)})}var Ft=i(Be,2);{var zt=x=>{const Z=V(()=>{var gn;return t(s).gpu_temp??((gn=t(s).cpu)==null?void 0:gn.temp)??null}),he=V(()=>Ee(t(Z))),j=V(()=>t(s).ram.total-t(s).ram.used),we=V(()=>100-t(s).ram.percent);var Pe=nd(),Fe=tt(Pe),Te=r(Fe),U=i(r(Te));nt(U,()=>qt("thermo"),!0);var Y=i(Te,2),X=r(Y),q=i(Y,2),te=r(q),be=i(Fe,2),fe=r(be),ue=i(r(fe));nt(ue,()=>qt("database"),!0);var ge=i(fe,2),kt=r(ge),$t=i(ge,2),Dt=r($t);$((gn,Yn,ca,$a)=>{wt(Fe,1,`kpi ${t(he)??""}`),h(X,gn),h(te,t(Z)==null?"messe…":t(Z)<55?"kühl":t(Z)<75?"normal":"⚠ heiß"),wt(be,1,`kpi ${t(we)<15?"red":t(we)<30?"":"green"}`),h(kt,Yn),h(Dt,`von ${ca??""} GB · ${$a??""} % frei`)},[()=>t(Z)!=null?`${Math.round(t(Z))}°C`:"–",()=>Math.round(t(j)/1073741824),()=>Math.round(t(s).ram.total/1073741824),()=>Math.round(t(we))]),p(x,Pe)},Et=x=>{var Z=ad();p(x,Z)};B(Ft,x=>{t(s)?x(zt):x(Et,-1)})}var L=i(ye,2),H=r(L),O=i(r(H),4);{var W=x=>{const Z=V(()=>t(C)());var he=Ea(),j=tt(he);Ze(j,17,()=>{var we;return[["Prozessor (CPU)",((we=t(s).cpu)==null?void 0:we.percent)??0,""],["Arbeitsspeicher (RAM)",t(s).ram.percent,De(t(s).ram.percent)],["Grafikspeicher (VRAM)",t(Z),Ce(t(Z))]]},et,(we,Pe)=>{var Fe=V(()=>Bn(t(Pe),3));let Te=()=>t(Fe)[0],U=()=>t(Fe)[1];const Y=V(()=>Math.max(0,Math.min(100,U()||0)));var X=id(),q=r(X),te=r(q),be=r(te),fe=i(te),ue=r(fe),ge=i(q,2),kt=r(ge);$(($t,Dt)=>{h(be,Te()),h(ue,`${$t??""} %`),wt(ge,1,`bar ${t(Y)>=90?"bad":t(Y)>=75?"warn":""}`),St(kt,`width:${Dt??""}%`)},[()=>Math.round(t(Y)),()=>Math.max(2,t(Y))]),p(we,X)}),p(x,he)},M=x=>{var Z=rd();p(x,Z)};B(O,x=>{t(s)?x(W):x(M,-1)})}var ee=i(H,2),xe=i(r(ee),2);{var ze=x=>{var Z=sd(),he=i(tt(Z),2),j=r(he);nt(j,()=>qt("search"),!0);var we=i(j,4);nt(we,()=>qt("chevron"),!0);var Pe=i(he,2),Fe=r(Pe);nt(Fe,()=>qt("swap"),!0);var Te=i(Fe,4);nt(Te,()=>qt("chevron"),!0);var U=i(Pe,2),Y=r(U);nt(Y,()=>qt("file"),!0);var X=i(Y,4);nt(X,()=>qt("chevron"),!0),S("click",he,()=>N("cookbook")),S("click",Pe,()=>N("connect")),S("click",U,()=>N("guides")),p(x,Z)},T=x=>{var Z=ld(),he=i(tt(Z),2),j=r(he);nt(j,()=>qt("search"),!0);var we=i(j,4);nt(we,()=>qt("chevron"),!0);var Pe=i(he,2),Fe=r(Pe);nt(Fe,()=>qt("refresh"),!0);var Te=i(Fe,4);nt(Te,()=>qt("chevron"),!0);var U=i(Pe,2),Y=r(U);nt(Y,()=>qt("file"),!0);var X=i(Y,4);nt(X,()=>qt("chevron"),!0);var q=i(U,2),te=r(q);nt(te,()=>qt("swap"),!0);var be=i(te,4);nt(be,()=>qt("chevron"),!0),S("click",he,()=>N("cookbook")),S("click",Pe,D),S("click",U,()=>N("server")),S("click",q,()=>N("connect")),p(x,Z)};B(xe,x=>{t(c).length?x(T,-1):x(ze)})}var K=i(L,2),se=r(K),ie=r(se),ae=i(r(ie),2),ke=r(ae),ce=i(ie,2);{var E=x=>{var Z=ns();Ze(Z,21,()=>t(c),et,(he,j)=>{const we=V(()=>d.includes(t(j).state)),Pe=V(()=>t(j).state==="downloading"),Fe=V(()=>t(j).state==="loading"||t(j).state==="starting"||t(Pe)?"load":t(we)?"on":""),Te=V(()=>t(Pe)?`↓ ${t(j).download_progress!=null?Math.round(t(j).download_progress)+"%":"..."}`:t(j).state==="loading"||t(j).state==="starting"?"lädt…":t(we)?"geladen ✓":"bereit");var U=pd(),Y=r(U),X=i(Y,2),q=r(X),te=r(q),be=r(te),fe=i(te,2);{var ue=z=>{var P=od();p(z,P)},ge=V(()=>{var z,P;return(P=(z=t(j).meta)==null?void 0:z.caps)==null?void 0:P.includes("Bild")}),kt=z=>{var P=dd();p(z,P)},$t=V(()=>{var z,P;return(P=(z=t(j).meta)==null?void 0:z.caps)==null?void 0:P.includes("Code")}),Dt=z=>{var P=cd();p(z,P)};B(fe,z=>{t(ge)?z(ue):t($t)?z(kt,1):z(Dt,-1)})}var gn=i(fe,2);{var Yn=z=>{var P=vd();p(z,P)};B(gn,z=>{t(j).ttl>=99999&&z(Yn)})}var ca=i(q,2),$a=r(ca),Hi=i(X,2),Xa=r(Hi),Ji=r(Xa),k=i(Xa,2);{var w=z=>{var P=ud(),pe=r(P);$(()=>{St(P,`padding:3px 9px;font-size:12px;opacity:${t(y)===t(j).name?".5":"1"}`),P.disabled=t(y)===t(j).name,h(pe,t(y)===t(j).name?"…":"Laden")}),S("click",P,()=>F(t(j).name)),p(z,P)};B(k,z=>{!t(we)&&!t(Pe)&&t(o)&&z(w)})}$((z,P)=>{var pe;wt(Y,1,`li-dot ${t(Fe)??""}`),St(te,t(we)?"color:var(--accent)":""),h(be,t(j).name),h($a,`${z??""} - ${(pe=t(j).meta)!=null&&pe.quant?" · "+t(j).meta.quant:""} - ${P??""}`),St(Xa,`white-space:nowrap;color:${t(we)?"var(--on)":"var(--mut)"}`),h(Ji,t(Te))},[()=>{var z;return(z=t(j).meta)!=null&&z.ctx?Math.round(t(j).meta.ctx/1024)+"k ctx":""},()=>{var z;return(z=t(j).meta)!=null&&z.size_bytes?" · "+(t(j).meta.size_bytes/1073741824).toFixed(1)+" GB":""}]),p(he,U)}),p(x,Z)},J=x=>{var Z=fd(),he=i(r(Z),4);S("click",he,()=>N("cookbook")),p(x,Z)};B(ce,x=>{t(c).length?x(E):x(J,-1)})}var de=i(se,2),Me=r(de),Q=i(r(Me),2),le=i(Me,2);{var Ae=x=>{var Z=ns();Ze(Z,21,()=>t(_),et,(he,j)=>{var we=hd(),Pe=r(we),Fe=r(Pe),Te=r(Fe),U=i(Fe,2),Y=r(U);$(()=>{za(we,"href",t(j).link),h(Te,t(j).title),h(Y,`${t(j).source??""}${t(j).relevant?" · für dich":""}`)}),p(he,we)}),p(x,Z)},$e=x=>{var Z=gd();p(x,Z)};B(le,x=>{t(_).length?x(Ae):x($e,-1)})}$(x=>{h(Le,`${t(f)??""} `),h(I,t(b)),wt(qe,1,`kpi ${t(o)?"green":"red"}`),h(Oe,t(o)?"Online":"Offline"),h(je,x),wt(Be,1,`kpi ${t(v)?"blue":"muted"}`),h(ct,t(v)?t(v).name:"Keins"),h(ke,t(c).length?t(c).length+" konfiguriert":"")},[()=>{var x,Z;return((Z=(x=t(a))==null?void 0:x.swap_url)==null?void 0:Z.replace(/^https?:\/\//,""))??"—"}]),S("click",Q,()=>N("news")),S("keydown",Q,x=>x.key==="Enter"&&N("news")),p(e,Ie),In()}qn(["click","keydown"]);var _d=g(""),yd=g('
'),xd=g('
Noch keine Modelle konfiguriert
Hol dir unter „Cookbook" ein passendes Modell.
'),kd=g('
kein Modell hinterlegt
leere Rolleleer '),wd=g(' '),Sd=g('
'),Md=g(' '),Ed=g('
API-Name:
'),Ad=g('
ModellKannDetailsStatusPortAktionen
'),Cd=g('
Empfohlen für deine Hardware

'),Td=g(''),zd=g(''),$d=g(''),Pd=g('

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 Dd(e,n){Dn(n,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr (längere Dateien/Chats), braucht aber mehr Speicher und wird etwas langsamer.",s="Die Rolle ist ein zusätzlicher, sprechender Name (z.B. coder). Du kannst in deinen Tools entweder den echten Modellnamen ODER die Rolle angeben — beides führt zum selben Modell.",l=[{id:"coder",label:"Coder",desc:"Programmieren & Code"},{id:"vision",label:"Vision",desc:"Bilder verstehen"},{id:"scout",label:"Scout",desc:"Schneller Allrounder"},{id:"reviewer",label:"Reviewer",desc:"Code/Texte prüfen"},{id:"manager",label:"Manager",desc:"Planen & koordinieren"}],o=V(()=>{var L;return((L=Si.value)==null?void 0:L.models)||[]});function d(){document.dispatchEvent(new Event("mc:refresh"))}let v=R(""),c=R(""),f=R(""),b=R(!1);const C=V(()=>t(o).filter(L=>!L.incomplete));async function _(){var H;const L=t(v)||((H=t(C)[0])==null?void 0:H.name);if(!(!L||!t(c).trim())){u(b,!0),u(f,"(wecke Modell, kann beim Laden kurz dauern…)");try{const O=await Se("/api/chat",{method:"POST",body:JSON.stringify({model:L,message:t(c)})});u(f,O.reply,!0)}catch(O){u(f,"Fehler: "+O.message)}u(b,!1),d()}}const y=300;let D=R(!1),F=R(null),A=R(8192),N=R(!1);function De(L){var H;u(F,t(o).find(O=>O.name===L),!0),t(F)&&(u(A,((H=t(F).meta)==null?void 0:H.ctx)||8192,!0),u(N,(t(F).ttl??y)>=99999),u(D,!0))}async function Ee(){const L=t(N)?99999:y;try{await Se("/api/update_model",{method:"POST",body:JSON.stringify({alias:t(F).name,ctx:t(A),ttl:L})}),ve("Gespeichert — aktiv beim nächsten Modell-Start."),u(D,!1),d()}catch(H){ve(H.message,!0)}}let Ce=R(!1),Ie=R(""),re=R(""),ne=R("");function _e(L){const H=t(o).find(O=>O.name===L);u(Ie,L,!0),u(ne,(H==null?void 0:H.role)||"",!0),u(re,""),u(Ce,!0)}async function Le(L){try{await Se("/api/set_role",{method:"POST",body:JSON.stringify({alias:t(Ie),role:L})}),ve(L?`Rolle gesetzt: ${L}`:"Rolle entfernt."),u(Ce,!1),d()}catch(H){ve(H.message,!0)}}async function He(L){if(await hn({title:`„${L}" entladen?`,body:"Das Modell wird aus dem Grafikspeicher geworfen und lädt beim nächsten Aufruf automatisch neu.",confirmLabel:"Entladen"}))try{await Se("/api/unload?model="+encodeURIComponent(L),{method:"POST"}),ve("Entladen: "+L),setTimeout(d,600)}catch(H){ve(H.message,!0)}}async function Ne(L){if(await hn({title:`„${L}" 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 H=await Se("/api/delete_model",{method:"POST",body:JSON.stringify({alias:L})});ve(H.note||"Gelöscht: "+L),setTimeout(d,600)}catch(H){ve(H.message,!0)}}function ot(L){if(!L)return"–";const H=[];return L.coder&&H.push('Code'),L.vision&&H.push('Bild'),L.reasoning&&H.push('🧠 Reason'),L.moe&&H.push(`🧩 MoE${L.active_b?" ·"+L.active_b+"B":""}`),L.tools==="yes"?H.push('🛠 Tools'):L.tools==="likely"&&H.push('🛠 Tools?'),L.embedding&&H.push('🔢 Embed'),!L.coder&&!L.vision&&!L.embedding&&H.unshift('Text'),H.length?H.join(" "):"–"}function I(L){if(!L)return"–";const H=L.quant||"?",O=L.ctx?Math.round(L.ctx/1024)+"K":"?",W=L.size_bytes?(L.size_bytes/1024**3).toFixed(1)+" GB":"?";return`${H} · ${O} · ${W}`}function ye(L){var H;(H=navigator.clipboard)==null||H.writeText(L),ve("Kopiert: "+L)}var qe=Pd(),Qe=i(tt(qe),2),G=i(r(Qe),6);Ze(G,21,()=>t(C),et,(L,H)=>{var O=_d(),W=r(O),M={};$(()=>{h(W,t(H).name),M!==(M=t(H).name)&&(O.value=(O.__value=t(H).name)??"")}),p(L,O)});var oe=i(G,4),Oe=i(oe,2),Ge=r(Oe),je=i(Oe,2);{var Be=L=>{var H=yd(),O=r(H);$(()=>h(O,t(f))),p(L,H)};B(je,L=>{t(f)&&L(Be)})}var dt=i(Qe,2),Xe=r(dt),pt=i(r(Xe)),ct=r(pt),mt=i(Xe,4);{var Ct=L=>{var H=xd();p(L,H)},Tt=L=>{var H=Ad(),O=i(r(H));Ze(O,21,()=>t(o),et,(W,M)=>{var ee=Ea(),xe=tt(ee);{var ze=K=>{var se=kd(),ie=r(se),ae=r(ie),ke=i(ie,5),ce=r(ke),E=i(ce,2);$(()=>h(ae,t(M).name)),S("click",ce,()=>{var J;ve("Lade im Cookbook ein Modell und setze den Alias auf: "+t(M).name),(J=document.querySelector(".nav-item[data-view='cookbook']"))==null||J.dispatchEvent(new MouseEvent("click"))}),S("click",E,()=>Ne(t(M).name)),p(K,se)},T=K=>{var se=Ed(),ie=r(se),ae=r(ie),ke=r(ae),ce=i(ke);{var E=Te=>{var U=wd(),Y=r(U);$(()=>h(Y,t(M).role)),p(Te,U)};B(ce,Te=>{t(M).role&&Te(E)})}var J=i(ae,2);{var de=Te=>{var U=Sd(),Y=r(U);$(()=>h(Y,t(M).meta.filename)),p(Te,U)};B(J,Te=>{var U;(U=t(M).meta)!=null&&U.filename&&Te(de)})}var Me=i(J,2),Q=i(r(Me),2);Ze(Q,17,()=>{var Te;return(Te=t(M).api_ids)!=null&&Te.length?t(M).api_ids:[t(M).name]},et,(Te,U)=>{var Y=Md(),X=r(Y);$(()=>h(X,t(U))),S("click",Y,()=>ye(t(U))),p(Te,Y)});var le=i(ie);nt(le,()=>{var Te;return ot((Te=t(M).meta)==null?void 0:Te.capabilities)},!0);var Ae=i(le);nt(Ae,()=>I(t(M).meta),!0);var $e=i(Ae);nt($e,()=>Yo(t(M).state,t(M).download_progress),!0);var x=i($e),Z=r(x),he=i(x),j=r(he),we=i(j,2),Pe=i(we,2),Fe=i(Pe,2);$(()=>{h(ke,`${t(M).name??""} `),h(Z,t(M).port??"auto")}),S("click",j,()=>_e(t(M).name)),S("click",we,()=>De(t(M).name)),S("click",Pe,()=>He(t(M).name)),S("click",Fe,()=>Ne(t(M).name)),p(K,se)};B(xe,K=>{t(M).incomplete?K(ze):K(T,-1)})}p(W,ee)}),p(L,H)};B(mt,L=>{t(o).length?L(Tt,-1):L(Ct)})}var Mt=i(dt,2);{var Ft=L=>{var H=Td(),O=r(H),W=r(O),M=i(W,4),ee=r(M),xe=i(M,2),ze=i(r(xe));nt(ze,()=>wr(a));var T=i(xe,2),K=i(T,2);{var se=de=>{var Me=Cd(),Q=r(Me),le=i(r(Q),2),Ae=r(le),$e=i(Ae,2),x=i(Q,2);$((Z,he)=>{h(Ae,`Optimal ~${Z??""}k → ~${t(F).meta.peak_ram_optimal_gb??""} GB Spitzenbedarf.`),h($e,` Aktuell ~${he??""}k → ~${t(F).meta.peak_ram_gb??""} GB.`)},[()=>Math.round(t(F).meta.optimal_ctx/1024),()=>Math.round((t(F).meta.ctx||0)/1024)]),S("click",x,()=>u(A,t(F).meta.optimal_ctx,!0)),p(de,Me)};B(K,de=>{var Me;(Me=t(F).meta)!=null&&Me.optimal_ctx&&de(se)})}var ie=i(K,4),ae=i(r(ie),2),ke=r(ae),ce=i(ke,2),E=r(ce),J=i(ie,2);$(()=>{h(ee,t(F).name),St(ce,`color:${t(N)?"var(--accent)":"var(--mut)"}`),h(E,t(N)?"An (TTL = ∞)":"Aus (TTL = 5 min)")}),S("click",H,de=>{de.target.classList.contains("modal-overlay")&&u(D,!1)}),S("click",W,()=>u(D,!1)),on(T,()=>t(A),de=>u(A,de)),Wo(ke,()=>t(N),de=>u(N,de)),S("click",J,Ee),p(L,H)};B(Mt,L=>{t(D)&&t(F)&&L(Ft)})}var zt=i(Mt,2);{var Et=L=>{var H=$d(),O=r(H),W=r(O),M=i(W,2),ee=i(r(M));nt(ee,()=>wr(s));var xe=i(M,2),ze=r(xe),T=i(xe,4);Ze(T,21,()=>l,et,(ke,ce)=>{var E=zd(),J=r(E);$(()=>{wt(E,1,t(ne)===t(ce).id?"primary":"ghost"),za(E,"title",t(ce).desc),h(J,t(ce).label)}),S("click",E,()=>Le(t(ce).id)),p(ke,E)});var K=i(T,4),se=i(K,2),ie=r(se),ae=i(ie,2);$(()=>h(ze,t(Ie))),S("click",H,ke=>{ke.target.classList.contains("modal-overlay")&&u(Ce,!1)}),S("click",W,()=>u(Ce,!1)),on(K,()=>t(re),ke=>u(re,ke)),S("click",ie,()=>Le("")),S("click",ae,()=>Le(t(re).trim().toLowerCase())),p(L,H)};B(zt,L=>{t(Ce)&&L(Et)})}$(()=>{Oe.disabled=t(b),h(Ge,t(b)?"…":"Senden"),h(ct,t(o).length?t(o).length+" konfiguriert":"")}),Hn(G,()=>t(v),L=>u(v,L)),on(oe,()=>t(c),L=>u(c,L)),S("click",Oe,_),p(e,qe),In()}qn(["click"]);var Id=g('
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),Ld=g(''),Od=g('
Gerade nichts los.
Alles ruhig — keine laufenden Aufgaben.
'),Bd=g(' '),Rd=g(''),Fd=g(''),Kd=g('
'),Nd=g('
'),qd=g('
'),Gd=g('

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 Vd(e,n){Dn(n,!0);const a=V(()=>ga.value),s=V(()=>ga.tracked),l=V(()=>Br.value);let o=Rt({cpu:[],ram:[],gpu:[]});xi(()=>{var qe;if(!t(l))return;const I=t(l).gpu,ye=I&&I.vram.total+I.gtt.total>0?(I.vram.used+I.gtt.used)/(I.vram.total+I.gtt.total)*100:0;o.cpu=[...o.cpu,((qe=t(l).cpu)==null?void 0:qe.percent)??0].slice(-60),o.ram=[...o.ram,t(l).ram.percent].slice(-60),o.gpu=[...o.gpu,ye].slice(-60)});const d=V(()=>()=>{var ye;const I=(ye=t(l))==null?void 0:ye.gpu;return I&&I.vram.total+I.gtt.total>0?(I.vram.used+I.gtt.used)/(I.vram.total+I.gtt.total)*100:0}),v=V(()=>t(a).filter(I=>I.state!=="running"&&I.state!=="queued").length),c=V(()=>t(a).filter(I=>I.state==="failed").length);function f(I){if(I.state!=="running")return null;if(typeof I.progress=="number")return Math.min(100,I.progress);const qe=((I.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return qe?Math.min(100,parseFloat(qe[1])):null}function b(I){return I==null||I<0?"":I>=90?`noch ~${Math.round(I/60)} min`:`noch ~${Math.max(1,Math.round(I))} s`}function C(I){return I==="done"?'fertig':I==="failed"?'fehler':I==="canceled"?'abgebrochen':'läuft…'}function _(I){return I==="done"?"on":I==="failed"||I==="canceled"?"":"load"}async function y(I){try{await Se(`/api/jobs/${I}/cancel`,{method:"POST"}),ve("Abbruch angefordert…")}catch(ye){ve(ye.message,!0)}}async function D(I){try{await Se(`/api/jobs/${I}`,{method:"DELETE"})}catch(ye){ve(ye.message,!0)}}async function F(){try{const I=await Se("/api/jobs/clear",{method:"POST"});ve(`${I.removed} Einträge entfernt.`)}catch(I){ve(I.message,!0)}}function A(I,ye){return I.map(qe=>`
`).join("")}var N=Gd(),De=i(tt(N),2);{var Ee=I=>{const ye=V(()=>t(d)());var qe=Id(),Qe=tt(qe),G=r(Qe),oe=i(r(G),2),Oe=r(oe),Ge=i(oe,2),je=r(Ge),Be=i(G,2),dt=i(r(Be),2),Xe=r(dt),pt=i(dt,2),ct=r(pt),mt=i(Be,2),Ct=i(r(mt),2),Tt=r(Ct),Mt=i(Ct,2),Ft=r(Mt),zt=i(Qe,2),Et=i(r(zt),4),L=r(Et),H=i(r(L)),O=r(H),W=i(L,2),M=i(r(W),2),ee=r(M),xe=i(W,2),ze=i(r(xe)),T=r(ze),K=i(xe,2),se=i(r(K),2),ie=r(se),ae=i(Et,2),ke=r(ae),ce=i(r(ke));nt(ce,()=>A(o.cpu,"--accent"),!0);var E=i(ke,2),J=i(r(E));nt(J,()=>A(o.ram,"--purple"),!0);var de=i(E,2),Me=i(r(de));nt(Me,()=>A(o.gpu,"--on"),!0),$((Q,le,Ae,$e,x,Z,he,j,we,Pe,Fe,Te,U)=>{h(Oe,Q),h(je,le),h(Xe,Ae),h(ct,`${$e??""} / ${x??""}`),h(Tt,Z),h(Ft,he),h(O,`${j??""} / ${we??""}`),h(ee,Pe),h(T,`${Fe??""} % belegt`),h(ie,`${Te??""} / ${U??""}`)},[()=>{var Q;return Math.round(((Q=t(l).cpu)==null?void 0:Q.percent)??0)},()=>{var Q;return((Q=t(l).cpu)==null?void 0:Q.temp)!=null?`${Math.round(t(l).cpu.temp)}° CPU-Temp`:"Auslastung"},()=>Math.round(t(l).ram.percent),()=>ua(t(l).ram.used),()=>ua(t(l).ram.total),()=>Math.round(t(ye)),()=>t(l).gpu_temp!=null?`${Math.round(t(l).gpu_temp)}° GPU-Temp`:"VRAM + GTT",()=>ua(t(l).ram.used),()=>ua(t(l).ram.total),()=>t(l).gpu?`${ua(t(l).gpu.vram.used+t(l).gpu.gtt.used)} / ${ua(t(l).gpu.vram.total+t(l).gpu.gtt.total)}`:"–",()=>{var Q;return Math.round(((Q=t(l).disk)==null?void 0:Q.percent)??0)},()=>t(l).gpu_temp!=null?Math.round(t(l).gpu_temp)+"°":"–",()=>{var Q;return((Q=t(l).cpu)==null?void 0:Q.temp)!=null?Math.round(t(l).cpu.temp)+"°":"–"}]),p(I,qe)};B(De,I=>{t(l)&&I(Ee)})}var Ce=i(De,2),Ie=r(Ce),re=i(r(Ie),2),ne=r(re),_e=i(re,2);{var Le=I=>{var ye=Ld();S("click",ye,F),p(I,ye)};B(_e,I=>{t(v)&&I(Le)})}var He=i(Ie,4);{var Ne=I=>{var ye=Od();p(I,ye)},ot=I=>{var ye=Ea(),qe=tt(ye);Ze(qe,17,()=>t(a),et,(Qe,G)=>{const oe=V(()=>f(t(G))),Oe=V(()=>t(G).state==="running"?b(t(G).eta_s):""),Ge=V(()=>t(G).state==="running"&&t(G).rate_bps?ua(t(G).rate_bps)+"/s":""),je=V(()=>[t(Oe),t(Ge)].filter(Boolean).join(" · ")),Be=V(()=>t(s).includes(t(G).id));var dt=qd(),Xe=r(dt),pt=r(Xe),ct=i(pt,2),mt=r(ct),Ct=i(ct,2);{var Tt=M=>{var ee=Bd(),xe=r(ee);$(ze=>h(xe,`${ze??""} %${t(je)?` · ${t(je)}`:""}`),[()=>Math.round(t(oe))]),p(M,ee)};B(Ct,M=>{t(oe)!=null&&M(Tt)})}var Mt=i(Ct,2);{var Ft=M=>{var ee=Rd();$(()=>St(ee,`${t(oe)==null?"margin-left:auto;":""}margin-right:2px;padding:2px 9px;font-size:12px`)),S("click",ee,xe=>{xe.stopPropagation(),y(t(G).id)}),p(M,ee)},zt=M=>{var ee=Fd();S("click",ee,xe=>{xe.stopPropagation(),D(t(G).id)}),p(M,ee)};B(Mt,M=>{t(G).state==="running"?M(Ft):M(zt,-1)})}var Et=i(Mt,2);nt(Et,()=>C(t(G).state));var L=i(Xe,2);{var H=M=>{var ee=Kd(),xe=r(ee);$(()=>St(xe,`width:${t(oe)??""}%`)),p(M,ee)};B(L,M=>{t(oe)!=null&&t(G).state==="running"&&M(H)})}var O=i(L,2);{var W=M=>{var ee=Nd(),xe=r(ee);$(ze=>h(xe,ze),[()=>(t(G).log||[]).join(` -`)]),p(M,ee)};B(O,M=>{t(Be)&&M(W)})}$(M=>{wt(pt,1,`li-dot ${M??""}`),h(mt,t(G).label)},[()=>_(t(G).state)]),S("click",Xe,()=>ga.toggle(t(G).id)),S("keydown",Xe,M=>M.key==="Enter"&&ga.toggle(t(G).id)),p(Qe,dt)}),p(I,ye)};B(He,I=>{t(a).length?I(ot,-1):I(Ne)})}$(()=>h(ne,t(a).length?t(c)?t(c)+" Fehler":t(a).length+" gesamt":"")),p(e,N),In()}qn(["click","keydown"]);var Wd=g(' '),jd=g(''),Ud=g('✓ fertig'),Hd=g('✗ fehlgeschlagen'),Jd=g('abgebrochen'),Qd=g('läuft…'),Zd=g('
'),Yd=g('

Aktueller Vorgang

'),Xd=g('

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 ec(e,n){Dn(n,!0);const a=V(()=>Si.value),s=V(()=>ga.value);let l=null,o=R(`Verbinde… -`),d=R("llama-swap"),v,c=R(null),f=R("");const b=new Set,C=V(()=>t(c)?t(s).find(E=>E.id===t(c)):null);xi(()=>{if(!t(C))return;const E=t(C),J=E.state==="done",de=E.state==="failed",Me=E.state==="canceled";(J||de||Me)&&!b.has(E.id)&&(b.add(E.id),ve(J?`✓ ${t(f)} abgeschlossen.`:Me?`${t(f)} abgebrochen.`:`✗ ${t(f)} fehlgeschlagen.`,de),J&&setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),800))});function _(E,J){u(c,E,!0),u(f,J,!0),ga.track(E)}wi(()=>{y()}),Uo(()=>{l==null||l.close()});function y(){l==null||l.close();const E=t(d);u(o,`Verbinde mit ${E}… -`);const J=location.protocol==="https:"?"wss:":"ws:";l=new WebSocket(`${J}//${location.host}/api/logs/${E}?token=${encodeURIComponent(ol())}`),l.onmessage=de=>{u(o,t(o)+de.data),v&&(v.scrollTop=v.scrollHeight)},l.onclose=()=>{u(o,t(o)+` -— Verbindung getrennt —`)},l.onerror=()=>l==null?void 0:l.close()}async function D(E,J,de){if(await hn({title:J,body:de,confirmLabel:"Neustarten"}))try{await Se(`/api/service/${E}/restart`,{method:"POST"}),ve("Neustart ausgelöst: "+E),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),2e3)}catch(Me){ve(Me.message,!0)}}async function F(){if(await hn({title:"Mission Control aktualisieren?",body:"Holt die neueste Dashboard-Version aus Gitea und startet automatisch neu. Die Seite trennt kurz und verbindet von selbst wieder (~10 Sek)."}))try{const E=await Se("/api/self-update",{method:"POST"});ve("Update läuft — Dashboard startet gleich neu."),_(E.job_id,"Mission Control Update")}catch(E){ve(E.message,!0)}}async function A(){if(!await hn({title:"LLM-Engine aktualisieren?",body:"Lädt die neueste llama.cpp-ROCm-Version und installiert sie. Die Engine ist während des Updates kurz nicht erreichbar."}))return;const E=await rr({title:"sudo-Passwort",body:"Für das Engine-Update wird einmalig dein sudo-Passwort gebraucht (für den Update-Befehl).",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Update starten"});if(E!==null)try{const J=await Se("/api/update",{method:"POST",body:JSON.stringify({password:E})});ve("LLM-Engine-Update läuft."),_(J.job_id,"LLM-Engine-Update")}catch(J){ve(J.message,!0)}}async function N(){if(await hn({title:"Grafikspeicher leeren?",body:"Alle geladenen Modelle werden entladen. Sie laden beim nächsten Aufruf automatisch neu — es geht nichts verloren.",confirmLabel:"Leeren"}))try{await Se("/api/unload",{method:"POST"}),ve("Grafikspeicher geleert."),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),600)}catch(E){ve(E.message,!0)}}async function De(){if(!await hn({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 E=await rr({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(E)try{const J=await Se("/api/os-update",{method:"POST",body:JSON.stringify({password:E})});ve("OS-Update gestartet."),_(J.job_id,"OS-Update")}catch(J){ve(J.message,!0)}}async function Ee(){if(!await hn({title:"Server wirklich neu starten?",body:"Der ganze Bosgame startet physisch neu. Alles ist für ~1 Minute offline — auch dieses Dashboard.",confirmLabel:"Reboot",danger:!0}))return;const E=await rr({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(E)try{await Se("/api/reboot",{method:"POST",body:JSON.stringify({password:E})}),ve("Reboot ausgelöst — bis gleich.")}catch(J){ve(J.message,!0)}}async function Ce(){u(Ie,"prüfe…");try{const E=await Se("/api/integration/test");u(Ie,E.ok?`✓ Engine antwortet — ${E.models.length} Modell(e): ${E.models.join(", ")}`:`✗ keine Verbindung: ${E.error}`,!0),u(re,E.ok,!0)}catch(E){u(Ie,"✗ "+E.message),u(re,!1)}}let Ie=R(""),re=R(!1);const ne=V(()=>{var E;return((E=t(a))==null?void 0:E.models)||[]}),_e=["running","ready","loading","starting"],Le=V(()=>t(ne).find(E=>_e.includes(E.state)));function He(E){if(!E||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}var Ne=Xd(),ot=i(tt(Ne),2),I=r(ot),ye=i(r(I),2),qe=r(ye),Qe=i(I,4),G=r(Qe),oe=i(r(G)),Oe=r(oe),Ge=i(G,2),je=i(r(Ge),2),Be=r(je),dt=i(Ge,2),Xe=i(r(dt),2),pt=r(Xe),ct=i(Qe,2),mt=r(ct),Ct=i(mt,2);{var Tt=E=>{var J=Wd(),de=r(J);$(()=>{St(J,`color:${t(re)?"#7ee29a":"#ff9b95"}`),h(de,t(Ie))}),p(E,J)};B(Ct,E=>{t(Ie)&&E(Tt)})}var Mt=i(ot,2),Ft=i(r(Mt),4),zt=i(Ft,2),Et=i(zt,2),L=i(Et,2),H=i(L,2),O=i(Mt,2),W=i(r(O),4),M=i(W,2),ee=i(O,2);{var xe=E=>{const J=V(()=>t(C)),de=V(()=>t(J).state==="done"),Me=V(()=>t(J).state==="failed"),Q=V(()=>t(J).state==="canceled"),le=V(()=>t(de)||t(Me)||t(Q)),Ae=V(()=>He(t(J)));var $e=Yd(),x=r($e),Z=i(r(x),2);{var he=ue=>{var ge=jd();S("click",ge,async()=>{await hn({title:t(f)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&Se(`/api/jobs/${t(J).id}/cancel`,{method:"POST"})}),p(ue,ge)};B(Z,ue=>{t(le)||ue(he)})}var j=i(Z,2),we=r(j);{var Pe=ue=>{var ge=Ud();p(ue,ge)},Fe=ue=>{var ge=Hd();p(ue,ge)},Te=ue=>{var ge=Jd();p(ue,ge)},U=ue=>{var ge=Qd();p(ue,ge)};B(we,ue=>{t(de)?ue(Pe):t(Me)?ue(Fe,1):t(Q)?ue(Te,2):ue(U,-1)})}var Y=i(x,2),X=r(Y),q=i(Y,2);{var te=ue=>{var ge=Zd(),kt=r(ge);$(()=>St(kt,`width:${t(Ae)??""}%`)),p(ue,ge)};B(q,ue=>{t(Ae)!=null&&!t(le)&&ue(te)})}var be=i(q,2),fe=r(be);$(ue=>{h(X,`${t(f)??""}${t(le)?t(de)?" — erfolgreich.":t(Q)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),h(fe,ue)},[()=>(t(J).log||[]).join(` -`)]),p(E,$e)};B(ee,E=>{t(C)&&E(xe)})}var ze=i(ee,2),T=r(ze),K=i(r(T),2),se=r(K);se.value=se.__value="llama-swap";var ie=i(se);ie.value=ie.__value="mission-control";var ae=i(ie);ae.value=ae.__value="system";var ke=i(T,4),ce=r(ke);jo(ke,E=>v=E,()=>v),$(E=>{var J,de,Me;St(ye,`margin-left:auto;${(J=t(a))!=null&&J.swap_ok?"background:rgba(63,185,80,.12);border-color:rgba(63,185,80,.25);color:#7ee29a":"background:rgba(248,81,73,.12);border-color:rgba(248,81,73,.3);color:#ff9b95"}`),h(qe,(de=t(a))!=null&&de.swap_ok?"● erreichbar":"● offline"),h(Oe,(((Me=t(a))==null?void 0:Me.swap_url)||"—")+"/v1"),h(Be,t(Le)?t(Le).name+` (${t(Le).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),h(pt,E),h(ce,t(o))},[()=>t(ne).filter(E=>!E.incomplete).length||"keine"]),S("click",mt,Ce),S("click",Ft,()=>D("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),S("click",zt,()=>D("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),S("click",Et,F),S("click",L,A),S("click",H,N),S("click",W,De),S("click",M,Ee),S("change",K,y),Hn(K,()=>t(d),E=>u(d,E)),p(e,Ne),In()}qn(["click","change"]);var tc=g('
Lade Setups…
'),nc=g(' ×',1),sr=g('
★ Beste Wahl für dein System
'),ac=g('
Dein Setup
'),ic=g(''),rc=g('
'),sc=g('· ⚠ Cache veraltet'),lc=g(" ",1),oc=g('
Frage Quellen ab…
'),dc=g('
'),cc=g('✓ installiert'),vc=g(''),uc=g('

'),pc=g('

'),fc=g(''),hc=g(''),gc=g('

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

Cookbook

Modelle finden, installieren und eigene Setups zusammenstellen.

1 · Anwendungsfall wählen & installieren

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

Aktuell die besten Modelle für dein System

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

Profi-Suche (HuggingFace)

Direkt HuggingFace durchsuchen — oder eine Modell-URL einfügen für den direkten Sprung.
Filter:
',1);function Bc(e,n){Dn(n,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr, braucht aber mehr Speicher und wird etwas langsamer.",s="MoE (Mixture of Experts): viele Parameter fürs Wissen, aber pro Wort ist nur ein kleiner Teil aktiv → fast große-Modell-Qualität bei hohem Tempo. Ideal für deine APU.",l={perfect:0,marginal:1,too_tight:2},o=["qwen2.5","qwen3","qwen2","hermes","mistral","mixtral","devstral","command-r","command_r","llama-3.1","llama3.1","llama-3.3","llama-4","llama4","functionary","watt","firefunction","granite","glm-4","ministral","gemma-3","gemma3"],d=["-r1","deepseek-r1","qwq","magistral","-think","thinking","-o1","gpt-oss","reasoning","exaone-deep","phi-4-reasoning"];function v(k,w=[]){const z=(k||"").toLowerCase(),P=(w||[]).map(Ue=>String(Ue).toLowerCase()),pe=P.some(Ue=>Ue.includes("function-calling")||Ue.includes("tool-use")||Ue.includes("tools")),vt=o.some(Ue=>z.includes(Ue));return{moe:_(z),active_b:y(z),vision:["-vl","vision","llava","pixtral","multimodal","-mm-"].some(Ue=>z.includes(Ue))||P.includes("image-text-to-text"),coder:["coder","-code","code-","codestral","starcoder"].some(Ue=>z.includes(Ue)),reasoning:d.some(Ue=>z.includes(Ue))||P.includes("reasoning"),tools:pe?"yes":vt?"likely":"no"}}let c=R(Rt({tools:!1,moe:!1,reasoning:!1,vision:!1,coder:!1}));const f=[["tools","🛠 Tools"],["moe","🧩 MoE"],["reasoning","🧠 Logik"],["vision","👁 Bild"],["coder","💻 Code"]];function b(k,w=[]){const z=Object.keys(t(c)).filter(pe=>t(c)[pe]);if(!z.length)return!0;const P=v(k,w);return z.every(pe=>pe==="tools"?P.tools!=="no":P[pe])}function C(k,w=[]){const z=v(k,w),P=[];return z.coder&&P.push('💻 Code'),z.vision&&P.push('👁 Bild'),z.reasoning&&P.push('🧠 Logik'),z.moe&&P.push(`🧩 MoE${z.active_b?` · ~${z.active_b}B`:""}`),z.tools==="yes"?P.push('🛠 Tools'):z.tools==="likely"&&P.push('🛠 Tools?'),!z.coder&&!z.vision&&P.unshift('💬 Chat'),P.join(" ")}function _(k=""){const w=k.toLowerCase();return/\d+x\d+(\.\d+)?b/.test(w)||new RegExp("(?{Tt(),Mt()});async function Tt(){u(Ee,!0);try{const k=await Se("/api/cookbook/recipes");u(N,k.recipes||[],!0),u(De,k.recommended_id||null,!0)}catch(k){ve(k.message,!0)}u(Ee,!1)}async function Mt(k=!1){u(Ie,!0);try{const w=await Se("/api/cookbook/discover"+(k?"?force=true":""));u(Ce,w,!0),u(re,w.stale,!0)}catch(w){ve("Empfehlungen nicht ladbar: "+w.message,!0)}u(Ie,!1)}function Ft(k){k=k.trim();const w=k.match(/huggingface\.co\/([^\s/]+\/[^\s/?#]+)/i);return w?w[1]:/^[\w.-]+\/[\w.-]+$/.test(k)?k:null}async function zt(){const k=t(ne).trim(),w=Ft(k),z=k;if(!z&&!w){u(_e,[],!0);return}u(Le,!0),u(Ne,[],!0),u(ot,-1);try{if(w)u(_e,[{id:w,author:w.split("/")[0],downloads:0}],!0);else{const P=`https://huggingface.co/api/models?search=${encodeURIComponent(z)}&filter=gguf&full=true&sort=${encodeURIComponent(t(He))}&direction=-1&limit=40`,pe=await fetch(P);u(_e,await pe.json(),!0)}t(_e).forEach((P,pe)=>Et(pe,P.id))}catch(P){ve(P.message,!0),u(_e,[],!0)}u(Le,!1)}async function Et(k,w){var z;try{const P=await Se("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:w,ctx:8192})});if(!((z=P.files)!=null&&z.length)){t(Ne)[k]=null,L();return}const pe=P.files.find(vt=>{var Ue;return(Ue=vt.quant)==null?void 0:Ue.includes("Q4_K_M")})||P.files[0];t(Ne)[k]=pe.fit.level,L()}catch{t(Ne)[k]=null,L()}}function L(){let k=-1,w=99;t(Ne).forEach((z,P)=>{if(z==null)return;const pe=l[z]??99;pe=0&&w<=1?k:-1,!0)}function H(k){u(I,t(N).find(w=>w.id===k),!0)}async function O(k){const w=document.getElementById("cb-r-install-btn");w&&(w.disabled=!0,w.textContent="Starte…");try{const z=await Se("/api/cookbook/install-recipe",{method:"POST",body:JSON.stringify({recipe_id:k,hf_token:ui()})});ve(`${z.count} Download${z.count!==1?"s":""} läuft — Modelle erscheinen danach automatisch im Modelle-Tab.`),u(I,null),Ct("activity")}catch(z){ve(z.message,!0),w&&(w.disabled=!1,w.textContent="Installieren")}}async function W(k,w){var z,P;u(ye,!0),u(qe,w,!0),u(Qe,k,!0),u(Oe,""),u(Ge,8192),u(G,null),u(Be,null),u(oe,""),u(je,!0);try{if(u(G,await Se("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:k,ctx:8192})}),!0),(P=(z=t(G))==null?void 0:z.files)!=null&&P.length){const pe=t(G).files.find(vt=>{var Ue;return(Ue=vt.quant)==null?void 0:Ue.includes("Q4_K_M")})||t(G).files[0];u(oe,pe.filename,!0),pe.optimal_ctx&&t(Ge)===8192&&u(Ge,pe.optimal_ctx,!0),M()}}catch(pe){ve(pe.message,!0)}u(je,!1)}function M(){var k,w,z;!((w=(k=t(G))==null?void 0:k.files)!=null&&w.length)||!t(oe)||(u(Be,t(G).files.find(P=>P.filename===t(oe))||null,!0),(z=t(Be))!=null&&z.optimal_ctx&&t(Ge)===8192&&u(Ge,t(Be).optimal_ctx,!0))}async function ee(){var k,w;if(!t(Qe)||!t(oe))return ve("Bitte eine GGUF-Datei wählen.",!0);u(je,!0);try{const z=((k=t(G))==null?void 0:k.params_b)??7,P=((w=t(Be))==null?void 0:w.quant)??"Q4_K_M";await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:t(Qe),role:t(Oe),params_b:z,quant:P,file:t(oe),ctx:t(Ge),hf_token:ui()})}),ve("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),u(ye,!1),Ct("activity")}catch(z){ve("Fehler: "+z.message,!0)}u(je,!1)}async function xe(k,w,z,P){P.disabled=!0,P.textContent="Starte…";try{await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:k,role:w,params_b:z,quant:"Q4_K_M",hf_token:ui()})}),ve("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),Ct("activity")}catch(pe){ve(pe.message,!0),P.disabled=!1,P.textContent="Installieren"}}function ze(){u(mt,null),u(Xe,""),u(pt,""),u(ct,[{repo:"",role:"",quant:"Q4_K_M"}],!0),u(dt,!0)}function T(k){const w=t(N).find(z=>z.id===k);w&&(u(mt,k,!0),u(Xe,w.title,!0),u(pt,w.desc||"",!0),u(ct,w.models.map(z=>({repo:z.repo,role:z.role,quant:z.quant||"Q4_K_M"})),!0),u(dt,!0))}async function K(){if(!t(Xe).trim())return ve("Bitte einen Titel angeben.",!0);const k=t(ct).filter(w=>w.repo.trim());if(!k.length)return ve("Mindestens ein Modell (Repo) angeben.",!0);try{t(mt)?(await Se("/api/cookbook/user-recipe/"+encodeURIComponent(t(mt)),{method:"PUT",body:JSON.stringify({title:t(Xe),desc:t(pt),models:k})}),ve("Setup aktualisiert.")):(await Se("/api/cookbook/user-recipe",{method:"POST",body:JSON.stringify({title:t(Xe),desc:t(pt),models:k})}),ve("Setup gespeichert.")),u(dt,!1),Tt()}catch(w){ve(w.message,!0)}}async function se(k){const w=t(N).find(z=>z.id===k);if(await hn({title:`„${(w==null?void 0:w.title)||k}" löschen?`,body:"Dein eigenes Setup wird aus dem Cookbook entfernt. Bereits installierte Modelle bleiben unangetastet.",confirmLabel:"Löschen",danger:!0}))try{await Se("/api/cookbook/user-recipe/"+encodeURIComponent(k),{method:"DELETE"}),ve("Setup gelöscht."),Tt()}catch(z){ve(z.message,!0)}}var ie=Oc(),ae=i(tt(ie),2),ke=r(ae),ce=i(r(ke),2),E=i(ke,4);{var J=k=>{var w=tc();p(k,w)},de=k=>{var w=rc();Ze(w,21,()=>t(N),et,(z,P)=>{const pe=V(()=>t(P).id===t(De));var vt=ic(),Ue=r(vt);{var Xt=Ve=>{var bt=nc(),jt=tt(bt),Ut=i(jt,2);S("click",jt,Kt=>{Kt.stopPropagation(),T(t(P).id)}),S("keydown",jt,Kt=>{Kt.key==="Enter"&&(Kt.stopPropagation(),T(t(P).id))}),S("click",Ut,Kt=>{Kt.stopPropagation(),se(t(P).id)}),S("keydown",Ut,Kt=>{Kt.key==="Enter"&&(Kt.stopPropagation(),se(t(P).id))}),p(Ve,bt)};B(Ue,Ve=>{t(P).user&&Ve(Xt)})}var en=i(Ue,2);{var ft=Ve=>{var bt=sr();p(Ve,bt)},yt=Ve=>{var bt=ac();p(Ve,bt)};B(en,Ve=>{t(pe)?Ve(ft):t(P).user&&Ve(yt,1)})}var at=i(en,2),ut=r(at),xt=r(ut),Lt=r(xt),tn=i(ut,2),At=r(tn),it=i(at,2),Ot=r(it),Wt=i(it,2),Pt=r(Wt);$((Ve,bt)=>{wt(vt,1,`card-btn${t(pe)?" cb-best":""}`),h(Lt,t(P).title),wt(tn,1,`fit-badge ${Ve??""}`),h(At,bt),h(Ot,t(P).desc),h(Pt,`${t(P).models.length??""} Modell${t(P).models.length>1?"e":""} im Setup`)},[()=>D(t(P).fit_level),()=>F(t(P).fit_level)]),S("click",vt,()=>H(t(P).id)),p(z,vt)}),p(k,w)};B(E,k=>{t(Ee)?k(J):k(de,-1)})}var Me=i(ae,2),Q=r(Me),le=i(r(Q),2),Ae=r(le);{var $e=k=>{const w=V(()=>Math.round((Date.now()/1e3-t(Ce).updated)/60));var z=lc(),P=tt(z);{var pe=ft=>{var yt=ci();$(()=>h(yt,`Quellen befragt vor ${t(w)??""} min`)),p(ft,yt)},vt=ft=>{var yt=ci();$(at=>h(yt,`Quellen befragt vor ${at??""} h`),[()=>Math.round(t(w)/60)]),p(ft,yt)},Ue=ft=>{var yt=ci();$(at=>h(yt,`Quellen befragt vor ${at??""} Tg.`),[()=>Math.round(t(w)/1440)]),p(ft,yt)};B(P,ft=>{t(w)<60?ft(pe):t(w)<1440?ft(vt,1):ft(Ue,-1)})}var Xt=i(P,2);{var en=ft=>{var yt=sc();p(ft,yt)};B(Xt,ft=>{t(re)&&ft(en)})}p(k,z)};B(Ae,k=>{var w;(w=t(Ce))!=null&&w.updated&&k($e)})}var x=i(le,2),Z=r(x),he=i(Q,4);{var j=k=>{var w=oc();p(k,w)},we=k=>{var w=Ea(),z=tt(w);Ze(z,17,()=>t(Ce).categories,et,(P,pe)=>{var vt=pc(),Ue=r(vt),Xt=r(Ue),en=r(Xt),ft=i(Ue,2);Ze(ft,21,()=>t(pe).models,et,(yt,at)=>{const ut=V(()=>t(pe).recommended&&t(at).repo===t(pe).recommended);var xt=uc(),Lt=r(xt);{var tn=We=>{var rt=sr();p(We,rt)};B(Lt,We=>{t(ut)&&We(tn)})}var At=i(Lt,2),it=r(At),Ot=r(it),Wt=r(Ot),Pt=i(Ot,2),Ve=r(Pt),bt=i(it,2),jt=r(bt),Ut=i(At,2);nt(Ut,()=>C(t(at).repo,t(at).tags),!0);var Kt=i(Ut,2),Gn=r(Kt),mn=i(Kt,2);Ze(mn,17,()=>t(at).requirements||[],et,(We,rt)=>{var Nt=dc(),Ht=r(Nt);$(()=>h(Ht,`⚠ ${t(rt)??""}`)),p(We,Nt)});var bn=i(mn,4),va=r(bn);{var _t=We=>{var rt=cc();$(()=>za(rt,"title",`bereits eingerichtet als ${t(at).installed??""}`)),p(We,rt)},lt=We=>{var rt=vc();S("click",rt,Nt=>xe(t(at).repo,t(at).role,t(at).params_b,Nt.currentTarget)),p(We,rt)};B(va,We=>{t(at).installed?We(_t):We(lt,-1)})}$((We,rt,Nt)=>{wt(xt,1,`card${t(ut)?" res-best":""}`),h(Wt,t(at).name),h(Ve,`${t(at).author??""} · ${t(at).params_b??""}B`),wt(bt,1,`fit-badge ${We??""}`),h(jt,t(at).fit.text),h(Gn,`${rt??""} · ⬇ ${Nt??""}`)},[()=>D(t(at).fit.level),()=>A(t(at).fit),()=>(t(at).downloads||0).toLocaleString()]),p(yt,xt)}),$(()=>h(en,t(pe).title)),p(P,vt)}),p(k,w)};B(he,k=>{var w;t(Ie)&&!t(Ce)?k(j):(w=t(Ce))!=null&&w.categories&&k(we,1)})}var Pe=i(Me,2),Fe=i(r(Pe),4),Te=r(Fe),U=i(Te,2),Y=r(U);Y.value=Y.__value="downloads";var X=i(Y);X.value=X.__value="trending";var q=i(X);q.value=q.__value="created_at";var te=i(U,2),be=r(te),fe=i(Fe,2),ue=i(r(fe),2);Ze(ue,17,()=>f,et,(k,w)=>{var z=V(()=>Bn(t(w),2));let P=()=>t(z)[0],pe=()=>t(z)[1];var vt=fc(),Ue=r(vt);$(()=>{wt(vt,1,t(c)[P()]?"primary":"ghost"),h(Ue,pe())}),S("click",vt,()=>t(c)[P()]=!t(c)[P()]),p(k,vt)});var ge=i(ue,2);{var kt=k=>{var w=hc();S("click",w,()=>u(c,{tools:!1,moe:!1,reasoning:!1,vision:!1,coder:!1},!0)),p(k,w)},$t=V(()=>Object.values(t(c)).some(k=>k));B(ge,k=>{t($t)&&k(kt)})}var Dt=i(fe,2);{var gn=k=>{var w=mc();Ze(w,21,()=>t(_e),et,(z,P,pe)=>{var vt=Ea(),Ue=tt(vt);{var Xt=ft=>{var yt=gc(),at=r(yt);{var ut=mn=>{var bn=sr();p(mn,bn)};B(at,mn=>{pe===t(ot)&&mn(ut)})}var xt=i(at,2),Lt=r(xt),tn=r(Lt),At=r(tn),it=i(tn,2),Ot=r(it),Wt=i(Lt,2),Pt=r(Wt),Ve=i(xt,2);nt(Ve,()=>C(t(P).id,t(P).tags),!0);var bt=i(Ve,4),jt=r(bt),Ut=r(jt),Kt=i(jt,2),Gn=r(Kt);$((mn,bn,va,_t,lt)=>{wt(yt,1,`card${pe===t(ot)?" res-best":""}`),h(At,mn),h(Ot,t(P).author||""),wt(Wt,1,`fit-badge ${bn??""}`),h(Pt,va),h(Ut,_t),h(Gn,`⬇ ${lt??""}`)},[()=>t(P).id.split("/").pop(),()=>t(Ne)[pe]?D(t(Ne)[pe]):"warn",()=>t(Ne)[pe]?F(t(Ne)[pe]):"prüfe…",()=>t(Ne)[pe]?A({req_gb:0,tps:0}):"Hardware-Fit…",()=>(t(P).downloads||0).toLocaleString()]),S("click",yt,()=>W(t(P).id,t(P).id.split("/").pop())),p(ft,yt)},en=V(()=>b(t(P).id,t(P).tags));B(Ue,ft=>{t(en)&&ft(Xt)})}p(z,vt)}),p(k,w)};B(Dt,k=>{t(_e).length&&k(gn)})}var Yn=i(Pe,2);{var ca=k=>{const w=V(()=>t(I));var z=Mc(),P=r(z),pe=r(P),vt=i(pe,2),Ue=r(vt),Xt=i(vt,2),en=r(Xt),ft=i(Xt,2);Ze(ft,21,()=>t(w).models,et,(At,it)=>{var Ot=xc(),Wt=r(Ot),Pt=r(Wt),Ve=r(Pt),bt=r(Ve),jt=i(Ve,2),Ut=r(jt),Kt=i(jt,2);nt(Kt,()=>C(t(it).repo,t(it).tags));var Gn=i(Pt,2);{var mn=We=>{var rt=bc(),Nt=r(rt);$(()=>h(Nt,t(it).why)),p(We,rt)};B(Gn,We=>{t(it).why&&We(mn)})}var bn=i(Gn,2);{var va=We=>{var rt=_c(),Nt=r(rt);$((Ht,cn,Xn)=>h(Nt,`~${Ht??""} GB · ~${cn??""} Tok/s · optimal ~${Xn??""}k Kontext`),[()=>(t(it).fit.req_gb??0).toFixed(1),()=>Math.round(t(it).fit.tps??0),()=>Math.round((t(it).optimal_ctx||8192)/1024)]),p(We,rt)};B(bn,We=>{t(it).fit&&We(va)})}var _t=i(Wt,2);{var lt=We=>{var rt=yc(),Nt=r(rt);$(Ht=>{wt(rt,1,`fit-badge ${Ht??""}`),h(Nt,t(it).fit.text)},[()=>D(t(it).fit.level)]),p(We,rt)};B(_t,We=>{t(it).fit&&We(lt)})}$(()=>{h(bt,t(it).name),h(Ut,t(it).role)}),p(At,Ot)});var yt=i(ft,2);{var at=At=>{const it=V(()=>Math.max(...t(w).models.map(Ve=>{var bt;return((bt=Ve.fit)==null?void 0:bt.req_gb)??0})));var Ot=kc(),Wt=i(r(Ot)),Pt=r(Wt);$(Ve=>h(Pt,`~${Ve??""} GB`),[()=>t(it).toFixed(1)]),p(At,Ot)};B(yt,At=>{t(w).models.length&&t(w).models[0].fit&&At(at)})}var ut=i(yt,2);{var xt=At=>{const it=V(()=>t(N).find(Ve=>!Ve.user&&Ve.fit_level!=="too_tight"&&Ve.id!==t(w).id));var Ot=Sc(),Wt=i(r(Ot));{var Pt=Ve=>{var bt=wc(),jt=i(tt(bt)),Ut=r(jt);$(()=>h(Ut,`„${t(it).title??""}" ansehen`)),S("click",jt,Kt=>{Kt.preventDefault(),u(I,null),setTimeout(()=>H(t(it).id),50)}),p(Ve,bt)};B(Wt,Ve=>{t(it)&&Ve(Pt)})}p(At,Ot)};B(ut,At=>{t(w).fit_level==="too_tight"&&At(xt)})}var Lt=i(ut,2),tn=r(Lt);$(()=>{h(Ue,t(w).title),h(en,t(w).desc),wt(Lt,1,`primary${t(w).fit_level==="too_tight"?" warn":""}`),h(tn,t(w).fit_level==="too_tight"?"Trotzdem installieren (nicht empfohlen)":"Komplettes Setup installieren")}),S("click",z,At=>{At.target.classList.contains("modal-overlay")&&u(I,null)}),S("click",pe,()=>u(I,null)),S("click",Lt,()=>O(t(w).id)),p(k,z)};B(Yn,k=>{t(I)&&k(ca)})}var $a=i(Yn,2);{var Hi=k=>{var w=Dc(),z=r(w),P=r(z),pe=i(P,2),vt=r(pe),Ue=i(pe,2),Xt=r(Ue),en=i(Ue,2);{var ft=ut=>{var xt=Ec();p(ut,xt)},yt=ut=>{var xt=$c(),Lt=i(tt(xt),2);Ze(Lt,21,()=>t(G).files,et,(_t,lt)=>{const We=V(()=>t(lt).fit.level==="perfect"?"●":t(lt).fit.level==="marginal"?"◐":"○");var rt=as(),Nt=r(rt),Ht={};$(()=>{h(Nt,`${t(We)??""} ${t(lt).filename??""}`),Ht!==(Ht=t(lt).filename)&&(rt.value=(rt.__value=t(lt).filename)??"")}),p(_t,rt)});var tn=i(Lt,2),At=r(tn),it=i(r(At),2),Ot=i(At,2),Wt=r(Ot),Pt=i(r(Wt));nt(Pt,()=>wr(a));var Ve=i(Wt,2),bt=i(tn,2);{var jt=_t=>{var lt=Ac(),We=i(r(lt)),rt=r(We),Nt=i(We,2);$(Ht=>h(rt,`~${Ht??""}k`),[()=>Math.round(t(Be).optimal_ctx/1024)]),S("click",Nt,Ht=>{Ht.preventDefault(),u(Ge,t(Be).optimal_ctx,!0)}),p(_t,lt)};B(bt,_t=>{var lt;(lt=t(Be))!=null&<.optimal_ctx&&_t(jt)})}var Ut=i(bt,2);{var Kt=_t=>{var lt=Cc(),We=r(lt),rt=i(r(We),2),Nt=r(rt),Ht=i(We,2),cn=r(Ht);$((Xn,Mi,Qi)=>{h(Nt,`~${Xn??""} GB · ~${Mi??""} Tok/s · ${(t(Be).quant||"GGUF")??""}`),wt(Ht,1,`fit-badge ${Qi??""}`),h(cn,t(Be).fit.text)},[()=>(t(Be).fit.req_gb??0).toFixed(1),()=>Math.round(t(Be).fit.tps??0),()=>D(t(Be).fit.level)]),p(_t,lt)};B(Ut,_t=>{t(Be)&&_t(Kt)})}var Gn=i(Ut,2);{var mn=_t=>{const lt=V(()=>t(G).files.find(cn=>cn.fit.level!=="too_tight"&&cn.filename!==t(oe)));var We=Ea(),rt=tt(We);{var Nt=cn=>{var Xn=Tc(),Mi=i(r(Xn)),Qi=r(Mi);$(Zi=>h(Qi,`${t(lt).filename??""} (${Zi??""})`),[()=>F(t(lt).fit.level)]),S("click",Mi,Zi=>{Zi.preventDefault(),u(oe,t(lt).filename,!0),M()}),p(cn,Xn)},Ht=cn=>{var Xn=zc();p(cn,Xn)};B(rt,cn=>{t(lt)?cn(Nt):cn(Ht,-1)})}p(_t,We)};B(Gn,_t=>{var lt,We;((lt=t(Be))==null?void 0:lt.fit.level)==="too_tight"&&((We=t(G))!=null&&We.files)&&_t(mn)})}var bn=i(Gn,2),va=r(bn);$(()=>{var _t,lt;wt(bn,1,`primary${((_t=t(Be))==null?void 0:_t.fit.level)==="too_tight"?" warn":""}`),bn.disabled=t(je),h(va,t(je)?"Starte…":((lt=t(Be))==null?void 0:lt.fit.level)==="too_tight"?"Trotzdem holen (zu groß — nicht empfohlen)":"Herunterladen & Einpflegen")}),S("change",Lt,M),Hn(Lt,()=>t(oe),_t=>u(oe,_t)),on(it,()=>t(Oe),_t=>u(Oe,_t)),on(Ve,()=>t(Ge),_t=>u(Ge,_t)),S("click",bn,ee),p(ut,xt)},at=ut=>{var xt=Pc();p(ut,xt)};B(en,ut=>{var xt,Lt;t(je)&&!t(G)?ut(ft):(Lt=(xt=t(G))==null?void 0:xt.files)!=null&&Lt.length?ut(yt,1):t(je)||ut(at,2)})}$(()=>{h(vt,t(qe)),h(Xt,t(Qe))}),S("click",w,ut=>{ut.target.classList.contains("modal-overlay")&&u(ye,!1)}),S("click",P,()=>u(ye,!1)),p(k,w)};B($a,k=>{t(ye)&&k(Hi)})}var Xa=i($a,2);{var Ji=k=>{var w=Lc(),z=r(w),P=r(z),pe=i(P,2),vt=r(pe),Ue=i(pe,6),Xt=i(Ue,4),en=i(Xt,4);Ze(en,17,()=>t(ct),et,(ut,xt,Lt)=>{var tn=Ic(),At=r(tn),it=i(At,2),Ot=i(it,2);Ze(Ot,20,()=>["Q4_K_M","Q5_K_M","Q6_K","Q8_0","Q3_K_M"],et,(Pt,Ve)=>{var bt=as(),jt=r(bt),Ut={};$(()=>{h(jt,Ve),Ut!==(Ut=Ve)&&(bt.__value=Ve)}),p(Pt,bt)});var Wt=i(Ot,2);on(At,()=>t(xt).repo,Pt=>t(xt).repo=Pt),on(it,()=>t(xt).role,Pt=>t(xt).role=Pt),Hn(Ot,()=>t(xt).quant,Pt=>t(xt).quant=Pt),S("click",Wt,()=>u(ct,t(ct).filter((Pt,Ve)=>Ve!==Lt),!0)),p(ut,tn)});var ft=i(en,2),yt=i(ft,4),at=r(yt);$(()=>{h(vt,t(mt)?"Setup bearbeiten":"Eigenes Setup erstellen"),h(at,t(mt)?"Änderungen speichern":"Setup speichern")}),S("click",w,ut=>{ut.target.classList.contains("modal-overlay")&&u(dt,!1)}),S("click",P,()=>u(dt,!1)),on(Ue,()=>t(Xe),ut=>u(Xe,ut)),on(Xt,()=>t(pt),ut=>u(pt,ut)),S("click",ft,()=>u(ct,[...t(ct),{repo:"",role:"",quant:"Q4_K_M"}],!0)),S("click",yt,K),p(k,w)};B(Xa,k=>{t(dt)&&k(Ji)})}$(()=>{x.disabled=t(Ie),h(Z,t(Ie)?"Suche…":"Aktualisieren"),te.disabled=t(Le),h(be,t(Le)?"Lade…":"Suchen")}),S("click",ce,ze),S("click",x,()=>Mt(!0)),S("keydown",Te,k=>k.key==="Enter"&&zt()),on(Te,()=>t(ne),k=>u(ne,k)),Hn(U,()=>t(He),k=>u(He,k)),S("click",te,zt),p(e,ie),In()}qn(["click","keydown","change"]);var Rc=g(`
Du öffnest Mission Control über einen Proxy/Namen. Die Engine läuft auf Port 8080 ohne HTTPS direkt am Bosgame. - Trag in deinen Tools die LAN-IP ein: http://192.168.178.151:8080/v1 — nicht den Proxy-Namen.
`),Fc=g(' '),Kc=g('
'),Nc=g(' '),qc=g(''),is=g(''),Gc=g('

Jan AI ist eine Desktop-App — kein Browser, kein Server, kein Admin-Panel. Einfach installieren und loslegen.

Jan AI öffnen → linke Leiste → Remote-Modelle+ Modell hinzufügen:

API-Key: ein beliebiger Wert (z.B. local). Jan AI fragt danach beim Einrichten.
Jan AI herunterladen: jan.ai — kostenlos, open source, Windows/macOS/Linux.
',1),Vc=g('

Datei anlegen oder öffnen: ~/.continue/config.json

Falls bereits eine config.json vorhanden: nur den "models"-Eintrag ergänzen, nicht die ganze Datei ersetzen.

Danach Continue in VS Code neu starten → im Chat-Panel das Modell wählen.

Continue: continue.dev — kostenlose VS Code / JetBrains Extension. Hinweis: 2026 von Cursor akquiriert — aktuell weiter aktiv und kostenlos.
',1),Wc=g('

Antigravity (Googles agentic IDE, VS Code-basiert) unterstützt OpenAI-kompatible Endpoints direkt:

Settings → Models → Custom Endpoint+ hinzufügen:

API-Key: ein beliebiger Wert (z.B. local). Danach das Modell in der Model-Liste auswählen.
Antigravity herunterladen: antigravityide.net — kostenlose Einzelperson-Tier, VS Code-basiert.
',1),jc=g('

Ö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.
Zed herunterladen: zed.dev — kostenlos, native Performance, Windows/macOS/Linux.
',1),Uc=g('

Datei anlegen oder öffnen (OpenCode Desktop nutzt .jsonc — JSON mit Kommentaren):

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

Den "providers"-Block in die bestehende opencode.jsonc einfügen (nicht die ganze Datei ersetzen). Falls bereits ein "llama-swap"-Eintrag existiert: vorher löschen.

Danach in OpenCode /models wählen.

OpenCode Desktop: opencode.ai
',1),Hc=g('

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

API-Key: ein beliebiger Wert (z.B. local).
Cline für VS Code: VS Code Marketplace · für JetBrains: JetBrains Marketplace
',1),Jc=g('

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

',1),Qc=g('

Bilder einbinden (Vision)

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

2 · Modelle auswählen

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

3 · Tool wählen

Für welches Werkzeug brauchst du die Konfiguration?
Chat
Coding-Assistenten

4 · Config-Snippet

',1),Yc=g('

2 · Erst ein Modell installieren

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

In Cline: MCP-Einstellungen öffnen (Stecker-Icon in der Cline-Sidebar) → „Add MCP Server" → diesen Block einfügen.

In Claude Code: Block in ~/.claude/settings.json unter "mcpServers" einfügen.

Einmalig auf dem Windows-PC: pip install mcp httpx ausführen — danach mcp_memory.py aus dem Repo-Ordner erreichbar machen (Pfad im Snippet anpassen).
',1),tv=g('

Block in ~/.config/opencode/opencode.json unter "mcpServers" einfügen.

Einmalig: pip install mcp httpx — und Pfad zu mcp_memory.py im Snippet anpassen.
',1),nv=g('

Block in die MCP-Config des jeweiligen Tools einfügen. Der Bosgame-Pfad /opt/mission-control/mcp_memory.py ist bereits korrekt — kein weiteres Setup nötig.

'),av=g(`

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?

Gedächtnis-MCP

Neu in v7
Damit Cline, OpenCode und Claude Code sich Projektfakten, Entscheidungen und Präferenzen - über Sessions hinweg merken — geteilt über alle Tools, verwaltet im Gedächtnis-Tab.
`,1);function iv(e,n){Dn(n,!0);const a=V(()=>Si.value),s=V(()=>{var T;return(((T=t(a))==null?void 0:T.models)||[]).filter(K=>!K.incomplete)});let l=R("zed"),o=R(Rt([])),d=R(""),v=R(!1),c=R("cline"),f=R(Rt(localStorage.getItem("mc_ip_override")||""));function b(T){return/^\d{1,3}(\.\d{1,3}){3}$/.test(T)}function C(){return location.protocol==="https:"||!b(location.hostname)}function _(){return`http://${t(f).trim()||location.hostname}:8080/v1`}const y=V(_);function D(){const T=t(f).trim();T?localStorage.setItem("mc_ip_override",T):localStorage.removeItem("mc_ip_override")}const F=V(()=>Le(t(c))),A=V(()=>t(o).length?t(o):t(s).map(T=>T.name)),N=V(()=>t(A)[0]||"coder"),De=V(()=>{var T;return(T=t(s).find(K=>{var se,ie;return(ie=(se=K.meta)==null?void 0:se.caps)==null?void 0:ie.includes("Bild")}))==null?void 0:T.name});function Ee(T,K){const ie=(K.length?t(s).filter(ae=>K.includes(ae.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ae=>{var E,J;const ke=(((E=ae.meta)==null?void 0:E.caps)||[]).some(de=>/Bild|Vision/i.test(de)),ce=((J=ae.meta)==null?void 0:J.ctx)||131072;return` { "name": "${ae.name}", "display_name": "${ae.name}", "max_tokens": ${ce}${ke?', "capabilities": { "tools": true, "images": true }':""} }`}).join(`, + + `;const c=v.querySelector("input"),f=_=>{v.remove(),d(_)};v.addEventListener("click",_=>{if(_.target===v)return f(null);const T=_.target.closest("[data-x]");T&&f(T.getAttribute("data-x")==="1"?c.value||"":null)}),c.addEventListener("keydown",_=>{_.key==="Enter"&&f(c.value||""),_.key==="Escape"&&f(null)}),document.body.appendChild(v),c.focus()})}function Yo(e="overview"){const n=Jr(".nav-item[data-view]:not(.disabled)"),a=Jr(".view[data-view]"),s=new Set(a.map(o=>o.dataset.view));function l(o){s.has(o)||(o=e),a.forEach(d=>d.hidden=d.dataset.view!==o),n.forEach(d=>d.classList.toggle("active",d.dataset.view===o)),location.hash!=="#/"+o&&(location.hash="#/"+o)}return n.forEach(o=>o.addEventListener("click",d=>{d.preventDefault(),l(o.dataset.view)})),window.addEventListener("hashchange",()=>l(location.hash.replace("#/",""))),l(location.hash.replace("#/","")||e),{show:l}}let Zr=F(null);const ui={get value(){return t(Zr)},set(e){u(Zr,e,!0)}};let Yr=F(Lt([])),Vn=F(Lt([]));const na={get value(){return t(Yr)},set(e){u(Yr,e||[],!0)},get tracked(){return t(Vn)},track(e){t(Vn).includes(e)||u(Vn,[...t(Vn),e],!0)},toggle(e){u(Vn,t(Vn).includes(e)?t(Vn).filter(n=>n!==e):[...t(Vn),e],!0)}};let Xr=F(null);const Lr={get value(){return t(Xr)},set(e){u(Xr,e,!0)}},Xo="5";var us;typeof window<"u"&&((us=window.__svelte??(window.__svelte={})).v??(us.v=new Set)).add(Xo);var ed=g('— bereit für Anfragen'),td=g('
Temperatur (GPU)
Freier Speicher
GB
',1),nd=g('
Temperatur
messe…
Freier Speicher
messe…
',1),ad=g('
'),id=g('
Warte auf Messwerte…
'),rd=g('
Noch kein Modell eingerichtet — starte hier:
',1),sd=g('
Die häufigsten Aufgaben — ein Klick.
',1),ld=g('Bild'),od=g('Code'),dd=g('Text'),cd=g('∞ aktiv'),vd=g(''),ud=g('
'),es=g('
'),pd=g('
Noch keine Modelle
Hol dir unter „Cookbook" ein Modell, das auf deine Hardware passt.
'),fd=g('
'),hd=g('
News gerade nicht ladbar.
'),gd=g('

LLM-Engine
Aktives Modell

System-Gesundheit

Auslastung in Echtzeit.

Schnellstart

Dein Stack

Top-News

Alle →
',1);function md(e,n){kn(n,!0);const a=U(()=>ui.value),s=U(()=>Lr.value),l=U(()=>{var w;return((w=t(a))==null?void 0:w.models)||[]}),o=U(()=>{var w;return((w=t(a))==null?void 0:w.swap_ok)??!1}),d=["running","ready","loading","starting"],v=U(()=>t(l).find(w=>d.includes(w.state))),c=U(()=>t(l).filter(w=>!w.incomplete)),f=U(()=>t(a)?t(o)?t(s)&&t(s).ram.percent>=90?"Achtung: Speicher wird knapp.":"Alles läuft rund.":"LLM-Engine offline":"Verbinde…"),_=U(()=>t(a)?t(o)?t(s)&&t(s).ram.percent>=90?`Arbeitsspeicher bei ${Math.round(t(s).ram.percent)} % — eventuell Speicher freigeben.`:`${t(c).length} ${t(c).length===1?"Modell":"Modelle"} konfiguriert · ${t(v)?`„${t(v).name}" geladen`:"keines geladen"} · keine Warnungen.`:"Der llama-swap-Dienst antwortet gerade nicht.":""),T=U(()=>()=>{var ee;const w=(ee=t(s))==null?void 0:ee.gpu;return w&&w.vram.total+w.gtt.total>0?(w.vram.used+w.gtt.used)/(w.vram.total+w.gtt.total)*100:0});let y=F(Lt([])),k=F(null);vi(async()=>{try{u(y,((await Se("/api/news")).items||[]).slice(0,4),!0)}catch{}});async function I(){await rn({title:"Speicher freigeben?",body:"Alle aktuell geladenen Modelle werden aus dem Grafikspeicher geworfen. Sie laden beim nächsten Aufruf automatisch neu.",confirmLabel:"Speicher freigeben"})&&(await Se("/api/unload",{method:"POST"}),C())}async function K(w){u(k,w,!0);try{await Se("/api/preload?model="+encodeURIComponent(w),{method:"POST"})}catch(ee){he("Laden fehlgeschlagen: "+(ee.message||"Engine nicht erreichbar?"),!0)}u(k,null),C()}function C(){document.dispatchEvent(new Event("mc:refresh"))}function V(w){var ee;(ee=document.querySelector(`.nav-item[data-view="${w}"]`))==null||ee.dispatchEvent(new MouseEvent("click"))}function Ae(w){return w>=90?"red":w>=75?"":"green"}function Ce(w){return w==null?"":w>=75?"red":w>=55?"":"green"}function Be(w){return w>=90?"red":w>=70?"":"green"}var De=gd(),se=Ye(De),le=r(se),$e=r(le),Te=r($e),We=i(Te);{var rt=w=>{var ee=ed();p(w,ee)};O(We,w=>{t(o)&&!t(v)&&w(rt)})}var Je=i($e,2),R=r(Je),_e=i(se,2),Re=r(_e),at=r(Re),Q=i(r(at),2);lt(Q,()=>Bt("server"),!0);var de=i(at,2),xe=r(de),et=i(de,2),Ve=r(et),tt=i(Re,2),Ke=r(tt),it=i(r(Ke),2);lt(it,()=>Bt("cpu"),!0);var dt=i(Ke,2),ht=r(dt),ct=i(dt,2),_t=r(ct);{var At=w=>{var ee=Ya();$(ge=>h(ee,`${ge??""} · ${t(v).state??""}`),[()=>{var ge;return(ge=t(v).meta)!=null&&ge.ctx?Math.round(t(v).meta.ctx/1024)+"k ctx":""}]),p(w,ee)},xt=w=>{var ee=Ya("lädt bei erster Anfrage");p(w,ee)};O(_t,w=>{t(v)?w(At):w(xt,-1)})}var Pt=i(tt,2);{var Ct=w=>{const ee=U(()=>{var Ne;return t(s).gpu_temp??((Ne=t(s).cpu)==null?void 0:Ne.temp)??null}),ge=U(()=>Ce(t(ee))),m=U(()=>t(s).ram.total-t(s).ram.used),x=U(()=>100-t(s).ram.percent);var A=td(),q=Ye(A),H=r(q),G=i(r(H));lt(G,()=>Bt("thermo"),!0);var P=i(H,2),W=r(P),L=i(P,2),X=r(L),ae=i(q,2),ue=r(ae),j=i(r(ue));lt(j,()=>Bt("database"),!0);var te=i(ue,2),Le=r(te),Qe=i(te,2),Oe=r(Qe);$((Ne,yt,Mt,wt)=>{bt(q,1,`kpi ${t(ge)??""}`),h(W,Ne),h(X,t(ee)==null?"messe…":t(ee)<55?"kühl":t(ee)<75?"normal":"⚠ heiß"),bt(ae,1,`kpi ${t(x)<15?"red":t(x)<30?"":"green"}`),h(Le,yt),h(Oe,`von ${Mt??""} GB · ${wt??""} % frei`)},[()=>t(ee)!=null?`${Math.round(t(ee))}°C`:"–",()=>Math.round(t(m)/1073741824),()=>Math.round(t(s).ram.total/1073741824),()=>Math.round(t(x))]),p(w,A)},kt=w=>{var ee=nd();p(w,ee)};O(Pt,w=>{t(s)?w(Ct):w(kt,-1)})}var B=i(_e,2),Z=r(B),D=i(r(Z),4);{var J=w=>{const ee=U(()=>t(T)());var ge=ua(),m=Ye(ge);Ze(m,17,()=>{var x;return[["Prozessor (CPU)",((x=t(s).cpu)==null?void 0:x.percent)??0,""],["Arbeitsspeicher (RAM)",t(s).ram.percent,Ae(t(s).ram.percent)],["Grafikspeicher (VRAM)",t(ee),Be(t(ee))]]},nt,(x,A)=>{var q=U(()=>En(t(A),3));let H=()=>t(q)[0],G=()=>t(q)[1];const P=U(()=>Math.max(0,Math.min(100,G()||0)));var W=ad(),L=r(W),X=r(L),ae=r(X),ue=i(X),j=r(ue),te=i(L,2),Le=r(te);$((Qe,Oe)=>{h(ae,H()),h(j,`${Qe??""} %`),bt(te,1,`bar ${t(P)>=90?"bad":t(P)>=75?"warn":""}`),St(Le,`width:${Oe??""}%`)},[()=>Math.round(t(P)),()=>Math.max(2,t(P))]),p(x,W)}),p(w,ge)},M=w=>{var ee=id();p(w,ee)};O(D,w=>{t(s)?w(J):w(M,-1)})}var ie=i(Z,2),ke=i(r(ie),2);{var Ie=w=>{var ee=rd(),ge=i(Ye(ee),2),m=r(ge);lt(m,()=>Bt("search"),!0);var x=i(m,4);lt(x,()=>Bt("chevron"),!0);var A=i(ge,2),q=r(A);lt(q,()=>Bt("swap"),!0);var H=i(q,4);lt(H,()=>Bt("chevron"),!0);var G=i(A,2),P=r(G);lt(P,()=>Bt("file"),!0);var W=i(P,4);lt(W,()=>Bt("chevron"),!0),S("click",ge,()=>V("cookbook")),S("click",A,()=>V("connect")),S("click",G,()=>V("guides")),p(w,ee)},z=w=>{var ee=sd(),ge=i(Ye(ee),2),m=r(ge);lt(m,()=>Bt("search"),!0);var x=i(m,4);lt(x,()=>Bt("chevron"),!0);var A=i(ge,2),q=r(A);lt(q,()=>Bt("refresh"),!0);var H=i(q,4);lt(H,()=>Bt("chevron"),!0);var G=i(A,2),P=r(G);lt(P,()=>Bt("file"),!0);var W=i(P,4);lt(W,()=>Bt("chevron"),!0);var L=i(G,2),X=r(L);lt(X,()=>Bt("swap"),!0);var ae=i(X,4);lt(ae,()=>Bt("chevron"),!0),S("click",ge,()=>V("cookbook")),S("click",A,I),S("click",G,()=>V("server")),S("click",L,()=>V("connect")),p(w,ee)};O(ke,w=>{t(c).length?w(z,-1):w(Ie)})}var N=i(B,2),ve=r(N),oe=r(ve),re=i(r(oe),2),we=r(re),pe=i(oe,2);{var E=w=>{var ee=es();Ze(ee,21,()=>t(c),nt,(ge,m)=>{const x=U(()=>d.includes(t(m).state)),A=U(()=>t(m).state==="downloading"),q=U(()=>t(m).state==="loading"||t(m).state==="starting"||t(A)?"load":t(x)?"on":""),H=U(()=>t(A)?`↓ ${t(m).download_progress!=null?Math.round(t(m).download_progress)+"%":"..."}`:t(m).state==="loading"||t(m).state==="starting"?"lädt…":t(x)?"geladen ✓":"bereit");var G=ud(),P=r(G),W=i(P,2),L=r(W),X=r(L),ae=r(X),ue=i(X,2);{var j=qe=>{var ut=ld();p(qe,ut)},te=U(()=>{var qe,ut;return(ut=(qe=t(m).meta)==null?void 0:qe.caps)==null?void 0:ut.includes("Bild")}),Le=qe=>{var ut=od();p(qe,ut)},Qe=U(()=>{var qe,ut;return(ut=(qe=t(m).meta)==null?void 0:qe.caps)==null?void 0:ut.includes("Code")}),Oe=qe=>{var ut=dd();p(qe,ut)};O(ue,qe=>{t(te)?qe(j):t(Qe)?qe(Le,1):qe(Oe,-1)})}var Ne=i(ue,2);{var yt=qe=>{var ut=cd();p(qe,ut)};O(Ne,qe=>{t(m).ttl>=99999&&qe(yt)})}var Mt=i(L,2),wt=r(Mt),vt=i(W,2),Et=r(vt),Wt=r(Et),Vt=i(Et,2);{var fn=qe=>{var ut=vd(),me=r(ut);$(()=>{St(ut,`padding:3px 9px;font-size:12px;opacity:${t(k)===t(m).name?".5":"1"}`),ut.disabled=t(k)===t(m).name,h(me,t(k)===t(m).name?"…":"Laden")}),S("click",ut,()=>K(t(m).name)),p(qe,ut)};O(Vt,qe=>{!t(x)&&!t(A)&&t(o)&&qe(fn)})}$((qe,ut)=>{var me;bt(P,1,`li-dot ${t(q)??""}`),St(X,t(x)?"color:var(--accent)":""),h(ae,t(m).name),h(wt,`${qe??""} + ${(me=t(m).meta)!=null&&me.quant?" · "+t(m).meta.quant:""} + ${ut??""}`),St(Et,`white-space:nowrap;color:${t(x)?"var(--on)":"var(--mut)"}`),h(Wt,t(H))},[()=>{var qe;return(qe=t(m).meta)!=null&&qe.ctx?Math.round(t(m).meta.ctx/1024)+"k ctx":""},()=>{var qe;return(qe=t(m).meta)!=null&&qe.size_bytes?" · "+(t(m).meta.size_bytes/1073741824).toFixed(1)+" GB":""}]),p(ge,G)}),p(w,ee)},Y=w=>{var ee=pd(),ge=i(r(ee),4);S("click",ge,()=>V("cookbook")),p(w,ee)};O(pe,w=>{t(c).length?w(E):w(Y,-1)})}var fe=i(ve,2),Me=r(fe),ne=i(r(Me),2),ce=i(Me,2);{var ze=w=>{var ee=es();Ze(ee,21,()=>t(y),nt,(ge,m)=>{var x=fd(),A=r(x),q=r(A),H=r(q),G=i(q,2),P=r(G);$(()=>{ga(x,"href",t(m).link),h(H,t(m).title),h(P,`${t(m).source??""}${t(m).relevant?" · für dich":""}`)}),p(ge,x)}),p(w,ee)},Pe=w=>{var ee=hd();p(w,ee)};O(ce,w=>{t(y).length?w(ze):w(Pe,-1)})}$(w=>{h(Te,`${t(f)??""} `),h(R,t(_)),bt(Re,1,`kpi ${t(o)?"green":"red"}`),h(xe,t(o)?"Online":"Offline"),h(Ve,w),bt(tt,1,`kpi ${t(v)?"blue":"muted"}`),h(ht,t(v)?t(v).name:"Keins"),h(we,t(c).length?t(c).length+" konfiguriert":"")},[()=>{var w,ee;return((ee=(w=t(a))==null?void 0:w.swap_url)==null?void 0:ee.replace(/^https?:\/\//,""))??"—"}]),S("click",ne,()=>V("news")),S("keydown",ne,w=>w.key==="Enter"&&V("news")),p(e,De),wn()}$n(["click","keydown"]);var bd=g(""),_d=g('
'),yd=g('
Noch keine Modelle konfiguriert
Hol dir unter „Cookbook" ein passendes Modell.
'),xd=g('
kein Modell hinterlegt
leere Rolleleer '),kd=g(' '),wd=g('
'),Sd=g(' '),Md=g('
API-Name:
'),Ed=g('
ModellKannDetailsStatusPortAktionen
'),Ad=g('
Empfohlen für deine Hardware

'),Cd=g(''),Td=g(''),zd=g(''),$d=g('

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 Pd(e,n){kn(n,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr (längere Dateien/Chats), braucht aber mehr Speicher und wird etwas langsamer.",s="Die Rolle ist ein zusätzlicher, sprechender Name (z.B. coder). Du kannst in deinen Tools entweder den echten Modellnamen ODER die Rolle angeben — beides führt zum selben Modell.",l=[{id:"coder",label:"Coder",desc:"Programmieren & Code"},{id:"vision",label:"Vision",desc:"Bilder verstehen"},{id:"scout",label:"Scout",desc:"Schneller Allrounder"},{id:"reviewer",label:"Reviewer",desc:"Code/Texte prüfen"},{id:"manager",label:"Manager",desc:"Planen & koordinieren"}],o=U(()=>{var B;return((B=ui.value)==null?void 0:B.models)||[]});function d(){document.dispatchEvent(new Event("mc:refresh"))}let v=F(""),c=F(""),f=F(""),_=F(!1);const T=U(()=>t(o).filter(B=>!B.incomplete));async function y(){var Z;const B=t(v)||((Z=t(T)[0])==null?void 0:Z.name);if(!(!B||!t(c).trim())){u(_,!0),u(f,"(wecke Modell, kann beim Laden kurz dauern…)");try{const D=await Se("/api/chat",{method:"POST",body:JSON.stringify({model:B,message:t(c)})});u(f,D.reply,!0)}catch(D){u(f,"Fehler: "+D.message)}u(_,!1),d()}}const k=300;let I=F(!1),K=F(null),C=F(8192),V=F(!1);function Ae(B){var Z;u(K,t(o).find(D=>D.name===B),!0),t(K)&&(u(C,((Z=t(K).meta)==null?void 0:Z.ctx)||8192,!0),u(V,(t(K).ttl??k)>=99999),u(I,!0))}async function Ce(){const B=t(V)?99999:k;try{await Se("/api/update_model",{method:"POST",body:JSON.stringify({alias:t(K).name,ctx:t(C),ttl:B})}),he("Gespeichert — aktiv beim nächsten Modell-Start."),u(I,!1),d()}catch(Z){he(Z.message,!0)}}let Be=F(!1),De=F(""),se=F(""),le=F("");function $e(B){const Z=t(o).find(D=>D.name===B);u(De,B,!0),u(le,(Z==null?void 0:Z.role)||"",!0),u(se,""),u(Be,!0)}async function Te(B){try{await Se("/api/set_role",{method:"POST",body:JSON.stringify({alias:t(De),role:B})}),he(B?`Rolle gesetzt: ${B}`:"Rolle entfernt."),u(Be,!1),d()}catch(Z){he(Z.message,!0)}}async function We(B){if(await rn({title:`„${B}" entladen?`,body:"Das Modell wird aus dem Grafikspeicher geworfen und lädt beim nächsten Aufruf automatisch neu.",confirmLabel:"Entladen"}))try{await Se("/api/unload?model="+encodeURIComponent(B),{method:"POST"}),he("Entladen: "+B),setTimeout(d,600)}catch(Z){he(Z.message,!0)}}async function rt(B){if(await rn({title:`„${B}" wirklich löschen?`,body:"Das Modell wird aus der Konfiguration ausgetragen und seine Dateien werden von der Festplatte gelöscht, um Speicher freizugeben. Das lässt sich nicht rückgängig machen — später brauchst du dafür einen neuen Download.",confirmLabel:"Endgültig löschen",danger:!0}))try{const Z=await Se("/api/delete_model",{method:"POST",body:JSON.stringify({alias:B})});he(Z.note||"Gelöscht: "+B),setTimeout(d,600)}catch(Z){he(Z.message,!0)}}function Je(B){if(!B)return"–";const Z=[];return B.coder&&Z.push('Code'),B.vision&&Z.push('Bild'),B.reasoning&&Z.push('🧠 Reason'),B.moe&&Z.push(`🧩 MoE${B.active_b?" ·"+B.active_b+"B":""}`),B.tools==="yes"?Z.push('🛠 Tools'):B.tools==="likely"&&Z.push('🛠 Tools?'),B.embedding&&Z.push('🔢 Embed'),!B.coder&&!B.vision&&!B.embedding&&Z.unshift('Text'),Z.length?Z.join(" "):"–"}function R(B){if(!B)return"–";const Z=B.quant||"?",D=B.ctx?Math.round(B.ctx/1024)+"K":"?",J=B.size_bytes?(B.size_bytes/1024**3).toFixed(1)+" GB":"?";return`${Z} · ${D} · ${J}`}function _e(B){var Z;(Z=navigator.clipboard)==null||Z.writeText(B),he("Kopiert: "+B)}var Re=$d(),at=i(Ye(Re),2),Q=i(r(at),6);Ze(Q,21,()=>t(T),nt,(B,Z)=>{var D=bd(),J=r(D),M={};$(()=>{h(J,t(Z).name),M!==(M=t(Z).name)&&(D.value=(D.__value=t(Z).name)??"")}),p(B,D)});var de=i(Q,4),xe=i(de,2),et=r(xe),Ve=i(xe,2);{var tt=B=>{var Z=_d(),D=r(Z);$(()=>h(D,t(f))),p(B,Z)};O(Ve,B=>{t(f)&&B(tt)})}var Ke=i(at,2),it=r(Ke),dt=i(r(it)),ht=r(dt),ct=i(it,4);{var _t=B=>{var Z=yd();p(B,Z)},At=B=>{var Z=Ed(),D=i(r(Z));Ze(D,21,()=>t(o),nt,(J,M)=>{var ie=ua(),ke=Ye(ie);{var Ie=N=>{var ve=xd(),oe=r(ve),re=r(oe),we=i(oe,5),pe=r(we),E=i(pe,2);$(()=>h(re,t(M).name)),S("click",pe,()=>{var Y;he("Lade im Cookbook ein Modell und setze den Alias auf: "+t(M).name),(Y=document.querySelector(".nav-item[data-view='cookbook']"))==null||Y.dispatchEvent(new MouseEvent("click"))}),S("click",E,()=>rt(t(M).name)),p(N,ve)},z=N=>{var ve=Md(),oe=r(ve),re=r(oe),we=r(re),pe=i(we);{var E=H=>{var G=kd(),P=r(G);$(()=>h(P,t(M).role)),p(H,G)};O(pe,H=>{t(M).role&&H(E)})}var Y=i(re,2);{var fe=H=>{var G=wd(),P=r(G);$(()=>h(P,t(M).meta.filename)),p(H,G)};O(Y,H=>{var G;(G=t(M).meta)!=null&&G.filename&&H(fe)})}var Me=i(Y,2),ne=i(r(Me),2);Ze(ne,17,()=>{var H;return(H=t(M).api_ids)!=null&&H.length?t(M).api_ids:[t(M).name]},nt,(H,G)=>{var P=Sd(),W=r(P);$(()=>h(W,t(G))),S("click",P,()=>_e(t(G))),p(H,P)});var ce=i(oe);lt(ce,()=>{var H;return Je((H=t(M).meta)==null?void 0:H.capabilities)},!0);var ze=i(ce);lt(ze,()=>R(t(M).meta),!0);var Pe=i(ze);lt(Pe,()=>Zo(t(M).state,t(M).download_progress),!0);var w=i(Pe),ee=r(w),ge=i(w),m=r(ge),x=i(m,2),A=i(x,2),q=i(A,2);$(()=>{h(we,`${t(M).name??""} `),h(ee,t(M).port??"auto")}),S("click",m,()=>$e(t(M).name)),S("click",x,()=>Ae(t(M).name)),S("click",A,()=>We(t(M).name)),S("click",q,()=>rt(t(M).name)),p(N,ve)};O(ke,N=>{t(M).incomplete?N(Ie):N(z,-1)})}p(J,ie)}),p(B,Z)};O(ct,B=>{t(o).length?B(At,-1):B(_t)})}var xt=i(Ke,2);{var Pt=B=>{var Z=Cd(),D=r(Z),J=r(D),M=i(J,4),ie=r(M),ke=i(M,2),Ie=i(r(ke));lt(Ie,()=>xr(a));var z=i(ke,2),N=i(z,2);{var ve=fe=>{var Me=Ad(),ne=r(Me),ce=i(r(ne),2),ze=r(ce),Pe=i(ze,2),w=i(ne,2);$((ee,ge)=>{h(ze,`Optimal ~${ee??""}k → ~${t(K).meta.peak_ram_optimal_gb??""} GB Spitzenbedarf.`),h(Pe,` Aktuell ~${ge??""}k → ~${t(K).meta.peak_ram_gb??""} GB.`)},[()=>Math.round(t(K).meta.optimal_ctx/1024),()=>Math.round((t(K).meta.ctx||0)/1024)]),S("click",w,()=>u(C,t(K).meta.optimal_ctx,!0)),p(fe,Me)};O(N,fe=>{var Me;(Me=t(K).meta)!=null&&Me.optimal_ctx&&fe(ve)})}var oe=i(N,4),re=i(r(oe),2),we=r(re),pe=i(we,2),E=r(pe),Y=i(oe,2);$(()=>{h(ie,t(K).name),St(pe,`color:${t(V)?"var(--accent)":"var(--mut)"}`),h(E,t(V)?"An (TTL = ∞)":"Aus (TTL = 5 min)")}),S("click",Z,fe=>{fe.target.classList.contains("modal-overlay")&&u(I,!1)}),S("click",J,()=>u(I,!1)),Yt(z,()=>t(C),fe=>u(C,fe)),Vo(we,()=>t(V),fe=>u(V,fe)),S("click",Y,Ce),p(B,Z)};O(xt,B=>{t(I)&&t(K)&&B(Pt)})}var Ct=i(xt,2);{var kt=B=>{var Z=zd(),D=r(Z),J=r(D),M=i(J,2),ie=i(r(M));lt(ie,()=>xr(s));var ke=i(M,2),Ie=r(ke),z=i(ke,4);Ze(z,21,()=>l,nt,(we,pe)=>{var E=Td(),Y=r(E);$(()=>{bt(E,1,t(le)===t(pe).id?"primary":"ghost"),ga(E,"title",t(pe).desc),h(Y,t(pe).label)}),S("click",E,()=>Te(t(pe).id)),p(we,E)});var N=i(z,4),ve=i(N,2),oe=r(ve),re=i(oe,2);$(()=>h(Ie,t(De))),S("click",Z,we=>{we.target.classList.contains("modal-overlay")&&u(Be,!1)}),S("click",J,()=>u(Be,!1)),Yt(N,()=>t(se),we=>u(se,we)),S("click",oe,()=>Te("")),S("click",re,()=>Te(t(se).trim().toLowerCase())),p(B,Z)};O(Ct,B=>{t(Be)&&B(kt)})}$(()=>{xe.disabled=t(_),h(et,t(_)?"…":"Senden"),h(ht,t(o).length?t(o).length+" konfiguriert":"")}),On(Q,()=>t(v),B=>u(v,B)),Yt(de,()=>t(c),B=>u(c,B)),S("click",xe,y),p(e,Re),wn()}$n(["click"]);var Dd=g('
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),Id=g(''),Ld=g('
Gerade nichts los.
Alles ruhig — keine laufenden Aufgaben.
'),Od=g(' '),Bd=g(''),Rd=g(''),Fd=g('
'),Kd=g('
'),Nd=g('
'),qd=g('

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 Gd(e,n){kn(n,!0);const a=U(()=>na.value),s=U(()=>na.tracked),l=U(()=>Lr.value);let o=Lt({cpu:[],ram:[],gpu:[]});di(()=>{var Re;if(!t(l))return;const R=t(l).gpu,_e=R&&R.vram.total+R.gtt.total>0?(R.vram.used+R.gtt.used)/(R.vram.total+R.gtt.total)*100:0;o.cpu=[...o.cpu,((Re=t(l).cpu)==null?void 0:Re.percent)??0].slice(-60),o.ram=[...o.ram,t(l).ram.percent].slice(-60),o.gpu=[...o.gpu,_e].slice(-60)});const d=U(()=>()=>{var _e;const R=(_e=t(l))==null?void 0:_e.gpu;return R&&R.vram.total+R.gtt.total>0?(R.vram.used+R.gtt.used)/(R.vram.total+R.gtt.total)*100:0}),v=U(()=>t(a).filter(R=>R.state!=="running"&&R.state!=="queued").length),c=U(()=>t(a).filter(R=>R.state==="failed").length);function f(R){if(R.state!=="running")return null;if(typeof R.progress=="number")return Math.min(100,R.progress);const Re=((R.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return Re?Math.min(100,parseFloat(Re[1])):null}function _(R){return R==null||R<0?"":R>=90?`noch ~${Math.round(R/60)} min`:`noch ~${Math.max(1,Math.round(R))} s`}function T(R){return R==="done"?'fertig':R==="failed"?'fehler':R==="canceled"?'abgebrochen':'läuft…'}function y(R){return R==="done"?"on":R==="failed"||R==="canceled"?"":"load"}async function k(R){try{await Se(`/api/jobs/${R}/cancel`,{method:"POST"}),he("Abbruch angefordert…")}catch(_e){he(_e.message,!0)}}async function I(R){try{await Se(`/api/jobs/${R}`,{method:"DELETE"})}catch(_e){he(_e.message,!0)}}async function K(){try{const R=await Se("/api/jobs/clear",{method:"POST"});he(`${R.removed} Einträge entfernt.`)}catch(R){he(R.message,!0)}}function C(R,_e){return R.map(Re=>`
`).join("")}var V=qd(),Ae=i(Ye(V),2);{var Ce=R=>{const _e=U(()=>t(d)());var Re=Dd(),at=Ye(Re),Q=r(at),de=i(r(Q),2),xe=r(de),et=i(de,2),Ve=r(et),tt=i(Q,2),Ke=i(r(tt),2),it=r(Ke),dt=i(Ke,2),ht=r(dt),ct=i(tt,2),_t=i(r(ct),2),At=r(_t),xt=i(_t,2),Pt=r(xt),Ct=i(at,2),kt=i(r(Ct),4),B=r(kt),Z=i(r(B)),D=r(Z),J=i(B,2),M=i(r(J),2),ie=r(M),ke=i(J,2),Ie=i(r(ke)),z=r(Ie),N=i(ke,2),ve=i(r(N),2),oe=r(ve),re=i(kt,2),we=r(re),pe=i(r(we));lt(pe,()=>C(o.cpu,"--accent"),!0);var E=i(we,2),Y=i(r(E));lt(Y,()=>C(o.ram,"--purple"),!0);var fe=i(E,2),Me=i(r(fe));lt(Me,()=>C(o.gpu,"--on"),!0),$((ne,ce,ze,Pe,w,ee,ge,m,x,A,q,H,G)=>{h(xe,ne),h(Ve,ce),h(it,ze),h(ht,`${Pe??""} / ${w??""}`),h(At,ee),h(Pt,ge),h(D,`${m??""} / ${x??""}`),h(ie,A),h(z,`${q??""} % belegt`),h(oe,`${H??""} / ${G??""}`)},[()=>{var ne;return Math.round(((ne=t(l).cpu)==null?void 0:ne.percent)??0)},()=>{var ne;return((ne=t(l).cpu)==null?void 0:ne.temp)!=null?`${Math.round(t(l).cpu.temp)}° CPU-Temp`:"Auslastung"},()=>Math.round(t(l).ram.percent),()=>Yn(t(l).ram.used),()=>Yn(t(l).ram.total),()=>Math.round(t(_e)),()=>t(l).gpu_temp!=null?`${Math.round(t(l).gpu_temp)}° GPU-Temp`:"VRAM + GTT",()=>Yn(t(l).ram.used),()=>Yn(t(l).ram.total),()=>t(l).gpu?`${Yn(t(l).gpu.vram.used+t(l).gpu.gtt.used)} / ${Yn(t(l).gpu.vram.total+t(l).gpu.gtt.total)}`:"–",()=>{var ne;return Math.round(((ne=t(l).disk)==null?void 0:ne.percent)??0)},()=>t(l).gpu_temp!=null?Math.round(t(l).gpu_temp)+"°":"–",()=>{var ne;return((ne=t(l).cpu)==null?void 0:ne.temp)!=null?Math.round(t(l).cpu.temp)+"°":"–"}]),p(R,Re)};O(Ae,R=>{t(l)&&R(Ce)})}var Be=i(Ae,2),De=r(Be),se=i(r(De),2),le=r(se),$e=i(se,2);{var Te=R=>{var _e=Id();S("click",_e,K),p(R,_e)};O($e,R=>{t(v)&&R(Te)})}var We=i(De,4);{var rt=R=>{var _e=Ld();p(R,_e)},Je=R=>{var _e=ua(),Re=Ye(_e);Ze(Re,17,()=>t(a),nt,(at,Q)=>{const de=U(()=>f(t(Q))),xe=U(()=>t(Q).state==="running"?_(t(Q).eta_s):""),et=U(()=>t(Q).state==="running"&&t(Q).rate_bps?Yn(t(Q).rate_bps)+"/s":""),Ve=U(()=>[t(xe),t(et)].filter(Boolean).join(" · ")),tt=U(()=>t(s).includes(t(Q).id));var Ke=Nd(),it=r(Ke),dt=r(it),ht=i(dt,2),ct=r(ht),_t=i(ht,2);{var At=M=>{var ie=Od(),ke=r(ie);$(Ie=>h(ke,`${Ie??""} %${t(Ve)?` · ${t(Ve)}`:""}`),[()=>Math.round(t(de))]),p(M,ie)};O(_t,M=>{t(de)!=null&&M(At)})}var xt=i(_t,2);{var Pt=M=>{var ie=Bd();$(()=>St(ie,`${t(de)==null?"margin-left:auto;":""}margin-right:2px;padding:2px 9px;font-size:12px`)),S("click",ie,ke=>{ke.stopPropagation(),k(t(Q).id)}),p(M,ie)},Ct=M=>{var ie=Rd();S("click",ie,ke=>{ke.stopPropagation(),I(t(Q).id)}),p(M,ie)};O(xt,M=>{t(Q).state==="running"?M(Pt):M(Ct,-1)})}var kt=i(xt,2);lt(kt,()=>T(t(Q).state));var B=i(it,2);{var Z=M=>{var ie=Fd(),ke=r(ie);$(()=>St(ke,`width:${t(de)??""}%`)),p(M,ie)};O(B,M=>{t(de)!=null&&t(Q).state==="running"&&M(Z)})}var D=i(B,2);{var J=M=>{var ie=Kd(),ke=r(ie);$(Ie=>h(ke,Ie),[()=>(t(Q).log||[]).join(` +`)]),p(M,ie)};O(D,M=>{t(tt)&&M(J)})}$(M=>{bt(dt,1,`li-dot ${M??""}`),h(ct,t(Q).label)},[()=>y(t(Q).state)]),S("click",it,()=>na.toggle(t(Q).id)),S("keydown",it,M=>M.key==="Enter"&&na.toggle(t(Q).id)),p(at,Ke)}),p(R,_e)};O(We,R=>{t(a).length?R(Je,-1):R(rt)})}$(()=>h(le,t(a).length?t(c)?t(c)+" Fehler":t(a).length+" gesamt":"")),p(e,V),wn()}$n(["click","keydown"]);var Vd=g(' '),Wd=g(''),jd=g('✓ fertig'),Ud=g('✗ fehlgeschlagen'),Hd=g('abgebrochen'),Jd=g('läuft…'),Qd=g('
'),Zd=g('

Aktueller Vorgang

'),Yd=g('

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 Xd(e,n){kn(n,!0);const a=U(()=>ui.value),s=U(()=>na.value);let l=null,o=F(`Verbinde… +`),d=F("llama-swap"),v,c=F(null),f=F("");const _=new Set,T=U(()=>t(c)?t(s).find(E=>E.id===t(c)):null);di(()=>{if(!t(T))return;const E=t(T),Y=E.state==="done",fe=E.state==="failed",Me=E.state==="canceled";(Y||fe||Me)&&!_.has(E.id)&&(_.add(E.id),he(Y?`✓ ${t(f)} abgeschlossen.`:Me?`${t(f)} abgebrochen.`:`✗ ${t(f)} fehlgeschlagen.`,fe),Y&&setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),800))});function y(E,Y){u(c,E,!0),u(f,Y,!0),na.track(E)}vi(()=>{k()}),jo(()=>{l==null||l.close()});function k(){l==null||l.close();const E=t(d);u(o,`Verbinde mit ${E}… +`);const Y=location.protocol==="https:"?"wss:":"ws:";l=new WebSocket(`${Y}//${location.host}/api/logs/${E}?token=${encodeURIComponent(sl())}`),l.onmessage=fe=>{u(o,t(o)+fe.data),v&&(v.scrollTop=v.scrollHeight)},l.onclose=()=>{u(o,t(o)+` +— Verbindung getrennt —`)},l.onerror=()=>l==null?void 0:l.close()}async function I(E,Y,fe){if(await rn({title:Y,body:fe,confirmLabel:"Neustarten"}))try{await Se(`/api/service/${E}/restart`,{method:"POST"}),he("Neustart ausgelöst: "+E),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),2e3)}catch(Me){he(Me.message,!0)}}async function K(){if(await rn({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 E=await Se("/api/self-update",{method:"POST"});he("Update läuft — Dashboard startet gleich neu."),y(E.job_id,"Mission Control Update")}catch(E){he(E.message,!0)}}async function C(){if(!await rn({title:"LLM-Engine aktualisieren?",body:"Lädt die neueste llama.cpp-ROCm-Version und installiert sie. Die Engine ist während des Updates kurz nicht erreichbar."}))return;const E=await ar({title:"sudo-Passwort",body:"Für das Engine-Update wird einmalig dein sudo-Passwort gebraucht (für den Update-Befehl).",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Update starten"});if(E!==null)try{const Y=await Se("/api/update",{method:"POST",body:JSON.stringify({password:E})});he("LLM-Engine-Update läuft."),y(Y.job_id,"LLM-Engine-Update")}catch(Y){he(Y.message,!0)}}async function V(){if(await rn({title:"Grafikspeicher leeren?",body:"Alle geladenen Modelle werden entladen. Sie laden beim nächsten Aufruf automatisch neu — es geht nichts verloren.",confirmLabel:"Leeren"}))try{await Se("/api/unload",{method:"POST"}),he("Grafikspeicher geleert."),setTimeout(()=>document.dispatchEvent(new Event("mc:refresh")),600)}catch(E){he(E.message,!0)}}async function Ae(){if(!await rn({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 E=await ar({title:"sudo-Passwort",body:"Für die System-Updates wird einmalig dein sudo-Passwort gebraucht.",placeholder:"sudo-Passwort",password:!0,confirmLabel:"Installieren"});if(E)try{const Y=await Se("/api/os-update",{method:"POST",body:JSON.stringify({password:E})});he("OS-Update gestartet."),y(Y.job_id,"OS-Update")}catch(Y){he(Y.message,!0)}}async function Ce(){if(!await rn({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 E=await ar({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(E)try{await Se("/api/reboot",{method:"POST",body:JSON.stringify({password:E})}),he("Reboot ausgelöst — bis gleich.")}catch(Y){he(Y.message,!0)}}async function Be(){u(De,"prüfe…");try{const E=await Se("/api/integration/test");u(De,E.ok?`✓ Engine antwortet — ${E.models.length} Modell(e): ${E.models.join(", ")}`:`✗ keine Verbindung: ${E.error}`,!0),u(se,E.ok,!0)}catch(E){u(De,"✗ "+E.message),u(se,!1)}}let De=F(""),se=F(!1);const le=U(()=>{var E;return((E=t(a))==null?void 0:E.models)||[]}),$e=["running","ready","loading","starting"],Te=U(()=>t(le).find(E=>$e.includes(E.state)));function We(E){if(!E||E.state!=="running")return null;if(typeof E.progress=="number")return Math.min(100,E.progress);const fe=((E.log||[]).at(-1)||"").match(/(\d+(?:\.\d+)?)\s*%/);return fe?Math.min(100,parseFloat(fe[1])):null}var rt=Yd(),Je=i(Ye(rt),2),R=r(Je),_e=i(r(R),2),Re=r(_e),at=i(R,4),Q=r(at),de=i(r(Q)),xe=r(de),et=i(Q,2),Ve=i(r(et),2),tt=r(Ve),Ke=i(et,2),it=i(r(Ke),2),dt=r(it),ht=i(at,2),ct=r(ht),_t=i(ct,2);{var At=E=>{var Y=Vd(),fe=r(Y);$(()=>{St(Y,`color:${t(se)?"#7ee29a":"#ff9b95"}`),h(fe,t(De))}),p(E,Y)};O(_t,E=>{t(De)&&E(At)})}var xt=i(Je,2),Pt=i(r(xt),4),Ct=i(Pt,2),kt=i(Ct,2),B=i(kt,2),Z=i(B,2),D=i(xt,2),J=i(r(D),4),M=i(J,2),ie=i(D,2);{var ke=E=>{const Y=U(()=>t(T)),fe=U(()=>t(Y).state==="done"),Me=U(()=>t(Y).state==="failed"),ne=U(()=>t(Y).state==="canceled"),ce=U(()=>t(fe)||t(Me)||t(ne)),ze=U(()=>We(t(Y)));var Pe=Zd(),w=r(Pe),ee=i(r(w),2);{var ge=j=>{var te=Wd();S("click",te,async()=>{await rn({title:t(f)+" abbrechen?",body:"Der laufende Vorgang wird gestoppt.",confirmLabel:"Abbrechen",danger:!0})&&Se(`/api/jobs/${t(Y).id}/cancel`,{method:"POST"})}),p(j,te)};O(ee,j=>{t(ce)||j(ge)})}var m=i(ee,2),x=r(m);{var A=j=>{var te=jd();p(j,te)},q=j=>{var te=Ud();p(j,te)},H=j=>{var te=Hd();p(j,te)},G=j=>{var te=Jd();p(j,te)};O(x,j=>{t(fe)?j(A):t(Me)?j(q,1):t(ne)?j(H,2):j(G,-1)})}var P=i(w,2),W=r(P),L=i(P,2);{var X=j=>{var te=Qd(),Le=r(te);$(()=>St(Le,`width:${t(ze)??""}%`)),p(j,te)};O(L,j=>{t(ze)!=null&&!t(ce)&&j(X)})}var ae=i(L,2),ue=r(ae);$(j=>{h(W,`${t(f)??""}${t(ce)?t(fe)?" — erfolgreich.":t(ne)?" — abgebrochen.":" — fehlgeschlagen.":" läuft…"}`),h(ue,j)},[()=>(t(Y).log||[]).join(` +`)]),p(E,Pe)};O(ie,E=>{t(T)&&E(ke)})}var Ie=i(ie,2),z=r(Ie),N=i(r(z),2),ve=r(N);ve.value=ve.__value="llama-swap";var oe=i(ve);oe.value=oe.__value="mission-control";var re=i(oe);re.value=re.__value="system";var we=i(z,4),pe=r(we);Wo(we,E=>v=E,()=>v),$(E=>{var Y,fe,Me;St(_e,`margin-left:auto;${(Y=t(a))!=null&&Y.swap_ok?"background:rgba(63,185,80,.12);border-color:rgba(63,185,80,.25);color:#7ee29a":"background:rgba(248,81,73,.12);border-color:rgba(248,81,73,.3);color:#ff9b95"}`),h(Re,(fe=t(a))!=null&&fe.swap_ok?"● erreichbar":"● offline"),h(xe,(((Me=t(a))==null?void 0:Me.swap_url)||"—")+"/v1"),h(tt,t(Te)?t(Te).name+` (${t(Te).state})`:"nichts geladen — lädt bei der nächsten Anfrage"),h(dt,E),h(pe,t(o))},[()=>t(le).filter(E=>!E.incomplete).length||"keine"]),S("click",ct,Be),S("click",Pt,()=>I("llama-swap","LLM-Engine neustarten?","Die Engine startet neu. Geladene Modelle werden kurz entladen (~5 Sekunden), laden danach automatisch wieder.")),S("click",Ct,()=>I("mission-control","Dashboard neustarten?","Diese Oberfläche trennt sich kurz und verbindet automatisch wieder.")),S("click",kt,K),S("click",B,C),S("click",Z,V),S("click",J,Ae),S("click",M,Ce),S("change",N,k),On(N,()=>t(d),E=>u(d,E)),p(e,rt),wn()}$n(["click","change"]);var ec=g('
Lade Setups…
'),tc=g(' ×',1),ir=g('
★ Beste Wahl für dein System
'),nc=g('
Dein Setup
'),ac=g(''),ic=g('
'),rc=g('

Fertige Setups — automatisch aktuell für deine Hardware

Hier starten: Fertige Modell-Bundles für deinen Anwendungsfall — ein Klick installiert alles. Die Hardware-Ampel zeigt vorab, ob das Setup auf deinen PC passt.
'),sc=g('· ⚠ Cache veraltet'),lc=g(" ",1),oc=g('
Frage Quellen ab…
'),dc=g('
'),cc=g('✓ installiert'),vc=g(''),uc=g('

'),pc=g('

'),fc=g(''),hc=g(''),gc=g('

'),mc=g('
'),bc=g('

Aktuell die besten Modelle für dein System

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

Profi-Suche (HuggingFace)

Direkt HuggingFace durchsuchen — oder eine Modell-URL einfügen für den direkten Sprung.
Filter:
',1),_c=g('
'),yc=g('
'),xc=g(" "),kc=g('
'),wc=g('
Größter Spitzenbedarf: . Es läuft immer nur ein Modell gleichzeitig — das größte bestimmt, ob das Setup passt.
'),Sc=g('Alternative: — passt auf dein System.',1),Mc=g('
⚠ Dieses Setup übersteigt deinen verfügbaren Speicher.
'),Ec=g(''),Ac=g('
Lade Dateien von HuggingFace…
'),ts=g(""),Cc=g('
Empfohlener Kontext für deine Hardware: übernehmen
'),Tc=g('
Ressourcen-Check
'),zc=g('
⚠ Diese Datei ist zu groß für deinen Speicher. Kleinere Alternative: — einfach auswählen.
'),$c=g('
⚠ Alle Varianten dieses Modells sind zu groß für deinen Speicher. Ein kleineres Modell aus den Empfehlungen wäre die bessere Wahl.
'),Pc=g('
',1),Dc=g('
Keine GGUF-Dateien im Repo gefunden.
'),Ic=g(''),Lc=g('
'),Oc=g(''),Bc=g('

Cookbook

Modelle finden, installieren und eigene Setups zusammenstellen.
',1);function Rc(e,n){kn(n,!0);const a="Kontext = das Kurzzeitgedächtnis des Modells. Größer = merkt sich mehr, braucht aber mehr Speicher und wird etwas langsamer.",s="MoE (Mixture of Experts): viele Parameter fürs Wissen, aber pro Wort ist nur ein kleiner Teil aktiv → fast große-Modell-Qualität bei hohem Tempo. Ideal für deine APU.",l={perfect:0,marginal:1,too_tight:2},o=["qwen2.5","qwen3","qwen2","hermes","mistral","mixtral","devstral","command-r","command_r","llama-3.1","llama3.1","llama-3.3","llama-4","llama4","functionary","watt","firefunction","granite","glm-4","ministral","gemma-3","gemma3"],d=["-r1","deepseek-r1","qwq","magistral","-think","thinking","-o1","gpt-oss","reasoning","exaone-deep","phi-4-reasoning"];function v(m,x=[]){const A=(m||"").toLowerCase(),q=(x||[]).map(P=>String(P).toLowerCase()),H=q.some(P=>P.includes("function-calling")||P.includes("tool-use")||P.includes("tools")),G=o.some(P=>A.includes(P));return{moe:y(A),active_b:k(A),vision:["-vl","vision","llava","pixtral","multimodal","-mm-"].some(P=>A.includes(P))||q.includes("image-text-to-text"),coder:["coder","-code","code-","codestral","starcoder"].some(P=>A.includes(P)),reasoning:d.some(P=>A.includes(P))||q.includes("reasoning"),tools:H?"yes":G?"likely":"no"}}let c=F(Lt({tools:!1,moe:!1,reasoning:!1,vision:!1,coder:!1}));const f=[["tools","🛠 Tools"],["moe","🧩 MoE"],["reasoning","🧠 Logik"],["vision","👁 Bild"],["coder","💻 Code"]];function _(m,x=[]){const A=Object.keys(t(c)).filter(H=>t(c)[H]);if(!A.length)return!0;const q=v(m,x);return A.every(H=>H==="tools"?q.tools!=="no":q[H])}function T(m,x=[]){const A=v(m,x),q=[];return A.coder&&q.push('💻 Code'),A.vision&&q.push('👁 Bild'),A.reasoning&&q.push('🧠 Logik'),A.moe&&q.push(`🧩 MoE${A.active_b?` · ~${A.active_b}B`:""}`),A.tools==="yes"?q.push('🛠 Tools'):A.tools==="likely"&&q.push('🛠 Tools?'),!A.coder&&!A.vision&&q.unshift('💬 Chat'),q.join(" ")}function y(m=""){const x=m.toLowerCase();return/\d+x\d+(\.\d+)?b/.test(x)||new RegExp("(?{xt(),Pt()});async function xt(){u(Be,!0);try{const m=await Se("/api/cookbook/recipes");u(Ae,m.recipes||[],!0),u(Ce,m.recommended_id||null,!0)}catch(m){he(m.message,!0)}u(Be,!1)}async function Pt(m=!1){u(se,!0);try{const x=await Se("/api/cookbook/discover"+(m?"?force=true":""));u(De,x,!0),u(le,x.stale,!0)}catch(x){he("Empfehlungen nicht ladbar: "+x.message,!0)}u(se,!1)}function Ct(m){m=m.trim();const x=m.match(/huggingface\.co\/([^\s/]+\/[^\s/?#]+)/i);return x?x[1]:/^[\w.-]+\/[\w.-]+$/.test(m)?m:null}async function kt(){const m=t($e).trim(),x=Ct(m),A=m;if(!A&&!x){u(Te,[],!0);return}u(We,!0),u(Je,[],!0),u(R,-1);try{if(x)u(Te,[{id:x,author:x.split("/")[0],downloads:0}],!0);else{const q=`https://huggingface.co/api/models?search=${encodeURIComponent(A)}&filter=gguf&full=true&sort=${encodeURIComponent(t(rt))}&direction=-1&limit=40`,H=await fetch(q);u(Te,await H.json(),!0)}t(Te).forEach((q,H)=>B(H,q.id))}catch(q){he(q.message,!0),u(Te,[],!0)}u(We,!1)}async function B(m,x){var A;try{const q=await Se("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:x,ctx:8192})});if(!((A=q.files)!=null&&A.length)){t(Je)[m]=null,Z();return}const H=q.files.find(G=>{var P;return(P=G.quant)==null?void 0:P.includes("Q4_K_M")})||q.files[0];t(Je)[m]=H.fit.level,Z()}catch{t(Je)[m]=null,Z()}}function Z(){let m=-1,x=99;t(Je).forEach((A,q)=>{if(A==null)return;const H=l[A]??99;H=0&&x<=1?m:-1,!0)}function D(m){u(_e,t(Ae).find(x=>x.id===m),!0)}async function J(m){const x=document.getElementById("cb-r-install-btn");x&&(x.disabled=!0,x.textContent="Starte…");try{const A=await Se("/api/cookbook/install-recipe",{method:"POST",body:JSON.stringify({recipe_id:m,hf_token:ei()})});he(`${A.count} Download${A.count!==1?"s":""} läuft — Modelle erscheinen danach automatisch im Modelle-Tab.`),u(_e,null),At("activity")}catch(A){he(A.message,!0),x&&(x.disabled=!1,x.textContent="Installieren")}}async function M(m,x){var A,q;u(Re,!0),u(at,x,!0),u(Q,m,!0),u(et,""),u(Ve,8192),u(de,null),u(Ke,null),u(xe,""),u(tt,!0);try{if(u(de,await Se("/api/cookbook/analyze",{method:"POST",body:JSON.stringify({repo_id:m,ctx:8192})}),!0),(q=(A=t(de))==null?void 0:A.files)!=null&&q.length){const H=t(de).files.find(G=>{var P;return(P=G.quant)==null?void 0:P.includes("Q4_K_M")})||t(de).files[0];u(xe,H.filename,!0),H.optimal_ctx&&t(Ve)===8192&&u(Ve,H.optimal_ctx,!0),ie()}}catch(H){he(H.message,!0)}u(tt,!1)}function ie(){var m,x,A;!((x=(m=t(de))==null?void 0:m.files)!=null&&x.length)||!t(xe)||(u(Ke,t(de).files.find(q=>q.filename===t(xe))||null,!0),(A=t(Ke))!=null&&A.optimal_ctx&&t(Ve)===8192&&u(Ve,t(Ke).optimal_ctx,!0))}async function ke(){var m,x;if(!t(Q)||!t(xe))return he("Bitte eine GGUF-Datei wählen.",!0);u(tt,!0);try{const A=((m=t(de))==null?void 0:m.params_b)??7,q=((x=t(Ke))==null?void 0:x.quant)??"Q4_K_M";await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:t(Q),role:t(et),params_b:A,quant:q,file:t(xe),ctx:t(Ve),hf_token:ei()})}),he("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),u(Re,!1),At("activity")}catch(A){he("Fehler: "+A.message,!0)}u(tt,!1)}async function Ie(m,x,A,q){q.disabled=!0,q.textContent="Starte…";try{await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:m,role:x,params_b:A,quant:"Q4_K_M",hf_token:ei()})}),he("Download läuft — Modell erscheint danach automatisch im Modelle-Tab."),At("activity")}catch(H){he(H.message,!0),q.disabled=!1,q.textContent="Installieren"}}function z(){u(_t,null),u(dt,""),u(ht,""),u(ct,[{repo:"",role:"",quant:"Q4_K_M"}],!0),u(it,!0)}function N(m){const x=t(Ae).find(A=>A.id===m);x&&(u(_t,m,!0),u(dt,x.title,!0),u(ht,x.desc||"",!0),u(ct,x.models.map(A=>({repo:A.repo,role:A.role,quant:A.quant||"Q4_K_M"})),!0),u(it,!0))}async function ve(){if(!t(dt).trim())return he("Bitte einen Titel angeben.",!0);const m=t(ct).filter(x=>x.repo.trim());if(!m.length)return he("Mindestens ein Modell (Repo) angeben.",!0);try{t(_t)?(await Se("/api/cookbook/user-recipe/"+encodeURIComponent(t(_t)),{method:"PUT",body:JSON.stringify({title:t(dt),desc:t(ht),models:m})}),he("Setup aktualisiert.")):(await Se("/api/cookbook/user-recipe",{method:"POST",body:JSON.stringify({title:t(dt),desc:t(ht),models:m})}),he("Setup gespeichert.")),u(it,!1),xt()}catch(x){he(x.message,!0)}}async function oe(m){const x=t(Ae).find(A=>A.id===m);if(await rn({title:`„${(x==null?void 0:x.title)||m}" löschen?`,body:"Dein eigenes Setup wird aus dem Cookbook entfernt. Bereits installierte Modelle bleiben unangetastet.",confirmLabel:"Löschen",danger:!0}))try{await Se("/api/cookbook/user-recipe/"+encodeURIComponent(m),{method:"DELETE"}),he("Setup gelöscht."),xt()}catch(A){he(A.message,!0)}}var re=Bc(),we=i(Ye(re),2),pe=r(we),E=i(pe,2),Y=i(we,2);{var fe=m=>{var x=rc(),A=r(x),q=i(r(A),2),H=i(A,4);{var G=W=>{var L=ec();p(W,L)},P=W=>{var L=ic();Ze(L,21,()=>t(Ae),nt,(X,ae)=>{const ue=U(()=>t(ae).id===t(Ce));var j=ac(),te=r(j);{var Le=me=>{var Ue=tc(),je=Ye(Ue),Ee=i(je,2);S("click",je,ye=>{ye.stopPropagation(),N(t(ae).id)}),S("keydown",je,ye=>{ye.key==="Enter"&&(ye.stopPropagation(),N(t(ae).id))}),S("click",Ee,ye=>{ye.stopPropagation(),oe(t(ae).id)}),S("keydown",Ee,ye=>{ye.key==="Enter"&&(ye.stopPropagation(),oe(t(ae).id))}),p(me,Ue)};O(te,me=>{t(ae).user&&me(Le)})}var Qe=i(te,2);{var Oe=me=>{var Ue=ir();p(me,Ue)},Ne=me=>{var Ue=nc();p(me,Ue)};O(Qe,me=>{t(ue)?me(Oe):t(ae).user&&me(Ne,1)})}var yt=i(Qe,2),Mt=r(yt),wt=r(Mt),vt=r(wt),Et=i(Mt,2),Wt=r(Et),Vt=i(yt,2),fn=r(Vt),qe=i(Vt,2),ut=r(qe);$((me,Ue)=>{bt(j,1,`card-btn${t(ue)?" cb-best":""}`),h(vt,t(ae).title),bt(Et,1,`fit-badge ${me??""}`),h(Wt,Ue),h(fn,t(ae).desc),h(ut,`${t(ae).models.length??""} Modell${t(ae).models.length>1?"e":""} im Setup`)},[()=>I(t(ae).fit_level),()=>K(t(ae).fit_level)]),S("click",j,()=>D(t(ae).id)),p(X,j)}),p(W,L)};O(H,W=>{t(Be)?W(G):W(P,-1)})}S("click",q,z),p(m,x)};O(Y,m=>{t(V)==="setups"&&m(fe)})}var Me=i(Y,2);{var ne=m=>{var x=bc(),A=Ye(x),q=r(A),H=i(r(q),2),G=r(H);{var P=me=>{const Ue=U(()=>Math.round((Date.now()/1e3-t(De).updated)/60));var je=lc(),Ee=Ye(je);{var ye=gt=>{var zt=Ya();$(()=>h(zt,`Quellen befragt vor ${t(Ue)??""} min`)),p(gt,zt)},st=gt=>{var zt=Ya();$(mt=>h(zt,`Quellen befragt vor ${mt??""} h`),[()=>Math.round(t(Ue)/60)]),p(gt,zt)},Tt=gt=>{var zt=Ya();$(mt=>h(zt,`Quellen befragt vor ${mt??""} Tg.`),[()=>Math.round(t(Ue)/1440)]),p(gt,zt)};O(Ee,gt=>{t(Ue)<60?gt(ye):t(Ue)<1440?gt(st,1):gt(Tt,-1)})}var Dt=i(Ee,2);{var Ot=gt=>{var zt=sc();p(gt,zt)};O(Dt,gt=>{t(le)&>(Ot)})}p(me,je)};O(G,me=>{var Ue;(Ue=t(De))!=null&&Ue.updated&&me(P)})}var W=i(H,2),L=r(W),X=i(q,4);{var ae=me=>{var Ue=oc();p(me,Ue)},ue=me=>{var Ue=ua(),je=Ye(Ue);Ze(je,17,()=>t(De).categories,nt,(Ee,ye)=>{var st=pc(),Tt=r(st),Dt=r(Tt),Ot=r(Dt),gt=i(Tt,2);Ze(gt,21,()=>t(ye).models,nt,(zt,mt)=>{const Kn=U(()=>t(ye).recommended&&t(mt).repo===t(ye).recommended);var ma=uc(),Ka=r(ma);{var pi=Ht=>{var hn=ir();p(Ht,hn)};O(Ka,Ht=>{t(Kn)&&Ht(pi)})}var fi=i(Ka,2),hi=r(fi),gi=r(hi),mi=r(gi),Wi=i(gi,2),bi=r(Wi),_i=i(hi,2),yi=r(_i),xi=i(fi,2);lt(xi,()=>T(t(mt).repo,t(mt).tags),!0);var ki=i(xi,2),ji=r(ki),Nn=i(ki,2);Ze(Nn,17,()=>t(mt).requirements||[],nt,(Ht,hn)=>{var ba=dc(),cl=r(ba);$(()=>h(cl,`⚠ ${t(hn)??""}`)),p(Ht,ba)});var Na=i(Nn,4),Ui=r(Na);{var Hi=Ht=>{var hn=cc();$(()=>ga(hn,"title",`bereits eingerichtet als ${t(mt).installed??""}`)),p(Ht,hn)},Ji=Ht=>{var hn=vc();S("click",hn,ba=>Ie(t(mt).repo,t(mt).role,t(mt).params_b,ba.currentTarget)),p(Ht,hn)};O(Ui,Ht=>{t(mt).installed?Ht(Hi):Ht(Ji,-1)})}$((Ht,hn,ba)=>{bt(ma,1,`card${t(Kn)?" res-best":""}`),h(mi,t(mt).name),h(bi,`${t(mt).author??""} · ${t(mt).params_b??""}B`),bt(_i,1,`fit-badge ${Ht??""}`),h(yi,t(mt).fit.text),h(ji,`${hn??""} · ⬇ ${ba??""}`)},[()=>I(t(mt).fit.level),()=>C(t(mt).fit),()=>(t(mt).downloads||0).toLocaleString()]),p(zt,ma)}),$(()=>h(Ot,t(ye).title)),p(Ee,st)}),p(me,Ue)};O(X,me=>{var Ue;t(se)&&!t(De)?me(ae):(Ue=t(De))!=null&&Ue.categories&&me(ue,1)})}var j=i(A,2),te=i(r(j),4),Le=r(te),Qe=i(Le,2),Oe=r(Qe);Oe.value=Oe.__value="downloads";var Ne=i(Oe);Ne.value=Ne.__value="trending";var yt=i(Ne);yt.value=yt.__value="created_at";var Mt=i(Qe,2),wt=r(Mt),vt=i(te,2),Et=i(r(vt),2);Ze(Et,17,()=>f,nt,(me,Ue)=>{var je=U(()=>En(t(Ue),2));let Ee=()=>t(je)[0],ye=()=>t(je)[1];var st=fc(),Tt=r(st);$(()=>{bt(st,1,t(c)[Ee()]?"primary":"ghost"),h(Tt,ye())}),S("click",st,()=>t(c)[Ee()]=!t(c)[Ee()]),p(me,st)});var Wt=i(Et,2);{var Vt=me=>{var Ue=hc();S("click",Ue,()=>u(c,{tools:!1,moe:!1,reasoning:!1,vision:!1,coder:!1},!0)),p(me,Ue)},fn=U(()=>Object.values(t(c)).some(me=>me));O(Wt,me=>{t(fn)&&me(Vt)})}var qe=i(vt,2);{var ut=me=>{var Ue=mc();Ze(Ue,21,()=>t(Te),nt,(je,Ee,ye)=>{var st=ua(),Tt=Ye(st);{var Dt=gt=>{var zt=gc(),mt=r(zt);{var Kn=Nn=>{var Na=ir();p(Nn,Na)};O(mt,Nn=>{ye===t(R)&&Nn(Kn)})}var ma=i(mt,2),Ka=r(ma),pi=r(Ka),fi=r(pi),hi=i(pi,2),gi=r(hi),mi=i(Ka,2),Wi=r(mi),bi=i(ma,2);lt(bi,()=>T(t(Ee).id,t(Ee).tags),!0);var _i=i(bi,4),yi=r(_i),xi=r(yi),ki=i(yi,2),ji=r(ki);$((Nn,Na,Ui,Hi,Ji)=>{bt(zt,1,`card${ye===t(R)?" res-best":""}`),h(fi,Nn),h(gi,t(Ee).author||""),bt(mi,1,`fit-badge ${Na??""}`),h(Wi,Ui),h(xi,Hi),h(ji,`⬇ ${Ji??""}`)},[()=>t(Ee).id.split("/").pop(),()=>t(Je)[ye]?I(t(Je)[ye]):"warn",()=>t(Je)[ye]?K(t(Je)[ye]):"prüfe…",()=>t(Je)[ye]?C({req_gb:0,tps:0}):"Hardware-Fit…",()=>(t(Ee).downloads||0).toLocaleString()]),S("click",zt,()=>M(t(Ee).id,t(Ee).id.split("/").pop())),p(gt,zt)},Ot=U(()=>_(t(Ee).id,t(Ee).tags));O(Tt,gt=>{t(Ot)&>(Dt)})}p(je,st)}),p(me,Ue)};O(qe,me=>{t(Te).length&&me(ut)})}$(()=>{W.disabled=t(se),h(L,t(se)?"Suche…":"Aktualisieren"),Mt.disabled=t(We),h(wt,t(We)?"Lade…":"Suchen")}),S("click",W,()=>Pt(!0)),S("keydown",Le,me=>me.key==="Enter"&&kt()),Yt(Le,()=>t($e),me=>u($e,me)),On(Qe,()=>t(rt),me=>u(rt,me)),S("click",Mt,kt),p(m,x)};O(Me,m=>{t(V)==="find"&&m(ne)})}var ce=i(Me,2);{var ze=m=>{const x=U(()=>t(_e));var A=Ec(),q=r(A),H=r(q),G=i(H,2),P=r(G),W=i(G,2),L=r(W),X=i(W,2);Ze(X,21,()=>t(x).models,nt,(Oe,Ne)=>{var yt=kc(),Mt=r(yt),wt=r(Mt),vt=r(wt),Et=r(vt),Wt=i(vt,2),Vt=r(Wt),fn=i(Wt,2);lt(fn,()=>T(t(Ne).repo,t(Ne).tags));var qe=i(wt,2);{var ut=ye=>{var st=_c(),Tt=r(st);$(()=>h(Tt,t(Ne).why)),p(ye,st)};O(qe,ye=>{t(Ne).why&&ye(ut)})}var me=i(qe,2);{var Ue=ye=>{var st=yc(),Tt=r(st);$((Dt,Ot,gt)=>h(Tt,`~${Dt??""} GB · ~${Ot??""} Tok/s · optimal ~${gt??""}k Kontext`),[()=>(t(Ne).fit.req_gb??0).toFixed(1),()=>Math.round(t(Ne).fit.tps??0),()=>Math.round((t(Ne).optimal_ctx||8192)/1024)]),p(ye,st)};O(me,ye=>{t(Ne).fit&&ye(Ue)})}var je=i(Mt,2);{var Ee=ye=>{var st=xc(),Tt=r(st);$(Dt=>{bt(st,1,`fit-badge ${Dt??""}`),h(Tt,t(Ne).fit.text)},[()=>I(t(Ne).fit.level)]),p(ye,st)};O(je,ye=>{t(Ne).fit&&ye(Ee)})}$(()=>{h(Et,t(Ne).name),h(Vt,t(Ne).role)}),p(Oe,yt)});var ae=i(X,2);{var ue=Oe=>{const Ne=U(()=>Math.max(...t(x).models.map(vt=>{var Et;return((Et=vt.fit)==null?void 0:Et.req_gb)??0})));var yt=wc(),Mt=i(r(yt)),wt=r(Mt);$(vt=>h(wt,`~${vt??""} GB`),[()=>t(Ne).toFixed(1)]),p(Oe,yt)};O(ae,Oe=>{t(x).models.length&&t(x).models[0].fit&&Oe(ue)})}var j=i(ae,2);{var te=Oe=>{const Ne=U(()=>t(Ae).find(vt=>!vt.user&&vt.fit_level!=="too_tight"&&vt.id!==t(x).id));var yt=Mc(),Mt=i(r(yt));{var wt=vt=>{var Et=Sc(),Wt=i(Ye(Et)),Vt=r(Wt);$(()=>h(Vt,`„${t(Ne).title??""}" ansehen`)),S("click",Wt,fn=>{fn.preventDefault(),u(_e,null),setTimeout(()=>D(t(Ne).id),50)}),p(vt,Et)};O(Mt,vt=>{t(Ne)&&vt(wt)})}p(Oe,yt)};O(j,Oe=>{t(x).fit_level==="too_tight"&&Oe(te)})}var Le=i(j,2),Qe=r(Le);$(()=>{h(P,t(x).title),h(L,t(x).desc),bt(Le,1,`primary${t(x).fit_level==="too_tight"?" warn":""}`),h(Qe,t(x).fit_level==="too_tight"?"Trotzdem installieren (nicht empfohlen)":"Komplettes Setup installieren")}),S("click",A,Oe=>{Oe.target.classList.contains("modal-overlay")&&u(_e,null)}),S("click",H,()=>u(_e,null)),S("click",Le,()=>J(t(x).id)),p(m,A)};O(ce,m=>{t(_e)&&m(ze)})}var Pe=i(ce,2);{var w=m=>{var x=Ic(),A=r(x),q=r(A),H=i(q,2),G=r(H),P=i(H,2),W=r(P),L=i(P,2);{var X=j=>{var te=Ac();p(j,te)},ae=j=>{var te=Pc(),Le=i(Ye(te),2);Ze(Le,21,()=>t(de).files,nt,(je,Ee)=>{const ye=U(()=>t(Ee).fit.level==="perfect"?"●":t(Ee).fit.level==="marginal"?"◐":"○");var st=ts(),Tt=r(st),Dt={};$(()=>{h(Tt,`${t(ye)??""} ${t(Ee).filename??""}`),Dt!==(Dt=t(Ee).filename)&&(st.value=(st.__value=t(Ee).filename)??"")}),p(je,st)});var Qe=i(Le,2),Oe=r(Qe),Ne=i(r(Oe),2),yt=i(Oe,2),Mt=r(yt),wt=i(r(Mt));lt(wt,()=>xr(a));var vt=i(Mt,2),Et=i(Qe,2);{var Wt=je=>{var Ee=Cc(),ye=i(r(Ee)),st=r(ye),Tt=i(ye,2);$(Dt=>h(st,`~${Dt??""}k`),[()=>Math.round(t(Ke).optimal_ctx/1024)]),S("click",Tt,Dt=>{Dt.preventDefault(),u(Ve,t(Ke).optimal_ctx,!0)}),p(je,Ee)};O(Et,je=>{var Ee;(Ee=t(Ke))!=null&&Ee.optimal_ctx&&je(Wt)})}var Vt=i(Et,2);{var fn=je=>{var Ee=Tc(),ye=r(Ee),st=i(r(ye),2),Tt=r(st),Dt=i(ye,2),Ot=r(Dt);$((gt,zt,mt)=>{h(Tt,`~${gt??""} GB · ~${zt??""} Tok/s · ${(t(Ke).quant||"GGUF")??""}`),bt(Dt,1,`fit-badge ${mt??""}`),h(Ot,t(Ke).fit.text)},[()=>(t(Ke).fit.req_gb??0).toFixed(1),()=>Math.round(t(Ke).fit.tps??0),()=>I(t(Ke).fit.level)]),p(je,Ee)};O(Vt,je=>{t(Ke)&&je(fn)})}var qe=i(Vt,2);{var ut=je=>{const Ee=U(()=>t(de).files.find(Ot=>Ot.fit.level!=="too_tight"&&Ot.filename!==t(xe)));var ye=ua(),st=Ye(ye);{var Tt=Ot=>{var gt=zc(),zt=i(r(gt)),mt=r(zt);$(Kn=>h(mt,`${t(Ee).filename??""} (${Kn??""})`),[()=>K(t(Ee).fit.level)]),S("click",zt,Kn=>{Kn.preventDefault(),u(xe,t(Ee).filename,!0),ie()}),p(Ot,gt)},Dt=Ot=>{var gt=$c();p(Ot,gt)};O(st,Ot=>{t(Ee)?Ot(Tt):Ot(Dt,-1)})}p(je,ye)};O(qe,je=>{var Ee,ye;((Ee=t(Ke))==null?void 0:Ee.fit.level)==="too_tight"&&((ye=t(de))!=null&&ye.files)&&je(ut)})}var me=i(qe,2),Ue=r(me);$(()=>{var je,Ee;bt(me,1,`primary${((je=t(Ke))==null?void 0:je.fit.level)==="too_tight"?" warn":""}`),me.disabled=t(tt),h(Ue,t(tt)?"Starte…":((Ee=t(Ke))==null?void 0:Ee.fit.level)==="too_tight"?"Trotzdem holen (zu groß — nicht empfohlen)":"Herunterladen & Einpflegen")}),S("change",Le,ie),On(Le,()=>t(xe),je=>u(xe,je)),Yt(Ne,()=>t(et),je=>u(et,je)),Yt(vt,()=>t(Ve),je=>u(Ve,je)),S("click",me,ke),p(j,te)},ue=j=>{var te=Dc();p(j,te)};O(L,j=>{var te,Le;t(tt)&&!t(de)?j(X):(Le=(te=t(de))==null?void 0:te.files)!=null&&Le.length?j(ae,1):t(tt)||j(ue,2)})}$(()=>{h(G,t(at)),h(W,t(Q))}),S("click",x,j=>{j.target.classList.contains("modal-overlay")&&u(Re,!1)}),S("click",q,()=>u(Re,!1)),p(m,x)};O(Pe,m=>{t(Re)&&m(w)})}var ee=i(Pe,2);{var ge=m=>{var x=Oc(),A=r(x),q=r(A),H=i(q,2),G=r(H),P=i(H,6),W=i(P,4),L=i(W,4);Ze(L,17,()=>t(ct),nt,(j,te,Le)=>{var Qe=Lc(),Oe=r(Qe),Ne=i(Oe,2),yt=i(Ne,2);Ze(yt,20,()=>["Q4_K_M","Q5_K_M","Q6_K","Q8_0","Q3_K_M"],nt,(wt,vt)=>{var Et=ts(),Wt=r(Et),Vt={};$(()=>{h(Wt,vt),Vt!==(Vt=vt)&&(Et.__value=vt)}),p(wt,Et)});var Mt=i(yt,2);Yt(Oe,()=>t(te).repo,wt=>t(te).repo=wt),Yt(Ne,()=>t(te).role,wt=>t(te).role=wt),On(yt,()=>t(te).quant,wt=>t(te).quant=wt),S("click",Mt,()=>u(ct,t(ct).filter((wt,vt)=>vt!==Le),!0)),p(j,Qe)});var X=i(L,2),ae=i(X,4),ue=r(ae);$(()=>{h(G,t(_t)?"Setup bearbeiten":"Eigenes Setup erstellen"),h(ue,t(_t)?"Änderungen speichern":"Setup speichern")}),S("click",x,j=>{j.target.classList.contains("modal-overlay")&&u(it,!1)}),S("click",q,()=>u(it,!1)),Yt(P,()=>t(dt),j=>u(dt,j)),Yt(W,()=>t(ht),j=>u(ht,j)),S("click",X,()=>u(ct,[...t(ct),{repo:"",role:"",quant:"Q4_K_M"}],!0)),S("click",ae,ve),p(m,x)};O(ee,m=>{t(it)&&m(ge)})}$(()=>{bt(pe,1,t(V)==="setups"?"primary":"ghost"),bt(E,1,t(V)==="find"?"primary":"ghost")}),S("click",pe,()=>u(V,"setups")),S("click",E,()=>u(V,"find")),p(e,re),wn()}$n(["click","keydown","change"]);var Fc=g(`
Du öffnest Mission Control über einen Proxy/Namen. Die Engine läuft auf Port 8080 ohne HTTPS direkt am Bosgame. + Trag in deinen Tools die LAN-IP ein: http://192.168.178.151:8080/v1 — nicht den Proxy-Namen.
`),Kc=g(' '),Nc=g('
'),qc=g(' '),Gc=g(''),ns=g(''),Vc=g('

Jan AI ist eine Desktop-App — kein Browser, kein Server, kein Admin-Panel. Einfach installieren und loslegen.

Jan AI öffnen → linke Leiste → Remote-Modelle+ Modell hinzufügen:

API-Key: ein beliebiger Wert (z.B. local). Jan AI fragt danach beim Einrichten.
Jan AI herunterladen: jan.ai — kostenlos, open source, Windows/macOS/Linux.
',1),Wc=g('

Datei anlegen oder öffnen: ~/.continue/config.json

Falls bereits eine config.json vorhanden: nur den "models"-Eintrag ergänzen, nicht die ganze Datei ersetzen.

Danach Continue in VS Code neu starten → im Chat-Panel das Modell wählen.

Continue: continue.dev — kostenlose VS Code / JetBrains Extension. Hinweis: 2026 von Cursor akquiriert — aktuell weiter aktiv und kostenlos.
',1),jc=g('

Antigravity (Googles agentic IDE, VS Code-basiert) unterstützt OpenAI-kompatible Endpoints direkt:

Settings → Models → Custom Endpoint+ hinzufügen:

API-Key: ein beliebiger Wert (z.B. local). Danach das Modell in der Model-Liste auswählen.
Antigravity herunterladen: antigravityide.net — kostenlose Einzelperson-Tier, VS Code-basiert.
',1),Uc=g('

Ö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.
Zed herunterladen: zed.dev — kostenlos, native Performance, Windows/macOS/Linux.
',1),Hc=g('

Datei anlegen oder öffnen (OpenCode Desktop nutzt .jsonc — JSON mit Kommentaren):

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

Den "providers"-Block in die bestehende opencode.jsonc einfügen (nicht die ganze Datei ersetzen). Falls bereits ein "llama-swap"-Eintrag existiert: vorher löschen.

Danach in OpenCode /models wählen.

OpenCode Desktop: opencode.ai
',1),Jc=g('

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

API-Key: ein beliebiger Wert (z.B. local).
Cline für VS Code: VS Code Marketplace · für JetBrains: JetBrains Marketplace
',1),Qc=g('

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

',1),Zc=g('

Bilder einbinden (Vision)

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

2 · Modelle auswählen

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

3 · Tool wählen

Für welches Werkzeug brauchst du die Konfiguration?
Chat
Coding-Assistenten

4 · Config-Snippet

',1),Xc=g('

2 · Erst ein Modell installieren

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

In Cline: MCP-Einstellungen öffnen (Stecker-Icon in der Cline-Sidebar) → „Add MCP Server" → diesen Block einfügen.

In Claude Code: Block in ~/.claude/settings.json unter "mcpServers" einfügen.

Einmalig auf dem Windows-PC: pip install mcp httpx ausführen — danach mcp_memory.py aus dem Repo-Ordner erreichbar machen (Pfad im Snippet anpassen).
',1),nv=g('

Block in ~/.config/opencode/opencode.json unter "mcpServers" einfügen.

Einmalig: pip install mcp httpx — und Pfad zu mcp_memory.py im Snippet anpassen.
',1),av=g('

Block in die MCP-Config des jeweiligen Tools einfügen. Der Bosgame-Pfad /opt/mission-control/mcp_memory.py ist bereits korrekt — kein weiteres Setup nötig.

'),iv=g(`

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?

Gedächtnis-MCP

Neu in v7
Damit Cline, OpenCode und Claude Code sich Projektfakten, Entscheidungen und Präferenzen + über Sessions hinweg merken — geteilt über alle Tools, verwaltet im Gedächtnis-Tab.
`,1);function rv(e,n){kn(n,!0);const a=U(()=>ui.value),s=U(()=>{var z;return(((z=t(a))==null?void 0:z.models)||[]).filter(N=>!N.incomplete)});let l=F("zed"),o=F(Lt([])),d=F(""),v=F(!1),c=F("cline"),f=F(Lt(localStorage.getItem("mc_ip_override")||""));function _(z){return/^\d{1,3}(\.\d{1,3}){3}$/.test(z)}function T(){return location.protocol==="https:"||!_(location.hostname)}function y(){return`http://${t(f).trim()||location.hostname}:8080/v1`}const k=U(y);function I(){const z=t(f).trim();z?localStorage.setItem("mc_ip_override",z):localStorage.removeItem("mc_ip_override")}const K=U(()=>Te(t(c))),C=U(()=>t(o).length?t(o):t(s).map(z=>z.name)),V=U(()=>t(C)[0]||"coder"),Ae=U(()=>{var z;return(z=t(s).find(N=>{var ve,oe;return(oe=(ve=N.meta)==null?void 0:ve.caps)==null?void 0:oe.includes("Bild")}))==null?void 0:z.name});function Ce(z,N){const oe=(N.length?t(s).filter(re=>N.includes(re.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(re=>{var E,Y;const we=(((E=re.meta)==null?void 0:E.caps)||[]).some(fe=>/Bild|Vision/i.test(fe)),pe=((Y=re.meta)==null?void 0:Y.ctx)||131072;return` { "name": "${re.name}", "display_name": "${re.name}", "max_tokens": ${pe}${we?', "capabilities": { "tools": true, "images": true }':""} }`}).join(`, `);return`"language_models": { "openai_compatible": { "bosgame": { - "api_url": "${T}", + "api_url": "${z}", "available_models": [ -${ie} +${oe} ] } } -}`}function Ce(T,K){const ie=(K.length?t(s).filter(ae=>K.includes(ae.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ae=>{var ce;const ke=((ce=ae.meta)==null?void 0:ce.ctx)||131072;return` "${ae.name}": { "name": "${ae.name}", "contextWindowSize": ${ke} }`}).join(`, +}`}function Be(z,N){const oe=(N.length?t(s).filter(re=>N.includes(re.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(re=>{var pe;const we=((pe=re.meta)==null?void 0:pe.ctx)||131072;return` "${re.name}": { "name": "${re.name}", "contextWindowSize": ${we} }`}).join(`, `);return`"providers": { "llama-swap": { "npm": "@ai-sdk/openai-compatible", "name": "Bosgame (llama-swap)", "options": { - "baseURL": "${T}", + "baseURL": "${z}", "apiKey": "local" }, "models": { -${ie} +${oe} } } -}`}function Ie(T,K){return`{ +}`}function De(z,N){return`{ "models": [ -${(K.length?t(s).filter(ae=>K.includes(ae.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(ae=>` { - "title": "llama-swap / ${ae.name}", +${(N.length?t(s).filter(re=>N.includes(re.name)):t(s).length?t(s):[{name:"coder",meta:{}}]).map(re=>` { + "title": "llama-swap / ${re.name}", "provider": "openai", - "model": "${ae.name}", - "apiBase": "${T}", + "model": "${re.name}", + "apiBase": "${z}", "apiKey": "local" }`).join(`, `)} ] -}`}async function re(){u(d,"Teste…");try{const T=await Se("/api/integration/test");u(v,T.ok,!0),u(d,T.ok?`✓ Verbunden — ${T.models.length} Modell(e): ${T.models.join(", ")}`:`✗ Keine Verbindung: ${T.error}`,!0)}catch(T){u(v,!1),u(d,"✗ "+T.message)}}function ne(T){var se;const K=T.querySelector("code");K&&((se=navigator.clipboard)==null||se.writeText(K.textContent||""))}function _e(T){var K;(K=navigator.clipboard)==null||K.writeText(T.value)}function Le(T){return`{ +}`}async function se(){u(d,"Teste…");try{const z=await Se("/api/integration/test");u(v,z.ok,!0),u(d,z.ok?`✓ Verbunden — ${z.models.length} Modell(e): ${z.models.join(", ")}`:`✗ Keine Verbindung: ${z.error}`,!0)}catch(z){u(v,!1),u(d,"✗ "+z.message)}}function le(z){var ve;const N=z.querySelector("code");N&&((ve=navigator.clipboard)==null||ve.writeText(N.textContent||""))}function $e(z){var N;(N=navigator.clipboard)==null||N.writeText(z.value)}function Te(z){return`{ "mcpServers": { "mission-control-memory": { - "command": "${T==="bosgame"?"/opt/mission-control/.venv/bin/python":"python"}", - "args": ["${T==="bosgame"?"/opt/mission-control/mcp_memory.py":"C:\\\\Users\\\\\\\\mission-control\\\\mcp_memory.py"}"], + "command": "${z==="bosgame"?"/opt/mission-control/.venv/bin/python":"python"}", + "args": ["${z==="bosgame"?"/opt/mission-control/mcp_memory.py":"C:\\\\Users\\\\\\\\mission-control\\\\mcp_memory.py"}"], "env": { "MC_URL": "http://192.168.178.151:9000" } } } -}`}var He=av(),Ne=i(tt(He),2),ot=i(r(Ne),6),I=r(ot),ye=i(I,2),qe=i(ot,2),Qe=r(qe),G=i(qe,2);{var oe=T=>{var K=Rc();p(T,K)},Oe=V(()=>C());B(G,T=>{t(Oe)&&T(oe)})}var Ge=i(G,2),je=r(Ge),Be=i(je,2);{var dt=T=>{var K=Fc(),se=r(K);$(()=>{St(K,`color:${t(v)?"#7ee29a":"#ff9b95"}`),h(se,t(d))}),p(T,K)};B(Be,T=>{t(d)&&T(dt)})}var Xe=i(Ne,2),pt=i(r(Xe),2);Ze(pt,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."]],et,(T,K)=>{var se=V(()=>Bn(K,3));let ie=()=>t(se)[0],ae=()=>t(se)[1],ke=()=>t(se)[2];var ce=Kc(),E=r(ce),J=r(E),de=i(E,2),Me=r(de),Q=r(Me),le=i(Me,2),Ae=r(le);$(()=>{h(J,ie()),h(Q,ae()),h(Ae,ke())}),p(T,ce)});var ct=i(Xe,2);{var mt=T=>{var K=Zc(),se=tt(K),ie=r(se),ae=i(r(ie),2),ke=r(ae),ce=i(ie,4);Ze(ce,21,()=>t(s),et,(U,Y)=>{const X=V(()=>t(o).includes(t(Y).name));var q=Nc(),te=r(q);$(()=>{St(q,`cursor:pointer;${t(X)?"background:rgba(45,212,191,.2);border-color:var(--accent);color:var(--accent)":""}`),h(te,t(Y).name)}),S("click",q,()=>u(o,t(X)?t(o).filter(be=>be!==t(Y).name):[...t(o),t(Y).name],!0)),S("keydown",q,be=>be.key==="Enter"&&u(o,t(X)?t(o).filter(fe=>fe!==t(Y).name):[...t(o),t(Y).name],!0)),p(U,q)});var E=i(ce,2);{var J=U=>{var Y=qc(),X=r(Y);S("click",X,q=>{q.preventDefault(),u(o,[],!0)}),p(U,Y)};B(E,U=>{t(o).length&&U(J)})}var de=i(se,2),Me=i(r(de),6);Ze(Me,20,()=>[["janai","Jan AI","Einfachstes Chat-Interface — Desktop-App, kein Setup"],["openwebui","OpenWebUI","Browser-Chat für Teams — mehr Features, mehr Setup"]],et,(U,Y)=>{var X=V(()=>Bn(Y,3));let q=()=>t(X)[0],te=()=>t(X)[1],be=()=>t(X)[2];var fe=is(),ue=r(fe),ge=r(ue),kt=i(ue,2),$t=r(kt);$(()=>{wt(fe,1,`card-btn${t(l)===q()?" cb-best":""}`),h(ge,te()),h($t,be())}),S("click",fe,()=>u(l,q(),!0)),p(U,fe)});var Q=i(Me,4);Ze(Q,20,()=>[["continue","Continue","VS Code/JetBrains — Hilfe ohne Agent-Overhead"],["cline","Cline","VS Code/JetBrains/Zed — voller Coding-Agent"],["antigravity","Antigravity","Googles agentic IDE — VS Code-basiert"],["opencode","OpenCode","Terminal-Agent — autonom, mächtig"],["zed","Zed","Schneller nativer Editor mit KI-Panel"]],et,(U,Y)=>{var X=V(()=>Bn(Y,3));let q=()=>t(X)[0],te=()=>t(X)[1],be=()=>t(X)[2];var fe=is(),ue=r(fe),ge=r(ue),kt=i(ue,2),$t=r(kt);$(()=>{wt(fe,1,`card-btn${t(l)===q()?" cb-best":""}`),h(ge,te()),h($t,be())}),S("click",fe,()=>u(l,q(),!0)),p(U,fe)});var le=i(de,2),Ae=i(r(le),2);{var $e=U=>{var Y=Gc(),X=i(tt(Y),6),q=r(X),te=i(q,2),be=i(X,4),fe=r(be),ue=i(fe,2);$(()=>{ta(q,t(y)),ta(fe,t(N))}),S("click",te,ge=>_e(ge.currentTarget.previousElementSibling)),S("click",ue,ge=>_e(ge.currentTarget.previousElementSibling)),p(U,Y)},x=U=>{const Y=V(()=>Ie(t(y),t(A)));var X=Vc(),q=i(tt(X),4),te=r(q),be=i(te,2),fe=r(be),ue=r(fe),ge=i(q,2),kt=i(r(ge)),$t=r(kt);$(()=>{h(ue,t(Y)),h($t,`llama-swap / ${t(N)??""}`)}),S("click",te,Dt=>ne(Dt.currentTarget.parentElement)),p(U,X)},Z=U=>{var Y=Wc(),X=i(tt(Y),6),q=r(X),te=i(q,2),be=i(X,4),fe=r(be),ue=i(fe,2),ge=i(be,2),kt=i(r(ge),3),$t=r(kt);$(()=>{ta(q,t(y)),ta(fe,t(N)),h($t,t(N))}),S("click",te,Dt=>_e(Dt.currentTarget.previousElementSibling)),S("click",ue,Dt=>_e(Dt.currentTarget.previousElementSibling)),p(U,Y)},he=U=>{const Y=V(()=>Ee(t(y),t(A)));var X=jc(),q=i(tt(X),4),te=r(q),be=i(te,2),fe=r(be),ue=r(fe),ge=i(q,4),kt=i(r(ge)),$t=r(kt);$(()=>{h(ue,t(Y)),h($t,`bosgame / ${t(N)??""}`)}),S("click",te,Dt=>ne(Dt.currentTarget.parentElement)),p(U,X)},j=U=>{const Y=V(()=>Ce(t(y),t(A)));var X=Uc(),q=i(tt(X),6),te=r(q),be=i(te,2),fe=r(be),ue=r(fe),ge=i(q,2),kt=i(r(ge),3),$t=r(kt);$(()=>{h(ue,t(Y)),h($t,`llama-swap/${t(N)??""}`)}),S("click",te,Dt=>ne(Dt.currentTarget.parentElement)),p(U,X)},we=U=>{var Y=Hc(),X=i(tt(Y),4),q=r(X),te=i(q,2),be=i(X,4),fe=r(be),ue=i(fe,2);$(()=>{ta(q,t(y)),ta(fe,t(N))}),S("click",te,ge=>_e(ge.currentTarget.previousElementSibling)),S("click",ue,ge=>_e(ge.currentTarget.previousElementSibling)),p(U,Y)},Pe=U=>{var Y=Jc(),X=i(tt(Y),4),q=r(X),te=i(q,2),be=i(X,4),fe=r(be),ue=i(fe,2);$(()=>ta(q,t(y))),S("click",te,ge=>_e(ge.currentTarget.previousElementSibling)),S("click",ue,ge=>_e(ge.currentTarget.previousElementSibling)),p(U,Y)};B(Ae,U=>{t(l)==="janai"?U($e):t(l)==="continue"?U(x,1):t(l)==="antigravity"?U(Z,2):t(l)==="zed"?U(he,3):t(l)==="opencode"?U(j,4):t(l)==="cline"?U(we,5):t(l)==="openwebui"&&U(Pe,6)})}var Fe=i(le,2);{var Te=U=>{const Y=V(()=>`curl ${t(y)}/chat/completions \\ +}`}var We=iv(),rt=i(Ye(We),2),Je=i(r(rt),6),R=r(Je),_e=i(R,2),Re=i(Je,2),at=r(Re),Q=i(Re,2);{var de=z=>{var N=Fc();p(z,N)},xe=U(()=>T());O(Q,z=>{t(xe)&&z(de)})}var et=i(Q,2),Ve=r(et),tt=i(Ve,2);{var Ke=z=>{var N=Kc(),ve=r(N);$(()=>{St(N,`color:${t(v)?"#7ee29a":"#ff9b95"}`),h(ve,t(d))}),p(z,N)};O(tt,z=>{t(d)&&z(Ke)})}var it=i(rt,2),dt=i(r(it),2);Ze(dt,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."]],nt,(z,N)=>{var ve=U(()=>En(N,3));let oe=()=>t(ve)[0],re=()=>t(ve)[1],we=()=>t(ve)[2];var pe=Nc(),E=r(pe),Y=r(E),fe=i(E,2),Me=r(fe),ne=r(Me),ce=i(Me,2),ze=r(ce);$(()=>{h(Y,oe()),h(ne,re()),h(ze,we())}),p(z,pe)});var ht=i(it,2);{var ct=z=>{var N=Yc(),ve=Ye(N),oe=r(ve),re=i(r(oe),2),we=r(re),pe=i(oe,4);Ze(pe,21,()=>t(s),nt,(G,P)=>{const W=U(()=>t(o).includes(t(P).name));var L=qc(),X=r(L);$(()=>{St(L,`cursor:pointer;${t(W)?"background:rgba(45,212,191,.2);border-color:var(--accent);color:var(--accent)":""}`),h(X,t(P).name)}),S("click",L,()=>u(o,t(W)?t(o).filter(ae=>ae!==t(P).name):[...t(o),t(P).name],!0)),S("keydown",L,ae=>ae.key==="Enter"&&u(o,t(W)?t(o).filter(ue=>ue!==t(P).name):[...t(o),t(P).name],!0)),p(G,L)});var E=i(pe,2);{var Y=G=>{var P=Gc(),W=r(P);S("click",W,L=>{L.preventDefault(),u(o,[],!0)}),p(G,P)};O(E,G=>{t(o).length&&G(Y)})}var fe=i(ve,2),Me=i(r(fe),6);Ze(Me,20,()=>[["janai","Jan AI","Einfachstes Chat-Interface — Desktop-App, kein Setup"],["openwebui","OpenWebUI","Browser-Chat für Teams — mehr Features, mehr Setup"]],nt,(G,P)=>{var W=U(()=>En(P,3));let L=()=>t(W)[0],X=()=>t(W)[1],ae=()=>t(W)[2];var ue=ns(),j=r(ue),te=r(j),Le=i(j,2),Qe=r(Le);$(()=>{bt(ue,1,`card-btn${t(l)===L()?" cb-best":""}`),h(te,X()),h(Qe,ae())}),S("click",ue,()=>u(l,L(),!0)),p(G,ue)});var ne=i(Me,4);Ze(ne,20,()=>[["continue","Continue","VS Code/JetBrains — Hilfe ohne Agent-Overhead"],["cline","Cline","VS Code/JetBrains/Zed — voller Coding-Agent"],["antigravity","Antigravity","Googles agentic IDE — VS Code-basiert"],["opencode","OpenCode","Terminal-Agent — autonom, mächtig"],["zed","Zed","Schneller nativer Editor mit KI-Panel"]],nt,(G,P)=>{var W=U(()=>En(P,3));let L=()=>t(W)[0],X=()=>t(W)[1],ae=()=>t(W)[2];var ue=ns(),j=r(ue),te=r(j),Le=i(j,2),Qe=r(Le);$(()=>{bt(ue,1,`card-btn${t(l)===L()?" cb-best":""}`),h(te,X()),h(Qe,ae())}),S("click",ue,()=>u(l,L(),!0)),p(G,ue)});var ce=i(fe,2),ze=i(r(ce),2);{var Pe=G=>{var P=Vc(),W=i(Ye(P),6),L=r(W),X=i(L,2),ae=i(W,4),ue=r(ae),j=i(ue,2);$(()=>{Gn(L,t(k)),Gn(ue,t(V))}),S("click",X,te=>$e(te.currentTarget.previousElementSibling)),S("click",j,te=>$e(te.currentTarget.previousElementSibling)),p(G,P)},w=G=>{const P=U(()=>De(t(k),t(C)));var W=Wc(),L=i(Ye(W),4),X=r(L),ae=i(X,2),ue=r(ae),j=r(ue),te=i(L,2),Le=i(r(te)),Qe=r(Le);$(()=>{h(j,t(P)),h(Qe,`llama-swap / ${t(V)??""}`)}),S("click",X,Oe=>le(Oe.currentTarget.parentElement)),p(G,W)},ee=G=>{var P=jc(),W=i(Ye(P),6),L=r(W),X=i(L,2),ae=i(W,4),ue=r(ae),j=i(ue,2),te=i(ae,2),Le=i(r(te),3),Qe=r(Le);$(()=>{Gn(L,t(k)),Gn(ue,t(V)),h(Qe,t(V))}),S("click",X,Oe=>$e(Oe.currentTarget.previousElementSibling)),S("click",j,Oe=>$e(Oe.currentTarget.previousElementSibling)),p(G,P)},ge=G=>{const P=U(()=>Ce(t(k),t(C)));var W=Uc(),L=i(Ye(W),4),X=r(L),ae=i(X,2),ue=r(ae),j=r(ue),te=i(L,4),Le=i(r(te)),Qe=r(Le);$(()=>{h(j,t(P)),h(Qe,`bosgame / ${t(V)??""}`)}),S("click",X,Oe=>le(Oe.currentTarget.parentElement)),p(G,W)},m=G=>{const P=U(()=>Be(t(k),t(C)));var W=Hc(),L=i(Ye(W),6),X=r(L),ae=i(X,2),ue=r(ae),j=r(ue),te=i(L,2),Le=i(r(te),3),Qe=r(Le);$(()=>{h(j,t(P)),h(Qe,`llama-swap/${t(V)??""}`)}),S("click",X,Oe=>le(Oe.currentTarget.parentElement)),p(G,W)},x=G=>{var P=Jc(),W=i(Ye(P),4),L=r(W),X=i(L,2),ae=i(W,4),ue=r(ae),j=i(ue,2);$(()=>{Gn(L,t(k)),Gn(ue,t(V))}),S("click",X,te=>$e(te.currentTarget.previousElementSibling)),S("click",j,te=>$e(te.currentTarget.previousElementSibling)),p(G,P)},A=G=>{var P=Qc(),W=i(Ye(P),4),L=r(W),X=i(L,2),ae=i(W,4),ue=r(ae),j=i(ue,2);$(()=>Gn(L,t(k))),S("click",X,te=>$e(te.currentTarget.previousElementSibling)),S("click",j,te=>$e(te.currentTarget.previousElementSibling)),p(G,P)};O(ze,G=>{t(l)==="janai"?G(Pe):t(l)==="continue"?G(w,1):t(l)==="antigravity"?G(ee,2):t(l)==="zed"?G(ge,3):t(l)==="opencode"?G(m,4):t(l)==="cline"?G(x,5):t(l)==="openwebui"&&G(A,6)})}var q=i(ce,2);{var H=G=>{const P=U(()=>`curl ${t(k)}/chat/completions \\ -H "Content-Type: application/json" \\ -d '{ - "model": "${t(De)}", + "model": "${t(Ae)}", "messages": [{"role":"user","content":[{"type":"text","text":"Was ist auf dem Bild falsch?"},{"type":"image_url","image_url":{"url":"data:image/png;base64,"}}]}] -}'`);var X=Qc(),q=r(X),te=i(r(q),2),be=r(te);nt(be,()=>qt("check"));var fe=i(be),ue=i(q,4),ge=r(ue),kt=i(ge,2),$t=r(kt),Dt=r($t);$(()=>{h(fe,` „${t(De)??""}" bereit`),h(Dt,t(Y))}),S("click",ge,gn=>ne(gn.currentTarget.parentElement)),p(U,X)};B(Fe,U=>{t(De)&&U(Te)})}$(()=>h(ke,t(o).length?`${t(o).length} von ${t(s).length} ausgewählt`:"alle werden eingeschlossen")),p(T,K)},Ct=T=>{var K=Yc(),se=i(r(K),2),ie=i(r(se),4);S("click",ie,()=>{var ae;return(ae=document.querySelector(".nav-item[data-view='cookbook']"))==null?void 0:ae.dispatchEvent(new MouseEvent("click"))}),p(T,K)};B(ct,T=>{t(s).length?T(mt):T(Ct,-1)})}var Tt=i(ct,2),Mt=i(r(Tt),2),Ft=i(r(Mt)),zt=i(Mt,2);Ze(zt,20,()=>[["cline","Cline / Claude Code","Windows — Tools auf dem Entwicklungs-PC"],["opencode","OpenCode","Windows — Terminal-Agent"],["bosgame","Direkt am Bosgame","Wenn das Tool am Server läuft"]],et,(T,K)=>{var se=V(()=>Bn(K,3));let ie=()=>t(se)[0],ae=()=>t(se)[1],ke=()=>t(se)[2];var ce=Xc(),E=r(ce),J=r(E),de=i(E,2),Me=r(de);$(()=>{wt(ce,1,`card-btn${t(c)===ie()?" cb-best":""}`),h(J,ae()),h(Me,ke())}),S("click",ce,()=>u(c,ie(),!0)),p(T,ce)});var Et=i(zt,2),L=r(Et),H=i(L,2),O=r(H),W=r(O),M=i(Et,2);{var ee=T=>{var K=ev();p(T,K)},xe=T=>{var K=tv();p(T,K)},ze=T=>{var K=nv();p(T,K)};B(M,T=>{t(c)==="cline"?T(ee):t(c)==="opencode"?T(xe,1):T(ze,-1)})}$(()=>{ta(I,t(y)),h(W,t(F))}),S("click",ye,T=>{const K=T.currentTarget.previousElementSibling;_e(K)}),S("input",Qe,D),on(Qe,()=>t(f),T=>u(f,T)),S("click",je,re),S("click",Ft,T=>{var K;T.preventDefault(),(K=document.querySelector(".nav-item[data-view='memory']"))==null||K.click()}),S("click",L,T=>ne(T.currentTarget.parentElement)),p(e,He),In()}qn(["click","input","keydown"]);var rv=g('
'),sv=g('

Für dich: Upgrades

Neuere Modelle, die ein installiertes ersetzen können.
'),lv=g('
Lade News… (erstes Laden kann kurz dauern)
'),ov=g('
'),dv=g('
Keine News geladen
Die Quellen sind gerade nicht erreichbar — später nochmal probieren.
'),cv=g('für dich'),vv=g('
'),uv=g('
'),pv=g('

News

Aktuelles aus der Local-LLM-Welt — aus kuratierten Quellen.
',1);function fv(e,n){Dn(n,!0);let a=R(Rt([])),s=R(Rt([])),l=R(!0),o=R("");const d=re=>re==="perfect"?"ok":re==="marginal"?"warn":"bad";function v(re){const ne=Math.max(0,Date.now()/1e3-re);return ne<60?ne+"s":ne<3600?Math.floor(ne/60)+"m":ne<86400?Math.floor(ne/3600)+"h":Math.floor(ne/86400)+"d"}async function c(){u(l,!0),u(o,"");try{u(a,(await Se("/api/news")).items||[],!0)}catch(re){u(o,re.message||"Fehler beim Laden",!0)}finally{u(l,!1)}}async function f(){try{u(s,(await Se("/api/cookbook/upgrades")).upgrades||[],!0)}catch{u(s,[],!0)}}async function b(re,ne){var _e;ne.disabled=!0,ne.textContent="Starte…";try{await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:re.repo,role:re.role,params_b:re.params_b,quant:re.quant,hf_token:ui()})}),(_e=document.querySelector(".nav-item[data-view='activity']"))==null||_e.dispatchEvent(new MouseEvent("click"))}catch(Le){ne.disabled=!1,ne.textContent="Installieren",alert("Fehler: "+Le.message)}}function C(){c(),f()}wi(()=>{c(),f()});var _=pv(),y=tt(_),D=i(r(y),2),F=i(y,2);{var A=re=>{var ne=sv(),_e=r(ne),Le=i(r(_e),2),He=r(Le),Ne=i(_e,4);Ze(Ne,21,()=>t(s),et,(ot,I)=>{var ye=rv(),qe=r(ye),Qe=r(qe),G=r(Qe),oe=r(G),Oe=i(G,2),Ge=r(Oe),je=i(Qe,2),Be=r(je),dt=i(qe,2);$(Xe=>{h(oe,t(I).name),wt(Oe,1,`fit-badge ${Xe??""}`),h(Ge,t(I).fit.text),h(Be,`Ersetzt dein „${t(I).old??""}". ${t(I).why??""}`)},[()=>d(t(I).fit.level)]),S("click",dt,Xe=>b(t(I),Xe.currentTarget)),p(ot,ye)}),$(()=>h(He,t(s).length)),p(re,ne)};B(F,re=>{t(s).length&&re(A)})}var N=i(F,2);{var De=re=>{var ne=lv();p(re,ne)},Ee=re=>{var ne=ov(),_e=r(ne);$(()=>h(_e,t(o))),p(re,ne)},Ce=re=>{var ne=dv();p(re,ne)},Ie=re=>{var ne=uv();Ze(ne,21,()=>t(a),et,(_e,Le,He)=>{var Ne=vv();wt(Ne,1,`news-card${He===0?" featured":""}`);var ot=r(Ne),I=r(ot),ye=r(I),qe=i(I,2);{var Qe=je=>{var Be=cv();p(je,Be)};B(qe,je=>{t(Le).relevant&&je(Qe)})}var G=i(qe,2),oe=r(G),Oe=i(ot,2),Ge=r(Oe);$(je=>{za(Ne,"href",t(Le).link),h(ye,t(Le).source),h(oe,je),h(Ge,t(Le).title)},[()=>t(Le).ts?v(t(Le).ts):""]),p(_e,Ne)}),p(re,ne)};B(N,re=>{t(l)?re(De):t(o)?re(Ee,1):t(a).length?re(Ie,-1):re(Ce,2)})}S("click",D,C),p(e,_),In()}qn(["click"]);const rs=[{label:"Einstieg",tutorials:[["Dein erster Workflow — in 3 Schritten",` +}'`);var W=Zc(),L=r(W),X=i(r(L),2),ae=r(X);lt(ae,()=>Bt("check"));var ue=i(ae),j=i(L,4),te=r(j),Le=i(te,2),Qe=r(Le),Oe=r(Qe);$(()=>{h(ue,` „${t(Ae)??""}" bereit`),h(Oe,t(P))}),S("click",te,Ne=>le(Ne.currentTarget.parentElement)),p(G,W)};O(q,G=>{t(Ae)&&G(H)})}$(()=>h(we,t(o).length?`${t(o).length} von ${t(s).length} ausgewählt`:"alle werden eingeschlossen")),p(z,N)},_t=z=>{var N=Xc(),ve=i(r(N),2),oe=i(r(ve),4);S("click",oe,()=>{var re;return(re=document.querySelector(".nav-item[data-view='cookbook']"))==null?void 0:re.dispatchEvent(new MouseEvent("click"))}),p(z,N)};O(ht,z=>{t(s).length?z(ct):z(_t,-1)})}var At=i(ht,2),xt=i(r(At),2),Pt=i(r(xt)),Ct=i(xt,2);Ze(Ct,20,()=>[["cline","Cline / Claude Code","Windows — Tools auf dem Entwicklungs-PC"],["opencode","OpenCode","Windows — Terminal-Agent"],["bosgame","Direkt am Bosgame","Wenn das Tool am Server läuft"]],nt,(z,N)=>{var ve=U(()=>En(N,3));let oe=()=>t(ve)[0],re=()=>t(ve)[1],we=()=>t(ve)[2];var pe=ev(),E=r(pe),Y=r(E),fe=i(E,2),Me=r(fe);$(()=>{bt(pe,1,`card-btn${t(c)===oe()?" cb-best":""}`),h(Y,re()),h(Me,we())}),S("click",pe,()=>u(c,oe(),!0)),p(z,pe)});var kt=i(Ct,2),B=r(kt),Z=i(B,2),D=r(Z),J=r(D),M=i(kt,2);{var ie=z=>{var N=tv();p(z,N)},ke=z=>{var N=nv();p(z,N)},Ie=z=>{var N=av();p(z,N)};O(M,z=>{t(c)==="cline"?z(ie):t(c)==="opencode"?z(ke,1):z(Ie,-1)})}$(()=>{Gn(R,t(k)),h(J,t(K))}),S("click",_e,z=>{const N=z.currentTarget.previousElementSibling;$e(N)}),S("input",at,I),Yt(at,()=>t(f),z=>u(f,z)),S("click",Ve,se),S("click",Pt,z=>{var N;z.preventDefault(),(N=document.querySelector(".nav-item[data-view='memory']"))==null||N.click()}),S("click",B,z=>le(z.currentTarget.parentElement)),p(e,We),wn()}$n(["click","input","keydown"]);var sv=g('
'),lv=g('

Für dich: Upgrades

Neuere Modelle, die ein installiertes ersetzen können.
'),ov=g('
Lade News… (erstes Laden kann kurz dauern)
'),dv=g('
'),cv=g('
Keine News geladen
Die Quellen sind gerade nicht erreichbar — später nochmal probieren.
'),vv=g('für dich'),uv=g('
'),pv=g('
'),fv=g('

News

Aktuelles aus der Local-LLM-Welt — aus kuratierten Quellen.
',1);function hv(e,n){kn(n,!0);let a=F(Lt([])),s=F(Lt([])),l=F(!0),o=F("");const d=se=>se==="perfect"?"ok":se==="marginal"?"warn":"bad";function v(se){const le=Math.max(0,Date.now()/1e3-se);return le<60?le+"s":le<3600?Math.floor(le/60)+"m":le<86400?Math.floor(le/3600)+"h":Math.floor(le/86400)+"d"}async function c(){u(l,!0),u(o,"");try{u(a,(await Se("/api/news")).items||[],!0)}catch(se){u(o,se.message||"Fehler beim Laden",!0)}finally{u(l,!1)}}async function f(){try{u(s,(await Se("/api/cookbook/upgrades")).upgrades||[],!0)}catch{u(s,[],!0)}}async function _(se,le){var $e;le.disabled=!0,le.textContent="Starte…";try{await Se("/api/cookbook/install-model",{method:"POST",body:JSON.stringify({repo:se.repo,role:se.role,params_b:se.params_b,quant:se.quant,hf_token:ei()})}),($e=document.querySelector(".nav-item[data-view='activity']"))==null||$e.dispatchEvent(new MouseEvent("click"))}catch(Te){le.disabled=!1,le.textContent="Installieren",alert("Fehler: "+Te.message)}}function T(){c(),f()}vi(()=>{c(),f()});var y=fv(),k=Ye(y),I=i(r(k),2),K=i(k,2);{var C=se=>{var le=lv(),$e=r(le),Te=i(r($e),2),We=r(Te),rt=i($e,4);Ze(rt,21,()=>t(s),nt,(Je,R)=>{var _e=sv(),Re=r(_e),at=r(Re),Q=r(at),de=r(Q),xe=i(Q,2),et=r(xe),Ve=i(at,2),tt=r(Ve),Ke=i(Re,2);$(it=>{h(de,t(R).name),bt(xe,1,`fit-badge ${it??""}`),h(et,t(R).fit.text),h(tt,`Ersetzt dein „${t(R).old??""}". ${t(R).why??""}`)},[()=>d(t(R).fit.level)]),S("click",Ke,it=>_(t(R),it.currentTarget)),p(Je,_e)}),$(()=>h(We,t(s).length)),p(se,le)};O(K,se=>{t(s).length&&se(C)})}var V=i(K,2);{var Ae=se=>{var le=ov();p(se,le)},Ce=se=>{var le=dv(),$e=r(le);$(()=>h($e,t(o))),p(se,le)},Be=se=>{var le=cv();p(se,le)},De=se=>{var le=pv();Ze(le,21,()=>t(a),nt,($e,Te,We)=>{var rt=uv();bt(rt,1,`news-card${We===0?" featured":""}`);var Je=r(rt),R=r(Je),_e=r(R),Re=i(R,2);{var at=Ve=>{var tt=vv();p(Ve,tt)};O(Re,Ve=>{t(Te).relevant&&Ve(at)})}var Q=i(Re,2),de=r(Q),xe=i(Je,2),et=r(xe);$(Ve=>{ga(rt,"href",t(Te).link),h(_e,t(Te).source),h(de,Ve),h(et,t(Te).title)},[()=>t(Te).ts?v(t(Te).ts):""]),p($e,rt)}),p(se,le)};O(V,se=>{t(l)?se(Ae):t(o)?se(Ce,1):t(a).length?se(De,-1):se(Be,2)})}S("click",I,T),p(e,y),wn()}$n(["click"]);const as=[{label:"Einstieg",tutorials:[["Dein erster Workflow — in 3 Schritten",`
  1. Modell holen: Tab Cookbook → Anwendungsfall wählen (z.B. „Coden & Programmieren") → Komplettes Setup installieren. Der Download läuft im Tab Aktivität — einfach warten bis der Job grün wird.
  2. @@ -649,17 +649,17 @@ src/
    Strg+Shift+R (Hard Reload). Wenn das nicht hilft: Tab Server → Mission Control → Neu starten.
    - `]]}],hv=[["LLM / Modell","Die KI selbst — versteht und schreibt Text (wie ChatGPT, nur lokal auf deinem PC). Ein Modell ist eine konkrete Datei, oft auf etwas spezialisiert (Code, Bilder, Chat)."],["GGUF","Das lokal lauffähige Dateiformat. llama-swap lädt nur GGUF — Repos ohne GGUF kann die Engine nicht nutzen."],["Quantisierung (Q4_K_M)","Verkleinert ein Modell (16-Bit → 4-Bit), damit es in den Speicher passt — bei kaum Qualitätsverlust. Q4_K_M ist der bewährte Sweetspot. Für Coding/Reasoning: Q8_0 (nahezu verlustfrei). Wenn Q4_K_M 1 GB zu groß ist: IQ4_XS als Alternative (ähnliche Qualität, etwas kleiner)."],["Kontextfenster","Das Kurzzeitgedächtnis: wie viel Text sich das Modell gleichzeitig merken kann. Größer = mehr Überblick, mehr Speicher, etwas langsamer."],["Token","Die kleinste Einheit die ein Modell verarbeitet — meist 3–4 Zeichen oder ein kurzes Wort. 1 000 Tokens ≈ 750 Wörter. Kontextfenster, Geschwindigkeit und Kosten werden in Tokens gemessen."],["Auto-Swap","llama-swap lädt/entlädt Modelle automatisch — immer nur eins gleichzeitig. Du managst nichts."],["TTL (Time to Live)","Wie lange ein Modell nach der letzten Anfrage im RAM bleibt bevor es entladen wird. Standard: 5 Minuten. ∞ = bleibt dauerhaft geladen (sinnvoll für den Scout)."],["Agent","Ein Programm (OpenCode, Cline, Continue), das das Modell in einer Handlungsschleife laufen lässt — Dateien lesen/ändern, Befehle ausführen, planen, bis die Aufgabe erledigt ist."],["MCP","Model Context Protocol — der Stecker, über den ein Agent zusätzliche Werkzeuge bekommt (Web, Datenbank, GitHub …). MCP = neue Fähigkeiten."],["Skills / Rules","Kurze Textdatei (AGENTS.md, .clinerules …) mit Anweisungen wie der Agent in deinem Projekt arbeiten soll — einmal geschrieben, immer befolgt. Seit 2026 plattformübergreifender Standard: AGENTS.md wird von über 10 Tools nativ gelesen."],["Memory Bank","Clines Konzept für dauerhaften Projekt-Kontext: projectbrief.md (Ziel & Scope), activeContext.md (aktueller Fokus), progress.md (Stand). Wird zu Beginn jeder Aufgabe automatisch gelesen — ähnlich wie AGENTS.md, aber aufgeteilt nach Zweck."],["System-Prompt","Eine unsichtbare Anweisung die vor deiner Nachricht steht und das Verhalten des Modells grundlegend prägt (Sprache, Ton, Rolle). Skills nutzen oft den System-Prompt."],["Vision","Modelle mit Vision-Fähigkeit können Bilder verstehen — Screenshots, Diagramme, Fehlerfotos. Erkennbar am mmproj-Projektor der mitgeladen wird."]];var gv=g('

    '),mv=g(""),bv=g('
    '),_v=g('
    '),yv=g('

    Guide

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

    Begriffe kurz erklärt

    ',1);function xv(e,n){Dn(n,!0);let a=R(0);function s(f){var b;u(a,f,!0),(b=document.getElementById(`guide-group-${f}`))==null||b.scrollIntoView({behavior:"smooth",block:"start"})}var l=yv(),o=i(tt(l),2),d=i(r(o),2);Ze(d,21,()=>hv,et,(f,b)=>{var C=V(()=>Bn(t(b),2));let _=()=>t(C)[0],y=()=>t(C)[1];var D=gv(),F=r(D),A=r(F),N=i(F,2),De=r(N);$(()=>{h(A,_()),h(De,y())}),p(f,D)});var v=i(o,2);Ze(v,21,()=>rs,et,(f,b,C)=>{var _=mv(),y=r(_);$(()=>{wt(_,1,`guide-tab${t(a)===C?" active":""}`,"svelte-112sh7i"),h(y,t(b).label)}),S("click",_,()=>s(C)),p(f,_)});var c=i(v,2);Ze(c,17,()=>rs,et,(f,b,C)=>{var _=_v();za(_,"id",`guide-group-${C}`);var y=r(_),D=r(y),F=i(y,2);Ze(F,17,()=>t(b).tutorials,et,(A,N,De)=>{var Ee=V(()=>Bn(t(N),2));let Ce=()=>t(Ee)[0],Ie=()=>t(Ee)[1];var re=bv();re.open=C===0&&De===0;var ne=r(re),_e=r(ne),Le=i(ne,2);nt(Le,Ie,!0),$(()=>h(_e,Ce())),p(A,re)}),$(()=>h(D,t(b).label)),p(f,_)}),p(e,l),In()}qn(["click"]);var kv=g('
    '),wv=g('

    Import aus Claude / Gemini / ChatGPT

    Füge Erkenntnisse aus anderen KI-Sessions ein — jede Zeile wird ein eigener Eintrag.
    '),Sv=g('

    Neuer Eintrag

    Strg+Enter zum Speichern
    '),Mv=g(' '),Ev=g('
    Lade…
    '),Av=g(''),Cv=g('
    '),Tv=g('
    ',1),zv=g('
    '),$v=g("
    "),Pv=g('
    '),Dv=g(`

    Gedächtnis

    Fakten, Entscheidungen und Kontext — geteilt von allen KI-Tools via MCP.
    Filter:

    Wie KI-Tools dieses Gedächtnis nutzen

    Cline, OpenCode und Claude Code greifen über den Memory MCP-Server auf diese Einträge zu. +
    `]]}],gv=[["LLM / Modell","Die KI selbst — versteht und schreibt Text (wie ChatGPT, nur lokal auf deinem PC). Ein Modell ist eine konkrete Datei, oft auf etwas spezialisiert (Code, Bilder, Chat)."],["GGUF","Das lokal lauffähige Dateiformat. llama-swap lädt nur GGUF — Repos ohne GGUF kann die Engine nicht nutzen."],["Quantisierung (Q4_K_M)","Verkleinert ein Modell (16-Bit → 4-Bit), damit es in den Speicher passt — bei kaum Qualitätsverlust. Q4_K_M ist der bewährte Sweetspot. Für Coding/Reasoning: Q8_0 (nahezu verlustfrei). Wenn Q4_K_M 1 GB zu groß ist: IQ4_XS als Alternative (ähnliche Qualität, etwas kleiner)."],["Kontextfenster","Das Kurzzeitgedächtnis: wie viel Text sich das Modell gleichzeitig merken kann. Größer = mehr Überblick, mehr Speicher, etwas langsamer."],["Token","Die kleinste Einheit die ein Modell verarbeitet — meist 3–4 Zeichen oder ein kurzes Wort. 1 000 Tokens ≈ 750 Wörter. Kontextfenster, Geschwindigkeit und Kosten werden in Tokens gemessen."],["Auto-Swap","llama-swap lädt/entlädt Modelle automatisch — immer nur eins gleichzeitig. Du managst nichts."],["TTL (Time to Live)","Wie lange ein Modell nach der letzten Anfrage im RAM bleibt bevor es entladen wird. Standard: 5 Minuten. ∞ = bleibt dauerhaft geladen (sinnvoll für den Scout)."],["Agent","Ein Programm (OpenCode, Cline, Continue), das das Modell in einer Handlungsschleife laufen lässt — Dateien lesen/ändern, Befehle ausführen, planen, bis die Aufgabe erledigt ist."],["MCP","Model Context Protocol — der Stecker, über den ein Agent zusätzliche Werkzeuge bekommt (Web, Datenbank, GitHub …). MCP = neue Fähigkeiten."],["Skills / Rules","Kurze Textdatei (AGENTS.md, .clinerules …) mit Anweisungen wie der Agent in deinem Projekt arbeiten soll — einmal geschrieben, immer befolgt. Seit 2026 plattformübergreifender Standard: AGENTS.md wird von über 10 Tools nativ gelesen."],["Memory Bank","Clines Konzept für dauerhaften Projekt-Kontext: projectbrief.md (Ziel & Scope), activeContext.md (aktueller Fokus), progress.md (Stand). Wird zu Beginn jeder Aufgabe automatisch gelesen — ähnlich wie AGENTS.md, aber aufgeteilt nach Zweck."],["System-Prompt","Eine unsichtbare Anweisung die vor deiner Nachricht steht und das Verhalten des Modells grundlegend prägt (Sprache, Ton, Rolle). Skills nutzen oft den System-Prompt."],["Vision","Modelle mit Vision-Fähigkeit können Bilder verstehen — Screenshots, Diagramme, Fehlerfotos. Erkennbar am mmproj-Projektor der mitgeladen wird."]];var mv=g('

    '),bv=g(""),_v=g('
    '),yv=g('
    '),xv=g('

    Guide

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

    Begriffe kurz erklärt

    ',1);function kv(e,n){kn(n,!0);let a=F(0);function s(f){var _;u(a,f,!0),(_=document.getElementById(`guide-group-${f}`))==null||_.scrollIntoView({behavior:"smooth",block:"start"})}var l=xv(),o=i(Ye(l),2),d=i(r(o),2);Ze(d,21,()=>gv,nt,(f,_)=>{var T=U(()=>En(t(_),2));let y=()=>t(T)[0],k=()=>t(T)[1];var I=mv(),K=r(I),C=r(K),V=i(K,2),Ae=r(V);$(()=>{h(C,y()),h(Ae,k())}),p(f,I)});var v=i(o,2);Ze(v,21,()=>as,nt,(f,_,T)=>{var y=bv(),k=r(y);$(()=>{bt(y,1,`guide-tab${t(a)===T?" active":""}`,"svelte-112sh7i"),h(k,t(_).label)}),S("click",y,()=>s(T)),p(f,y)});var c=i(v,2);Ze(c,17,()=>as,nt,(f,_,T)=>{var y=yv();ga(y,"id",`guide-group-${T}`);var k=r(y),I=r(k),K=i(k,2);Ze(K,17,()=>t(_).tutorials,nt,(C,V,Ae)=>{var Ce=U(()=>En(t(V),2));let Be=()=>t(Ce)[0],De=()=>t(Ce)[1];var se=_v();se.open=T===0&&Ae===0;var le=r(se),$e=r(le),Te=i(le,2);lt(Te,De,!0),$(()=>h($e,Be())),p(C,se)}),$(()=>h(I,t(_).label)),p(f,y)}),p(e,l),wn()}$n(["click"]);var wv=g('
    '),Sv=g('

    Import aus Claude / Gemini / ChatGPT

    Füge Erkenntnisse aus anderen KI-Sessions ein — jede Zeile wird ein eigener Eintrag.
    '),Mv=g('

    Neuer Eintrag

    Strg+Enter zum Speichern
    '),Ev=g(' '),Av=g('
    Lade…
    '),Cv=g(''),Tv=g('
    '),zv=g('
    ',1),$v=g('
    '),Pv=g("
    "),Dv=g('
    '),Iv=g(`

    Gedächtnis

    Fakten, Entscheidungen und Kontext — geteilt von allen KI-Tools via MCP.
    Filter:

    Wie KI-Tools dieses Gedächtnis nutzen

    Cline, OpenCode und Claude Code greifen über den Memory MCP-Server auf diese Einträge zu. Beim Start einer Session lädt der Agent automatisch alle Einträge — er kennt dann deinen Stack, - deine Präferenzen und frühere Entscheidungen. Den Setup-Guide findest du unter Verbinden → Gedächtnis-MCP.
    Über mich = wer du bist, Präferenzen · Verhalten = Regeln für alle KI-Tools · Stabil = Projektfakten · Versioniert = Tech-Versionen · Temporär = 7 Tage, dann weg
    `,1);function Iv(e,n){Dn(n,!0);let a=R(Rt([])),s=R(!0),l=R("all"),o=R(!1),d=R(""),v=R("stable"),c=R(null),f=R(""),b=R("stable"),C=R(!1),_=R(""),y=R("stable"),D=R("import"),F=R(!1);const A=V(()=>t(_).split(` -`).map(O=>O.trim()).filter(O=>O.length>0)),N=V(()=>t(l)==="all"?t(a):t(a).filter(O=>O.category===t(l))),De={user:{label:"Über mich",color:"#a78bfa"},instruction:{label:"Verhalten",color:"#fb923c"},stable:{label:"Stabil",color:"var(--accent)"},versioned:{label:"Versioniert",color:"#f59e0b"},ephemeral:{label:"Temporär",color:"var(--mut)"}};function Ee(O){const W=Math.floor((Date.now()-new Date(O).getTime())/1e3);return W<60?"gerade eben":W<3600?`vor ${Math.floor(W/60)} Min`:W<86400?`vor ${Math.floor(W/3600)} Std`:`vor ${Math.floor(W/86400)} Tagen`}function Ce(O){return t(a).filter(W=>W.category===O).length}async function Ie(){try{u(a,await Se("/api/memory"),!0)}catch(O){ve("Laden fehlgeschlagen: "+O.message,!0)}finally{u(s,!1)}}async function re(){if(t(d).trim())try{const O=await Se("/api/memory",{method:"POST",body:JSON.stringify({content:t(d).trim(),category:t(v),source:"manual"})});u(a,[O,...t(a)],!0),u(d,""),u(v,"stable"),u(o,!1),ve("Gespeichert")}catch(O){ve("Fehler: "+O.message,!0)}}async function ne(O){try{const W=await Se(`/api/memory/${O.id}`,{method:"PUT",body:JSON.stringify({content:t(f),category:t(b)})});u(a,t(a).map(M=>M.id===O.id?W:M),!0),u(c,null),ve("Aktualisiert")}catch(W){ve("Fehler: "+W.message,!0)}}async function _e(O){if(await hn({title:"Eintrag löschen?",body:`„${O.content.length>80?O.content.slice(0,80)+"…":O.content}" wird dauerhaft entfernt.`,danger:!0}))try{await Se(`/api/memory/${O.id}`,{method:"DELETE"}),u(a,t(a).filter(M=>M.id!==O.id),!0),ve("Gelöscht")}catch(M){ve("Fehler: "+M.message,!0)}}function Le(O){u(c,O.id,!0),u(f,O.content,!0),u(b,O.category,!0)}let He=R(!1);async function Ne(){u(He,!0);try{const O=await Se("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!1})});if(O.duplicate_count===0){ve("Keine Dubletten gefunden 🎉");return}if(!await hn({title:`${O.duplicate_count} Dubletten entfernen?`,body:`${O.duplicate_count} doppelte Einträge werden gelöscht; die ${O.groups.length} vollständigeren bleiben erhalten. Nur exakte/enthaltene/sehr ähnliche Einträge derselben Kategorie.`,danger:!0}))return;const M=await Se("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!0})});ve(`${M.removed} Dubletten entfernt`),await Ie()}catch(O){ve("Fehler: "+O.message,!0)}finally{u(He,!1)}}async function ot(){if(t(A).length===0)return;u(F,!0);let O=0;for(const W of t(A))try{const M=await Se("/api/memory",{method:"POST",body:JSON.stringify({content:W,category:t(y),source:t(D)})});u(a,[M,...t(a)],!0),O++}catch{}u(F,!1),u(C,!1),u(_,""),ve(`${O} von ${t(A).length} Einträgen importiert`)}xi(()=>{Ie()});var I=Dv(),ye=tt(I),qe=i(r(ye),2),Qe=r(qe),G=r(Qe),oe=i(Qe,2),Oe=r(oe),Ge=i(oe,2),je=r(Ge),Be=i(ye,2);{var dt=O=>{var W=wv(),M=i(r(W),6);za(M,"placeholder",`Tobi arbeitet am liebsten abends. + deine Präferenzen und frühere Entscheidungen. Den Setup-Guide findest du unter Verbinden → Gedächtnis-MCP.
    Über mich = wer du bist, Präferenzen · Verhalten = Regeln für alle KI-Tools · Stabil = Projektfakten · Versioniert = Tech-Versionen · Temporär = 7 Tage, dann weg
    `,1);function Lv(e,n){kn(n,!0);let a=F(Lt([])),s=F(!0),l=F("all"),o=F(!1),d=F(""),v=F("stable"),c=F(null),f=F(""),_=F("stable"),T=F(!1),y=F(""),k=F("stable"),I=F("import"),K=F(!1);const C=U(()=>t(y).split(` +`).map(D=>D.trim()).filter(D=>D.length>0)),V=U(()=>t(l)==="all"?t(a):t(a).filter(D=>D.category===t(l))),Ae={user:{label:"Über mich",color:"#a78bfa"},instruction:{label:"Verhalten",color:"#fb923c"},stable:{label:"Stabil",color:"var(--accent)"},versioned:{label:"Versioniert",color:"#f59e0b"},ephemeral:{label:"Temporär",color:"var(--mut)"}};function Ce(D){const J=Math.floor((Date.now()-new Date(D).getTime())/1e3);return J<60?"gerade eben":J<3600?`vor ${Math.floor(J/60)} Min`:J<86400?`vor ${Math.floor(J/3600)} Std`:`vor ${Math.floor(J/86400)} Tagen`}function Be(D){return t(a).filter(J=>J.category===D).length}async function De(){try{u(a,await Se("/api/memory"),!0)}catch(D){he("Laden fehlgeschlagen: "+D.message,!0)}finally{u(s,!1)}}async function se(){if(t(d).trim())try{const D=await Se("/api/memory",{method:"POST",body:JSON.stringify({content:t(d).trim(),category:t(v),source:"manual"})});u(a,[D,...t(a)],!0),u(d,""),u(v,"stable"),u(o,!1),he("Gespeichert")}catch(D){he("Fehler: "+D.message,!0)}}async function le(D){try{const J=await Se(`/api/memory/${D.id}`,{method:"PUT",body:JSON.stringify({content:t(f),category:t(_)})});u(a,t(a).map(M=>M.id===D.id?J:M),!0),u(c,null),he("Aktualisiert")}catch(J){he("Fehler: "+J.message,!0)}}async function $e(D){if(await rn({title:"Eintrag löschen?",body:`„${D.content.length>80?D.content.slice(0,80)+"…":D.content}" wird dauerhaft entfernt.`,danger:!0}))try{await Se(`/api/memory/${D.id}`,{method:"DELETE"}),u(a,t(a).filter(M=>M.id!==D.id),!0),he("Gelöscht")}catch(M){he("Fehler: "+M.message,!0)}}function Te(D){u(c,D.id,!0),u(f,D.content,!0),u(_,D.category,!0)}let We=F(!1);async function rt(){u(We,!0);try{const D=await Se("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!1})});if(D.duplicate_count===0){he("Keine Dubletten gefunden 🎉");return}if(!await rn({title:`${D.duplicate_count} Dubletten entfernen?`,body:`${D.duplicate_count} doppelte Einträge werden gelöscht; die ${D.groups.length} vollständigeren bleiben erhalten. Nur exakte/enthaltene/sehr ähnliche Einträge derselben Kategorie.`,danger:!0}))return;const M=await Se("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!0})});he(`${M.removed} Dubletten entfernt`),await De()}catch(D){he("Fehler: "+D.message,!0)}finally{u(We,!1)}}async function Je(){if(t(C).length===0)return;u(K,!0);let D=0;for(const J of t(C))try{const M=await Se("/api/memory",{method:"POST",body:JSON.stringify({content:J,category:t(k),source:t(I)})});u(a,[M,...t(a)],!0),D++}catch{}u(K,!1),u(T,!1),u(y,""),he(`${D} von ${t(C).length} Einträgen importiert`)}di(()=>{De()});var R=Iv(),_e=Ye(R),Re=i(r(_e),2),at=r(Re),Q=r(at),de=i(at,2),xe=r(de),et=i(de,2),Ve=r(et),tt=i(_e,2);{var Ke=D=>{var J=Sv(),M=i(r(J),6);ga(M,"placeholder",`Tobi arbeitet am liebsten abends. Projektsprache: Deutsch. Bosgame M5 läuft mit Ubuntu 26.04. -...`);var ee=i(M,2),xe=r(ee),ze=i(r(xe),2),T=r(ze);T.value=T.__value="user";var K=i(T);K.value=K.__value="instruction";var se=i(K);se.value=se.__value="stable";var ie=i(se);ie.value=ie.__value="versioned";var ae=i(ie);ae.value=ae.__value="ephemeral";var ke=i(xe,2),ce=i(r(ke),2),E=r(ce);E.value=E.__value="import";var J=i(E);J.value=J.__value="claude";var de=i(J);de.value=de.__value="gemini";var Me=i(de);Me.value=Me.__value="chatgpt";var Q=i(Me);Q.value=Q.__value="manual";var le=i(ee,2);{var Ae=j=>{var we=kv(),Pe=r(we);$(()=>h(Pe,`${t(A).length??""} Eintrag/Einträge erkannt`)),p(j,we)};B(le,j=>{t(A).length>0&&j(Ae)})}var $e=i(le,2),x=r($e),Z=r(x),he=i(x,2);$(()=>{x.disabled=t(A).length===0||t(F),h(Z,t(F)?"Importiere…":`${t(A).length} Einträge speichern`)}),on(M,()=>t(_),j=>u(_,j)),Hn(ze,()=>t(y),j=>u(y,j)),Hn(ce,()=>t(D),j=>u(D,j)),S("click",x,ot),S("click",he,()=>{u(C,!1),u(_,"")}),p(O,W)};B(Be,O=>{t(C)&&O(dt)})}var Xe=i(Be,2);{var pt=O=>{var W=Sv(),M=i(r(W),4),ee=i(M,4),xe=r(ee);xe.value=xe.__value="user";var ze=i(xe);ze.value=ze.__value="instruction";var T=i(ze);T.value=T.__value="stable";var K=i(T);K.value=K.__value="versioned";var se=i(K);se.value=se.__value="ephemeral";var ie=i(ee,2),ae=r(ie),ke=i(ae,2);$(ce=>ae.disabled=ce,[()=>!t(d).trim()]),S("keydown",M,ce=>{ce.key==="Enter"&&(ce.ctrlKey||ce.metaKey)&&re()}),on(M,()=>t(d),ce=>u(d,ce)),Hn(ee,()=>t(v),ce=>u(v,ce)),S("click",ae,re),S("click",ke,()=>{u(o,!1),u(d,"")}),p(O,W)};B(Xe,O=>{t(o)&&O(pt)})}var ct=i(Xe,2),mt=r(ct),Ct=i(r(mt),2);Ze(Ct,17,()=>[["all","Alle","",t(a).length],["user","Über mich","#a78bfa",Ce("user")],["instruction","Verhalten","#fb923c",Ce("instruction")],["stable","Stabil","var(--accent)",Ce("stable")],["versioned","Versioniert","#f59e0b",Ce("versioned")],["ephemeral","Temporär","var(--mut)",Ce("ephemeral")]],et,(O,W)=>{var M=V(()=>Bn(t(W),4));let ee=()=>t(M)[0],xe=()=>t(M)[1],ze=()=>t(M)[2],T=()=>t(M)[3];var K=Mv(),se=r(K),ie=i(se),ae=r(ie);$(()=>{St(K,`cursor:pointer;${t(l)===ee()?`background:rgba(45,212,191,.12);border-color:${ze()||"var(--accent)"};color:${ze()||"var(--accent)"}`:""}`),h(se,`${xe()??""} `),h(ae,T())}),S("click",K,()=>u(l,ee(),!0)),S("keydown",K,ke=>ke.key==="Enter"&&u(l,ee(),!0)),p(O,K)});var Tt=i(ct,2);{var Mt=O=>{var W=Ev();p(O,W)},Ft=O=>{var W=Cv(),M=r(W),ee=r(M),xe=r(ee),ze=i(ee,2),T=r(ze),K=i(ze,2);{var se=ie=>{var ae=Av();S("click",ae,()=>u(o,!0)),p(ie,ae)};B(K,ie=>{t(a).length===0&&ie(se)})}$(()=>{h(xe,t(a).length===0?"Noch keine Einträge":"Keine Treffer"),h(T,t(a).length===0?'Klicke „+ Eintrag" um manuell etwas zu speichern, oder verbinde ein KI-Tool via MCP.':"Andere Kategorie wählen oder Eintrag anlegen.")}),p(O,W)},zt=O=>{var W=Pv();Ze(W,23,()=>t(N),M=>M.id,(M,ee,xe)=>{var ze=$v(),T=r(ze);{var K=ie=>{var ae=Tv(),ke=tt(ae),ce=i(ke,2),E=r(ce);E.value=E.__value="user";var J=i(E);J.value=J.__value="instruction";var de=i(J);de.value=de.__value="stable";var Me=i(de);Me.value=Me.__value="versioned";var Q=i(Me);Q.value=Q.__value="ephemeral";var le=i(ce,2),Ae=r(le),$e=i(Ae,2);on(ke,()=>t(f),x=>u(f,x)),Hn(ce,()=>t(b),x=>u(b,x)),S("click",Ae,()=>ne(t(ee))),S("click",$e,()=>u(c,null)),p(ie,ae)},se=ie=>{var ae=zv(),ke=r(ae),ce=r(ke),E=r(ce),J=i(ce,2),de=r(J),Me=r(de),Q=i(de,2),le=r(Q),Ae=i(Q,2),$e=r(Ae),x=i(ke,2),Z=r(x),he=i(Z,2);$(j=>{var we,Pe,Fe;h(E,t(ee).content),St(de,`border-color:${(((we=De[t(ee).category])==null?void 0:we.color)||"var(--mut)")??""};color:${(((Pe=De[t(ee).category])==null?void 0:Pe.color)||"var(--mut)")??""}`),h(Me,((Fe=De[t(ee).category])==null?void 0:Fe.label)||t(ee).category),h(le,t(ee).source),h($e,j)},[()=>Ee(t(ee).updated_at)]),S("click",Z,()=>Le(t(ee))),S("click",he,()=>_e(t(ee))),p(ie,ae)};B(T,ie=>{t(c)===t(ee).id?ie(K):ie(se,-1)})}$(()=>St(ze,`padding:14px 16px;${t(xe){t(s)?O(Mt):t(N).length===0?O(Ft,1):O(zt,-1)})}var Et=i(Tt,2),L=i(r(Et),2),H=i(r(L),3);$(()=>{Qe.disabled=t(He),h(G,t(He)?"…":"🧹 Aufräumen"),h(Oe,t(C)?"Abbrechen":"⇩ Import"),h(je,t(o)?"Abbrechen":"+ Eintrag")}),S("click",Qe,Ne),S("click",oe,()=>{u(C,!t(C)),u(o,!1),u(_,"")}),S("click",Ge,()=>{u(o,!t(o)),u(C,!1),u(d,"")}),S("click",H,O=>{var W;O.preventDefault(),(W=document.querySelector(".nav-item[data-view='connect']"))==null||W.click()}),p(e,I),In()}qn(["click","keydown"]);var ss=g(' '),Lv=g(' Sessions'),Ov=g(' Nachrichten'),Bv=g(' Tool-Calls'),Rv=g(' Tokens'),Fv=g(' aktiv'),Kv=g('
    '),Nv=g('
    Meistgenutzte Tools
    ',1),qv=g('
    Aktivität (letzte 30 Tage)
    '),Gv=g('
  3. '),Vv=g('
      '),Wv=g('
      '),jv=g('
      Was Hermes über dich gelernt hat (automatisches Profil)
      '),Uv=g(`
      Keine geplanten Jobs. Hermes kann selbst welche anlegen — sag ihm z. B. - „Erinnere mich jeden Morgen um 9 Uhr an die offenen Modell-Upgrades".
      `),Hv=g(' '),Jv=g(`
      `),Qv=g('
      '),Zv=g('
      Keine Skills geladen (oder Agent offline).
      '),Yv=g(' '),Xv=g(' '),eu=g('
      '),tu=g('
      '),nu=g('

      Agent-Cockpit

      Status
      Hermes-Gateway-Dienst (:8642) auf dem Bosgame
      Geplante Aufgaben
      Skills
      '),au=g('
      pip install faster-whisper
      '),iu=g('
      '),ru=g('
      4. Bosgame-Key eintragen (in Windows PowerShell):
      '),su=g('
      SSH-Key nicht gefunden — bitte auf dem Bosgame generieren: ssh-keygen -t ed25519 -C "hermes-agent@bosgame" -f ~/.ssh/id_ed25519_hermes_agent -N ""
      '),lu=g('
      Einrichtung (einmalig, ~3 Minuten):
      1. PowerShell als Admin — OpenSSH Server installieren:
      Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
      2. Dienst starten und dauerhaft aktivieren:
      3. SSH-Ordner erstellen:
      5. Windows-IP in Mission Control Env-Var setzen:
      HERMES_WINDOWS_HOST=192.168.178.XXX
      '),ou=g('

      Hermes Setup-Wizard

      Whisper (Sprache → Text)
      faster-whisper muss auf dem Bosgame installiert sein
      Piper TTS (Text → Sprache)
      Piper-Binary + deutsche Stimme
      Windows SSH-Verbindung
      Damit Hermes Dateien auf deinem Windows-PC ändern kann
      '),du=g(''),cu=g(`
      Hermes-Agent offline
      Der Hermes-Gateway (:8642) bzw. das Dashboard (:9119) ist nicht erreichbar. - Status im Cockpit prüfen oder den Dienst neu starten.
      `),vu=g('

      Hermes

      ',1);function uu(e,n){Dn(n,!0);let a=R(null),s=R(!1),l=R(!1),o=R(!1),d=R(null),v=R(Rt([])),c=R(Rt([])),f=R(null),b=R(null),C=R("");async function _(){try{u(a,await Se("/api/hermes/status"),!0)}catch{u(a,null)}}async function y(){try{const G=await Se("/api/hermes/pubkey");u(C,G.pubkey,!0)}catch{u(C,"")}}async function D(){u(o,!0);try{const[G,oe,Oe,Ge,je]=await Promise.all([Se("/api/hermes/agent"),Se("/api/hermes/cron"),Se("/api/hermes/skills"),Se("/api/hermes/learned"),Se("/api/hermes/insights")]);u(d,G,!0),u(v,oe.jobs||[],!0),u(c,Oe.skills||[],!0),u(f,Ge,!0),u(b,je,!0)}catch{u(d,null)}u(o,!1)}let F=V(()=>[...t(c)].sort((G,oe)=>(oe.use_count||0)-(G.use_count||0)||(G.name||"").localeCompare(oe.name||""))),A=V(()=>t(c).filter(G=>(G.status||"").includes("enabled")).length);function N(){var G;(G=navigator.clipboard)==null||G.writeText(t(C)),ve("SSH-Key kopiert")}xi(()=>{_()});var De=vu(),Ee=tt(De),Ce=i(r(Ee),2),Ie=r(Ce),re=r(Ie),ne=i(Ie,2),_e=i(ne,2),Le=i(Ee,2);{var He=G=>{var oe=nu(),Oe=r(oe),Ge=i(r(Oe),2),je=r(Ge),Be=i(Oe,2),dt=r(Be),Xe=i(r(dt),2),pt=r(Xe),ct=r(pt),mt=i(pt,2),Ct=r(mt),Tt=i(mt,2);{var Mt=Q=>{var le=ss(),Ae=r(le);$(()=>h(Ae,`Ticker vor ${t(d).heartbeat_age_s??""}s`)),p(Q,le)};B(Tt,Q=>{var le;((le=t(d))==null?void 0:le.heartbeat_age_s)!=null&&Q(Mt)})}var Ft=i(Tt,2);{var zt=Q=>{var le=ss(),Ae=r(le);$($e=>{za(le,"title",t(d).version),h(Ae,$e)},[()=>t(d).version.split(" · ")[0]]),p(Q,le)};B(Ft,Q=>{var le;(le=t(d))!=null&&le.version&&Q(zt)})}var Et=i(Be,2);{var L=Q=>{var le=qv(),Ae=i(r(le),2),$e=r(Ae);{var x=q=>{var te=Lv(),be=r(te),fe=r(be);$(()=>h(fe,t(b).sessions)),p(q,te)};B($e,q=>{t(b).sessions&&q(x)})}var Z=i($e,2);{var he=q=>{var te=Ov(),be=r(te),fe=r(be);$(()=>h(fe,t(b).messages)),p(q,te)};B(Z,q=>{t(b).messages&&q(he)})}var j=i(Z,2);{var we=q=>{var te=Bv(),be=r(te),fe=r(be);$(()=>h(fe,t(b).tool_calls)),p(q,te)};B(j,q=>{t(b).tool_calls&&q(we)})}var Pe=i(j,2);{var Fe=q=>{var te=Rv(),be=r(te),fe=r(be);$(()=>h(fe,t(b).total_tokens)),p(q,te)};B(Pe,q=>{t(b).total_tokens&&q(Fe)})}var Te=i(Pe,2);{var U=q=>{var te=Fv(),be=r(te),fe=r(be);$(()=>h(fe,t(b).active_time)),p(q,te)};B(Te,q=>{t(b).active_time&&q(U)})}var Y=i(Ae,2);{var X=q=>{var te=Nv(),be=i(tt(te),2);Ze(be,21,()=>t(b).top_tools.slice(0,6),et,(fe,ue)=>{var ge=Kv(),kt=r(ge),$t=r(kt),Dt=i(kt,2),gn=r(Dt),Yn=i(Dt,2),ca=r(Yn);$(()=>{h($t,t(ue).name),St(gn,`display:block;height:100%;width:${t(ue).pct??""}%;background:var(--accent)`),h(ca,`${t(ue).calls??""}× · ${t(ue).pct??""}%`)}),p(fe,ge)}),p(q,te)};B(Y,q=>{var te;(te=t(b).top_tools)!=null&&te.length&&q(X)})}p(Q,le)};B(Et,Q=>{t(b)&&(t(b).sessions||t(b).total_tokens)&&Q(L)})}var H=i(Et,2);{var O=Q=>{var le=jv(),Ae=i(r(le),2);{var $e=he=>{var j=Vv();Ze(j,21,()=>t(f).user_facts,et,(we,Pe)=>{var Fe=Gv(),Te=r(Fe);$(()=>h(Te,t(Pe))),p(we,Fe)}),p(he,j)};B(Ae,he=>{var j;(j=t(f).user_facts)!=null&&j.length&&he($e)})}var x=i(Ae,2);{var Z=he=>{var j=Wv(),we=r(j);$(()=>h(we,t(f).memory)),p(he,j)};B(x,he=>{t(f).memory&&he(Z)})}p(Q,le)};B(H,Q=>{var le,Ae,$e;((Ae=(le=t(f))==null?void 0:le.user_facts)!=null&&Ae.length||($e=t(f))!=null&&$e.memory)&&Q(O)})}var W=i(H,2),M=r(W),ee=r(M),xe=i(r(ee)),ze=r(xe),T=i(M,2);{var K=Q=>{var le=Uv();p(Q,le)},se=Q=>{var le=Qv();Ze(le,21,()=>t(v),et,(Ae,$e)=>{var x=Jv();Ze(x,21,()=>Object.entries(t($e)),et,(Z,he)=>{var j=V(()=>Bn(t(he),2));let we=()=>t(j)[0],Pe=()=>t(j)[1];var Fe=Ea(),Te=tt(Fe);{var U=Y=>{var X=Hv(),q=r(X),te=r(q),be=i(q);$(()=>{h(te,`${we()??""}:`),h(be,` ${Pe()??""}`)}),p(Y,X)};B(Te,Y=>{Pe()&&Y(U)})}p(Z,Fe)}),p(Ae,x)}),p(Q,le)};B(T,Q=>{t(v).length===0?Q(K):Q(se,-1)})}var ie=i(W,2),ae=r(ie),ke=r(ae),ce=i(r(ke)),E=r(ce),J=i(ae,2);{var de=Q=>{var le=Zv();p(Q,le)},Me=Q=>{var le=tu();Ze(le,21,()=>t(F),et,(Ae,$e)=>{var x=eu(),Z=r(x),he=i(Z,2),j=r(he),we=i(he,2);{var Pe=X=>{var q=Yv(),te=r(q);$(()=>h(te,t($e).category)),p(X,q)};B(we,X=>{t($e).category&&X(Pe)})}var Fe=i(we,4);{var Te=X=>{var q=Xv(),te=r(q);$(()=>h(te,`${t($e).use_count??""}× genutzt`)),p(X,q)};B(Fe,X=>{t($e).use_count>0&&X(Te)})}var U=i(Fe,2),Y=r(U);$((X,q)=>{St(x,`display:flex;align-items:center;gap:8px;font-size:12.5px;padding:4px 8px; - border-radius:6px;${X??""}`),St(Z,`width:7px;height:7px;border-radius:50%;flex-shrink:0; - background:${q??""}`),h(j,t($e).name),h(Y,t($e).source)},[()=>(t($e).status||"").includes("enabled")?"":"opacity:.45",()=>(t($e).status||"").includes("enabled")?"var(--accent)":"var(--mut)"]),p(Ae,x)}),p(Q,le)};B(J,Q=>{t(c).length===0?Q(de):Q(Me,-1)})}$(()=>{var Q,le,Ae,$e;h(je,t(o)?"…":"↻ Aktualisieren"),St(pt,`font-size:11px;${((Q=t(d))==null?void 0:Q.gateway_state)==="running"?"color:#7ee29a;border-color:rgba(126,226,154,.4)":"color:#ff9b95;border-color:rgba(255,155,149,.4)"}`),h(ct,`● ${((le=t(d))==null?void 0:le.gateway_state)??"offline"??""}`),St(mt,`font-size:11px;${(Ae=t(d))!=null&&Ae.cron_running?"color:var(--accent);border-color:var(--accent)":"color:var(--mut)"}`),h(Ct,`⏱ Scheduler ${($e=t(d))!=null&&$e.cron_running?"läuft":"inaktiv"}`),h(ze,`(${t(v).length??""})`),h(E,`(${t(A)??""} aktiv von ${t(c).length??""})`)}),S("click",Ge,D),p(G,oe)};B(Le,G=>{t(l)&&G(He)})}var Ne=i(Le,2);{var ot=G=>{var oe=ou(),Oe=i(r(oe),2),Ge=r(Oe),je=i(r(Ge),2),Be=r(je),dt=i(Ge,2);{var Xe=W=>{var M=au();p(W,M)};B(dt,W=>{var M;((M=t(a))==null?void 0:M.whisper)==="not_installed"&&W(Xe)})}var pt=i(Oe,2),ct=r(pt),mt=i(r(ct),2),Ct=r(mt),Tt=i(ct,2);{var Mt=W=>{var M=iu(),ee=r(M),xe=r(ee);$(ze=>h(xe,ze),[()=>["# 1. Piper Binary (Linux x86_64)","mkdir -p /opt/mission-control/piper/voices","cd /tmp && wget -q https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_x86_64.tar.gz","tar -xzf piper_linux_x86_64.tar.gz -C /opt/mission-control/piper/ --strip-components=1","","# 2. Deutsche Stimme — Kerstin (weiblich, ~25 MB)","wget -q -O /opt/mission-control/piper/voices/de_DE-kerstin-low.onnx \\",' "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx"',"wget -q -O /opt/mission-control/piper/voices/de_DE-kerstin-low.onnx.json \\",' "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx.json"'].join(` -`)]),p(W,M)};B(Tt,W=>{var M;((M=t(a))==null?void 0:M.piper)!=="ready"&&W(Mt)})}var Ft=i(pt,2),zt=r(Ft),Et=i(r(zt),2),L=r(Et),H=i(zt,2);{var O=W=>{var M=lu(),ee=i(r(M),4),xe=i(r(ee),2),ze=r(xe);ze.textContent=`Start-Service sshd -Set-Service -Name sshd -StartupType Automatic`;var T=i(ee,2),K=i(r(T),2),se=r(K);se.textContent='New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\\.ssh"';var ie=i(T,2);{var ae=E=>{var J=ru(),de=i(r(J),2),Me=r(de),Q=i(Me,2),le=r(Q),Ae=r(le);$(()=>h(Ae,'echo "'+t(C)+'" >> "$env:USERPROFILE\\.ssh\\authorized_keys"')),S("click",Me,N),p(E,J)},ke=E=>{var J=su();p(E,J)};B(ie,E=>{t(C)?E(ae):E(ke,-1)})}var ce=i(ie,4);S("click",ce,()=>{_(),ve("Status aktualisiert")}),p(W,M)};B(H,W=>{var M;(M=t(a))!=null&&M.ssh_ok||W(O)})}$(()=>{var W,M,ee,xe,ze,T;St(je,`font-size:11px;${((W=t(a))==null?void 0:W.whisper)!=="not_installed"?"color:#7ee29a":"color:#ff9b95"}`),h(Be,((M=t(a))==null?void 0:M.whisper)!=="not_installed"?"✓ OK":"✗ fehlt"),St(mt,`font-size:11px;${((ee=t(a))==null?void 0:ee.piper)==="ready"?"color:#7ee29a":"color:#ff9b95"}`),h(Ct,((xe=t(a))==null?void 0:xe.piper)==="ready"?"✓ OK":"✗ fehlt"),St(Et,`font-size:11px;${(ze=t(a))!=null&&ze.ssh_ok?"color:#7ee29a":"color:var(--mut)"}`),h(L,(T=t(a))!=null&&T.ssh_ok?"✓ verbunden":"optional")}),p(G,oe)};B(Ne,G=>{t(s)&&G(ot)})}var I=i(Ne,2),ye=r(I);{var qe=G=>{var oe=du();p(G,oe)},Qe=G=>{var oe=cu();p(G,oe)};B(ye,G=>{var oe;((oe=t(a))==null?void 0:oe.hermes)==="ready"?G(qe):G(Qe,-1)})}$(()=>{var G,oe;St(Ie,`font-size:11px;${((G=t(a))==null?void 0:G.hermes)==="ready"?"color:#7ee29a;border-color:rgba(126,226,154,.4)":"color:#ff9b95;border-color:rgba(255,155,149,.4)"}`),h(re,`● Agent: ${((oe=t(a))==null?void 0:oe.hermes)==="ready"?"online":"offline"}`),St(ne,`padding:4px 10px;font-size:12px;${t(l)?"border-color:var(--accent);color:var(--accent)":""}`)}),S("click",ne,()=>{u(l,!t(l)),t(l)&&D()}),S("click",_e,()=>{u(s,!t(s)),t(s)&&(_(),y())}),p(e,De),In()}qn(["click"]);let ls={};function pu(){const e=document.getElementById("top-active-text");e&&(e.classList.add("swap-flash"),setTimeout(()=>e.classList.remove("swap-flash"),900))}function os(e){var l;const n=document.getElementById("swdot"),a=document.getElementById("swlabel"),s=document.getElementById("top-active-text");if(!e)n&&(n.className="dot off"),a&&(a.textContent="Backend nicht erreichbar"),s&&(s.textContent="Backend offline"),ds("Backend nicht erreichbar – läuft uvicorn?",!1);else{const o=(e.swap_url||"").replace(/^https?:\/\//,"");n&&(n.className="dot "+(e.swap_ok?"on":"off")),a&&(a.textContent=(e.swap_ok?"LLM-Engine: Online – ":"LLM-Engine: Offline – ")+o);const d=["running","ready","loading","starting"],v=(e.models||[]).find(f=>d.includes(f.state));if(s)if(v){const f=(l=v.meta)!=null&&l.ctx?` · ${Math.round(v.meta.ctx/1024)}k ctx`:"",b=v.state==="loading"||v.state==="starting"?' lädt…':"";s.innerHTML=`${v.name}${f}${b}`}else s.innerHTML='Kein Modell im VRAM';e.swap_ok?mu():ds(`LLM-Engine nicht erreichbar unter ${o} – läuft der llama-swap Dienst?`,!0);const c={};for(const f of e.models||[])c[f.name]=f.state;for(const[f,b]of Object.entries(c)){const C=ls[f];if(C&&C!==b&&(b==="running"||b==="loading")){pu();break}}ls=c}fu(e),Si.set(e)}function fu(e){const n=document.getElementById("sec-chip"),a=document.getElementById("sec-chip-tx");!n||!a||(n.classList.toggle("ok",!!(e!=null&&e.secured)),a.textContent=e!=null&&e.secured?"Geschützt · Heimnetz":"Nur im Heimnetz (offen)")}function hu(e){ga.set(e||[])}function gu(e){Br.set(e)}function ds(e,n){const a=document.getElementById("alert");a.className="alert"+(n?" warn":""),a.innerHTML=`${e}`,a.style.display="flex"}function mu(){const e=document.getElementById("alert");e&&(e.style.display="none")}const bu=e=>{var n;return(n=document.querySelector(`.nav-item[data-view="${e}"]`))==null?void 0:n.click()};function lr(e,n,a,s){const l=document.createElement("span");return l.className="upd-badge"+(n?" "+n:""),l.textContent=e,s&&(l.title=s),l.onclick=()=>bu(a),l}async function dl(){try{const e=await Se("/api/updates"),n=document.getElementById("update-badges");if(!n)return;const a=e.apt_cache_age_h,s=a!=null&&a>24,l=a!=null?` · apt-Cache: vor ${a}h`:"";n.innerHTML="",n.appendChild(lr(e.os>0?`OS: ${e.os} Updates`:s?"OS: ?":"OS: aktuell",e.os>0||s?"warn":"ok","server",e.os>0?`${e.os} Pakete${l}`:s?`apt-Cache veraltet (${a}h)`:`Keine Updates${l}`)),n.appendChild(lr(e.engine>0?"Engine: Update":"Engine: aktuell",e.engine>0?"warn":"ok","server")),n.appendChild(lr(e.models>0?`Modelle: ${e.models}`:"Modelle: aktuell",e.models>0?"warn":"ok","news"))}catch{}}async function Ui(){try{os(await Se("/api/status"))}catch{os(null)}}async function cl(){try{hu(await Se("/api/jobs"))}catch{}}function vl(){const e=window.location.protocol==="https:"?"wss:":"ws:",n=new WebSocket(`${e}//${window.location.host}/api/system/stream`);n.onmessage=a=>{try{gu(JSON.parse(a.data))}catch{}},n.onclose=()=>{setTimeout(vl,3e3)},n.onerror=()=>n.close()}var hs;((hs=document.getElementById("logo"))==null?void 0:hs.innerHTML)!==void 0&&(document.getElementById("logo").innerHTML=ji.logo);document.querySelectorAll("[data-ic]").forEach(e=>{e.innerHTML=ji[e.dataset.ic||""]||""});const _u=[["overview",bd],["models",Dd],["activity",Vd],["server",ec],["cookbook",Bc],["connect",iv],["news",fv],["guides",xv],["memory",Iv],["hermes",uu]];for(const[e,n]of _u){const a=document.querySelector(`.view[data-view="${e}"]`);a&&$o(n,{target:a})}Xo("overview");const or=document.getElementById("token");or&&(or.value=ol(),or.addEventListener("change",e=>{Ho(e.target.value),Ui()}));const dr=document.getElementById("hf-token");dr&&(dr.value=ui(),dr.addEventListener("change",e=>Qo(e.target.value)));const cs=document.getElementById("nav-settings"),cr=document.getElementById("settings-modal"),vs=document.getElementById("sm-close");cs&&cr&&vs&&(cs.addEventListener("click",()=>cr.style.display="flex"),vs.addEventListener("click",()=>cr.style.display="none"));function yu(){const e=document.getElementById("clock");e&&(e.textContent=new Date().toTimeString().slice(0,5))}document.addEventListener("mc:refresh",Ui);Ui();cl();vl();setInterval(yu,1e3);setInterval(Ui,3e3);setInterval(cl,1500);dl();setInterval(dl,6e4); +...`);var ie=i(M,2),ke=r(ie),Ie=i(r(ke),2),z=r(Ie);z.value=z.__value="user";var N=i(z);N.value=N.__value="instruction";var ve=i(N);ve.value=ve.__value="stable";var oe=i(ve);oe.value=oe.__value="versioned";var re=i(oe);re.value=re.__value="ephemeral";var we=i(ke,2),pe=i(r(we),2),E=r(pe);E.value=E.__value="import";var Y=i(E);Y.value=Y.__value="claude";var fe=i(Y);fe.value=fe.__value="gemini";var Me=i(fe);Me.value=Me.__value="chatgpt";var ne=i(Me);ne.value=ne.__value="manual";var ce=i(ie,2);{var ze=m=>{var x=wv(),A=r(x);$(()=>h(A,`${t(C).length??""} Eintrag/Einträge erkannt`)),p(m,x)};O(ce,m=>{t(C).length>0&&m(ze)})}var Pe=i(ce,2),w=r(Pe),ee=r(w),ge=i(w,2);$(()=>{w.disabled=t(C).length===0||t(K),h(ee,t(K)?"Importiere…":`${t(C).length} Einträge speichern`)}),Yt(M,()=>t(y),m=>u(y,m)),On(Ie,()=>t(k),m=>u(k,m)),On(pe,()=>t(I),m=>u(I,m)),S("click",w,Je),S("click",ge,()=>{u(T,!1),u(y,"")}),p(D,J)};O(tt,D=>{t(T)&&D(Ke)})}var it=i(tt,2);{var dt=D=>{var J=Mv(),M=i(r(J),4),ie=i(M,4),ke=r(ie);ke.value=ke.__value="user";var Ie=i(ke);Ie.value=Ie.__value="instruction";var z=i(Ie);z.value=z.__value="stable";var N=i(z);N.value=N.__value="versioned";var ve=i(N);ve.value=ve.__value="ephemeral";var oe=i(ie,2),re=r(oe),we=i(re,2);$(pe=>re.disabled=pe,[()=>!t(d).trim()]),S("keydown",M,pe=>{pe.key==="Enter"&&(pe.ctrlKey||pe.metaKey)&&se()}),Yt(M,()=>t(d),pe=>u(d,pe)),On(ie,()=>t(v),pe=>u(v,pe)),S("click",re,se),S("click",we,()=>{u(o,!1),u(d,"")}),p(D,J)};O(it,D=>{t(o)&&D(dt)})}var ht=i(it,2),ct=r(ht),_t=i(r(ct),2);Ze(_t,17,()=>[["all","Alle","",t(a).length],["user","Über mich","#a78bfa",Be("user")],["instruction","Verhalten","#fb923c",Be("instruction")],["stable","Stabil","var(--accent)",Be("stable")],["versioned","Versioniert","#f59e0b",Be("versioned")],["ephemeral","Temporär","var(--mut)",Be("ephemeral")]],nt,(D,J)=>{var M=U(()=>En(t(J),4));let ie=()=>t(M)[0],ke=()=>t(M)[1],Ie=()=>t(M)[2],z=()=>t(M)[3];var N=Ev(),ve=r(N),oe=i(ve),re=r(oe);$(()=>{St(N,`cursor:pointer;${t(l)===ie()?`background:rgba(45,212,191,.12);border-color:${Ie()||"var(--accent)"};color:${Ie()||"var(--accent)"}`:""}`),h(ve,`${ke()??""} `),h(re,z())}),S("click",N,()=>u(l,ie(),!0)),S("keydown",N,we=>we.key==="Enter"&&u(l,ie(),!0)),p(D,N)});var At=i(ht,2);{var xt=D=>{var J=Av();p(D,J)},Pt=D=>{var J=Tv(),M=r(J),ie=r(M),ke=r(ie),Ie=i(ie,2),z=r(Ie),N=i(Ie,2);{var ve=oe=>{var re=Cv();S("click",re,()=>u(o,!0)),p(oe,re)};O(N,oe=>{t(a).length===0&&oe(ve)})}$(()=>{h(ke,t(a).length===0?"Noch keine Einträge":"Keine Treffer"),h(z,t(a).length===0?'Klicke „+ Eintrag" um manuell etwas zu speichern, oder verbinde ein KI-Tool via MCP.':"Andere Kategorie wählen oder Eintrag anlegen.")}),p(D,J)},Ct=D=>{var J=Dv();Ze(J,23,()=>t(V),M=>M.id,(M,ie,ke)=>{var Ie=Pv(),z=r(Ie);{var N=oe=>{var re=zv(),we=Ye(re),pe=i(we,2),E=r(pe);E.value=E.__value="user";var Y=i(E);Y.value=Y.__value="instruction";var fe=i(Y);fe.value=fe.__value="stable";var Me=i(fe);Me.value=Me.__value="versioned";var ne=i(Me);ne.value=ne.__value="ephemeral";var ce=i(pe,2),ze=r(ce),Pe=i(ze,2);Yt(we,()=>t(f),w=>u(f,w)),On(pe,()=>t(_),w=>u(_,w)),S("click",ze,()=>le(t(ie))),S("click",Pe,()=>u(c,null)),p(oe,re)},ve=oe=>{var re=$v(),we=r(re),pe=r(we),E=r(pe),Y=i(pe,2),fe=r(Y),Me=r(fe),ne=i(fe,2),ce=r(ne),ze=i(ne,2),Pe=r(ze),w=i(we,2),ee=r(w),ge=i(ee,2);$(m=>{var x,A,q;h(E,t(ie).content),St(fe,`border-color:${(((x=Ae[t(ie).category])==null?void 0:x.color)||"var(--mut)")??""};color:${(((A=Ae[t(ie).category])==null?void 0:A.color)||"var(--mut)")??""}`),h(Me,((q=Ae[t(ie).category])==null?void 0:q.label)||t(ie).category),h(ce,t(ie).source),h(Pe,m)},[()=>Ce(t(ie).updated_at)]),S("click",ee,()=>Te(t(ie))),S("click",ge,()=>$e(t(ie))),p(oe,re)};O(z,oe=>{t(c)===t(ie).id?oe(N):oe(ve,-1)})}$(()=>St(Ie,`padding:14px 16px;${t(ke){t(s)?D(xt):t(V).length===0?D(Pt,1):D(Ct,-1)})}var kt=i(At,2),B=i(r(kt),2),Z=i(r(B),3);$(()=>{at.disabled=t(We),h(Q,t(We)?"…":"🧹 Aufräumen"),h(xe,t(T)?"Abbrechen":"⇩ Import"),h(Ve,t(o)?"Abbrechen":"+ Eintrag")}),S("click",at,rt),S("click",de,()=>{u(T,!t(T)),u(o,!1),u(y,"")}),S("click",et,()=>{u(o,!t(o)),u(T,!1),u(d,"")}),S("click",Z,D=>{var J;D.preventDefault(),(J=document.querySelector(".nav-item[data-view='connect']"))==null||J.click()}),p(e,R),wn()}$n(["click","keydown"]);var is=g(' '),Ov=g(' Sessions'),Bv=g(' Nachrichten'),Rv=g(' Tool-Calls'),Fv=g(' Tokens'),Kv=g(' aktiv'),Nv=g('
      '),qv=g('
      Meistgenutzte Tools
      ',1),Gv=g('
      Aktivität (letzte 30 Tage)
      '),Vv=g('
    • '),Wv=g('
        '),jv=g('
        '),Uv=g('
        Was Hermes über dich gelernt hat (automatisches Profil)
        '),Hv=g(`
        Keine geplanten Jobs. Hermes kann selbst welche anlegen — sag ihm z. B. + „Erinnere mich jeden Morgen um 9 Uhr an die offenen Modell-Upgrades".
        `),Jv=g(' '),Qv=g(`
        `),Zv=g('
        '),Yv=g('
        Keine Skills geladen (oder Agent offline).
        '),Xv=g(' '),eu=g(' '),tu=g('
        '),nu=g('
        '),au=g('

        Agent-Cockpit

        Status
        Hermes-Gateway-Dienst (:8642) auf dem Bosgame
        Geplante Aufgaben
        Skills
        '),iu=g('
        pip install faster-whisper
        '),ru=g('
        '),su=g('
        4. Bosgame-Key eintragen (in Windows PowerShell):
        '),lu=g('
        SSH-Key nicht gefunden — bitte auf dem Bosgame generieren: ssh-keygen -t ed25519 -C "hermes-agent@bosgame" -f ~/.ssh/id_ed25519_hermes_agent -N ""
        '),ou=g('
        Einrichtung (einmalig, ~3 Minuten):
        1. PowerShell als Admin — OpenSSH Server installieren:
        Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
        2. Dienst starten und dauerhaft aktivieren:
        3. SSH-Ordner erstellen:
        5. Windows-IP in Mission Control Env-Var setzen:
        HERMES_WINDOWS_HOST=192.168.178.XXX
        '),du=g('

        Hermes Setup-Wizard

        Whisper (Sprache → Text)
        faster-whisper muss auf dem Bosgame installiert sein
        Piper TTS (Text → Sprache)
        Piper-Binary + deutsche Stimme
        Windows SSH-Verbindung
        Damit Hermes Dateien auf deinem Windows-PC ändern kann
        '),cu=g(''),vu=g(`
        Hermes-Agent offline
        Der Hermes-Gateway (:8642) bzw. das Dashboard (:9119) ist nicht erreichbar. + Status im Cockpit prüfen oder den Dienst neu starten.
        `),uu=g('

        Hermes

        ',1);function pu(e,n){kn(n,!0);let a=F(null),s=F(!1),l=F(!1),o=F(!1),d=F(null),v=F(Lt([])),c=F(Lt([])),f=F(null),_=F(null),T=F("");async function y(){try{u(a,await Se("/api/hermes/status"),!0)}catch{u(a,null)}}async function k(){try{const Q=await Se("/api/hermes/pubkey");u(T,Q.pubkey,!0)}catch{u(T,"")}}async function I(){u(o,!0);try{const[Q,de,xe,et,Ve]=await Promise.all([Se("/api/hermes/agent"),Se("/api/hermes/cron"),Se("/api/hermes/skills"),Se("/api/hermes/learned"),Se("/api/hermes/insights")]);u(d,Q,!0),u(v,de.jobs||[],!0),u(c,xe.skills||[],!0),u(f,et,!0),u(_,Ve,!0)}catch{u(d,null)}u(o,!1)}let K=U(()=>[...t(c)].sort((Q,de)=>(de.use_count||0)-(Q.use_count||0)||(Q.name||"").localeCompare(de.name||""))),C=U(()=>t(c).filter(Q=>(Q.status||"").includes("enabled")).length);function V(){var Q;(Q=navigator.clipboard)==null||Q.writeText(t(T)),he("SSH-Key kopiert")}di(()=>{y()});var Ae=uu(),Ce=Ye(Ae),Be=i(r(Ce),2),De=r(Be),se=r(De),le=i(De,2),$e=i(le,2),Te=i(Ce,2);{var We=Q=>{var de=au(),xe=r(de),et=i(r(xe),2),Ve=r(et),tt=i(xe,2),Ke=r(tt),it=i(r(Ke),2),dt=r(it),ht=r(dt),ct=i(dt,2),_t=r(ct),At=i(ct,2);{var xt=ne=>{var ce=is(),ze=r(ce);$(()=>h(ze,`Ticker vor ${t(d).heartbeat_age_s??""}s`)),p(ne,ce)};O(At,ne=>{var ce;((ce=t(d))==null?void 0:ce.heartbeat_age_s)!=null&&ne(xt)})}var Pt=i(At,2);{var Ct=ne=>{var ce=is(),ze=r(ce);$(Pe=>{ga(ce,"title",t(d).version),h(ze,Pe)},[()=>t(d).version.split(" · ")[0]]),p(ne,ce)};O(Pt,ne=>{var ce;(ce=t(d))!=null&&ce.version&&ne(Ct)})}var kt=i(tt,2);{var B=ne=>{var ce=Gv(),ze=i(r(ce),2),Pe=r(ze);{var w=L=>{var X=Ov(),ae=r(X),ue=r(ae);$(()=>h(ue,t(_).sessions)),p(L,X)};O(Pe,L=>{t(_).sessions&&L(w)})}var ee=i(Pe,2);{var ge=L=>{var X=Bv(),ae=r(X),ue=r(ae);$(()=>h(ue,t(_).messages)),p(L,X)};O(ee,L=>{t(_).messages&&L(ge)})}var m=i(ee,2);{var x=L=>{var X=Rv(),ae=r(X),ue=r(ae);$(()=>h(ue,t(_).tool_calls)),p(L,X)};O(m,L=>{t(_).tool_calls&&L(x)})}var A=i(m,2);{var q=L=>{var X=Fv(),ae=r(X),ue=r(ae);$(()=>h(ue,t(_).total_tokens)),p(L,X)};O(A,L=>{t(_).total_tokens&&L(q)})}var H=i(A,2);{var G=L=>{var X=Kv(),ae=r(X),ue=r(ae);$(()=>h(ue,t(_).active_time)),p(L,X)};O(H,L=>{t(_).active_time&&L(G)})}var P=i(ze,2);{var W=L=>{var X=qv(),ae=i(Ye(X),2);Ze(ae,21,()=>t(_).top_tools.slice(0,6),nt,(ue,j)=>{var te=Nv(),Le=r(te),Qe=r(Le),Oe=i(Le,2),Ne=r(Oe),yt=i(Oe,2),Mt=r(yt);$(()=>{h(Qe,t(j).name),St(Ne,`display:block;height:100%;width:${t(j).pct??""}%;background:var(--accent)`),h(Mt,`${t(j).calls??""}× · ${t(j).pct??""}%`)}),p(ue,te)}),p(L,X)};O(P,L=>{var X;(X=t(_).top_tools)!=null&&X.length&&L(W)})}p(ne,ce)};O(kt,ne=>{t(_)&&(t(_).sessions||t(_).total_tokens)&&ne(B)})}var Z=i(kt,2);{var D=ne=>{var ce=Uv(),ze=i(r(ce),2);{var Pe=ge=>{var m=Wv();Ze(m,21,()=>t(f).user_facts,nt,(x,A)=>{var q=Vv(),H=r(q);$(()=>h(H,t(A))),p(x,q)}),p(ge,m)};O(ze,ge=>{var m;(m=t(f).user_facts)!=null&&m.length&&ge(Pe)})}var w=i(ze,2);{var ee=ge=>{var m=jv(),x=r(m);$(()=>h(x,t(f).memory)),p(ge,m)};O(w,ge=>{t(f).memory&&ge(ee)})}p(ne,ce)};O(Z,ne=>{var ce,ze,Pe;((ze=(ce=t(f))==null?void 0:ce.user_facts)!=null&&ze.length||(Pe=t(f))!=null&&Pe.memory)&&ne(D)})}var J=i(Z,2),M=r(J),ie=r(M),ke=i(r(ie)),Ie=r(ke),z=i(M,2);{var N=ne=>{var ce=Hv();p(ne,ce)},ve=ne=>{var ce=Zv();Ze(ce,21,()=>t(v),nt,(ze,Pe)=>{var w=Qv();Ze(w,21,()=>Object.entries(t(Pe)),nt,(ee,ge)=>{var m=U(()=>En(t(ge),2));let x=()=>t(m)[0],A=()=>t(m)[1];var q=ua(),H=Ye(q);{var G=P=>{var W=Jv(),L=r(W),X=r(L),ae=i(L);$(()=>{h(X,`${x()??""}:`),h(ae,` ${A()??""}`)}),p(P,W)};O(H,P=>{A()&&P(G)})}p(ee,q)}),p(ze,w)}),p(ne,ce)};O(z,ne=>{t(v).length===0?ne(N):ne(ve,-1)})}var oe=i(J,2),re=r(oe),we=r(re),pe=i(r(we)),E=r(pe),Y=i(re,2);{var fe=ne=>{var ce=Yv();p(ne,ce)},Me=ne=>{var ce=nu();Ze(ce,21,()=>t(K),nt,(ze,Pe)=>{var w=tu(),ee=r(w),ge=i(ee,2),m=r(ge),x=i(ge,2);{var A=W=>{var L=Xv(),X=r(L);$(()=>h(X,t(Pe).category)),p(W,L)};O(x,W=>{t(Pe).category&&W(A)})}var q=i(x,4);{var H=W=>{var L=eu(),X=r(L);$(()=>h(X,`${t(Pe).use_count??""}× genutzt`)),p(W,L)};O(q,W=>{t(Pe).use_count>0&&W(H)})}var G=i(q,2),P=r(G);$((W,L)=>{St(w,`display:flex;align-items:center;gap:8px;font-size:12.5px;padding:4px 8px; + border-radius:6px;${W??""}`),St(ee,`width:7px;height:7px;border-radius:50%;flex-shrink:0; + background:${L??""}`),h(m,t(Pe).name),h(P,t(Pe).source)},[()=>(t(Pe).status||"").includes("enabled")?"":"opacity:.45",()=>(t(Pe).status||"").includes("enabled")?"var(--accent)":"var(--mut)"]),p(ze,w)}),p(ne,ce)};O(Y,ne=>{t(c).length===0?ne(fe):ne(Me,-1)})}$(()=>{var ne,ce,ze,Pe;h(Ve,t(o)?"…":"↻ Aktualisieren"),St(dt,`font-size:11px;${((ne=t(d))==null?void 0:ne.gateway_state)==="running"?"color:#7ee29a;border-color:rgba(126,226,154,.4)":"color:#ff9b95;border-color:rgba(255,155,149,.4)"}`),h(ht,`● ${((ce=t(d))==null?void 0:ce.gateway_state)??"offline"??""}`),St(ct,`font-size:11px;${(ze=t(d))!=null&&ze.cron_running?"color:var(--accent);border-color:var(--accent)":"color:var(--mut)"}`),h(_t,`⏱ Scheduler ${(Pe=t(d))!=null&&Pe.cron_running?"läuft":"inaktiv"}`),h(Ie,`(${t(v).length??""})`),h(E,`(${t(C)??""} aktiv von ${t(c).length??""})`)}),S("click",et,I),p(Q,de)};O(Te,Q=>{t(l)&&Q(We)})}var rt=i(Te,2);{var Je=Q=>{var de=du(),xe=i(r(de),2),et=r(xe),Ve=i(r(et),2),tt=r(Ve),Ke=i(et,2);{var it=J=>{var M=iu();p(J,M)};O(Ke,J=>{var M;((M=t(a))==null?void 0:M.whisper)==="not_installed"&&J(it)})}var dt=i(xe,2),ht=r(dt),ct=i(r(ht),2),_t=r(ct),At=i(ht,2);{var xt=J=>{var M=ru(),ie=r(M),ke=r(ie);$(Ie=>h(ke,Ie),[()=>["# 1. Piper Binary (Linux x86_64)","mkdir -p /opt/mission-control/piper/voices","cd /tmp && wget -q https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_x86_64.tar.gz","tar -xzf piper_linux_x86_64.tar.gz -C /opt/mission-control/piper/ --strip-components=1","","# 2. Deutsche Stimme — Kerstin (weiblich, ~25 MB)","wget -q -O /opt/mission-control/piper/voices/de_DE-kerstin-low.onnx \\",' "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx"',"wget -q -O /opt/mission-control/piper/voices/de_DE-kerstin-low.onnx.json \\",' "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx.json"'].join(` +`)]),p(J,M)};O(At,J=>{var M;((M=t(a))==null?void 0:M.piper)!=="ready"&&J(xt)})}var Pt=i(dt,2),Ct=r(Pt),kt=i(r(Ct),2),B=r(kt),Z=i(Ct,2);{var D=J=>{var M=ou(),ie=i(r(M),4),ke=i(r(ie),2),Ie=r(ke);Ie.textContent=`Start-Service sshd +Set-Service -Name sshd -StartupType Automatic`;var z=i(ie,2),N=i(r(z),2),ve=r(N);ve.textContent='New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\\.ssh"';var oe=i(z,2);{var re=E=>{var Y=su(),fe=i(r(Y),2),Me=r(fe),ne=i(Me,2),ce=r(ne),ze=r(ce);$(()=>h(ze,'echo "'+t(T)+'" >> "$env:USERPROFILE\\.ssh\\authorized_keys"')),S("click",Me,V),p(E,Y)},we=E=>{var Y=lu();p(E,Y)};O(oe,E=>{t(T)?E(re):E(we,-1)})}var pe=i(oe,4);S("click",pe,()=>{y(),he("Status aktualisiert")}),p(J,M)};O(Z,J=>{var M;(M=t(a))!=null&&M.ssh_ok||J(D)})}$(()=>{var J,M,ie,ke,Ie,z;St(Ve,`font-size:11px;${((J=t(a))==null?void 0:J.whisper)!=="not_installed"?"color:#7ee29a":"color:#ff9b95"}`),h(tt,((M=t(a))==null?void 0:M.whisper)!=="not_installed"?"✓ OK":"✗ fehlt"),St(ct,`font-size:11px;${((ie=t(a))==null?void 0:ie.piper)==="ready"?"color:#7ee29a":"color:#ff9b95"}`),h(_t,((ke=t(a))==null?void 0:ke.piper)==="ready"?"✓ OK":"✗ fehlt"),St(kt,`font-size:11px;${(Ie=t(a))!=null&&Ie.ssh_ok?"color:#7ee29a":"color:var(--mut)"}`),h(B,(z=t(a))!=null&&z.ssh_ok?"✓ verbunden":"optional")}),p(Q,de)};O(rt,Q=>{t(s)&&Q(Je)})}var R=i(rt,2),_e=r(R);{var Re=Q=>{var de=cu();p(Q,de)},at=Q=>{var de=vu();p(Q,de)};O(_e,Q=>{var de;((de=t(a))==null?void 0:de.hermes)==="ready"?Q(Re):Q(at,-1)})}$(()=>{var Q,de;St(De,`font-size:11px;${((Q=t(a))==null?void 0:Q.hermes)==="ready"?"color:#7ee29a;border-color:rgba(126,226,154,.4)":"color:#ff9b95;border-color:rgba(255,155,149,.4)"}`),h(se,`● Agent: ${((de=t(a))==null?void 0:de.hermes)==="ready"?"online":"offline"}`),St(le,`padding:4px 10px;font-size:12px;${t(l)?"border-color:var(--accent);color:var(--accent)":""}`)}),S("click",le,()=>{u(l,!t(l)),t(l)&&I()}),S("click",$e,()=>{u(s,!t(s)),t(s)&&(y(),k())}),p(e,Ae),wn()}$n(["click"]);let rs={};function fu(){const e=document.getElementById("top-active-text");e&&(e.classList.add("swap-flash"),setTimeout(()=>e.classList.remove("swap-flash"),900))}function ss(e){var l;const n=document.getElementById("swdot"),a=document.getElementById("swlabel"),s=document.getElementById("top-active-text");if(!e)n&&(n.className="dot off"),a&&(a.textContent="Backend nicht erreichbar"),s&&(s.textContent="Backend offline"),ls("Backend nicht erreichbar – läuft uvicorn?",!1);else{const o=(e.swap_url||"").replace(/^https?:\/\//,"");n&&(n.className="dot "+(e.swap_ok?"on":"off")),a&&(a.textContent=(e.swap_ok?"LLM-Engine: Online – ":"LLM-Engine: Offline – ")+o);const d=["running","ready","loading","starting"],v=(e.models||[]).find(f=>d.includes(f.state));if(s)if(v){const f=(l=v.meta)!=null&&l.ctx?` · ${Math.round(v.meta.ctx/1024)}k ctx`:"",_=v.state==="loading"||v.state==="starting"?' lädt…':"";s.innerHTML=`${v.name}${f}${_}`}else s.innerHTML='Kein Modell im VRAM';e.swap_ok?bu():ls(`LLM-Engine nicht erreichbar unter ${o} – läuft der llama-swap Dienst?`,!0);const c={};for(const f of e.models||[])c[f.name]=f.state;for(const[f,_]of Object.entries(c)){const T=rs[f];if(T&&T!==_&&(_==="running"||_==="loading")){fu();break}}rs=c}hu(e),ui.set(e)}function hu(e){const n=document.getElementById("sec-chip"),a=document.getElementById("sec-chip-tx");!n||!a||(n.classList.toggle("ok",!!(e!=null&&e.secured)),a.textContent=e!=null&&e.secured?"Geschützt · Heimnetz":"Nur im Heimnetz (offen)")}function gu(e){na.set(e||[])}function mu(e){Lr.set(e)}function ls(e,n){const a=document.getElementById("alert");a.className="alert"+(n?" warn":""),a.innerHTML=`${e}`,a.style.display="flex"}function bu(){const e=document.getElementById("alert");e&&(e.style.display="none")}const _u=e=>{var n;return(n=document.querySelector(`.nav-item[data-view="${e}"]`))==null?void 0:n.click()};function rr(e,n,a,s){const l=document.createElement("span");return l.className="upd-badge"+(n?" "+n:""),l.textContent=e,s&&(l.title=s),l.onclick=()=>_u(a),l}async function ll(){try{const e=await Se("/api/updates"),n=document.getElementById("update-badges");if(!n)return;const a=e.apt_cache_age_h,s=a!=null&&a>24,l=a!=null?` · apt-Cache: vor ${a}h`:"";n.innerHTML="",n.appendChild(rr(e.os>0?`OS: ${e.os} Updates`:s?"OS: ?":"OS: aktuell",e.os>0||s?"warn":"ok","server",e.os>0?`${e.os} Pakete${l}`:s?`apt-Cache veraltet (${a}h)`:`Keine Updates${l}`)),n.appendChild(rr(e.engine>0?"Engine: Update":"Engine: aktuell",e.engine>0?"warn":"ok","server")),n.appendChild(rr(e.models>0?`Modelle: ${e.models}`:"Modelle: aktuell",e.models>0?"warn":"ok","news"))}catch{}}async function Vi(){try{ss(await Se("/api/status"))}catch{ss(null)}}async function ol(){try{gu(await Se("/api/jobs"))}catch{}}function dl(){const e=window.location.protocol==="https:"?"wss:":"ws:",n=new WebSocket(`${e}//${window.location.host}/api/system/stream`);n.onmessage=a=>{try{mu(JSON.parse(a.data))}catch{}},n.onclose=()=>{setTimeout(dl,3e3)},n.onerror=()=>n.close()}var ps;((ps=document.getElementById("logo"))==null?void 0:ps.innerHTML)!==void 0&&(document.getElementById("logo").innerHTML=Gi.logo);document.querySelectorAll("[data-ic]").forEach(e=>{e.innerHTML=Gi[e.dataset.ic||""]||""});const yu=[["overview",md],["models",Pd],["activity",Gd],["server",Xd],["cookbook",Rc],["connect",rv],["news",hv],["guides",kv],["memory",Lv],["hermes",pu]];for(const[e,n]of yu){const a=document.querySelector(`.view[data-view="${e}"]`);a&&zo(n,{target:a})}Yo("overview");const sr=document.getElementById("token");sr&&(sr.value=sl(),sr.addEventListener("change",e=>{Uo(e.target.value),Vi()}));const lr=document.getElementById("hf-token");lr&&(lr.value=ei(),lr.addEventListener("change",e=>Jo(e.target.value)));const os=document.getElementById("nav-settings"),or=document.getElementById("settings-modal"),ds=document.getElementById("sm-close");os&&or&&ds&&(os.addEventListener("click",()=>or.style.display="flex"),ds.addEventListener("click",()=>or.style.display="none"));function xu(){const e=document.getElementById("clock");e&&(e.textContent=new Date().toTimeString().slice(0,5))}document.addEventListener("mc:refresh",Vi);Vi();ol();dl();setInterval(xu,1e3);setInterval(Vi,3e3);setInterval(ol,1500);ll();setInterval(ll,6e4);