feat(memory): Bubble-Header zeigt jetzt Aktion (angelegt/geaendert/geloescht)
Etappe 1 von Stefans App-Memory-UX-Wunsch:
Brain agent.py: memory_save Dispatcher pushed jetzt action="created",
memory_update Dispatcher pushed action="updated" mit demselben
memory_saved-Event-Typ. Bridge reicht das action-Feld im Payload mit
durch (in beiden Side-Channel-Pfaden — send_to_core + trigger-fired).
App ChatScreen: ChatMessage.memorySaved.action ('created' | 'updated'
| 'deleted'). Bubble-Header je nach Aktion:
- created → "🧠 ARIA hat etwas gemerkt" (gelb)
- updated → "🧠 ARIA hat eine Notiz geändert" (gelb)
- deleted → "🧠 ARIA hat eine Notiz gelöscht" (rot)
Naechste Etappen folgen (Detail-Modal beim Tap, Edit + Anhang-Upload,
Notizen-Inbox neben Lupe, Memory-Editor in Settings).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -95,6 +95,9 @@ interface ChatMessage {
|
||||
category?: string;
|
||||
pinned: boolean;
|
||||
preview?: string;
|
||||
/** Was passiert ist: angelegt / geaendert / geloescht. Default created
|
||||
* fuer Rueckwaerts-Kompatibilitaet mit aelteren Events. */
|
||||
action?: 'created' | 'updated' | 'deleted';
|
||||
attachments?: Array<{
|
||||
name: string;
|
||||
mime?: string;
|
||||
@@ -560,6 +563,7 @@ const ChatScreen: React.FC = () => {
|
||||
category: p.category ? String(p.category) : undefined,
|
||||
pinned: !!p.pinned,
|
||||
preview: p.content_preview ? String(p.content_preview) : undefined,
|
||||
action: (p.action === 'updated' || p.action === 'deleted') ? p.action : 'created',
|
||||
attachments: atts.length ? atts : undefined,
|
||||
},
|
||||
};
|
||||
@@ -1326,10 +1330,17 @@ const ChatScreen: React.FC = () => {
|
||||
const m = item.memorySaved;
|
||||
const catPart = m.category ? ` · [${m.category}]` : '';
|
||||
const atts = m.attachments || [];
|
||||
const action = m.action || 'created';
|
||||
const headline =
|
||||
action === 'updated' ? '🧠 ARIA hat eine Notiz geändert' :
|
||||
action === 'deleted' ? '🧠 ARIA hat eine Notiz gelöscht' :
|
||||
'🧠 ARIA hat etwas gemerkt';
|
||||
const headlineColor = action === 'deleted' ? '#FF6B6B' : '#FFD60A';
|
||||
const borderColor = action === 'deleted' ? '#FF6B6B' : '#FFD60A';
|
||||
return (
|
||||
<View style={[styles.messageBubble, styles.ariaBubble, {borderLeftWidth: 3, borderLeftColor: '#FFD60A'}, searchHighlightStyle]}>
|
||||
<Text style={{color: '#FFD60A', fontWeight: 'bold', fontSize: 14}}>
|
||||
{'🧠 ARIA hat etwas gemerkt'}
|
||||
<View style={[styles.messageBubble, styles.ariaBubble, {borderLeftWidth: 3, borderLeftColor: borderColor}, searchHighlightStyle]}>
|
||||
<Text style={{color: headlineColor, fontWeight: 'bold', fontSize: 14}}>
|
||||
{headline}
|
||||
</Text>
|
||||
<Text style={{color: '#E0E0F0', marginTop: 4, fontSize: 14}}>
|
||||
<Text style={{fontWeight: 'bold'}}>{m.title}</Text>
|
||||
|
||||
@@ -672,6 +672,7 @@ class Agent:
|
||||
saved = self.store.get(pid)
|
||||
self._pending_events.append({
|
||||
"type": "memory_saved",
|
||||
"action": "updated",
|
||||
"memory": {
|
||||
"id": saved.id, "type": saved.type, "title": saved.title,
|
||||
"content_preview": (saved.content or "")[:140],
|
||||
@@ -734,6 +735,7 @@ class Agent:
|
||||
saved = self.store.get(pid)
|
||||
self._pending_events.append({
|
||||
"type": "memory_saved",
|
||||
"action": "created",
|
||||
"memory": {
|
||||
"id": saved.id, "type": saved.type, "title": saved.title,
|
||||
"content_preview": (saved.content or "")[:140],
|
||||
|
||||
@@ -2647,9 +2647,12 @@ class ARIABridge:
|
||||
"timestamp": int(asyncio.get_event_loop().time() * 1000),
|
||||
})
|
||||
elif etype == "memory_saved":
|
||||
mem = event.get("memory", {})
|
||||
if event.get("action"):
|
||||
mem = {**mem, "action": event.get("action")}
|
||||
await self._send_to_rvs({
|
||||
"type": "memory_saved",
|
||||
"payload": event.get("memory", {}),
|
||||
"payload": mem,
|
||||
"timestamp": int(asyncio.get_event_loop().time() * 1000),
|
||||
})
|
||||
except Exception:
|
||||
|
||||
Reference in New Issue
Block a user