Replace @xenova/transformers in-process model with HTTP calls to shared
whisper-asr-webservice container (http://whisper:9000). Converts PCM16
samples to WAV and sends to /asr endpoint. Env: WHISPER_URL.
Only inbound (IN) messages determine hasUnread in getContacts(). Telegram
read_business_message events are now parsed and processed to auto-mark
contacts as read for the entire team.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
prisma.$use middleware API was removed in Prisma 6. Switched to
$extends query hooks which is the supported approach.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CalendarEvent and FeedCard timeline entries are now handled by Prisma
middleware automatically. Document timeline entry is inlined since
WorkspaceDocument stores contactId in scope field, not on the model.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CalendarEvent and FeedCard now automatically get a ClientTimelineEntry
when created/updated with a contactId. This ensures events created by
the agent (or any other code path) appear in the contact timeline
without needing explicit upsertClientTimelineEntry calls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Agent trace logs are now stored in-memory (pilotRunStore) and broadcast
through the existing /ws/crm-updates WebSocket channel. When a client
reconnects, it receives a pilot.catchup with all accumulated logs so the
user sees agent progress even after page reload. Three new WS event
types: pilot.trace, pilot.finished, pilot.catchup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When a context scope is picked via the pipette, the picker mode now
turns off automatically since the selection is done and shows as a chip.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The call wave sync watcher fired before DOM was updated (flush: 'pre'),
so ref callbacks hadn't registered host elements yet. Changed to
flush: 'post' so WaveSurfer instances are created after DOM refs exist.
Also fixed getCallItem to read from clientTimelineItems (source of truth)
instead of visibleThreadItems which could be stale.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>