Repository navigation
v0.2.0
C3 v0.2.0 is a reliability release: voice notes can no longer go missing, batched/forwarded messages keep their structure, and two new CLI adapters join the roster.
Voice notes: persist first, transcribe after
The speech-to-text pipeline was rebuilt around one rule — a voice note is stored durably the moment it arrives, before transcription is attempted:
- Every voice inbound lands in the durable queue immediately with an honest placeholder; STT runs off the delivery path in a bounded scheduler and resolves the stored row exactly once. A network outage now means delayed, never lost: the note parks, retries with backoff until connectivity returns (up to a configurable
voice_retry_expiry, default 24h), and delivers exactly once on recovery. - Fixed a five-minute voice blackout after a route worker exit, and a case where a late manual retranscribe success could be dropped.
- Voice audio is cached on first fetch: downloads are served from cache, transcription can proceed through provider hiccups, and failure notices now say exactly where the saved audio lives.
- Manual
retranscribenow single-flights through the same scheduler as automatic retries — no duplicate work, same delivery guarantees.
Batched and forwarded messages keep their structure
A burst (album, forward, rapid sequence) is still debounced into a single delivery so the agent wakes once — but the block is no longer lossy:
- Each delivered burst now carries its source message ids (
merged_count,merged_message_ids), per-message text with source attribution, and per-attachment origin (attachment_message_id), so caption↔photo pairing and message boundaries are fully recoverable. - Forwarded messages surface their provenance (
forwarded_from), and Telegram album identity (media_group_id) is captured at ingest. - If a session dies before processing a delivered burst, recovery now restores the original discrete messages to the queue — previously they were re-queued as one collapsed row.
- Rendering polish: captionless albums show
(N attachments)instead of an empty body, and senders without a public @username are attributed as@uid=<id>.
All wire changes are additive: existing adapters keep working unchanged, and rebuild to surface the new structure. No protocol bump; the on-disk queue format is unchanged.
New adapters
- Deep Agents Code (
c3-dcode-adapter) — MCP stdio bridge to the C3 broker. - Cursor Agent CLI (
c3-cursor-adapter) — poll-only host: messages hold in the durable queue and surface viafetch_queue.
Smaller fixes
fetch_queueno longer announces itself in the topic.- CI: commits are gated by the hosted check suite; Windows
go vetruns clean.
Upgrading
Run /c3:update from any attached session (checksum-verified staged binary replacement), or grab the tarball for your platform below and verify against SHA256SUMS. Restart the broker after installing so the new binaries take over.
Full Changelog: v0.1.0...v0.2.0