fix(sync): "ARIA denkt" bleibt haengen obwohl Turn fertig
Zwei Ursachen, beide adressiert: - App raeumte den (kontext-scoped) Thinking-Indikator nur ueber das agent_activity 'idle' der Bridge. Kam das nicht an (dedup/mismatch), blieb "ARIA denkt" + Abbrechen stehen. Jetzt raeumt die App den Indikator beim Eintreffen der Antwort selbst (definitiver Turn-Ende-Beweis). - Bridge sendete 'thinking' mit der REQUEST-projectId, 'idle' aber mit der TURN-projectId (Brain kann umrouten, z.B. Voice-Sticky). Bei Abweichung bekam der Request-Kontext nie sein idle → zusaetzliches idle fuer die Request-projectId am Turn-Ende. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1172,6 +1172,21 @@ const ChatScreen: React.FC = () => {
|
||||
});
|
||||
// ARIA hat geantwortet → Watchdog clearen, falls noch armiert
|
||||
clearStuckWatchdog();
|
||||
// Thinking-Indikator fuer DIESEN Kontext raeumen. Die Antwort ist der
|
||||
// definitive Beweis, dass der Turn fertig ist — unabhaengig davon, ob
|
||||
// das agent_activity 'idle' der Bridge ankam (es kann mit abweichender
|
||||
// projectId gesendet oder wegdedupt worden sein → "ARIA denkt" blieb
|
||||
// sonst haengen). Zusaetzlich global raeumen, falls der sichtbare
|
||||
// Kontext ueber den Legacy-Indikator lief.
|
||||
{
|
||||
const ansPid = ((message.payload as any).projectId as string) || '';
|
||||
setAgentActivityByCtx(prev =>
|
||||
prev[ansPid] && prev[ansPid].activity !== 'idle'
|
||||
? { ...prev, [ansPid]: { activity: 'idle', tool: '' } }
|
||||
: prev);
|
||||
setAgentActivity(cur =>
|
||||
cur.activity === 'idle' ? cur : { activity: 'idle', tool: '' });
|
||||
}
|
||||
// ALLE noch laufenden ACK-Timer clearen — Bridge hat unsere Messages
|
||||
// ja offensichtlich verarbeitet (sonst keine ARIA-Antwort). Wenn
|
||||
// ein ACK aus Netzgruenden verloren ging, soll der Retry nicht
|
||||
|
||||
@@ -1786,6 +1786,14 @@ class ARIABridge:
|
||||
"timestamp": int(asyncio.get_event_loop().time() * 1000),
|
||||
})
|
||||
|
||||
# Das 'thinking' oben ging mit der REQUEST-projectId raus, das 'idle' in
|
||||
# _process_core_response aber mit der TURN-projectId (Brain kann den Turn
|
||||
# umgeroutet haben, z.B. Voice-Sticky). Weichen sie ab, bekaeme der
|
||||
# Request-Kontext nie sein idle → "ARIA denkt" bliebe dort haengen.
|
||||
# Darum hier zusaetzlich fuer die Request-projectId ein idle.
|
||||
if (project_id or "") != (turn_project_id or ""):
|
||||
await self._emit_activity("idle", "", project_id=project_id)
|
||||
|
||||
if data.get("distilling"):
|
||||
logger.info("[brain] Destillat laeuft im Hintergrund")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user