- BREAKING:
Call.LiveTranscribeAsync/Call.LiveTranslateAsyncnow take the RELAYactionvalue as an explicit required parameter (LiveTranscribeAsync(action),LiveTranslateAsync(action, statusUrl: null)) instead of forwarding the caller's params dictionary flat. The wire schema (calling.live_transcribe/calling.live_translate) requires a top-levelparams.actionkey; the previous signature never wrapped the caller's value intoparams.action, so the emitted RELAY frame silently omitted it and the server rejected/ignored the call. Callers must updatecall.LiveTranscribeAsync(new { action = "start" })tocall.LiveTranscribeAsync("start"), and similarly forLiveTranslateAsync. - BREAKING:
RelayErrorgained aCodeproperty and a newRelayError(int code, string message)primary constructor (mirroring the Python reference'sRelayError(code, message)); the existingRelayError(string message)constructor is preserved for source compatibility but callers pattern-matching on the previous single-arg-only shape should review call sites. - Added
SignalWireRestTransportError : SignalWireRestError— REST calls that fail at the transport layer (connection refused, timeout, DNS failure) now raise this typed subclass instead of leaking the raw HTTP client exception, mirroring the Python reference'ssignalwire.rest._basetransport-error split. - Version bump reflects the accumulated breaking changes above; the
SEMVER-DIFF release floor remains
3.0.2(port_signatures.baseline.json).
- Added the Messages resource (
client.Messages) — send and redact messages over the native/api/messaging/messagesAPI:CreateAsync(POST/api/messaging/messages, send an SMS/MMS) andUpdateAsync(PATCH/api/messaging/messages/{message_id}, redact a message body). Distinct from theMessageLogsread namespace (client.Logs...). Both routes are covered by success and error wire tests over the shared mock. Generated from the canonicalrest-apis/messagesspec via the spec-driven REST generator.
- Added the Projects resource (
client.Projects) — full CRUD over the native/api/projectsproject-management API (list/get/create/update/delete of projects and subprojects), plusRotateSigningKeyAsync(id)(POST/api/projects/{id}/signing-key/rotate). Distinct from the singularclient.Projecttoken namespace. Every route is covered by success and error wire tests over the shared mock. Generated from the canonicalrest-apis/projectsspec via the spec-driven REST generator.
- Unify the package version onto the cross-port 3.0.2 release line and
establish the release-floor baseline (
port_signatures.baseline.json) that the SEMVER-DIFF gate diffs the working-tree surface against. - REST: generated resource clients with typed, closed create/update params
across the REST namespaces;
RestClientmirrors the Python reference surface. - SWML / SWAIG: document model with schema-driven verbs,
FunctionResultfluent action builder, DataMap server-side tools, and multi-step Contexts. - RELAY:
RelayClientWebSocket real-time call control (async/await throughout). - Skills, Prefabs, and multi-agent
AgentServerhosting. - REST user-agent now derives from the package version instead of a hardcoded string.
- Docs/examples: replaced phantom
AddHangupVerb()/RegisterRawSwaigFunction()calls with the realAddVerb("hangup", …)/RegisterSwaigFunction(…)surface.