Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 16 Aug 05:23
· 140 commits to master since this release

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 retranscribe now 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 via fetch_queue.

Smaller fixes

  • fetch_queue no longer announces itself in the topic.
  • CI: commits are gated by the hosted check suite; Windows go vet runs 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