Skip to content

Release 1.2.0a1 - #49

Open
github-actions[bot] wants to merge 58 commits into
masterfrom
release-1.2.0a1
Open

Release 1.2.0a1#49
github-actions[bot] wants to merge 58 commits into
masterfrom
release-1.2.0a1

Conversation

@github-actions

Copy link
Copy Markdown

Human review requested!

JarbasAl and others added 30 commits July 15, 2026 21:48
AI-Generated Change:
- Model: claude-sonnet-4-6
- Intent: Replace setup.py with PEP 621 pyproject.toml; add version.py for dynamic version via attr:
- Impact: Package installs via modern toolchain; setup.py removed
- Verified via: pip install -e . && pip show baresipy
AI-Generated Change:
- Model: claude-haiku-4-5
- Intent: Add standard CI/CD workflows via shared-gh-workflows skill
- Impact: Added workflow files for build, test, lint, release automation
- Verified via: apply_workflows.py metadata detection
- fix readme filename mismatch (readme.md -> README.md)
- point Homepage at TigreGotico/baresipy
- declare json_database dependency and a test extra
- require python >=3.10 to match the CI matrix
- drop legacy hand-rolled workflows superseded by gh-automations
- drop lichecker license test superseded by the license_check workflow
- fix example control flow and note the pyjokes example dependency

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
audioop-lts backfills the audioop module pydub needs on python >= 3.13

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ess calls

BREAKING CHANGE: ResponsiveVoice is removed. The `tts` kwarg now expects an
object exposing the OVOS TTS plugin interface (get_tts(sentence, wav_file)).
A default engine can be resolved lazily via the optional `ovos` extra
(ovos-plugin-manager + ovos-tts-plugin-phoonnx).

- extract per-line parsing out of run() into _handle_output_line()
- add type hints across the public API; make quit() idempotent and
  tolerant of an already-dead baresip process
- add autostart kwarg to defer Thread.start(); block semantics now live
  in an overridden start()
- add login_options kwarg to extend the SIP login string
- support registrar-less mode: user/pwd/gateway all optional, call()
  accepts full sip: URIs or expands number+gateway
- add headless mode (config.render_config) so baresip can run without
  any sound hardware (fixes #16, #17); store the configured ausrc so
  send_audio() stops hardcoding alsa,default
- harden contacts import/export against a missing contacts file (#2)
- convert_audio() gains frame_rate/channels/min_duration_s kwargs (#18)
- fix ruff re-export warning in baresipy/utils

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
baresip 3.x logs DTMF as 'received SIP INFO DTMF' (SIP INFO) or
'received in-band DTMF event' (RTP telephone-event), and interpolates
the errno text into the audio-source failure message

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat!: pluggable TTS, headless mode, registrar-less calls
Covers _handle_output_line() line parsing (ready/login/call states/DTMF/
errors), render_config() headless vs alsa, ContactList CRUD, convert_audio()
resampling, and get_default_tts()/speak() fallback behaviour, all without
spawning a real baresip process or touching ~/.baresipy or ~/.baresip.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
test: functional unit suite for state machine, config, contacts, audio and tts
the automated version bump appended a VERSION_BLOCK because the file
predated the expected format, corrupting it and regressing the computed
version to 0.0.1; the version is set to 1.0.0a2 reflecting the major
bump from the breaking TTS change plus the merges since 0.1.5

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix: restore canonical version block format
Adds baresip sndfile-based rx call recording (record_rx/recording_path on
BareSIP, get_rx_wav/get_rx_stream), a WavTailReader + pure-stdlib PCM
resampler in baresipy/audio.py, an OVOS Microphone plugin
(baresipy.ovos.BareSIPMicrophone, lazy-imported behind the ovos extra), and
a registrar-capable voice_bot.py example wiring it into ovos-simple-listener.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat: inbound call audio capture and OVOS microphone integration
Add a Dockerfile (python:3.12-slim + apt baresip/ffmpeg, optional
INSTALL_EXTRAS build-arg) and a docker-compose.e2e.yml running two
registrar-less headless BareSIP instances (callee/caller) that call each
other directly over a compose network, exchange DTMF and a generated
sine-wave wav, and write results to a shared bind-mounted volume.

test/e2e/test_call.py drives `docker compose ... up` and asserts the call
actually establishes and the callee's rx capture is non-silent, exercising
baresipy's real stdout parser against an actual baresip binary. Marked
`e2e` and excluded from the default run via addopts in pyproject.toml.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
registrar-less mode now creates a local non-registering user agent
(;regint=0) so direct sip: URI calls actually work; send_dtmf gained a
'keys' mode that emits real RFC 4733 telephone-events; the run loop
survives the pty closing mid-read

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat: docker image, GHCR publishing and live e2e call test rig
Cover system dependency install, SIP account setup, direct/registrar-less
calling, configuration reference, OVOS voice-bot integration, docker usage,
and testing, and refresh AGENTS.md with the current module layout.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
JarbasAl and others added 28 commits July 15, 2026 23:16
resolves the baresip executable via the optional baresip-binary package
first, then falls back to the system binary on PATH

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat: prefer the baresip-binary bundled executable when installed
Expose a BareSIP phone over HTTP + WebSocket (baresipy-gateway console
script) so calls, TTS, DTMF, and caller audio can be driven from any
process, not just embedded python. fastapi/uvicorn/python-multipart are
only required by the new server extra; base install is unaffected.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat: HTTP/WebSocket gateway (baresipy.server)
httpx 1.0 removes BaseTransport, which starlette's TestClient still
imports, breaking test collection

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix: cap httpx below 1.0 in the test extra
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ci: run the live e2e call test on pull requests
…in retry and TLS/SRTP config

Adds barge-in primitives (stop_audio/send_audio block/non-block/speak
sentence-chunking), a /transfer wrapper around baresip's menu module REFER
command, per-call metadata (CallInfo/parse_sip_uri) with capped call
history and DTMF capture, opt-in registration retry with backoff before
handle_login_failure quits, and TLS CA file / SRTP module exposure in
render_config and the BareSIP account line. All additions are additive
with defaults matching prior behavior.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat: interruptible playback, transfer, caller identity, login retry, TLS/SRTP
Adds baresipy.ivr (IVRNode/IVRSession/IVRPhone) for building phone-tree
call flows with barge-in, retries, submenus, and transfer/hangup actions.
Extends the HTTP gateway with /transfer, /stop_audio, /calls, and a
per-call call_id carried in /ws/events payloads so events can be grouped
by call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat: declarative IVR menus and gateway v2 (transfer, barge-in, call history)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant