Auftragsbuch: 'orchestrator/desktop-gateway' angenommen (Ein-Klick-Gate)

This commit is contained in:
Auftragsbuch
2026-07-09 11:05:05 +02:00
7 changed files with 168 additions and 141 deletions
+14 -4
View File
@@ -69,7 +69,7 @@ def build_snippets(host: str = DEFAULT_HOST,
f"#\n"\ f"#\n"\
f"# 3. Token im Browser-Login einfügen — fertig.\n"\ f"# 3. Token im Browser-Login einfügen — fertig.\n"\
f"#\n"\ f"#\n"\
f"# Modelle im Hermes Desktop: {PRIMARY_MODEL} (bauen), heavy (denken), vision (Bilder)."\ f"# Modelle im Hermes Desktop: {PRIMARY_MODEL} (bauen), heavy (denken), vision (Bilder)."
) )
# Claude Code spricht das Anthropic-Format; der Gateway ist OpenAI-kompatibel und # Claude Code spricht das Anthropic-Format; der Gateway ist OpenAI-kompatibel und
@@ -124,8 +124,9 @@ def build_snippets(host: str = DEFAULT_HOST,
def check_health() -> dict: def check_health() -> dict:
"""Live-Erreichbarkeit der beiden Leitungen, aus Sicht der Box: """Live-Erreichbarkeit der drei Leitungen, aus Sicht der Box:
Leitung 1 = Gateway/Engine (llama-swap), Leitung 2 = Gedächtnis-Sidecar (Mem0).""" Leitung 1 = Gateway/Engine (llama-swap), Leitung 2 = Gedächtnis-Sidecar (Mem0),
Leitung 3 = Desktop-Gateway (Hermes-Builtin-UI)."""
gateway = {"ok": False, "detail": "nicht erreichbar"} gateway = {"ok": False, "detail": "nicht erreichbar"}
try: try:
with httpx.Client(timeout=3.0) as c: with httpx.Client(timeout=3.0) as c:
@@ -147,4 +148,13 @@ def check_health() -> dict:
except Exception: # noqa: BLE001 except Exception: # noqa: BLE001
pass pass
return {"gateway": gateway, "memory": memory} desktop_gateway = {"ok": False, "detail": "nicht erreichbar"}
try:
with httpx.Client(timeout=3.0) as c:
r = c.get("http://127.0.0.1:9119/api/status")
desktop_gateway = ({"ok": True, "detail": "bereit"} if r.status_code == 200
else {"ok": False, "detail": f"HTTP {r.status_code}"})
except Exception: # noqa: BLE001
pass
return {"gateway": gateway, "memory": memory, "desktop_gateway": desktop_gateway}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -7,8 +7,8 @@
<link rel="manifest" href="/manifest.webmanifest" /> <link rel="manifest" href="/manifest.webmanifest" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>Mission Control 2.0</title> <title>Mission Control 2.0</title>
<script type="module" crossorigin src="/assets/index-BHaK9XZl.js"></script> <script type="module" crossorigin src="/assets/index-ByMZe5CM.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-C7eDy97i.css"> <link rel="stylesheet" crossorigin href="/assets/index-DndftNG6.css">
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
+1
View File
@@ -338,6 +338,7 @@ export interface ConnectLine {
export interface ConnectHealth { export interface ConnectHealth {
gateway: ConnectLine gateway: ConnectLine
memory: ConnectLine memory: ConnectLine
desktop_gateway: ConnectLine
} }
export interface Memory { export interface Memory {
+19 -3
View File
@@ -111,8 +111,8 @@ export function ConnectView() {
Verbindung &amp; Integration Verbindung &amp; Integration
</h1> </h1>
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
Binde deinen lokalen Agenten an die Box an über <span className="text-foreground">zwei getrennte Leitungen</span>: Binde deinen lokalen Agenten an die Box an über <span className="text-foreground">drei getrennte Leitungen</span>:
das Modell (Gateway) und das geteilte Gedächtnis (MCP). das Modell (Gateway), das geteilte Gedächtnis (MCP) und das Desktop-Gateway.
</p> </p>
</div> </div>
@@ -158,11 +158,27 @@ export function ConnectView() {
</div> </div>
</div> </div>
</div> </div>
{/* Leitung 3 — Desktop-Gateway */}
<div className="flex items-center gap-3">
<ArrowRight className="h-4 w-4 text-muted-foreground shrink-0" />
<div className="flex-1 rounded-xl border border-emerald-500/25 bg-emerald-500/5 px-3.5 py-2.5">
<div className="flex items-center justify-between gap-2">
<div className="flex items-center gap-2 text-xs font-semibold text-emerald-300">
<Laptop className="h-3.5 w-3.5" /> Leitung 3 Desktop-Gateway
</div>
<StatusBadge line={health?.desktop_gateway} loading={healthLoading} />
</div>
<div className="mt-1 text-[11px] font-mono text-emerald-300/80">
Desktop-Gateway · :9119 · API-Status
</div>
</div>
</div>
</div> </div>
</div> </div>
<p className="mt-3.5 text-[11px] text-muted-foreground leading-relaxed"> <p className="mt-3.5 text-[11px] text-muted-foreground leading-relaxed">
Der Gateway liefert <span className="text-foreground">nur das LLM</span>. Das geteilte Gedächtnis läuft über einen Der Gateway liefert <span className="text-foreground">nur das LLM</span>. Das geteilte Gedächtnis läuft über einen
<span className="text-foreground"> eigenen MCP-Server</span> beide werden unabhängig eingerichtet. <span className="text-foreground"> eigenen MCP-Server</span> und das Desktop-Gateway bietet die Agenten-Schnittstelle
alle drei Leitungen werden unabhängig eingerichtet.
</p> </p>
</div> </div>