| feat(calls): phone call agent — outbound Twilio calls and inbound agent mode (#2306) * feat(calls): phone call agent backend — outbound/inbound calls in your voice Adds a task-driven call agent on top of the Twilio integration: outbound calls via Twilio REST with signed status callbacks, a provider-agnostic conversation loop (energy VAD -> capture ASR -> streamed LLM turn -> streaming TTS, barge-in via clear), persisted call sessions (alembic 0012), the /calls local API with SSE events, take-over/say/hangup, and inbound agent mode. Owner safeguards: editable AI disclosure on by default, outbound voices gated to verified-own or designed profiles (403), one explicit request per call with max 1-2 concurrent, recording only when enabled and disclosed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs(changelog): reference #2306 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs(changelog): add Unreleased highlights Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(calls): address review — affirmative recording notice, one agent-call limit, wider number guard - Recording needs an affirmative notice; negated disclosures never record (greptile) - max_concurrent now limits agent calls in both directions (greptile) - Sensitive-number guard also catches comma and Unicode-dash separators (greptile) - Constant upsert SQL, https-only urlopen guard, no BaseException catch (code scanning) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(calls): always finalize a connected call; allow brief numbers in any phone style - Finalize agent calls in a shielded finally so a failed/cancelled stream frees its slot (coderabbit) - Guard allows numbers from the brief written with parentheses or a country code (coderabbit) - Docs: the no-LLM fallback needs a configured greeting (coderabbit) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(calls): wait on record changes instead of sleeping; assert the injected stream failure Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> | 1 天前 |
| feat: rename the product to VoiceStudio (previously OmniVoice-Studio) Renames what users see. The app, the installers, the window title, the docs and all 21 locales now say VoiceStudio, with "(previously OmniVoice-Studio)" noted near the title of each doc surface so people recognise it. Deliberately NOT renamed, because renaming any of them silently breaks an existing install — there is no legacy-path fallback anywhere in this codebase: - bundle identifier com.debpalash.omnivoice-studio (MSI UpgradeCode, macOS TCC grants, managed venv, WebView localStorage, the single-instance lock) - data directories OmniVoice / .omnivoice and omnivoice.db - the ~150 OMNIVOICE_* environment variables - the X-OmniVoice-* HTTP headers (a wire protocol) - the published Docker image paths - the OmniVoice ENGINE, which is a model name and not this product tests/test_identity_paths_survive_the_rename.py pins every one of those so a future well-meaning sweep cannot orphan a user's library. Linux .deb users install a new package name and should apt remove omnivoice-studio; that note is in the changelog. | 1 个月前 |