Skip to content

fix(eve): compose the bridge with registered telemetry integrations - #1676

Closed
chadhietala wants to merge 1 commit into
instr/02-flat-eventsfrom
instr/03-compose-integrations
Closed

fix(eve): compose the bridge with registered telemetry integrations#1676
chadhietala wants to merge 1 commit into
instr/02-flat-eventsfrom
instr/03-compose-integrations

Conversation

@chadhietala

Copy link
Copy Markdown
Contributor

Third in the instrumentation-provider stack, on top of #1670.

Why

The AI SDK treats a per-call integrations list as replacing the globally registered ones, not adding to them:

When provided, these integrations will take precedence over the globally registered integrations for this call.

eve passes integrations whenever it attaches its instrumentation bridge, so anything an authored agent/instrumentation.ts installed with registerTelemetry stopped receiving events for exactly the calls it cared about. eve worked around this by hand-recomposing createOtelIntegration(), which covered eve's own OpenTelemetry integration and nothing else.

That is survivable today only because the bridge is dev-only. It has to be correct before the bridge runs everywhere, which the provider work depends on.

Approach

Read the registered integrations and compose the bridge ahead of them.

integrations:
  bridgeIntegration === undefined
    ? undefined
    : [bridgeIntegration, ...getRegisteredTelemetryIntegrations()],

Both shapes eve produces today are unchanged. With no authored instrumentation eve never calls ensureOtelIntegration, so nothing is registered and the list is just the bridge. With authored instrumentation eve's OpenTelemetry integration is registered, so the list is the bridge and that integration — the same pair as before, now the registered instance rather than a fresh one per call. What changes is that an integration eve did not install also survives.

otel-integration.ts becomes ai-sdk-telemetry.ts, since it no longer only wraps the OTel integration, and createOtelIntegration stops being exported for per-call composition.

Verification

  • pnpm fmt, pnpm lint, pnpm guard:invariants
  • pnpm --filter eve typecheck
  • pnpm test:unit — 5,893 passed
  • pnpm test:integration — 575 passed
  • Falsified the new coverage: reverting enrichTelemetry to [bridgeIntegration] fails composes the bridge with every registered integration.

A per-call `integrations` list replaces the AI SDK's registered
integrations rather than adding to them, so attaching eve's
instrumentation bridge silently stopped every integration an authored
module had installed with `registerTelemetry`. eve hand-recomposed only
its own OpenTelemetry integration, which covered eve but nothing else.

Read the registered integrations and compose the bridge ahead of them.
That is unchanged for both shapes eve produces today — nothing is
registered when there is no authored instrumentation, and eve's own
OpenTelemetry integration is the only entry when there is — while
anything an author registered now survives.

`otel-integration.ts` becomes `ai-sdk-telemetry.ts`: it no longer only
wraps the OTel integration.

Signed-off-by: Chad Hietala <chadhietala@gmail.com>
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
eve-docs Ready Ready Preview Aug 5, 2026 4:43pm
eve-docs-4759 Ready Ready Preview, v0 Aug 5, 2026 4:43pm

@chadhietala

Copy link
Copy Markdown
Contributor Author

Not needed yet. The bridge only exists when instrumentationPluginPath === undefined, so no authored instrumentation — and therefore nothing registered — can coexist with it. AI_SDK_TELEMETRY_INTEGRATIONS is always empty when eve passes integrations, and the [bridge, createOtelIntegration()] branch this replaced is unreachable.

This becomes live once #1661 runs structural agent instrumentation alongside authored instrumentation. Branch instr/03-compose-integrations (ac4520d) is left in place to rebase onto that.

@chadhietala chadhietala closed this Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

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

Key takeaways

  • No notable deltas vs instr/02-flat-events (725c9e7).

Delta vs instr/02-flat-events (725c9e7)

Area Metric Baseline Current Delta
Package Packed tarball 7.60 MB 7.60 MB +53 B ⚠️
Package Unpacked publish size 28.51 MB 28.52 MB +369 B ⚠️
Package Installed footprint 71.84 MB 71.84 MB +369 B ⚠️
Package Published files 2978 2978 0
Package Installed files 6677 6677 0
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 16.98 MB 16.98 MB +22 B ⚠️
Runtime Public routes 13 13 0
Changed function payloads vs instr/02-flat-events (725c9e7) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 8.49 MB 8.49 MB +11 B ⚠️ none
functions/.well-known/workflow/v1/flow.func changed 8.49 MB 8.49 MB +11 B ⚠️ none

eve init install

Metric Baseline Current Delta
Installed footprint 110.25 MB 110.25 MB +369 B ⚠️
Installed packages 121 121 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 42.93 MB 42.93 MB +369 B ⚠️
devDependency package bytes 5.04 MB 5.04 MB 0 B ➖
Build Metadata
  • Preset: vercel
  • Nitro: nitro@3.0.260610-beta
  • Output directory: apps/fixtures/weather-agent/.vercel/output
  • Build metadata timestamp: 2026-08-05T16:44:36.432Z
  • Route aliases: 13 public, 1 internal (14 total aliases)
  • Vercel routes in config: 16
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.29.5
  • Package directory: packages/eve
  • Tarball: 7.60 MB (eve-0.29.5.tgz)
  • Unpacked payload: 28.52 MB across 2978 published files
  • Installed footprint: 71.84 MB across 6677 installed files
  • Installed root package: 27.16 MB
  • Installed dependencies: 44.68 MB
  • Runtime dependencies: 2
  • Peer dependencies: 5 (4 optional)

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

Heavy installed dependencies

  • eve: 27.16 MB (37.8%)
  • @rolldown/binding-linux-x64-gnu: 19.35 MB (26.9%)
  • ai: 6.60 MB (9.2%)
  • zod: 5.07 MB (7.1%)
  • undici: 3.50 MB (4.9%)
Publish payload breakdown
Published file size
🔴 dist/src/compiled/shadcn-registry/index.js       [#################.......] 9.68 MB 34.0%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [####....................] 2.42 MB 8.5%
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [###.....................] 1.51 MB 5.3%
🟡 dist/src/compiled/_chunks/node/undici-DWL_MYm... [#.......................] 502.4 kB 1.8%
🟡 dist/src/compiled/_chunks/workflow/undici-DWL... [#.......................] 502.4 kB 1.8%
🔴 Other published files                            [########################] 13.90 MB 48.7%
Installed footprint breakdown
Installed package size
🔴 eve                             [########################] 27.16 MB 37.8%
🔴 @rolldown/binding-linux-x64-gnu [#################.......] 19.35 MB 26.9%
🔴 ai                              [######..................] 6.60 MB 9.2%
🔴 zod                             [####....................] 5.07 MB 7.1%
🟠 undici                          [###.....................] 3.50 MB 4.9%
🟠 nitro                           [##......................] 2.41 MB 3.3%
🔴 Other installed packages        [#######.................] 7.76 MB 10.8%
Runtime dependencies (2)
Package Range Notes
nitro 3.0.260610-beta
undici 8.9.0
Peer dependencies (5)
Package Range Notes
@opentelemetry/api ^1.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
eve init install drill-down

eve init install details

  • Command: eve init my-agent
  • Package manager: npm
  • Installed footprint: 110.25 MB across 8553 installed files
  • Installed packages: 121 total (115 transitive-only)
  • dependencies: 4 direct packages totaling 42.93 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 62.29 MB

Installed footprint is measured from an isolated temporary eve init my-agent using the current packed eve tarball.

Heavy installed dependencies

  • @typescript/typescript-linux-x64: 27.95 MB (25.3%)
  • eve: 27.16 MB (24.6%)
  • @rolldown/binding-linux-x64-gnu: 19.35 MB (17.5%)
  • zod: 9.02 MB (8.2%)
  • ai: 6.60 MB (6.0%)
Installed footprint breakdown
Installed package size
🔴 @typescript/typescript-linux-x64 [########################] 27.95 MB 25.3%
🔴 eve                              [#######################.] 27.16 MB 24.6%
🔴 @rolldown/binding-linux-x64-gnu  [#################.......] 19.35 MB 17.5%
🔴 zod                              [########................] 9.02 MB 8.2%
🔴 ai                               [######..................] 6.60 MB 6.0%
🟠 undici                           [###.....................] 3.50 MB 3.2%
🔴 Other installed packages         [##############..........] 16.67 MB 15.1%
dependencies (4)
Package Range Installed size Share
@vercel/connect 0.4.3 141.0 kB 0.1%
ai ^7.0.38 6.60 MB 6.0%
eve file:eve-0.29.5.tgz 27.16 MB 24.6%
zod 4.4.3 9.02 MB 8.2%
devDependencies (2)
Package Range Installed size Share
@types/node 24.x 2.54 MB 2.3%
typescript 7.0.2 2.50 MB 2.3%
Function Drill-Down

Payload Size Graph

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

Top Function Payloads

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

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                       [########################] 2.34 MB 27.6%
🟠 _chunks/runtime-artifacts.mjs   [################........] 1.60 MB 18.9%
🟡 _libs/undici.mjs                [##########..............] 980.5 kB 11.5%
🟡 _chunks/sandbox.mjs             [########................] 769.0 kB 9.1%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.8 kB 5.1%
🟠 Other bundled files             [########################] 2.37 MB 27.9%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x",
  "maxDuration": "max",
  "experimentalTriggers": [
    {
      "type": "queue/v2beta",
      "topic": "__eve776561746865722d6167656e74_wkf_workflow_*",
      "consumer": "default",
      "retryAfterSeconds": 5,
      "initialDelaySeconds": 0
    }
  ],
  "environment": {
    "WORKFLOW_PRECONDITION_GUARD": "1"
  }
}

🟠 functions/__server.func • 12 public routes, 1 internal alias • 8.49 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]/cancel
/eve/v1/session/[sessionId]/stream
/eve/v1/session/clear
/eve/v1/session/compact
/eve/v1/session/reset
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 8.49 MB
Function files 8.49 MB across 43 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 2.34 MB (27.6%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                       [########################] 2.34 MB 27.6%
🟠 _chunks/runtime-artifacts.mjs   [################........] 1.60 MB 18.9%
🟡 _libs/undici.mjs                [##########..............] 980.5 kB 11.5%
🟡 _chunks/sandbox.mjs             [########................] 769.0 kB 9.1%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.8 kB 5.1%
🟠 Other bundled files             [########################] 2.36 MB 27.9%

🧾 Vercel Config

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

Build Timing: e2e/fixtures/agent-tools-sandbox

This is an informational timing measurement inside eve build, from preflight through publication. Output-size measurement and profile writing are excluded.

Build mode: deployable Vercel build with sandbox template prewarm included.

  • Build pipeline: 2.35 s -> 2.13 s (-218.5 ms) vs instr/02-flat-events (725c9e7).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `instr/02-flat-events (725c9e7)`
Phase Baseline Current Delta
extension.check 7.3 ms 1.3 ms -6.0 ms
project.resolve 8.1 ms 0.6 ms -7.5 ms
workspace.create 11.8 ms 0.7 ms -11.1 ms
host.prepare 377.3 ms 187.5 ms -189.8 ms
vercel.service-prefix.resolve 1.9 ms 1.8 ms -0.1 ms
nitro.create 272.0 ms 260.6 ms -11.4 ms
sandbox.prewarm 235.4 ms 248.0 ms +12.6 ms
nitro.cache.prepare 0.2 ms 0.3 ms +0.1 ms
nitro.prepare 0.7 ms 0.7 ms 0.0 ms
nitro.public-assets 0.7 ms 0.7 ms 0.0 ms
nitro.prerender 0.5 ms 0.5 ms 0.0 ms
nitro.bundle 1.36 s 1.37 s +16.8 ms
nitro.cache.write 0.5 ms 0.3 ms -0.2 ms
vercel.workflow-function.materialize 69.9 ms 48.4 ms -21.5 ms
agent-summary.emit 0.6 ms 0.6 ms 0.0 ms
nitro.close 0.2 ms 0.2 ms 0.0 ms
output.publish 3.1 ms 3.1 ms 0.0 ms
workspace.remove 1.7 ms 1.7 ms 0.0 ms

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