Commit Graph

453 Commits

Author SHA1 Message Date
Peter Steinberger
5397667272 chore(release): prepare 2026.5.4 2026-05-04 10:09:55 +01:00
Vincent Koc
7050af56d4 fix(voice-call): bound realtime audio pacing 2026-05-03 22:58:28 -07:00
Vincent Koc
20ade148be fix(voice-call): end realtime completed calls 2026-05-03 22:12:08 -07:00
scoootscooob
b2f2185348 fix(google-meet): keep realtime Twilio joins alive 2026-05-04 05:42:59 +01:00
scoootscooob
0c1df35315 fix(voice-call): scope call control gateway methods 2026-05-04 05:42:59 +01:00
scoootscooob
309ff6bada perf(voice-call): trim realtime audio copies 2026-05-04 05:42:59 +01:00
scoootscooob
7fc9a82dca fix(voice-call): pace realtime Twilio audio 2026-05-04 05:42:59 +01:00
Peter Steinberger
5a028489b1 fix(voice-call): fallback on gateway 1006 closes (#76858) 2026-05-03 19:02:21 +01:00
Peter Steinberger
4e82cacc84 fix(voice-call): summarize restored call verification logs 2026-05-03 17:44:21 +01:00
Peter Steinberger
31161abd40 chore(release): bump version to 2026.5.3 2026-05-03 03:08:47 +01:00
Peter Steinberger
b4437047f4 perf: route session store writes through writer queue 2026-05-02 13:11:19 +01:00
Peter Steinberger
80da0a0213 chore: bump version to 2026.5.2 2026-05-02 11:58:45 +01:00
Peter Steinberger
1634f91a35 fix: improve google meet twilio join sequencing 2026-05-02 10:56:14 +01:00
Peter Steinberger
39a931f1bf feat(voice-call): route inbound calls per number 2026-05-02 09:44:52 +01:00
Peter Steinberger
010f7a58a1 build(plugins): externalize acpx release packages 2026-05-02 08:48:28 +01:00
Peter Steinberger
e4aab1419a fix(voice-call): support per-call session scope 2026-05-02 08:42:46 +01:00
Shakker
7641783d6b fix: enforce plugin tool manifest contracts 2026-05-02 06:21:08 +01:00
Peter Steinberger
9f4921c1cd build: prepare next external plugin beta batch 2026-05-02 05:16:10 +01:00
Peter Steinberger
4cca1b2399 fix: preserve formatted channel startup logs 2026-05-02 05:05:08 +01:00
Peter Steinberger
4389ceedac fix: honor telephony tts directives 2026-05-01 22:48:53 +01:00
Peter Steinberger
4144180eb0 build(deps): update workspace dependencies 2026-05-01 21:58:26 +01:00
Peter Steinberger
496bf38fcf refactor: trim voice call helper exports 2026-05-01 17:42:26 +01:00
Peter Steinberger
456e1c0a6a refactor: trim voice-call helper exports 2026-05-01 16:01:48 +01:00
Peter Steinberger
ebbd80a6a2 refactor: trim extension barrel leftovers 2026-05-01 14:46:29 +01:00
Peter Steinberger
040f533f60 chore: update dependencies 2026-05-01 12:43:17 +01:00
Peter Steinberger
ec69c07b27 fix: send twilio notify twiml directly 2026-05-01 12:35:40 +01:00
Peter Steinberger
ef832f83f6 fix(extensions): guard model and Twilio fetches 2026-05-01 12:06:26 +01:00
Peter Steinberger
4ed6a7c6b8 refactor: trim unused testing exports 2026-05-01 10:46:42 +01:00
Peter Steinberger
996e0ae2f2 refactor: remove stale extension helpers 2026-05-01 10:39:00 +01:00
Peter Steinberger
e26357fee8 refactor: prune stale extension types 2026-05-01 10:34:04 +01:00
Peter Steinberger
ef186a06d9 fix: add fast voice-call realtime context 2026-05-01 09:47:09 +01:00
Peter Steinberger
0ac1a07f7c refactor: prune unused extension helpers 2026-05-01 09:02:45 +01:00
Peter Steinberger
9d21df251e fix: clear changed gate regressions 2026-05-01 08:35:44 +01:00
Peter Steinberger
a379ac0562 fix: guard plugin HTTP calls in CI 2026-05-01 08:26:29 +01:00
clawsweeper[bot]
6776345d0a test: stabilize voice-call early media stream readiness test (#75453)
Stabilize the media stream readiness regression test by waiting for the early audio send directly and closing the WebSocket in cleanup before server shutdown.

Thanks @PfanP.
2026-05-01 08:10:57 +01:00
clawsweeper[bot]
c39b323ab3 fix: voice-call CLI gateway delegation path actionable regressions (#75459)
Fix voice-call CLI gateway delegation by returning protocol-shaped errors and running delegated continue turns through operation-id polling instead of one long Gateway RPC.\n\nThanks @serrurco and @DougButdorf.
2026-05-01 08:02:21 +01:00
Peter Steinberger
c677861032 chore: log meet twilio voice flow 2026-05-01 07:38:41 +01:00
clawsweeper[bot]
be918636ab fix: tighten webhook exposure host checks (#75465)
Use the existing SSRF hostname/IP classifier for Voice Call and Google Meet webhook exposure checks so bracketed IPv6 loopback, unique-local, link-local, and IPv4-mapped local/private addresses fail before Twilio/Meet joins while public hostnames are not rejected by prefix accidents.

Thanks @clawsweeper, @donkeykong91, and @PfanP.
2026-05-01 07:27:56 +01:00
VACInc
be14820b5d fix: resolve voice-call SecretRef inputs (#73632)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-01 07:21:02 +01:00
Peter Steinberger
ec1b96cdfa fix: honor meet preconnect twiml 2026-05-01 07:17:10 +01:00
Peter Steinberger
ae07d57f9d fix: sequence meet dtmf before realtime bridge 2026-05-01 07:05:01 +01:00
Peter Steinberger
ffcc0d1fe1 fix: delay meet twilio intro speech 2026-05-01 06:55:22 +01:00
Peter Steinberger
97d42a9614 fix(voice-call): retry twilio answered updates 2026-05-01 06:47:34 +01:00
Peter Steinberger
b2aac178d6 fix: tighten meet voice-call setup checks 2026-05-01 06:40:22 +01:00
Peter Steinberger
464e573602 fix(voice-call): delegate cli calls to gateway 2026-05-01 06:35:36 +01:00
Ben
e8f9c3e6de fix(voice-call): stabilize Twilio STT startup (#75257)
Fix Twilio voice-call startup so accepted media streams register immediately, realtime transcription readiness gates only the initial greeting, and early inbound media is preserved while STT connects.

Fixes #75197.
Thanks @PfanP and @donkeykong91.
2026-05-01 06:25:36 +01:00
Peter Steinberger
54f44ec321 fix: restore Twilio Meet voice intro 2026-05-01 05:41:49 +01:00
Peter Steinberger
07bc320a8a fix: scope voicecall CLI activation 2026-05-01 05:32:18 +01:00
Fred blum
9b1bde2561 fix(voice-call): close webhook in-flight limiter fail-open on empty remote address (#74453)
* fix(voice-call): close in-flight limiter fail-open on empty remote address

The webhook in-flight limiter (createWebhookInFlightLimiter in
src/plugin-sdk/webhook-request-guards.ts) returns true unconditionally
when tryAcquire is called with an empty key — that is its by-contract
fail-open path used to mean 'caller is opting out of the limiter'.

The voice-call webhook handler reached that path silently: it computed
'req.socket.remoteAddress ?? ""' and passed the empty string straight
into tryAcquire. Whenever req.socket.remoteAddress was absent (closed
socket, edge proxy quirk), the limiter became a no-op and the request
proceeded directly to readBody without any concurrency cap.

Fix: when remoteAddress is missing, log a warning and fall back to a
constant non-empty key ('__voice_call_no_remote__') so all such
requests share one in-flight bucket instead of bypassing the limiter
entirely. The bucket size stays maxInFlightPerKey (default 8), which
is the right defense-in-depth posture against slow-body attacks
arriving with stripped IP info.

Scoped to voice-call only. Other consumers of the SDK helper
(bluebubbles via openclaw/plugin-sdk/webhook-ingress) are not changed
to avoid drive-by edits to plugins this PR does not own. The shared
SDK contract (empty key = bypass) is left as-is and documented
implicitly by the fix's comment block.

The existing 8-concurrent test in webhook.test.ts continues to assert
the limiter engages on the happy path; no new test added since the
private handleRequest path is not unit-test exposed and the change is
two-line auditable from the diff alone.

* test(voice-call): cover missing webhook remote address limiter

* test: align changed package sdk routing

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-04-30 01:02:14 +00:00
Peter Steinberger
83267e99b0 chore: update dependencies 2026-04-29 22:42:45 +01:00