Skip to content

feat(eve): add Vercel realtime speech channel#171

Draft
kkdawkins wants to merge 1 commit into
mainfrom
kda-121-merge-realtime-voice-prs
Draft

feat(eve): add Vercel realtime speech channel#171
kkdawkins wants to merge 1 commit into
mainfrom
kda-121-merge-realtime-voice-prs

Conversation

@kkdawkins

Copy link
Copy Markdown

Summary

This combines the realtime voice work from PR #46 and the enhanced Gateway-control work from PR #132 into one branch, with PR #132's architecture as the target end state.

  • Adds vercelSpeechChannel() at eve/channels/vercel/speech.
  • Keeps the default/client-driven voice path on durable /eve/v1/session + stream; no blocking /turn route is included.
  • Adds opt-in Gateway-owned control mode (control: true + controlMode: true) with stateless control tokens, control URL resolution, shared Gateway speech-engine protocol re-export, turn coordination, barge-in/cancel handling, and state recovery.
  • Adds setupVoice() and useEveVoice() plus Eve-owned voice types/live transcript projection.
  • Wires the Next demo mic UI to voice mode and control-mode live transcript/Thinking state.
  • Includes docs, catalog entry, changeset, tests, and a temporary vendored @ai-sdk/gateway tarball override for the shared control-plane protocol/minting support.

Notes

  • This intentionally supersedes PR feat(eve): realtime speech channel #46 and PR feat(eve): Gateway-owned realtime voice control plane (A-lite, greenfield) #132; neither source PR was modified.
  • The old realtime /turn API is not present. Grep is clean for realtime-speech/turn, sendTranscript, and readTurnReply.
  • The Next demo supports AI_GATEWAY_BASE_URL / AI_GATEWAY_BASEURL for testing a protected Gateway preview and forwards VERCEL_AUTOMATION_BYPASS_SECRET / VERCEL_DPBP to both token minting and the browser WebSocket URL.
  • @ai-sdk/gateway is externalized from the Eve package build because it is an optional peer used by the Vercel speech channel protocol shim.

Verification

  • pnpm --filter eve exec vitest run --config vitest.unit.config.ts src/react/voice.test.ts src/client/voice.test.ts src/public/channels/vercel/speech.test.ts src/public/channels/vercel/control-token.test.ts src/public/channels/vercel/control-url.test.ts src/public/channels/vercel/voice-turn-coordinator.test.ts
  • pnpm --filter framework-next typecheck
  • pnpm --filter eve typecheck
  • pnpm typecheck
  • pnpm lint
  • pnpm fmt
  • pnpm guard:invariants
  • pnpm build
  • pnpm docs:check
  • pnpm test:unit (after isolating local /tmp pollution from an unrelated setup test)
  • Local control-mode smoke: eve dev via Next on localhost:3000, ngrok control callback, protected Gateway preview ai-gateway-mecchmiv8.vercel.sh, setup returned a vcst_ token and realtime WebSocket URL with bypass query, health returned control:true.

Follow-up

  • Replace the vendored Gateway tarball once the required @ai-sdk/gateway control-plane/shared speech-engine changes are published upstream.

Signed-off-by: Kevin Dawkins <kkdawkins@gmail.com>
@vercel

vercel Bot commented Jun 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
eve-docs Ready Ready Preview, Comment, Open in v0 Jun 22, 2026 12:06am

@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​ai-sdk/​react@​4.0.0-beta.1821001007598100

View full report

@github-actions

Copy link
Copy Markdown
Contributor

Bundle + Package Summary: apps/fixtures/weather-agent

Key takeaways

  • Dependency delta: 2 peer deps added.

Delta vs main (2109c8d)

Area Metric Baseline Current Delta
Package Packed tarball 3.24 MB 3.26 MB +16.9 kB ⚠️
Package Unpacked publish size 11.61 MB 11.67 MB +53.6 kB ⚠️
Package Installed footprint 51.82 MB 51.87 MB +53.8 kB ⚠️
Package Published files 2173 2188 +15
Package Installed files 5378 5393 +15
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 9.34 MB 9.34 MB +24 B ⚠️
Runtime Public routes 9 9 0
Dependency manifest changes vs main (2109c8d)

Peer dependencies

  • Added: @ai-sdk/gateway@catalog: (optional), @ai-sdk/react@catalog: (optional)
Changed function payloads vs main (2109c8d) (2)
Function Status Baseline Current Delta Route changes
functions/.well-known/workflow/v1/flow.func changed 5.48 MB 5.48 MB +168 B ⚠️ none
functions/__server.func changed 3.87 MB 3.87 MB -144 B ✅ none
Build Metadata
  • Preset: vercel
  • Nitro: nitro@3.0.260610-beta
  • Output directory: apps/fixtures/weather-agent/.vercel/output
  • Build metadata timestamp: 2026-06-22T00:07:27.615Z
  • Route aliases: 9 public, 1 internal (10 total aliases)
  • Vercel routes in config: 10
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.12.0
  • Package directory: packages/eve
  • Tarball: 3.26 MB (eve-0.12.0.tgz)
  • Unpacked payload: 11.67 MB across 2188 published files
  • Installed footprint: 51.87 MB across 5393 installed files
  • Installed root package: 10.56 MB
  • Installed dependencies: 41.32 MB
  • Runtime dependencies: 1
  • Peer dependencies: 14 (13 optional)

Installed footprint is measured from an isolated temporary npm install of the packed tarball.

Heavy installed dependencies

  • @rolldown/binding-linux-x64-gnu: 20.61 MB (39.7%)
  • eve: 10.56 MB (20.4%)
  • ai: 6.20 MB (11.9%)
  • zod: 4.97 MB (9.6%)
  • nitro: 2.41 MB (4.6%)
Publish payload breakdown
Published file size
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [#####...................] 1.51 MB 12.9%
🟡 dist/src/compiled/@workflow/core/runtime.js      [##......................] 775.4 kB 6.6%
🟡 dist/src/compiled/@vercel/sandbox/index.js       [##......................] 632.0 kB 5.4%
🟡 dist/src/compiled/@chat-adapter/slack/index.js   [#.......................] 436.9 kB 3.7%
🟡 dist/src/compiled/_chunks/workflow/attribute-... [#.......................] 370.9 kB 3.2%
🔴 Other published files                            [########################] 7.95 MB 68.1%
Installed footprint breakdown
Installed package size
🔴 @rolldown/binding-linux-x64-gnu [########################] 20.61 MB 39.7%
🔴 eve                             [############............] 10.56 MB 20.4%
🔴 ai                              [#######.................] 6.20 MB 11.9%
🟠 zod                             [######..................] 4.97 MB 9.6%
🟠 nitro                           [###.....................] 2.41 MB 4.6%
🟡 rolldown                        [#.......................] 771.0 kB 1.5%
🔴 Other installed packages        [#######.................] 6.37 MB 12.3%
Runtime dependencies (1)
Package Range Notes
nitro 3.0.260610-beta
Peer dependencies (14)
Package Range Notes
@ai-sdk/gateway catalog: optional peer
@ai-sdk/react catalog: optional peer
@opentelemetry/api ^1.0.0 optional peer
@sveltejs/kit ^2.0.0 optional peer
ai catalog:
braintrust ^3.0.0 optional peer
just-bash ^3.0.0 optional peer
microsandbox ^0.5.0 optional peer
next ^16.0.0 optional peer
nuxt ^4.0.0 optional peer
react ^19.0.0 optional peer
svelte ^5.0.0 optional peer
vite ^8.0.0 optional peer
vue ^3.5.0 optional peer
Function Drill-Down

Payload Size Graph

Unique function payload size and share of total
🔴 functions/.well-known/workflow/v1/flow.func     [########################] 5.48 MB 58.6%
🔴 functions/__server.func                         [#################.......] 3.87 MB 41.4%

Top Function Payloads

🟠 functions/.well-known/workflow/v1/flow.func • 1 public route • 5.48 MB
Metric Value
Public routes /.well-known/workflow/v1/flow
Runtime nodejs24.x
Handler index.mjs
Payload 5.48 MB
Function files 5.48 MB across 27 files
Traced dependencies 0 B
Signal 🟠 Bundled file __eve_nitro_handler__.mjs is 1.51 MB (27.5%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 __eve_nitro_handler__.mjs              [########################] 1.51 MB 27.5%
🟠 _chunks/runtime.mjs                    [###############.........] 958.4 kB 17.5%
🟡 _chunks/sandbox.mjs                    [############............] 766.0 kB 14.0%
🟡 _chunks/attribute-changes-Bi5DLT8S.mjs [########................] 472.2 kB 8.6%
🟡 _chunks/dist-DTchiX0N.mjs              [#######.................] 460.6 kB 8.4%
🟠 Other bundled files                    [#####################...] 1.31 MB 24.0%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x",
  "environment": {
    "NODE_OPTIONS": "--experimental-require-module",
    "WORKFLOW_QUEUE_NAMESPACE": "eve"
  },
  "maxDuration": "max",
  "experimentalTriggers": [
    {
      "type": "queue/v2beta",
      "topic": "__eve_wkf_workflow_*",
      "consumer": "default",
      "retryAfterSeconds": 5,
      "initialDelaySeconds": 0
    }
  ]
}

🟠 functions/__server.func • 8 public routes, 1 internal alias • 3.87 MB
Metric Value
Public routes /
/eve/v1/callback/[token]
/eve/v1/connections/[name]/callback/[token]
/eve/v1/health
/eve/v1/info
/eve/v1/session
/eve/v1/session/[sessionId]
/eve/v1/session/[sessionId]/stream
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 3.87 MB
Function files 3.87 MB across 21 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 1.40 MB (36.3%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                              [########################] 1.40 MB 36.3%
🟠 _chunks/runtime.mjs                    [###############.........] 875.8 kB 22.7%
🟠 _chunks/sandbox.mjs                    [#############...........] 766.0 kB 19.8%
🟡 _chunks/attribute-changes-Bi5DLT8S.mjs [########................] 448.5 kB 11.6%
⚪ _libs/zod.mjs                          [##......................] 114.2 kB 3.0%
🟡 Other bundled files                    [####....................] 258.8 kB 6.7%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x"
}

break;
}
enqueueEveTurn(transcript, event.itemId);
break;

@vercel vercel Bot Jun 22, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The responseInFlightRef echo-suppression guard is written but never read, so assistant audio transcribed back during an in-flight response is enqueued as a spurious durable Eve turn.

Fix on Vercel

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