feat(app): Workspace-Umbau Schritt 2 — projectFocus-Spiegel

Neues Singleton services/projectFocus.ts (Publish/Subscribe wie rvs.ts): haelt
focusedProjectId, Projekt-Namen und Projekt-Kind. ChatScreen publiziert Focus +
Namen EINWEG hinein (rein additive Effekte), damit der kommende Workspace-Canvas
den aktiven Kontext und den Code-Projekt-Status kennt, ohne dass ChatScreen den
Workspace kennt oder umgebaut wird. Verhaltensneutral, tsc clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 23:36:09 +02:00
co-authored by Claude Opus 4.8
parent 747c67766c
commit 80b534cbab
2 changed files with 112 additions and 0 deletions
+7
View File
@@ -38,6 +38,7 @@ import audioService from '../services/audio';
import wakeWordService, { loadPassiveListenMs } from '../services/wakeword';
import ProjectsBrowser from '../components/ProjectsBrowser';
import brainApi, { Project as BrainProject } from '../services/brainApi';
import projectFocus from '../services/projectFocus';
import phoneCallService from '../services/phoneCall';
import { playWakeReadySound } from '../services/wakeReadySound';
import {
@@ -554,6 +555,12 @@ const ChatScreen: React.FC = () => {
}
}, [focusedProjectId]);
// Focus + Projekt-Namen EINWEG in den projectFocus-Spiegel publizieren,
// damit der Workspace-Canvas den aktiven Kontext + Code-Projekt-Status
// kennt. Rein additiv — aendert ChatScreens eigenes Verhalten nicht.
useEffect(() => { projectFocus.setFocus(focusedProjectId); }, [focusedProjectId]);
useEffect(() => { projectFocus.setNames(projectNameById); }, [projectNameById]);
// inputText-Spiegel (damit der Draft-Wechsel oben inputText nicht als Dep braucht).
useEffect(() => { inputTextRef.current = inputText; }, [inputText]);