v0.34.0
thevoiceguy/siphon-aiv0.34.0Jul 15, 2026by github-actions[bot]
Upgrading?
AI Summary
A WS-failure prompt playback feature is implemented to inform callers when the WebSocket connection drops unexpectedly, replacing unexplained disconnects with a customizable audio prompt.
Key Highlights
- New `[bridge].on_ws_failure` configuration to play prompts on connection failure.
- New metric `siphon_ai_ws_failure_prompts_total` to track prompt playbacks.
- Fail-open behavior ensures the system degrades gracefully if the prompt file is missing.
New Features
- WS-failure prompt playback.
- WS failure metrics.
Full Release Notes
### Added
- **WS-failure prompt playback** — `[bridge].on_ws_failure =
"play_prompt"` + `ws_failure_prompt_file`, both per-route
overridable (`docs/design/DESIGN_WS_FAILURE_PROMPT.md`; #292).
Finishes the switch reserved since v1: when the WS becomes
**unusable** — unexpected drop, connect failure at answer, keepalive
timeout, `protocol_error`, `server_too_slow`, or an exhausted
0.7.3 reconnect window — the caller hears a configurable WAV
(*"we're experiencing difficulties…"*) before the normal BYE,
instead of an unexplained disconnect. Details:
- Never fires when the ending was intended (server `hangup` / clean
`stop`), on caller actions, on `rtp_timeout`, or during drain.
- **Fail-open**: an unusable prompt (rate mismatch, file vanished)
degrades to today's immediate teardown; playback is capped at a
fixed 30 s. CDR termination causes are unchanged (`duration_ms`
grows by the prompt).
- **Announce-over-park**: a prompt started while the call is parked
on MOH now plays (MOH → prompt → BYE after a failed reconnect);
a park arriving mid-announcement still cuts it short, so the
0.26.0 consent semantics are unchanged.
- Prompt file is required + existence-checked at load when any
effective policy is `play_prompt`; WAVs longer than the 30 s cap
warn at load.
- **Metric**: `siphon_ai_ws_failure_prompts_total{result}` with
`played | cut_short | unusable | timeout`.
- **SIPp harness**: `ws_failure_prompt` phase (echo server drops the
WS mid-call; asserts the prompt played on a real call). Suite is
now 38 scenarios.
### Changed
- `MediaTap::with_ws_reconnect` renamed to `with_survive_ws_drop`
(internal API) — the tap's survive-WS-drop mode now serves both
reconnect and prompt calls.
No WS-protocol, CDR, or webhook-schema changes.
---
**Artifacts**
- Static musl binaries for `x86_64` and `aarch64` (`.tar.gz`).
- Debian packages (`.deb`) for `amd64` and `arm64` — `apt install ./siphon-ai_*_amd64.deb`.
- `SHA256SUMS` — verify with `sha256sum -c SHA256SUMS`.
- `*-sbom.cdx.json` — CycloneDX SBOM.
- `SHA256SUMS.cosign.bundle` — cosign keyless signature over the checksums.
- Container: `ghcr.io/thevoiceguy/siphon-ai:v0.34.0` (multi-arch, cosign-signed).
Verify the checksums signature:
```
cosign verify-blob --bundle SHA256SUMS.cosign.bundle \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity-regexp 'release.yml@' SHA256SUMS
```
Related Repositories
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.
Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one