fix(app): gruener Desktop-Punkt nur bei laufender VM im aktiven Projekt

Badge haing bisher am globalen desktop_status (irgendwo ein Desktop
erreichbar) → wurde generell angezeigt. Jetzt aus der projektbezogenen
VM-Liste (listProjectVms → running), pid-Guard, 6s-Refresh fuer Start/Stop.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 01:08:37 +02:00
co-authored by Claude Opus 4.8
parent a91325a04f
commit 6c27097c96
+16 -9
View File
@@ -5,13 +5,13 @@
* Cockpit-Modus → Workbench mit Taskleisten-Dock: Chat · Code · Desktop. * Cockpit-Modus → Workbench mit Taskleisten-Dock: Chat · Code · Desktop.
* *
* Aktivitaets-Badges am Dock: Editor blau, wenn schon Code-Dateien da sind; * Aktivitaets-Badges am Dock: Editor blau, wenn schon Code-Dateien da sind;
* Desktop gruen, wenn eine VM verbunden ist. * Desktop gruen NUR, wenn im aktiven Projekt eine VM laeuft.
*/ */
import React, { useEffect, useMemo, useState } from 'react'; import React, { useEffect, useMemo, useState } from 'react';
import projectFocus, { FocusSnapshot } from '../services/projectFocus'; import projectFocus, { FocusSnapshot } from '../services/projectFocus';
import codeFile from '../services/codeFile'; import codeFile from '../services/codeFile';
import desktop from '../services/desktop'; import brainApi from '../services/brainApi';
import viewMode, { ViewModeValue } from '../services/viewMode'; import viewMode, { ViewModeValue } from '../services/viewMode';
import ChatScreen from '../screens/ChatScreen'; import ChatScreen from '../screens/ChatScreen';
import { TileId } from './layout'; import { TileId } from './layout';
@@ -29,7 +29,6 @@ const WorkspaceScreen: React.FC = () => {
useEffect(() => projectFocus.subscribe(setFocus), []); useEffect(() => projectFocus.subscribe(setFocus), []);
const pid = focus.focusedProjectId; const pid = focus.focusedProjectId;
const kind = projectFocus.getProjectKind(pid);
// Code-Signal: hat der Spiegel schon Dateien fuer dieses Projekt? // Code-Signal: hat der Spiegel schon Dateien fuer dieses Projekt?
useEffect(() => { useEffect(() => {
@@ -39,13 +38,21 @@ const WorkspaceScreen: React.FC = () => {
}); });
}, [pid]); }, [pid]);
// Desktop-Signal + einmaliger Check beim Betreten eines Code-Projekts. // Desktop-Signal: gruener Punkt NUR, wenn im AKTIVEN Projekt wirklich eine VM
// laeuft (nicht generell irgendwo). Quelle ist die projektbezogene VM-Liste;
// leichtes Nachfassen, damit Start/Stop sich zeitnah zeigt.
useEffect(() => { useEffect(() => {
setHasDesktop(desktop.getStatus().available); if (!pid) { setHasDesktop(false); return; }
const unsub = desktop.subscribeStatus((s) => setHasDesktop(s.available)); let alive = true;
if (kind === 'code') desktop.requestCheck(pid); const check = () => {
return unsub; brainApi.listProjectVms(pid)
}, [pid, kind]); .then(r => { if (alive) setHasDesktop((r.vms || []).some(v => v.running)); })
.catch(() => { if (alive) setHasDesktop(false); });
};
check();
const t = setInterval(check, 6000);
return () => { alive = false; clearInterval(t); };
}, [pid]);
const badges = useMemo(() => ({ const badges = useMemo(() => ({
editor: hasCode ? '#0096FF' : undefined, editor: hasCode ? '#0096FF' : undefined,