Releases: FreshLabDev/voicy
Release list
v0.0.1-alpha.6
Operations
- Updated pinned Docker release actions to their Node 24 generations, removing
GitHub's Node 20 deprecation annotations from the release workflow.
Container image
ghcr.io/freshlabdev/voicy@sha256:a478f9817e78393c7a459712d3f9a29fdb2941847940327719fce7ac7e699596
v0.0.1-alpha.5
Fixed
- Repeated ordinary and ephemeral panel actions now treat Telegram's
message is not modifiedresponse as an idempotent success instead of
retrying the update and eventually dropping it.
Container image
ghcr.io/freshlabdev/voicy@sha256:6dfd627e34a17f2c9b4d8e6b1a4009279f6b1101bd45855433dba21309d98b22
v0.0.1-alpha.4
Voicy now has one canonical name from repository folder to production schema,
reliable Telegram initialization and job accounting, Rich Markdown transcript
delivery, complete settings, and useful personal and global statistics.
Added
/startpanel with Language, Settings, Stats, Help, About, and Close./language [ru|en]in DM opens the language panel or sets the language
across the shared Core language hub.- Settings for smart formatting, paragraphs, filler words, profanity filter,
diarization, quote style, and metadata. - Per-user Deepgram options:
smart_format,paragraphs,filler_words,
profanity_filter,diarize_model=latest.detect_languageand
mip_opt_outremain always-on. - Localized speaker turns from Deepgram paragraph-level speaker metadata.
- Personal and global statistics tabs with users, transcript kinds, audio
duration, words, Kyiv peak hour, and last detected language. - Owner-bound deep-link recovery for a long ephemeral transcript when neither
ephemeral Rich Markdown nor direct-message delivery is available. - Media size and duration limits, hourly retention cleanup, and stuck-job
health reporting.
Changed
- Removed Deepgram WebSocket code and Telegram draft delivery. Prerecorded
POST /v1/listenis the only STT transport. - Removed transcript-document delivery and its setting. Transcripts use Bot API
sendRichMessage, preserving replies and topics, with safe splitting above
32,768 characters. - Settings callbacks carry the desired value and are safe to retry.
- Telegram startup retries
deleteWebhook,getMe, and command registration
until all succeed./healthzremains unhealthy before initialization. - A terminal job transition and user-stat update now commit atomically and only
once. Failed and empty jobs never affect user-facing statistics. transcriptsprimary key is(file_id, variant)and cached speaker turns are
stored with the text.- The folder, stack, database schema, Core bot key, role, and container are all
namedvoicy.
Migrations
002_user_settings.sqladds settings, cache variants, speaker turns,
retrieval tokens, and last-use timestamps.- Core
011_voicy.sqlmigrates legacy presence and language rows, renames the
schema and role, and narrowsvoicy_coreto the three shared API functions it
uses.
Operations
- Updated to Go 1.26.6 and fixed reachable standard-library and
x/text
vulnerabilities. - CI and release workflows pin actions, pin
govulncheck, run full release
verification, require tagged code to be onmain, fail on missing changelog,
and publish an immutable image digest with SBOM and provenance. - Production Compose accepts only an explicit
VOICY_IMAGEreference.
Container image
ghcr.io/freshlabdev/voicy@sha256:d6dc88deffc97640b886273b7357a379eb3902102af421063d88540c23ea5ec8
v0.0.1-alpha.3
Menus and transcripts follow the family panel contract. Long voices keep
Deepgram paragraph breaks.
Added
- Menu callbacks are owner-scoped (
m:<user_id>:<action>). A foreign tap is
ignored with a short toast. - Close deletes the panel instead of replacing it with a checkmark.
- Empty stats show a short empty state, not zeros.
- Deepgram Listen requests
paragraphs=true. The formatted reply uses that
paragraph text when Deepgram returns it.
Changed
/start, Help, and Stats use<b>title</b>+<i>hint</i>+
<blockquote>body, with Back/Close on subpanels.- Transcripts are a clean blockquote. Language, duration, and confidence are
no longer appended.
Known Limitations
- Cached transcripts from earlier alphas stay a single paragraph until that
file_idis transcribed again.
v0.0.1-alpha.2
File uploads now go to Deepgram prererecorded Listen instead of Live streaming.
Changed
Transcribesends the downloaded Telegram file toPOST /v1/listen. Default
Content-Typeisaudio/oggwhen Telegram does not provide one.- Live WebSocket streaming remains in the client but is no longer the file
upload path.
Fixed
- Empty or mis-detected audio containers are less likely to fail Deepgram
because files are sent as prererecorded OGG rather than a raw stream.
v0.0.1-alpha.1
First public alpha. A Go Telegram bot that turns a voice message or video circle
into text with Deepgram.
Added
- DM transcription: send a voice or video circle and receive the text.
- Group
/vreplies with a public transcript of the replied voice or circle. - Group
/vpis an ephemeral command: a private placeholder inside Telegram's
15-second window, theneditEphemeralMessageText. DM fallback if the edit
fails. Ordinary non-ephemeral group/vpstays quiet. - Deepgram Live streaming (
nova-3,language=multi) with prererecorded
Listen fallback. Interim text uses TelegramsendMessageDraftwhere the
client accepts drafts. file_idcache: store Telegram file id plus transcript, never audio bytes.
The same file is not sent to Deepgram again.- First-party Telegram HTTP client. No third-party Bot API SDK.
- Shared
coreidentity viacore.touch. Domain tables live in
voicetotext.*. - User-facing stats count only successful non-empty transcripts. Empty and
failed runs are logged only. /healthz, Docker Compose for local development, and a WS04 production
compose file that joinscore_net.
Operations
- Local Compose seeds a minimal
coreschema (deploy/core-init.sql). - Production uses
voicetotext_coreon sharedcore-postgres
(deploy/ws04/compose.yaml). Core registration is
core/migrations/009_voicetotext.sql.
Known Limitations
- Alpha: live validation is limited. Group drafts are often ignored by Telegram;
/vstill sends a public final message. - Privacy mode stays on. Groups do not auto-transcribe every voice.
- Deepgram streaming of an already-downloaded file falls back to REST Listen
when the WebSocket path fails.
Migrations
001_init.sqlcreatestranscripts,jobs,user_stats, and
runtime_statein thevoicetotextschema.