Der Blueprint sah eine "Live Agent Matrix" mit Denkstrom vor (§4.4). In P4 hatte ich
sie als blockiert gemeldet: Lucys Denkschritte entstehen im Hermes-Prozess, und
AGENTS.md verbietet es, dessen Quellcode zu patchen.
Beim Nachsehen zeigte sich, dass die HAELFTE davon offen daliegt.
`~/.hermes/logs/agent.log` protokolliert JEDEN Werkzeug-Ruf:
INFO [cron_195e…] agent.tool_executor: tool terminal completed (1.40s, 53 chars)
WARNING [cron_195e…] agent.tool_executor: Tool web_extract returned error (0.17s): {…}
Eine Log-Datei zu LESEN ist kein Patchen. Was dadurch sichtbar wird — welches Werkzeug,
wie lange, mit welchem Ergebnis, in welchem Lauf — ist fuer "was tut sie gerade und wo
haengt es" oft nuetzlicher als der Fliesstext ihrer Gedanken.
## Es hat sich beim ersten Blick bezahlt gemacht
Der Parser lief gegen den echten Box-Log und meldete sofort:
web_extract 2 Rufe 2 Fehler <-- IMMER ROT
DuckDuckGo (ddgs) is a search-only backend and cannot extract URL content.
web_search 20 Rufe 0 Fehler Schnitt 1,77 s
Nachgesehen: `web_extract` scheitert seit MINDESTENS dem 25.08. jeden Morgen um 07:00
mit derselben Meldung — im Daily-News-Cron, vier Tage lang, ohne dass es irgendwo
aufgefallen waere. Genau dafuer steht die Bilanz OBEN und die Zeitleiste darunter:
Ein Dauerfehler verschwindet in einer Ereignisliste, in der Zeile
"web_extract · 2 Rufe · 2 Fehler" nicht.
## Was die Ansicht NICHT verspricht
Denkstrom und Werkzeug-Argumente stehen nicht im Log und tauchen darum auch nicht auf.
Das steht so in der Ansicht selbst, nicht nur im Code — eine Oberflaeche, die mehr
andeutet als sie hat, ist schlimmer als eine, die ihre Grenze nennt.
## Umsetzung
services/agent_aktivitaet.py liest nur die letzten 512 kB (die Datei waechst auf
MB und wird rotiert), vier gemessene Zeilenformen,
Bilanz je Werkzeug + Gruppierung je Lauf
GET /api/agent/aktivitaet limit gedeckelt auf 300
features/agent/Werkzeugverlauf.tsx Bilanz -> Laeufe -> aufklappbare Zeitleiste
Fehlt das Log (Entwicklungsrechner ohne Hermes), verschwindet der Abschnitt still,
statt eine leere Karte zu zeigen — wie der Rest der Seite es haelt.
## Verifiziert
Parser gegen den echten Box-Log: 26 Rufe, 4 Werkzeuge, 2 Laeufe erkannt,
Rauschen (mem_trim, aiohttp) ignoriert
Im Browser gegen dieselben Daten: "IMMER ROT"-Markierung sitzt, Grund im Klartext,
Laufgruppen mit Zeitspanne, 26 Einzelrufe in der Zeitleiste
7 neue Tests (44 gesamt) — sie pruefen gezielt die BILANZ-Karte, nicht irgendein
Vorkommen des Werkzeugnamens; der steht auch in der Zeitleiste
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
7 lines
19 KiB
JavaScript
7 lines
19 KiB
JavaScript
import{c as B,M as T,j as e,N as p,W as g,b as n,J as D,T as G,z as L,O as $,f as R,k as F,u as I,r as q,P as y,Q as v,t as w,X as U,C as k,n as _,q as u}from"./index-DvtGY8-b.js";import{S}from"./SectionLabel-D0h88ho8.js";import{C as K}from"./clock-geHux9wJ.js";import{E as O}from"./external-link-DPeXL_3q.js";import{S as Q}from"./shield-DuTFhOFM.js";/**
|
||
* @license lucide-react v0.460.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/const C=B("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]),h=l=>l.slice(11,19);function z(l){return l<1?`${Math.round(l*1e3)} ms`:`${l.toFixed(1)} s`}function V(){const{data:l,isLoading:s}=T();if(s)return e.jsxs("section",{className:"space-y-3",children:[e.jsx(S,{icon:p,children:"Werkzeug-Verlauf"}),e.jsx("div",{className:"mc-card-sm p-4 text-xs text-muted-foreground",children:"Lese Hermes' Log …"})]});if(!(l!=null&&l.verfuegbar))return null;const{rufe:o,werkzeuge:c,laeufe:i}=l,x=c.filter(r=>r.fehler>0);return e.jsxs("section",{className:"space-y-3",children:[e.jsxs(S,{icon:p,children:["Werkzeug-Verlauf · ",o.length," Rufe",x.length>0&&` · ${x.reduce((r,d)=>r+d.fehler,0)} Fehler`]}),e.jsxs("p",{className:"max-w-2xl text-[11px] leading-relaxed text-muted-foreground",children:["Gelesen aus Hermes' eigenem Log — Mission Control schaut zu, greift aber nicht ein. Was dort ",e.jsx("em",{children:"nicht"})," steht, steht auch hier nicht: Lucys Gedankengang und die Argumente eines Werkzeug-Rufs bleiben unsichtbar."]}),e.jsx("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:c.map(r=>{const d=r.fehler>0&&r.fehler===r.rufe;return e.jsxs("div",{className:n("mc-card-sm space-y-1.5 p-3",d&&"border-red-500/40 bg-red-500/5"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g,{className:n("h-3.5 w-3.5 shrink-0",d?"text-red-400":r.fehler?"text-amber-400":"text-primary"),"aria-hidden":"true"}),e.jsx("span",{className:"truncate font-mono text-xs font-semibold text-foreground",children:r.werkzeug}),d&&e.jsx("span",{className:"ml-auto shrink-0 rounded bg-red-500/15 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wide text-red-300",children:"immer rot"})]}),e.jsxs("div",{className:"flex flex-wrap gap-x-3 gap-y-0.5 font-mono text-[10px] text-muted-foreground",children:[e.jsxs("span",{className:"tabular-nums",children:[r.rufe," Rufe"]}),e.jsxs("span",{className:n("tabular-nums",r.fehler>0&&"font-semibold text-red-400"),children:[r.fehler," Fehler"]}),e.jsxs("span",{className:"tabular-nums",children:["Ø ",z(r.dauer_schnitt_s)]})]}),r.letzter_fehler&&e.jsx("p",{className:"border-t border-border/30 pt-1.5 text-[10px] leading-relaxed text-red-300/90",children:r.letzter_fehler})]},r.werkzeug)})}),i.length>0&&e.jsx("div",{className:"mc-card-sm divide-y divide-border/30",children:i.map(r=>e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 px-3 py-2 font-mono text-[10px]",children:[e.jsx(K,{className:"h-3 w-3 shrink-0 text-muted-foreground","aria-hidden":"true"}),e.jsx("span",{className:"truncate font-semibold text-foreground",children:r.lauf}),e.jsxs("span",{className:"tabular-nums text-muted-foreground",children:[h(r.von),"–",h(r.bis)]}),e.jsxs("span",{className:"ml-auto tabular-nums text-muted-foreground",children:[r.rufe," Rufe"]}),r.fehler>0&&e.jsxs("span",{className:"tabular-nums font-semibold text-red-400",children:[r.fehler," Fehler"]})]},r.lauf))}),e.jsxs("details",{className:"mc-card-sm",children:[e.jsxs("summary",{className:"cursor-pointer px-3 py-2 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground hover:text-foreground",children:["Einzelne Rufe (",o.length,")"]}),e.jsx("ul",{className:"max-h-72 divide-y divide-border/20 overflow-y-auto scrollbar-thin border-t border-border/30",children:[...o].reverse().map((r,d)=>e.jsxs("li",{className:"flex items-start gap-2 px-3 py-1.5 font-mono text-[10px]",children:[r.ok?e.jsx(D,{className:"mt-px h-3 w-3 shrink-0 text-emerald-500","aria-hidden":"true"}):e.jsx(G,{className:"mt-px h-3 w-3 shrink-0 text-red-400","aria-hidden":"true"}),e.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:h(r.zeit)}),e.jsx("span",{className:"shrink-0 font-semibold text-foreground",children:r.werkzeug}),e.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:z(r.dauer_s)}),r.zeichen!=null&&e.jsxs("span",{className:"shrink-0 tabular-nums text-muted-foreground/60",children:[r.zeichen," Z."]}),r.fehler&&e.jsx("span",{className:"min-w-0 flex-1 truncate text-red-300/90",title:r.fehler,children:r.fehler})]},`${r.zeit}-${r.werkzeug}-${d}`))})]})]})}const J=["chat","coding","fast","heavy"];function se(){const l=L(),{data:s,error:o}=$(),{data:c}=R(),{showAlert:i,dialogElement:x}=F(),r=I(),d=o?String(o):"",[H,m]=q.useState(!1),E=(c==null?void 0:c.models)??[],f=t=>{var a;return((a=t==null?void 0:t.match(/:(\d+)/))==null?void 0:a[1])??""},b=f(s==null?void 0:s.gateway_url)||"8642",j=(s==null?void 0:s.pc_executor_url)??"",A=j.replace(/^https?:\/\//,""),P=f(j)||"7777";async function W(t){try{await _("/api/agent/brain",{method:"POST",body:JSON.stringify({model:t})}),i("Erledigt",`Hermes-Hirn zeigt jetzt auf das Alias '${t}'. Der Gateway-Dienst wurde neu gestartet.`),r.invalidateQueries({queryKey:u.agentStatus}),m(!1)}catch(a){i("Fehler",`Wechsel fehlgeschlagen: ${a.message||a}`)}}async function M(t){try{await _("/api/agent/brain/set",{method:"POST",body:JSON.stringify({model_id:t})}),i("Erledigt","Agent-Hirn gewechselt (warm gehalten). Gateway wurde neugestartet."),r.invalidateQueries({queryKey:u.agentStatus}),r.invalidateQueries({queryKey:u.models}),m(!1)}catch(a){i("Fehler",`Wechsel fehlgeschlagen: ${a.message||a}`)}}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Hermes Agenten-Cockpit"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Hermes ist ein autonomer Agent, der im Hintergrund der Box läuft (Port ",e.jsxs("code",{children:[":",b]}),") und seine eigene UI besitzt."]})]}),(s==null?void 0:s.hermes_ui_url)&&e.jsxs("a",{href:y(s.hermes_ui_url),target:"_blank",rel:"noopener",className:n("flex h-9 px-4 items-center gap-1.5 text-xs font-semibold rounded-lg transition-all cursor-pointer shadow-md shrink-0 self-start",s.hermes_ui_reachable?"bg-primary text-primary-foreground hover:opacity-90 shadow-primary/10":"border border-border/60 text-muted-foreground bg-background/20"),children:[e.jsx(O,{className:"h-4 w-4"}),e.jsx("span",{children:"Hermes-GUI öffnen"})]})]}),d&&e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400 font-mono",children:["Status nicht lesbar (",d,")."]}),s&&e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"mc-card p-5",children:[e.jsxs("div",{className:"mb-4 flex items-center gap-2",children:[e.jsx(v,{className:"h-4.5 w-4.5 text-primary"}),e.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Agent-Fluss"})]}),e.jsxs("div",{className:"flex flex-col lg:flex-row lg:items-stretch gap-3",children:[e.jsxs("button",{onClick:()=>s.hermes_ui_reachable&&window.open(y(s.hermes_ui_url),"_blank"),title:s.hermes_ui_reachable?"Hermes-GUI öffnen":"Desktop-Gateway offline",className:"lg:w-40 shrink-0 rounded-xl border border-border/60 bg-background/30 p-3 text-left hover:border-primary/40 transition-all cursor-pointer flex flex-col justify-center",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(p,{className:n("h-3.5 w-3.5",s.hermes_ui_reachable?"text-emerald-400":"text-amber-500")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:"Desktop & GUI"}),e.jsx("span",{className:n("ml-auto h-1.5 w-1.5 rounded-full animate-pulse",s.hermes_ui_reachable?"bg-emerald-500":"bg-amber-500")})]}),e.jsx("span",{className:"text-[10px] text-muted-foreground font-mono mt-0.5",children:"Hermes Desktop · Clients"})]}),e.jsx("div",{className:"hidden lg:flex items-center text-muted-foreground text-lg select-none",children:"→"}),e.jsxs("div",{className:"flex-1 flex flex-col gap-2.5",children:[e.jsxs("div",{className:"rounded-xl border border-primary/40 bg-primary/5 px-3.5 py-2.5 flex items-center gap-2",children:[e.jsx(v,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-xs font-semibold text-primary",children:"Agent Gateway"}),e.jsxs("span",{className:"text-[11px] font-mono text-muted-foreground",children:[":",b]}),e.jsxs("span",{className:n("ml-auto inline-flex items-center gap-1.5 text-[10px] font-bold uppercase font-mono px-2 py-0.5 rounded-full border",s.gateway_reachable?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-red-500/10 text-red-400 border-red-500/20"),children:[e.jsx("span",{className:n("h-1.5 w-1.5 rounded-full",s.gateway_reachable?"bg-emerald-500 animate-pulse":"bg-red-500")}),s.gateway_reachable?"online":"offline"]})]}),e.jsxs("div",{className:"grid gap-2.5 sm:grid-cols-3",children:[e.jsxs("button",{onClick:()=>m(!0),className:"rounded-xl border border-border/60 bg-background/30 p-3 text-left hover:border-primary/45 transition-all cursor-pointer",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(w,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Hirn"}),e.jsx("span",{className:"ml-auto text-[9px] text-primary/70 font-bold uppercase",children:"wechseln →"})]}),e.jsx("div",{className:"text-[11px] font-mono font-medium text-foreground truncate mt-1",title:s.brain_model,children:s.brain_model||"chat"})]}),e.jsxs("div",{className:"rounded-xl border border-border/60 bg-background/30 p-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(g,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Verdrahtung"})]}),e.jsxs("div",{className:"text-[10px] font-mono mt-1 flex flex-wrap gap-x-2 text-muted-foreground",children:[e.jsxs("span",{children:["Config: ",s.has_config?"✓":"—"]}),e.jsxs("span",{children:["Skills: ",s.has_skills?"✓":"—"]}),e.jsxs("span",{children:["Memory: ",s.has_memories?"✓":"—"]})]})]}),e.jsxs("div",{className:"rounded-xl border border-border/60 bg-background/30 p-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(C,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"PC"}),e.jsx("span",{className:n("ml-auto h-1.5 w-1.5 rounded-full",s.pc_executor_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")})]}),e.jsxs("div",{className:n("text-[11px] font-mono mt-1",s.pc_executor_reachable?"text-emerald-400":"text-muted-foreground"),children:[":",P," ",s.pc_executor_reachable?"verbunden":"offline"]})]})]})]})]})]}),e.jsxs("div",{className:"mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(C,{className:"h-5 w-5 text-primary"}),e.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"PC Verbindung"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:n("h-2 w-2 rounded-full",s.pc_executor_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:s.pc_executor_reachable?"Erreichbar":"Nicht verbunden"})]})]}),e.jsxs("div",{className:"grid gap-6 md:grid-cols-2 text-xs text-muted-foreground leading-relaxed text-left",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("p",{children:["Der ",e.jsx("strong",{className:"text-foreground",children:"Hermes PC Executor"})," läuft auf ",e.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:A||"deinem Windows-PC"})," und ermöglicht Hermes den direkten Zugriff auf deinen Windows-PC — Shell-Befehle, Screenshots, Tastatureingaben."]}),e.jsxs("p",{children:["Hermes erreicht den PC über den MCP-Server ",e.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:"hermes-pc-control"}),", der automatisch beim Gateway-Start verbunden wird."]})]}),e.jsx("div",{className:"space-y-3",children:s.pc_executor_reachable?e.jsxs("div",{className:"p-3.5 bg-emerald-500/5 border border-emerald-500/20 rounded-xl space-y-1",children:[e.jsxs("div",{className:"text-emerald-400 font-semibold text-xs flex items-center gap-1.5",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"PC Executor verbunden"]}),e.jsxs("p",{className:"text-[10px]",children:["Hermes kann jetzt per Telegram oder Terminal Befehle auf TobisNicerPC ausführen. Nutze ",e.jsx("code",{className:"text-foreground",children:"pc_shell"}),", ",e.jsx("code",{className:"text-foreground",children:"pc_screenshot"})," oder ",e.jsx("code",{className:"text-foreground",children:"pc_open"}),"."]})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"text-xs font-bold text-foreground",children:"PC Executor starten"}),e.jsxs("p",{children:["Starte ",e.jsx("code",{className:"text-foreground font-mono",children:"start.bat"})," im Ordner ",e.jsx("code",{className:"text-foreground font-mono",children:"client\\hermes-pc\\"})," auf dem Windows-PC und lasse das Fenster offen."]}),e.jsx("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[9px] text-cyan-300",children:"client\\hermes-pc\\start.bat"})]})})]})]}),!s.gateway_reachable&&e.jsxs("div",{className:"mc-card p-6 space-y-4 text-left",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Q,{className:"h-5 w-5 text-amber-500"}),e.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"Hermes-Agent Diagnostics"})]}),e.jsxs("div",{className:"text-xs text-muted-foreground space-y-3 leading-relaxed",children:[e.jsx("p",{children:"Der Hermes-Dienst ist auf der Box derzeit offline oder kann sich nicht mit dem lokalen llama-swap verbinden."}),e.jsxs("p",{children:["Am schnellsten: In der System-Schublade unter ",e.jsx("strong",{children:"Dienste"})," den Eintrag"," ",e.jsx("strong",{children:"Hermes-Gateway"})," mit einem Klick neu starten (dort gibt es auch die Logs dazu)."]}),e.jsxs("button",{onClick:()=>l({to:".",search:t=>({...t,system:"wartung"})}),className:"flex h-9 items-center gap-1.5 rounded-lg border border-primary/40 bg-primary/10 px-4 text-[11px] font-bold uppercase tracking-wide text-primary transition-all hover:bg-primary/20 cursor-pointer",children:[e.jsx(g,{className:"h-3.5 w-3.5"})," Dienste-Übersicht öffnen"]}),e.jsxs("p",{children:["Weitere Einrichtungsdetails (Brain-Konfiguration, MCP-Kopplungen, SSH-Tunneling und Such-Engines) findest du in der Dokumentationsdatei:",e.jsx("code",{className:"ml-1 px-1.5 py-0.5 rounded bg-muted/40 text-foreground border border-border/30",children:"docs/HERMES_SETUP.md"}),"."]})]})]})]}),s&&H&&e.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4 overscroll-contain",role:"dialog","aria-modal":"true","aria-label":"Hermes-Hirn konfigurieren",children:e.jsxs("div",{className:"w-full max-w-md rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[e.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[e.jsx(w,{className:"h-4 w-4"}),e.jsx("span",{children:"Hermes-Hirn konfigurieren"})]}),e.jsx("button",{onClick:()=>m(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:e.jsx(U,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Lane / Gateway-Alias"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:J.map(t=>{const a=s.brain_model===t;return e.jsxs("button",{onClick:()=>W(t),className:n("px-3 py-1.5 rounded-lg text-xs font-mono font-semibold border transition-all cursor-pointer flex items-center gap-1.5",a?"border-primary/40 bg-primary/10 text-primary":"border-border/30 bg-background/20 text-foreground hover:bg-accent"),children:[t,a&&e.jsx(k,{className:"h-3.5 w-3.5"})]},t)})}),e.jsxs("p",{className:"text-[10px] text-muted-foreground/70",children:["Schlank & flexibel: das Hirn folgt dem Lane-Routing (z.B. ",e.jsx("code",{className:"text-primary",children:"chat"})," = fast↔heavy)."]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Installiertes Modell (warm gehalten)"}),e.jsx("div",{className:"space-y-1.5 max-h-56 overflow-y-auto pr-1",children:E.map(t=>{var N;const a=t.role==="hermes";return e.jsxs("button",{onClick:()=>!a&&M(t.name),disabled:a||t.incomplete,className:n("w-full text-left px-3 py-2.5 rounded-lg text-xs flex items-center justify-between font-mono border transition-all",a?"border-indigo-500/40 bg-indigo-500/10 text-indigo-300":t.incomplete?"border-border/20 bg-background/10 text-muted-foreground/50 cursor-not-allowed":"border-border/30 bg-background/20 text-foreground hover:bg-accent cursor-pointer"),children:[e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:(N=t.name.split("/").pop())==null?void 0:N.replace(/\.gguf$/i,"")}),e.jsxs("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:[t.capabilities.params_b?`${t.capabilities.params_b}B`:"?"," · ",t.capabilities.tools!=="no"?"Tools ✓":"ohne Tools",t.role&&` · Rolle: ${t.role}`]})]}),a?e.jsxs("span",{className:"text-[9px] font-bold uppercase text-indigo-300 shrink-0 flex items-center gap-1",children:[e.jsx(k,{className:"h-3.5 w-3.5"})," Aktiv"]}):e.jsx("span",{className:"text-[9px] font-bold uppercase text-primary/70 shrink-0",children:"Warm setzen →"})]},t.name)})})]}),e.jsxs("div",{className:"text-[10px] text-amber-400/80 flex items-start gap-1.5 border-t border-border/20 pt-2.5",children:[e.jsx("span",{children:"💡"}),e.jsxs("span",{children:["Für einen ",e.jsx("strong",{children:"Agenten"}),' sind Hermes-Modelle (natives Tool-Calling) meist die robustere Wahl. Neues Modell? Erst über „Modell-Manager → Modelle finden" laden.']})]})]})}),e.jsx(V,{}),x]})}export{se as AgentView};
|