Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, this project adheres to Semantic Versioning, commits follow Conventional Commits, and this changelog is generated by Structured Changelog.
Unreleased¶
v0.8.0 - 2026-04-03¶
Highlights¶
- New
resiliencepackage for provider-agnostic error classification and retry logic - Smart fallback in TTS and STT clients - only switch providers on permanent errors
- 8 error categories for actionable error handling decisions
Added¶
resiliencepackage with error categorization system (resilience/)ErrorCategorytype with 8 categories:transient,rate_limit,validation,auth,not_found,server,quota,unknown(resilience/category.go)ErrorInfostruct with category, retryability, code, message, suggestion, and retry-after hint (resilience/error.go)ProviderErrortype wrapping provider errors with classification metadata (resilience/error.go)ErrorClassifierinterface for provider-specific error classification (resilience/classifier.go)HTTPStatusClassifierfor HTTP status code classification (resilience/classifier.go)Retry()andRetryWithResult[T]()generic retry functions with configurable backoff (resilience/retry.go)RetryConfigwith max attempts, backoff strategy, classifier, and OnRetry callback (resilience/retry.go)RetryErrortype for exhausted retry attempts with attempt count (resilience/retry.go)- Backoff strategies:
ExponentialBackoff,LinearBackoff,ConstantBackoff,NoBackoff(resilience/backoff.go) DefaultBackoff()andDefaultRetryConfig()with sensible defaults (resilience/backoff.go)IsProviderError()helper to extractProviderErrorfrom error chain (resilience/error.go)IsRetryable()helper to check error retryability (resilience/error.go)
Changed¶
- TTS client now uses smart fallback - only switches providers on permanent (non-retryable) errors (
tts/tts.go) - STT client now uses smart fallback - only switches providers on permanent (non-retryable) errors (
stt/stt.go) - Fallback behavior is now determined by error classification, not error occurrence
Documentation¶
- Package documentation with examples in
resilience/doc.go
Tests¶
- 44 tests in resilience package covering retry logic, backoff strategies, error types, and categories
- 4 TTS fallback behavior tests (
tts/fallback_test.go) - 4 STT fallback behavior tests (
stt/fallback_test.go)
v0.7.0 - 2026-03-30¶
Highlights¶
- Enhanced TTS mock fixtures with WAV audio generation
- Provider-specific mocks for ElevenLabs, Deepgram, and OpenAI
- Configurable mock behaviors for testing (latency, errors, timing)
Added¶
GenerateWAVFixture(durationMs, sampleRate)creates valid WAV files with proper RIFF headers for testing (17ef8b9)GenerateShortWAV()andGenerateOneSecondWAV()convenience fixtures (17ef8b9)MockProviderOptionfunctional options pattern for configurable mock behavior (17ef8b9)WithFixedDuration(ms)option for mocks returning fixed-length audio (17ef8b9)WithRealisticTiming()option for text-length-proportional audio duration (17ef8b9)WithError(err)option for error injection testing (17ef8b9)WithLatency(duration)option for simulating network delays (17ef8b9)WithFailAfterN(n, err)option for testing retry/failover logic (17ef8b9)NewElevenLabsMock()with 3 preconfigured voices (Rachel, Bella, Antoni) (17ef8b9)NewDeepgramMock()with 3 preconfigured voices (Asteria, Luna, Orion) (17ef8b9)NewOpenAIMock()with 6 preconfigured voices (Alloy, Echo, Fable, Onyx, Nova, Shimmer) (17ef8b9)- Common test errors:
ErrMockRateLimit,ErrMockQuotaExceeded,ErrMockNetworkError,ErrMockInvalidVoice(17ef8b9)
Fixed¶
- Fixed gofmt formatting and added G115 nolint annotations for bounded integer conversions in WAV generation (
aa28bc8)
Documentation¶
- Testing with Mocks guide covering mock providers, WAV fixtures, and common test patterns (
1980a53)
Tests¶
- Comprehensive tests for WAV fixture generation and header validation (
17ef8b9) - Tests for all MockProviderOption behaviors including context cancellation (
17ef8b9) - Provider conformance tests for ElevenLabs, Deepgram, and OpenAI mocks (
17ef8b9)
v0.6.0 - 2026-03-21¶
Highlights¶
- Observability package for voice instrumentation with hooks and events
- Registry package for provider discovery and registration
- CallSystem client with multi-provider failover support
- SMS messaging support via SMSProvider interface
Added¶
observabilitypackage with VoiceEvent, VoiceObserver, TTSHook, and STTHook interfaces (dda0212)- Event types for call lifecycle (initiated, ringing, answered, ended, failed) (
dda0212) - NoOpTTSHook and NoOpSTTHook for optional instrumentation (
dda0212) registrypackage with Registry interface for provider discovery (0ec559f)- Factory types for TTS, STT, and CallSystem providers (
0ec559f) callsystem.Clientfor managing multiple CallSystem providers with automatic failover (c12a16a)SMSProviderinterface andSMSMessagetype for SMS support (d7d8c63)Hookfield inSynthesisConfigfor TTS observability (8b3c38a)Hookfield inTranscriptionConfigfor STT observability (8b3c38a)Observerfield inCallSystemConfigandCallOptionsfor call events (8b3c38a)WithObserverCallOption for per-call observability (8b3c38a)ObservableCallSysteminterface combining CallSystem with Observable (8b3c38a)SetHook()andHook()methods on TTS and STT clients (8b3c38a)
Fixed¶
- Resolved gosec G120 warnings in Twilio webhook example by adding http.MaxBytesReader (
ac115b7)
v0.5.0 - 2026-02-28¶
Highlights¶
- Organization rename from agentplexus to plexusone
Changed¶
- Breaking: Go module path changed from
github.com/agentplexus/omnivoicetogithub.com/plexusone/omnivoice-core(bf46b07)
v0.4.3 - 2026-02-15¶
Highlights¶
- Comprehensive tests for English and Chinese subtitle generation
Tests¶
TestWordsToSubtitleCues_EnglishWordGroupingfor word-based cue grouping (0ddb8bc)TestWordsToSubtitleCues_ChineseCharactersfor character-by-character tokenization (0ddb8bc)TestWordsToSubtitleCues_MixedChineseEnglishfor mixed language content (0ddb8bc)TestWordsToSubtitleCues_LongChineseTextfor multi-cue splitting (0ddb8bc)
v0.4.2 - 2026-02-15¶
Highlights¶
- Fixed subtitle word cutoff at line boundaries
Fixed¶
- Subtitle cue chunking now checks actual wrapped line count instead of total character count, preventing words from being cut off when they would appear on a third line (
a301897)
Tests¶
TestWordsToSubtitleCues_LineCountLimitverifies cues split correctly at line boundaries (a301897)
v0.4.1 - 2026-02-14¶
Highlights¶
- STT conformance tests for
TranscribeFileandTranscribeURLbatch transcription methods
Tests¶
TranscribeFileconformance test for local file transcription (c441944)TranscribeURLconformance test for remote URL transcription (c441944)
v0.4.0 - 2026-02-14¶
Highlights¶
- Subtitle generation from STT transcription results
- Extensible config maps for provider-specific settings
Added¶
- Subtitle package for SRT/VTT generation from transcription results (
17730a7) - Configurable max characters per line and lines per cue for subtitles (
17730a7) - Word-level timestamp-based cue splitting (
17730a7) Extensionsmap inTranscriptionConfigfor provider-specific STT settings (84c37f5)Extensionsmap inSynthesisConfigfor provider-specific TTS settings (665c3be)
Fixed¶
- Subtitle
wrapTextno longer clips words when text exceeds line limit (63144bb)
Documentation¶
- Voice cloning guide with recording tips and phonetically balanced text (
1f0cdd8)
Tests¶
- Call system provider conformance tests (
MakeCall,ListCalls,OnIncomingCall) (9683ca2) - Transport provider conformance tests (
Listen,Connect,Protocol) (9683ca2)
v0.3.0 - 2026-01-24¶
Highlights¶
- Provider conformance test suites for TTS and STT implementations
Added¶
- TTS provider conformance test suite (
Synthesize,SynthesizeStream,SynthesizeFromReader) (e3705c7) - Mock TTS provider for self-testing with configurable audio format responses (
e3705c7) - STT provider conformance test suite (
Transcribe,TranscribeStream) (69cfd20) - Mock STT provider with streaming transcription simulation (
69cfd20)
Fixed¶
- MCP session and tool handlers now log
Close()errors instead of discarding (6099072)
Documentation¶
- Provider conformance testing TRD describing test categories and API design (
58a9697)
Build¶
- MIT LICENSE file (
f124dcf)
v0.2.0 - 2026-01-18¶
Highlights¶
- Audio codec package with PCM, mu-law, and a-law support for telephony
- MCP server enabling Claude Code to make voice calls
- Pipeline components connecting STT, TTS, and transport providers
Added¶
- Audio codec package with PCM sample conversions (int16, float32, float64, bytes) (
f64fe1e) - Mu-law encoding/decoding for Twilio Media Streams (
f64fe1e) - A-law encoding/decoding for international telephony (
f64fe1e) - Audio resampling, normalization, and analysis utilities (
f64fe1e) - MCP server with stdio transport for voice interactions (
721cbac) - Voice interaction tools:
initiate_call,continue_call,speak_to_user,end_call(721cbac) - Session management for tracking active voice calls (
721cbac) TTSPipelinefor streaming TTS output to transport connections (11c906d)StreamingTTSPipelinefor connecting streaming LLM text to TTS to transport (11c906d)STTPipelinefor streaming audio from transport to STT with event callbacks (11c906d)
Documentation¶
- Voice integration PRD outlining goals, user stories, and success metrics (
fd86611) - Twilio integration TRD detailing Media Streams architecture (
fd86611)
Tests¶
- Comprehensive unit tests for audio codec functions (mu-law, a-law, PCM) (
f64fe1e)
v0.1.0 - 2025-12-28¶
Highlights¶
- Initial OmniVoice voice abstraction layer for multi-provider telephony
Added¶
- Voice abstraction layer with provider-agnostic interfaces (
8a54bc2) - STT (speech-to-text) provider interface with streaming support (
8a54bc2) - TTS (text-to-speech) provider interface with streaming support (
8a54bc2) - Transport interface for audio connections (Twilio, Zoom, etc.) (
8a54bc2) - Export
CallOptionsfor provider implementations (7e1b52d)